Personal dotfiles managed with a custom deploy script.
| Directory | Description |
|---|---|
hypr/ |
Hyprland Lua config + scripts |
quickshell/ |
Quickshell bar, popups, daemons |
wlogout/ |
Power menu layout and styling |
nvim/ |
Neovim (LazyVim-based) |
kitty/ |
Kitty terminal emulator |
tmux/ |
Tmux configuration |
zsh/ |
Zsh shell config |
git/ |
Git config: shared base + per-host overrides |
atuin/ |
Atuin shell history (local-only) |
matugen/ |
Material color generator |
ranger/ |
Ranger file manager |
primo/ |
Rust source for quickshell helpers |
# Deploy all configs
./install.sh
# Deploy specific configs (run from repo root)
./deploy.sh # Symlinks .config/* to ~/.config/The dotfiles include first-class WSL support (tested on Arch WSL2).
./install.sh --wslThe --wsl flag:
- Skips all Hyprland/compositor, audio, Bluetooth, and hardware packages.
- Adds
wslufor Windows interop (wslview,wslpath). - Passes
--wsltodeploy.sh, which skips Wayland-only configs (hypr/,quickshell/,wlogout/,uwsm/, ...). - Writes
/etc/wsl.confwithsystemd=trueandmetadataautomount (fixes executable bits on/mnt/c), and offers to create a Windows-side.wslconfig(mirrored networking + DNS tunneling).
Shell behaviour under WSL:
- Windows
/mnt/*entries are stripped fromPATHso Windows executables never shadow Linux tools (interop still works via explicit.exepaths). pbcopy/pbpaste/tmux yank/nvim clipboard route throughclip.exe.- Interop aliases:
explorer,start,winpath,cdwin,open.
After changing /etc/wsl.conf or .wslconfig, restart WSL from PowerShell:
wsl --shutdownsystemd is required for systemctl, docker-toggle, and the SSH agent.
.config/git/config holds shared settings (aliases, delta pager, workflow
defaults). Machine-specific settings live in host.gitconfig, generated by
install.sh from hosts/wsl.gitconfig or hosts/arch.gitconfig:
- WSL: HTTPS credentials via Windows Git Credential Manager
(
~/.local/bin/git-credential-gcmbridge). - Native Arch: credentials via libsecret/gnome-keyring.
- Either host: GPG commit signing —
install.shgenerates a key on first run and appendsuser.signingkey+commit.gpgsign.
.config/git/ignore is the global excludesfile. Handy aliases:
git st/co/sw/br/cm/cane/undo/lg.
Shell history is managed by atuin in local-only
mode (auto_sync = false) — fuzzy searchable via Up (scoped to the
current directory) and Ctrl-R (global). The zsh integration is cached in
$XDG_CACHE_HOME/zsh/atuin.zsh; delete it after upgrading atuin to refresh.
Built-in zsh history remains as the import source for atuin import auto
(run once by install.sh).