93 Commits

Author SHA1 Message Date
30c99c6516 temp! 2023-06-08 23:42:40 +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
1f4c43a4a1 Ignore test playbook 2023-06-03 11:22:25 +01:00
3b31dc06fe Rearrange playbooks, add Linux specific ones 2023-06-03 11:20:41 +01:00
876db8ecfb Add missing CLI roles to UnixCLI.yaml playbook 2023-06-03 09:47:13 +01:00
959f4b2b32 Add RedHat support to wget role 2023-06-03 09:46:16 +01:00
d8c6c6a808 Add RedHat support to gdb role 2023-06-03 09:45:57 +01:00
5420eb9cd5 Add RedHat support for the glab role 2023-06-03 09:34:07 +01:00
3fee590a8f Move some updated GUI roles into generic playbook 2023-06-02 20:03:14 +01:00
0b71c22019 Add RedHat support to the obsidian role 2023-06-02 20:03:14 +01:00
db0b181473 Use Linux system packages for neovim python integration 2023-06-02 20:03:14 +01:00
65d96b2faa Add Linux support to webcatalog role 2023-06-02 20:03:14 +01:00
1749c78364 Add Linux support to fonts role 2023-06-01 23:00:07 +01:00
b560f9c7d9 Add support for Fedora to various roles 2023-06-01 20:06:46 +01:00
8ef426139b Add bashrc template for bash role 2023-05-15 22:25:30 +01:00
d1c3184400 Enable systemd in WSL 2023-05-12 22:31:01 +01:00
910be1641d Make Windows .exe's work with systemd enabled 2023-05-12 22:20:31 +01:00
d4393851b1 Switch system-info to systemd on WSL 2023-05-12 22:20:05 +01:00
8fae111d0e Remove local coc-settings.json 2023-05-02 19:11:50 +01:00
5b62791bf6 Fix glab role on Debian for first install 2023-04-29 19:18:04 +01:00
ad9d1fbe4f Add glab role for macOS, Debiam distros, and Windows 2023-04-29 00:44:36 +01:00
c4d4f5395a Use local ansible.cfg
Since moving playbooks to their own subdirectory they were no longer
able to find the roles. Add a local `ansible.cfg` which configures the
default paths for roles, modules, and collections. Also change the
location of the `win_git` module to the new local directory.
2023-04-27 23:04:44 +01:00
5ac1081f90 Update git role to read tasks.yaml from cloned repo 2023-04-20 12:51:08 +01:00
a80d8e1574 Move playbooks into their own directory 2023-04-15 12:44:10 +01:00
dbd8af4648 Fix various first run issues 2023-04-14 16:49:56 +01:00
23f0fd7f23 Make it so pip install --user still works
Debian has enabled `EXTERNALLY-MANAGED` from PEP 668 which breaks `pip
install --user`. I think this is a terrible decision, understandable to
want to avoid modifications in `/usr/lib/python*/site-packages` but to
have that stop be installing packages in my home directory is a big
mistake in terms of usability. In any case this patch moves the
configuration of `pip.conf` to occur before any other roles are
processed, seting the override flag, even though I'm never actually
touching the real site packages.
2023-03-04 11:33:11 +00:00
bdbb6a3f3b Create zsh completion symlinks for installed commands 2023-02-18 15:06:51 +00:00
7148f492b0 Re-enable apt install of fzf no new Debian 2023-02-17 21:27:28 +00:00
03de2224f8 Use old fzf install method on 22.04 and older 2023-02-14 16:30:41 +00:00
d4d37fb6bc Ensure PrusaSlicer has a Windows start menu shortcut 2023-02-11 20:56:21 +00:00
1608987eef Enable neovim stable backport ppa on Ubuntu 20.04 2023-02-08 13:51:53 +00:00
b4d4bd0664 Don't install osx-cpu-temp anymore
`osx-cpu-temp` doesn't work on Apple Silicon.
2023-02-05 23:03:28 +00:00
39268ae7aa Add Linux Mint support to llvm role 2023-02-04 16:50:34 +00:00
368982b8fa Make 1password role use consistent filenames on Debian 2023-02-04 16:12:36 +00:00
b3cd84e181 Add missing become: true to jq on Debian 2023-02-04 16:04:52 +00:00
b0d2fd212e Remove debug from gh role on Debian 2023-02-04 16:04:28 +00:00
f7ee7af25c Use homebrew_cask for item install
`homebrew:` doesn't handle upgrading casks gracefull, use
`homebrew_cask:` instead.
2023-02-03 18:00:20 +00:00
50a9cc97b6 Install gh zsh completions 2023-01-04 14:23:33 +00:00
e2d1414c3b Add microsoft-remote-desktop role for macOS 2022-12-19 12:40:16 +00:00
576eb2ae41 Add editline role 2022-12-15 20:49:44 +00:00
69bcd75f7b Add webcatalog role for macOS 2022-12-10 23:35:51 +00:00
d32588dbfd Add viscosity role for macOS 2022-12-10 23:31:35 +00:00
4783803a77 Add iterm role for macOS 2022-12-10 23:24:32 +00:00
1ad397771d Fix macOS tmux terminfo issue with htop 2022-12-10 23:22:55 +00:00
6ff50854e0 Add magnet & mas for macOS
The `mas` role installed the command-line tool of the same name to
install Mac App Store package. The `magnet` role then uses `mas` to
install the tiling window manager from the App Store.
2022-12-10 22:44:50 +00:00
5cba48f632 Ensure tmux-256color exists on macOS
As outlined in [this
gist](https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95)
the version of `ncurses` shipped with macOS is too old to be aware of
the `tmux-256color` terminal info database which is the default in
`tmux`. This patch downloads the latest `ncurses` terminal info database
and uses that to install the `tmux-256color` entry for the current user
in `~/.terminfo`. This ensures that bold, italic, etc, are working
correctly and `git` does not throw warnings as noted
[here](1e2c00aa32)
2022-12-10 22:18:50 +00:00
7e9166cb48 Add font role for macOS (initially) 2022-12-10 16:27:15 +00:00
747f1a6992 Add watch role for macOS, implicitly installed on Linux 2022-12-10 16:08:20 +00:00
db3d146dc9 Fix playbook imports 2022-12-10 15:45:46 +00:00
91839b927d Fix obsidian role on macOS 2022-12-10 15:45:30 +00:00
c5e2a76d2e Fix jp role on macOS 2022-12-10 15:27:02 +00:00
baa0206937 Make sudo role work on macOS 2022-12-09 15:19:40 +00:00
2abc38f696 Add gh role for macOS, Windows, and Debian 2022-12-08 11:42:15 +00:00
63ff47c3b2 Don't install xclip or xsel in WSL
Newer WSL2 has issues with `xclip`/`xsel` behaviour which cause Windows
GUI's to freeze waiting for input from an already exited process.
Switching to `win32yank.exe` for clipboard integrations.
2022-12-03 18:53:12 +00:00
da4b8858d3 Split out Unix into UnixCLI and UnixGUI 2022-12-02 19:11:22 +00:00
d95f1f7e32 Switch to Ansible for managing neovim plugins 2022-11-16 18:37:42 +00:00
7da67aaed0 Add labels for improve zsh role output 2022-11-11 17:27:16 +00:00
7ec59f8c52 Add sudo role for Unix systems 2022-11-07 14:38:50 +00:00
bebe6de7cd Set gdb config file based on installed version 2022-11-06 19:47:36 +00:00
08af0f00b6 Add CAD software to Windows playbook
The `autodesk-fusion360` and `prusiaslicer` roles are added to the
`Windows.yaml` playbook but disabled by default behind the
`install_cad_apps` flag. To enable them create a `~/.config/local.yaml`
file with the following:

