From 0e93cee685907f32cd72abcec05faca645af4338 Mon Sep 17 00:00:00 2001 From: Artur Manuel Date: Sun, 20 Apr 2025 15:38:07 +0100 Subject: [PATCH] refactor: refactor fonts option --- hosts/apeturescience/default.nix | 32 +++-- hosts/cityseventeen/apps.nix | 1 + hosts/cityseventeen/fonts.nix | 38 +++--- .../users/arturm/configs/mako/config | 2 +- hosts/micronix/fonts.nix | 62 +++++---- hosts/shared/fonts.nix | 124 ++++++++---------- 6 files changed, 134 insertions(+), 125 deletions(-) diff --git a/hosts/apeturescience/default.nix b/hosts/apeturescience/default.nix index dbb59c7..29c18b8 100644 --- a/hosts/apeturescience/default.nix +++ b/hosts/apeturescience/default.nix @@ -58,19 +58,25 @@ system = { fonts = { enable = true; - names = { - sansSerif = [ "Source Sans 3" ]; - monospace = [ "Source Code Pro" ]; - serif = [ "Source Serif 4" ]; - emoji = [ "Noto Color Emoji" ]; - }; - packages = { - sansSerif = [ pkgs.source-sans ]; - monospace = [ pkgs.source-code-pro ]; - serif = [ pkgs.source-serif ]; - emoji = [ pkgs.noto-fonts-color-emoji ]; - extra = [ pkgs.nerd-fonts.symbols-only ]; + fonts = { + sansSerif = { + names = [ "Source Sans 3" ]; + packages = [ pkgs.source-sans ]; + }; + monospace = { + names = [ "Source Code Pro" ]; + packages = [ pkgs.source-code-pro ]; + }; + serif = { + names = [ "Source Serif 4" ]; + packages = [ pkgs.source-serif ]; + }; + emoji = { + names = [ "Noto Color Emoji" ]; + packages = [ pkgs.noto-fonts-color-emoji ]; + }; }; + extraFonts = [ pkgs.nerd-fonts.symbols-only ]; }; pipewire.enable = true; }; @@ -104,7 +110,7 @@ enable = true; wayland = true; banner = '' - "thankfully no one got the idea to say n eye ree" + "thankfully no one got the idea to say n eye ree" - YaLTeR, a.k.a. John Niri (CEO of Niri Incorporated) ''; }; diff --git a/hosts/cityseventeen/apps.nix b/hosts/cityseventeen/apps.nix index 4a854e9..77fd1cc 100644 --- a/hosts/cityseventeen/apps.nix +++ b/hosts/cityseventeen/apps.nix @@ -13,6 +13,7 @@ in systemPackages = [ pkgs.amadaluzian-zsh pkgs.qutebrowser + pkgs.qemu_kvm ]; }; diff --git a/hosts/cityseventeen/fonts.nix b/hosts/cityseventeen/fonts.nix index 2fe49c2..a2d8e4d 100644 --- a/hosts/cityseventeen/fonts.nix +++ b/hosts/cityseventeen/fonts.nix @@ -6,22 +6,28 @@ }: { alqueva.system.fonts = { - names = { - sansSerif = [ "kirsch" ]; - monospace = [ "kirsch" ]; - serif = [ "kirsch" ]; - emoji = [ "Noto Fonts Color Emoji" ]; - }; - packages = { - sansSerif = [ inputs.kirsch.packages.${system}.kirsch ]; - monospace = [ inputs.kirsch.packages.${system}.kirsch ]; - serif = [ inputs.kirsch.packages.${system}.kirsch ]; - emoji = [ pkgs.noto-fonts-color-emoji ]; - extra = [ - pkgs.nerd-fonts.symbols-only - pkgs.noto-fonts - ]; - }; enable = true; + extraFonts = [ + pkgs.nerd-fonts.symbols-only + pkgs.noto-fonts + ]; + fonts = { + sansSerif = { + names = [ "kirsch" ]; + packages = [ inputs.kirsch.packages.${system}.kirsch ]; + }; + monospace = { + names = [ "kirsch" ]; + packages = [ inputs.kirsch.packages.${system}.kirsch ]; + }; + serif = { + names = [ "kirsch" ]; + packages = [ inputs.kirsch.packages.${system}.kirsch ]; + }; + emoji = { + names = [ "Noto Fonts Color Emoji" ]; + packages = [ pkgs.noto-fonts-color-emoji ]; + }; + }; }; } diff --git a/hosts/cityseventeen/users/arturm/configs/mako/config b/hosts/cityseventeen/users/arturm/configs/mako/config index dd29af7..0c2b468 100644 --- a/hosts/cityseventeen/users/arturm/configs/mako/config +++ b/hosts/cityseventeen/users/arturm/configs/mako/config @@ -1,4 +1,4 @@ -font=monospace 9 +font=monospace 12 width=450 height=220 text-color=#e0def4ff diff --git a/hosts/micronix/fonts.nix b/hosts/micronix/fonts.nix index a77448e..a791d82 100644 --- a/hosts/micronix/fonts.nix +++ b/hosts/micronix/fonts.nix @@ -2,34 +2,40 @@ { alqueva.system.fonts = { enable = true; - names = { - sansSerif = [ "Liberation Sans" ]; - monospace = [ "JetBrainsMono Nerd Font" ]; - serif = [ "Liberation Serif" ]; - emoji = [ "OpenMoji Color" ]; - }; - packages = { - sansSerif = [ - pkgs.liberation_ttf - pkgs.noto-fonts - pkgs.noto-fonts-cjk-sans - pkgs.noto-fonts-cjk-serif - ]; - monospace = [ - pkgs.nerd-fonts.jetbrains-mono - pkgs.noto-fonts - ]; - serif = [ - pkgs.liberation_ttf - pkgs.noto-fonts - pkgs.noto-fonts - pkgs.noto-fonts-cjk-sans - pkgs.noto-fonts-cjk-serif - ]; - emoji = [ - pkgs.openmoji-color - pkgs.noto-fonts - ]; + fonts = { + sansSerif = { + names = [ "Liberation Sans" ]; + packages = [ + pkgs.liberation_ttf + pkgs.noto-fonts + pkgs.noto-fonts-cjk-sans + pkgs.noto-fonts-cjk-serif + ]; + }; + monospace = { + names = [ "JetBrainsMono Nerd Font" ]; + packages = [ + pkgs.nerd-fonts.jetbrains-mono + pkgs.noto-fonts + ]; + }; + serif = { + names = [ "Liberation Serif" ]; + packages = [ + pkgs.liberation_ttf + pkgs.noto-fonts + pkgs.noto-fonts + pkgs.noto-fonts-cjk-sans + pkgs.noto-fonts-cjk-serif + ]; + }; + emoji = { + names = [ "OpenMoji Color" ]; + packages = [ + pkgs.openmoji-color + pkgs.noto-fonts + ]; + }; }; }; } diff --git a/hosts/shared/fonts.nix b/hosts/shared/fonts.nix index fb82179..614e172 100644 --- a/hosts/shared/fonts.nix +++ b/hosts/shared/fonts.nix @@ -6,85 +6,75 @@ }: let cfg = config.alqueva.system.fonts; - inherit (lib) types mkOption; - mkStringsOption = - default: letterform: - mkOption { - type = types.listOf types.str; - inherit default; - description = "The default fonts for ${letterform}."; - }; - mkPackagesOption = - default: letterform: - mkOption { - type = types.listOf types.package; - inherit default; - description = "The packages you want to use for your ${letterform} fonts."; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.types) + listOf + package + str + submodule + ; + fontSubmodule = + letterform: defaultNames: defaultPackages: + submodule { + options = { + names = mkOption { + description = "Default system fonts used for the ${letterform} font-families."; + default = defaultNames; + type = listOf str; + }; + packages = mkOption { + description = "Packages for the ${letterform} font-families."; + default = defaultPackages; + type = listOf package; + }; + }; }; in { options.alqueva.system.fonts = { - enable = lib.mkEnableOption "" // { + enable = mkEnableOption "" // { description = "Whether you want to use this fonts module."; }; - packages = - { - extra = mkOption { - type = types.listOf types.package; - default = [ ]; - description = "Extra font packages you want installed."; - }; - } - // builtins.mapAttrs (_n: v: mkPackagesOption v.default v.letterform) { - sansSerif = { - default = [ pkgs.roboto ]; - letterform = "sans-serif"; - }; - monospace = { - default = [ pkgs.roboto-mono ]; - letterform = "monospace"; - }; - serif = { - default = [ pkgs.roboto-serif ]; - letterform = "serif"; - }; - emoji = { - default = [ pkgs.noto-fonts-color-emoji ]; - letterform = "emoji"; - }; - }; - names = builtins.mapAttrs (_n: v: mkStringsOption v.default v.letterform) { - sansSerif = { - default = [ "Roboto" ]; - letterform = "sans-serif"; - }; - monospace = { - default = [ "Roboto Mono" ]; - letterform = "monospace"; - }; - serif = { - default = [ "Roboto Serif" ]; - letterform = "serif"; - }; - emoji = { - default = [ "Noto Color Emoji" ]; - letterform = "emoji"; - }; + extraFonts = mkOption { + description = "Extra font packages you may need."; + type = listOf package; + default = [ ]; }; + fonts = + builtins.mapAttrs + ( + n: v: + mkOption { + default = { }; + description = "Options for ${n} font-families"; + type = fontSubmodule n v.defaultNames v.defaultPackages; + } + ) + { + sansSerif = { + defaultNames = [ "Roboto" ]; + defaultPackages = [ pkgs.roboto ]; + }; + monospace = { + defaultNames = [ "Roboto Mono" ]; + defaultPackages = [ pkgs.roboto-mono ]; + }; + serif = { + defaultNames = [ "Roboto Serif" ]; + defaultPackages = [ pkgs.roboto-serif ]; + }; + emoji = { + defaultNames = [ "Noto Color Emoji" ]; + defaultPackages = [ pkgs.noto-fonts-color-emoji ]; + }; + }; }; config = lib.mkIf cfg.enable { fonts = { - packages = builtins.concatLists (builtins.attrValues cfg.packages); + packages = builtins.concatMap (v: v.packages) (builtins.attrValues cfg.fonts); fontconfig = { - defaultFonts = { - inherit (cfg.names) - sansSerif - monospace - serif - emoji - ; - }; enable = true; + defaultFonts = builtins.mapAttrs (_: v: v.names) cfg.fonts; }; }; };