Theme Options

cells/options/theme.nix defines my.theme, the shared palette and visual identity object used by desktop leaves.

Up: options

Down: theme | theme selection | theme application

What this node does

The theme schema includes a slug, light or dark variant, named colors, accent, border color, GTK theme, icon theme, cursor, Qt/Kvantum settings, terminal color scheme, Starship palette, Waybar variation, fonts, and Cava gradient colors.

options.my.theme = mkOption {
  type = types.submodule {
    options = {
      slug = mkOption { type = types.str; };
      variant = mkOption { type = types.enum [ "dark" "light" ]; };
      accent = mkOption { type = types.str; };
      font.sans = mkOption { type = types.str; };
      font.mono = mkOption { type = types.str; };
    };
  };
};

Why it exists

Desktop configuration often drifts because every application has its own theme file. This schema creates one typed source of truth.

Leaves such as Hyprland, GTK, Kvantum, Waybar, Starship, Cava, and terminal configuration can consume the same selected theme instead of hard-coding colors independently.

What to copy

Keep theme data declarative and application-neutral. Then write application leaves that translate my.theme into concrete config files.