```yaml
- import_playbook: local/Windows.yaml
  vars:
    install_cad_apps: true
```
2022-11-06 15:54:54 +00:00
3864c0f35d Add PrusaSlicer role for Windows 2022-11-06 15:31:02 +00:00
3218722fcb Add AutoDesk Fusion 360 role for Windows 2022-11-06 15:26:16 +00:00
1895f1561d Ensure $(hostname).local is in hosts file on WSL 2022-11-06 10:56:19 +00:00
cee0c443a3 Add gdb role for Debian 2022-11-05 20:05:48 +00:00
bb945190f8 Add readline role for Unix like systems 2022-11-04 12:53:20 +00:00
4f5a2e6333 Fix htop not setting become: true 2022-11-03 11:47:39 +00:00
833f9a25ef Add powertoys role for Windows 2022-10-31 23:26:07 +00:00
1fbdcdd487 Include jq, yq, and jp in relevant playbooks 2022-10-30 23:23:48 +00:00
9efb5d6c15 Add role for jp on macOS and Debian 2022-10-30 23:23:23 +00:00
d99657e3b8 Fix type in jq task comment 2022-10-30 23:23:04 +00:00
b159445520 Ensure win_owner is recursive for win_git repos 2022-10-29 12:59:19 +01:00
6a4a182cf5 Add role for yq on Debina, macOS, and Windows 2022-10-28 19:41:16 +01:00
55cc3441be Add role for jq on Debina, macOS, and Windows 2022-10-28 18:56:01 +01:00
bd4e5f1941 Always install fzf from apt on Debian
`fzf` is in the `apt` repos for all distros used.
2022-10-08 13:56:03 +01:00
c9845be40c Fix tidy role on Debian 2022-10-06 18:13:51 +01:00
f47b45d82c Use op.exe on WSL for biometrics 2022-10-03 22:45:07 +01:00
854bf8d1e9 Add wget role for macOS & Debian 2022-09-20 22:51:54 +01:00
3272331f08 Add role for htop on macOS/Debian 2022-09-20 18:54:50 +01:00
8c9af58146 Include tasks from tmux config repo 2022-09-20 13:43:01 +01:00
e4a08c843c Fix ag/curl roles on macOS 2022-09-20 12:52:04 +01:00
c77b356968 Add tidy role for http://www.html-tidy.org/ 2022-09-16 10:43:00 +01:00
7404c0ae59 Add curl role 2022-09-10 16:29:27 +01:00
06b511d823 Set the owner of Git repos on Windows
The `win_git` module clones repos as the current user, which since its
an admin login is the admin. This patch adjusts the `win_owner` to so
that repos are owned by the correct user when being used in a non-admin
capacity.
2022-09-10 16:18:21 +01:00
9693194f7f Update powershell role to better handle first install 2022-09-10 15:34:18 +01:00
337237a6e8 Pin Git to v2.36.1 on Windows so win_git works
Git for Windows v2.37.3 (and probably all version in the v2.37 series)
cause the unofficial win_git module to hang. Downgrading the v2.36.1
works around this issue for the time being. The Chocolatey package for
Git also does not respect the version flag, so installation is now
performed manually by grabbing the v2.36.1 installer from the GitHub
release asset and running it manually when installation is required.
2022-09-10 15:04:54 +01:00
31eba75038 On Windows move git role to the beginning 2022-09-10 11:52:07 +01:00
5728aba7df Don't include system-info role in WSL 2022-08-27 17:44:22 +01:00
76b6d63064 Improve bat role 2022-08-27 17:40:00 +01:00
189371d7f2 Fix macOS playbook import 2022-08-12 21:16:29 +01:00
491a9a07b5 Merge op role into 1password role
Additionally:

* Stop using Chocolatey packages for 1password as they are not up to
  date, instead download and install directly.
* Switch to apt repository on Debian.
* Add zsh completions for macOS and Dabian.
* Add powershell completions for Windows.
2022-08-12 21:16:29 +01:00
c4e87f2022 Implement system-info role on Debian 2022-07-29 18:01:03 +01:00
09e7ec3ad4 Merge op role into 1password role
Additionally:

* Stop using Chocolatey packages for 1password as they are not up to
  date, instead download and install directly.
* Switch to apt repository on Debian.
* Add zsh completions for macOS and Dabian.
* Add powershell completions for Windows.
2022-07-03 11:25:05 +01:00
160 changed files with 2018 additions and 296 deletions

2
.gitignore vendored
View File

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

View File

