Arch Linux desktop configuration for Hyprland (Wayland), managed with GNU Stow.
| Component | Role |
|---|---|
| Hyprland (UWSM) | Wayland compositor via systemd session |
| EWW | Top bar — workspaces, clock, system info, input method |
| Kitty | GPU-accelerated terminal |
| tmux + zsh | Multiplexer + shell (Powerlevel10k prompt) |
| Yazi | TUI file manager (used for wallpaper picker) |
| Fuzzel | App launcher |
| Mako | Notification daemon |
| fcitx5 | Input method (Rime for Chinese, Mozc for Japanese) |
| awww + Matugen | Wallpaper setter + Material You color generation |
| mise | Dev tool version manager |
| fastfetch | System info display |
| eza | Modern ls with icons and git status |
| bat | cat with syntax highlighting |
| ripgrep | Fast recursive search |
| delta | Git diff viewer with syntax highlighting |
| dust | Disk usage visualizer |
| duf | Disk free viewer |
| btop | System monitor |
| procs | Process viewer |
Each top-level directory is a stow package that mirrors $HOME:
dotfiles/
├── awww/.config/awww/ wallpaper manager + picker script
├── eww/.config/eww/ bar (yuck + scss + scripts)
├── fuzzel/.config/fuzzel/ app launcher
├── hypr/.config/hypr/ compositor (modular sub-configs)
│ ├── autostart.conf
│ ├── env.conf
│ ├── keybinds.conf
│ ├── rules.conf
│ ├── animations.conf
│ ├── monitors.conf
│ └── theme.conf ← generated by matugen
├── kitty/.config/kitty/ terminal emulator
├── mako/.config/mako/ notifications
├── matugen/.config/matugen/ color generation templates
├── gtk-3.0/.config/gtk-3.0/ GTK 3 settings
├── gtk-4.0/.config/gtk-4.0/ GTK 4 settings
├── mise/.config/mise/ dev tool versions
├── scripts/.local/bin/ user scripts (dark mode, tmux-launch, etc.)
├── tmux/.config/tmux/ terminal multiplexer
├── fastfetch/.config/fastfetch/ system info (config + logos/)
├── vim/.vim/vimrc editor
├── yazi/.config/yazi/ file manager
└── zsh/
├── .config/zsh/ shell (.zshrc, aliases, plugins, keybinds, p10k)
└── .zshrc stub that sets ZDOTDIR
Changing a wallpaper regenerates the entire color scheme across all apps:
wallpaper → awww (display) → matugen (extract colors) → template files → app reloads
Templates live in matugen/.config/matugen/templates/. Generated files (theme.conf, colors.scss, colors.ini, generated.conf) are gitignored — never edit them directly.
Drop images into ~/Pictures/Wallpapers/, then pick one of:
- Keyboard:
Super + Shift + W— opens a floating Kitty with the fuzzel picker - Picker script:
~/.config/awww/scripts/pick-wallpaper.sh - Direct:
~/.config/awww/scripts/wallpaper.sh /absolute/path/to/image.jpg
Either path runs awww img → matugen image -m dark → hyprctl reload, reloads Kitty (pkill -USR1 kitty), and restarts EWW.
# Core
sudo pacman -S hyprland uwsm xdg-desktop-portal-hyprland kitty tmux zsh fuzzel mako stow
# Bar and theming (AUR)
yay -S eww awww matugen
# Audio (PipeWire + WirePlumber)
sudo pacman -S pipewire wireplumber pipewire-pulse
# Bluetooth
sudo pacman -S bluez bluez-utils
sudo systemctl enable --now bluetooth
# Tools
sudo pacman -S yazi fzf zoxide jq grim slurp wl-copy brightnessctl networkmanager mpv glow
# CLI replacements
sudo pacman -S eza bat ripgrep git-delta dust duf btop procs fastfetch
# Input method
sudo pacman -S fcitx5 fcitx5-configtool fcitx5-gtk fcitx5-qt fcitx5-rime fcitx5-mozc
# Font
sudo pacman -S ttf-firacode-nerd
# Dev
sudo pacman -S misegit clone <repo-url> ~/dotfiles
cd ~/dotfiles
./setup.shOr stow individual packages:
stow hypr kitty zsh eww # etc.mkdir -p ~/.local/share/zsh
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.local/share/zsh/powerlevel10k
git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions ~/.local/share/zsh/zsh-autosuggestions
git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting ~/.local/share/zsh/zsh-syntax-highlightingmkdir -p ~/Pictures/Wallpapers
touch ~/.config/hypr/theme.conf
set-dark-mode
fcitx5-configtool # add Rime and Mozc to input method list