75 Commits

Author SHA1 Message Date
b970cbc8ca Update kitty to install from GitHub on Debian
Older version of kitty have terrible font rendering on Linux, e.g. the
one shipped with Ubuntu 22.04, so instead install the latest version
from the provided GitHub packages.
2024-04-19 20:50:44 +01:00
e330c3d072 Fix use of stow to not fold directories 2024-04-19 20:50:23 +01:00
5309683d94 Add support for proxy networks & cleanup playbook vars 2024-04-19 13:17:53 +01:00
a1296840f6 Fix python role, actuall remove old pip.conf 2024-04-15 11:29:58 +01:00
5c78bd1da3 Add system-info macOS user service 2024-04-14 15:55:41 +01:00
7379986378 Run tmux install.sh instead of tasks.yaml 2024-04-13 16:30:30 +01:00
d5fc2c3c13 Move zsh install login into script
Enable installing zsh config repo standalone, i.e. without Ansible,
invoke the `install.zsh` script instead.
2024-04-13 16:12:24 +01:00
dc6b7776ff Update config repo branches for tmux & zsh 2024-04-13 14:36:22 +01:00
3fa17e5517 Fix ulauncher role on Fedora 2024-04-11 23:56:54 +01:00
ace72f755a Add ulauncher role 2024-04-11 21:35:28 +01:00
c4c03aabf4 Make guake package become root 2024-04-09 23:18:43 +01:00
e82bff66ce Don't install pynvim globally on Debian
For PEP 668 reasons.
2024-04-09 19:41:31 +01:00
947a6f1b87 Remove python config repo & use templates instead 2024-04-09 19:27:49 +01:00
9bf8c46bb9 Create pip.conf from a template, handle proxy network 2024-04-09 19:09:40 +01:00
a8f255b715 Add Guake role
Fixes #25
2024-04-08 23:54:45 +01:00
c5c12ab670 Remove set config repo email todos 2024-04-08 21:26:39 +01:00
18a74355c0 Expand launchd todo 2024-04-08 21:25:03 +01:00
f512ec427b Rename gnome-tweaks to gnome-shell
Also start gathering info for starting work on #17.
2024-04-07 23:48:54 +01:00
66efc7b88f Add gitea role for tea cli tool 2024-04-07 16:28:33 +01:00
e711b9f3b2 Add optional GitHub API authentication headers
If the `GITHUB_TOKEN` is defined in the Ansible controller's
environment it is used to set the GitHub REST API authentication header.
This is they passed to all `uri` modules tasks which interact with the
GitHub REST API. If the `GITHUB_TOKEN` is not set, the authentication
header is not used.

Fixes #19
2024-04-06 16:35:01 +01:00
883fee21b3 Add podman role
Fixes #12
2024-04-06 15:03:18 +01:00
035c9a7577 Install latest pynvim on Debian based systems
Fixes #21
2024-04-06 14:37:19 +01:00
8635277d75 Add role for fd 2024-04-06 13:51:40 +01:00
500b27a473 Add ripgrep role 2024-04-06 13:47:04 +01:00
19d0ac491b Replace Firefox Snap with Mozilla repo package
Fixes #20
2024-04-06 12:57:59 +01:00
b57c3f9916 Switch over to neovim specific config repo 2024-04-01 12:26:32 +01:00
5126d06e1e Use latest neovim from GitHub on Debian based distros 2024-03-02 00:42:27 +00:00
b63ff02e0c Update WSL playbook 2024-02-27 22:09:15 +00:00
ebf8cfac42 Make cider role usage more strict 2024-02-27 22:04:25 +00:00
643b4eac8d Add note about first time git install on windows 2023-12-23 23:16:35 +00:00
8cfb03bd4d Fix gnome-tweaks when clause 2023-11-28 23:05:36 +00:00
cf041f9747 Add rpmfusion role on Fedora 2023-11-24 22:48:40 +00:00
66e7d9dc76 Add gnome-tweaks role 2023-11-24 22:17:24 +00:00
c4ac91f163 Set EDITOR in .bashrc 2023-10-28 23:16:18 +01:00
9017be5cf7 Add cider role for Linux and Windows
Cider is a cross-platform Apple Music client. Don't bother installing
Cider on macOS since there is the first party Music app.
2023-10-24 00:07:19 +01:00
b4685b9d1e Create shortcut for Ferdium on Windows 2023-10-21 17:44:40 +01:00
e5cc78f6f4 Add url command to zsh symlinks 2023-10-19 18:06:04 +01:00
9df05dc567 Add macos role for macOS tweaks 2023-10-10 21:36:18 +01:00
37d89c475e Add hiddenbar role for macOS 2023-10-10 21:12:05 +01:00
fa0cf04d8f Fix kitty role on macOS 2023-10-10 21:11:50 +01:00
0d1993ef53 Fix win_git module for hidden folders 2023-10-06 10:51:28 +01:00
9fef9403b3 Fix pynvim on macOS by installing dependency 2023-10-01 23:42:44 +01:00
253cf462b3 Add macOS support to kitty role 2023-10-01 23:42:34 +01:00
54b3c4edfe Flatpak system installs require root 2023-09-25 11:20:52 +01:00
4489c05014 Replace yum with dnf where possible 2023-08-28 22:19:44 +01:00
520462a3f4 Add unsafe tags to zsh and tmux
When used in combination with the `--skip-tags unsafe` flag the
`playbooks/UnixCLI.yaml` can be run while inside a `zsh`/`tmux` session
without it locking up due to system files going missing due to the
upgrade.
2023-08-25 12:29:18 +01:00
aeba9ba7f2 Fix obsidian role when already using flatpak 2023-08-20 21:08:36 +01:00
669dffc2c5 Add ~/.local/bin to PATH in .bashrc 2023-08-18 10:54:30 +01:00
399300c162 Switch to obsidian from flathub 2023-08-17 23:45:34 +01:00
3a4224d200 Fix Fedora/RedHat config 2023-08-17 23:31:59 +01:00
afa680c4d1 Enable xremap on Debian/Ubuntu 2023-08-17 23:24:03 +01:00
cba3f6ce2a Name the chocolatey ferdium task 2023-08-01 21:06:51 +01:00
d37b675187 Override Ubuntu codename for neovim ppa 2023-08-01 20:57:10 +01:00
3364d770e1 Add flatpak role for Debian 2023-08-01 20:56:50 +01:00
9497da521c Fix 1password role on Debian 2023-08-01 19:32:32 +01:00
df00529f86 Use /etc/os-release to ID Ubuntu/Debian
Ansible facts aren't always enough to determine if a distro is derived
from Ubuntu or not, this is available from `/etc/os-release` when it
contains `ID_LIKE="ubuntu debian"`. This patch uses `/etc/os-release` to
correctly handle Ubuntu installations, e.g. PPA's, for all Ubuntu
derived dirtros rather than just Ubuntu itself.
2023-08-01 19:14:32 +01:00
58cd98c817 Always fixup clone win_git repo owner 2023-07-29 12:07:05 +01:00
3b312e6f9a Fix 1password role on Windows
When 1password is already installed and the installer is invoked, it
hangs because it launches the GUI and never returns.
2023-07-29 11:53:22 +01:00
e625f463d7 Add Windows support to fonts role 2023-07-29 11:33:20 +01:00
47d9c4c7e7 Remove broken win_git: module 2023-07-29 10:37:50 +01:00
0f78fe6a69 Fix obsidian desktop file icon 2023-07-27 23:39:57 +01:00
c78ea00ae4 Add ferdium role, prep for removing webcatalog
In the trend of 2023 enshitification webcatalog has decided to stop
shipping a Linux version so I'll be moving to fetdium with a self-hosted
server moving forwards.
2023-07-27 23:38:09 +01:00
bec20420ff Add custom win_git module that actually works 2023-07-27 22:09:45 +01:00
da132c5fb1 Fix become for old 1password keyring removal 2023-07-08 13:53:52 +01:00
ec6cc7013c Don't trust apt_repository: anymore
Still having issues with 1password on Debian based distros due to
mismatching `signed-by` keyring. It appears as if `apt_repository:` is
changing the `signed-by` path even though it was explicitly specified in
the `repo:` setting. Instead switch to using `copy:` for complete
control over the `/etc/apt/sources.list.d/1password.list` file.
2023-07-08 11:43:54 +01:00
31a819e481 Stop using apt_key: module to install keyrings
Fixes #16 by replacing uses of the `apt_key:` module with `get_url:` to
download apt keyrings into `/etc/apt/keyrings`, then used
`signed-by=/etc/path/keyrings/<keyring>` in the appropriate sources.list
file.
2023-06-24 11:25:54 +01:00
026969a32d Add todo to obsidian 2023-06-18 23:59:15 +01:00
65f44a8454 Install webcatalog icon from AppImage 2023-06-18 23:55:01 +01:00
960f853d1f Install obsidian icon from AppImage 2023-06-18 23:54:39 +01:00
5fbc85dade xremap role not currently working on Debian unstable
Only known to work on Fedora 38, service fails to start on Debian
unstable as of today.
2023-06-16 14:11:05 +01:00
befb02bc95 Make RedHat obsidian support work for all Linux 2023-06-16 10:42:13 +01:00
352ef4c8d4 Remove CAD apps because of Autodesk
Autodesk change distribution of Fusion360 to require a login breaking
the Chocolatey package, easier to manage this manually anyway since they
won't be installed on all Windows systems.
2023-06-10 11:18:30 +01:00
878db362cd Add xremap role for macOS bindings on Linux 2023-06-08 23:41:06 +01:00
49b292126e Add kitty role for Linux 2023-06-06 19:39:58 +01:00
67a37e0a56 Actually make LinuxCLI import UnixCLI 2023-06-04 21:39:06 +01:00
100 changed files with 1505 additions and 325 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,2 @@
external
modules/win_git*
playbooks/test.yaml