@@ -1,12 +0,0 @@
{
"yaml.schemas": {
"https://raw.githubusercontent.com/ansible-community/schemas/main/f/ansible.json#/$defs/playbook": [
"./*.yaml"
],
"https://raw.githubusercontent.com/ansible-community/schemas/main/f/ansible.json#/$defs/tasks": [
"./roles/*/handlers/*.yaml",
"./roles/*/tasks/*.yaml",
"./tasks.yaml"
]
}
}

View File

@@ -1,22 +0,0 @@
---
- hosts: localhost
roles:
- role: zsh
- role: neovim
- role: tmux
- role: system-info
- role: ag
- role: bat
- role: fzf
- role: git
- role: op
- role: tree
- role: llvm
- role: nodejs
- role: python
- role: wsl
when: '"WSL" in ansible_kernel'

View File

@@ -1,3 +0,0 @@
---
- import_playbook: Unix.yaml
- import_playbook: Windows.yaml

5
ansible.cfg Normal file
View File

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

View File

@@ -1,7 +0,0 @@
---
- import_playbook: unix.yaml
- hosts: localhost
roles:
- role: obsidian

4
playbooks/1password.yaml Normal file
View File

@@ -0,0 +1,4 @@
---
- hosts: localhost
roles:
- 1password

7
playbooks/Linux.yaml Normal file
View File

@@ -0,0 +1,7 @@
---
- import_playbook: LinuxCLI.yaml
- import_playbook: UnixGUI.yaml
- hosts: localhost
roles:
- role: gnome-shell
- role: kitty

6
playbooks/LinuxCLI.yaml Normal file
View File

@@ -0,0 +1,6 @@
---
- import_playbook: UnixCLI.yaml
- hosts: localhost
roles:
- role: gdb
- role: system-info

32
playbooks/UnixCLI.yaml Normal file
View File

@@ -0,0 +1,32 @@
---
- hosts: localhost
roles:
- role: sudo
when: ansible_user_id != "root"
- role: python
- role: zsh
- role: neovim
- role: tmux
- role: ag
- role: bash
- role: bat
- role: curl
- role: editline
- role: fzf
- role: gh
- role: git
- role: glab
- role: htop
- role: jp
- role: jq
- role: readline
- role: tidy
- role: tree
- role: watch
- role: wget
- role: yq
- role: llvm
- role: nodejs

7
playbooks/UnixGUI.yaml Normal file
View File

@@ -0,0 +1,7 @@
---
- hosts: localhost
roles:
- role: 1password
- role: fonts
- role: obsidian
- role: webcatalog

6
playbooks/WSL.yaml Normal file
View File

@@ -0,0 +1,6 @@
---
- import_playbook: UnixCLI.yaml
- hosts: localhost
roles:
- role: gdb
- role: wsl

View File

@@ -1,23 +1,36 @@
---
- hosts: windows
vars:
install_cad_apps: false
roles:
- role: python
- role: git
- role: powershell
- role: neovim
- role: system-info
- role: ag
- role: bat
- role: curl
- role: fzf
- role: git
- role: op
- role: gh
- role: jq
- role: tree
- role: yq
- role: llvm
- role: nodejs
- role: python
- role: 1password
- role: autohotkey
- role: firefox
- role: obsidian
- role: powertoys
- role: windows-terminal
- role: autodesk-fusion360
when: install_cad_apps
- role: prusaslicer
when: install_cad_apps

14
playbooks/macOS.yaml Normal file
View File

@@ -0,0 +1,14 @@
---
- import_playbook: UnixCLI.yaml
- hosts: localhost
roles:
- role: system-info
- import_playbook: UnixGUI.yaml
- hosts: localhost
roles:
- role: mas
- role: iterm
- role: magnet
- role: microsoft-remote-desktop
- role: viscosity

View File

@@ -1,5 +1,9 @@
---
- name: install homebrew package
homebrew_cask:
name: 1password
name:
- 1password
- 1password-cli
state: latest
- include_tasks: zsh-completion.yaml

View File

@@ -1 +1,51 @@
# TODO: https://support.1password.com/install-linux/#debian-or-ubuntu
---
- set_fact:
keyring: /etc/apt/trusted.gpg.d/1password-archive-keyring.gpg
- name: add apt signing key
when: '"WSL" not in ansible_kernel'
become: true
apt_key:
url: https://downloads.1password.com/linux/keys/1password.asc
keyring: '{{keyring}}'
state: present
- when: ansible_machine == 'x86_64'
set_fact:
arch: amd64
- assert:
that: arch is defined
fail_msg: 'Architecture not currently supported: {{ansible_machine}}'
- name: add apt repository
when: '"WSL" not in ansible_kernel'
become: true
apt_repository:
repo: >-
deb [arch={{arch}} signed-by={{keyring}}]
https://downloads.1password.com/linux/debian/{{arch}} stable main
filename: 1password
- name: install gui package
when: '"WSL" not in ansible_kernel'
become: true
apt:
name: 1password
state: latest
- name: install cli package
when: '"WSL" not in ansible_kernel'
become: true
apt:
name: 1password-cli
state: latest
- name: create symlink to op.exe
when: '"WSL" in ansible_kernel'
file:
state: link
src: /mnt/c/Users/Benie/AppData/Local/1Password/cli/op.exe
dest: ~/.local/bin/op
- include_tasks: zsh-completion.yaml

View File

@@ -0,0 +1,22 @@
---
- name: add yum repository key
become: true
rpm_key:
key: https://downloads.1password.com/linux/keys/1password.asc
- name: add yum repository
become: true
yum_repository:
name: 1password
description: 1Password Stable Channel
baseurl: https://downloads.1password.com/linux/rpm/stable/$basearch
enabled: true
gpgcheck: true
repo_gpgcheck: true
gpgkey: ['https://downloads.1password.com/linux/keys/1password.asc']
- name: install yum package
become: true
yum:
name: 1password
state: latest

View File

