# CyberQueer Theme System The CyberQueer theme is a single-source colour system: every config file that needs colours references a small set of hex values that can be changed in one place and propagated everywhere with a single command. --- ## The Palette Defined in `~/Dotfiles/colors.conf` (bare 6-digit hex, no `#` prefix): ```ini COLOR_TEXT=D6ABAB # Rose-white — foreground text, labels COLOR_BG=1A1A1A # Near-black — base surface, backgrounds COLOR_HIGHLIGHT=E40046 # Hot pink — primary accent, active borders COLOR_DARK=5018DD # Violet — secondary accent, inactive borders COLOR_RED=F50505 # Red — danger indicators, alerts ``` --- ## Applying the Theme ```bash # Apply using the default colors.conf bash ~/Dotfiles/apply-theme.sh # Apply from a custom palette file bash ~/Dotfiles/apply-theme.sh /path/to/custom-colors.conf ``` `apply-theme.sh` will: 1. Read `colors.conf` (or the file you pass) 2. Compare against the last-applied state in `~/.config/colors.state` 3. Replace only **changed** colour values across all tracked files 4. Save the new state to `colors.state` If nothing changed it exits immediately — safe to call repeatedly. ### First-Run Bootstrap On a fresh install where configs have been copied but no state file exists yet, `apply-theme.sh` bootstraps `~/.config/colors.state` with the repository defaults so the diff works correctly from the start. --- ## What Gets Themed ### User Configs (`~/.config/…`) | File | What it styles | |------|---------------| | `starship.toml` | Shell prompt segment colours | | `yazi/theme.toml` | File manager UI colours | | `hypr/hyprland.conf` | Active/inactive window border gradients | | `hypr/hyprtoolkit.conf` | Additional Hyprland colours | | `hypr/hyprlock.conf` | Lock screen colours | | `kitty/current-theme.conf` | Terminal colour palette | | `kitty/kitty.conf` | Terminal background & accents | | `kitty/themes/cyberqueer.conf` | Kitty colour scheme definition | | `waybar/style.css` | Top bar widget colours | | `wofi/style.css` | App launcher colours | | `walker/themes/cyberqueer.css` | Walker launcher theme | | `nwg-dock-hyprland/style.css` | Application dock | | `nwg-drawer/drawer.css` | Application drawer | | `nwg-panel/menu-start.css` | Panel start menu | | `vicinae/cyberqueer.toml` | Gesture launcher | | `scripts/onscreenkb.sh` | On-screen keyboard colours | | `spicetify/Themes/*/color.ini` | Spotify client theme (×2 variants) | | `ulauncher/user-themes/cyberqueer/manifest.json` | uLauncher theme | | `ulauncher/user-themes/cyberqueer/theme.css` | uLauncher CSS | | `ulauncher/user-themes/cyberqueer/generated.css` | uLauncher generated CSS | | `Vencord/themes/cyberqueer.theme.css` | Discord theme | | `Vencord/themes/system24/…/cyberqueer.theme.css` | Discord system24 variant | ### System Files (applied via `sudo`) | File | What it styles | |------|---------------| | `/etc/ly/config.ini` | TUI login manager colours | | `/usr/share/themes/cyberqueer/gtk-3.0/gtk.css` | GTK 3 theme | | `/usr/share/themes/cyberqueer/gtk-4.0/gtk.css` | GTK 4 theme | --- ## Customising the Palette Edit `~/Dotfiles/colors.conf`, then run `apply-theme.sh`: ```bash # Example: shift the accent to cyan nano ~/Dotfiles/colors.conf # → COLOR_HIGHLIGHT=00B4D8 bash ~/Dotfiles/apply-theme.sh ``` The tui-install.sh installer also offers a colorway dialog as its final step: enter new hex values in the form; leave them unchanged to skip. --- ## How It Works Internally `apply-theme.sh` reads two key–value files and computes the diff: ``` ~/.config/colors.state (old values — what's currently applied) colors.conf (new values — what you want) ``` For each changed key it runs: ```bash sed -i "s/${OLD_HEX}/${NEW_HEX}/gI" ``` The case-insensitive (`I`) flag matches uppercase hex codes that some apps emit. After all replacements succeed, `colors.state` is updated. ### Symlink Guard `apply-theme.sh` refuses to run if any deployed config path resolves back into `~/Dotfiles/` via symlink. This prevents theme changes from being committed directly into the git repository. The new-style install (via `tui-install.sh`) **copies** configs instead of symlinking them, so this guard is normally never triggered. --- ## Answerfile Theming If you generate an answerfile with `generate-answerfile.sh`, custom colours can be embedded in it: ```json { "colors": { "COLOR_TEXT": "D6ABAB", "COLOR_BG": "1A1A1A", "COLOR_HIGHLIGHT": "E40046", "COLOR_DARK": "5018DD", "COLOR_RED": "F50505" } } ``` `tui-install.sh` will apply these at the end of an automated install.