{ lib, config, system, pkgs, ... }: let inherit (lib.snowfall.system) is-linux; cfg = config.marleyos.theme; # https://github.com/nix-community/home-manager/blob/master/modules/misc/gtk.nix iconThemeType = lib.types.submodule { options = { package = lib.mkOption { type = with lib.types; nullOr package; default = null; example = pkgs.gnome.adwaita-icon-theme; description = '' Package providing the icon theme. This package will be installed to your profile. If `null` then the theme is assumed to already be available in your profile. ''; }; name = lib.mkOption { type = with lib.types; str; example = "Adwaita"; description = "The name of the icon theme within the package."; }; }; }; mkFontType = type: default: (lib.mkOption { type = lib.types.submodule { options = { package = lib.mkOption { type = with lib.types; package; default = default.package; description = "The package providing the ${type} font."; }; name = lib.mkOption { type = with lib.types; str; default = default.name; description = "The name of the ${type} font."; }; ligatures = lib.mkOption { type = with lib.types; listOf str; default = default.ligatures; description = "The ligature features to enable for programs that support it."; }; }; }; inherit default; description = "The ${type} font to use."; }); in { options.marleyos.theme = { icons = lib.mkOption { type = with lib.types; nullOr iconThemeType; default = null; description = "The icon theme to use."; }; fonts = lib.mkOption { type = with lib.types; submodule { options = { monospace = mkFontType "monospace" { package = pkgs.maple-mono-NF; name = "Maple Mono NF"; ligatures = []; }; sansSerif = mkFontType "sans-serif" { package = pkgs.dm-sans; name = "DeepMind Sans"; ligatures = []; }; serif = mkFontType "serif" { package = pkgs.eb-garamond; name = "EB Garamond"; ligatures = []; }; emoji = mkFontType "emoji" { package = pkgs.whatsapp-emoji-font; name = "Apple Color Emoji"; ligatures = []; }; }; }; default = {}; description = "Default font configuration."; }; }; config = lib.mkMerge [ # icons (lib.mkIf ((cfg.icons != null) && (is-linux system)) { gtk = lib.mkDefault { iconTheme = { inherit (cfg.icons) name; package = lib.mkIf (cfg.icons.package != null) cfg.icons.package; }; }; services.dunst = lib.mkDefault { iconTheme = { inherit (cfg.icons) name; package = lib.mkIf (cfg.icons.package != null) cfg.icons.package; }; }; }) # fonts { home.packages = [ cfg.fonts.monospace.package cfg.fonts.sansSerif.package cfg.fonts.serif.package cfg.fonts.emoji.package ]; fonts.fontconfig = lib.mkIf (is-linux system) { enable = true; defaultFonts = { monospace = [cfg.fonts.monospace.name]; sansSerif = [cfg.fonts.sansSerif.name]; serif = [cfg.fonts.serif.name]; emoji = [cfg.fonts.emoji.name]; }; }; } ]; }