1 Commits

Author SHA1 Message Date
356cf58e74 temp! 2022-07-02 11:36:54 +01:00
112 changed files with 283 additions and 1351 deletions

1
.gitignore vendored
View File

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

12
.vim/coc-settings.json Normal file
View File

@@ -0,0 +1,12 @@
{
"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,33 +1,22 @@
---
- hosts: localhost
roles:
- role: sudo
when: ansible_user_id != "root"
- role: python
roles:
- 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: op
- role: tree
- role: yq
- role: watch
- role: llvm
- role: nodejs
- role: python
- role: wsl
when: '"WSL" in ansible_kernel'

View File

@@ -1,36 +1,23 @@
---
- 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: git
- role: op
- 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

View File

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

7
macOS.yaml Normal file
View File

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

View File

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

View File

@@ -1,13 +0,0 @@
---
- 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,9 +1,5 @@
---
- name: install homebrew package
homebrew_cask:
name:
- 1password
- 1password-cli
name: 1password
state: latest
- include_tasks: zsh-completion.yaml

View File

@@ -1,51 +1 @@
---
- 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
# TODO: https://support.1password.com/install-linux/#debian-or-ubuntu

View File

@@ -1,111 +1,12 @@
---
# 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: install chocolatey package
win_chocolatey:
name:
- 1password
state: latest
- name: create start menu shortcut
win_shortcut:
src: '{{app_exe}}'
src: '{{ansible_env.LOCALAPPDATA}}/1Password/app/7/1Password.exe'
dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/1Password.lnk'
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'
icon: '{{ansible_env.LOCALAPPDATA}}/1Password/app/7/1Password.exe,0'

View File

@@ -1,15 +0,0 @@
---
- 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
homebrew:
apt:
name: the_silver_searcher
state: latest

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,65 +0,0 @@
---
- 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 +0,0 @@
---
- name: install homebrew package
homebrew:
name: curl
state: latest

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

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

View File

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

View File

@@ -1,34 +0,0 @@
---
- 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,35 +1,14 @@
---
# 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: install chocolatey package
win_chocolatey:
name: git
package_params: >-
/GitAndUnixToolsOnPath
/NoShellIntegration
/NoGuiHereIntegration
/NoCredentialManager
/NoOpenSSH
state: latest
- name: clone config repos
win_git:
@@ -37,11 +16,6 @@
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,4 +18,8 @@
extra_args: --user
state: latest
- include_tasks: ~/.config/git/tasks.yaml
- name: create symbolic links
file:
state: link
src: ~/.config/git/_git-changes
dest: ~/.local/share/zsh/site-functions/_git-changes

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,27 +4,14 @@
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}}/'
'http://apt.llvm.org/{{ansible_distribution_release}}/'
llvm_apt_category:
'llvm-toolchain-{{ubuntu_codename}}-{{llvm_major_version}}'
'llvm-toolchain-{{ansible_distribution_release}}-{{llvm_major_version}}'
- name: add upstream deb repository
become: true

View File

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

View File

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

View File

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

View File

@@ -4,4 +4,4 @@
name: neovim
state: latest
- include_tasks: Unix.yaml
- include_tasks: unix.yaml

View File

@@ -1,16 +1,8 @@
---
- 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
state: latest
- include_tasks: Unix.yaml
- include_tasks: unix.yaml

View File

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

@@ -1,28 +0,0 @@
---
- 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
# TODO: - name: set repo email
- 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

@@ -1,36 +0,0 @@
---
- 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,27 +1,14 @@
---
- 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: '{{vim_config_dir}}'
branch: master
# clone: false
update: true
- win_owner:
path: '{{vim_config_dir}}'
user: Benie
recurse: true
- assert:
that: False
dest: '{{ansible_env.LOCALAPPDATA}}/nvim'
version: master
# - TODO: neovim set repo email
# win_git_config:
@@ -36,27 +23,3 @@
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

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

@@ -1,6 +1,6 @@
---
- name: install homebrew package
homebrew_cask:
homebrew:
name: obsidian
state: latest
@@ -8,4 +8,4 @@
git:
repo: git@github.com:kbenzie/notes.git
dest: '{{ansible_env.HOME}}/Documents/Notes'
version: main
branch: main

View File

