theme edits
This commit is contained in:
140
modules/home/desktop/theme/default.nix
Normal file
140
modules/home/desktop/theme/default.nix
Normal file
@@ -0,0 +1,140 @@
|
||||
{ config, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.mjallen.theme;
|
||||
|
||||
mkPalettePath = name:
|
||||
lib.snowfall.fs.get-file "modules/home/desktop/theme/palettes/${name}.nix";
|
||||
|
||||
cap = s: let
|
||||
len = builtins.stringLength s;
|
||||
in
|
||||
(lib.toUpper (builtins.substring 0 1 s))
|
||||
+ (builtins.substring 1 (len - 1) s);
|
||||
in
|
||||
{
|
||||
options.mjallen.theme = {
|
||||
name = mkOption {
|
||||
type = types.enum [ "nord" "dracula" "everforest" ];
|
||||
default = "nord";
|
||||
description = "Global theme palette name.";
|
||||
};
|
||||
|
||||
# This is the palette file other modules should import.
|
||||
# It exports a normalized schema with colors, tokens, and compat maps.
|
||||
paletteFile = mkOption {
|
||||
type = types.path;
|
||||
default = mkPalettePath "nord";
|
||||
description = "Path to a palette nix file exporting a normalized schema (and compat maps).";
|
||||
};
|
||||
|
||||
# Exposed tokens (derived from paletteFile)
|
||||
tokens = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
description = "Derived tokens from the selected palette (set automatically).";
|
||||
};
|
||||
|
||||
# Expose the imported palette (actual colors + compat groups)
|
||||
palette = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
description = "Imported palette attrset from the selected paletteFile (set automatically).";
|
||||
};
|
||||
|
||||
gtk = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Manage GTK theme using global theme settings.";
|
||||
};
|
||||
|
||||
# e.g. Colloid-Dark-Compact-*
|
||||
color = mkOption {
|
||||
type = types.enum [ "dark" "light" ];
|
||||
default = "dark";
|
||||
description = "GTK color variant.";
|
||||
};
|
||||
|
||||
size = mkOption {
|
||||
type = types.enum [ "standard" "compact" ];
|
||||
default = "compact";
|
||||
description = "GTK size variant.";
|
||||
};
|
||||
|
||||
accent = mkOption {
|
||||
type = types.enum [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ];
|
||||
default = "all";
|
||||
description = "GTK accent (Colloid themeVariants).";
|
||||
};
|
||||
|
||||
tweak = mkOption {
|
||||
type = types.enum [ "normal" "rimless" "float" "black" ];
|
||||
default = "normal";
|
||||
description = "GTK tweak (Colloid tweaks).";
|
||||
};
|
||||
|
||||
themeName = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Explicit GTK theme name override. If null, computed from color/size/accent.";
|
||||
};
|
||||
};
|
||||
|
||||
icons = {
|
||||
# Colloid icon scheme usually supports several named schemes. Default follows palette name.
|
||||
scheme = mkOption {
|
||||
type = types.enum [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" ];
|
||||
default = cfg.name;
|
||||
description = "Icon scheme to use (Colloid schemeVariants).";
|
||||
};
|
||||
|
||||
variant = mkOption {
|
||||
type = types.enum [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ];
|
||||
default = "all";
|
||||
description = "Icon variant (Colloid colorVariants).";
|
||||
};
|
||||
|
||||
themeName = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Explicit icon theme name override. If null, computed from scheme/variant.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Wire derived defaults that depend on other options.
|
||||
config = {
|
||||
# Keep paletteFile following the chosen name unless user overrides it explicitly.
|
||||
mjallen.theme.paletteFile = mkDefault (mkPalettePath cfg.name);
|
||||
|
||||
# Pull tokens directly from the palette file for convenience
|
||||
mjallen.theme.tokens = mkDefault (
|
||||
let pal = import cfg.paletteFile; in pal.tokens or { }
|
||||
);
|
||||
|
||||
# Expose the imported palette for convenience
|
||||
mjallen.theme.palette = mkDefault (import cfg.paletteFile);
|
||||
|
||||
# Default per-program palette path (can still be overridden per program)
|
||||
mjallen.programs.waybar.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.kitty.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.mako.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.wofi.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.btop.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.nwg-dock.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.nwg-drawer.theme.file = mkDefault cfg.paletteFile;
|
||||
mjallen.programs.wlogout.theme.file = mkDefault cfg.paletteFile;
|
||||
|
||||
# Computed GTK/Icon theme names if not overridden
|
||||
_module.args.mjallenThemeComputed = {
|
||||
gtkTheme =
|
||||
if cfg.gtk.themeName != null then cfg.gtk.themeName
|
||||
else "Colloid-${cap cfg.gtk.color}-${cap cfg.gtk.size}";
|
||||
|
||||
iconTheme =
|
||||
if cfg.icons.themeName != null then cfg.icons.themeName
|
||||
else "Colloid-${cap cfg.icons.scheme}-${cap cfg.gtk.color}";
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user