@@ -1,12 +1,111 @@
---
- name: install chocolatey package
win_chocolatey:
name:
- 1password
state: latest
# NOTE: The 1Password chocolatey packages are not up to date.
# GUI
- set_fact:
app_exe: '{{ansible_env.LOCALAPPDATA}}/1Password/app/8/1Password.exe'
installer_exe: '{{ansible_env.TEMP}}/1PasswordSetup-latest.exe'
- name: check if already installed
win_stat:
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
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:]}}'
- name: run installer
when: installed_version is not defined or installed_version != installer_version
win_command: '{{installer_exe}}'
- name: create start menu shortcut
win_shortcut:
src: '{{ansible_env.LOCALAPPDATA}}/1Password/app/7/1Password.exe'
src: '{{app_exe}}'
dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/1Password.lnk'
icon: '{{ansible_env.LOCALAPPDATA}}/1Password/app/7/1Password.exe,0'
icon: '{{app_exe}},0'
# CLI
- set_fact:
cli_dir: '{{ansible_env.LOCALAPPDATA}}\1Password\cli'
cli_zip: '{{ansible_env.TEMP}}/op_windows_amd64.zip'
- set_fact:
cli_exe: '{{cli_dir}}\op.exe'
- name: check if op already installed
win_stat:
path: '{{cli_exe}}'
register: cli_stat
- name: get installed op version
when: cli_stat.stat.exists == True
win_command: '{{cli_exe}} --version'
register: cli_version
changed_when: false
- when: cli_stat.stat.exists == True
set_fact:
cli_installed_version: '{{cli_version.stdout.strip()}}'
- name: get list of op releases
win_uri:
url: https://raw.githubusercontent.com/kbenzie/op-release-scraper/main/op-releases.json
return_content: true
register: releases
- set_fact:
latest: '{{releases.json[0]}}'
- name: download latest op zip archive
when: cli_installed_version is not defined or cli_installed_version != latest.version
win_get_url:
url: '{{latest.downloads.Windows.amd64}}'
dest: '{{cli_zip}}'
- name: unzip op zip archive
when: cli_installed_version is not defined or cli_installed_version != latest.version
win_unzip:
src: '{{cli_zip}}'
dest: '{{cli_dir}}'
- name: add op install directory to user PATH
win_path:
scope: user
name: Path
elements: '{{cli_dir}}'
- name: get op powershell completion script
win_command:
argv:
- '{{ansible_env.LOCALAPPDATA}}/1Password/cli/op.exe'
- completion
- powershell
register: powershell_completion_script
changed_when: false
- name: create op powershell completion file
win_copy:
content: '{{powershell_completion_script.stdout}}'
dest: '{{cli_dir}}/opProfile.psm1'

View File

@@ -0,0 +1,15 @@
---
- name: get op zsh completion script
command: op completion zsh
register: zsh_completion_script
changed_when: false
- name: create local zsh site functions directory
file:
state: directory
path: ~/.local/share/zsh/site-functions
- name: create op zsh completion file
copy:
content: '{{zsh_completion_script.stdout}}'
dest: ~/.local/share/zsh/site-functions/_op

View File

@@ -1,5 +1,5 @@
---
- name: install homebrew package
apt:
homebrew:
name: the_silver_searcher
state: latest

View File

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

View File

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

View File

@@ -9,6 +9,10 @@
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

@@ -0,0 +1,5 @@
---
- name: create ~/.bashrc file
template:
src: templates/bashrc
dest: ~/.bashrc

112
roles/bash/templates/bashrc Normal file
View File

@@ -0,0 +1,112 @@
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# Enable vi mode
set -o vi
function _prompt_first_line {
local exit_code=$?
if [ "$exit_code" = "0" ]; then
exit_code=
else
# If the last command failed, display its error code at the right
case $exit_code in
129) exit_code="SIGHUP" ;; # 128 + 1
130) exit_code="SIGINT" ;; # 128 + 2
131) exit_code="SIGQUIT" ;; # 128 + 3
132) exit_code="SIGILL" ;; # 128 + 4
133) exit_code="SIGTRAP" ;; # 128 + 5
134) exit_code="SIGABRT" ;; # 128 + 6
134) exit_code="SIGIOT" ;; # 128 + 6
135) exit_code="SIGBUS" ;; # 128 + 7
136) exit_code="SIGFPE" ;; # 128 + 8
137) exit_code="SIGKILL" ;; # 128 + 9
138) exit_code="SIGUSR1" ;; # 128 + 10
139) exit_code="SIGSEGV" ;; # 128 + 11
140) exit_code="SIGUSR2" ;; # 128 + 12
141) exit_code="SIGPIPE" ;; # 128 + 13
142) exit_code="SIGALRM" ;; # 128 + 14
143) exit_code="SIGTERM" ;; # 128 + 15
144) exit_code="SIGSTKFLT" ;; # 128 + 16
145) exit_code="SIGCHLD" ;; # 128 + 17
146) exit_code="SIGCONT" ;; # 128 + 18
147) exit_code="SIGSTOP" ;; # 128 + 19
148) exit_code="SIGTSTP" ;; # 128 + 20
149) exit_code="SIGTTIN" ;; # 128 + 21
150) exit_code="SIGTTOU" ;; # 128 + 22
151) exit_code="SIGURG" ;; # 128 + 23
152) exit_code="SIGXCPU" ;; # 128 + 24
153) exit_code="SIGXFSZ" ;; # 128 + 25
154) exit_code="SIGVTALRM" ;; # 128 + 26
155) exit_code="SIGPROF" ;; # 128 + 27
156) exit_code="SIGWINCH" ;; # 128 + 28
157) exit_code="SIGIO" ;; # 128 + 29
158) exit_code="SIGPWR" ;; # 128 + 30
159) exit_code="SIGSYS" ;; # 128 + 31
esac
exit_code=" \e[1m\e[31m$exit_code\e[0m"
fi
local time=$(date +%H:%M:%S)
local dir=$PWD
[[ "$dir" =~ ^"$HOME"(/|$) ]] && dir="~${dir#$HOME}"
# TODO: virtualenv
local grey="\e[38;5;244m"
local reset="\e[0m"
local blue="\e[38;5;37m"
echo -e "$grey$time$reset $blue$dir$reset$exit_code"
}
PROMPT_COMMAND=_prompt_first_line
yellow="\001\e[38;5;3m\002"
grey="\001\e[38;5;244m\002"
reset="\001\e[0m\002"
PS1="$yellow\u$reset@$grey\h$reset "

