111 Commits

Author SHA1 Message Date
ab96a7d8c6 Use Linux system packages for neovim python integration 2023-06-02 19:13:48 +01:00
30e28dc319 Add Linux support to webcatalog role 2023-06-02 19:13:48 +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
c596fcb87a Split out fzf from zsh into its own role 2022-06-18 22:09:56 +01:00
441343fd7c Add coc-yaml config 2022-06-18 21:18:02 +01:00
1184062dc7 Add hosts template for wsl role
For setting up an ssh connection to the Windows host to manage it.
2022-06-11 16:58:58 +01:00
d172e171b2 Fix directory creation in nodejs role 2022-06-11 12:31:34 +01:00
651909ff71 Add op role for Linux, macOS, and Windows 2022-06-05 20:38:48 +01:00
60a147124f Use ~/.local/src/node for tidyness 2022-06-05 20:37:42 +01:00
3aa7bcfa2e Add python3-venv for make coc.nvim work 2022-06-05 19:59:25 +01:00
01c1ca74a3 Add WSL playbook to run Unix and Windows 2022-06-03 21:13:01 +01:00
f4bcbbbe09 Use chocolatey instead of choco in names 2022-06-03 20:58:33 +01:00
69cb941a85 Update llvm role to support all Ubuntu LTS 2022-06-03 20:30:13 +01:00
f7a5e3728f Fix zsh role to set zsh as default shell 2022-05-27 20:15:41 +01:00
d1cfa8c98e Add obsidian role for macOS and Windows 2022-05-24 20:41:34 +01:00
64ecd88c93 Fix whitespace in powershell role 2022-05-24 19:05:36 +01:00
7642c62ecf Add windows-terminal role for Windows 2022-05-23 21:11:21 +01:00
1117ca00f7 Add system-info role for Windows 2022-05-22 14:05:05 +01:00
de8c0a119d Add macOS.ahk scheduled task 2022-05-22 10:07:33 +01:00
2eaf11b8a5 Add distrobox role for Debian 2022-05-21 23:34:02 +01:00
bcbaa9dfcf Change nvim-qt Windows shortcut working directory 2022-05-12 21:02:53 +01:00
d6e09f2317 Add firefox role for Windows 2022-05-12 20:50:03 +01:00
179273c22b Add git chocolatey package install 2022-05-12 20:29:45 +01:00
51d48f7f49 Actually use llvm role 2022-05-12 20:10:09 +01:00
c2f1cd3201 Add bat role for Debian and macOS 2022-05-12 19:58:43 +01:00
c9d2e66438 Add tree role for Debina, macOS, and Windows 2022-05-12 19:58:15 +01:00
f6e60b8417 Remove macOS duplication 2022-05-11 22:43:44 +01:00
e1745bd162 Fix python Debian package install 2022-05-11 22:43:25 +01:00
44c1e5ccff Add nodejs role for Debian, macOS, and Windows 2022-05-11 22:33:18 +01:00
5dfb92522e Add ag role for Debian, macOS, and Windows 2022-05-11 22:27:18 +01:00
14c14353f8 Add llvm role for Debian sid, Ubuntu 18.04, macOS, and Windows 2022-05-08 19:59:07 +01:00
3061ade54f Don't install llvm (and related) with neovim 2022-05-07 15:05:20 +01:00
178 changed files with 2444 additions and 207 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
external
modules/win_git*

5
ansible.cfg Normal file
View File

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

4
playbooks/1password.yaml Normal file
View File

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

33
playbooks/UnixCLI.yaml Normal file
View File

@@ -0,0 +1,33 @@
---
- hosts: localhost
roles:
- role: sudo
when: ansible_user_id != "root"
- role: python
- role: zsh
- role: neovim
- role: tmux
- role: system-info
when: '"WSL" not in ansible_kernel'
- role: ag
- role: bat
- role: curl
- role: fzf
- role: gh
- role: git
- role: htop
- role: jp
- role: jq
- role: readline
- role: tidy
- role: tree
- role: yq
- role: watch
- role: llvm
- role: nodejs
- role: wsl
when: '"WSL" in ansible_kernel'