@@ -1,7 +1,4 @@
---
- set_fact:
obsidian_notes_repo: '{{ansible_env.USERPROFILE}}/Documents/Notes'
- name: install chocolatey package
win_chocolatey:
name: obsidian
@@ -10,9 +7,5 @@
- name: clone notes repository
win_git:
repo: git@github.com:kbenzie/notes.git
dest: '{{obsidian_notes_repo}}'
dest: '{{ansible_env.USERPROFILE}}/Documents/Notes'
branch: main
- win_owner:
path: '{{obsidian_notes_repo}}'
user: Benie
recurse: true

View File

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

View File

@@ -0,0 +1,38 @@
---
- name: get html of latest versions
uri:
url: https://raw.githubusercontent.com/kbenzie/op-release-scraper/main/op-releases.json
register: op_releases
- when: ansible_machine == "x86"
set_fact: {op_arch: '386'}
- when: ansible_machine == "x86_64"
set_fact: {op_arch: 'amd64'}
- when: ansible_machine == "arm"
set_fact: {op_arch: 'arm'}
- when: ansible_machine == "arm64"
set_fact: {op_arch: 'arm64'}
- set_fact:
op_zip_url: '{{op_releases.json[0].downloads.Linux[op_arch]}}'
- name: create directory for downloaded package
file:
state: directory
dest: ~/.local/src/op
- name: download latest release package
get_url:
url: '{{op_zip_url}}'
dest: ~/.local/src/op/op.zip
- name: extract zip package
unarchive:
src: ~/.local/src/op/op.zip
dest: ~/.local/src/op
- name: create symbolic links
file:
src: ~/.local/src/op/op
dest: ~/.local/bin/op
state: link

View File

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

View File

@@ -1,44 +1,16 @@
---
- set_fact:
powershell_config_dir:
'{{ansible_env.USERPROFILE}}/Documents/WindowsPowerShell'
- name: clone config repos
win_git:
repo: git@code.infektor.net:config/WindowsPowerShell.git
dest: '{{powershell_config_dir}}'
dest: '{{ansible_env.USERPROFILE}}/Documents/WindowsPowerShell'
branch: master
- win_owner:
path: '{{powershell_config_dir}}'
user: Benie
recurse: true
- name: install chocolatey package
win_chocolatey:
name: Cmder
state: latest
- name: get NuGet package provider
ansible.windows.win_powershell:
script:
Get-PackageProvider -Name NuGet
changed_when: false
register: nuget_package_provider
- name: install NuGet package provider
when: nuget_package_provider.error | length > 0
ansible.windows.win_powershell:
script: |
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
- name: install PsReadline module
win_psmodule:
name: PsReadline
state: latest
accept_license: true
- name: install posh-git module
win_psmodule:
name: posh-git
state: latest
accept_license: true

View File

@@ -1,8 +0,0 @@
---
- assert:
that: ansible_os_family == 'Windows'
- name: install chocolatey package
win_chocolatey:
name: powertoys
state: present

View File

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

View File

@@ -1,5 +1,5 @@
---
- include_tasks: '{{ansible_os_family}}.yaml'
- include_tasks: 'Unix.yaml'
- include_tasks: 'unix.yaml'
when: ansible_os_family != "Windows"

View File

@@ -6,33 +6,6 @@
# TODO: set repo email
- name: create config directories
file:
state: directory
path: '{{item}}'
with_items:
- ~/.config
- ~/.config/ipython/profile_default
- ~/.config/pip
# Ensure that pip.conf exists before ever installing pip packages since
# Debian has enabled `EXTERNALLY-MANAGED` from PEP 668 which breaks `pip
# install --user` unless configured otherwise.
- name: create symbolic links
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/python/flake8
dest: ~/.config/flake8
- src: ~/.config/python/pylintrc
dest: ~/.pylintrc
- src: ~/.config/python/ipython_config.py
dest: ~/.config/ipython/profile_default/ipython_config.py
- src: ~/.config/python/pip.conf
dest: ~/.config/pip/pip.conf
- name: install pip packages
pip:
name: '{{python_pip_packages}}'
@@ -46,3 +19,18 @@
with_items:
- ~/.config/ipython/profile_default
- ~/.config/pip
- name: create symbolic links
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/python/flake8
dest: ~/.config/flake8
- src: ~/.config/python/pylintrc
dest: ~/.pylintrc
- src: ~/.config/python/ipython_config.py
dest: ~/.config/ipython/profile_default/ipython_config.py
- src: ~/.config/python/pip.conf
dest: ~/.config/pip/pip.conf

View File

@@ -5,7 +5,6 @@ python_pip_packages:
- ipdb
- ipython
- isort
- jmespath
- pylint
- python-gist
- yapf

