{ config, inputs, lib, pkgs, ... }: let inherit (lib) mkEnableOption mkOption mkIf; inherit (lib) optionalAttrs; inherit (lib.types) bool str; inherit (config.system) stateVersion; cfg = config.module.stylix; iosevkaPackage = if stateVersion == "24.11" then pkgs.nerdfonts.override {fonts = ["Iosevka"];} else pkgs.nerd-fonts.iosevka; iosevkaTermPackage = if stateVersion == "24.11" then pkgs.nerdfonts.override {fonts = ["Iosevka Term"];} else pkgs.nerd-fonts.iosevka-term; mesloLgPackage = if stateVersion == "24.11" then pkgs.nerdfonts.override {fonts = ["MesloLG"];} else pkgs.nerd-fonts.meslo-lg; jetBrainsMonoPackage = if stateVersion == "24.11" then pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];} else pkgs.nerd-fonts.jetbrains-mono; themes = { nord = { polarity = "dark"; scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml"; wallpaper = builtins.fetchurl { url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; }; serif = { package = iosevkaPackage; name = "Iosevka Nerd Font Propo"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.nordzy-cursor-theme; name = "Nordzy-cursors"; size = 32; }; }; nord-light = { polarity = "light"; scheme = "${pkgs.base16-schemes}/share/themes/nord-light.yaml"; wallpaper = builtins.fetchurl { url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; }; serif = { package = iosevkaPackage; name = "Iosevka Nerd Font Propo"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.nordzy-cursor-theme; name = "Nordzy-cursors-white"; size = 32; }; }; helios = { polarity = "dark"; scheme = "${pkgs.base16-schemes}/share/themes/helios.yaml"; wallpaper = builtins.fetchurl { url = "https://w.wallhaven.cc/full/we/wallhaven-wejkzx.jpg"; name = "wallhaven-wejkzx.jpg"; sha256 = "sha256:145q483q1yvs4pndh2r57gfvbd9jc15sry9qz31avqxyrn8ama52"; }; serif = { package = iosevkaPackage; name = "Iosevka Nerd Font Propo"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 24; }; }; }; in { imports = with inputs; [ stylix.nixosModules.stylix ]; options = { module.stylix = { enable = mkEnableOption "enable stylix"; useCursor = mkOption { type = bool; default = true; description = "enable cursor settings"; }; theme = mkOption { type = str; default = "nord"; }; }; }; config = mkIf cfg.enable { stylix = { enable = true; image = themes.${cfg.theme}.wallpaper; autoEnable = true; polarity = themes.${cfg.theme}.polarity; base16Scheme = themes.${cfg.theme}.scheme; opacity = { applications = 1.0; terminal = 1.0; popups = 1.0; desktop = 1.0; }; fonts = { sizes = { applications = 13; terminal = 13; popups = 14; desktop = 13; }; serif = { inherit (themes.${cfg.theme}.serif) package name; }; sansSerif = config.stylix.fonts.serif; monospace = { inherit (themes.${cfg.theme}.monospace) package name; }; emoji = config.stylix.fonts.serif; }; } // optionalAttrs cfg.useCursor { cursor = { inherit (themes.${cfg.theme}.cursor) package name size; }; }; }; }