Apps
pwnbox themes far more than the desktop shell. This page explains how each app gets its colours and fonts, and which ones update live while running.
Live theming (no restart)
When you change the theme, three apps refresh themselves in place:
| App | Mechanism |
|---|---|
| Spotify | Spicetify watch refreshes the injected CSS and reloads the UI |
| Discord (Equibop) | Equibop watches quickCss.css and hot-applies it |
| Telegram (AyuGram) | AyuGram watches the theme file and reloads it |
You can keep them open; ALT+S is enough.
Spotify
Spotify is patched with Spicetify so it can be themed. Because nixpkgs' Spotify lives read-only in the Nix store, pwnbox-spotify keeps a writable copy under ~/.local/share/pwnbox/spotify and patches that.
- Palette →
~/.config/spicetify/Themes/pwnbox/color.ini - Layout + full theming →
user.css, composed at runtime from the manageduser-base.cssplus a generated font block. - The base CSS themes inputs, search fields, context menus, popovers, modals, tooltips and buttons, flattens Spotify's artwork gradients, and removes every scrollbar.
- Fonts follow the System (body) and Application (code) fonts.
Live updates use spicetify watch -s -l. The launcher passes --remote-debugging-port so the watcher can attach without relaunching Spotify; a background helper keeps the watcher alive.
Commands:
pwnbox-spotify apply # regenerate + push the theme
pwnbox-spotify fonts # regenerate user.css from the current fonts
pwnbox-spotify launch # what the .desktop file runsDiscord (Equibop)
Equibop is the Discord client (Equicord). Its theme lives in ~/.config/equibop/theme-base.css; on every theme change pwnbox-theme recolours it to ~/.config/equibop/settings/quickCss.css, which Equibop watches and applies live no Ctrl + R needed.
Fonts are set through --font (System) and --font-code (Application), plus a generated root font size. The network font imports were removed; local fonts are used instead.
Telegram (AyuGram)
AyuGram is configured through tg-config, which writes into Telegram's encrypted tdata.
- Palette →
~/.config/telegram/pwnbox.tdesktop-theme(generated fromawesome.tdesktop-theme, with a flat solid chat background colour). - AyuGram watches that file, so rewriting it reloads the colours live.
- Fonts: the application font is written into AyuGram's
monoFontsetting; Telegram's UI uses the system font.
pwnbox-theme only syncs tdata (which requires Telegram to be closed) when AyuGram is not running. While it is running, the theme file is rewritten and AyuGram reloads itself.
Editors & terminals
| App | Theme | Fonts |
|---|---|---|
| kitty | generated kitty.conf include | Application font + size |
| Zed | ~/.config/zed/themes/pwnbox.json | UI + buffer fonts/sizes |
| Neovim | generated nvim-palette.lua | inherits the terminal |
| micro / ranger | terminal colours + config | inherit the terminal |
GTK & launchers
- GTK 3 / 4 / GNOME
~/.cache/pwnbox/theme/gtk-colors.cssis imported by the GTK config, andgsettings/dconfkeep fonts and colour scheme in sync. - rofi imports
~/.cache/pwnbox/theme/rofi.rasi. - fuzzel uses
~/.cache/pwnbox/theme/fuzzel.ini. - Zathura a generated include (
~/.cache/pwnbox/theme/zathura.conf) sets the application font.
Desktop shell
Quickshell, Hyprland borders, Hyprlock and the notification daemon all read ~/.config/quickshell/Theme.js and the generated Hyprland include. See Desktop.