View File

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

View File

@@ -1,11 +0,0 @@
# Enable vi mode
set editing-mode vi
# Insert mode mappings
set keymap vi-insert
"\C-[": vi-movement-mode
# Change cursor shape on vi mode change
set show-mode-in-prompt on
set vi-cmd-mode-string "\1\e[2 q\2"
set vi-ins-mode-string "\1\e[6 q\2"

View File

@@ -1,14 +0,0 @@
---
- assert:
that: ansible_user_id != "root"
- include_vars: '{{ansible_os_family}}.yaml'
- name: create /etc/sudoers.d/{user} config file
become: true
template:
src: sudoers
dest: '/etc/sudoers.d/{{ansible_user_id}}'
owner: '{{sudo_owner}}'
group: '{{sudo_group}}'
mode: '0440'

View File

@@ -1 +0,0 @@
{{ansible_user_id}} ALL=(ALL) NOPASSWD:ALL

View File

@@ -1,3 +0,0 @@
---
sudo_owner: root
sudo_group: wheel

View File

@@ -1,3 +0,0 @@
---
sudo_owner: root
sudo_group: root

View File

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

View File

@@ -1,36 +1,5 @@
---
- name: install apt packages
become: true
apt:
name:
- gawk
- sysstat
state: latest
- name: create systemd user unit directory
file:
state: directory
dest: ~/.config/systemd/user
- set_fact:
SYSTEM_INFO_SCRIPT_DIR: '{{ansible_env.HOME}}/.config/tmux/system-info'
- when: '"WSL" not in ansible_kernel'
set_fact:
SYSTEM_INFO_SCRIPT: '{{SYSTEM_INFO_SCRIPT_DIR}}/system-info-Linux.sh'
- when: '"WSL" in ansible_kernel'
set_fact:
SYSTEM_INFO_SCRIPT: '{{SYSTEM_INFO_SCRIPT_DIR}}/system-info-WSL.sh'
- name: install system-info systemd unit
template:
src: templates/system-info.service.j2
dest: ~/.config/systemd/user/system-info.service
notify: restart system-info
- name: enable system-info service
systemd:
name: system-info
scope: user
enabled: true
state: started
# TODO:
# cp $script_dir/system-info.service ~/.config/systemd/user/system-info.service
# systemctl --user enable system-info
# systemctl --user start system-info

View File

@@ -30,29 +30,29 @@
start_when_available: true
wake_to_run: false
# - name: create system-info-WSL.sh scheduled task
# win_scheduled_task:
# path: Benie
# name: system-info-WSL.sh
# state: present
# enable: true
# triggers:
# - type: logon
# enabled: true
# - type: registration
# enabled: true
# actions:
# - path: '{{wsl_exe}}'
# arguments: '-d Debian -e /home/benie/.config/tmux/system-info/system-info-WSL.sh'
# disallow_start_if_on_batteries: false
# stop_if_going_on_batteries: false
# execution_time_limit: PT0S
# logon_type: password
# username: '{{ansible_user}}'
# password: '{{ansible_password}}'
# multiple_instances: 3
# run_level: limited
# start_when_available: true
# wake_to_run: false
- name: create system-info-WSL.sh scheduled task
win_scheduled_task:
path: Benie
name: system-info-WSL.sh
state: present
enable: true
triggers:
- type: logon
enabled: true
- type: registration
enabled: true
actions:
- path: '{{wsl_exe}}'
arguments: '-d Debian -e /home/benie/.config/tmux/system-info/system-info-WSL.sh'
disallow_start_if_on_batteries: false
stop_if_going_on_batteries: false
execution_time_limit: PT0S
logon_type: password
username: '{{ansible_user}}'
password: '{{ansible_password}}'
multiple_instances: 3
run_level: limited
start_when_available: true
wake_to_run: false
# - TODO: configure firewall

View File

@@ -1,9 +0,0 @@
[Unit]
Description=System Info
[Service]
ExecStart={{SYSTEM_INFO_SCRIPT}}
Environment=LC_ALL=C.UTF-8
[Install]
WantedBy=default.target

View File

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

View File

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

View File

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

View File

@@ -3,21 +3,6 @@
pacman:
name:
- tmux
- xclip
- urlscan
state: latest
- name: install pacman package
when: '"WSL" not in ansible_kernel'
become: true
pacman:
name: xsel
state: latest
- name: remove pacman package
when: '"WSL" in ansible_kernel'
become: true
pacman:
name:
- xclip
- xsel
state: absent

