- Shell 38.3%
- Python 35.5%
- CSS 13.1%
- Lua 12.6%
- JavaScript 0.5%
| .config | ||
| .local/share | ||
| agents | ||
| claude-skills | ||
| docs | ||
| palettes | ||
| scripts | ||
| templates | ||
| .bashrc | ||
| .gitconfig | ||
| .gitignore | ||
| .gtkrc-2.0 | ||
| .inputrc | ||
| .stow-local-ignore | ||
| LICENSE | ||
| README.md | ||
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 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.