View File

@@ -1,5 +1,5 @@
[defaults]
collections_path = collections
library = modules
library = library
roles_path = roles
stdout_callback = yaml

232
library/win_git.ps1 Normal file
View File

@@ -0,0 +1,232 @@
#!powershell
#AnsibleRequires -CSharpUtil Ansible.Basic
#AnsibleRequires -PowerShell Ansible.ModuleUtils.CommandUtil
$module = [Ansible.Basic.AnsibleModule]::Create($args, @{
options = @{
dest = @{type = 'path'}
repo = @{required = $true; aliases = @('name')}
version = @{default = 'HEAD'; aliases = @('branch')}
remote = @{default = 'origin'}
recursive = @{default = $true; type = 'bool'}
executable = @{default = $null; type = 'path'}
}
supports_check_mode = $false
})
$dest = $module.Params.dest
$repo = $module.Params.repo
$version = $module.Params.version
$remote = $module.Params.remote
$git = $module.Params.executable
if (!$git) {
$git = Get-ExecutablePath 'git'
}
# ================================= Utilities ==================================
function Get-AbsolutePath {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)] [String] $path
)
try {
$result = Resolve-Path $path
} catch {
return $_[0].TargetObject
}
return $result
}
function Get-GitDir {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)] [String] $path
)
$git_dir = Join-Path $path '.git'
# Check if this .git is a file.
if ([System.IO.File]::Exists($git_dir)) {
# Extract the gitdir: path from the .git file.
$groups = Get-Content "$git_dir" | `
Select-String '(gitdir:) (.*)' | `
ForEach { $_.Matches[0].Groups[1..2] }
$ref_prefix = $groups[0]
$gitdir = $groups[1]
if ($ref_prefix -ne 'gitdir:') {
$module.FailJson('The .git file has invalid gitdir reference format.')
}
# Check if the repo path is absolute.
if ([System.IO.Path]::IsPathRooted($gitdir)) {
$git_dir = $gitdir
} else {
# Join with the input path to construct an absolute path.
$git_dir = Join-Path $path $gitdir
}
if (![System.IO.Directory]::Exists($git_dir)) {
throw "$git_dir is not a directory."
}
}
return $git_dir
}
function Test-GitLocalChanges {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)] [String] $dest
)
$command = "`"$git`" status --porcelain"
$result = Run-Command -command $command -working_directory $dest
$changes = $result.stdout.Split([System.Environment]::NewLine, `
[System.StringSplitOptions]::RemoveEmptyEntries) | `
Where-Object { -not $_.StartsWith('??') } | Measure-Object -Line
return $changes.Lines -gt 0
}
function Get-GitRemoteHeadBranch {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote
)
$command = "`"$git`" symbolic-ref --short refs/remotes/$remote/HEAD"
$result = Run-Command -command $command -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Could not determine the default HEAD branch of remote: $remote" ` +
"$result.stdout $result.stderr")
}
return $result.stdout.Trim().Replace("$remote/", '')
}
function Get-GitCurrentSha {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest
)
$command = "`"$git`" rev-parse HEAD"
$result = Run-Command -command $command -working_directory $dest
return $result.stdout.Trim()
}
function Invoke-GitClone {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $repo,
[Parameter(Mandatory = $true)] [String] $remote,
[Parameter(Mandatory = $true)] [String] $dest
)
$dest_parent = Split-Path -Path $dest -Parent
if (!(Test-Path $dest_parent)) {
New-Item -Path $dest_parent -ItemType Directory
}
$command = "`"$git`" clone --recursive --origin $remote $repo $dest"
if ($version -ne "HEAD") {
$command += " --branch $version"
}
$result = Run-Command -command $command -working_directory $cwd
if ($result.rc -ne 0) {
$module.FailJson($result.stderr)
}
}
function Invoke-GitCheckout {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote,
[Parameter(Mandatory = $true)] [String] $version
)
if ($version -eq "HEAD") {
$branch = Get-GitRemoteHeadBranch $dest $remote
} else {
$branch = $version
}
$result = Run-Command -command "`"$git`" checkout $branch" -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Failed to checkout version '$version'`n" + $result.stderr)
}
}
function Invoke-GitFetch {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote,
[Parameter(Mandatory = $true)] [String] $version
)
$command = "`"$git`" fetch --tags $remote"
$result = Run-Command -command $command -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Failed to download remote objects and refs:`n" + `
$result.stderr)
}
}
function Invoke-GitPull {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote,
[Parameter(Mandatory = $true)] [String] $version
)
$result = Run-Command -command "`"$git`" pull $remote $version" -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Failed to pull version '$version' from remote '$origin':`n" + `
$result.stderr)
}
}
function Invoke-GitSubmoduleUpdate {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest
)
$result = Run-Command -command "`"$git`" submodule update --init" -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Failed to initialized/update submodules:`n" + $result.stderr)
}
}
# ================================ Start logic =================================
if (!$dest) {
$module.FailJson('The destination directory must be specified.')
}
$dest = Get-AbsolutePath $dest
$git_dir = Get-GitDir $dest
$gitconfig = Join-Path $git_dir 'config'
$module.Result.before = $null
if (($dest -and ![System.IO.File]::Exists($gitconfig))) {
Invoke-GitClone $repo $remote $dest
Invoke-GitCheckout $dest $remote $version
$module.Result.changed = $true
} else {
$module.Result.before = Get-GitCurrentSha $dest
if (Test-GitLocalChanges $dest) {
$module.FailJson('Local modifications exist in repository.')
}
Invoke-GitFetch $dest $remote $version
Invoke-GitCheckout $dest $remote $version
Invoke-GitPull $dest $remote $version
$module.Result.after = Get-GitCurrentSha $dest
if ($module.Result.before -ne $module.Result.after) {
$module.Result.changed = $true
}
}
if ($recursive) {
Invoke-GitSubmoduleUpdate $dest
}
# Ensure the repository has the correct owner
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$idRef = [System.Security.Principal.NTAccount]::new($userName)
Get-Item -Force $dest | foreach { `
$_ ; $_ | Get-ChildItem -Force -Recurse `
} | foreach { `
$acl = $_ | Get-Acl; $acl.SetOwner($idRef); $_ | Set-Acl -AclObject $acl `
}
$module.ExitJson()

64
library/win_git.py Normal file
View File

@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
# TODO: copyright
DOCUMENTATION = '''
---
module: win_git
author:
- "Kenneth Benzie (Benie)"
short_description: Deploy software (or files) from git checkouts on Windows
description:
- Manage git checkouts of repositories to deploy files or software on Windows.
options:
data:
description:
- Alternate data to return instead of 'pong'.
- If this parameter is set to C(crash), the module will cause an
exception.
type: str
default: pong
seealso:
- module: ansible.builtin.git
'''
# DOCUMENTATION = r'''
# ---
# module: win_ping
# short_description: A windows version of the classic ping module
# description:
# - Checks management connectivity of a windows host.
# - This is NOT ICMP ping, this is just a trivial test module.
# - For non-Windows targets, use the M(ansible.builtin.ping) module instead.
# options:
# data:
# description:
# - Alternate data to return instead of 'pong'.
# - If this parameter is set to C(crash), the module will cause an exception.
# type: str
# default: pong
# seealso:
# - module: ansible.builtin.ping
# author:
# - Chris Church (@cchurch)
# '''
EXAMPLES = r'''
# Test connectivity to a windows host
# ansible winserver -m ansible.windows.win_ping
- name: Example from an Ansible Playbook
ansible.windows.win_ping:
- name: Induce an exception to see what happens
ansible.windows.win_ping:
data: crash
'''
RETURN = r'''
ping:
description: Value provided with the data parameter.
returned: success
type: str
sample: pong
'''