5
playbooks/UnixGUI.yaml Normal file
View File

@@ -0,0 +1,5 @@
---
- import_playbook: UnixCLI.yaml
- hosts: localhost
roles:
- role: 1password

3
playbooks/WSL.yaml Normal file
View File

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

36
playbooks/Windows.yaml Normal file
View File

@@ -0,0 +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: gh
- role: jq
- role: tree
- role: yq
- role: llvm
- role: nodejs
- 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

13
playbooks/macOS.yaml Normal file
View File

@@ -0,0 +1,13 @@
---
- import_playbook: UnixGUI.yaml
- hosts: localhost
roles:
- role: fonts
- role: mas
- role: iterm
- role: magnet
- role: microsoft-remote-desktop
- role: obsidian
- role: viscosity
- role: webcatalog

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

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

View File

@@ -0,0 +1,6 @@
---
- name: install apt package
become: true
apt:
name: silversearcher-ag
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,5 @@
---
- name: install chocolatey package
win_chocolatey:
name: ag
state: latest

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

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

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

@@ -7,8 +7,31 @@
- name: clone config repo
win_git:
repo: git@code.infektor.net:config/AutoHotKey.git
dest: '{{ansible_env.LOCALAPPDATA}}/AutoHotKey'
dest: '{{autohotkey_repo_dir}}'
branch: master
- win_owner:
path: '{{autohotkey_repo_dir}}'
user: Benie
recurse: true
# TODO: - name: create scheduled task
# win_scheduled_task:
- name: create scheduled task
win_scheduled_task:
path: Benie
name: macOS.ahk
state: present
enable: true
triggers:
- type: logon
enabled: true
- type: registration
enabled: true
actions:
- path: '{{autohotkey_repo_dir}}/macOS.ahk'
disallow_start_if_on_batteries: false
stop_if_going_on_batteries: false
execution_time_limit: PT0S
logon_type: interactive_token
multiple_instances: 3
run_level: highest
start_when_available: true
wake_to_run: false

View File

@@ -0,0 +1,2 @@
---
autohotkey_repo_dir: '{{ansible_env.LOCALAPPDATA}}/AutoHotKey'

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

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

View File

@@ -0,0 +1,12 @@
---
- set_fact:
use_github: '{{
ansible_distribution == "Ubuntu" and
ansible_distribution_version == "18.04"
}}'
- 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

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

View File

@@ -0,0 +1,5 @@
---
- name: install homebrew package
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,2 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'

View File