View File

@@ -1,13 +1,12 @@
---
- name: install apt package
become: true
apt:
name: bat
state: latest
- set_fact:
use_github: '{{
ansible_distribution == "Ubuntu" and
ansible_distribution_version == "18.04"
}}'
- name: update bat alternative
become: true
alternatives:
name: bat
path: /usr/bin/batcat
link: /usr/local/bin/bat
- when: use_github
include_tasks: deb.yaml
- when: not use_github
include_tasks: apt.yaml

View File

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

View File

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: Bat
state: latest

13
roles/bat/tasks/apt.yaml Normal file
View File

@@ -0,0 +1,13 @@
---
- name: install apt package
become: true
apt:
name: bat
state: latest
- name: update bat alternative
become: true
alternatives:
name: bat
path: /usr/bin/batcat
link: /usr/local/bin/bat

65
roles/bat/tasks/deb.yaml Normal file
View File

@@ -0,0 +1,65 @@
---
- name: get latest github release
uri:
url: https://api.github.com/repos/sharkdp/bat/releases/latest
register: latest
- set_fact:
latest_version: '{{latest.json.tag_name[1:]}}'
bat_exe: '/usr/bin/bat'
- name: check if already installed
stat:
path: '{{bat_exe}}'
register: bat_stat
- name: get installed version
when: bat_stat.stat.exists == True
command: '{{bat_exe}} --version'
register: bat_version
changed_when: false
- when: bat_stat.stat.exists == True
set_fact:
installed_version:
'{{bat_version.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
- when: ansible_machine == "x86_64"
set_fact:
arch: amd64
- assert:
that: arch is defined
fail_msg: 'Architecture not currently supported: {{ansible_machine}}'
- set_fact:
assets: '{{latest.json.assets}}'
asset_query: '[?contains(name, `bat-musl_`)] | [?contains(name, `amd64.deb`)] | [0]'
pkg_dir: '{{ansible_env.HOME}}/.local/pkg/bat'
- set_fact:
asset: '{{assets | to_json | from_json | json_query(asset_query)}}'
bat_deb: '{{pkg_dir}}/bat.deb'
- name: create directory for deb file download
file:
state: directory
path: '{{pkg_dir}}'
- name: download .deb file
when: installed_version is not defined or installed_version != latest_version
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{bat_deb}}'
- name: install .deb file
when: installed_version is not defined or installed_version != latest_version
become: true
apt:
deb: '{{bat_deb}}'
- name: remove .deb file
when: installed_version is not defined or installed_version != latest_version
file:
state: absent
path: '{{bat_deb}}'
changed_when: false

View File

@@ -1,5 +1,5 @@
---
- name: install homebrew package
homebrew_cask:
name: 1password-cli
homebrew:
name: curl
state: latest

View File

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

View File

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

View File

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: curl
state: latest

View File

@@ -0,0 +1,5 @@
---
- name: create .editrc config file
template:
src: editrc
dest: '{{ansible_env.HOME}}/.editrc'

View File

@@ -0,0 +1,3 @@
# Enable vi mode
lldb:bind -v
lldb:bind ^I lldb_complete

View File

@@ -0,0 +1,3 @@
---
- name: refresh font cache
command: fc-cache

View File

@@ -0,0 +1,9 @@
---
- name: enable homebrew tap
homebrew_tap:
name: homebrew/cask-fonts
- name: install Caskaydia Cove Nerd Font
homebrew_cask:
name: font-caskaydia-cove-nerd-font
state: latest

View File

@@ -0,0 +1,56 @@
---
- name: stat version file
stat:
path: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
register: version_file
- name: slurp version
when: version_file.stat.exists
slurp:
path: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
register: version_slurp
- when: version_file.stat.exists
set_fact:
version: '{{version_slurp.content | b64decode}}'
- name: get latest release
uri:
url: https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest
register: latest
- set_fact:
needs_installed:
'{{ not version_file.stat.exists or version.strip() != latest.json.tag_name }}'
asset: '{{ latest.json.assets | to_json | from_json |
json_query("[?contains(name, `CascadiaCode.zip`)] | [0]") }}'
- name: create user fonts directory
when: needs_installed
file:
path: '{{ansible_env.HOME}}/.local/share/fonts'
state: directory
- name: download Caskaydia Cove Nerd Font archive
when: needs_installed
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
- name: install Caskaydia Cove Nerd Font
when: needs_installed
unarchive:
src: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
dest: '{{ansible_env.HOME}}/.local/share/fonts'
notify: refresh font cache
- name: write version file
copy:
content: '{{latest.json.tag_name}}'
dest: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
- name: remove Caskaydia Cove Nerd Font archive
when: needs_installed
file:
path: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
state: absent

View File

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

View File

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

View File

@@ -1,12 +1,8 @@
---
- name: install apt package
when: ansible_distribution == "Debian" and
ansible_distribution_version == "unstable"
become: true
apt:
name: fzf
state: latest
- when: ansible_distribution == 'Ubuntu' and
ansible_distribution_version is version('22.04', '<=')
include_tasks: Debian-old.yaml
- include_tasks: Debian-old.yaml
when: not (ansible_distribution == "Debian" and
ansible_distribution_version == "unstable")
- when: not (ansible_distribution == 'Ubuntu' and
ansible_distribution_version is version('22.04', '<='))
include_tasks: Debian-apt.yaml

View File

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

6
roles/gdb/RedHat.yaml Normal file
View File

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

View File

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

View File

@@ -0,0 +1,11 @@
---
- set_fact:
gdb_config_dir: '{{ansible_env.HOME}}/.config/gdb'
- name: create config directory
file:
path: '{{gdb_config_dir}}'
state: directory
- set_fact:
gdb_config_file: '{{gdb_config_dir}}/gdbinit'

34
roles/gdb/tasks/main.yaml Normal file
View File