View File

@@ -1,4 +1,6 @@
---
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- 1password

View File

@@ -1,3 +1,21 @@
---
- import_playbook: LinuxCLI.yaml
- import_playbook: UnixGUI.yaml
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: firefox
- role: kitty
- role: guake
- role: cider
- role: ulauncher
- role: gnome-shell
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- role: xremap
when: >
'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and
ansible_env.XDG_SESSION_TYPE == 'wayland' and (
ansible_os_family == "RedHat" or
ansible_os_family == "Debian"
)

View File

@@ -1,5 +1,15 @@
---
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: rpmfusion
when: ansible_os_family == 'RedHat' and ansible_distribution == 'Fedora'
- import_playbook: UnixCLI.yaml
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: gdb
- role: podman
- role: system-info

View File

@@ -1,19 +1,24 @@
---
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: sudo
when: ansible_user_id != "root"
- role: python
- role: zsh
tags: unsafe
- role: neovim
- role: tmux
tags: unsafe
- role: ag
- role: bash
- role: bat
- role: curl
- role: editline
- role: fd
- role: fzf
- role: gh
- role: git
@@ -22,6 +27,7 @@
- role: jp
- role: jq
- role: readline
- role: ripgrep
- role: tidy
- role: tree
- role: watch

View File

@@ -1,7 +1,12 @@
---
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: flatpak
when: ansible_os_family != "Darwin"
- role: 1password
- role: ferdium
- role: fonts
- role: obsidian
- role: webcatalog

View File

@@ -1,6 +1,7 @@
---
- import_playbook: UnixCLI.yaml
- import_playbook: LinuxCLI.yaml
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: gdb
- role: wsl

View File

@@ -1,9 +1,7 @@
---
- hosts: windows
vars:
install_cad_apps: false
vars_files:
- vars/environment.yaml
roles:
- role: python
- role: git
@@ -14,9 +12,12 @@
- role: ag
- role: bat
- role: curl
- role: fd
- role: fzf
- role: gh
- role: glab
- role: jq
- role: ripgrep
- role: tree
- role: yq
@@ -25,12 +26,10 @@
- role: 1password
- role: autohotkey
- role: cider
- role: ferdium
- role: firefox
- role: fonts
- role: obsidian
- role: powertoys
- role: windows-terminal
- role: autodesk-fusion360
when: install_cad_apps
- role: prusaslicer
when: install_cad_apps

View File

@@ -1,14 +1,22 @@
---
- import_playbook: UnixCLI.yaml
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: system-info
- import_playbook: UnixGUI.yaml
- hosts: localhost
vars_files:
- vars/environment.yaml
roles:
- role: mas
- role: hiddenbar
- role: iterm
- role: kitty
- role: magnet
- role: microsoft-remote-desktop
- role: viscosity
- role: macos

View File

@@ -0,0 +1,15 @@
---
# GitHub may rate limit unauthenticated API requests, this is more likely when
# behind a network proxy. Set the GITHUB_TOKEN environment variable to
# authenticate any GitHub API requests executed while playing roles.
github_auth_headers: >-
{{ { 'Authorization': 'Bearer ' + lookup('env', 'GITHUB_TOKEN') }
if lookup('env', 'GITHUB_TOKEN') else {} }}
# When working behind a network proxy, set the http_proxy and https_proxy
# environment variables. These will be passed through to uses of the `get_url`
# module when playing roles.
proxy_environment: >-
{{ { 'http_proxy': lookup('env', 'http_proxy'),
'https_proxy': lookup('env', 'https_proxy') }
if lookup('env', 'http_proxy') and lookup('env', 'https_proxy') else {} }}

View File

@@ -1,16 +1,25 @@
---
- set_fact:
keyring: /etc/apt/trusted.gpg.d/1password-archive-keyring.gpg
- name: set keyring path
set_fact:
keyring: /etc/apt/keyrings/1password.asc
old_keyring: /etc/apt/trusted.gpg.d/1password-archive-keyring.gpg
- name: remove old keyring
become: true
file:
path: '{{old_keyring}}'
state: absent
- name: add apt signing key
when: '"WSL" not in ansible_kernel'
become: true
apt_key:
get_url:
url: https://downloads.1password.com/linux/keys/1password.asc
keyring: '{{keyring}}'
state: present
dest: '{{keyring}}'
environment: '{{proxy_environment}}'
- when: ansible_machine == 'x86_64'
- name: set compatible architecture
when: ansible_machine == 'x86_64'
set_fact:
arch: amd64
@@ -21,11 +30,16 @@
- name: add apt repository
when: '"WSL" not in ansible_kernel'
become: true
apt_repository:
repo: >-
copy:
content: >-
deb [arch={{arch}} signed-by={{keyring}}]
https://downloads.1password.com/linux/debian/{{arch}} stable main
filename: 1password
dest: /etc/apt/sources.list.d/1password.list
- name: apt update
become: true
apt:
update_cache: true
- name: install gui package
when: '"WSL" not in ansible_kernel'

View File

@@ -1,10 +1,10 @@
---
- name: add yum repository key
- name: add dnf repository key
become: true
rpm_key:
key: https://downloads.1password.com/linux/keys/1password.asc
- name: add yum repository
- name: add dnf repository
become: true
yum_repository:
name: 1password
@@ -15,8 +15,8 @@
repo_gpgcheck: true
gpgkey: ['https://downloads.1password.com/linux/keys/1password.asc']
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: 1password
state: latest

View File

@@ -11,36 +11,22 @@
path: '{{app_exe}}'
register: app_stat
- name: get installed version
when: app_stat.stat.exists == True
win_command: '{{app_exe}} --version'
register: app_version
changed_when: false
- when: app_stat.stat.exists == True
set_fact:
installed_version: '{{app_version.stdout.strip()}}'
- name: download latest installer
when: not app_stat.stat.exists
win_get_url:
url: https://downloads.1password.com/win/1PasswordSetup-latest.exe
dest: '{{installer_exe}}'
- name: get installer version
win_shell: |
(Get-ItemProperty {{installer_exe}}).VersionInfo.ProductVersion
register: installer_product_version
changed_when: false
# FIXME: The [5:] is to account for a mystery "\e[6 q" prefix, not sure if this
# is consistent across machines or some other oddity.
- set_fact:
installer_version: '{{installer_product_version.stdout.strip()[5:]}}'
environment: '{{proxy_environment}}'
- name: run installer
when: installed_version is not defined or installed_version != installer_version
when: not app_stat.stat.exists
win_command: '{{installer_exe}}'
- name: remove installer
win_file:
path: '{{installer_exe}}'
state: absent
- name: create start menu shortcut
win_shortcut:
src: '{{app_exe}}'
@@ -83,6 +69,7 @@
win_get_url:
url: '{{latest.downloads.Windows.amd64}}'
dest: '{{cli_zip}}'
environment: '{{proxy_environment}}'
- name: unzip op zip archive
when: cli_installed_version is not defined or cli_installed_version != latest.version

View File

@@ -1,6 +1,6 @@
---
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: the_silver_searcher
state: latest

View File

@@ -1,8 +0,0 @@
---
- assert:
that: ansible_os_family == "Windows"
- name: install chocolatey package
win_chocolatey:
name: autodesk-fusion360
state: latest

View File

@@ -9,10 +9,6 @@
repo: git@code.infektor.net:config/AutoHotKey.git
dest: '{{autohotkey_repo_dir}}'
branch: master
- win_owner:
path: '{{autohotkey_repo_dir}}'
user: Benie
recurse: true
- name: create scheduled task
win_scheduled_task:

View File

@@ -110,3 +110,13 @@ grey="\001\e[38;5;244m\002"
reset="\001\e[0m\002"
PS1="$yellow\u$reset@$grey\h$reset "
# Setup environment variables
export PATH=$HOME/.local/bin:$PATH
if command -v nvim > /dev/null; then
export EDITOR=nvim
elif command -v vim > /dev/null; then
export EDITOR=vim
elif command -v vi > /dev/null; then
export EDITOR=vi
fi

View File

@@ -1,6 +1,6 @@
---
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: bat
state: latest

View File

@@ -2,6 +2,7 @@
- name: get latest github release
uri:
url: https://api.github.com/repos/sharkdp/bat/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
@@ -50,6 +51,7 @@
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{bat_deb}}'
environment: '{{proxy_environment}}'
- name: install .deb file
when: installed_version is not defined or installed_version != latest_version

View File

