A Hyprland desktop on EndeavourOS, themed end to end from one palette:
Gruvbox Material in all its variants, or the house theme GruvMoon. Every
binary any config calls is listed in packages/.
git clone <this repo> ~/personal/projects/mars/dotfiles
cd ~/personal/projects/mars/dotfiles
./install.sh # add --utils for the extras in packages/utils.txtThen reboot and pick Hyprland (uwsm-managed) at the SDDM login screen.
EndeavourOS's installer already provides the base system, the NVIDIA driver
and the audio/network services, so install.sh doesn't repeat them. It does
replace GDM with SDDM running a theme that mirrors the lock screen. Every step
is idempotent; re-run it after pulling changes.
install.sh packages -> theme -> stow -> commands -> SDDM
bin/ commands, linked into ~/.local/bin by install.sh
mars-theme switch theme / accent and apply it everywhere
mars-wallpaper switch wallpaper
lib/mars.sh paths + helpers shared by bin/ and the menu scripts
packages/ package lists (see the header of each)
theme/
lib.sh theme ids, loading, accent, derived values, saved state
gruvbox-material.sh the upstream palette table (all variants)
themes/gruvmoon.sh the house theme: a plain, hand-editable palette
templates/ one template per themed app, ${VAR} placeholders
render.sh templates -> app configs (the RENDER_TABLE)
config/ stow package, mirrors ~ (.config, .local/share)
.config/hypr/
hyprland.lua entry point; the config itself is in modules/
modules/ monitors, environment, autostart, appearance,
input, keybinds, rules, programs
scripts/ the rofi menus (lib is ../../../../lib/mars.sh)
system/sddm/ login screen; copied (not stowed) into /usr/share + /etc
wallpapers/ your images (gitignored; the picker lists them)
Pick with SUPER+. (Wallpaper / Theme / Accent colour), or from a shell:
mars-theme list # GruvMoon + 18 Gruvbox Material variants
mars-theme set gruvbox-material-light-soft-material
mars-theme accent aqua # red orange yellow green aqua blue purple
mars-theme accent '#d65d0e' # or any hex
mars-wallpaper set wallhaven-3qkggv.jpgA theme is mode (dark/light) × background (hard/medium/soft) × foreground (material/mix/original), exactly the options of the Vim plugin. A named accent follows the theme (a darker green on light themes); a custom hex stays fixed. Text drawn on the accent picks dark or light by the accent's brightness, so any colour stays readable.
The choice is saved in ~/.local/state/mars/ and applied live to Hyprland,
waybar, swaync, swayosd, kitty, rofi, GTK3 apps and running Neovim. Qt/KDE
and GTK4 apps pick it up on their next start. The SDDM login screen
is system-wide: re-run ./install.sh to update it.
- Never write a hex value into an app config. Add a template to
theme/templates/, add it toRENDER_TABLEintheme/render.shand to.gitignore(rendered files are build output), thenmars-theme apply. - Use
${ACCENT}for "the highlight colour" and${ACCENT_FG}for text on it; use${GREEN}/${RED}... only where the hue itself means something (success, terminal ANSI colours). - A new theme: copy
theme/themes/gruvmoon.shtotheme/themes/<id>.shand edit the values. It appears in the picker automatically.
SUPER+? shows all of them, read live from the config. The ones to know:
| Keys | Action |
|---|---|
| SUPER+Return | terminal (kitty) |
| SUPER+R / SUPER+Tab | app launcher / window switcher |
| SUPER+E / SUPER+SHIFT+E | Nautilus / yazi |
| SUPER+SHIFT+V | clipboard history (image preview, pins) |
| SUPER+. | wallpaper, theme, accent |
| SUPER+Escape | power menu |
SUPER+ / SUPER+SHIFT+ |
lock / keep-awake |
| SUPER+N | notification centre |
| screenshot / screen-recording menu | |
| SUPER+1…0 | workspaces |