Skip to content

Theming

Marchyo themes the system from two coordinated sources. The core desktop surfaces — GTK, Hyprland, Waybar, Mako, Ghostty, fzf, bat, hyprlock, starship, the console, the Vicinae launcher, and the Plymouth boot splash — are themed directly from the Jylhis Design System (their Stylix targets are explicitly disabled). Stylix supplies the base16 color scheme and fonts, and themes everything else — Qt, fontconfig, and the remaining targets.

The launcher is a slightly different case: rather than reading base16 slots, Marchyo generates two real Vicinae themes (jylhis-field for dark, jylhis-sheet for light) from the design tokens and registers both, so the full color surface — text, inputs, buttons, list and grid selection, scrollbars, tooltips — is covered rather than just the background/accent basics. See Launcher.

Option Type Default Description
marchyo.theme.enable bool true Enable the theming system
marchyo.theme.variant "dark" or "light" "dark" Theme variant preference
marchyo.theme.scheme string or null null Override the base16 color scheme (a tinted-schemes catalog name)
marchyo.theme.fontScale number (0.5–4.0) 1.25 Global font-size multiplier applied to every text surface
marchyo.theme.themes list of string ["jylhis-dark" "jylhis-light"] Themes available for runtime switching (pre-built into the closure)
marchyo.theme.wallpaper.enable bool true Enable the generated Marchyo grid wallpaper where supported
marchyo.theme.wallpaper.package package pkgs.marchyo-wallpapers Package providing generated Marchyo wallpaper assets
marchyo.theme = {
enable = true;
variant = "dark";
};

By default the theme is the Jylhis Design System palette, derived from its tokens.json:

Variant Palette
"dark" Jylhis Field (the dark ground)
"light" Jylhis Sheet (the light ground)

Both variants sit on a cool, near-neutral ground with a single bronze interactive accent, a benchmark-vermilion brand mark, and a structural contour blue used for linework only. Code colors are Emacs Modus Operandi (light) / Vivendi (dark), so syntax reads identically in every editor and terminal.

To use a different base16 scheme instead, set marchyo.theme.scheme to the name of a .yaml file in the tinted-theming/schemes catalog (the base16/ directory):

marchyo.theme = {
variant = "dark";
scheme = "gruvbox-dark-medium"; # any tinted-schemes catalog name, e.g. "nord"
};

Stylix carries the design system’s three type roles across the system. The defaults are:

Role Family Package
Display / headings (serif) Zilla Slab pkgs.zilla-slab
Body (sansSerif) Hanken Grotesk pkgs.hanken-grotesk
Monospace BlexMono Nerd Font (IBM Plex Mono, Nerd Font patched) pkgs.nerd-fonts.blex-mono

The Nerd Font patch of IBM Plex Mono is used for monospace because the desktop chrome — Waybar, Mako, hyprlock, Ghostty — needs the icon glyphs. To use a different stack, set the Stylix font options directly:

stylix.fonts.monospace = {
package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrainsMono Nerd Font";
};

marchyo.theme.fontScale is a single multiplier that resizes every text surface at once — the Stylix-driven apps (Qt, fontconfig, GNOME/KDE) and the directly-themed chrome alike (the terminal, Waybar, notifications, the lock screen, the launcher, GTK apps, and the TTY console). It defaults to 1.25 (noticeably larger than upstream defaults). Set it to 1.0 to restore the historical sizes, or higher for HiDPI-at-distance or accessibility:

marchyo.theme.fontScale = 1.5; # everything ~50% larger

Each surface scales from its own base size and rounds to a whole number, so the proportions between surfaces are preserved.

marchyo.theme.themes lists the themes available for runtime switching — no rebuild needed. Each listed theme’s desktop assets (Waybar CSS, Mako config, Hyprland colors, Ghostty colors, wallpaper, GTK CSS + the dconf color-scheme) are pre-built into the system closure so a switch is an instant symlink swap. The default list is the Jylhis pair; add any tinted-schemes catalog name to make it switchable:

marchyo.theme.themes = [
"jylhis-dark"
"jylhis-light"
"nord"
"gruvbox-dark-hard"
];

Runtime switching covers the directly-themed surfaces; Stylix-derived targets (Qt, fontconfig, …) follow the build-time variant/scheme until a rebuild. The switch is ephemeral — the next activation resets to the declarative default.

GTK apps follow a runtime switch on next launch (newly started apps read the swapped ~/.config/gtk-{3,4}.0/gtk.css; libadwaita apps additionally restyle live via the dconf color-scheme). The Quickshell bar (marchyo.shell.enable) recolors live as well — it reads the active theme’s palette through the same pointer — and Super+Shift+L cycles the theme from the compositor.

A generated Marchyo grid wallpaper is enabled by default wherever it is supported. To disable it, or to supply your own wallpaper asset package:

marchyo.theme.wallpaper = {
enable = false; # skip the generated wallpaper
# package = pkgs.my-wallpapers; # or swap in a different asset package
};

To use the light theme:

marchyo.theme = {
variant = "light";
};