@@ -0,0 +1,15 @@
---
- assert:
that: ansible_os_family != 'Darwin'
- name: install chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: Cider
state: latest
- name: install flatpak package
when: ansible_os_family != 'Windows'
become: true
flatpak:
name: sh.cider.Cider

View File

@@ -1,6 +1,6 @@
---
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: curl
state: latest

26
roles/fd/tasks/main.yaml Normal file
View File

@@ -0,0 +1,26 @@
---
- name: install apt package
when: ansible_os_family == 'Debian'
become: true
apt:
name: fd-find
state: latest
- name: install dnf package
when: ansible_os_family == 'RedHat'
become: true
dnf:
name: fd-find
state: latest
- name: install Homebrew package
when: ansible_os_family == 'Darwin'
homebrew:
name: fd
state: latest
- name: install Chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: fd
state: latest

View File

@@ -0,0 +1,14 @@
---
- name: install chocolatey package
win_chocolatey:
name: ferdium
state: latest
- set_fact:
ferdium_exe: 'C:/Program Files/Ferdium/Ferdium.exe'
- name: create start menu shortcut
win_shortcut:
src: '{{ferdium_exe}}'
dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/Ferdium.lnk'
icon: '{{ferdium_exe}},0'

View File

@@ -0,0 +1,16 @@
---
- name: install homebrew package
when: ansible_os_family == 'Darwin'
homebrew_cask:
name: ferdium
state: latest
- when: ansible_os_family == 'Windows'
include_tasks: Windows.yaml
- name: install flatpak package
when: ansible_os_family != 'Windows' and
ansible_os_family != 'Darwin'
become: true
flatpak:
name: org.ferdium.Ferdium

View File

@@ -0,0 +1,52 @@
---
- name: remove snap package
become: true
snap:
name: firefox
state: absent
- name: create keyrings directory
become: true
file:
path: /etc/apt/keyrings
mode: '755'
state: directory
- name: install mozilla repo keyring
become: true
get_url:
url: https://packages.mozilla.org/apt/repo-signing-key.gpg
dest: /etc/apt/keyrings/packages.mozilla.org.asc
environment: '{{proxy_environment}}'
- name: add mozilla apt repo
become: true
copy:
content: >-
deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc]
https://packages.mozilla.org/apt mozilla main
dest: /etc/apt/sources.list.d/mozilla.list
- name: pin mozilla package
become: true
copy:
content: |
Package: *
Pin: origin packages.mozilla.org
Pin-Priority: 1000
dest: /etc/apt/preferences.d/mozilla
- name: install mozilla package
become: true
apt:
name: firefox
state: latest
allow_downgrade: true
update_cache: true
- name: install gnome shell integration
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
become: true
apt:
name: chrome-gnome-shell
state: latest

View File

@@ -1,2 +1,5 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
- include_tasks: Windows.yaml
when: ansible_os_family == 'Windows'
- include_tasks: Ubuntu.yaml
when: ansible_distribution == 'Ubuntu'

View File

@@ -0,0 +1,6 @@
---
- name: install apt package
become: true
apt:
name: flatpak
state: latest

View File

@@ -0,0 +1,6 @@
---
- name: install dnf package
become: true
dnf:
name: flatpak
state: latest

View File

@@ -0,0 +1,9 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
- name: add flathub repository remote
become: true
flatpak_remote:
name: flathub
state: present
flatpakrepo_url: https://dl.flathub.org/repo/flathub.flatpakrepo

View File

@@ -17,6 +17,7 @@
- name: get latest release
uri:
url: https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
@@ -36,6 +37,7 @@
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
environment: '{{proxy_environment}}'
- name: install Caskaydia Cove Nerd Font
when: needs_installed

View File

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: nerd-fonts-CascadiaCode
state: latest

View File

@@ -1,5 +1,7 @@
---
- when: ansible_os_family == 'Darwin'
include_tasks: 'Darwin.yaml'
- when: ansible_os_family == 'Windows'
include_tasks: 'Windows.yaml'
- when: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
include_tasks: 'Linux.yaml'

View File

@@ -1,6 +1,6 @@
---
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: fzf
state: latest

View File

@@ -15,6 +15,7 @@
url: https://cli.github.com/packages/githubcli-archive-keyring.gpg
dest: /usr/share/keyrings/githubcli-archive-keyring.gpg
mode: 0644
environment: '{{proxy_environment}}'
- name: add apt repository list
become: true

View File

@@ -1,9 +1,10 @@
---
- name: add yum repository
- name: add dnf repository
become: true
get_url:
url: https://cli.github.com/packages/rpm/gh-cli.repo
dest: /etc/yum.repos.d/gh-cli.repo
environment: '{{proxy_environment}}'
- name: install dnf package
become: true

View File

@@ -2,6 +2,7 @@
- name: get json containing all releases
win_uri:
url: 'https://api.github.com/repos/git-for-windows/git/releases/tags/v{{git_version}}.windows.1'
headers: '{{github_auth_headers}}'
return_content: true
register: git_release
@@ -18,6 +19,7 @@
win_get_url:
url: '{{git_asset.browser_download_url}}'
dest: '{{git_installer_path}}'
environment: '{{proxy_environment}}'
- name: run installer command
win_command:

View File

@@ -31,17 +31,13 @@
- include_tasks: Windows-installer.yaml
when: git_run_installer
# NOTE: If this is failing on first install of git, restart the sshd service.
- name: clone config repos
win_git:
repo: '{{item.repo}}'
dest: '{{ansible_env.USERPROFILE}}/.config/{{item.name}}'
version: master
with_items: '{{git_config_repos}}'
- win_owner:
path: '{{ansible_env.USERPROFILE}}/.config/{{item.name}}'
user: Benie
recurse: true
with_items: '{{git_config_repos}}'
# - TODO: install pip packages
# win_pip:

View File

@@ -0,0 +1,50 @@
---
- name: stat tea executable
stat:
path: '{{tea_package_exe}}'
register: tea
- name: get installed version
when: tea.stat.exists
command: '{{tea_package_exe}} --version'
register: tea_version_string
- name: extract version number
when: tea.stat.exists
set_fact:
installed_version: "{{tea_version_string.stdout |
regex_search('^.*(\\d+\\.\\d+\\.\\d+).*golang.*$', '\\1') }}"
- name: get latest release json
uri:
url: https://gitea.com/api/v1/repos/gitea/tea//releases/latest
register: latest
- name: check installed version
set_fact:
install_required: >
{{not tea.stat.exists or latest.json.name != 'v' + installed_version[0]}}
asset: '{{latest.json.assets | json_query(tea_asset_query)}}'
- name: create package directory
when: install_required
become: true
file:
state: directory
path: '{{tea_package_dir}}/bin'
- name: download package
when: install_required
become: true
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{tea_package_exe}}'
mode: '0755'
environment: '{{proxy_environment}}'
- name: install package
when: install_required
become: true
command:
cmd: 'stow --no-folding --target /usr/local .'
chdir: '{{tea_package_dir}}'

View File

@@ -0,0 +1,12 @@
---
- when: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
include_tasks: Linux.yaml
- when: ansible_os_family == 'Windows'
include_tasks: Windows.yaml
- name: install homebrew package
when: ansible_os_family == 'Darwin'
homebrew:
name: tea
state: latest

View File

@@ -0,0 +1,4 @@
---
tea_package_dir: /usr/local/stow/tea
tea_package_exe: '{{tea_package_dir}}/bin/tea'
tea_asset_query: '[?contains(name, `tea-`)] | [?contains(name, `linux-amd64`)] | [0]'

View File

@@ -48,6 +48,7 @@
get_url:
url: '{{asset.url}}'
dest: '{{tempdir.path}}/glab.deb'
environment: '{{proxy_environment}}'
- name: install .deb file
when: glab_version is not defined or glab_version != latest_version

View File

@@ -0,0 +1,30 @@
---
- assert:
that: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- name: install gnome-tweaks
become: true
package:
name: gnome-tweaks
state: latest
# NOTE: Use this command to see default keybindings
# gsettings list-recursively | grep -i -E 'media-keys|keybindings'
# NOTE: Use this command to inspect the current state of the custom keybindings
# dconf dump / | sed -n '/\[org.gnome.settings-daemon.plugins.media-keys/,/^$/p'
# TODO: List of custom-keybindings
# [org/gnome/settings-daemon/plugins/media-keys]
# custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
# TODO: 1Password Quick Access
# [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
# binding='<Shift><Alt>space'
# command='1password --quick-access'
# name='1Password Quick Access'
# TODO: Guake toggle - this requires removing a default binding
# [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1]
# binding='<Super>space'
# command='guake-toggle'
# name='Guake Toggle'

View File

