v1.29.0
feat(theme): add dg theme, switching every themed app together
devgeta installed one hardcoded Gruvbox look and advertised a dg change --theme=... command that was never registered. That look is now a named,
switchable theme, and a second one ships beside it: dg theme set tokyonight
restyles the terminal, tmux, Neovim and both AI coders together, and
dg theme set default puts everything back exactly as it was.
dg themeshows the current theme and what else is available,dg theme listlists them, anddg theme set <name>switches every themed app that
is actually installed — Alacritty, Ghostty, tmux, Neovim, OpenCode, Claude
and i3 — printing a reason for each one it skips.- A theme is now one palette file (
configs/themes/<name>.yaml) rather than a
hardcoded color in seven templates, so adding one needs no Go or template
changes.defaultrecords the colors that were already installed verbatim,
so upgrading and runningdg theme set defaultchanges nothing you can see. - The switch is transactional. The theme is validated before anything is
touched, each app's exact config paths are backed up, any failure rolls the
whole machine back, andcurrent_themeis written last — so a failed switch
cannot leave a half-themed machine or a config naming a theme you don't
have. A switch interrupted by Ctrl-C is recovered automatically by the next
dg theme set,dg configureordg install, which says what it restored. - Themes carry a wallpaper. Both shipped themes come with one, so a fresh
install has it on any machine, anddg theme set-wallpaper <path>records
your own for the current theme instead — copied into
~/.config/devgeta/wallpapers/under a content-addressed name, so two
images that happen to share a filename never overwrite each other. Applying
it is best-effort (AppleScript on macOS,fehon Linux/i3) and never fails
the switch;fehis not installed by devgeta, so on Linux the warning names
the command that installs it. - The root help no longer advertises
dg change --theme=... --font=..., which
was never a real command.
Behavior changes: dg theme set is the only way to change current_theme —
dg config get/set current_theme is refused as an unknown setting, because it
names deploy state rather than a preference. dg theme set now also changes
your desktop wallpaper, since both shipped themes declare one; override it per
machine with dg theme set-wallpaper. Neovim's init.lua now requires a
generated devgeta.theme shim instead of naming a colorscheme module
directly. Release binaries grow by about 1.7 MB, which is the two wallpapers.
Full Changelog: v1.28.0...v1.29.0