treewide: theme module refactor

I decided to refactor how the theme module works. The idea is, that I
wanted originally a module that I could give a base16 scheme name to,
and use that globally in my config. However, scheme only took the base16
scheme name without any checks, which was pretty bad. I ended up
creating a new option, schemeName, that scheme is computed from. It then
makes the whole configuration cleaner, and avoids long inputs
interpolations with the scheme name.
This commit is contained in:
Anthony Rodriguez 2024-11-21 15:51:01 +01:00
parent 6d643f903c
commit 32971e91bf
Signed by: nezia
GPG key ID: EE3BE97C040A86CE
7 changed files with 25 additions and 17 deletions

View file

@ -15,7 +15,7 @@
font = "monospace:size=14"; font = "monospace:size=14";
}; };
colors = let colors = let
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette; inherit (osConfig.theme.scheme) palette;
in { in {
background = "${palette.base00}ff"; background = "${palette.base00}ff";
text = "${palette.base05}ff"; text = "${palette.base05}ff";

View file

@ -1,12 +1,11 @@
{ {
inputs,
pkgs, pkgs,
config, config,
osConfig, osConfig,
lib, lib,
... ...
}: let }: let
isDark = inputs.basix.schemeData.base16.${osConfig.theme.scheme}.variant == "dark"; isDark = osConfig.theme.scheme.variant == "dark";
in { in {
home.pointerCursor = { home.pointerCursor = {
inherit (osConfig.theme.cursorTheme) name package size; inherit (osConfig.theme.cursorTheme) name package size;

View file

@ -1,13 +1,11 @@
{ {
inputs,
lib, lib,
pkgs, pkgs,
config, config,
osConfig, osConfig,
... ...
}: let }: let
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette; inherit (osConfig.theme.scheme) palette;
inherit (lib) getExe mkIf;
in { in {
imports = [./binds.nix]; imports = [./binds.nix];

View file

@ -1,10 +1,9 @@
{ {
inputs,
pkgs, pkgs,
osConfig, osConfig,
... ...
}: let }: let
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette; inherit (osConfig.theme.scheme) palette;
in { in {
# requires `security.pam.services.swaylock = { };` at the system level or else # requires `security.pam.services.swaylock = { };` at the system level or else
# unlock will not work. # unlock will not work.

View file

@ -1,10 +1,9 @@
{ {
inputs,
lib, lib,
osConfig, osConfig,
... ...
}: let }: let
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette; inherit (osConfig.theme.scheme) palette;
inherit (builtins) concatStringsSep; inherit (builtins) concatStringsSep;
inherit (lib) mapAttrsToList; inherit (lib) mapAttrsToList;

View file

@ -1,5 +1,4 @@
{ {
inputs,
osConfig, osConfig,
config, config,
lib, lib,
@ -17,7 +16,7 @@
inherit (lib) mapAttrs; inherit (lib) mapAttrs;
inherit (lib.strings) removePrefix; inherit (lib.strings) removePrefix;
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b # because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
palette = mapAttrs (_: color: removePrefix "#" color) inputs.basix.schemeData.base16.${osConfig.theme.scheme}.palette; palette = mapAttrs (_: color: removePrefix "#" color) osConfig.theme.scheme.palette;
in { in {
background = palette.base00; background = palette.base00;
foreground = palette.base05; foreground = palette.base05;

View file

@ -1,22 +1,33 @@
{ {
inputs,
config,
lib, lib,
pkgs, pkgs,
... ...
}: let }: let
inherit (lib) mkEnableOption mkOption; inherit (lib) mkEnableOption mkOption mkIf attrNames;
inherit (lib.types) string path package; inherit (lib.types) path package enum;
cfg = config.theme;
in { in {
imports = [./gtk.nix]; imports = [./gtk.nix];
options.theme = { options.theme = {
enable = mkEnableOption "theme"; enable = mkEnableOption "theme";
scheme = mkOption { schemeName = mkOption {
description = '' description = ''
Name of the tinted-scheming color scheme to use. Name of the tinted-scheming color scheme to use.
''; '';
type = string; type = enum (attrNames inputs.basix.schemeData.base16);
example = lib.literalExpression "catppuccin-macchiato"; example = "catppuccin-macchiato";
default = "catppuccin-macchiato"; default = "catppuccin-macchiato";
}; };
scheme = mkOption {
description = ''
Resolved scheme from the tinted-scheming library.
'';
type = lib.types.attrs;
};
wallpaper = mkOption { wallpaper = mkOption {
description = '' description = ''
Location of the wallpaper that will be used throughout the system. Location of the wallpaper that will be used throughout the system.
@ -51,4 +62,7 @@ in {
}; };
}; };
}; };
config.theme = mkIf cfg.enable {
scheme = inputs.basix.schemeData.base16.${config.theme.schemeName};
};
} }