@@ -0,0 +1,9 @@
---
- assert:
that: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
- name: install package
become: true
package:
name: guake
state: latest

View File

@@ -0,0 +1,8 @@
---
- assert:
that: ansible_os_family == 'Darwin'
- name: install homebrew package
homebrew_cask:
name: hiddenbar
state: latest

View File

@@ -2,6 +2,7 @@
- name: get latest github release
uri:
url: https://api.github.com/repos/jmespath/jp/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
@@ -39,3 +40,4 @@
url: '{{asset.browser_download_url}}'
dest: '{{jp_exe}}'
mode: +x
environment: '{{proxy_environment}}'

View File

@@ -19,6 +19,7 @@
- name: get latest release
uri:
url: 'https://api.github.com/repos/jmespath/jp/releases/latest'
headers: '{{github_auth_headers}}'
register: latest
- name: determine if jp needs installed
@@ -49,3 +50,4 @@
url: '{{asset.browser_download_url}}'
dest: '{{ansible_env.HOME}}/.local/bin/jp'
mode: '0755'
environment: '{{proxy_environment}}'

View File

@@ -0,0 +1,5 @@
---
- name: install homebrew package
homebrew_cask:
name: kitty
state: latest

View File

@@ -0,0 +1,98 @@
---
- name: remove apt package
become: true
apt:
name: kitty
state: absent
- name: get latest version
uri:
url: https://api.github.com/repos/kovidgoyal/kitty/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
kitty_latest_version: '{{latest.json.tag_name[1:]}}'
kitty_exe: /usr/local/bin/kitty
kitty_package_dir: /usr/local/stow/kitty
- name: check if already installed
stat:
path: '{{kitty_exe}}'
register: kitty
- name: get installed version
when: kitty.stat.exists
command: '{{kitty_exe}} --version'
register: kitty_version
changed_when: false
- when: kitty.stat.exists
set_fact:
kitty_install_version:
'{{kitty_version.stdout | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
- set_fact:
kitty_asset_query: >
[? contains(name,
`kitty-{{kitty_latest_version}}-{{ansible_architecture}}.txz`)] | [0]
- set_fact:
kitty_install_required: >
{{ kitty_install_version is not defined or
kitty_latest_version != kitty_install_version }}
kitty_asset: "{{ latest.json.assets | json_query(kitty_asset_query) }}"
- name: uninstall package
when: kitty_install_required and kitty.stat.exists
become: true
command:
cmd: 'stow --delete --target /usr/local .'
chdir: '{{kitty_package_dir}}'
- name: remove outdated package
when: kitty_install_required and kitty.stat.exists
become: true
file:
state: absent
path: '{{kitty_package_dir}}'
- set_fact:
kitty_package_archive: '{{kitty_package_dir}}/{{kitty_asset.name}}'
- name: create package directory
become: true
file:
state: directory
path: '{{kitty_package_dir}}'
- name: download package
when: kitty_install_required
become: true
get_url:
url: '{{kitty_asset.browser_download_url}}'
dest: '{{kitty_package_archive}}'
environment: '{{proxy_environment}}'
- name: decompress package
when: kitty_install_required
become: true
unarchive:
src: '{{kitty_package_archive}}'
dest: '{{kitty_package_dir}}'
owner: root
group: staff
- name: remove package archive
when: kitty_install_required
become: true
file:
state: absent
path: '{{kitty_package_archive}}'
- name: install package
when: kitty_install_required
become: true
command:
cmd: 'stow --no-folding --target /usr/local .'
chdir: '{{kitty_package_dir}}'

View File

@@ -0,0 +1,6 @@
---
- name: install dnf package
become: true
dnf:
name: kitty
state: latest

View File

@@ -0,0 +1,7 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
- name: clone config repo
git:
repo: git@code.infektor.net:config/kitty.git
dest: ~/.config/kitty

View File

@@ -1,5 +1,17 @@
---
- name: slurp /etc/os-release
slurp:
src: /etc/os-release
register: os_release_slurp
- set_fact:
os_release: "{{ os_release_slurp.content |
b64decode | trim() | replace('=', ': ') | from_yaml }}"
- include_tasks: Ubuntu.yaml
when: "'ID_LIKE' in os_release and os_release.ID_LIKE == 'ubuntu debian'"
- name: install apt packages
when: "'ID_LIKE' not in os_release"
become: true
apt:
name:

View File

@@ -1,2 +0,0 @@
---
- include_tasks: Ubuntu.yaml

View File

@@ -1,2 +0,0 @@
---
- include_tasks: Ubuntu.yaml

View File

@@ -2,6 +2,7 @@
- name: get latest stable github release
uri:
url: https://api.github.com/repos/llvm/llvm-project/releases/latest
headers: '{{github_auth_headers}}'
register: llvm_latest
- name: read /etc/os-release
@@ -25,11 +26,45 @@
'http://apt.llvm.org/{{ubuntu_codename}}/'
llvm_apt_category:
'llvm-toolchain-{{ubuntu_codename}}-{{llvm_major_version}}'
keyring: '/etc/apt/keyrings/llvm.asc'
- name: remove old keyring
when: '"WSL" not in ansible_kernel'
become: true
apt_key:
url: https://apt.llvm.org/llvm-snapshot.gpg.key
id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
state: absent
- name: remove old upstream deb repository
become: true
apt_repository:
repo: 'deb {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
state: absent
filename: llvm
update_cache: false
- name: remove old upstream deb-src repository
become: true
apt_repository:
repo: 'deb-src {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
state: absent
filename: llvm
update_cache: false
- name: add apt repository key
become: true
get_url:
url: https://apt.llvm.org/llvm-snapshot.gpg.key
dest: '{{keyring}}'
environment: '{{proxy_environment}}'
- name: add upstream deb repository
become: true
apt_repository:
repo: 'deb {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
repo: >
deb [signed-by={{keyring}}]
{{llvm_apt_repo_url}} {{llvm_apt_category}} main
state: present
filename: llvm
update_cache: false
@@ -37,18 +72,13 @@
- name: add upstream deb-src repository
become: true
apt_repository:
repo: 'deb-src {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
repo: >
deb-src [signed-by={{keyring}}]
{{llvm_apt_repo_url}} {{llvm_apt_category}} main
state: present
filename: llvm
update_cache: false
- name: add apt repository key
become: true
apt_key:
url: https://apt.llvm.org/llvm-snapshot.gpg.key
id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
state: present
- name: update apt cache
become: true
apt:

View File

@@ -1,5 +1,2 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
when: ansible_os_family in ['Darwin', 'Windows']
- include_tasks: '{{ansible_distribution}}.yaml'
when: ansible_os_family not in ['Darwin', 'Windows']

View File

@@ -0,0 +1,9 @@
---
- assert:
that: ansible_os_family == 'Darwin'
- name: disable creation of .DS_Store in directories
osx_defaults:
domain: com.apple.desktopservices
key: DSDontWriteNetworkStores
value: 'true'

View File

@@ -6,6 +6,12 @@
state: latest
- set_fact:
neovim_pip_packages: '{{neovim_pip_packages + ["pynvim"]}}'
neovim_pip_packages: >
{{
neovim_pip_packages + [
"pynvim",
"greenlet"
]
}}
- include_tasks: Unix.yaml

View File