@@ -0,0 +1,34 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
# gdb 11.1 introduced support for config files that respect the XDG base
# directory spec, handle the boths paths dependant on the gdb version install.
- name: get installed version
command: gdb --version
register: gdb_version_output
changed_when: false
- set_fact:
gdb_version: '{{gdb_version_output.stdout | regex_search("(\d+)\.(\d+)", "\1", "\2")}}'
- set_fact:
gdb_xdg_base_dir_check:
gdb_version[0] | int > 11 or (
gdb_version[0] | int == 11 and gdb_version[1] | int == 1
)
- set_fact:
gdb_config_file: '{{ansible_env.HOME}}/.gdbinit'
gdb_state_dir: '{{ansible_env.HOME}}/.local/state/gdb'
- when: gdb_xdg_base_dir_check
include_tasks: gdb-11.1-config.yaml
- name: create config file
template:
src: gdbinit
dest: '{{gdb_config_file}}'
- name: create state directory
file:
path: '{{gdb_state_dir}}'
state: directory

View File

@@ -0,0 +1,3 @@
# Enable saving command history
set history filename {{gdb_state_dir}}/history
set history save on

View File

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

View File

@@ -0,0 +1,37 @@
---
- set_fact:
arch_map:
aarch64: arm64
armv6l: armhf
armv7l: armhf
i386: i386
x86_64: amd64
- set_fact:
arch: '{{ [ansible_architecture] | map("extract", arch_map) | first }}'
- name: download apt repository key
become: true
get_url:
url: https://cli.github.com/packages/githubcli-archive-keyring.gpg
dest: /usr/share/keyrings/githubcli-archive-keyring.gpg
mode: 0644
- name: add apt repository list
become: true
apt_repository:
filename: github-cli
repo: 'deb [arch={{arch}} signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main'
state: present
- name: install apt package
become: true
apt:
name: gh
state: latest
update_cache: true
register: gh_apt
- name: install zsh completions
when: gh_apt.changed
become: true
shell: gh completion -s zsh > /usr/local/share/zsh/site-functions/_gh

View File

@@ -0,0 +1,12 @@
---
- name: add yum repository
become: true
get_url:
url: https://cli.github.com/packages/rpm/gh-cli.repo
dest: /etc/yum.repos.d/gh-cli.repo
- name: install dnf package
become: true
dnf:
name: gh
state: latest

View File

@@ -1,5 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: op
name: gh
state: latest

2
roles/gh/tasks/main.yaml Normal file
View File

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

View File

@@ -0,0 +1,34 @@
---
- 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'
return_content: true
register: git_release
- set_fact:
git_installer_exe: 'Git-{{git_version}}-64-bit.exe'
- set_fact:
git_asset_query: '[?contains(name, `{{git_installer_exe}}`)] | [0]'
git_installer_path: '{{ansible_env.TEMP}}/{{git_installer_exe}}'
- name: select asset from release
set_fact:
git_asset: '{{git_release.json.assets | json_query(git_asset_query)}}'
- name: download installer
win_get_url:
url: '{{git_asset.browser_download_url}}'
dest: '{{git_installer_path}}'
- name: run installer command
win_command:
argv:
- '{{git_installer_path}}'
- '/GitAndUnixToolsOnPath'
- '/NoShellIntegration'
- '/NoGuiHereIntegration'
- '/NoCredentialManager'
- '/NoOpenSSH'
- '/Silent'
- '/SuppressMsgBoxes'
- '/NoCancel'
- '/NoRestart'

View File

@@ -1,14 +1,35 @@
---
- name: install chocolatey package
win_chocolatey:
name: git
package_params: >-
/GitAndUnixToolsOnPath
/NoShellIntegration
/NoGuiHereIntegration
/NoCredentialManager
/NoOpenSSH
state: latest
# Pinned to 2.36.1 because the unofficial win_git module hangs when using
# 2.37.3, this is either a breaking change in 2.37.x or an incompatibility with
# the win_git module. The git chocolatey package does not respect the version
# argument and always installs the most recent version, so instead download the
# installer from GitHub and install manually.
- set_fact:
git_version: 2.36.1
git_cli_exe: '{{ansible_env.ProgramFiles}}/Git/cmd/git.exe'
git_run_installer: false
- name: detect if Git for Windows is installed
win_stat:
path: '{{git_cli_exe}}'
register: git_cli_stat
- when: not git_cli_stat.stat.exists
set_fact:
git_run_installer: true
- name: check installed version
when: git_cli_stat.stat.exists
win_command: '"{{git_cli_exe}}" --version'
register: git_cli_version
changed_when: false
- when: git_cli_stat.stat.exists and git_version not in git_cli_version.stdout
set_fact:
git_run_installer: true
- include_tasks: Windows-installer.yaml
when: git_run_installer
- name: clone config repos
win_git:
@@ -16,6 +37,11 @@
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

@@ -18,8 +18,4 @@
extra_args: --user
state: latest
- name: create symbolic links
file:
state: link
src: ~/.config/git/_git-changes
dest: ~/.local/share/zsh/site-functions/_git-changes
- include_tasks: ~/.config/git/tasks.yaml

View File

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

View File

@@ -0,0 +1,67 @@
---
- set_fact:
glab: /usr/bin/glab
- name: stat the executable
stat:
path: '{{glab}}'
register: stat_glab
- name: get instlal version
when: stat_glab.stat.exists
command: '{{glab}} --version'
register: glab_version_output
changed_when: false
- when: stat_glab.stat.exists
set_fact:
glab_version: '{{glab_version_output.stdout | replace("glab version ", "v")}}'
- set_fact:
gitlab_api: 'https://gitlab.com/api/v4'
project_id: 'gitlab-org%2Fcli'
- name: get list of gitlab releases
uri:
url:
'{{gitlab_api}}/projects/{{project_id}}/releases'
register: releases
- set_fact:
latest: '{{releases.json[0]}}'
latest_version: '{{releases.json[0].tag_name}}'
query: >
[?contains(name, `glab`)] |
[?contains(name, `Linux`)] |
[?contains(name, `{{ansible_machine}}.deb`)] | [0]
- set_fact:
asset: '{{latest.assets.links|json_query(query)}}'
- name: create download directory
when: glab_version is not defined or glab_version != latest_version
tempfile:
state: directory
suffix: glab
register: tempdir
- name: download .deb file
when: glab_version is not defined or glab_version != latest_version
get_url:
url: '{{asset.url}}'
dest: '{{tempdir.path}}/glab.deb'
- name: install .deb file
when: glab_version is not defined or glab_version != latest_version
become: true
apt:
deb: '{{tempdir.path}}/glab.deb'
- name: remove download directory
when: glab_version is not defined or glab_version != latest_version
file:
state: absent
path: '{{tempdir.path}}'
- name: install zsh completions
when: glab_version is not defined or glab_version != latest_version
command:
glab completion -s zsh > ~/.local/share/zsh/site-functions/_glab

