Personal desktop configuration for Arch Linux with Hyprland.
This repository is organized around shell scripts in setup/ and managed config files in config/.
Current top-level directories:
- setup: install, link, and uninstall scripts used by install.sh
- config: managed app and shell configuration files
- bin: active user command entrypoints linked to ~/.local/bin
- themes: shared theme assets
- scripts: helper scripts and unit files
Clone and run:
git clone --depth=1 https://github.com/danimatuko/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.shWhat install.sh does:
- It is interactive and runs privileged actions
- It can back up current files into ~/dotfiles_backup_
- It runs staged setup scripts from setup/
- It links commands from bin/ into ~/.local/bin
- It asks before linking config files from config/
See REINSTALL_CHECKLIST.md for the system reproducibility checklist.
# Relink user commands
bash ~/dotfiles/setup/link-bin.sh
# Relink dotfiles/configs (moves existing targets to a timestamped backup)
bash ~/dotfiles/setup/link-dotfiles.sh
# Preview uninstall (dry-run)
bash ~/dotfiles/setup/uninstall.sh
# Apply uninstall
bash ~/dotfiles/setup/uninstall.sh --apply
# Apply uninstall and restore latest backup
bash ~/dotfiles/setup/uninstall.sh --apply --restore-latest-backupThe desktop shell is based on QuickShell/Noctalia and runs on Hyprland.
- Hyprland: https://github.com/hyprwm/Hyprland
- Bash aliases include shortcuts for Neovim and common dotfiles workflows.
- Zellij is available as an installed terminal multiplexer and starts only when invoked explicitly.
- Ghostty themes are managed under
config/ghostty/themes/. - Neovim uses AstroNvim v6 with its plugin lockfile in
config/nvim/lazy-lock.json. - Hyprland uses Lua modules under
config/hypr/lua/;SUPER+TABopens Gloview, whileSUPER+SHIFT+TABandSUPER+CTRL+TABshow desktop and all-workspace views.
# Check shell scripts
for f in setup/*.sh bin/*; do [ -f "$f" ] && bash -n "$f"; done
# Check Hyprland and Neovim Lua files
for f in config/hypr/hyprland.lua config/hypr/lua/*.lua config/nvim/init.lua config/nvim/lua/*.lua config/nvim/lua/plugins/*.lua; do luac -p "$f"; done- Target platform is Arch Linux with Wayland/Hyprland.
- Root repository behavior is script-driven; there is no root package.json task runner.
Use branch names in one of these formats:
- Preferred:
<type>/<area>-<short-description> - Allowed:
<type>/<short-description>
Allowed type values:
feat,fix,chore,docs,refactor,style,test,perf,ci,revert
Reserved prefixes:
release/<date-or-version>hotfix/<area>-<short-description>
Examples:
feat/hypr-shell-controlsfix/hyprlock-theme-pathschore/setup-prune-legacy-links
See AGENTS.md for full rules and additional examples.
MIT