1 Commits

Author SHA1 Message Date
b970cbc8ca Update kitty to install from GitHub on Debian
Older version of kitty have terrible font rendering on Linux, e.g. the
one shipped with Ubuntu 22.04, so instead install the latest version
from the provided GitHub packages.
2024-04-19 20:50:44 +01:00
82 changed files with 359 additions and 1310 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,2 @@
external
playbooks/test.yaml
__pycache__

View File

@@ -2,5 +2,4 @@
collections_path = collections
library = library
roles_path = roles
callback_result_format = yaml
inject_facts_as_vars = True
stdout_callback = yaml

View File

@@ -1,146 +0,0 @@
# -*- coding: utf-8 -*-
from typing import Tuple
from ansible.module_utils.basic import AnsibleModule
DOCUMENTATION = """
module: gsettings
author:
- Kenneth Benzie (Benie)
short_description: Ansible module for the gsettings configuration tool
options:
schema:
description:
- Schema ID of the settings to configure.
type: str
key:
description:
- Key of an individaul setting to configure.
type: str
value:
description:
- Value to configure the setting with.
- Mutually exclusive with reset.
type: str
reset:
description:
- Flag to reset the setting to the default value.
- Mutually exclusive with value.
type:
default: false
"""
EXAMPLES = """
- name: get gnome color-scheme current value
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
register: color_scheme
- debug: msg={{color_scheme.value}}
- name: set gnome color-scheme to 'prefer-dark'
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
value: "'prefer-dark'"
- name: reset gnome color-scheme to default value
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
reset: true
"""
RETURN = """
value:
description: Value of the setting.
returned: Returned when there is a value.
type: str
sample: "'default'"
stderr:
description: Error output from gsettings.
returned: Returned when there is an error.
type: str
sample: No such key “doesnt-exist”
"""
class GSettingsError(Exception):
def __init__(self, command, rc, stderr):
self.command = command
self.rc = (rc,)
self.stderr = stderr
def gsettings_get(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"get",
module.params["schema"],
module.params["key"],
]
rc, stdout, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
return False, stdout.rstrip()
def gsettings_set(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"set",
module.params["schema"],
module.params["key"],
module.params["value"],
]
_, before = gsettings_get(module)
rc, _, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
_, after = gsettings_get(module)
return before != after, after
def gsettings_reset(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"reset",
module.params["schema"],
module.params["key"],
]
_, before = gsettings_get(module)
rc, stdout, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
_, after = gsettings_get(module)
return before != after, after
def main() -> None:
module = AnsibleModule(
argument_spec=dict(
schema=dict(type="str"),
key=dict(type="str"),
value=dict(type="str"),
reset=dict(type="bool", default=False),
),
mutually_exclusive=[["value", "reset"]],
required_together=[["schema", "key"]],
)
try:
if module.params["value"]:
changed, value = gsettings_set(module)
elif module.params["reset"]:
changed, value = gsettings_reset(module)
else:
changed, value = gsettings_get(module)
module.exit_json(changed=changed, value=value)
except GSettingsError as error:
module.fail_json(
f"{error.command} failed ({error.rc}): {error.stderr}", stderr=error.stderr
)
if __name__ == "__main__":
main()

View File

@@ -1,121 +0,0 @@
# -*- 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()

View File