View File

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

View File

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: glab
state: latest

View File

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

View File

@@ -0,0 +1,8 @@
---
- dconf:
# key: /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings
key: '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0'
state: read
register: custom_keybindins
- debug: msg={{custom_keybindins}}

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,10 @@
---
- assert:
that: ansible_os_family == "Darwin"
- name: install homebrew package
homebrew_cask:
name: iterm2
state: latest
# TODO: Configure stuff, somehow?

View File

@@ -0,0 +1,41 @@
---
- name: get latest github release
uri:
url: https://api.github.com/repos/jmespath/jp/releases/latest
register: latest
- set_fact:
arch: '{{ [ansible_architecture] |
map("extract", { "arm64": "arm64", "x86_64": "amd64" }) | first }}'
- set_fact:
asset_query: '[?contains(name, `jp-darwin-{{arch}}`)] | [0]'
assets: '{{latest.json.assets}}'
latest_version: '{{latest.json.tag_name}}'
jp_exe: '{{ansible_env.HOME}}/.local/bin/jp'
- name: check if already installed
stat:
path: '{{jp_exe}}'
register: jp_stat
- name: get installed version
when: jp_stat.stat.exists == True
command: '{{jp_exe}} --version'
register: jp_version_output
changed_when: false
- when: jp_stat.stat.exists == True
set_fact:
installed_version:
'{{jp_version_output.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
- set_fact:
asset: '{{assets | to_json | from_json | json_query(asset_query)}}'
- name: download executable
when: installed_version is not defined or installed_version != latest_version
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{jp_exe}}'
mode: +x

View File

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

View File

@@ -0,0 +1,51 @@
---
- name: stat executable
stat:
path: '{{ansible_env.HOME}}/.local/bin/jp'
register: jp_stat
- name: get installed version
when: jp_stat.stat.exists
command: jp --version
changed_when: false
register: jp_version
- name: extract installed version
when: jp_stat.stat.exists
set_fact:
jp_installed_version:
'{{jp_version.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
- name: get latest release
uri:
url: 'https://api.github.com/repos/jmespath/jp/releases/latest'
register: latest
- name: determine if jp needs installed
set_fact:
jp_needs_installed:
'{{not jp_stat.stat.exists or jp_installed_version != latest.json.tag_name}}'
arch_dict: {x86_64: amd64, arm64: arm64}
- name: select asset name
when: jp_needs_installed
set_fact:
asset_query:
'[?contains(name, `jp-linux-{{arch_dict[ansible_architecture]}}`)] | [0]'
- name: select asset
when: jp_needs_installed
set_fact:
asset: '{{latest.json.assets | to_json | from_json | json_query(asset_query)}}'
- name: create directory
when: jp_needs_installed
file:
path: '{{ansible_env.HOME}}/.local/bin'
state: directory
- name: install executable
when: jp_needs_installed
get_url:
url: '{{asset.browser_download_url}}'
dest: '{{ansible_env.HOME}}/.local/bin/jp'
mode: '0755'

4
roles/jp/tasks/main.yaml Normal file
View File

@@ -0,0 +1,4 @@
---
- assert:
that: ansible_os_family != "Windows"
- include_tasks: '{{ansible_os_family}}.yaml'

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: jq
state: latest

2
roles/jq/tasks/main.yaml Normal file
View File

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

View File

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

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

@@ -0,0 +1,10 @@
---
- name: install dnf packages
become: true
dnf:
name:
- clang
- clang-tools-extra
- git-clang-format
- llvm
state: latest

View File

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

View File

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

View File

@@ -4,14 +4,27 @@
url: https://api.github.com/repos/llvm/llvm-project/releases/latest
register: llvm_latest
- name: read /etc/os-release
slurp:
src: /etc/os-release
register: os_release_b64
- name: extract UBUNTU_CODENAME=<name> to support dirivitive distros
set_fact:
ubuntu_codename: >-
{{
os_release_b64.content | b64decode |
regex_search('UBUNTU_CODENAME=.*') |
replace('UBUNTU_CODENAME=', '')
}}
- set_fact:
llvm_major_version:
'{{llvm_latest.json.tag_name[8:llvm_latest.json.tag_name.find(".")]}}'
- set_fact:
llvm_apt_repo_url:
'http://apt.llvm.org/{{ansible_distribution_release}}/'
'http://apt.llvm.org/{{ubuntu_codename}}/'
llvm_apt_category:
'llvm-toolchain-{{ansible_distribution_release}}-{{llvm_major_version}}'
'llvm-toolchain-{{ubuntu_codename}}-{{llvm_major_version}}'
- name: add upstream deb repository
become: true

View File

@@ -0,0 +1,8 @@
---
- assert:
that: ansible_os_family == 'Darwin'
- name: install app store package
mas:
id: 441258766
state: latest

View File

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

View File

@@ -0,0 +1,8 @@
---
- assert:
that: ansible_os_family == "Darwin"
- name: install homebrew cask
homebrew_cask:
name: microsoft-remote-desktop
state: latest

View File

@@ -1,7 +1,11 @@
---
- name: install homebrew packages
homebrew:
name: neovim
name:
- neovim
state: latest
- include_tasks: unix.yaml
- set_fact:
neovim_pip_packages: '{{neovim_pip_packages + ["pynvim"]}}'
- include_tasks: Unix.yaml

View File

@@ -1,8 +1,18 @@
---
- 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
- name: install apt package
become: true
apt:
name: neovim
name:
- neovim
- python3-neovim
state: latest
- include_tasks: unix.yaml
- include_tasks: Unix.yaml

