{ 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; interPackage = pkgs.inter-nerdfont; 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; geistMonoPackage = if stateVersion == "24.11" then pkgs.nerdfonts.override {fonts = ["GeistMono"];} else pkgs.nerd-fonts.geist-mono; wallpapers = { fern-outline = builtins.fetchurl { url = "https://w.wallhaven.cc/full/p9/wallhaven-p9m7ve.png"; name = "wallhaven-p9m7ve.png"; sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7"; }; mountains-pink = builtins.fetchurl { url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg"; name = "wallhaven-yq7gox.jpg"; sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj"; }; mountains-black = builtins.fetchurl { url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg"; name = "wallhaven-9djzww.jpg"; sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm"; }; cyber-dawn = builtins.fetchurl { url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png"; name = "wallhaven-ymo2y7.png"; sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3"; }; nixos-rainbow = builtins.fetchurl { url = "https://w.wallhaven.cc/full/p9/wallhaven-p9pd23.png"; name = "wallhaven-p9pd23.png"; sha256 = "7CMuETntiVUCKhUIdJzX+sf3F47GvuX2a61o4xbEzww="; }; mountains-sepia = builtins.fetchurl { url = "https://w.wallhaven.cc/full/k8/wallhaven-k89k81.jpg"; name = "wallhaven-k89k81.jpg"; sha256 = "C0lvJ0ff0mCC3i9mmeHZsj/n6Ehkp3jaslVr7VDUB3k="; }; jcurry-cloud = builtins.fetchurl { url = "https://w.wallhaven.cc/full/7j/wallhaven-7j6wpy.jpg"; name = "wallhaven-je8rwq.jpg"; sha256 = "xsuCYc0mCDkrJZ+BUmEEclAfF17g1n39JHeubtZHP78="; }; }; themes = { rose-pine-dawn = { polarity = "light"; scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml"; wallpaper = wallpapers.cyber-dawn; serif = { package = iosevkaPackage; name = "Iosevka Nerd Font Propo"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Ice"; size = 24; }; }; rose-pine-moon = { polarity = "dark"; scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml"; wallpaper = wallpapers.cyber-dawn; serif = { # package = iosevkaPackage; # name = "Iosevka Nerd Font Propo"; package = pkgs.geist-font; name = "Geist Light"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 24; }; }; gruvbox-dark-pale = { polarity = "dark"; scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-pale.yaml"; wallpaper = wallpapers.mountains-sepia; serif = { # package = iosevkaPackage; # name = "Iosevka Nerd Font Propo"; package = pkgs.geist-font; name = "Geist"; }; monospace = { package = geistMonoPackage; name = "GeistMono Nerd Font"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 24; }; }; 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/lq/wallhaven-lqorw2.png"; name = "wallhaven-lqorw2.png"; sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p"; }; serif = { package = interPackage; name = "Inter Nerd Font"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 24; }; }; sulphurpool = { polarity = "dark"; scheme = "${pkgs.base16-schemes}/share/themes/atelier-sulphurpool.yaml"; wallpaper = builtins.fetchurl { url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg"; name = "wallhaven-rd5q3m.jpg"; sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6"; }; serif = { package = interPackage; name = "Inter Nerd Font"; }; monospace = { package = iosevkaTermPackage; name = "IosevkaTerm Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 24; }; }; himalaya = { # lightly pink like himalayan salt polarity = "light"; scheme = "${pkgs.base16-schemes}/share/themes/atelier-plateau-light.yaml"; wallpaper = wallpapers.mountains-pink; serif = { package = interPackage; name = "Inter Nerd Font"; }; monospace = { package = mesloLgPackage; name = "MesloLGM Nerd Font Mono"; }; cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Ice"; 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; }; }; }; }