Config for one CachyOS + Hyprland workstation. Stow-managed, themed from a single palette directory.
  • Shell 38.3%
  • Python 35.5%
  • CSS 13.1%
  • Lua 12.6%
  • JavaScript 0.5%
Find a file
2026-09-28 01:49:29 -04:00
.config openrazer: persist 1800 DPI 2026-09-28 01:49:29 -04:00
.local/share local-ai: on-demand screenshot analysis and model controls 2026-09-12 01:52:49 -04:00
agents agents: track shared AGENTS.md, statusline, vault and handoff skills 2026-09-28 01:35:14 -04:00
claude-skills claude-skills: web-research helpers and sources, agent-browser gotchas, drop retired wink rule 2026-09-28 01:49:29 -04:00
docs openrgb: warn when 1.0 is installed; gotchas: skip MangoHud in the link check 2026-09-28 01:40:27 -04:00
palettes theme: base16 palette presets and a validated generation pipeline 2026-09-28 01:40:27 -04:00
scripts theme: base16 palette presets and a validated generation pipeline 2026-09-28 01:40:27 -04:00
templates theme: base16 palette presets and a validated generation pipeline 2026-09-28 01:40:27 -04:00
.bashrc CachyOS + Hyprland workstation config 2026-09-02 19:21:27 -04:00
.gitconfig CachyOS + Hyprland workstation config 2026-09-02 19:21:27 -04:00
.gitignore repo: gitleaks pre-commit, a manifest generator, and tests 2026-09-12 01:53:15 -04:00
.gtkrc-2.0 CachyOS + Hyprland workstation config 2026-09-02 19:21:27 -04:00
.inputrc CachyOS + Hyprland workstation config 2026-09-02 19:21:27 -04:00
.stow-local-ignore stow: ignore agents/ so it never links as ~/agents 2026-09-28 01:40:49 -04:00
LICENSE CachyOS + Hyprland workstation config 2026-09-02 19:21:27 -04:00
README.md repo: gitleaks pre-commit, a manifest generator, and tests 2026-09-12 01:53:15 -04:00

dotFiles

Config for one CachyOS + Hyprland workstation. Managed with GNU Stow, themed from a single palette directory — one command retints the terminal, bar, launcher, notifications, lock screen, editor and the RGB hardware, with no logout.

Desktop

Desktop controls

Super+Shift+K opens quick controls; Super+K searches every action and shortcut. Right-click the Arch logo for the same panel. See desktop integration for service ownership, health checks, dependencies and the one-time Caps Lock OSD service setup.

Components

OS CachyOS
Compositor Hyprland — configured in Lua
Bar Waybar — two bars, shared modules
Launcher / menus rofi
Terminal kitty
Shell fish + starship
Notifications swaync, swayosd
Lock / idle hyprlock, hypridle
File manager yazi
Editor Zed (nvim lives separately)
Colours Catppuccin Mocha, or generated per-wallpaper with matugen

Two monitors: a 4K 144 Hz landscape panel and a 1440p 165 Hz portrait one.

Theming

~/.config/themes/active is a symlink to a flavor directory. Every themed surface reads its colours through it. The switch validates the complete flavor before publishing the pointer and reloading its consumers:

set-theme catppuccin-mocha

That applies the toolkit themes that can't be @imported (GTK, Kvantum, KDE palette, cursors), sends live reload signals to everything that accepts one, and runs the drop-in hooks in theme-set.d/ — which push the same palette out to OpenRGB and a WLED strip. No logout.

New flavors are generated rather than written by hand:

matugen image ~/Pictures/wallpaper.png --prefer saturation
set-theme matugen

One template per app in templates/, any number of palettes — instead of apps × themes files. Generated and hand-written flavors are interchangeable because both expose the same 26 Catppuccin colour names.

→ docs/theming.md for the flavor contract, the matugen mapping, and what deliberately isn't themed.

Waybar

Two bars — full-featured on the landscape monitor, minimal on the portrait one — defined in one config.jsonc. Shared module definitions live in modules/shared.jsonc and the workspace glyph map in modules/hyprland/window-rewrite.jsonc, both pulled in per-bar via include.

The centre quick-settings drawer is a lone chevron until hovered, then unfurls network, DNS, Bluetooth and tray rightward without shifting the centre-anchored logo. Status indicators that must be readable at a glance (VPN, capture, dictation) deliberately sit outside it — a click-to-reveal drawer can't carry an at-a-glance signal.

Originally descended from sejjy's mechabar, since rewritten module by module.

Hyprland

Config is Lua — hyprlang was deprecated in 0.55. Load order in hyprland.lua:

monitors → autostart → look_and_feel → input → keybinds
         → windowrules → qconsole → events → toggles

toggles is last so runtime fragments in ~/.local/state/hypr/toggles/ override everything else. Colours arrive as a generated Lua module required at the end of look_and_feel.lua — Lua config mode has no source =, so that's the only way a flavor can reach Hyprland.

Every keybind carries a description. SUPER + K opens a rofi cheatsheet built from them, and keybinds-cheatsheet.sh --dump prints the same table as markdown.

Setup

sudo pacman -S stow matugen
git clone https://git.motaphe.dev/Motaphe/dotFiles.git ~/code/projects/dotFiles
cd ~/code/projects/dotFiles

stow -n -v --no-folding -t ~ .    # dry run — read this first
stow    -v --no-folding -t ~ .    # apply

Configs are symlinked, so a file in ~/.config and its counterpart here are the same file. Edit either side, commit, push. No sync step.

There's no install script, and probably won't be — these are one machine's configs, not a distributable rice. Take whatever's useful. Paths like ~/code/projects/dotFiles and /home/suz are hardcoded in a handful of scripts; grep before copying one wholesale.

A few things Stow can't do — the GTK theme build, the machine-local runtime symlinks, the per-device opt-ins — are in docs/gotchas.md, along with the detached-symlink trap that bites every stow-managed dotfiles repo eventually.

Layout

.config/          mirrors ~/.config
.local/share/     just the KDE colour scheme set-theme depends on
templates/        matugen inputs                     — not stowed
scripts/          gen-zed-theme.py                   — not stowed
claude-skills/    Claude Code skills, linked from ~/.claude/skills — not stowed
docs/             the long-form notes                — not stowed

Rationale for individual non-default values lives in my Obsidian vault rather than in these files; the configs carry [[wiki-link]] references to it where it matters.

Secrets

Nothing sensitive is tracked, and .gitignore actively blocks the known offenders — keyring-backed lookups instead of files, per-app exclusions for anything that writes credentials to disk. The full table is in docs/gotchas.md.

License

MIT.