Infrastructure-as-Code for a CachyOS Linux workstation, managed with Ansible.
localhost onlysite.ymlOn a fresh machine, run bootstrap.yml first. It handles
the prerequisites that site.yml depends on:
Prerequisites before running bootstrap:
sudo pacman -S ansible gitRun bootstrap:
ansible-playbook -K -i inventory/hosts.yml bootstrap.ymlThen run the full site playbook:
ansible-playbook -K -i inventory/hosts.yml site.ymlRun the full site playbook:
ansible-playbook -K -i inventory/hosts.yml site.ymlRun only tasks matching a specific tag:
ansible-playbook -K -i inventory/hosts.yml site.yml --tags <tagname>Skip tasks matching a tag:
ansible-playbook -K -i inventory/hosts.yml site.yml --skip-tags <tagname>| Role | Play | Description |
|---|---|---|
| firewall | system | ufw, default deny incoming, allow port 22 |
| packages | system | General packages via pacman |
| docker | system | Docker, enables service, adds user to docker group |
| virtualization | system | qemu-full, virt-manager, libvirtd |
| web | system | hcloud, hugo, tea |
| flatpak | system | Flatpak and apps, MakeMKV device permissions |
| gpg | user | Import GPG keys from private git repo |
| ssh | user | Deploy SSH keys and config from pass |
| pass | user | Clone pass password store |
| dotfiles | user | Clone dotfiles and nvim repos, symlink configs |
| scripts | user | Clone scripts repo, add to PATH, deploy Pushover credentials |
| hotkeys | user | Deploy .desktop files, set Plasma 6 global shortcuts |
.
├── bootstrap.yml # New machine bootstrap
├── site.yml # Main entry point
├── inventory/ # Inventory files
└── roles/ # Ansible roles