@@ -0,0 +1,100 @@
#compdef distrobox
_distrobox() {
local context curcontext="$curcontext" state line ret=1
typeset -A opt_args
_arguments -C \
'(-h --help)'{-h,--help}'[show help]' \
'(-V --version)'{-V,--version}'[show version]' \
'1: :->command' \
'*:: :->arguments'
case $state in;
(command)
local commands;
commands=(
'create:create the distrobox'
'enter:enter the distrobox'
'export:application and service exporting'
'list:list containers'
'rm:remove containers'
'stop:stop containers'
)
_describe -t commands 'distrobox command' commands "$@" \
&& ret=0 ;;
(arguments)
case $line[1] in
(create)
_arguments \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
'(-i --image)'{-i,--image}'[image to use for the container]: :' \
'(-n --name)'{-n,--name}'[name for the distrobox]: :' \
'(-H --home)'{-H,--home}'[select a custom HOME directory for the container]: :' \
'*--volume[additional volumes to add to the container]: :_directories' \
'(-a --additional-flags)'{-a,--additional-flags}'[additional flags to pass to the container manager command]: :' \
'(-I --init)'{-I,--init}'[use init system (like systemd) inside the container]: :' \
'(-d --dry-run)'{-d,--dry-run}'[only print the container manager command generated]' \
&& ret=0 ;;
(enter)
_arguments -S \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
'(-n --name)'{-n,--name}'[name for the distrobox]: :' \
'(-T --no-tty)'{-T,--no-tty}'[do not instantiate a tty]' \
'(-a --additional-flags)'{-a,--additional-flags}'[additional flags to pass to the container manager command]: :' \
'(-d --dry-run)'{-d,--dry-run}'[only print the container manager command generated]' \
'(-e --)'{-e,--}'[end arguments execute the rest as command to execute at login]:*:' \
&& ret=0 ;;
(export)
_arguments -S \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
'(-a --app)'{-a,--app}'[name of the application to export]: :' \
'(-b --bin)'{-b,--bin}'[absolute path of the binary to export]: :' \
'(-s --service)'{-s,--service}'[name of the service to export]: :' \
'(-d --delete)'{-d,--delete}'[delete exported application or service]: :' \
'(-el --export-label)'{-el,--export-label}'[label to add to exported application name]: :' \
'(-ep --export-path)'{-ep,--export-path}'[path where to export the binary]: :' \
'(-ef --extra-flags)'{-ef,--export-flags}'[extra flags to add to the command]: :' \
'(-S --sudo)'{-S,--sudo}'[specify if the exported item should be run as sudo]' \
&& ret=0 ;;
(list)
_arguments -S \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
&& ret=0 ;;
(rm)
_arguments -S \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
'(-n --name)'{-n,--name}'[name for the distrobox]: :' \
'(-f --force)'{-f,--force}'[force deletion]' \
&& ret=0 ;;
(stop)
_arguments -S \
'(-h --help)'{-h,--help}'[show this message]' \
'(-v --verbose)'{-v,--verbose}'[show more verbosity]' \
'(-V --version)'{-V,--version}'[show version]' \
'(-n --name)'{-n,--name}'[name for the distrobox]: :' \
'(-Y --yes)'{-Y,--yes}'[non-interactive, stop without asking]' \
&& ret=0 ;;
esac ;;
esac
return $ret
}
_distrobox "$@"

View File

@@ -0,0 +1,15 @@
---
- name: install apt package
when: ansible_distribution == "Debian" and
ansible_distribution_version == "unstable"
become: true
apt:
name: distrobox
state: latest
- name: install distrobox zsh completions
when: ansible_distribution == "Debian" and
ansible_distribution_version == "unstable"
copy:
src: _distrobox
dest: '{{ansible_env.HOME}}/.local/share/zsh/site-functions/_distrobox'

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,14 @@
---
- name: install chocolatey package
win_chocolatey:
name: firefox
package_params: >-
/l:en-GB
/NoDesktopShortcut
/NoAutoUpdate
state: latest
# - TODO: create extensions directory
# file:
# path: '{{ansible_env.ProgramFiles}}/Mozilla Firefox/distribution/extensions'
# state: directory

View File

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

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

@@ -1,4 +1,4 @@
---
- name: install fzf binaries
command:
cmd: ~/.config/zsh/fzf/install --bin
cmd: ~/.local/src/fzf/install --bin

View File

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

View File

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

View File

@@ -0,0 +1,13 @@
---
- name: clone fzf repo
git:
repo: https://github.com/junegunn/fzf.git
dest: ~/.local/src/fzf
notify: install fzf binaries
- meta: flush_handlers
- name: create symbolic links
file:
state: link
src: ~/.local/src/fzf/bin/fzf
dest: ~/.local/bin/fzf

View File

@@ -0,0 +1,8 @@
---
- when: ansible_distribution == 'Ubuntu' and
ansible_distribution_version is version('22.04', '<=')
include_tasks: Debian-old.yaml
- 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

View File

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

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: 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

@@ -0,0 +1,5 @@
---
- name: install chocolatey package
win_chocolatey:
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,9 +1,49 @@
---
# 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:
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: - name: install pip packages
# - TODO: install pip packages
# win_pip:
# name: '{{git_pip_packages}}'
# state: latest

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,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,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,5 @@
---
- name: install homebrew package
homebrew:
name: llvm
state: latest

View File