@@ -1,18 +1,136 @@
---
- name: add neovim stable ppa
when: ansible_distribution == 'Ubuntu' and
ansible_distribution_version == '20.04'
become: true
apt_repository:
repo: ppa:neovim-ppa/stable
update_cache: true
# Don't neovim packages because they are all behind, even Debian unstable.
# Instead use the latest pre-build Linux package from GitHub, then stow them
# into /usr/local.
- name: install apt package
- name: remove apt package
become: true
apt:
name: neovim
state: absent
- set_fact:
old_package_dir: '/usr/local/lib/nvim/nvim-linux64'
- name: check if old package directory exists
stat:
path: '{{old_package_dir}}'
register: old_package
- name: uninstall package from old directory
when: old_package.stat.exists
become: true
command:
cmd: 'stow --delete --target /usr/local .'
chdir: '{{old_package_dir}}'
- name: remove old package directory
when: old_package.stat.exists
become: true
file:
state: absent
path: '{{old_package_dir}}'
- name: install gnu stow for managing tar.gz package
become: true
apt:
name:
- neovim
- python3-neovim
- stow
state: latest
- name: install python provider pip package
pip:
name: pynvim
state: latest
- name: stat installed executable
stat:
path: /usr/local/bin/nvim
register: nvim
- name: get installed version
when: nvim.stat.exists
command: nvim --version
register: nvim_version
changed_when: false
- when: nvim.stat.exists
set_fact:
installed_version: '{{nvim_version.stdout_lines[0][5:]}}'
- name: get latest version
uri:
url: https://api.github.com/repos/neovim/neovim/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
install_required:
'{{installed_version is not defined or
installed_version != latest.json.tag_name}}'
asset_query: '[?contains(name, `nvim-linux64.tar.gz`)]'
package_dir: '/usr/local/stow/nvim'
- set_fact:
uninstall_required: '{{nvim.stat.exists and install_required}}'
asset: '{{latest.json.assets | json_query(asset_query)}}'
package_path: '{{package_dir}}/{{latest.json.name}}'
- name: uninstall old package from /usr/local
when: uninstall_required
become: true
command:
cmd: 'stow --delete --target /usr/local .'
chdir: '{{package_dir}}/nvim-linux64'
- name: remove old package
become: true
when: uninstall_required
file:
path: '{{package_dir}}/nvim-linux64'
state: absent
- name: create package directory
become: true
file:
path: '{{package_dir}}'
state: directory
- name: download package archive
when: install_required
become: true
get_url:
url: '{{asset[0].browser_download_url}}'
dest: '{{package_path}}'
environment: '{{proxy_environment}}'
- name: extract package archive
when: install_required
become: true
unarchive:
src: '{{package_path}}'
dest: '{{package_dir}}'
- name: remove downloaded archive
when: install_required
become: true
file:
path: '{{package_path}}'
state: absent
- name: move man to share/man
when: install_required
become: true
command:
argv:
- mv
- '{{package_dir}}/nvim-linux64/man'
- '{{package_dir}}/nvim-linux64/share'
- name: install package to /usr/local
when: install_required
become: true
command:
cmd: 'stow --no-folding --target /usr/local .'
chdir: '{{package_dir}}/nvim-linux64'
- include_tasks: Unix.yaml

View File

@@ -4,9 +4,9 @@
- name: clone config repo
git:
repo: git@code.infektor.net:config/vim.git
repo: git@code.infektor.net:config/nvim.git
dest: '{{vim_config_dir}}'
version: master
version: main
- name: install pip packages
pip:

View File

@@ -26,6 +26,13 @@
file_type: directory
register: found_plugins
- set_fact:
backslashes: '\\'
forwardslash: '/'
- set_fact:
managed_plugins: "{{managed_plugins | replace(backslashes, forwardslash)}}"
found_plugins: "{{found_plugins | replace(backslashes, forwardslash)}}"
- name: remove found plugins which are not in the managed list
win_file:
path: '{{item.path}}'

View File

@@ -10,21 +10,10 @@
- name: clone config repo
win_git:
repo: git@code.infektor.net:config/vim.git
repo: git@code.infektor.net:config/nvim.git
dest: '{{vim_config_dir}}'
branch: master
# clone: false
update: true
- win_owner:
path: '{{vim_config_dir}}'
user: Benie
recurse: true
branch: main
- assert:
that: False
# - TODO: neovim set repo email
# win_git_config:
# - TODO: neovim install pip packages
# win_pip:
# name: '{{neovim_pip_packages}}'
@@ -50,10 +39,18 @@
src: '{{vim_config_dir}}/tasks.yaml'
dest: vim_config_tasks.yaml
flat: true
changed_when: false
- when: config_repo_tasks.stat.exists
include_tasks: vim_config_tasks.yaml
- name: remove fetched tasks
file:
state: absent
path: vim_config_tasks.yaml
changed_when: false
delegate_to: localhost
- when: ansible_os_family != "Windows" and
plugin_dir is defined and plugins is defined
include_tasks: 'Unix-plugins.yaml'

View File

@@ -13,6 +13,7 @@
get_url:
url: 'https://nodejs.org/dist/{{latest.json[0].version}}/node-{{latest.json[0].version}}-linux-x64.tar.gz'
dest: ~/.local/src/node/node.tar.gz
environment: '{{proxy_environment}}'
- name: extract downloaded package
unarchive:

View File

@@ -1,6 +1,6 @@
---
- name: install yum package
- name: install dnf package
become: true
yum:
dnf:
name: nodejs
state: latest

View File

@@ -0,0 +1,32 @@
---
- name: install flatpak package
become: true
flatpak:
name: md.obsidian.Obsidian
# Remove old appimage if it exists
- name: stat appimage symlink
stat:
path: '{{ansible_env.HOME}}/.local/bin/Obsidian'
register: symlink_file
- set_fact:
iconpath: 'share/icons/hicolor/512x512/apps/obsidian.png'
- name: remove appimage icon file
file:
dest: '{{ansible_env.HOME}}/.local/{{iconpath}}'
state: absent
- name: remove appimage desktop file
file:
dest: '{{ansible_env.HOME}}/.local/share/applications/obsidian-obsidian.desktop'
state: absent
- name: remove old appimage
when: "'lnk_source' in symlink_file.stat"
file:
path: '{{symlink_file.stat.lnk_source}}'
state: absent
- name: remove appimage symlink
file:
path: '{{ansible_env.HOME}}/.local/bin/Obsidian'
state: absent
- include_tasks: Unix.yaml

View File

@@ -1,48 +0,0 @@
---
- name: stat symlink
stat:
path: '{{ansible_env.HOME}}/.local/bin/Obsidian'
register: symlink_file
- name: get latest release
uri:
url: https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest
register: latest
- set_fact:
appimage: 'Obsidian-{{latest.json.name}}.AppImage'
- set_fact:
filepath: '{{ansible_env.HOME}}/.local/bin/{{appimage}}'
asset_query: '[?contains(name, `{{appimage}}`)] | [0]'
- set_fact:
needs_installed:
'{{not symlink_file.stat.exists or symlink_file.stat.lnk_source != filepath}}'
asset: '{{latest.json.assets | to_json | from_json | json_query(asset_query)}}'
- name: download latest version
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{filepath}}'
mode: '0755'
- name: create symlink
file:
src: '{{filepath}}'
dest: '{{ansible_env.HOME}}/.local/bin/Obsidian'
state: link
# TODO: icon for desktop file
- name: create desktop file
template:
src: obsidian.desktop.j2
dest: '{{ansible_env.HOME}}/.local/share/applications/obsidian-obsidian.desktop'
notify: install desktop menu
- name: remove old appimage
when: needs_installed and symlink_file.stat.exists
file:
path: '{{symlink_file.stat.lnk_source}}'
state: absent
- include_tasks: Unix.yaml

View File

@@ -12,7 +12,3 @@
repo: git@github.com:kbenzie/notes.git
dest: '{{obsidian_notes_repo}}'
branch: main
- win_owner:
path: '{{obsidian_notes_repo}}'
user: Benie
recurse: true

View File

@@ -1,2 +1,5 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
when: ansible_os_family == "Darwin" or ansible_os_family == "Windows"
- include_tasks: 'Linux.yaml'
when: ansible_os_family != "Darwin" and ansible_os_family != "Windows"

View File

@@ -3,7 +3,7 @@ Name=Obsidian
Exec={{ansible_env.HOME}}/.local/bin/Obsidian
Terminal=false
Type=Application
Icon=obsidian
Icon={{ansible_env.HOME}}/.local/{{iconpath}}
StartupWMClass=Obsidian
X-AppImage-Version={{latest.json.name}}
Comment=Private and flexible notetaking app that adapts to the way you think.

View File

@@ -0,0 +1,26 @@
---
- name: install apt package
when: ansible_os_family == 'Debian'
become: true
apt:
name: podman
state: latest
- name: install dnf package
when: ansible_os_family == 'RedHat'
become: true
dnf:
name: podman
state: latest
- name: install Homebrew package
when: ansible_os_family == 'Darwin'
homebrew:
name: podman-desktop
state: latest
- name: install Chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: podman-desktop
state: latest

View File

@@ -5,13 +5,9 @@
- name: clone config repos
win_git:
repo: git@code.infektor.net:config/WindowsPowerShell.git
repo: https://code.infektor.net/config/WindowsPowerShell.git
dest: '{{powershell_config_dir}}'
branch: master
- win_owner:
path: '{{powershell_config_dir}}'
user: Benie
recurse: true
- name: install chocolatey package
win_chocolatey:

View File

@@ -1,14 +0,0 @@
---
- assert:
that: ansible_os_family == "Windows"
- name: install chocolatey package
win_chocolatey:
name: prusaslicer
state: latest
- name: create start menu shortcut
win_shortcut:
src: '{{ansible_env.ProgramData}}/chocolatey/bin/prusa-slicer.exe'
dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/PrusaSlicer.lnk'
icon: '{{ansible_env.ProgramData}}/chocolatey/bin/prusa-slicer.exe,0'

View File