View File

@@ -0,0 +1,10 @@
---
- name: install dnf package
become: true
dnf:
name:
- neovim
- python3-neovim
state: latest
- include_tasks: Unix.yaml

View File

@@ -0,0 +1,36 @@
---
- name: clone plugin repos
git:
repo: 'https://github.com/{{item.repo}}.git'
dest: '{{plugin_dir}}/{{item.mode | default("start")}}/{{item.repo | regex_replace("^.*\/(.*)$", "\1")}}'
version: '{{item.branch | default("HEAD")}}'
with_items: '{{plugins}}'
- name: get list of managed plugin paths
set_fact:
managed_plugins: >-
{{
managed_plugins | default([]) + [
plugin_dir + "/" +
item.mode | default("start") + "/" +
item.repo | regex_replace("^.*\/(.*)$", "\1")
]
}}
with_items: '{{plugins}}'
- name: find all installed plugin directories
find:
paths:
- '{{plugin_dir}}/start'
- '{{plugin_dir}}/opt'
file_type: directory
register: found_plugins
- name: remove found plugins which are not in the managed list
file:
path: '{{item.path}}'
state: absent
with_items: '{{found_plugins.files}}'
when: item.path not in managed_plugins
loop_control:
label: '{{item.path}}'

View File

@@ -0,0 +1,26 @@
---
- set_fact:
vim_config_dir: '{{ansible_env.HOME}}/.config/nvim'
- name: clone config repo
git:
repo: git@code.infektor.net:config/vim.git
dest: '{{vim_config_dir}}'
version: master
- name: install pip packages
pip:
name: '{{neovim_pip_packages}}'
state: latest
extra_args: --user
- name: check for config repo tasks.yaml
stat:
path: '{{vim_config_dir}}/tasks.yaml'
register: config_repo_tasks
- when: config_repo_tasks.stat.exists
include_tasks: '{{vim_config_dir}}/tasks.yaml'
- when: plugin_dir is defined and plugins is defined
include_tasks: 'Unix-plugins.yaml'

View File

@@ -0,0 +1,36 @@
---
- name: clone plugin repos
win_git:
repo: 'https://github.com/{{item.repo}}.git'
dest: '{{plugin_dir}}/{{item.mode | default("start")}}/{{item.repo | regex_replace("^.*\/(.*)$", "\1")}}'
branch: '{{item.branch | default("HEAD")}}'
with_items: '{{plugins}}'
- name: get list of managed plugin paths
set_fact:
managed_plugins: >-
{{
managed_plugins | default([]) + [
plugin_dir + "/" +
item.mode | default("start") + "/" +
item.repo | regex_replace("^.*\/(.*)$", "\1")
]
}}
with_items: '{{plugins}}'
- name: find all start plugin directories
win_find:
paths:
- '{{plugin_dir}}/start'
- '{{plugin_dir}}/opt'
file_type: directory
register: found_plugins
- name: remove found plugins which are not in the managed list
win_file:
path: '{{item.path}}'
state: absent
with_items: '{{found_plugins.files}}'
when: item.path not in managed_plugins
loop_control:
label: '{{item.path}}'

View File

@@ -1,14 +1,27 @@
---
- name: install chocolatey packages
win_chocolatey:
name: neovim
state: latest
- set_fact:
vim_config_dir: '{{ansible_env.LOCALAPPDATA}}\nvim'
- name: clone config repo
win_git:
repo: git@code.infektor.net:config/vim.git
dest: '{{ansible_env.LOCALAPPDATA}}/nvim'
version: master
dest: '{{vim_config_dir}}'
branch: master
# clone: false
update: true
- win_owner:
path: '{{vim_config_dir}}'
user: Benie
recurse: true
- assert:
that: False
# - TODO: neovim set repo email
# win_git_config:
@@ -23,3 +36,27 @@
dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/nvim-qt.lnk'
icon: '{{ansible_env.ChocolateyToolsLocation}}/neovim/nvim-win64/bin/nvim-qt.exe,0'
directory: '{{ansible_env.USERPROFILE}}'
- name: check for config repo tasks.yaml
win_stat:
path: '{{vim_config_dir}}/tasks.yaml'
register: config_repo_tasks
# TODO: this doesn't work for non localhost setups
# probably need to copy the tasks.yaml and plugins.yaml to the controller in a
# temporary directory then include them
- when: config_repo_tasks.stat.exists
fetch:
src: '{{vim_config_dir}}/tasks.yaml'
dest: vim_config_tasks.yaml
flat: true
- when: config_repo_tasks.stat.exists
include_tasks: vim_config_tasks.yaml
- when: ansible_os_family != "Windows" and
plugin_dir is defined and plugins is defined
include_tasks: 'Unix-plugins.yaml'
- when: ansible_os_family == "Windows" and
plugin_dir is defined and plugins is defined
include_tasks: 'Windows-plugins.yaml'

View File

@@ -1,14 +0,0 @@
---
- name: clone config repo
git:
repo: git@code.infektor.net:config/vim.git
dest: ~/.config/nvim
version: master
# TODO: - name: set repo email
- name: install pip packages
pip:
name: '{{neovim_pip_packages}}'
state: latest
extra_args: --user

View File

@@ -3,6 +3,5 @@ neovim_pip_packages:
- cmake-language-server
- cmakelint
- compdb
- pynvim
- vim-vint
- yamllint

View File

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

View File

@@ -0,0 +1,5 @@
---
- name: install desktop menu
command: >
xdg-desktop-menu install --mode user
{{ansible_env.HOME}}/.local/share/applications/obsidian-obsidian.desktop

View File

@@ -1,11 +1,7 @@
---
- name: install homebrew package
homebrew:
homebrew_cask:
name: obsidian
state: latest
- name: clone notes repository
git:
repo: git@github.com:kbenzie/notes.git
dest: '{{ansible_env.HOME}}/Documents/Notes'
branch: main
- include_tasks: Unix.yaml

View File

@@ -0,0 +1,48 @@
---
- 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

Some files were not shown because too many files have changed in this diff Show More