@@ -1,11 +1,13 @@
---
- name: install Debian-unstable apt packages
- name: install apt packages
become: true
apt:
name:
- neovim
- clang
- clang-format
- clang-tidy
- clang-tools
- clangd
- silversearcher-ag
- llvm
state: latest
install_recommends: true

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

@@ -0,0 +1,79 @@
---
- name: get latest stable github release
uri:
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/{{ubuntu_codename}}/'
llvm_apt_category:
'llvm-toolchain-{{ubuntu_codename}}-{{llvm_major_version}}'
- name: add upstream deb repository
become: true
apt_repository:
repo: 'deb {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
state: present
filename: llvm
update_cache: false
- name: add upstream deb-src repository
become: true
apt_repository:
repo: 'deb-src {{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:
update_cache: true
- name: install apt packages
become: true
apt:
name:
- clang-{{llvm_major_version}}
- clang-format-{{llvm_major_version}}
- clang-tidy-{{llvm_major_version}}
- clang-tools-{{llvm_major_version}}
- clangd-{{llvm_major_version}}
- llvm-{{llvm_major_version}}
state: latest
install_recommends: true
- name: update alternatives
become: true
alternatives:
link: '/usr/bin/{{item}}'
name: '{{item}}'
path: '/usr/bin/{{item}}-{{llvm_major_version}}'
priority: '{{llvm_major_version}}0'
with_items:
- clang-format
- clangd

View File

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

View File

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

@@ -3,9 +3,9 @@
homebrew:
name:
- neovim
- llvm
- node
- the_silver_searcher
state: latest
- include_tasks: unix.yaml
- set_fact:
neovim_pip_packages: '{{neovim_pip_packages + ["pynvim"]}}'
- include_tasks: Unix.yaml

View File

@@ -1,31 +1,18 @@
---
- include_tasks: '{{ansible_distribution}}-{{ansible_distribution_version}}.yaml'
- include_tasks: 'unix.yaml'
- 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: nodejs get json containing latest version
uri:
url: https://nodejs.org/dist/index.json
register: latest
- name: install apt package
become: true
apt:
name:
- neovim
- python3-neovim
state: latest
- name: nodejs create directory for downloaded package
file:
state: directory
dest: ~/.local/src
- name: nodejs download latest package
get_url:
url: 'https://nodejs.org/dist/{{latest.json[0].version}}/node-{{latest.json[0].version}}-linux-x64.tar.gz'
dest: ~/.local/src/node.tar.gz
- name: nodejs extract downloaded package
unarchive:
src: ~/.local/src/node.tar.gz
dest: ~/.local/src
remote_src: true
- name: nodejs create symlink links
file:
state: link
src: '~/.local/src/node-{{latest.json[0].version}}-linux-x64/bin/{{item}}'
dest: '~/.local/bin/{{item}}'
with_items: [corepack, node, npm, npx]
- 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

@@ -1,34 +0,0 @@
---
- name: get releases json from github
uri:
url: https://api.github.com/repos/neovim/neovim/releases
register: releases
- name: query the latest stable release
set_fact:
stable: '{{releases.json | json_query("[?tag_name==`stable`]")}}'
- name: query the nvim-linux64.deb.sha256sum asset
set_fact:
sha_asset: '{{stable[0].assets | json_query("[?name==`nvim-linux64.deb.sha256sum`]")}}'
- name: query the nvim-linux64.deb asset
set_fact:
deb_asset: '{{stable[0].assets | json_query("[?name==`nvim-linux64.deb`]")}}'
- name: create directory for downloads
file:
state: directory
path: ~/.cache/nvim/deb
- name: download nvim-linux64.deb with checksum
get_url:
url: '{{deb_asset[0].browser_download_url}}'
dest: ~/.cache/nvim/deb/nvim-linux64.deb
checksum: 'sha256:{{sha_asset[0].browser_download_url}}'
- name: install nvim-linux64.deb package
become: true
apt:
deb: ~/.cache/nvim/deb/nvim-linux64.deb
# TODO: clangd, clang-format, clang-tidy
- name: install Ubuntu-18.04 apt packages
become: true
apt:
name:
- silversearcher-ag

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'

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