Compare commits
15 Commits
d41ea98da0
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d20cba3e15 | |||
| 27f887b044 | |||
| c70a31b633 | |||
| 80434f1cfa | |||
| 658e35a145 | |||
| 06a4d1b923 | |||
| fe220c231a | |||
| e633da1e7c | |||
| 7823cfb683 | |||
| 0a385259a5 | |||
| cf77532254 | |||
| 7e2a813682 | |||
| 9bd29dcdd2 | |||
| 173c7261b3 | |||
| ee3ea63383 |
@@ -2,4 +2,5 @@
|
||||
collections_path = collections
|
||||
library = library
|
||||
roles_path = roles
|
||||
result_format = 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()
|
||||
@@ -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'
|
||||
|
||||
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
|
||||
@@ -16,7 +16,7 @@
|
||||
- role: iterm
|
||||
- role: kitty
|
||||
- role: neovide
|
||||
- role: magnet
|
||||
- role: rectangle
|
||||
- role: windows-app
|
||||
- role: viscosity
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
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)
|
||||
@@ -7,3 +7,5 @@
|
||||
domain: com.apple.desktopservices
|
||||
key: DSDontWriteNetworkStores
|
||||
value: 'true'
|
||||
|
||||
# TODO: ^Space Keyboard Shortcut for switching Input Sources
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user