Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7.5 KiB
Executable File
NexusOS desktop theme
XFCE/GTK desktop theme (distinct from the web UI in interface/web/).
Lime-green + purple, dark, with tightened menus.
Layout
| Path | What |
|---|---|
NexusOS/ |
GTK2/3 + xfwm4 theme. GTK3 CSS in NexusOS/gtk-3.0/ is hand-maintained (no build step). |
NexusOS/gtk-3.0/colors.css |
All color tokens. Edit colors here, not in the widget files. |
NexusOS-icons/ |
Icon theme (inherits Papirus-Dark). |
_palette.py + *-src/build.py |
Regenerate gtk2 / icons / xfwm4 — NOT gtk-3.0. |
NexusOS-icons-src/build_actions.py |
Regenerate the actions icons (logoff dialog / Whisker session buttons). |
install-theme.sh |
Idempotent restore of all the wiring (see below). |
gtk3-user-overrides.css |
Symlinked to ~/.config/gtk-3.0/gtk.css. |
How it's wired (the part backups miss)
The files above are just source. What makes the desktop use them lives
outside this folder and is recreated by install-theme.sh:
- Symlinks:
~/.themes/NexusOS,~/.icons/NexusOS,~/.config/gtk-3.0/gtk.css. - xfconf:
xsettings(/Net/ThemeName,/Net/IconThemeName,/Gtk/CursorThemeName,/Gtk/FontName) andxfwm4 /general/theme. ~/.config/gtk-3.0/settings.iniand~/.config/gtk-4.0/settings.ini.
Canonical values: theme NexusOS, icons NexusOS, cursor DMZ-White,
font Ubuntu 10. Keep these in sync with NexusOS/index.theme and
install-theme.sh.
Apply / reload after editing
xfconf-query -c xsettings -p /Net/ThemeName -s Adwaita
xfconf-query -c xsettings -p /Net/ThemeName -s NexusOS
xfdesktop --reload & xfce4-panel -r
Some apps cache the theme at startup and need a full restart.
Backup / restore
bin/backup.sh(run at home): snapshots live wiring intorestore-snapshot/, then rsyncs the repo to the router.bin/restore.sh: pull back, rebuild venv/frontend, then auto-runinstall-theme.sh. Usebin/restore.sh --checksumfor a content-only dry-run.- The repo is git-tracked;
backup.shmirrors.gittoo, so if a bulkgit addis ever interrupted rungit gc --prune=nowbefore backing up (a killedgit add -Aonce left 4 GB of loose objects).
Gotchas (each cost real debugging time)
- Theme silently falls back to Adwaita if
gtk-theme-nameinsettings.iniand xfconfxsettings/Net/ThemeNamedisagree, or point at a non-existent theme. Edits then have zero visible effect. settings.iniis machine-generated by xfsettingsd fromxsettings.xml— don't symlink it into the repo. GTK4 has its own~/.config/gtk-4.0/settings.inithat xsettings does not override; it must be reconciled separately (easy to forget).@border==@overlay_bg(#2e3236) incolors.css, so a separator drawn in@borderon an overlay surface is invisible. Use@border_strong/@menu_border. Root collision is unfixed; patched per-spot.gtk-menu-imagestoggles icons in classic GtkMenus only. It does not affect the Whisker menu (separate widget tree).- Whisker menu: the popup's identifier is set via
gtk_widget_set_name(), so CSS must target#whiskermenu-window(an #id), not.whiskermenu-window(a class) — a class selector matches nothing. The basewindow.backgroundrule also outranks a bare class;#idwins on both counts. Whisker version: 2.9.x. Its app/category lists aretreeview/iconview; restartxfce4-panelto reload its CSS. - Menu surfaces use
@menu_bg(#2a1d33) /@menu_border(#4d3461) — dark purple. Tooltips/menubars/cards stay on the gray surface palette deliberately. .gitignoredoes not support trailing/inline comments. ADir/ # noteline matches nothing — comments must be on their own line. (This once let agit addstart ingesting the 28 GB venv.)
KDE Plasma migration (KDE/)
All KDE Plasma theme assets live under KDE/. These are built to mirror the NexusOS
visual design — same palette, same flat aesthetic — in KDE-native formats. The GTK 3
theme and icon theme carry over unchanged.
KDE/
install-plasma.sh # idempotent installer (run once after switching)
generate_plasma_colors.py # regenerate NexusOS.colors from _palette.py
plasma/NexusOS/ # Plasma shell theme (panel, widgets, tooltips)
NexusOS.colors # KDE color scheme — source of truth for Qt/KDE colors
colors # Plasma shell palette overrides
widgets/*.svg # 9-slice SVGs: panel-background, tooltip, button, etc.
opaque/widgets/ # compositor-off variants
kvantum/NexusOS/ # Qt5/Qt6 app styling
NexusOS.kvconfig # widget geometry + element references
NexusOS.svg # flat SVG widget drawings
aurorae/NexusOS/ # KWin window decoration
NexusOSrc # titlebar height, button layout, colors
decoration.svg # window frame (9-slice)
close/maximize/minimize/restore/alldesktops/keepabove/keepbelow/shade.svg
sddm/NexusOS-QML/ # Login screen (already deployed; palette now aligned)
Main.qml # QML login UI — NexusOS purple/green palette
assets/background.svg assets/logo.png
kscreenlocker/NexusOS/ # Runtime screen lock (Meta+L in KDE)
contents/ui/LockScreenUi.qml # matches SDDM aesthetic; kscreenlocker API
konsole/
NexusOS.colorscheme # general terminal colors
NexusOS-Promethean.colorscheme # deep purple — matches promethean-kitty.conf
Promethean.profile # Konsole profile: rcfile, cursor, color scheme
What survives the switch unchanged
| Asset | Status |
|---|---|
NexusOS/gtk-3.0/ (all CSS) |
GTK apps on Plasma use it as-is |
NexusOS-icons/ |
Freedesktop spec — works on any DE |
_palette.py / colors.css |
Source of truth; KDE palette generated from it |
| Plymouth boot splash | System-level; unaffected by DE switch |
Installing before the switch (XFCE)
Testable now:
# Kvantum (Qt5 app styling — works on XFCE)
sudo apt install qt5-style-kvantum qt5-style-kvantum-themes
ln -sfn "$PWD/assets/themes/KDE/kvantum/NexusOS" ~/.config/Kvantum/NexusOS
kvantummanager --set NexusOS # then open any Qt5 app
# Konsole colors (works on XFCE if konsole installed)
cp assets/themes/KDE/konsole/*.colorscheme assets/themes/KDE/konsole/Promethean.profile \
~/.local/share/konsole/
# SDDM palette (already live; installer will redeploy if needed)
Needs KDE session: Aurorae decoration, Plasma shell theme, kscreenlocker.
First boot into Plasma
assets/themes/KDE/install-plasma.sh
Then in System Settings → Appearance verify:
- Global Theme: (manual if needed — set individual components below)
- Colors: NexusOS
- Application Style: Kvantum-dark
- Plasma Style: NexusOS
- Window Decorations: NexusOS
- Icons: NexusOS
Test lock screen: Meta+L
Promethean Terminal on KDE
bin/promethean/promethean-terminal.desktop now uses konsole --profile Promethean.
The Promethean Konsole profile configures the rcfile, deep-purple color scheme,
and #b040c0 cursor. The kitty fallback line is commented out in the .desktop.
Palette alignment note
The SDDM NexusOS-QML theme previously used a navy/cyan palette (#0f1626 / #00d4ff).
It has been updated to the NexusOS palette (#1e1526 / #8cc63f) for consistency.
The live SDDM at /usr/share/sddm/themes/NexusOS-QML/ still has the old colors;
install-plasma.sh will replace it.