Compare commits
37 Commits
a9aa1bdaaf
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d20cba3e15 | |||
| 27f887b044 | |||
| c70a31b633 | |||
| 80434f1cfa | |||
| 658e35a145 | |||
| 06a4d1b923 | |||
| fe220c231a | |||
| e633da1e7c | |||
| 7823cfb683 | |||
| 0a385259a5 | |||
| cf77532254 | |||
| 7e2a813682 | |||
| 9bd29dcdd2 | |||
| 173c7261b3 | |||
| ee3ea63383 | |||
| d41ea98da0 | |||
| 77a4fdcc16 | |||
| 8810309515 | |||
| b6b18b2b94 | |||
| 2286452f5b | |||
| ae689d46b1 | |||
| 6882a9dda3 | |||
| 4bc647bcad | |||
| 928f9b2cfc | |||
| b47d77b671 | |||
| 689f83250f | |||
| d8a46b017d | |||
| 518efca73d | |||
| 002bc54819 | |||
| 6b77328851 | |||
| fbd829218b | |||
| df5390c31e | |||
| 5eb6570617 | |||
| 79b1cf98eb | |||
| 5210a451b2 | |||
| d18a9550c9 | |||
| 1995bf3bc2 |
@@ -2,4 +2,5 @@
|
||||
collections_path = collections
|
||||
library = library
|
||||
roles_path = roles
|
||||
stdout_callback = yaml
|
||||
callback_result_format = yaml
|
||||
inject_facts_as_vars = True
|
||||
|
||||
121
library/tuck.py
Normal file
121
library/tuck.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
from os import environ
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
||||
DOCUMENTATION = """
|
||||
module: tuck
|
||||
author:
|
||||
- Kenneth Benzie (Benie)
|
||||
short_description: Ansible kmodule for the tuck tool
|
||||
options:
|
||||
name:
|
||||
description:
|
||||
- GitHub project name of the package to manage
|
||||
type: str
|
||||
state:
|
||||
description:
|
||||
- Desired state of the package
|
||||
type: str
|
||||
choices:
|
||||
- "latest"
|
||||
- "absent"
|
||||
"""
|
||||
|
||||
EXAMPLES = """
|
||||
- name: install package
|
||||
tuck:
|
||||
name: kbenzie/tuck
|
||||
state: present
|
||||
|
||||
- name: uninstall package
|
||||
tuck:
|
||||
name: kbenzie/tuck
|
||||
state: absent
|
||||
"""
|
||||
|
||||
|
||||
def installed(tuck) -> list[str]:
|
||||
result = subprocess.run(
|
||||
[tuck, "list", "--quiet"],
|
||||
capture_output=True,
|
||||
check=True,
|
||||
)
|
||||
return result.stdout.decode("utf-8").split("\n")
|
||||
|
||||
|
||||
def present(tuck: Path, package: str) -> dict:
|
||||
if package in installed(tuck):
|
||||
return dict(changed=False)
|
||||
return latest(tuck, package)
|
||||
|
||||
|
||||
def latest(tuck: Path, package: str) -> dict:
|
||||
result = subprocess.run(
|
||||
[tuck, "install", package],
|
||||
capture_output=True,
|
||||
check=True,
|
||||
)
|
||||
return dict(changed=True, stdout=result.stdout)
|
||||
|
||||
|
||||
def absent(tuck: Path, package: str) -> dict:
|
||||
if package not in installed(tuck):
|
||||
return dict(changed=False)
|
||||
result = subprocess.run(
|
||||
[tuck, "remove", package],
|
||||
capture_output=True,
|
||||
check=True,
|
||||
)
|
||||
return dict(changed=True, stdout=result.stdout)
|
||||
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(
|
||||
argument_spec=dict(
|
||||
name=dict(type="str"),
|
||||
state=dict(
|
||||
type="str",
|
||||
choices=[
|
||||
"absent",
|
||||
"latest",
|
||||
"present",
|
||||
],
|
||||
default="present",
|
||||
),
|
||||
),
|
||||
supports_check_mode=False,
|
||||
)
|
||||
|
||||
tuck = Path(environ["HOME"]) / ".local" / "bin" / "tuck"
|
||||
try:
|
||||
if not (tuck.is_file() and os.access(tuck, os.X_OK)):
|
||||
response = requests.get("https://kbenzie.github.io/tuck/get.sh")
|
||||
response.raise_for_status()
|
||||
subprocess.run(
|
||||
["/bin/sh"],
|
||||
input=response.text.encode("utf-8"),
|
||||
check=True,
|
||||
)
|
||||
|
||||
module.exit_json(
|
||||
**{
|
||||
"absent": absent,
|
||||
"present": present,
|
||||
"latest": latest,
|
||||
}[module.params["state"]](tuck, module.params["name"])
|
||||
)
|
||||
|
||||
except requests.RequestException as error:
|
||||
module.fail_json(f"failed to install tuck: {error}")
|
||||
except subprocess.CalledProcessError as error:
|
||||
module.fail_json(f"failed to install tuck: {error.stderr}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -93,7 +93,7 @@ function Get-GitRemoteHeadBranch {
|
||||
$result = Run-Command -command $command -working_directory $dest
|
||||
if ($result.rc -ne 0) {
|
||||
$module.FailJson("Could not determine the default HEAD branch of remote: $remote" ` +
|
||||
"$result.stdout $result.stderr")
|
||||
$result.stderr)
|
||||
}
|
||||
return $result.stdout.Trim().Replace("$remote/", '')
|
||||
}
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
$module = [Ansible.Basic.AnsibleModule]::Create($args, @{
|
||||
options = @{
|
||||
name = @{
|
||||
type = "str"
|
||||
default = $null
|
||||
type = "list"
|
||||
elements = "str"
|
||||
required = $true
|
||||
}
|
||||
state = @{
|
||||
type = "str"
|
||||
@@ -18,7 +19,7 @@ $module = [Ansible.Basic.AnsibleModule]::Create($args, @{
|
||||
supports_check_mode = $false
|
||||
})
|
||||
|
||||
$name = $module.Params.name
|
||||
$names = $module.Params.name
|
||||
$state = $module.Params.state
|
||||
$winget = Get-ExecutablePath "winget"
|
||||
$noPackageString = "No installed package found matching input criteria."
|
||||
@@ -48,7 +49,8 @@ function Test-UpgradeAvailable {
|
||||
return $true
|
||||
}
|
||||
|
||||
switch ($state) {
|
||||
foreach ($name in $names) {
|
||||
switch ($state) {
|
||||
"absent" {
|
||||
if (Test-Installed) {
|
||||
$command = "`"$winget`" uninstall `"$name`""
|
||||
@@ -65,7 +67,7 @@ switch ($state) {
|
||||
|
||||
"latest" {
|
||||
if (Test-UpgradeAvailable) {
|
||||
$command = "`"$winget`" install `"$name`""
|
||||
$command = "`"$winget`" install --accept-package-agreements --accept-source-agreements `"$name`""
|
||||
$result = Run-Command -command $command
|
||||
if ($result.rc -ne 0) {
|
||||
$module.Result.rc = $result.rc
|
||||
@@ -79,7 +81,7 @@ switch ($state) {
|
||||
|
||||
"present" {
|
||||
if (!(Test-Installed)) {
|
||||
$command = "`"$winget`" install `"$name`""
|
||||
$command = "`"$winget`" install --accept-package-agreements --accept-source-agreements `"$name`""
|
||||
$result = Run-Command -command $command
|
||||
if ($result.rc -ne 0) {
|
||||
$module.Result.rc = $result.rc
|
||||
@@ -90,6 +92,7 @@ switch ($state) {
|
||||
$module.Result.changed = $true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$module.Result.rc = 0
|
||||
|
||||
@@ -11,7 +11,7 @@ options:
|
||||
name:
|
||||
description:
|
||||
- Name of the package to manage.
|
||||
type: str
|
||||
type: list[str]
|
||||
state:
|
||||
description:
|
||||
- Indicates the desired package state. V(latest) ensures that the latest
|
||||
|
||||
@@ -13,3 +13,5 @@
|
||||
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
|
||||
- role: xremap
|
||||
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
|
||||
- role: fedora-workstation
|
||||
when: ansible_os_family == 'RedHat' and ansible_distribution == 'Fedora'
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- vars/environment.yaml
|
||||
roles:
|
||||
- role: gdb
|
||||
- role: nvtop
|
||||
- role: podman
|
||||
- role: system-info
|
||||
when: disable_systemd is not defined
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
- role: ripgrep
|
||||
- role: tidy
|
||||
- role: tree
|
||||
- role: typst
|
||||
- role: watch
|
||||
- role: wget
|
||||
- role: yq
|
||||
|
||||
@@ -14,3 +14,4 @@
|
||||
- role: powertoys
|
||||
- role: windows-terminal
|
||||
- role: wezterm
|
||||
- role: neovide
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
- role: jq
|
||||
- role: ripgrep
|
||||
- role: tree
|
||||
- role: typst
|
||||
- role: yq
|
||||
|
||||
- role: llvm
|
||||
|
||||
12
playbooks/macOS-work.yaml
Normal file
12
playbooks/macOS-work.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- import_playbook: UnixCLI.yaml
|
||||
- hosts: localhost
|
||||
vars_files:
|
||||
- vars/environment.yaml
|
||||
roles:
|
||||
- role: system-info
|
||||
- role: fonts
|
||||
- role: iterm
|
||||
- role: kitty
|
||||
- role: neovide
|
||||
- role: macos
|
||||
@@ -15,8 +15,9 @@
|
||||
- role: hiddenbar
|
||||
- role: iterm
|
||||
- role: kitty
|
||||
- role: magnet
|
||||
- role: microsoft-remote-desktop
|
||||
- role: neovide
|
||||
- role: rectangle
|
||||
- role: windows-app
|
||||
- role: viscosity
|
||||
|
||||
- role: macos
|
||||
|
||||
@@ -6,26 +6,10 @@
|
||||
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: download latest installer
|
||||
when: not app_stat.stat.exists
|
||||
win_get_url:
|
||||
url: https://downloads.1password.com/win/1PasswordSetup-latest.exe
|
||||
dest: '{{installer_exe}}'
|
||||
environment: '{{proxy_environment}}'
|
||||
|
||||
- name: run installer
|
||||
when: not app_stat.stat.exists
|
||||
win_command: '{{installer_exe}}'
|
||||
|
||||
- name: remove installer
|
||||
win_file:
|
||||
path: '{{installer_exe}}'
|
||||
state: absent
|
||||
- name: install chocolatey package
|
||||
win_chocolatey:
|
||||
state: latest
|
||||
name: 1password
|
||||
|
||||
- name: create start menu shortcut
|
||||
win_shortcut:
|
||||
@@ -34,51 +18,27 @@
|
||||
icon: '{{app_exe}},0'
|
||||
|
||||
# CLI
|
||||
- name: install scoop cli package
|
||||
community.windows.win_scoop:
|
||||
state: present
|
||||
name: 1password-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: create cli directory
|
||||
win_file:
|
||||
state: directory
|
||||
path: '{{cli_dir}}'
|
||||
|
||||
- name: get installed op version
|
||||
when: cli_stat.stat.exists == True
|
||||
win_command: '{{cli_exe}} --version'
|
||||
register: cli_version
|
||||
changed_when: false
|
||||
- name: remove old op executable
|
||||
win_file:
|
||||
state: absent
|
||||
path: '{{cli_dir}}\op.exe'
|
||||
|
||||
- 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}}'
|
||||
environment: '{{proxy_environment}}'
|
||||
|
||||
- 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
|
||||
- name: remove old op install directory from user PATH
|
||||
win_path:
|
||||
state: absent
|
||||
scope: user
|
||||
name: Path
|
||||
elements: '{{cli_dir}}'
|
||||
@@ -86,7 +46,7 @@
|
||||
- name: get op powershell completion script
|
||||
win_command:
|
||||
argv:
|
||||
- '{{ansible_env.LOCALAPPDATA}}/1Password/cli/op.exe'
|
||||
- '{{ansible_env.LOCALAPPDATA}}\Scoop\shims\op.exe'
|
||||
- completion
|
||||
- powershell
|
||||
register: powershell_completion_script
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
- name: remote chocolatey package
|
||||
- name: remove chocolatey package
|
||||
win_chocolatey:
|
||||
name: ag
|
||||
state: absent
|
||||
|
||||
@@ -31,3 +31,25 @@
|
||||
run_level: highest
|
||||
start_when_available: true
|
||||
wake_to_run: false
|
||||
|
||||
- name: create scheduled task
|
||||
win_scheduled_task:
|
||||
path: Benie
|
||||
name: mouse.ahk
|
||||
state: present
|
||||
enable: true
|
||||
triggers:
|
||||
- type: logon
|
||||
enabled: true
|
||||
- type: registration
|
||||
enabled: true
|
||||
actions:
|
||||
- path: '{{autohotkey_repo_dir}}/mouse.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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
- name: remote chocolatey package
|
||||
- name: remove chocolatey package
|
||||
win_chocolatey:
|
||||
name: Bat
|
||||
state: absent
|
||||
|
||||
16
roles/fedora-workstation/tasks/main.yaml
Normal file
16
roles/fedora-workstation/tasks/main.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- assert:
|
||||
that: ansible_os_family == 'RedHat' and ansible_distribution == 'Fedora'
|
||||
|
||||
- name: install non-free gstreamer plugins
|
||||
become: true
|
||||
dnf:
|
||||
state: latest
|
||||
allowerasing: true
|
||||
name:
|
||||
- ffmpeg
|
||||
- gstreamer1-plugins-bad-free
|
||||
- gstreamer1-plugins-bad-freeworld
|
||||
- gstreamer1-plugins-base
|
||||
- gstreamer1-plugins-good
|
||||
- gstreamer1-plugins-ugly
|
||||
@@ -1,8 +1,4 @@
|
||||
---
|
||||
- name: enable homebrew tap
|
||||
homebrew_tap:
|
||||
name: homebrew/cask-fonts
|
||||
|
||||
- name: install Caskaydia Cove Nerd Font
|
||||
homebrew_cask:
|
||||
name: font-caskaydia-cove-nerd-font
|
||||
|
||||
14
roles/gemini-cli/tasks/main.yaml
Normal file
14
roles/gemini-cli/tasks/main.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: install homebrew package
|
||||
when: ansible_os_family == 'Darwin'
|
||||
homebrew:
|
||||
state: latest
|
||||
name: gemini-cli
|
||||
|
||||
- name: install npm package
|
||||
when: ansible_os_family != 'Darwin'
|
||||
become: true
|
||||
community.general.npm:
|
||||
name: '@google/gemini-cli'
|
||||
state: latest
|
||||
global: true
|
||||
@@ -33,6 +33,8 @@
|
||||
key: switch-input-source-backward
|
||||
value: '@as []'
|
||||
|
||||
# TODO: window full screen toggle keybinding
|
||||
|
||||
# NOTE: Use this command to see default keybindings
|
||||
# gsettings list-recursively | grep -i -E 'media-keys|keybindings'
|
||||
# NOTE: Use this command to inspect the current state of the custom keybindings
|
||||
@@ -66,3 +68,6 @@
|
||||
|
||||
- when: ansible_distribution == 'Ubuntu'
|
||||
include_tasks: Ubuntu.yaml
|
||||
|
||||
# TODO: install gnome extensions
|
||||
# TODO: /org/gnome/shell/extensions/quake-terminal/terminal-shortcut = ['<Super>space']
|
||||
|
||||
29
roles/hammerspoon/tasks/main.yaml
Normal file
29
roles/hammerspoon/tasks/main.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- set_fact:
|
||||
config_dir: '{{ansible_env.HOME}}/.hammerspoon'
|
||||
|
||||
- name: create config directory
|
||||
file:
|
||||
state: directory
|
||||
path: '{{config_dir}}'
|
||||
|
||||
- name: install config file
|
||||
template:
|
||||
src: init.lua
|
||||
dest: '{{config_dir}}/init.lua'
|
||||
|
||||
- name: install homebrew package
|
||||
homebrew:
|
||||
state: latest
|
||||
name: hammerspoon
|
||||
|
||||
- name: create spoons directory
|
||||
file:
|
||||
state: directory
|
||||
path: '{{config_dir}}/Spoons'
|
||||
|
||||
- name: install SpoonInstall Spoon
|
||||
unarchive:
|
||||
src: https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpoonInstall.spoon.zip
|
||||
dest: '{{config_dir}}/Spoons'
|
||||
remote_src: yes
|
||||
20
roles/hammerspoon/templates/init.lua
Normal file
20
roles/hammerspoon/templates/init.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
require('hs.ipc')
|
||||
|
||||
hs.loadSpoon("SpoonInstall")
|
||||
spoon.SpoonInstall:andUse("EmmyLua")
|
||||
|
||||
hs.hotkey.bind({'alt', 'cmd'}, 'B', function()
|
||||
hs.application.launchOrFocus('Firefox')
|
||||
end)
|
||||
|
||||
hs.hotkey.bind({'alt', 'cmd'}, 'T', function()
|
||||
hs.application.launchOrFocus('kitty')
|
||||
end)
|
||||
|
||||
hs.hotkey.bind({'alt', 'cmd'}, 'F', function()
|
||||
hs.application.launchOrFocus('Ferdium')
|
||||
end)
|
||||
|
||||
pcall(function()
|
||||
require('local')
|
||||
end)
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
- name: remote chocolatey package
|
||||
- name: remove chocolatey package
|
||||
win_chocolatey:
|
||||
name: jq
|
||||
state: absent
|
||||
|
||||
@@ -7,3 +7,5 @@
|
||||
domain: com.apple.desktopservices
|
||||
key: DSDontWriteNetworkStores
|
||||
value: 'true'
|
||||
|
||||
# TODO: ^Space Keyboard Shortcut for switching Input Sources
|
||||
|
||||
14
roles/neovide/tasks/main.yaml
Normal file
14
roles/neovide/tasks/main.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: install homebrew package
|
||||
when: ansible_os_family == 'Darwin'
|
||||
homebrew_cask:
|
||||
name: neovide-app
|
||||
state: latest
|
||||
|
||||
- name: install winget package
|
||||
when: ansible_os_family == 'Winodws'
|
||||
win_winget:
|
||||
name: Neovide.Neovide
|
||||
state: latest
|
||||
|
||||
# TODO: install linux package
|
||||
@@ -10,26 +10,12 @@
|
||||
state: absent
|
||||
|
||||
- set_fact:
|
||||
old_package_dir: '/usr/local/lib/nvim/nvim-linux64'
|
||||
old_package_dirs:
|
||||
- /usr/local/lib/nvim/nvim-linux-x86_64
|
||||
- /usr/local/stow/nvim/nvim-linux64
|
||||
|
||||
- name: check if old package directory exists
|
||||
stat:
|
||||
path: '{{old_package_dir}}'
|
||||
register: old_package
|
||||
|
||||
- name: uninstall package from old directory
|
||||
when: old_package.stat.exists
|
||||
become: true
|
||||
command:
|
||||
cmd: 'stow --delete --target /usr/local .'
|
||||
chdir: '{{old_package_dir}}'
|
||||
|
||||
- name: remove old package directory
|
||||
when: old_package.stat.exists
|
||||
become: true
|
||||
file:
|
||||
state: absent
|
||||
path: '{{old_package_dir}}'
|
||||
- include_tasks: sudo-rmdir.yaml
|
||||
with_items: '{{old_package_dirs}}'
|
||||
|
||||
- name: install gnu stow for managing tar.gz package
|
||||
become: true
|
||||
@@ -68,7 +54,7 @@
|
||||
install_required:
|
||||
'{{installed_version is not defined or
|
||||
installed_version != latest.json.tag_name}}'
|
||||
asset_query: '[?contains(name, `nvim-linux64.tar.gz`)]'
|
||||
asset_query: '[?contains(name, `nvim-linux-x86_64.tar.gz`)]'
|
||||
package_dir: '/usr/local/stow/nvim'
|
||||
- set_fact:
|
||||
uninstall_required: '{{nvim.stat.exists and install_required}}'
|
||||
@@ -78,7 +64,7 @@
|
||||
- name: remove nuisance mimeinfo.cache file
|
||||
become: true
|
||||
file:
|
||||
path: /usr/local/stow/nvim/nvim-linux64/share/applications/mimeinfo.cache
|
||||
path: /usr/local/stow/nvim/nvim-linux-x86_64/share/applications/mimeinfo.cache
|
||||
state: absent
|
||||
|
||||
- name: uninstall old package from /usr/local
|
||||
@@ -86,13 +72,13 @@
|
||||
become: true
|
||||
command:
|
||||
cmd: 'stow --delete --target /usr/local .'
|
||||
chdir: '{{package_dir}}/nvim-linux64'
|
||||
chdir: '{{package_dir}}/nvim-linux-x86_64'
|
||||
|
||||
- name: remove old package
|
||||
become: true
|
||||
when: uninstall_required
|
||||
file:
|
||||
path: '{{package_dir}}/nvim-linux64'
|
||||
path: '{{package_dir}}/nvim-linux-x86_64'
|
||||
state: absent
|
||||
|
||||
- name: create package directory
|
||||
@@ -128,6 +114,6 @@
|
||||
become: true
|
||||
command:
|
||||
cmd: 'stow --no-folding --target /usr/local .'
|
||||
chdir: '{{package_dir}}/nvim-linux64'
|
||||
chdir: '{{package_dir}}/nvim-linux-x86_64'
|
||||
|
||||
- include_tasks: Unix.yaml
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
---
|
||||
- name: install winget packages
|
||||
win_winget:
|
||||
name:
|
||||
- neovim.neovim
|
||||
- equalsraf.neovim-qt
|
||||
state: latest
|
||||
|
||||
- name: install chocolatey packages
|
||||
- name: remove chocolatey package
|
||||
win_chocolatey:
|
||||
name: neovim
|
||||
state: latest
|
||||
state: absent
|
||||
|
||||
- set_fact:
|
||||
vim_config_dir: '{{ansible_env.LOCALAPPDATA}}\nvim'
|
||||
@@ -14,39 +20,15 @@
|
||||
dest: '{{vim_config_dir}}'
|
||||
branch: main
|
||||
|
||||
# - TODO: neovim install pip packages
|
||||
# win_pip:
|
||||
# name: '{{neovim_pip_packages}}'
|
||||
# state: latest
|
||||
|
||||
- name: create nvim start menu shortcut
|
||||
win_shortcut:
|
||||
src: '{{ansible_env.ChocolateyToolsLocation}}/neovim/nvim-win64/bin/nvim-qt.exe'
|
||||
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
|
||||
changed_when: false
|
||||
|
||||
- when: config_repo_tasks.stat.exists
|
||||
include_tasks: vim_config_tasks.yaml
|
||||
|
||||
- name: remove fetched tasks
|
||||
file:
|
||||
state: absent
|
||||
path: vim_config_tasks.yaml
|
||||
changed_when: false
|
||||
delegate_to: localhost
|
||||
# TODO: Create neovim-qt start menu shortcut
|
||||
# Need a reliable way to get the path to nvim-qt which doesn't reply on
|
||||
# where.exe or similar as it won't work on first install due to environment
|
||||
# variable update. winget installs the equalsraf.neovim-qt package in
|
||||
# {{ansible_env.ProgramFiles}}\neovim-qt {{neovim_qt_version}}\bin\nvim.qt.exe
|
||||
# so if I can get the version out of winget that would be a start.
|
||||
# - name: create nvim start menu shortcut
|
||||
# win_shortcut:
|
||||
# src: '{{neovim_qt_exe}}'
|
||||
# dest: '{{ansible_env.ProgramData}}/Microsoft/Windows/Start Menu/Programs/nvim-qt.lnk'
|
||||
# icon: '{{neovim_qt_exe}},0'
|
||||
# directory: '{{ansible_env.USERPROFILE}}'
|
||||
|
||||
19
roles/neovim/tasks/sudo-rmdir.yaml
Normal file
19
roles/neovim/tasks/sudo-rmdir.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: check if {{item}} exists
|
||||
stat:
|
||||
path: '{{item}}'
|
||||
register: old_package
|
||||
|
||||
- name: uninstall package from {{item}}
|
||||
when: old_package.stat.exists
|
||||
become: true
|
||||
command:
|
||||
cmd: 'stow --delete --target /usr/local .'
|
||||
chdir: '{{item}}'
|
||||
|
||||
- name: remove {{item}}
|
||||
when: old_package.stat.exists
|
||||
become: true
|
||||
file:
|
||||
state: absent
|
||||
path: '{{item}}'
|
||||
@@ -1,7 +1,3 @@
|
||||
---
|
||||
neovim_pip_packages:
|
||||
- cmake-language-server
|
||||
- cmakelint
|
||||
- compdb
|
||||
- vim-vint
|
||||
- yamllint
|
||||
|
||||
@@ -26,4 +26,4 @@
|
||||
state: link
|
||||
src: '~/.local/src/node/node-{{latest.json[0].version}}-linux-x64/bin/{{item}}'
|
||||
dest: '~/.local/bin/{{item}}'
|
||||
with_items: [corepack, node, npm, npx]
|
||||
with_items: [node, npm, npx]
|
||||
|
||||
40
roles/nvtop/tasks/install-appimage.yaml
Normal file
40
roles/nvtop/tasks/install-appimage.yaml
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
- name: get latest github release
|
||||
uri:
|
||||
url: https://api.github.com/repos/Syllo/nvtop/releases/latest
|
||||
headers: '{{github_auth_headers}}'
|
||||
register: latest
|
||||
|
||||
- set_fact:
|
||||
asset_query: '[?contains(name, `x86_64.AppImage`)] | [0]'
|
||||
assets: '{{latest.json.assets}}'
|
||||
latest_version: '{{latest.json.tag_name}}'
|
||||
nvtop_exe: '/usr/local/bin/nvtop'
|
||||
|
||||
- name: check if already installed
|
||||
stat:
|
||||
path: '{{nvtop_exe}}'
|
||||
register: nvtop_stat
|
||||
|
||||
- name: get installed version
|
||||
when: nvtop_stat.stat.exists == True
|
||||
command: '{{nvtop_exe}} --version'
|
||||
register: nvtop_version_output
|
||||
changed_when: false
|
||||
|
||||
- when: nvtop_stat.stat.exists == True
|
||||
set_fact:
|
||||
installed_version:
|
||||
'{{nvtop_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
|
||||
become: true
|
||||
get_url:
|
||||
url: '{{asset.browser_download_url}}'
|
||||
dest: '{{nvtop_exe}}'
|
||||
mode: +x
|
||||
environment: '{{proxy_environment}}'
|
||||
10
roles/nvtop/tasks/main.yaml
Normal file
10
roles/nvtop/tasks/main.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: install dnf package
|
||||
when: ansible_os_family == 'RedHat'
|
||||
become: true
|
||||
dnf:
|
||||
state: latest
|
||||
name: nvtop
|
||||
|
||||
- when: ansible_os_family != 'RedHat'
|
||||
include_tasks: install-appimage.yaml
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
- name: clone config repos
|
||||
win_git:
|
||||
repo: https://git.infektor.net/config/WindowsPowerShell.git
|
||||
repo: git@git.infektor.net:config/WindowsPowerShell.git
|
||||
dest: '{{powershell_config_dir}}'
|
||||
branch: main
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
- assert:
|
||||
that: ansible_os_family == 'Darwin'
|
||||
|
||||
- name: install app store package
|
||||
mas:
|
||||
id: 441258766
|
||||
- name: install homebrew package
|
||||
homebrew_cask:
|
||||
name: rectangle
|
||||
state: latest
|
||||
@@ -27,7 +27,7 @@
|
||||
- name: fix systemd unit
|
||||
become: true
|
||||
copy:
|
||||
path: /usr/lib/systemd/user/sunshine.service
|
||||
dest: /usr/lib/systemd/user/sunshine.service
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Sunshine is a self-hosted game stream host for Moonlight.
|
||||
|
||||
@@ -1,14 +1,34 @@
|
||||
---
|
||||
- name: install gawk package
|
||||
homebrew:
|
||||
name: gawk
|
||||
state: latest
|
||||
|
||||
- name: install iSMC package
|
||||
tuck:
|
||||
name: dkorunic/iSMC
|
||||
state: latest
|
||||
|
||||
- name: get list of running launchd services
|
||||
command: launchctl list
|
||||
register: launchd_running_services
|
||||
changed_when: false
|
||||
|
||||
- set_fact:
|
||||
system_info_plist_dir: '{{ansible_env.HOME}}/Library/LaunchAgents'
|
||||
|
||||
- name: create plist directory
|
||||
file:
|
||||
state: directory
|
||||
path: '{{system_info_plist_dir}}'
|
||||
|
||||
- name: determine if system-info is currently running
|
||||
set_fact:
|
||||
system_info_debug: true
|
||||
system_info_plist_path: '{{ansible_env.HOME}}/Library/LaunchAgents/system-info.plist'
|
||||
system_info_running: "{{'system-info' in launchd_running_services.stdout}}"
|
||||
system_info_plist_path:
|
||||
'{{system_info_plist_dir}}/system-info.plist'
|
||||
system_info_running:
|
||||
"{{'system-info' in launchd_running_services.stdout}}"
|
||||
|
||||
- name: install system-info launchd plist
|
||||
template:
|
||||
|
||||
76
roles/typst/tasks/Linux.yaml
Normal file
76
roles/typst/tasks/Linux.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
- name: get latest github release
|
||||
uri:
|
||||
url: https://api.github.com/repos/typst/typst/releases/latest
|
||||
headers: '{{github_auth_headers}}'
|
||||
register: latest
|
||||
|
||||
- set_fact:
|
||||
asset_name: >-
|
||||
{{
|
||||
{
|
||||
'amd64': 'typst-x86_64-unknown-linux-musl',
|
||||
'x86_64': 'typst-x86_64-unknown-linux-musl',
|
||||
'arm64': 'typst-aarch64-unknown-linux-musl',
|
||||
}[ansible_architecture]
|
||||
}}
|
||||
|
||||
- set_fact:
|
||||
asset_query: '[?contains(name, `{{asset_name}}.tar.xz`)] | [0]'
|
||||
assets: '{{latest.json.assets}}'
|
||||
asset_archive: '{{asset_name}}.tar.xz'
|
||||
latest_version: '{{latest.json.tag_name}}'
|
||||
exe: '{{ansible_env.HOME}}/.local/bin/typst'
|
||||
|
||||
- name: check if already installed
|
||||
stat:
|
||||
path: '{{exe}}'
|
||||
register: stat_exe
|
||||
|
||||
- name: get installed version
|
||||
when: stat_exe.stat.exists == True
|
||||
command: '{{exe}} --version'
|
||||
register: version_output
|
||||
changed_when: false
|
||||
|
||||
- when: stat_exe.stat.exists == True
|
||||
set_fact:
|
||||
installed_version:
|
||||
'v{{version_output.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
|
||||
|
||||
- set_fact:
|
||||
asset: '{{assets | to_json | from_json | json_query(asset_query)}}'
|
||||
|
||||
- name: download archive
|
||||
when: installed_version is not defined or installed_version != latest_version
|
||||
get_url:
|
||||
url: '{{asset.browser_download_url}}'
|
||||
dest: '/tmp/{{asset_archive}}'
|
||||
environment: '{{proxy_environment}}'
|
||||
|
||||
- name: extract archive
|
||||
when: installed_version is not defined or installed_version != latest_version
|
||||
unarchive:
|
||||
src: '/tmp/{{asset_archive}}'
|
||||
dest: '/tmp'
|
||||
|
||||
- name: remove archive
|
||||
when: installed_version is not defined or installed_version != latest_version
|
||||
file:
|
||||
state: absent
|
||||
path: '/tmp/{{asset_archive}}'
|
||||
|
||||
- name: copy executable
|
||||
when: installed_version is not defined or installed_version != latest_version
|
||||
copy:
|
||||
src: '/tmp/{{asset_name}}/typst'
|
||||
dest: '{{exe}}'
|
||||
mode: +x
|
||||
|
||||
- name: remove extraced archive
|
||||
when: installed_version is not defined or installed_version != latest_version
|
||||
file:
|
||||
state: absent
|
||||
path: '/tmp/{{asset_archive}}'
|
||||
|
||||
# TODO: install zsh completions
|
||||
15
roles/typst/tasks/main.yaml
Normal file
15
roles/typst/tasks/main.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
- name: install homebrew package
|
||||
when: ansible_os_family == 'Darwin'
|
||||
homebrew:
|
||||
state: latest
|
||||
name: typst
|
||||
|
||||
- name: install scoop package
|
||||
when: ansible_os_family == 'Windows'
|
||||
community.windows.win_scoop:
|
||||
state: present
|
||||
name: typst
|
||||
|
||||
- when: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
|
||||
include_tasks: Linux.yaml
|
||||
@@ -4,5 +4,5 @@
|
||||
|
||||
- name: install homebrew cask
|
||||
homebrew_cask:
|
||||
name: microsoft-remote-desktop
|
||||
name: windows-app
|
||||
state: latest
|
||||
Reference in New Issue
Block a user