View File

@@ -3,34 +3,7 @@
homebrew:
name:
- tmux
- osx-cpu-temp
- reattach-to-user-namespace
- urlview
state: latest
- name: check terminal info description exists
command: /usr/bin/infocmp -x tmux-256color
changed_when: false
failed_when: false
register: terminfo_exists
- name: download latest terminfo description
when: terminfo_exists.rc == 1
get_url:
url: https://gist.githubusercontent.com/nicm/ea9cf3c93f22e0246ec858122d9abea1/raw/37ae29fc86e88b48dbc8a674478ad3e7a009f357/tmux-256color
dest: ~/tmux-256color
- name: compile terminal info
when: terminfo_exists.rc == 1
command: /usr/bin/tic -x ~/tmux-256color
- name: cleanup downloaded terminfo description
when: terminfo_exists.rc == 1
file:
path: ~/tmux-256color
state: absent
- name: check terminal info description exists
when: terminfo_exists.rc == 1
command: /usr/bin/infocmp -x tmux-256color
changed_when: false
register: terminfo_exists

View File

@@ -1,26 +1,12 @@
---
- name: install apt packages
become: true
apt:
package:
name:
- tmux
- gawk
- jq
- sysstat
- urlview
state: latest
- name: install apt package
when: '"WSL" not in ansible_kernel'
become: true
apt:
name: xsel
state: latest
- name: remove apt package
when: '"WSL" in ansible_kernel'
become: true
apt:
name:
- xclip
- xsel
state: absent
state: latest

View File

@@ -3,22 +3,8 @@
dnf:
name:
- tmux
- xclip
- urlscan
- sysstat
- jq
state: latest
- name: install dnf package
when: '"WSL" not in ansible_kernel'
become: true
dnf:
name: xsel
state: latest
- name: remove dnf package
when: '"WSL" in ansible_kernel'
become: true
dnf:
name:
- xclip
- xsel
state: absent

View File

@@ -9,4 +9,31 @@
# TODO: - name: set repo email
- include_tasks: ~/.config/tmux/tasks.yaml
- name: create layouts directory
file:
state: directory
dest: ~/.local/share/tmux/layouts
- name: create symbolic links
file:
state: link
src: '{{item.src}}'
dest: '{{item.dest}}'
with_items:
- src: ~/.config/tmux/tmux.conf
dest: ~/.tmux.conf
- src: ~/.config/tmux/layouts/session-main
dest: ~/.local/share/tmux/layouts/session-main
- src: ~/.config/tmux/layouts/window-tall
dest: ~/.local/share/tmux/layouts/window-tall
- src: ~/.config/tmux/layouts/window-wide-left
dest: ~/.local/share/tmux/layouts/window-wide-left
- src: ~/.config/tmux/layouts/window-wide-right
dest: ~/.local/share/tmux/layouts/window-wide-right
# TODO: - name: Enable tmux system-info service
# command: system-info/install.sh
# TODO: WSL2 system-info
# when: '"WSL" in ansible_kernel'
# figure out best way to run daemon...

View File

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

View File

@@ -1,6 +0,0 @@
---
- name: install homebrew package
when: ansible_os_family == "Darwin"
homebrew:
name: watch
state: latest

View File

@@ -0,0 +1,3 @@
---
- set_fact:
download_url: https://cdn-2.webcatalog.io/webcatalog/WebCatalog-{{latest.version}}-universal.dmg

View File

@@ -0,0 +1,31 @@
---
- assert: {that: [ansible_machine == 'x86_64']}
- set_fact:
filename: 'WebCatalog-{{latest.version}}.AppImage'
# TODO: Support arm64: 'WebCatalog-{{latest.version}}-arm64.AppImage'
- name: create directory for download
file:
state: directory
dest: ~/.local/src/webcatalog
- name: download AppImage
get_url:
url: 'https://cdn-2.webcatalog.io/webcatalog/{{filename}}'
dest: '~/.local/src/webcatalog/{{filename}}'
- name: make AppImage executable
file:
dest: '~/.local/src/webcatalog/{{filename}}'
mode: a+x
- name: create symbolic link
file:
src: '~/.local/src/webcatalog/{{filename}}'
dest: '~/.local/bin/WebCatalog'
state: link
- name: create desktop file
template:
dest: io.webcatalog.WebCatalog.desktop

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