@@ -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.stderr)
"$result.stdout $result.stderr")
}
return $result.stdout.Trim().Replace("$remote/", '')
}
@@ -108,16 +108,6 @@ function Get-GitCurrentSha {
return $result.stdout.Trim()
}
function Get-GitRemoteUrl {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote
)
$result = Run-Command -command "`"$git`" remote get-url $remote" -working_directory $dest
return $result.stdout.Trim()
}
function Invoke-GitClone {
[CmdletBinding()]
Param (
@@ -197,19 +187,6 @@ function Invoke-GitSubmoduleUpdate {
}
}
function Invoke-GitRemoteSetUrl {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)] [String] $dest,
[Parameter(Mandatory = $true)] [String] $remote,
[Parameter(Mandatory = $true)] [String] $url
)
$result = Run-Command -command "`"$git`" remote set-url $remote `"$url`"" -working_directory $dest
if ($result.rc -ne 0) {
$module.FailJson("Failed to set remote URL:`n" + $result.stderr)
}
}
# ================================ Start logic =================================
if (!$dest) {
@@ -230,10 +207,6 @@ if (($dest -and ![System.IO.File]::Exists($gitconfig))) {
if (Test-GitLocalChanges $dest) {
$module.FailJson('Local modifications exist in repository.')
}
$url = Get-GitRemoteUrl $dest $remote
if ($url -ne $repo) {
Invoke-GitRemoteSetUrl $dest $remote $repo
}
Invoke-GitFetch $dest $remote $version
Invoke-GitCheckout $dest $remote $version
Invoke-GitPull $dest $remote $version

View File

@@ -22,6 +22,27 @@ seealso:
- module: ansible.builtin.git
'''
# DOCUMENTATION = r'''
# ---
# module: win_ping
# short_description: A windows version of the classic ping module
# description:
# - Checks management connectivity of a windows host.
# - This is NOT ICMP ping, this is just a trivial test module.
# - For non-Windows targets, use the M(ansible.builtin.ping) module instead.
# options:
# data:
# description:
# - Alternate data to return instead of 'pong'.
# - If this parameter is set to C(crash), the module will cause an exception.
# type: str
# default: pong
# seealso:
# - module: ansible.builtin.ping
# author:
# - Chris Church (@cchurch)
# '''
EXAMPLES = r'''
# Test connectivity to a windows host
# ansible winserver -m ansible.windows.win_ping

View File

@@ -1,99 +0,0 @@
#!powershell
#AnsibleRequires -CSharpUtil Ansible.Basic
#AnsibleRequires -PowerShell Ansible.ModuleUtils.CommandUtil
$module = [Ansible.Basic.AnsibleModule]::Create($args, @{
options = @{
name = @{
type = "list"
elements = "str"
required = $true
}
state = @{
type = "str"
default = "present"
choices = ("absent", "latest", "present")
}
}
supports_check_mode = $false
})
$names = $module.Params.name
$state = $module.Params.state
$winget = Get-ExecutablePath "winget"
$noPackageString = "No installed package found matching input criteria."
if ($name -and $id) {
$module.FailJson("name `"$name`" and id `"$id`" must not both be provided")
}
function Test-Installed {
$command = "`"$winget`" list `"$name`""
$result = Run-Command -command $command
if ($result.rc -eq 0) {
return $true
}
return $false
}
function Test-UpgradeAvailable {
if (!(Test-Installed)) {
return $true
}
$command = "`"$winget`" list --upgrade-available `"$name`""
$result = Run-Command -command $command
if ($result.stdout.Contains($noPackageString)) {
return $false
}
return $true
}
foreach ($name in $names) {
switch ($state) {
"absent" {
if (Test-Installed) {
$command = "`"$winget`" uninstall `"$name`""
$result = Run-Command -command $command
if ($result.rc -ne 0) {
$module.Result.rc = $result.rc
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to uninstall package `"$name`"")
}
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
}
}
"latest" {
if (Test-UpgradeAvailable) {
$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
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"")
}
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
}
}
"present" {
if (!(Test-Installed)) {
$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
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"")
}
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
}
}
}
}
$module.Result.rc = 0
$module.ExitJson()

View File

@@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
DOCUMENTATION = '''
module: win_winget
author:
- "Kenneth Benzie (Benie)"
short_desription: Manages packages with WinGet
description:
- Magage packages using WinGet.
options:
name:
description:
- Name of the package to manage.
type: list[str]
state:
description:
- Indicates the desired package state. V(latest) ensures that the latest
version is installed.
type: str
choices: [ absent, present, latest ]
default: present
'''
EXAMPLES = '''
- name: Install Apple Music
win_winget:
name: Apple Music
state: present
- name: Install latest version of Neovim Qt
win_winget:
name: neovim-qt
state: latest
- name: Uninstall Microsoft OneDrive
win_winget:
id: Microsoft.OneDrive
state: absent
'''
RETURN = '''
stdout:
description: Output from WinGet.
returned: Success, when needed.
type: str
sample: ''
'''

View File

@@ -7,11 +7,15 @@
roles:
- role: firefox
- role: kitty
- role: guake
- role: cider
- role: ulauncher
- role: gnome-shell
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- role: xremap
when: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- role: fedora-workstation
when: ansible_os_family == 'RedHat' and ansible_distribution == 'Fedora'
when: >
'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and
ansible_env.XDG_SESSION_TYPE == 'wayland' and (
ansible_os_family == "RedHat" or
ansible_os_family == "Debian"
)

View File

@@ -11,7 +11,5 @@
- vars/environment.yaml
roles:
- role: gdb
- role: nvtop
- role: podman
- role: system-info
when: disable_systemd is not defined

View File

@@ -30,7 +30,6 @@
- role: ripgrep
- role: tidy
- role: tree
- role: typst
- role: watch
- role: wget
- role: yq

View File

@@ -1,17 +1,35 @@
---
- import_playbook: WindowsCLI.yaml
- hosts: windows
vars_files:
- vars/environment.yaml
roles:
- role: python
- role: git
- role: powershell
- role: neovim
- role: system-info
- role: ag
- role: bat
- role: curl
- role: fd
- role: fzf
- role: gh
- role: glab
- role: jq
- role: ripgrep
- role: tree
- role: yq
- role: llvm
- role: nodejs
- role: 1password
- role: autohotkey
- role: apple-music
- role: cider
- role: ferdium
- role: firefox
- role: fonts
- role: obsidian
- role: powertoys
- role: windows-terminal
- role: wezterm
- role: neovide

View File

@@ -1,27 +0,0 @@
---
- hosts: windows
vars_files:
- vars/environment.yaml
roles:
- role: scoop
- role: python
- role: git
- role: powershell
- role: neovim
- role: system-info
- role: ag
- role: bat
- role: curl
- role: fd
- role: fzf
- role: gh
- role: glab
- role: jq
- role: ripgrep
- role: tree
- role: typst
- role: yq
- role: llvm
- role: nodejs

View File

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

View File

@@ -15,9 +15,8 @@
- role: hiddenbar
- role: iterm
- role: kitty
- role: neovide
- role: rectangle
- role: windows-app
- role: magnet
- role: microsoft-remote-desktop
- role: viscosity
- role: macos

View File

@@ -62,5 +62,4 @@
src: /mnt/c/Users/Benie/AppData/Local/1Password/cli/op.exe
dest: ~/.local/bin/op
- include_tasks: linux-autostart.yaml
- include_tasks: zsh-completion.yaml

View File

@@ -20,5 +20,3 @@
dnf:
name: 1password
state: latest
- include_tasks: linux-autostart.yaml

View File

@@ -6,10 +6,26 @@
app_exe: '{{ansible_env.LOCALAPPDATA}}/1Password/app/8/1Password.exe'
installer_exe: '{{ansible_env.TEMP}}/1PasswordSetup-latest.exe'
- name: install chocolatey package
win_chocolatey:
state: latest
name: 1password
- 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: create start menu shortcut
win_shortcut:
@@ -18,27 +34,51 @@
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: create cli directory
win_file:
state: directory
path: '{{cli_dir}}'
- name: check if op already installed
win_stat:
path: '{{cli_exe}}'
register: cli_stat
- name: remove old op executable
win_file:
state: absent
path: '{{cli_dir}}\op.exe'
- 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 install directory from user PATH
- 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
win_path:
state: absent
scope: user
name: Path
elements: '{{cli_dir}}'
@@ -46,7 +86,7 @@
- name: get op powershell completion script
win_command:
argv:
- '{{ansible_env.LOCALAPPDATA}}\Scoop\shims\op.exe'
- '{{ansible_env.LOCALAPPDATA}}/1Password/cli/op.exe'
- completion
- powershell
register: powershell_completion_script

View File

@@ -1,20 +0,0 @@
---
- name: create ~/.config/autostart directory
file:
state: directory
path: ~/.config/autostart
- name: create autostart desktop file
copy:
dest: '{{ansible_env.HOME}}/.config/autostart/1password.desktop'
content: |
[Desktop Entry]
Name=1Password
Exec=/opt/1Password/1password %U
Terminal=false
Type=Application
Icon=1password
StartupWMClass=1Password
Comment=Password manager and secure wallet
MimeType=x-scheme-handler/onepassword;x-scheme-handler/onepassword8;
Categories=Office;

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: ag
state: absent
- name: install scoop package
community.windows.win_scoop:
name: ag
state: present
state: latest

View File

@@ -1,10 +0,0 @@
---
- name: install Apple Music from Microsoft Store
win_winget:
name: Apple Music
state: latest
- name: remove Cider from Chocolatey
win_chocolatey:
name: Cider
state: absent

View File

@@ -6,9 +6,9 @@
- name: clone config repo
win_git:
repo: git@git.infektor.net:config/AutoHotKey.git
repo: git@code.infektor.net:config/AutoHotKey.git
dest: '{{autohotkey_repo_dir}}'
branch: main
branch: master
- name: create scheduled task
win_scheduled_task:
@@ -31,25 +31,3 @@
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

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: Bat
state: absent
- name: install scoop package
community.windows.win_scoop:
name: bat
state: present
state: latest

View File

@@ -13,4 +13,3 @@
become: true
flatpak:
name: sh.cider.Cider
state: latest

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: curl
state: absent
- name: install scoop package
community.windows.win_scoop:
name: curl
state: present
state: latest

View File

@@ -19,14 +19,8 @@
name: fd
state: latest
- name: remove chocolatey package
- name: install Chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: fd
state: absent
- name: install scoop package
when: ansible_os_family == 'Windows'
community.windows.win_scoop:
name: fd
state: present
state: latest

View File

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

View File

@@ -14,4 +14,3 @@
become: true
flatpak:
name: org.ferdium.Ferdium
state: latest

View File

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

View File

@@ -9,16 +9,5 @@
- name: create symbolic links
file:
state: link
src: '{{ item.src }}'
dest: '{{ item.dest }}'
with_items:
- src: ~/.local/src/fzf/bin/fzf
dest: ~/.local/bin/fzf
- src: ~/.local/src/fzf/bin/fzf-tmux
dest: ~/.local/bin/fzf-tmux
- src: ~/.local/src/fzf/bin/fzf-preview.sh
dest: ~/.local/bin/fzf-preview.sh
- src: ~/.local/src/fzf/man/man1/fzf.1
dest: ~/.local/share/man/man1/fzf.1
- src: ~/.local/src/fzf/man/man1/fzf-tmux.1
dest: ~/.local/share/man/man1/fzf-tmux.1
src: ~/.local/src/fzf/bin/fzf
dest: ~/.local/bin/fzf

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: fzf
state: absent
- name: install scoop package
community.windows.win_scoop:
name: fzf
state: present
state: latest

View File

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

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: gh
state: absent
- name: install scoop package
community.windows.win_scoop:
name: gh
state: present
state: latest

View File

@@ -36,7 +36,7 @@
win_git:
repo: '{{item.repo}}'
dest: '{{ansible_env.USERPROFILE}}/.config/{{item.name}}'
version: main
version: master
with_items: '{{git_config_repos}}'
# - TODO: install pip packages

View File

@@ -3,7 +3,7 @@
git:
repo: '{{item.repo}}'
dest: '~/.config/{{item.name}}'
version: main
version: master
with_items: '{{git_config_repos}}'
- name: install homebrew packages

View File

@@ -1,8 +1,8 @@
---
git_config_repos:
- repo: git@git.infektor.net:config/git.git
- repo: git@code.infektor.net:config/git.git
name: git
- repo: git@git.infektor.net:benie/config.git
- repo: git@code.infektor.net:benie/config.git
name: private
git_pip_packages:
- git+https://github.com/kbenzie/git-issue.git

View File

@@ -6,7 +6,7 @@
path: '{{glab}}'
register: stat_glab
- name: get install version
- name: get instlal version
when: stat_glab.stat.exists
command: '{{glab}} --version'
register: glab_version_output
@@ -31,9 +31,8 @@
latest_version: '{{releases.json[0].tag_name}}'
query: >
[?contains(name, `glab`)] |
[?contains(name, `linux`)] |
[?contains(name, `{{
{'x86_64': 'amd64', 'arm64': 'arm64'}[ansible_machine]}}.deb`)] | [0]
[?contains(name, `Linux`)] |
[?contains(name, `{{ansible_machine}}.deb`)] | [0]
- set_fact:
asset: '{{latest.assets.links|json_query(query)}}'
@@ -63,13 +62,7 @@
state: absent
path: '{{tempdir.path}}'
- name: get zsh completions source
command: glab completion -s zsh
register: glab_zsh_completions
changed_when: false
- name: install zsh completions
become: true
copy:
content: '{{glab_zsh_completions.stdout}}'
dest: /usr/local/share/zsh/site-functions/_glab
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,12 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name:
- glab
- glab.portable
state: absent
- name: install scoop package
community.windows.win_scoop:
name: glab
state: present
state: latest

View File

@@ -1,18 +0,0 @@
---
- name: ubuntu dock disable dock-fixed
gsettings:
schema: org.gnome.shell.extensions.dash-to-dock
key: dock-fixed
value: 'false'
- name: ubuntu dock set dock-position to bottom
gsettings:
schema: org.gnome.shell.extensions.dash-to-dock
key: dock-position
value: "'BOTTOM'"
- name: ubuntu dock disable extend-height
gsettings:
schema: org.gnome.shell.extensions.dash-to-dock
key: extend-height
value: 'false'

View File

@@ -2,72 +2,29 @@
- assert:
that: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- name: install packages
- name: install gnome-tweaks
become: true
package:
name:
- gnome-tweaks
- gnome-themes-extra
name: gnome-tweaks
state: latest
- name: prefer dark mode
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
value: "'prefer-dark'"
- name: disable activate-window-menu keybinding
gsettings:
schema: org.gnome.desktop.wm.keybindings
key: activate-window-menu
value: '@as []'
- name: disable switch-input-source keybinding
gsettings:
schema: org.gnome.desktop.wm.keybindings
key: switch-input-source
value: '@as []'
- name: disable switch-input-source-backward keybinding
gsettings:
schema: org.gnome.desktop.wm.keybindings
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
# dconf dump / | sed -n '/\[org.gnome.settings-daemon.plugins.media-keys/,/^$/p'
- name: 1password quick access custom keybinding
dconf:
state: present
key: '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/{{item.key}}'
value: '{{item.value}}'
with_items:
- {key: 'binding', value: "'<Shift><Alt>space'"}
- {key: 'command', value: "'1password --quick-access'"}
- {key: 'name', value: "'1Password Quick Access'"}
# TODO: List of custom-keybindings
# [org/gnome/settings-daemon/plugins/media-keys]
# custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
- name: ulauncher toggle custom keybinding
dconf:
state: present
key: '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/{{item.key}}'
value: '{{item.value}}'
with_items:
- {key: 'binding', value: "'<Alt>space'"}
- {key: 'command', value: "'ulauncher-toggle'"}
- {key: 'name', value: "'Ulauncher Toggle'"}
# TODO: 1Password Quick Access
# [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
# binding='<Shift><Alt>space'
# command='1password --quick-access'
# name='1Password Quick Access'
- name: list of entries defining custom-keybindings
dconf:
state: present
key: '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings'
value: "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']"
- when: ansible_distribution == 'Ubuntu'
include_tasks: Ubuntu.yaml
# TODO: install gnome extensions
# TODO: /org/gnome/shell/extensions/quake-terminal/terminal-shortcut = ['<Super>space']
# TODO: Guake toggle - this requires removing a default binding
# [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1]
# binding='<Super>space'
# command='guake-toggle'
# name='Guake Toggle'

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: jq
state: absent
- name: install scoop package
community.windows.win_scoop:
name: jq
state: present
state: latest

View File

@@ -90,19 +90,9 @@
state: absent
path: '{{kitty_package_archive}}'
# FIXME: This is bound to break something somewhere but on Ubuntu 22.04 this
# file breaks a bunch of other stuff when the kitty package in installed in
# /usr/local with stow so we delete it before stowing.
- name: remove conflicting library
when: kitty_install_required
become: true
file:
state: absent
path: '{{kitty_package_dir}}/lib/libglib-2.0.so.0'
- name: install package
when: kitty_install_required
become: true
command:
cmd: "stow --no-folding --target /usr/local --ignore='lib/.*$' ."
cmd: 'stow --no-folding --target /usr/local .'
chdir: '{{kitty_package_dir}}'

View File

@@ -3,6 +3,5 @@
- name: clone config repo
git:
repo: git@git.infektor.net:config/kitty.git
repo: git@code.infektor.net:config/kitty.git
dest: ~/.config/kitty
version: main

View File

@@ -7,5 +7,3 @@
domain: com.apple.desktopservices
key: DSDontWriteNetworkStores
value: 'true'
# TODO: ^Space Keyboard Shortcut for switching Input Sources

View File

@@ -2,7 +2,7 @@
- assert:
that: ansible_os_family == 'Darwin'
- name: install homebrew package
homebrew_cask:
name: rectangle
- name: install app store package
mas:
id: 441258766
state: latest

View File

@@ -4,5 +4,5 @@
- name: install homebrew cask
homebrew_cask:
name: windows-app
name: microsoft-remote-desktop
state: latest

View File

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

View File

@@ -10,12 +10,26 @@
state: absent
- set_fact:
old_package_dirs:
- /usr/local/lib/nvim/nvim-linux-x86_64
- /usr/local/stow/nvim/nvim-linux64
old_package_dir: '/usr/local/lib/nvim/nvim-linux64'
- include_tasks: sudo-rmdir.yaml
with_items: '{{old_package_dirs}}'
- name: check if old package directory exists
stat:
path: '{{old_package_dir}}'
register: old_package
- name: uninstall package from old directory
when: old_package.stat.exists
become: true
command:
cmd: 'stow --delete --target /usr/local .'
chdir: '{{old_package_dir}}'
- name: remove old package directory
when: old_package.stat.exists
become: true
file:
state: absent
path: '{{old_package_dir}}'
- name: install gnu stow for managing tar.gz package
become: true
@@ -54,31 +68,25 @@
install_required:
'{{installed_version is not defined or
installed_version != latest.json.tag_name}}'
asset_query: '[?contains(name, `nvim-linux-x86_64.tar.gz`)]'
asset_query: '[?contains(name, `nvim-linux64.tar.gz`)]'
package_dir: '/usr/local/stow/nvim'
- set_fact:
uninstall_required: '{{nvim.stat.exists and install_required}}'
asset: '{{latest.json.assets | json_query(asset_query)}}'
package_path: '{{package_dir}}/{{latest.json.name}}'
- name: remove nuisance mimeinfo.cache file
become: true
file:
path: /usr/local/stow/nvim/nvim-linux-x86_64/share/applications/mimeinfo.cache
state: absent
- name: uninstall old package from /usr/local
when: uninstall_required
become: true
command:
cmd: 'stow --delete --target /usr/local .'
chdir: '{{package_dir}}/nvim-linux-x86_64'
chdir: '{{package_dir}}/nvim-linux64'
- name: remove old package
become: true
when: uninstall_required
file:
path: '{{package_dir}}/nvim-linux-x86_64'
path: '{{package_dir}}/nvim-linux64'
state: absent
- name: create package directory
@@ -109,11 +117,20 @@
path: '{{package_path}}'
state: absent
- name: move man to share/man
when: install_required
become: true
command:
argv:
- mv
- '{{package_dir}}/nvim-linux64/man'
- '{{package_dir}}/nvim-linux64/share'
- name: install package to /usr/local
when: install_required
become: true
command:
cmd: 'stow --no-folding --target /usr/local .'
chdir: '{{package_dir}}/nvim-linux-x86_64'
chdir: '{{package_dir}}/nvim-linux64'
- include_tasks: Unix.yaml

View File

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

View File

@@ -4,7 +4,7 @@
- name: clone config repo
git:
repo: git@git.infektor.net:config/nvim.git
repo: git@code.infektor.net:config/nvim.git
dest: '{{vim_config_dir}}'
version: main

View File

@@ -0,0 +1,43 @@
---
- 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
- set_fact:
backslashes: '\\'
forwardslash: '/'
- set_fact:
managed_plugins: "{{managed_plugins | replace(backslashes, forwardslash)}}"
found_plugins: "{{found_plugins | replace(backslashes, forwardslash)}}"
- name: remove found plugins which are not in the managed list
win_file:
path: '{{item.path}}'
state: absent
with_items: '{{found_plugins.files}}'
when: item.path not in managed_plugins
loop_control:
label: '{{item.path}}'

View File

@@ -1,34 +1,59 @@
---
- name: install winget packages
win_winget:
name:
- neovim.neovim
- equalsraf.neovim-qt
state: latest
- name: remove chocolatey package
- name: install chocolatey packages
win_chocolatey:
name: neovim
state: absent
state: latest
- set_fact:
vim_config_dir: '{{ansible_env.LOCALAPPDATA}}\nvim'
- name: clone config repo
win_git:
repo: git@git.infektor.net:config/nvim.git
repo: git@code.infektor.net:config/nvim.git
dest: '{{vim_config_dir}}'
branch: main
# 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}}'
# - 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
- when: ansible_os_family != "Windows" and
plugin_dir is defined and plugins is defined
include_tasks: 'Unix-plugins.yaml'
- when: ansible_os_family == "Windows" and
plugin_dir is defined and plugins is defined
include_tasks: 'Windows-plugins.yaml'

View File

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

View File

@@ -1,3 +1,7 @@
---
neovim_pip_packages:
- cmake-language-server
- cmakelint
- compdb
- vim-vint
- yamllint

View File

@@ -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: [node, npm, npx]
with_items: [corepack, node, npm, npx]

View File

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

View File

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

View File

@@ -3,7 +3,6 @@
become: true
flatpak:
name: md.obsidian.Obsidian
state: latest
# Remove old appimage if it exists
- name: stat appimage symlink

View File

@@ -5,14 +5,14 @@
- name: clone config repos
win_git:
repo: git@git.infektor.net:config/WindowsPowerShell.git
repo: https://code.infektor.net/config/WindowsPowerShell.git
dest: '{{powershell_config_dir}}'
branch: main
branch: master
- name: remove cmder chocolatey package
- name: install chocolatey package
win_chocolatey:
name: Cmder
state: absent
state: latest
- name: get NuGet package provider
ansible.windows.win_powershell:
@@ -38,14 +38,3 @@
name: posh-git
state: latest
accept_license: true
- name: install pwsh for powershell lsp
community.windows.win_scoop:
name: pwsh
state: present
- name: run install script
win_command:
cmd: 'powershell.exe {{powershell_config_dir}}/install.ps1'
register: powershell_install
changed_when: "'changed' in powershell_install.stdout"

View File

@@ -25,7 +25,7 @@
register: pip_conf
- name: remove pip.conf if its a symbolic link
when: pip_conf.stat.exists and pip_conf.stat.islnk
when: pip_conf.stat.islnk
file:
state: absent
path: ~/.config/pip/pip.conf
@@ -46,7 +46,7 @@
register: ipython_config_py
- name: remove ipython_conifg.py if its a symbolic link
when: ipython_config_py.stat.exists and ipython_config_py.stat.islnk
when: ipython_config_py.stat.islnk
file:
state: absent
path: ~/.config/ipython/profile_default/ipython_config.py

View File

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

View File

@@ -19,14 +19,8 @@
name: ripgrep
state: latest
- name: remove chocolatey package
- name: install Chocolatey package
when: ansible_os_family == 'Windows'
win_chocolatey:
name: ripgrep
state: absent
- name: install scoop package
when: ansible_os_family == 'Windows'
community.windows.win_scoop:
name: ripgrep
state: present
state: latest

View File

@@ -1,25 +0,0 @@
---
- name: detect if scoop is installed
win_command: where.exe scoop
changed_when: false
failed_when: false
register: scoop_result
- assert:
that: scoop_result.rc == 0
fail_msg: Scoop is not installed
- name: add extras bucket
community.windows.win_scoop_bucket:
name: extras
state: present
- name: install completions
community.windows.win_scoop:
name: scoop-completion
state: present
- win_owner:
path: '{{ansible_env.LOCALAPPDATA}}/Scoop/buckets/extras'
user: '{{ansible_env.USERNAME}}'
recurse: true

View File

@@ -1,43 +0,0 @@
---
# FIXME: This will only work for Debian or Ubuntu but not Ubuntu derived distros
- set_fact:
assets: '{{latest.json.assets}}'
asset_name: 'sunshine-{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}-amd64.deb'
- set_fact:
asset_query: '[?contains(name, `{{asset_name}}`)] | [0]'
- set_fact:
asset: '{{assets | json_query(asset_query)}}'
- name: download deb file
get_url:
url: '{{asset.browser_download_url}}'
dest: '/tmp/{{asset_name}}'
environment: '{{proxy_environment}}'
- name: install package from deb file
become: true
apt:
deb: '/tmp/{{asset_name}}'
- name: remove deb file
file:
state: absent
path: '/tmp/{{asset_name}}'
- name: fix systemd unit
become: true
copy:
dest: /usr/lib/systemd/user/sunshine.service
content: |
[Unit]
Description=Sunshine is a self-hosted game stream host for Moonlight.
StartLimitIntervalSec=500
StartLimitBurst=5
[Service]
ExecStart=/usr/bin/sunshine
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=xdg-desktop-autostart.target

View File

@@ -1,56 +0,0 @@
---
- assert:
that:
- ansible_distribution == "Fedora"
- assets is defined
- set_fact:
asset_name: 'sunshine-{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}-amd64.rpm'
- set_fact:
asset_query: '[?contains(name, `{{asset_name}}`)] | [0]'
- set_fact:
asset: '{{assets | json_query(asset_query)}}'
- name: download rpm file
get_url:
url: '{{asset.browser_download_url}}'
dest: '/tmp/{{asset_name}}'
environment: '{{proxy_environment}}'
- name: install package from rpm file
dnf:
name: '/tmp/{{asset_name}}'
- name: remove rpm file
file:
state: absent
path: '/tmp/{{asset_name}}'
- name: create udev rules for uinput
become: true
copy:
content: |
KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess"
dest: /etc/udev/rules.d/60-sunshine.rules
- name: reload udev rules for uinput
become: true
command: udevadm control --reload-rules
- name: request udev events
become: true
command: udevadm trigger
- name: add uinput module
become: true
modprobe:
name: uinput
- name: stat sunshine
stat:
path: /usr/bin/sunshine
register: sunshine
- name: enable permissions for KMS capture
become: true
command: 'setcap cap_sys_admin+p {{ sunshine.stat.lnk_source }}'

View File

@@ -1,18 +0,0 @@
---
- name: get latest version
uri:
url: https://api.github.com/repos/LizardByte/Sunshine/releases/latest
headers: '{{github_auth_headers}}'
register: latest
- set_fact:
assets: '{{latest.json.assets}}'
- include_tasks: '{{ansible_os_family}}.yaml'
- name: enable systemd service
ansible.builtin.systemd_service:
name: sunshine
scope: user
enabled: true
state: started

View File

@@ -1,34 +1,14 @@
---
- 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:
'{{system_info_plist_dir}}/system-info.plist'
system_info_running:
"{{'system-info' in launchd_running_services.stdout}}"
system_info_plist_path: '{{ansible_env.HOME}}/Library/LaunchAgents/system-info.plist'
system_info_running: "{{'system-info' in launchd_running_services.stdout}}"
- name: install system-info launchd plist
template:

View File

@@ -3,7 +3,7 @@
- name: clone config repo
git:
repo: git@git.infektor.net:config/tmux.git
repo: git@code.infektor.net:config/tmux.git
dest: ~/.config/tmux
version: main

View File

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

View File

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

View File

@@ -9,25 +9,6 @@
force: true
environment: '{{proxy_environment}}'
- name: slurp /etc/os-release
when: ansible_distribution != 'Debian'
slurp:
src: /etc/os-release
register: os_release_slurp
- when: ansible_distribution != 'Debian'
set_fact:
os_release: "{{ os_release_slurp.content |
b64decode | trim() | replace('=', ': ') | from_yaml }}"
- set_fact:
codename: '{{ansible_distribution_release}}'
- when: ansible_distribution != 'Debian' and 'UBUNTU_CODENAME' in os_release
set_fact:
codename: '{{os_release.UBUNTU_CODENAME}}'
- debug: var=codename
- name: add apt sources list
when: ansible_distribution == 'Debian'
become: true
@@ -35,7 +16,7 @@
content: >-
deb [signed-by={{ulauncher_keyring_path}}]
http://ppa.launchpad.net/agornostal/ulauncher/ubuntu
{{codename}} main"
{{ansible_distribution_release}} main"
dest: '{{ulauncher_apt_sources_list_path}}'
- name: add ppa repository
@@ -43,12 +24,9 @@
become: true
apt_repository:
repo: ppa:agornostal/ulauncher
codename: '{{codename}}'
- name: install apt package
become: true
apt:
name: ulauncher
state: latest
- include_tasks: linux-autostart.yaml

View File

@@ -4,5 +4,3 @@
dnf:
name: ulauncher
state: latest
- include_tasks: linux-autostart.yaml

View File

@@ -1,15 +0,0 @@
---
- name: create autostart desktop file
copy:
dest: '{{ansible_env.HOME}}/.config/autostart/ulauncher.desktop'
content: |
[Desktop Entry]
Name=Ulauncher
Comment=Application launcher for Linux
GenericName=Launcher
Categories=GNOME;GTK;Utility;
TryExec=/usr/bin/ulauncher
Exec=env GDK_BACKEND=x11 /usr/bin/ulauncher --hide-window
Icon=ulauncher
Terminal=false
Type=Application

View File

@@ -1,10 +0,0 @@
---
- name: install chocolatey package
win_chocolatey:
name: wezterm
state: latest
- name: clone config repo
win_git:
repo: git@git.infektor.net:config/wezterm.git
dest: '{{ansible_env.USERPROFILE}}/.config/wezterm'

View File

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

View File

@@ -4,7 +4,6 @@
src: '{{windows_terminal_settings_json}}'
register: slurped_settings
# TODO: Handle comments in settings.json
- name: decode settings into fact
set_fact:
settings: '{{slurped_settings.content | b64decode | from_json}}'

View File

@@ -1,11 +1,8 @@
---
- assert:
that: >
'XDG_CURRENT_DESKTOP' in ansible_env and
'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and (
ansible_env.XDG_SESSION_TYPE == 'wayland' or
ansible_env.XDG_SESSION_TYPE == 'x11'
)
'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and
ansible_env.XDG_SESSION_TYPE == 'wayland'
- set_fact:
install_dir: '{{ansible_env.HOME}}/.local/bin'
@@ -109,9 +106,8 @@
- name: clone config repo
git:
repo: git@git.infektor.net:config/xremap.git
repo: git@code.infektor.net:config/xremap.git
dest: '{{config_dir}}'
version: main
notify: restart xremap
- name: install xremap systemd unit

View File

@@ -1,10 +1,5 @@
---
- name: remove chocolatey package
- name: install chocolatey package
win_chocolatey:
name: yq
state: absent
- name: install scoop package
community.windows.win_scoop:
name: yq
state: present
state: latest

View File

@@ -3,7 +3,7 @@
- name: clone config repo
git:
repo: git@git.infektor.net:config/zsh.git
repo: git@code.infektor.net:config/zsh.git
dest: ~/.config/zsh
version: main