@@ -1,7 +1,7 @@
---
- name: install yum packages
- name: install dnf packages
become: true
yum:
dnf:
name:
- python3
- python3-pip

View File

@@ -1,10 +1,14 @@
---
- name: install config repo
git:
repo: git@code.infektor.net:config/python.git
dest: ~/.config/python
- name: stat old config repo
stat:
path: ~/.config/python/.git
register: config_python_git
# TODO: set repo email
- name: remove old config repo
when: config_python_git.stat.exists
file:
state: absent
dest: ~/.config/python
- name: create config directories
file:
@@ -15,34 +19,45 @@
- ~/.config/ipython/profile_default
- ~/.config/pip
# Ensure that pip.conf exists before ever installing pip packages since
# Debian has enabled `EXTERNALLY-MANAGED` from PEP 668 which breaks `pip
# install --user` unless configured otherwise.
- name: create symbolic links
- name: stat pip.conf
stat:
path: ~/.config/pip/pip.conf
register: pip_conf
- name: remove pip.conf if its a symbolic link
when: pip_conf.stat.islnk
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/python/flake8
dest: ~/.config/flake8
- src: ~/.config/python/pylintrc
dest: ~/.pylintrc
- src: ~/.config/python/ipython_config.py
dest: ~/.config/ipython/profile_default/ipython_config.py
- src: ~/.config/python/pip.conf
dest: ~/.config/pip/pip.conf
state: absent
path: ~/.config/pip/pip.conf
# Ensure that pip.conf exists before ever installing pip packages since Debian
# has enabled `EXTERNALLY-MANAGED` from PEP 668 which breaks `pip install
# --user` unless configured otherwise.
- name: create user pip.conf from template
template:
src: pip.conf.j2
dest: ~/.config/pip/pip.conf
# TODO: Also configure pip to disable `EXTERNALLY-MANAGED` globally?
- name: stat old ipython_config.py
stat:
path: ~/.config/ipython/profile_default/ipython_config.py
register: ipython_config_py
- name: remove ipython_conifg.py if its a symbolic link
when: ipython_config_py.stat.islnk
file:
state: absent
path: ~/.config/ipython/profile_default/ipython_config.py
- name: create ipython config from template
template:
src: ipython_config.py
dest: ~/.config/ipython/profile_default/ipython_config.py
- name: install pip packages
pip:
name: '{{python_pip_packages}}'
state: latest
extra_args: --user
- name: create directories
file:
state: directory
dest: '{{item}}'
with_items:
- ~/.config/ipython/profile_default
- ~/.config/pip

View File

@@ -6,7 +6,6 @@
state: latest
# TODO: - name: install config repo
# TODO: - name: set repo email
# TODO: - name: install pip packages
# TODO: - name: create config directories/files

View File

@@ -0,0 +1 @@
c.TerminalInteractiveShell.editing_mode = 'vi'

View File

@@ -0,0 +1,8 @@
[global]
break-system-packages = true
{% if ansible_env.http_proxy is defined %}
proxy = {{ ansible_env.http_proxy }}
{% endif %}
[list]
format=columns

View File

@@ -0,0 +1,26 @@
---
- name: install apt package
when: ansible_os_family == 'Debian'
become: true
apt:
name: ripgrep
state: latest
- name: install dnf package
when: ansible_os_family == 'RedHat'
become: true
dnf:
name: ripgrep
state: latest
- name: install Homebrew package
when: ansible_os_family == 'Darwin'
homebrew:
name: ripgrep
state: latest
- name: install Chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: ripgrep
state: latest

View File

@@ -0,0 +1,31 @@
---
- assert:
that: ansible_os_family == 'RedHat' and ansible_distribution == 'Fedora'
- name: install rpm fusion free gpg key
become: true
rpm_key:
key: 'https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-free-fedora-2020'
state: present
- name: install rpmfusion free repository
become: true
dnf:
name:
'https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-{{ansible_distribution_major_version}}.noarch.rpm'
state: present
validate_certs: no
- name: install rpmfusion non-free gpg key
become: true
rpm_key:
key: 'https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-nonfree-fedora-2020'
state: present
- name: install rpmfusion non-free repository
become: true
dnf:
name:
'https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-{{ansible_distribution_major_version}}.noarch.rpm'
state: present
validate_certs: no

View File

@@ -1,4 +1,25 @@
---
# TODO:
# cp $script_dir/system-info.plist ~/Library/LaunchAgents/system-info.plist
# launchctl load -w ~/Library/LaunchAgents/system-info.plist
- name: get list of running launchd services
command: launchctl list
register: launchd_running_services
changed_when: false
- name: determine if system-info is currently running
set_fact:
system_info_debug: true
system_info_plist_path: '{{ansible_env.HOME}}/Library/LaunchAgents/system-info.plist'
system_info_running: "{{'system-info' in launchd_running_services.stdout}}"
- name: install system-info launchd plist
template:
src: system-info.plist.j2
dest: '{{system_info_plist_path}}'
register: system_info_plist
- name: unload running system-info launchd service
when: system_info_plist.changed and system_info_running
command: 'launchctl unload -w {{system_info_plist_path}}'
- name: load system-info launchd service
when: system_info_plist.changed or not system_info_running
command: 'launchctl load -w {{system_info_plist_path}}'

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>system-info</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>Program</key>
<string>{{ansible_env.HOME}}/.config/tmux/system-info/system-info-macOS.sh</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

View File

@@ -18,6 +18,7 @@
get_url:
url: https://gist.githubusercontent.com/nicm/ea9cf3c93f22e0246ec858122d9abea1/raw/37ae29fc86e88b48dbc8a674478ad3e7a009f357/tmux-256color
dest: ~/tmux-256color
environment: '{{proxy_environment}}'
- name: compile terminal info
when: terminfo_exists.rc == 1

View File

@@ -1,7 +1,7 @@
---
- name: install yum packages
- name: install dnf packages
become: true
yum:
dnf:
name:
- tmux
- sysstat

View File

@@ -5,8 +5,9 @@
git:
repo: git@code.infektor.net:config/tmux.git
dest: ~/.config/tmux
version: master
version: main
# TODO: - name: set repo email
- include_tasks: ~/.config/tmux/tasks.yaml
- name: run install script
command: ~/.config/tmux/install.sh
register: tmux_install
changed_when: "'changed' in tmux_install.stdout"

View File

@@ -0,0 +1,32 @@
---
- name: install keyring
when: ansible_distribution == 'Debian'
become: true
get_url:
url: '{{ulauncher_keyring_url}}'
dest: '{{ulauncher_keyring_path}}'
mode: '0644'
force: true
environment: '{{proxy_environment}}'
- name: add apt sources list
when: ansible_distribution == 'Debian'
become: true
copy:
content: >-
deb [signed-by={{ulauncher_keyring_path}}]
http://ppa.launchpad.net/agornostal/ulauncher/ubuntu
{{ansible_distribution_release}} main"
dest: '{{ulauncher_apt_sources_list_path}}'
- name: add ppa repository
when: ansible_distribution != 'Debian'
become: true
apt_repository:
repo: ppa:agornostal/ulauncher
- name: install apt package
become: true
apt:
name: ulauncher
state: latest

View File

@@ -0,0 +1,6 @@
---
- name: install dnf package
become: true
dnf:
name: ulauncher
state: latest

View File

@@ -0,0 +1,2 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'

View File

@@ -0,0 +1,4 @@
---
ulauncher_keyring_url: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x59ebde772980c381ca13fa59faf1020699503176
ulauncher_keyring_path: /usr/share/keyrings/ulauncher-archive-keyring.gpg
ulauncher_apt_list_path: /etc/apt/sources.list.d/ulauncher.list

View File

@@ -16,6 +16,7 @@
appimage: 'WebCatalog-{{releases[0].version}}.AppImage'
- set_fact:
filepath: '{{ansible_env.HOME}}/.local/bin/{{appimage}}'
iconpath: 'share/icons/hicolor/512x512/apps/webcatalog.png'
- set_fact:
needs_installed:
@@ -27,6 +28,15 @@
url: 'https://cdn-2.webcatalog.io/webcatalog/{{appimage}}'
dest: '{{ansible_env.HOME}}/.local/bin/{{appimage}}'
mode: '0755'
environment: '{{proxy_environment}}'
- name: create directories
file:
path: '{{item}}'
state: directory
with_items:
- '{{ansible_env.HOME}}/.local/bin'
- '{{ansible_env.HOME}}/.local/share/icons/hicolor/512x512/apps'
- name: create symlink
file:
@@ -34,7 +44,23 @@
dest: '{{ansible_env.HOME}}/.local/bin/WebCatalog'
state: link
# TODO: icon for desktop file
- name: extract squashfs-root for app icon
when: needs_installed
command:
cmd: '{{ansible_env.HOME}}/.local/bin/WebCatalog --appimage-extract'
chdir: '/tmp'
- name: copy icon file
when: needs_installed
copy:
src: '/tmp/squashfs-root/usr/{{iconpath}}'
dest: '{{ansible_env.HOME}}/.local/{{iconpath}}'
- name: remove squashfs-root directory
when: needs_installed
file:
path: '/tmp/squashfs-root'
state: absent
- name: create desktop file
template:

View File

@@ -1,5 +1,6 @@
---
- name: create wsl.conf
become: true
template:
src: templates/wsl.conf.j2
dest: /etc/wsl.conf
@@ -34,25 +35,6 @@
dest: external
state: directory
- name: clone ansible win_git module
git:
repo: https://github.com/tivrobo/ansible-win_git.git
dest: external/ansible-win_git
version: master
- name: create ansible modules directory
file:
dest: ~/.ansible/plugins/modules
state: directory
- name: copy win_git files to ansible modules directory
copy:
src: '~/.config/local/external/ansible-win_git/{{item}}'
dest: '~/.config/local/modules/{{item}}'
with_items:
- win_git.ps1
- win_git.py
- name: read /etc/resolv.conf file contents
set_fact:
resolv_conf: '{{lookup("ansible.builtin.file", "/etc/resolv.conf")}}'

View File

@@ -0,0 +1,7 @@
---
- name: restart xremap
systemd:
name: xremap
scope: user
daemon_reload: true
state: restarted

View File

@@ -0,0 +1,136 @@
---
- assert:
that: >
'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and
ansible_env.XDG_SESSION_TYPE == 'wayland'
- set_fact:
install_dir: '{{ansible_env.HOME}}/.local/bin'
config_dir: '{{ansible_env.HOME}}/.config/xremap'
- set_fact:
executable_path: '{{install_dir}}/xremap'
- name: stat executable
stat:
path: '{{executable_path}}'
register: executable
- name: get installed version
when: executable.stat.exists
command: '{{executable_path}} --version'
register: version_command
changed_when: false
- name: extract version from command output
when: executable.stat.exists
set_fact:
installed_version:
'v{{version_command.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
- name: get latest release
uri:
url: https://api.github.com/repos/k0kubun/xremap/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- name: determine if install needed
set_fact:
needs_installed:
'{{not executable.stat.exists or installed_version != latest.json.name}}'
xdg_current_desktop:
"{{ansible_env.XDG_CURRENT_DESKTOP | regex_replace('(.*:)?(.*)', '\\2')}}"
- name: construct asset query
set_fact:
asset_query: >
[?contains(name, `xremap-linux-{{ansible_architecture}}-{{
xdg_current_desktop | lower}}.zip`)] | [0]
- name: get release asset
set_fact:
asset: '{{latest.json.assets | to_json | from_json | json_query(asset_query)}}'
- name: create directories
file:
path: '{{item}}'
state: directory
with_items:
- '{{install_dir}}'
- '{{config_dir}}'
- name: download release archive
when: needs_installed
become: true
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{install_dir}}/xremap.zip'
environment: '{{proxy_environment}}'
- name: extract release archive
when: needs_installed
become: true
unarchive:
src: '{{install_dir}}/xremap.zip'
dest: '{{install_dir}}'
- name: remove release archive
when: needs_installed
become: true
file:
path: '{{install_dir}}/xremap.zip'
state: absent
- name: add user to input group
become: true
user:
name: '{{ansible_user_id}}'
append: true
groups: input
- name: load the uinput kernel module
when: ansible_os_family == 'Debian'
become: true
copy:
content: |
uinput
dest: /etc/modules-load.d/uinput.conf
# TODO: This works for on Fedora, author uses it on Ubuntu so I assume Debian
# will work too. Arch and other distros are potentially different see the docs
# https://github.com/k0kubun/xremap
- name: add udev rule for input access
become: true
copy:
content: |
KERNEL=="uinput", GROUP="input", TAG+="uaccess"
dest: /etc/udev/rules.d/input.rules
- name: clone config repo
git:
repo: git@code.infektor.net:config/xremap.git
dest: '{{config_dir}}'
notify: restart xremap
- name: install xremap systemd unit
template:
src: xremap.service.j2
dest: ~/.config/systemd/user/xremap.service
notify: restart xremap
- name: enable xremap service
systemd:
name: xremap
scope: user
enabled: true
state: started
- name: check if extension is installed
command: gnome-extensions show xremap@k0kubun.com
changed_when: false
failed_when: false
register: extension
- when: extension.rc != 0
debug:
msg: 'install gnome extension then reboot:
https://extensions.gnome.org/extension/5060/xremap'
changed_when: true

View File

@@ -0,0 +1,10 @@
[Unit]
Description=macOS Key Remapping
[Service]
Type=simple
ExecStart={{executable_path}} {{config_dir}}/macOS.yaml
Restart=on-failure
[Install]
WantedBy=default.target

View File

@@ -2,6 +2,7 @@
- name: get latest github release
uri:
url: https://api.github.com/repos/mikefarah/yq/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
@@ -35,3 +36,4 @@
url: '{{asset.browser_download_url}}'
dest: '{{yq_exe}}'
mode: +x
environment: '{{proxy_environment}}'

View File

@@ -19,6 +19,7 @@
- name: get latest release
uri:
url: 'https://api.github.com/repos/mikefarah/yq/releases/latest'
headers: '{{github_auth_headers}}'
register: latest
- name: determine if yq needs installed
@@ -49,3 +50,4 @@
url: '{{asset.browser_download_url}}'
dest: '{{ansible_env.HOME}}/.local/bin/yq'
mode: '0755'
environment: '{{proxy_environment}}'

View File

@@ -1,7 +1,7 @@
---
- name: install yum packages
- name: install dnf packages
become: true
yum:
dnf:
name:
- zsh
- pinentry-tty

View File

@@ -5,77 +5,12 @@
git:
repo: git@code.infektor.net:config/zsh.git
dest: ~/.config/zsh
version: master
version: main
- name: clone plugin repos
git:
repo: '{{item.repo}}'
dest: '{{item.dest}}'
with_items:
- repo: https://github.com/zsh-users/zsh-autosuggestions.git
dest: ~/.config/zsh/zsh-autosuggestions
- repo: https://github.com/zsh-users/zsh-history-substring-search.git
dest: ~/.config/zsh/zsh-history-substring-search
- repo: https://github.com/zsh-users/zsh-syntax-highlighting.git
dest: ~/.config/zsh/zsh-syntax-highlighting
- repo: https://github.com/zsh-users/zsh-completions.git
dest: ~/.config/zsh/zsh-completions
loop_control:
label: '{{item.repo | regex_search("https://github.com/(.*)\.git$", "\1")}}'
- name: create directories
file:
state: directory
dest: '{{item}}'
with_items:
- ~/.local/bin
- ~/.local/share/zsh/site-functions
- name: create symbolic links
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/zsh/zlogin
dest: ~/.zlogin
- src: ~/.config/zsh/zlogout
dest: ~/.zlogout
- src: ~/.config/zsh/zprofile
dest: ~/.zprofile
- src: ~/.config/zsh/zshenv
dest: ~/.zshenv
- src: ~/.config/zsh/zshrc
dest: ~/.zshrc
- src: ~/.config/zsh/prompt_fresh_setup
dest: ~/.local/share/zsh/site-functions/prompt_fresh_setup
- src: ~/.config/zsh/build/_build-dir
dest: ~/.local/share/zsh/site-functions/_build-dir
- src: ~/.config/zsh/sandbox/_sandbox
dest: ~/.local/share/zsh/site-functions/_sandbox
- src: ~/.config/zsh/layout/_layout
dest: ~/.local/share/zsh/site-functions/_layout
- src: ~/.config/zsh/notes/_note
dest: ~/.local/share/zsh/site-functions/_note
- src: ~/.config/zsh/cmake-uninstall
dest: ~/.local/bin/cmake-uninstall
- src: ~/.config/zsh/$
dest: ~/.local/bin/$
loop_control:
label: '{{item.dest}}'
- name: list commands with available completions
command:
zsh {{ansible_env.HOME}}/.config/zsh/list-commands-with-available-completions.zsh
changed_when: false
register: completion_commands
- name: install completions for available commands
file:
state: link
src: '~/.config/zsh/zsh-completions/src/_{{item}}'
dest: '~/.local/share/zsh/site-functions/_{{item}}'
with_items: '{{completion_commands.stdout}}'
- name: run install script
command: ~/.config/zsh/install.zsh
register: zsh_install
changed_when: "'changed' in zsh_install.stdout"
- name: get absolute path
shell: command -v zsh