{ lib, pkgs, config, options, inputs, ... }: let inherit (lib) attrNames mkEnableOption mkOption pathExists; inherit (lib.types) attrs bool enum package path str; cfg = config.local.style; in { options.local.style = { enable = mkEnableOption "style"; schemeName = mkOption { description = '' Name of the tinted-theming color scheme to use. ''; type = enum (attrNames inputs.basix.schemeData.base16); example = "catppuccin-mocha"; default = "catppuccin-mocha"; }; scheme = mkOption { description = '' Computed scheme from `config.local.style.schemeName`. ''; type = attrs; readOnly = true; }; wallpaper = mkOption { description = '' Location of the wallpaper that will be used throughout the system. ''; type = path; example = lib.literalExpression "./wallpaper.png"; default = pkgs.fetchurl { url = "https://raw.githubusercontent.com/NixOS/nixos-artwork/e0cf0eb237dc5baba86661a3572b20a6183c1876/wallpapers/nix-wallpaper-nineish-catppuccin-frappe.png?raw=true"; hash = "sha256-/HAtpGwLxjNfJvX5/4YZfM8jPNStaM3gisK8+ImRmQ4="; }; }; cursorTheme = { name = mkOption { description = '' Name of the cursor theme. ''; default = "phinger-cursors-dark"; }; package = mkOption { type = package; description = '' Package providing the cursor theme. ''; default = pkgs.phinger-cursors; }; size = mkOption { description = '' Size of the cursor. ''; default = 32; }; }; avatar = mkOption { description = '' Path to an avatar image (used for hyprlock). ''; default = ../../assets/avatar.png; # TODO silly, change this }; gtk = { enable = mkOption { type = bool; description = "enable GTK theming options"; default = cfg.enable; }; theme = { name = mkOption { type = str; description = "Name for the GTK theme"; default = "Catppuccin-GTK-Purple-Dark"; }; package = mkOption { type = package; description = "Package providing the GTK theme"; default = pkgs.magnetic-catppuccin-gtk.override { accent = ["purple"]; }; }; }; iconTheme = { name = mkOption { type = str; description = "The name for the icon theme that will be used for GTK programs"; default = "Papirus-Dark"; }; package = mkOption { type = package; description = "The GTK icon theme to be used"; default = pkgs.catppuccin-papirus-folders.override { flavor = "mocha"; accent = "lavender"; }; }; }; }; }; config = { assertions = [ (let themePath = cfg.gtk.theme.package + /share/themes + "/${cfg.gtk.theme.name}"; in { assertion = cfg.gtk.enable -> pathExists themePath; message = '' ${toString themePath} set by the GTK module does not exist! To suppress this message, make sure that `config.modules.theme.gtk.theme.package` contains the path `${cfg.theme.name}` ''; }) { assertion = cfg.enable -> options.local.systemVars.username.isDefined; message = '' When enabling system-wide theming, a username needs to be set in `config.local.systemVars.username`. ''; } ]; local.style.scheme = inputs.basix.schemeData.base16.${cfg.schemeName}; }; }