pwnbox The manual. Every option, every key, every file.

docs / apps

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:

AppMechanism
SpotifySpicetify 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 managed user-base.css plus 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:

bash
pwnbox-spotify apply     # regenerate + push the theme
pwnbox-spotify fonts     # regenerate user.css from the current fonts
pwnbox-spotify launch    # what the .desktop file runs

Discord (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 from awesome.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 monoFont setting; 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

AppThemeFonts
kittygenerated kitty.conf includeApplication font + size
Zed~/.config/zed/themes/pwnbox.jsonUI + buffer fonts/sizes
Neovimgenerated nvim-palette.luainherits the terminal
micro / rangerterminal colours + configinherit the terminal

GTK & launchers

  • GTK 3 / 4 / GNOME ~/.cache/pwnbox/theme/gtk-colors.css is imported by the GTK config, and gsettings/dconf keep 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.