A Hyprland (Wayland) desktop rice you can use as a starting point. Managed with GNU Stow and themed end to end by wallust, so the whole desktop re-colors itself from the current wallpaper.
This repo holds configuration only. The apps themselves are installed by a separate NixOS system flake (nixos-config). You can use these configs on any setup that has the same programs, you just install them yourself.
- Hyprland config with per-monitor workspaces and a runtime HDR toggle.
- waybar top bar with custom modules: mouse DPI, Mullvad VPN, a notifications bell, an HDR button, and a live cava audio spectrum in place of the volume icon.
- wofi launcher, eww widgets (the HDR dropdown), swaync notifications, hyprlock / hypridle.
- Single-source theming via wallust: one wallpaper change re-themes hypr, waybar, wofi, eww, gtk, swaync, and VSCode together.
- fish shell, ghostty terminal, plus neovim, tmux, zathura, and fastfetch configs.
These are wired to specific hardware and accounts. Adjust them before or right after stowing:
- Monitors.
hypr/.config/hypr/hyprland.confhardcodes a two-display layout:DP-1(2560x1440@144) andDP-2(HDR viamonitorv2), with workspaces pinned to each. Replace themonitor/monitorv2lines and theworkspace = ... monitor:bindings with your own outputs (hyprctl monitorslists them). - HDR. The HDR toggle (waybar button, eww dropdown,
hdr-ctl) targetsDP-2. Point it at your HDR output or remove it if you have none. - Keyboard layout.
kb_layout = auinhyprland.conf. Set your own. - VPN. The waybar Mullvad module and
bin/mullvad-ctlassume Mullvad is installed and logged in. Remove the module if you do not use it. - Wallpaper. Hyprland loads
~/.cache/current_wallpaperat start. Set one with theSuper+Shift+Wpicker (bin/wallpaper-picker) so wallust has something to theme from.
Each top-level directory is a stow package whose contents mirror their location
under $HOME:
dotfiles/
hypr/.config/hypr/...
waybar/.config/waybar/...
fish/.config/fish/...
tmux/.tmux.conf
...
Running stow symlinks those paths into ~, so ~/.config/<app> points back
into this repo. Editing a live config therefore edits the repo directly, so just
commit to persist.
git clone https://github.com/Mooshieblob1/dotfiles ~/dotfiles
cd ~/dotfiles
# stow every package (back up / move any conflicting real files first)
stow -t ~ hypr waybar wallust fish wofi eww swaync fastfetch gtk-3.0 ghostty nvim zathura tmux binRe-stow a single package after adding files: stow -R -t ~ <pkg>.
After editing configs:
- hypr →
hyprctl reload - waybar →
pkill -SIGUSR2 waybar
| Package | Target |
|---|---|
hypr |
~/.config/hypr |
waybar |
~/.config/waybar |
wallust |
~/.config/wallust |
fish |
~/.config/fish |
wofi |
~/.config/wofi |
eww |
~/.config/eww |
swaync |
~/.config/swaync |
fastfetch |
~/.config/fastfetch |
gtk-3.0 |
~/.config/gtk-3.0 |
ghostty |
~/.config/ghostty |
nvim |
~/.config/nvim |
zathura |
~/.config/zathura |
tmux |
~/.tmux.conf |
bin |
~/.local/bin |
wallust is the single source of truth for colors. On a wallpaper change it
renders the templates in wallust/.config/wallust/templates/ into each app's
color file and runs a reload hook (waybar SIGUSR2, swaync-client --reload-css,
hyprctl reload, restart thunar).
Re-render manually:
wallust run "$(cat ~/.cache/current_wallpaper)"The generated color files are gitignored, so never edit them by hand. Edit the matching template instead and re-render. The mapping:
| Generated file (gitignored) | Source template |
|---|---|
hypr/.config/hypr/colors.conf |
hyprland-colors.conf |
waybar/.config/waybar/colors.css |
waybar-colors.css |
waybar/.config/waybar/calendar-colors.jsonc |
waybar-calendar.jsonc |
wofi/.config/wofi/colors.css |
wofi-colors.css |
eww/.config/eww/colors.scss |
eww-colors.scss |
swaync/.config/swaync/colors.css |
swaync-colors.css |
~/.themes/wallust/gtk-3.{0,20}/gtk.css |
flatcolor-gtk3*.css |
| VSCode color theme | vscode-color-theme.json |
- hypr uses per-file symlinks, not a folded directory symlink. A running
Hyprland watches its config and instantly regenerates a stub
hyprland.confif the file disappears, so the directory can't be safely re-folded while it's running. Replace a hypr symlink atomically (ln -sto a temp name, thenmv -T) rather than delete-then-recreate. - swaync colors are wallust-generated. The
swayncpackage stows a staticconfig.jsonandstyle.css; onlycolors.css(whichstyle.cssimports) is rendered from the wallust templateswaync-colors.cssand gitignored. - bin package (
~/.local/bin): the waybar/eww control scripts.hdr-ctl(HDR toggle),idle-ctl(the coffee button that swaps hypridle configs), andmullvad-ctl(VPN status/menu). Waybar and eww call them at~/.local/bin/<name>, which stow symlinks back into this package. - HDR control (eww): a waybar button opens an
ewwdropdown for DP-2 with an HDR on/off toggle and a max-luminance slider. The logic lives inhdr-ctl(in thebinpackage), which rewrites the hyprland-sourced state fragmenthypr/.config/hypr/hdr.confand reloads Hyprland.monitorv2luminance keys can't be re-applied viahyprctl keyword. eww/layer-shell popups get no outerbox-shadow(it clips to a hard rectangle), so style them with background, border, andborder-radiusonly and keep the window root transparent. - Gitignored: the wallust outputs above,
fish/.config/fish/fish_variables(machine-specific),*.bak, and Nixresultartifacts.
ghostty, nvim, zathura, and tmux configs originated from
szymonwilczek/dotfiles.