141 lines
4.6 KiB
Markdown
141 lines
4.6 KiB
Markdown
# 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" <file>
|
||
```
|
||
|
||
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.
|