Files
nixos-blueprint/modules/nixos/system/misc/stylix/default.nix
2025-05-04 18:12:28 +03:00

234 lines
5.9 KiB
Nix

{
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;
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";
};
};
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/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 = iosevkaTermPackage;
name = "IosevkaTerm 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;
};
};
};
}