diff --git a/doc/src/modules.md b/doc/src/modules.md index 615f268e7..95c4e9327 100644 --- a/doc/src/modules.md +++ b/doc/src/modules.md @@ -49,10 +49,7 @@ documentation for more details): ```nix { config, lib, mkTarget ... }: mkTarget { - name = "«name»"; - humanName = "«human readable name»"; - - configElements = + config = { colors }: { programs.«name».theme.background = colors.base00; diff --git a/modules/alacritty/hm.nix b/modules/alacritty/hm.nix index ed54e3bb1..eb9bbfd67 100644 --- a/modules/alacritty/hm.nix +++ b/modules/alacritty/hm.nix @@ -3,9 +3,7 @@ # - `man 5 alacritty` { mkTarget, ... }: mkTarget { - name = "alacritty"; - humanName = "Alacritty"; - configElements = [ + config = [ ( { colors }: { diff --git a/modules/anki/hm.nix b/modules/anki/hm.nix index 9f3c3808b..2276c4d64 100644 --- a/modules/anki/hm.nix +++ b/modules/anki/hm.nix @@ -5,10 +5,7 @@ ... }: mkTarget { - name = "anki"; - humanName = "Anki"; - - configElements = + config = { colors }: { programs.anki.addons = lib.singleton ( diff --git a/modules/ashell/hm.nix b/modules/ashell/hm.nix index 41616ac82..e369229df 100644 --- a/modules/ashell/hm.nix +++ b/modules/ashell/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "ashell"; - humanName = "Ashell"; - - configElements = [ + config = [ ( { colors }: { diff --git a/modules/avizo/hm.nix b/modules/avizo/hm.nix index 25900638f..60696649e 100644 --- a/modules/avizo/hm.nix +++ b/modules/avizo/hm.nix @@ -1,10 +1,7 @@ { mkTarget, ... }: mkTarget { - name = "avizo"; - humanName = "Avizo"; - # Referenced https://github.com/stacyharper/base16-mako - configElements = + config = { colors, opacity }: { services.avizo = { diff --git a/modules/bat/hm.nix b/modules/bat/hm.nix index ff424fcac..c9bf34758 100644 --- a/modules/bat/hm.nix +++ b/modules/bat/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "bat"; - humanName = "Bat"; - - configElements = + config = { colors }: { programs.bat = { diff --git a/modules/bemenu/hm.nix b/modules/bemenu/hm.nix index ca0d5a6ae..ee7817b60 100644 --- a/modules/bemenu/hm.nix +++ b/modules/bemenu/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "bemenu"; - humanName = "bemenu"; - - extraOptions = + options = { fonts }: { fontSize = lib.mkOption { @@ -24,7 +21,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { cfg, fonts }: { diff --git a/modules/blender/hm.nix b/modules/blender/hm.nix index e44840631..4971ebd7f 100644 --- a/modules/blender/hm.nix +++ b/modules/blender/hm.nix @@ -1,15 +1,12 @@ { mkTarget, lib, ... }: mkTarget { - name = "blender"; - humanName = "Blender"; - - extraOptions.themeBody = lib.mkOption { + options.themeBody = lib.mkOption { type = lib.types.lines; default = ""; internal = true; }; - configElements = [ + config = [ ./color-theme.nix ./font-theme.nix ( diff --git a/modules/bspwm/hm.nix b/modules/bspwm/hm.nix index fb51e970c..54596468b 100644 --- a/modules/bspwm/hm.nix +++ b/modules/bspwm/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "bspwm"; - humanName = "bspwm"; - - configElements = + config = { colors }: { xsession.windowManager.bspwm.settings = with colors.withHashtag; { diff --git a/modules/btop/hm.nix b/modules/btop/hm.nix index c7de0798e..a6792c79e 100644 --- a/modules/btop/hm.nix +++ b/modules/btop/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "btop"; - humanName = "btop"; - - configElements = [ + config = [ ( { opacity }: { diff --git a/modules/cava/hm.nix b/modules/cava/hm.nix index 1ba121356..0a793165c 100644 --- a/modules/cava/hm.nix +++ b/modules/cava/hm.nix @@ -1,13 +1,8 @@ { mkTarget, lib, ... }: mkTarget { - name = "cava"; - humanName = "CAVA"; + options.rainbow.enable = lib.mkEnableOption "rainbow gradient theming"; - extraOptions = { - rainbow.enable = lib.mkEnableOption "rainbow gradient theming"; - }; - - configElements = + config = { cfg, colors }: let mkGradient = diff --git a/modules/cavalier/hm.nix b/modules/cavalier/hm.nix index e5979cc7e..3e1060486 100644 --- a/modules/cavalier/hm.nix +++ b/modules/cavalier/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "cavalier"; - humanName = "Cavalier"; - - configElements = + config = { colors }: { programs.cavalier.settings.general = { diff --git a/modules/chromium/nixos.nix b/modules/chromium/nixos.nix index d0d2201b9..fa20b10a8 100644 --- a/modules/chromium/nixos.nix +++ b/modules/chromium/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "chromium"; - humanName = "Chromium, Google Chrome and Brave"; - - configElements = + config = { colors }: { programs.chromium = { diff --git a/modules/console/droid.nix b/modules/console/droid.nix index caf1f42d0..087426c64 100644 --- a/modules/console/droid.nix +++ b/modules/console/droid.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "console"; - humanName = "the Nix-on-Droid console"; - - configElements = + config = { colors }: { terminal.colors = with colors.withHashtag; rec { diff --git a/modules/console/nixos.nix b/modules/console/nixos.nix index e63ab5f8c..9f1ddf127 100644 --- a/modules/console/nixos.nix +++ b/modules/console/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "console"; - humanName = "the Linux kernel console"; - - configElements = + config = { colors }: { console.colors = with colors; [ diff --git a/modules/discord/nixcord.nix b/modules/discord/nixcord.nix index d974f9b7e..af86da352 100644 --- a/modules/discord/nixcord.nix +++ b/modules/discord/nixcord.nix @@ -10,7 +10,7 @@ mkTarget { name = "nixcord"; humanName = "Nixcord"; - extraOptions = { + options = { themeBody = lib.mkOption { type = lib.types.lines; default = ""; @@ -23,7 +23,7 @@ mkTarget { }; }; - configElements = (import ./common/theme-elements.nix "nixcord") ++ [ + config = (import ./common/theme-elements.nix "nixcord") ++ [ ( { cfg }: let diff --git a/modules/discord/vencord.nix b/modules/discord/vencord.nix index 623006f07..f7647412e 100644 --- a/modules/discord/vencord.nix +++ b/modules/discord/vencord.nix @@ -4,7 +4,7 @@ mkTarget { name = "vencord"; humanName = "Vencord"; - extraOptions = { + options = { themeBody = lib.mkOption { type = lib.types.lines; default = ""; @@ -17,7 +17,7 @@ mkTarget { }; }; - configElements = (import ./common/theme-elements.nix "vencord") ++ [ + config = (import ./common/theme-elements.nix "vencord") ++ [ ( { cfg }: lib.mkIf diff --git a/modules/discord/vesktop.nix b/modules/discord/vesktop.nix index afd98c8de..24103a487 100644 --- a/modules/discord/vesktop.nix +++ b/modules/discord/vesktop.nix @@ -4,13 +4,13 @@ mkTarget { name = "vesktop"; humanName = "Vesktop"; - extraOptions.themeBody = lib.mkOption { + options.themeBody = lib.mkOption { type = lib.types.lines; default = ""; internal = true; }; - configElements = (import ./common/theme-elements.nix "vesktop") ++ [ + config = (import ./common/theme-elements.nix "vesktop") ++ [ ( { cfg }: lib.mkIf (cfg.themeBody != (import ./common/theme-header.nix)) { diff --git a/modules/dunst/hm.nix b/modules/dunst/hm.nix index 9614aca28..d83b35fc8 100644 --- a/modules/dunst/hm.nix +++ b/modules/dunst/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "dunst"; - humanName = "Dunst"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/emacs/hm.nix b/modules/emacs/hm.nix index 70a2d776e..6b7827f9f 100644 --- a/modules/emacs/hm.nix +++ b/modules/emacs/hm.nix @@ -1,9 +1,6 @@ { mkTarget, pkgs, ... }: mkTarget { - name = "emacs"; - humanName = "Emacs"; - - configElements = [ + config = [ ( { opacity }: { diff --git a/modules/eog/hm.nix b/modules/eog/hm.nix index 7f1cd9f97..9e88c8881 100644 --- a/modules/eog/hm.nix +++ b/modules/eog/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "eog"; - humanName = "Eye of GNOME Image Viewer"; - - configElements = + config = { colors }: { dconf.settings."org/gnome/eog/view" = { diff --git a/modules/fcitx5/hm.nix b/modules/fcitx5/hm.nix index 7fbffb7d2..ee31f5eb1 100644 --- a/modules/fcitx5/hm.nix +++ b/modules/fcitx5/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "fcitx5"; - humanName = "fcitx5"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/feh/hm.nix b/modules/feh/hm.nix index d0187ebf0..0b1fa7391 100644 --- a/modules/feh/hm.nix +++ b/modules/feh/hm.nix @@ -6,8 +6,6 @@ ... }: mkTarget { - name = "feh"; - humanName = "the desktop background using Feh"; autoEnable = with config.xsession.windowManager; bspwm.enable @@ -24,7 +22,7 @@ mkTarget { || xmonad.enable ''; - configElements = + config = { imageScalingMode, image }: { xsession.initExtra = diff --git a/modules/feh/nixos.nix b/modules/feh/nixos.nix index cc0ee85ef..3debf1a93 100644 --- a/modules/feh/nixos.nix +++ b/modules/feh/nixos.nix @@ -6,8 +6,6 @@ ... }: mkTarget { - name = "feh"; - humanName = "the desktop background using Feh"; autoEnable = with config.services.xserver.windowManager; xmonad.enable || i3.enable; @@ -16,7 +14,7 @@ mkTarget { xmonad.enable || i3.enable ''; - configElements = + config = { image, imageScalingMode }: { services.xserver.displayManager.sessionCommands = diff --git a/modules/firefox/each-config.nix b/modules/firefox/each-config.nix index eaaed89d3..82b730d05 100644 --- a/modules/firefox/each-config.nix +++ b/modules/firefox/each-config.nix @@ -12,9 +12,9 @@ ... }: mkTarget { - inherit name humanName; + inherit humanName name; - extraOptions = { + options = { profileNames = lib.mkOption { description = "The ${humanName} profile names to apply styling on."; type = lib.types.listOf lib.types.str; @@ -26,7 +26,7 @@ mkTarget { firefoxGnomeTheme.enable = lib.mkEnableOption "[Firefox GNOME theme](https://github.com/rafaelmardojai/firefox-gnome-theme) on ${humanName}"; }; - configElements = [ + config = [ ( { cfg }: { diff --git a/modules/fish/hm.nix b/modules/fish/hm.nix index 9763c50be..6acc5e137 100644 --- a/modules/fish/hm.nix +++ b/modules/fish/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "fish"; - humanName = "Fish"; - - configElements = + config = { colors, inputs }: { programs.fish.interactiveShellInit = import ./prompt.nix { diff --git a/modules/fish/nixos.nix b/modules/fish/nixos.nix index 02affea08..8487e2802 100644 --- a/modules/fish/nixos.nix +++ b/modules/fish/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "fish"; - humanName = "Fish"; - - configElements = + config = { colors, inputs }: { programs.fish.promptInit = import ./prompt.nix { inherit colors inputs; }; diff --git a/modules/fnott/hm.nix b/modules/fnott/hm.nix index 984459b43..473b93980 100644 --- a/modules/fnott/hm.nix +++ b/modules/fnott/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "fnott"; - humanName = "Fnott"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/foliate/hm.nix b/modules/foliate/hm.nix index 43ce4f3d1..01a29b9ae 100644 --- a/modules/foliate/hm.nix +++ b/modules/foliate/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "foliate"; - humanName = "Foliate"; - - configElements = + config = { colors }: { programs.foliate = { diff --git a/modules/font-packages/darwin.nix b/modules/font-packages/darwin.nix index eac7fa352..359d862d3 100644 --- a/modules/font-packages/darwin.nix +++ b/modules/font-packages/darwin.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "font-packages"; - humanName = "Font packages"; - - configElements = + config = { fonts }: { fonts = { inherit (fonts) packages; }; diff --git a/modules/font-packages/hm.nix b/modules/font-packages/hm.nix index 3e730bd61..c20977504 100644 --- a/modules/font-packages/hm.nix +++ b/modules/font-packages/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "font-packages"; - humanName = "Font packages"; - - configElements = + config = { fonts }: { home = { inherit (fonts) packages; }; diff --git a/modules/font-packages/nixos.nix b/modules/font-packages/nixos.nix index eac7fa352..359d862d3 100644 --- a/modules/font-packages/nixos.nix +++ b/modules/font-packages/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "font-packages"; - humanName = "Font packages"; - - configElements = + config = { fonts }: { fonts = { inherit (fonts) packages; }; diff --git a/modules/fontconfig/fontconfig.nix b/modules/fontconfig/fontconfig.nix index b2fadd2c8..77eadf1a6 100644 --- a/modules/fontconfig/fontconfig.nix +++ b/modules/fontconfig/fontconfig.nix @@ -1,10 +1,7 @@ { mkTarget }: { lib, ... }: mkTarget { - name = "fontconfig"; - humanName = "Fontconfig"; - - configElements = + config = { listTargetIndex, fonts }: { fonts.fontconfig.defaultFonts = lib.genAttrs [ diff --git a/modules/foot/hm.nix b/modules/foot/hm.nix index b1afc7643..08ed47d18 100644 --- a/modules/foot/hm.nix +++ b/modules/foot/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "foot"; - humanName = "Foot"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/forge/hm.nix b/modules/forge/hm.nix index 04000a725..330d2ae11 100644 --- a/modules/forge/hm.nix +++ b/modules/forge/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "forge"; - humanName = "Forge"; - - configElements = + config = { colors }: { xdg.configFile."forge/stylesheet/forge/stylesheet.css".source = colors { diff --git a/modules/fuzzel/hm.nix b/modules/fuzzel/hm.nix index 29b4836f7..7d7a1db2f 100644 --- a/modules/fuzzel/hm.nix +++ b/modules/fuzzel/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "fuzzel"; - humanName = "Fuzzel"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/fzf/hm.nix b/modules/fzf/hm.nix index 08df42e25..dda229b26 100644 --- a/modules/fzf/hm.nix +++ b/modules/fzf/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "fzf"; - humanName = "Fzf"; - - configElements = + config = { colors }: { programs.fzf.colors = with colors.withHashtag; { diff --git a/modules/gdu/hm.nix b/modules/gdu/hm.nix index 6c2f57a72..c1f2e4b47 100644 --- a/modules/gdu/hm.nix +++ b/modules/gdu/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "gdu"; - humanName = "go DiskUsage()"; - - configElements = + config = { colors }: { xdg.configFile."gdu/gdu.yaml" = { diff --git a/modules/gedit/hm.nix b/modules/gedit/hm.nix index b31c47ec0..82959a304 100644 --- a/modules/gedit/hm.nix +++ b/modules/gedit/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "gedit"; - humanName = "GEdit"; - - configElements = + config = { colors }: { xdg.dataFile = { diff --git a/modules/ghostty/hm.nix b/modules/ghostty/hm.nix index 5ebb8ef64..a3ffec41c 100644 --- a/modules/ghostty/hm.nix +++ b/modules/ghostty/hm.nix @@ -3,10 +3,7 @@ # - `man 5 ghostty` { mkTarget, pkgs, ... }: mkTarget { - name = "ghostty"; - humanName = "Ghostty"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/gitui/hm.nix b/modules/gitui/hm.nix index 7246cd04a..aba878411 100644 --- a/modules/gitui/hm.nix +++ b/modules/gitui/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "gitui"; - humanName = "GitUI"; - - configElements = + config = { colors }: { programs.gitui.theme = with colors.withHashtag; '' diff --git a/modules/glance/hm.nix b/modules/glance/hm.nix index 6448d12b9..da68e487c 100644 --- a/modules/glance/hm.nix +++ b/modules/glance/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "glance"; - humanName = "Glance"; - - configElements = [ + config = [ ( { polarity }: { diff --git a/modules/glance/nixos.nix b/modules/glance/nixos.nix index 6448d12b9..da68e487c 100644 --- a/modules/glance/nixos.nix +++ b/modules/glance/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "glance"; - humanName = "Glance"; - - configElements = [ + config = [ ( { polarity }: { diff --git a/modules/gnome-text-editor/hm.nix b/modules/gnome-text-editor/hm.nix index 8caea6bae..32a007ec4 100644 --- a/modules/gnome-text-editor/hm.nix +++ b/modules/gnome-text-editor/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "gnome-text-editor"; - humanName = "GNOME Text Editor"; - - configElements = { + config = { dconf.settings."org/gnome/TextEditor".style-scheme = "stylix"; }; } diff --git a/modules/gnome-text-editor/nixos.nix b/modules/gnome-text-editor/nixos.nix index 148b3cbdb..22a0afa6b 100644 --- a/modules/gnome-text-editor/nixos.nix +++ b/modules/gnome-text-editor/nixos.nix @@ -1,5 +1 @@ -{ mkTarget, ... }: -mkTarget { - name = "gnome-text-editor"; - humanName = "GNOME Text Editor"; -} +{ mkTarget, ... }: mkTarget { } diff --git a/modules/gnome/hm.nix b/modules/gnome/hm.nix index f94add89b..0e43b209b 100644 --- a/modules/gnome/hm.nix +++ b/modules/gnome/hm.nix @@ -6,15 +6,12 @@ ... }: mkTarget { - name = "gnome"; - humanName = "GNOME"; - autoEnable = pkgs.stdenv.hostPlatform.isLinux; autoEnableExpr = "pkgs.stdenv.hostPlatform.isLinux"; - extraOptions.useWallpaper = config.lib.stylix.mkEnableWallpaper "GNOME" true; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "GNOME" true; - configElements = [ + config = [ ( { cfg, image }: { diff --git a/modules/gtk/hm.nix b/modules/gtk/hm.nix index 1a1d8aec8..e3eb283d9 100644 --- a/modules/gtk/hm.nix +++ b/modules/gtk/hm.nix @@ -7,10 +7,7 @@ ... }: mkTarget { - name = "gtk"; - humanName = "all GTK3, GTK4 and Libadwaita apps"; - - extraOptions = { + options = { extraCss = lib.mkOption { description = '' Extra code added to `gtk-3.0/gtk.css` and `gtk-4.0/gtk.css`. @@ -26,7 +23,7 @@ mkTarget { flatpakSupport.enable = config.lib.stylix.mkEnableTarget "support for theming Flatpak apps" true; }; - configElements = [ + config = [ { warnings = lib.optional (config.gtk.gtk3.extraCss != "" || config.gtk.gtk4.extraCss != "") diff --git a/modules/gtk/nixos.nix b/modules/gtk/nixos.nix index 90ff47125..cb2087169 100644 --- a/modules/gtk/nixos.nix +++ b/modules/gtk/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "gtk"; - humanName = "all GTK3, GTK4 and Libadwaita apps"; - - configElements = { + config = { # Required for Home Manager's GTK settings to work programs.dconf.enable = true; }; diff --git a/modules/gtksourceview/hm.nix b/modules/gtksourceview/hm.nix index 5aa58b624..02bf853b8 100644 --- a/modules/gtksourceview/hm.nix +++ b/modules/gtksourceview/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "gtksourceview"; - humanName = "GTKSourceView"; - - configElements = + config = { colors, ... }: { xdg.dataFile = builtins.listToAttrs ( diff --git a/modules/gtksourceview/nixos.nix b/modules/gtksourceview/nixos.nix index e42e2d1c0..40f8bd18e 100644 --- a/modules/gtksourceview/nixos.nix +++ b/modules/gtksourceview/nixos.nix @@ -1,7 +1,3 @@ { mkTarget, ... }: -mkTarget { - name = "gtksourceview"; - humanName = "GTKSourceView"; - - # Used to enable overlay. -} +# Used to enable overlay. +mkTarget { } diff --git a/modules/halloy/hm.nix b/modules/halloy/hm.nix index b91f02c5a..fae67f7cd 100644 --- a/modules/halloy/hm.nix +++ b/modules/halloy/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "halloy"; - humanName = "Halloy"; - - configElements = + config = { colors }: { programs.halloy = { diff --git a/modules/helix/hm.nix b/modules/helix/hm.nix index 28bbddaf9..d7e375293 100644 --- a/modules/helix/hm.nix +++ b/modules/helix/hm.nix @@ -5,15 +5,12 @@ ... }: mkTarget { - name = "helix"; - humanName = "Helix"; - - extraOptions.transparent = lib.mkEnableOption "transparent theming" // { + options.transparent = lib.mkEnableOption "transparent theming" // { internal = true; default = false; }; - configElements = [ + config = [ ( { opacity }: { diff --git a/modules/hyprland/hm.nix b/modules/hyprland/hm.nix index 119ba7973..1a7e1e00b 100644 --- a/modules/hyprland/hm.nix +++ b/modules/hyprland/hm.nix @@ -5,9 +5,7 @@ ... }: mkTarget { - name = "hyprland"; - humanName = "Hyprland"; - extraOptions = + options = { image }: { hyprpaper.enable = config.lib.stylix.mkEnableTargetWith { @@ -17,7 +15,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { colors }: { diff --git a/modules/hyprlock/hm.nix b/modules/hyprlock/hm.nix index bf2d8ee24..74c54a9c8 100644 --- a/modules/hyprlock/hm.nix +++ b/modules/hyprlock/hm.nix @@ -5,14 +5,9 @@ ... }: mkTarget { - name = "hyprlock"; - humanName = "Hyprlock"; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "Hyprlock" true; - extraOptions = { - useWallpaper = config.lib.stylix.mkEnableWallpaper "Hyprlock" true; - }; - - configElements = [ + config = [ ( { cfg, image }: { diff --git a/modules/hyprpanel/hm.nix b/modules/hyprpanel/hm.nix index 32e38df8c..8b3af4808 100644 --- a/modules/hyprpanel/hm.nix +++ b/modules/hyprpanel/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "hyprpanel"; - humanName = "HyprPanel"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/hyprpaper/hm.nix b/modules/hyprpaper/hm.nix index f088a3ed5..6018b2174 100644 --- a/modules/hyprpaper/hm.nix +++ b/modules/hyprpaper/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "hyprpaper"; - humanName = "Hyprpaper"; - - configElements = + config = { image }: { services.hyprpaper.settings = { diff --git a/modules/i3/hm.nix b/modules/i3/hm.nix index 6fccc1668..192ecf967 100644 --- a/modules/i3/hm.nix +++ b/modules/i3/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "i3"; - humanName = "i3"; - - extraOptions.exportedBarConfig = lib.mkOption { + options.exportedBarConfig = lib.mkOption { type = lib.types.attrs; default = { }; description = '' @@ -29,7 +26,7 @@ mkTarget { } ); - configElements = [ + config = [ ( { fonts }: let diff --git a/modules/i3bar-river/hm.nix b/modules/i3bar-river/hm.nix index cd48c10d7..d72d3f1c1 100644 --- a/modules/i3bar-river/hm.nix +++ b/modules/i3bar-river/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "i3bar-river"; - humanName = "i3bar-river"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/jankyborders/darwin.nix b/modules/jankyborders/darwin.nix index 21a08fccc..10cd94029 100644 --- a/modules/jankyborders/darwin.nix +++ b/modules/jankyborders/darwin.nix @@ -5,10 +5,7 @@ ... }: mkTarget { - name = "jankyborders"; - humanName = "JankyBorders"; - - configElements = + config = { colors, opacity }: { services.jankyborders = diff --git a/modules/k9s/hm.nix b/modules/k9s/hm.nix index e172b99b9..5f31999ae 100644 --- a/modules/k9s/hm.nix +++ b/modules/k9s/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "k9s"; - humanName = "k9s"; - - configElements = + config = { colors }: { programs.k9s = { diff --git a/modules/kitty/hm.nix b/modules/kitty/hm.nix index 573d19853..e73494756 100644 --- a/modules/kitty/hm.nix +++ b/modules/kitty/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "kitty"; - humanName = "Kitty"; - - extraOptions = { + options = { variant256Colors = lib.mkOption { description = '' Whether to use the [256-color variant](https://github.com/kdrag0n/base16-kitty#256-color-variants) @@ -14,7 +11,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/kmscon/nixos.nix b/modules/kmscon/nixos.nix index 83c6f6b20..03b52795a 100644 --- a/modules/kmscon/nixos.nix +++ b/modules/kmscon/nixos.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "kmscon"; - humanName = "the kmscon virtual console"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/kubecolor/hm.nix b/modules/kubecolor/hm.nix index 0670526cb..f0fe9bc83 100644 --- a/modules/kubecolor/hm.nix +++ b/modules/kubecolor/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "kubecolor"; - humanName = "kubecolor"; - - configElements = [ + config = [ ( { polarity }: { diff --git a/modules/lazygit/hm.nix b/modules/lazygit/hm.nix index d13c46011..570178f38 100644 --- a/modules/lazygit/hm.nix +++ b/modules/lazygit/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "lazygit"; - humanName = "lazygit"; - - configElements = + config = { colors }: { programs.lazygit.settings.gui.theme = with colors.withHashtag; { diff --git a/modules/lightdm/nixos.nix b/modules/lightdm/nixos.nix index 405cfbac7..fe512f0f3 100644 --- a/modules/lightdm/nixos.nix +++ b/modules/lightdm/nixos.nix @@ -5,14 +5,9 @@ ... }: mkTarget { - name = "lightdm"; - humanName = "LightDM"; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "LightDM" true; - extraOptions = { - useWallpaper = config.lib.stylix.mkEnableWallpaper "LightDM" true; - }; - - configElements = + config = { cfg, image }: { services.xserver.displayManager.lightdm.background = diff --git a/modules/limine/nixos.nix b/modules/limine/nixos.nix index 6a7294de5..0283c07ad 100644 --- a/modules/limine/nixos.nix +++ b/modules/limine/nixos.nix @@ -5,12 +5,9 @@ ... }: mkTarget { - name = "limine"; - humanName = "Limine"; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "Limine" true; - extraOptions.useWallpaper = config.lib.stylix.mkEnableWallpaper "Limine" true; - - configElements = [ + config = [ ( { colors }: { diff --git a/modules/mako/hm.nix b/modules/mako/hm.nix index 3314f0e55..e93621f1e 100644 --- a/modules/mako/hm.nix +++ b/modules/mako/hm.nix @@ -1,10 +1,7 @@ { mkTarget, lib, ... }: mkTarget { - name = "mako"; - humanName = "Mako"; - # Referenced https://github.com/stacyharper/base16-mako - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/mangohud/hm.nix b/modules/mangohud/hm.nix index cad9acc33..fdb6ba453 100644 --- a/modules/mangohud/hm.nix +++ b/modules/mangohud/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "mangohud"; - humanName = "mangohud"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/micro/hm.nix b/modules/micro/hm.nix index 36f26d112..a234583c5 100644 --- a/modules/micro/hm.nix +++ b/modules/micro/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "micro"; - humanName = "micro"; - - configElements = { + config = { # TODO: Provide a real colorscheme once [1] is resolved. # # [1]: https://github.com/nix-community/stylix/issues/249 diff --git a/modules/mpv/hm.nix b/modules/mpv/hm.nix index 7cc675822..9c66f3756 100644 --- a/modules/mpv/hm.nix +++ b/modules/mpv/hm.nix @@ -1,8 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "mpv"; - humanName = "mpv"; - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/ncspot/hm.nix b/modules/ncspot/hm.nix index e51924741..41e8d1eb8 100644 --- a/modules/ncspot/hm.nix +++ b/modules/ncspot/hm.nix @@ -1,16 +1,13 @@ { mkTarget, lib, ... }: mkTarget { - name = "ncspot"; - humanName = "Ncspot"; - - extraOptions.background = lib.mkOption { + options.background = lib.mkOption { type = lib.types.nullOr lib.types.str; description = "Used to set bg even if `opacity` or `colors` is null."; internal = true; default = null; }; - configElements = [ + config = [ ( { cfg }: lib.mkIf (cfg.background != null) { diff --git a/modules/neovim/neovide.nix b/modules/neovim/neovide.nix index 519949b78..5dc679242 100644 --- a/modules/neovim/neovide.nix +++ b/modules/neovim/neovide.nix @@ -3,7 +3,7 @@ mkTarget: mkTarget { name = "neovide"; humanName = "Neovide"; - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/neovim/neovim.nix b/modules/neovim/neovim.nix index 62161ebd1..fef4c98e8 100644 --- a/modules/neovim/neovim.nix +++ b/modules/neovim/neovim.nix @@ -3,7 +3,7 @@ mkTarget: mkTarget { name = "neovim"; humanName = "Neovim"; - extraOptions = { + options = { plugin = lib.mkOption { type = lib.types.enum [ "base16-nvim" @@ -25,7 +25,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { colors, cfg }: { diff --git a/modules/neovim/nixvim.nix b/modules/neovim/nixvim.nix index 2dc091c2c..b9a7e49b4 100644 --- a/modules/neovim/nixvim.nix +++ b/modules/neovim/nixvim.nix @@ -3,7 +3,7 @@ mkTarget: mkTarget { name = "nixvim"; humanName = "NixVim"; - extraOptions = { + options = { plugin = lib.mkOption { type = lib.types.enum [ "base16-nvim" @@ -37,7 +37,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { colors }: { diff --git a/modules/neovim/nvf.nix b/modules/neovim/nvf.nix index 88ed74ff4..8aa22438d 100644 --- a/modules/neovim/nvf.nix +++ b/modules/neovim/nvf.nix @@ -3,7 +3,7 @@ mkTarget: mkTarget { name = "nvf"; humanName = "nvf"; - extraOptions = { + options = { plugin = lib.mkOption { type = lib.types.enum [ "base16" @@ -15,7 +15,7 @@ mkTarget { transparentBackground = lib.mkEnableOption "background transparency for the main Neovim window"; }; - configElements = lib.optionals (options.programs ? nvf) [ + config = lib.optionals (options.programs ? nvf) [ ( { colors, cfg }: { diff --git a/modules/neovim/vim.nix b/modules/neovim/vim.nix index 20bc48b31..84effd99d 100644 --- a/modules/neovim/vim.nix +++ b/modules/neovim/vim.nix @@ -4,7 +4,7 @@ mkTarget { name = "vim"; humanName = "Vim"; - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/nushell/hm.nix b/modules/nushell/hm.nix index 05d6f0a6c..12b4b1fa1 100644 --- a/modules/nushell/hm.nix +++ b/modules/nushell/hm.nix @@ -1,10 +1,7 @@ { mkTarget, ... }: mkTarget { - name = "nushell"; - humanName = "Nushell"; - # Adapted from https://www.nushell.sh/book/coloring_and_theming.html#theming - configElements = + config = { colors }: { programs.nushell.extraConfig = with colors.withHashtag; '' diff --git a/modules/obsidian/hm.nix b/modules/obsidian/hm.nix index ecaa66e57..9ed3ab155 100644 --- a/modules/obsidian/hm.nix +++ b/modules/obsidian/hm.nix @@ -1,15 +1,12 @@ { mkTarget, lib, ... }: mkTarget { - name = "obsidian"; - humanName = "Obsidian"; - - extraOptions.vaultNames = lib.mkOption { + options.vaultNames = lib.mkOption { description = "The obsidian vault names to apply styling on."; type = lib.types.listOf lib.types.str; default = [ ]; }; - configElements = [ + config = [ ( { cfg, fonts }: { diff --git a/modules/opencode/hm.nix b/modules/opencode/hm.nix index bb6034581..ce83cfe20 100644 --- a/modules/opencode/hm.nix +++ b/modules/opencode/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "opencode"; - humanName = "OpenCode"; - - configElements = + config = { colors }: { programs.opencode = diff --git a/modules/plymouth/nixos.nix b/modules/plymouth/nixos.nix index acb1c48de..6dc3deb41 100644 --- a/modules/plymouth/nixos.nix +++ b/modules/plymouth/nixos.nix @@ -5,10 +5,7 @@ ... }: mkTarget { - name = "plymouth"; - humanName = "the Plymouth boot screen"; - - extraOptions = { + options = { logo = lib.mkOption { description = "Logo to be used on the boot screen."; type = with lib.types; either path package; @@ -35,7 +32,7 @@ mkTarget { ) ]; - configElements = + config = { cfg, colors }: let themeScript = import ./theme-script.nix { inherit lib cfg colors; }; diff --git a/modules/qutebrowser/hm.nix b/modules/qutebrowser/hm.nix index 1f2e0158f..2a3aae272 100644 --- a/modules/qutebrowser/hm.nix +++ b/modules/qutebrowser/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "qutebrowser"; - humanName = "Qutebrowser"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/regreet/nixos.nix b/modules/regreet/nixos.nix index ce77a5ebd..234294b43 100644 --- a/modules/regreet/nixos.nix +++ b/modules/regreet/nixos.nix @@ -6,13 +6,10 @@ ... }: mkTarget { - name = "regreet"; - humanName = "ReGreet"; - autoEnable = pkgs.stdenv.hostPlatform.isLinux; autoEnableExpr = "pkgs.stdenv.hostPlatform.isLinux"; - extraOptions = { + options = { useWallpaper = config.lib.stylix.mkEnableWallpaper "ReGreet" true; extraCss = lib.mkOption { description = '' @@ -24,7 +21,7 @@ mkTarget { }; }; - configElements = [ + config = [ { warnings = let diff --git a/modules/rio/hm.nix b/modules/rio/hm.nix index ac6bdb5e2..073cf4e14 100644 --- a/modules/rio/hm.nix +++ b/modules/rio/hm.nix @@ -2,10 +2,7 @@ # - https://raphamorim.io/rio/docs/config { mkTarget, ... }: mkTarget { - name = "rio"; - humanName = "Rio"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/rofi/hm.nix b/modules/rofi/hm.nix index a0b03942b..7ccd1fdc3 100644 --- a/modules/rofi/hm.nix +++ b/modules/rofi/hm.nix @@ -1,9 +1,6 @@ { mkTarget, config, ... }: mkTarget { - name = "rofi"; - humanName = "Rofi"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/spicetify/spicetify.nix b/modules/spicetify/spicetify.nix index 045230c69..6c22479d0 100644 --- a/modules/spicetify/spicetify.nix +++ b/modules/spicetify/spicetify.nix @@ -6,10 +6,7 @@ ... }: mkTarget { - name = "spicetify"; - humanName = "Spicetify"; - - configElements = + config = { colors }: lib.optionalAttrs (options.programs ? spicetify) { programs.spicetify = { diff --git a/modules/spotify-player/hm.nix b/modules/spotify-player/hm.nix index 6df7c5d8a..5d09be628 100644 --- a/modules/spotify-player/hm.nix +++ b/modules/spotify-player/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "spotify-player"; - humanName = "spotify-player"; - - configElements = + config = { colors }: { programs.spotify-player = { diff --git a/modules/starship/hm.nix b/modules/starship/hm.nix index bdcc4a1f9..ae8329277 100644 --- a/modules/starship/hm.nix +++ b/modules/starship/hm.nix @@ -1,10 +1,7 @@ # Starship configuration documentation: https://starship.rs/config { mkTarget, ... }: mkTarget { - name = "starship"; - humanName = "Starship"; - - configElements = + config = { colors }: { programs.starship.settings = { diff --git a/modules/swaylock/hm.nix b/modules/swaylock/hm.nix index 910ef72f7..ee0e35700 100644 --- a/modules/swaylock/hm.nix +++ b/modules/swaylock/hm.nix @@ -6,9 +6,6 @@ ... }: mkTarget { - name = "swaylock"; - humanName = "Swaylock"; - # When the state version is older than 23.05, Swaylock enables itself # automatically if `settings != {}` [1]. Therefore, Swaylock theming # shouldn't be enabled by default for such state versions, to avoid @@ -26,9 +23,9 @@ mkTarget { lib.versionAtLeast config.home.stateVersion "23.05" && pkgs.stdenv.hostPlatform.isLinux ''; - extraOptions.useWallpaper = config.lib.stylix.mkEnableWallpaper "Swaylock" true; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "Swaylock" true; - configElements = [ + config = [ ( { colors }: { diff --git a/modules/swaync/hm.nix b/modules/swaync/hm.nix index 271a437d6..9a4395a6e 100644 --- a/modules/swaync/hm.nix +++ b/modules/swaync/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "swaync"; - humanName = "SwayNC"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/sxiv/hm.nix b/modules/sxiv/hm.nix index 6fce9addc..d40dc9d9b 100644 --- a/modules/sxiv/hm.nix +++ b/modules/sxiv/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "sxiv"; - humanName = "Sxiv"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/tmux/hm.nix b/modules/tmux/hm.nix index 44310c104..8aae55005 100644 --- a/modules/tmux/hm.nix +++ b/modules/tmux/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "tmux"; - humanName = "Tmux"; - - configElements = + config = { colors, inputs }: { programs.tmux.extraConfig = '' diff --git a/modules/tofi/hm.nix b/modules/tofi/hm.nix index 5e68f946d..7fc5b1b5e 100644 --- a/modules/tofi/hm.nix +++ b/modules/tofi/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "tofi"; - humanName = "Tofi"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/vicinae/hm.nix b/modules/vicinae/hm.nix index fc17baa3a..baaa0ac03 100644 --- a/modules/vicinae/hm.nix +++ b/modules/vicinae/hm.nix @@ -5,10 +5,7 @@ ... }: mkTarget { - name = "vicinae"; - humanName = "Vicinae"; - - configElements = lib.optionals (options.services ? vicinae) [ + config = lib.optionals (options.services ? vicinae) [ ( { colors, polarity }: { diff --git a/modules/vivid/hm.nix b/modules/vivid/hm.nix index a76f522fc..c91729579 100644 --- a/modules/vivid/hm.nix +++ b/modules/vivid/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "vivid"; - humanName = "vivid"; - - configElements = + config = { colors }: let theme = "stylix"; diff --git a/modules/vscode/hm.nix b/modules/vscode/hm.nix index 42b3fcc92..04a4a9558 100644 --- a/modules/vscode/hm.nix +++ b/modules/vscode/hm.nix @@ -6,16 +6,13 @@ ... }: mkTarget { - name = "vscode"; - humanName = "VSCode"; - - extraOptions.profileNames = lib.mkOption { + options.profileNames = lib.mkOption { description = "The VSCode profile names to apply styling on."; type = lib.types.listOf lib.types.str; default = [ "default" ]; }; - configElements = [ + config = [ ( { cfg }: { diff --git a/modules/waybar/hm.nix b/modules/waybar/hm.nix index 9c5c166af..4ad22dfa8 100644 --- a/modules/waybar/hm.nix +++ b/modules/waybar/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "waybar"; - humanName = "Waybar"; - - extraOptions = { + options = { background = lib.mkOption { type = lib.types.nullOr lib.types.str; description = "Used to set bg even if `opacity` or `colors` is null"; @@ -43,7 +40,7 @@ mkTarget { }; }; - configElements = [ + config = [ ( { cfg }: { diff --git a/modules/wayfire/hm.nix b/modules/wayfire/hm.nix index 437cc6bbc..d090e89d9 100644 --- a/modules/wayfire/hm.nix +++ b/modules/wayfire/hm.nix @@ -6,12 +6,9 @@ ... }: mkTarget { - name = "wayfire"; - humanName = "Wayfire"; + options.useWallpaper = config.lib.stylix.mkEnableWallpaper "wayfire" true; - extraOptions.useWallpaper = config.lib.stylix.mkEnableWallpaper "wayfire" true; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/wayprompt/hm.nix b/modules/wayprompt/hm.nix index 8f5486a5e..6f88c9cf2 100644 --- a/modules/wayprompt/hm.nix +++ b/modules/wayprompt/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "wayprompt"; - humanName = "Wayprompt"; - - configElements = + config = { colors, opacity }: let opacity' = lib.toHexString (builtins.ceil (opacity.popups * 255)); diff --git a/modules/wezterm/hm.nix b/modules/wezterm/hm.nix index cd26a74eb..12d14f846 100644 --- a/modules/wezterm/hm.nix +++ b/modules/wezterm/hm.nix @@ -5,14 +5,12 @@ ... }: mkTarget { - name = "wezterm"; - humanName = "WezTerm"; - extraOptions.luaBody = lib.mkOption { + options.luaBody = lib.mkOption { type = lib.types.lines; default = ""; internal = true; }; - configElements = [ + config = [ ( { colors }: with colors; diff --git a/modules/wob/hm.nix b/modules/wob/hm.nix index 6e2b7cef1..383affaf2 100644 --- a/modules/wob/hm.nix +++ b/modules/wob/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "wob"; - humanName = "wob"; - - configElements = + config = { colors }: { services.wob.settings = { diff --git a/modules/wofi/hm.nix b/modules/wofi/hm.nix index 7a4684e3d..5bb41e1dc 100644 --- a/modules/wofi/hm.nix +++ b/modules/wofi/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "wofi"; - humanName = "wofi"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/wpaperd/hm.nix b/modules/wpaperd/hm.nix index 2ee840e4a..35cd1e212 100644 --- a/modules/wpaperd/hm.nix +++ b/modules/wpaperd/hm.nix @@ -1,9 +1,6 @@ { mkTarget, lib, ... }: mkTarget { - name = "wpaperd"; - humanName = "wpaperd"; - - configElements = + config = { imageScalingMode, image }: ( let diff --git a/modules/xfce/hm.nix b/modules/xfce/hm.nix index 0eeae1b79..015736943 100644 --- a/modules/xfce/hm.nix +++ b/modules/xfce/hm.nix @@ -1,11 +1,9 @@ { mkTarget, ... }: mkTarget { - name = "xfce"; - humanName = "Xfce"; # Disabled by default due to https://github.com/nix-community/stylix/issues/180 autoEnable = false; - configElements = + config = { fonts }: { xfconf.settings = with fonts; { diff --git a/modules/xresources/hm.nix b/modules/xresources/hm.nix index 3a9fafb85..a9a5929be 100644 --- a/modules/xresources/hm.nix +++ b/modules/xresources/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "xresources"; - humanName = "Xresources"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/yazi/hm.nix b/modules/yazi/hm.nix index bf01e02ee..b00eb4fb4 100644 --- a/modules/yazi/hm.nix +++ b/modules/yazi/hm.nix @@ -1,18 +1,13 @@ # Based on the official catppuccin themes https://github.com/yazi-rs/themes { mkTarget, lib, ... }: mkTarget { - name = "yazi"; - humanName = "Yazi"; - - extraOptions = { - boldDirectory = lib.mkOption { - description = "Whether to use bold font for directories."; - type = lib.types.bool; - default = true; - }; + options.boldDirectory = lib.mkOption { + description = "Whether to use bold font for directories."; + type = lib.types.bool; + default = true; }; - configElements = + config = { cfg, colors }: { programs.yazi.theme = diff --git a/modules/zathura/hm.nix b/modules/zathura/hm.nix index cfaec37e0..0feb61d73 100644 --- a/modules/zathura/hm.nix +++ b/modules/zathura/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "zathura"; - humanName = "Zathura"; - - configElements = + config = { colors, opacity }: { programs.zathura.options = diff --git a/modules/zed/hm.nix b/modules/zed/hm.nix index 29155344c..b7300c1a9 100644 --- a/modules/zed/hm.nix +++ b/modules/zed/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "zed"; - humanName = "zed"; - - configElements = [ + config = [ ( { fonts }: { diff --git a/modules/zellij/hm.nix b/modules/zellij/hm.nix index 2580aa6aa..2142b68db 100644 --- a/modules/zellij/hm.nix +++ b/modules/zellij/hm.nix @@ -1,9 +1,6 @@ { mkTarget, ... }: mkTarget { - name = "zellij"; - humanName = "zellij"; - - configElements = + config = { colors }: { programs.zellij.themes.stylix = { diff --git a/modules/zen-browser/hm.nix b/modules/zen-browser/hm.nix index 04495db15..cf2d1d76b 100644 --- a/modules/zen-browser/hm.nix +++ b/modules/zen-browser/hm.nix @@ -6,10 +6,7 @@ ... }: mkTarget { - name = "zen-browser"; - humanName = "Zen Browser"; - - extraOptions = { + options = { profileNames = lib.mkOption { description = "The Zen Browser profile names to apply styling on."; type = lib.types.listOf lib.types.str; @@ -25,7 +22,7 @@ mkTarget { }; }; - configElements = lib.optionals (options.programs ? zen-browser) [ + config = lib.optionals (options.programs ? zen-browser) [ ( { cfg }: { diff --git a/stylix/autoload.nix b/stylix/autoload.nix index 86babf573..3eeaf2f46 100644 --- a/stylix/autoload.nix +++ b/stylix/autoload.nix @@ -1,7 +1,10 @@ -{ lib }: +{ lib, pkgs }: # string -> [ path ] # List include path for either nixos modules or hm modules platform: +let + meta = import ./meta.nix { inherit lib pkgs; }; +in builtins.concatLists ( lib.mapAttrsToList ( target: kind: @@ -15,7 +18,10 @@ builtins.concatLists ( # NOTE: `mkTarget` cannot be distributed normally through the module system # due to issues of infinite recursion. - mkTarget = import ./mk-target.nix; + mkTarget = import ./mk-target.nix { + humanName = meta.${target}.name; + name = target; + }; in lib.optional (kind == "directory" && builtins.pathExists file) ( if useMkTarget then diff --git a/stylix/darwin/default.nix b/stylix/darwin/default.nix index bafe2bda6..7e61dd006 100644 --- a/stylix/darwin/default.nix +++ b/stylix/darwin/default.nix @@ -1,6 +1,11 @@ -{ lib, config, ... }: +{ + lib, + pkgs, + config, + ... +}: let - autoload = import ../autoload.nix { inherit lib; } "darwin"; + autoload = import ../autoload.nix { inherit lib pkgs; } "darwin"; in { imports = [ diff --git a/stylix/droid/default.nix b/stylix/droid/default.nix index e23d7cfec..0394fc148 100644 --- a/stylix/droid/default.nix +++ b/stylix/droid/default.nix @@ -1,6 +1,6 @@ -{ lib, ... }: +{ lib, pkgs, ... }: let - autoload = import ../autoload.nix { inherit lib; } "droid"; + autoload = import ../autoload.nix { inherit lib pkgs; } "droid"; in { imports = [ diff --git a/stylix/hm/default.nix b/stylix/hm/default.nix index 8c5330477..7aacf5a15 100644 --- a/stylix/hm/default.nix +++ b/stylix/hm/default.nix @@ -1,6 +1,11 @@ -{ lib, config, ... }: +{ + lib, + pkgs, + config, + ... +}: let - autoload = import ../autoload.nix { inherit lib; } "hm"; + autoload = import ../autoload.nix { inherit lib pkgs; } "hm"; in { imports = [ diff --git a/stylix/mk-target.nix b/stylix/mk-target.nix index 49f95ca4e..bf1e02e38 100644 --- a/stylix/mk-target.nix +++ b/stylix/mk-target.nix @@ -19,15 +19,12 @@ ```nix { mkTarget, lib... }: mkTarget { - name = "«name»"; - humanName = "«human readable name»"; - - generalConfig = + unconditionalConfig = lib.mkIf complexCondition { home.packages = [ pkgs.hello ]; }; - configElements = [ + config = [ { programs.«name».theme.name = "stylix"; } ( @@ -51,15 +48,7 @@ `config` (Attribute set) - : `name` (String) - : The target name used to generate options in the `stylix.targets.${name}` - namespace. - - `humanName` (String) - : The descriptive target name passed to the lib.mkEnableOption function - when generating the `stylix.targets.${name}.enable` option. - - `autoEnable` (Boolean) + : `autoEnable` (Boolean) : Whether the target should be automatically enabled by default according to the `stylix.autoEnable` option. @@ -82,22 +71,7 @@ The default (`true`) is inherited from `mkEnableTargetWith`. - `enableExample` (Boolean or literal expression) - : An example to include on the enable option. The default is calculated - automatically by `mkEnableTargetWith` and depends on `autoEnable` and - whether an `autoEnableExpr` is used. - - `extraOptions` (Attribute set) - : Additional options to be added in the `stylix.targets.${name}` namespace - along the `stylix.targets.${name}.enable` option. - - For example, an extension guard used in the configuration can be declared - as follows: - ```nix - { extension.enable = lib.mkEnableOption "the bloated dependency"; } - ``` - - `configElements` (List or attribute set or function or path) + `config` (List or attribute set or function or path) : Configuration functions that are automatically safeguarded when any of their arguments is disabled. The provided `cfg` argument conveniently aliases to `config.stylix.targets.${name}`. @@ -125,10 +99,36 @@ ) ``` - `generalConfig` (Attribute set or function or path) - : This argument mirrors the `configElements` argument but intentionally - lacks automatic safeguarding and should only be used for complex - configurations where `configElements` is unsuitable. + `enableExample` (Boolean or literal expression) + : An example to include on the enable option. The default is calculated + automatically by `mkEnableTargetWith` and depends on `autoEnable` and + whether an `autoEnableExpr` is used. + + `humanName` (String) + : The descriptive target name passed to the lib.mkEnableOption function + when generating the `stylix.targets.${name}.enable` option. + +   `imports` (List) +   : The `imports` option forwarded to the Nixpkgs module system. + + `options` (List or attribute set or function or path) + : Additional options to be added in the `stylix.targets.${name}` namespace, + normalized identically to `config`. + + For example, an extension guard used in the configuration can be declared + as follows: + ```nix + { extension.enable = lib.mkEnableOption "the bloated dependency"; } + ``` + + `name` (String) + : The target name used to generate options in the `stylix.targets.${name}` + namespace. + + `unconditionalConfig` (Attribute set or function or path) + : This argument mirrors the `config` argument but intentionally lacks + automatic safeguarding and should only be used for complex configurations + where `config` is unsuitable. # Environment @@ -143,16 +143,13 @@ # of modules: # # { -# name = "example"; -# humanName = "Example Target"; -# -# generalConfig = +# unconditionalConfig = # { lib, pkgs }: # lib.mkIf complexCondition { # home.packages = [ pkgs.hello ]; # }; # -# configElements = [ +# config = [ # { programs.example.theme.name = "stylix"; } # # ( @@ -170,73 +167,164 @@ # ) # ]; # } +{ humanName, name }: +let + humanName' = humanName; + name' = name; +in { - name, - humanName, autoEnable ? null, autoEnableExpr ? null, autoWrapEnableExpr ? null, + config ? [ ], enableExample ? null, - extraOptions ? { }, - configElements ? [ ], - generalConfig ? null, + humanName ? humanName', imports ? [ ], + name ? name', + options ? [ ], + unconditionalConfig ? { }, }@args: let + mkTargetConfig = config; + module = { config, lib, ... }: let + callModule = + let + areArgumentsEnabled = lib.flip lib.pipe [ + lib.attrsToList + (builtins.all ( + { name, value }: value.enable or (value != null) && cfg.${name}.enable or true + )) + ]; + in + safeguard: config': + let + arguments = getArguments config'; + in + if builtins.isFunction config' then + if safeguard then + lib.mkIf (areArgumentsEnabled arguments) (config' arguments) + else + config' arguments + + else if builtins.isAttrs config' then + config' + + else if builtins.isPath config' then + throw "stylix: unexpected unresolved path: ${toString config'}" + + else + throw "stylix: mkTarget expected a configuration to be a function, an attribute set, or a path, but got ${builtins.typeOf config'}: ${ + lib.generators.toPretty { } config' + }"; + cfg = config.stylix.targets.${name}; - # Get the list of function de-structured argument names. - functionArgNames = - fn: - lib.pipe fn [ - lib.functionArgs - builtins.attrNames - ]; - - getStylixAttrs = - fn: - lib.genAttrs (functionArgNames fn) ( - arg: - if arg == "cfg" then - cfg - else if arg == "colors" then - config.lib.stylix.colors - else - config.stylix.${arg} - or (throw "stylix: mkTarget expected one of `cfg`, `colors`, ${ - lib.concatMapStringsSep ", " (name: "`${name}`") ( - builtins.attrNames config.stylix + getArguments = + function: + lib.genAttrs + (lib.pipe function [ + lib.functionArgs + builtins.attrNames + ]) + ( + argument: + if argument == "cfg" then + cfg + + else + ( + config': + let + inherit (cfg.${argument}) override; + in + if override == null then + config' + else if builtins.typeOf override != builtins.typeOf config' then + throw "stylix: expected `config.stylix.targets.${name}.${argument}.override` to be a ${builtins.typeOf config'}, but got: ${builtins.typeOf override}" + else if builtins.isAttrs override then + lib.recursiveUpdate config' override + else + override + ) + ( + if argument == "colors" then + config.lib.stylix.colors + + else + config.stylix.${argument} or (throw "stylix: mkTarget expected one of ${ + lib.concatMapStringsSep ", " (expected: "`${expected}`") ( + lib.naturalSort ( + [ + "cfg" + "colors" + ] + ++ builtins.attrNames config.stylix + ) + ) + }, but got: ${argument}") ) - }, but got: ${arg}") - ); - - # Call the configuration function with its required Stylix arguments. - mkConfig = fn: fn (getStylixAttrs fn); - - # Safeguard configuration functions when any of their arguments is - # disabled. - mkConditionalConfig = - c: - if builtins.isFunction c then - let - allAttrsEnabled = lib.pipe c [ - getStylixAttrs - builtins.attrValues - # If the attr has no enable option, it is instead disabled when null - (builtins.all (attr: attr.enable or (attr != null))) - ]; - in - lib.mkIf allAttrsEnabled (mkConfig c) - else - c; + ); + + normalizeConfig = + config: + map (lib.fix ( + self: config': + if builtins.isPath config' then self (import config') else config' + )) (lib.toList config); + + normalizedConfig = normalizeConfig mkTargetConfig; + normalizedOptions = normalizeConfig options; in { - imports = imports ++ [ - { options.stylix.targets.${name} = mkConfig (lib.toFunction extraOptions); } - ]; + imports = + lib.singleton { + options.stylix.targets.${name} = + lib.genAttrs + (lib.concatLists ( + map (lib.flip lib.pipe [ + ( + config': lib.optionalAttrs (builtins.isFunction config') (getArguments config') + ) + builtins.attrNames + (lib.remove "cfg") + ]) (normalizedConfig ++ normalizedOptions) + )) + ( + argument: + let + config = "`${ + if argument == "colors" then + "config.lib.stylix.colors" + else + "config.stylix.${argument}" + }`"; + in + { + enable = lib.mkEnableOption "${config} for ${humanName}" // { + default = true; + example = false; + }; + + override = lib.mkOption { + default = null; + + description = '' + Attribute sets are recursively merged with ${config}, + while all other non-`null` types override ${config}. + ''; + + type = lib.types.anything; + }; + } + ); + } + ++ imports + ++ map (option: { + options.stylix.targets.${name} = callModule false option; + }) normalizedOptions; options.stylix.targets.${name}.enable = let @@ -254,14 +342,8 @@ let config = lib.mkIf (config.stylix.enable && cfg.enable) ( lib.mkMerge ( - lib.optional (generalConfig != null) ( - mkConfig ( - if builtins.isPath generalConfig then import generalConfig else generalConfig - ) - ) - ++ map (c: mkConditionalConfig (if builtins.isPath c then import c else c)) ( - lib.toList configElements - ) + lib.singleton (callModule false unconditionalConfig) + ++ map (callModule true) normalizedConfig ) ); }; diff --git a/stylix/nixos/default.nix b/stylix/nixos/default.nix index 431383f8c..beced1398 100644 --- a/stylix/nixos/default.nix +++ b/stylix/nixos/default.nix @@ -1,6 +1,11 @@ -{ lib, config, ... }: +{ + lib, + pkgs, + config, + ... +}: let - autoload = import ../autoload.nix { inherit lib; } "nixos"; + autoload = import ../autoload.nix { inherit lib pkgs; } "nixos"; in { imports = [ diff --git a/stylix/overlays.nix b/stylix/overlays.nix index 0d8f76e3d..a6fdc6ea5 100644 --- a/stylix/overlays.nix +++ b/stylix/overlays.nix @@ -32,5 +32,5 @@ attrs.overlay ]; } - ) (import ./autoload.nix { inherit lib; } "overlay"); + ) (import ./autoload.nix { inherit lib pkgs; } "overlay"); }