My personal CachyOS setup with GNOME, automated with Ansible.
| Purpose | Choice |
|---|---|
| Terminal | Ghostty |
| System monitoring | Mission Center |
| DNS provider | NextDNS via systemd-resolved — routes all system DNS queries over DNS-over-TLS with DNSSEC validation |
| Audio player | Gapless |
| Video player | mpv — custom MVUtensils motion interpolation for TV-style motion smoothing, toggled with Shift+I |
| Web browser | Firefox |
| Code editor | Visual Studio Code |
| AI coding agents | Codex CLI, Claude Code, and Antigravity CLI |
| Claude desktop app | claude-desktop (AUR) |
| Netflix browser | Opera — the only browser that gives me 1080p Netflix playback on Linux |
| Proton version manager | ProtonPlus — manages Proton-GE and Proton-CachyOS versions |
| System upgrades | Topgrade — centralizes upgrades across packages, tools, and runtimes; replaces the preinstalled cachy-update and Shelly, which are removed |
Ankama Launcher is installed from the AUR with my saved Dofus display presets:
“Affichage Fournux” and “Combat Fournux”, which hides the minimap during fights.
Dofus's preset file is a symlink to roles/ankama/files/dofus-preset.json, so
preset changes made in game show up in git status. Applying the presets and
setting “Combat Fournux” as the fight preset is done in game, once per account.
Run ./bootstrap.sh run --tags ankama to apply this role on its own.
- Install CachyOS with the GNOME desktop and the Limine bootloader, and set the hostname to the machine's inventory name (
cachyos-desktoporcachyos-laptop). The playbook stops early when one of these is missing. - Log in to GNOME and open a terminal there: GNOME settings and extensions are only applied from inside a GNOME session.
- Clone this repository and run
./bootstrap.sh upgrade. It upgrades the system, then installs Ansible, the linters, yay, and the pinned Galaxy collections. - Restore the vault password into
.vault-password, then runchmod 600 .vault-password. - Run
./bootstrap.sh run, then reboot so the login shell,environment.d, kernel module, and initramfs changes apply. - Run
./bootstrap.sh runagain. The recap should reportchanged=0; any other count points to a task that is not idempotent.
GWToolbox settings are deployed only once Guild Wars is installed in Steam. Run
./bootstrap.sh run --tags gwtoolbox after installing it.
Codex, Claude Code, and Antigravity share the skills in ~/.agents/skills, the
global instructions in roles/ai_agents/files/agents/AGENTS.md, Serena, Context7,
and the i-have-adhd plugin. Claude Code uses the native installer with automatic
updates and signs in with your Claude subscription. Run claude after setup to
sign in. Its ~/.claude/skills directory contains individual links to the configured
shared skills. Ansible preserves existing user state when configuring MCP servers
in ~/.claude.json. Codex reads the managed settings from /etc/codex/config.toml, a
system layer under ~/.codex/config.toml, so Codex keeps its own state there
(project trust, notices, plugins). The ai_agents role installs its own Bun, uv, and rustup
dependencies, so ./bootstrap.sh run --tags claude works on its own.
The shared playbook configures both machines. Each machine is an inventory host
named after its hostname, in the desktop or laptop group, and
./bootstrap.sh limits the play to the host matching uname -n. Values that
identify one machine, such as its NextDNS device name, live in
host_vars/<hostname>/. Packages and settings for a machine type live in
group_vars/desktop/ and group_vars/laptop/, and the desktop and laptop
roles only hold hardware-specific tasks, so they do not leak between machines.
| Group | Hostname | Additional configuration |
|---|---|---|
desktop |
cachyos-desktop |
Wootility, Wake-on-LAN, and no automatic suspend |
laptop |
cachyos-laptop |
asusctl, supergfxctl, rog-control-center, and solaar; supergfxd is enabled and started |
- Dash to Panel — provides a horizontal taskbar similar to Windows.
- Vitals — displays and monitors system temperatures.
show-elgato-output.shis a validated standalone helper. Run./show-elgato-output.sh --help; its default capture device is machine-specific and can be overridden with--video-deviceand--sound-device.
- Icon theme: Papirus
- Default system font: FreeSans 12
- Terminal font: Inconsolata Medium 14
vault_password_fileis intentionally omitted fromansible.cfg;bootstrap.shsupplies it only forrunandcheck, so lint and CI do not depend on a local secret.
