refactor: refactor fonts option

This commit is contained in:
Artur Manuel 2025-04-20 15:38:07 +01:00
commit 0e93cee685
Signed by: amadaluzia
SSH key fingerprint: SHA256:ubvwT66gNUKSsgSzEb2UQnX8pzTq5N+r8eRVYGJJm4Q
6 changed files with 134 additions and 125 deletions

View file

@ -58,19 +58,25 @@
system = { system = {
fonts = { fonts = {
enable = true; enable = true;
names = { fonts = {
sansSerif = [ "Source Sans 3" ]; sansSerif = {
monospace = [ "Source Code Pro" ]; names = [ "Source Sans 3" ];
serif = [ "Source Serif 4" ]; packages = [ pkgs.source-sans ];
emoji = [ "Noto Color Emoji" ]; };
}; monospace = {
packages = { names = [ "Source Code Pro" ];
sansSerif = [ pkgs.source-sans ]; packages = [ pkgs.source-code-pro ];
monospace = [ pkgs.source-code-pro ]; };
serif = [ pkgs.source-serif ]; serif = {
emoji = [ pkgs.noto-fonts-color-emoji ]; names = [ "Source Serif 4" ];
extra = [ pkgs.nerd-fonts.symbols-only ]; packages = [ pkgs.source-serif ];
};
emoji = {
names = [ "Noto Color Emoji" ];
packages = [ pkgs.noto-fonts-color-emoji ];
};
}; };
extraFonts = [ pkgs.nerd-fonts.symbols-only ];
}; };
pipewire.enable = true; pipewire.enable = true;
}; };
@ -104,7 +110,7 @@
enable = true; enable = true;
wayland = true; wayland = true;
banner = '' 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) - YaLTeR, a.k.a. John Niri (CEO of Niri Incorporated)
''; '';
}; };

View file

@ -13,6 +13,7 @@ in
systemPackages = [ systemPackages = [
pkgs.amadaluzian-zsh pkgs.amadaluzian-zsh
pkgs.qutebrowser pkgs.qutebrowser
pkgs.qemu_kvm
]; ];
}; };

View file

@ -6,22 +6,28 @@
}: }:
{ {
alqueva.system.fonts = { 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; 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 ];
};
};
}; };
} }

View file

@ -1,4 +1,4 @@
font=monospace 9 font=monospace 12
width=450 width=450
height=220 height=220
text-color=#e0def4ff text-color=#e0def4ff

View file

@ -2,34 +2,40 @@
{ {
alqueva.system.fonts = { alqueva.system.fonts = {
enable = true; enable = true;
names = { fonts = {
sansSerif = [ "Liberation Sans" ]; sansSerif = {
monospace = [ "JetBrainsMono Nerd Font" ]; names = [ "Liberation Sans" ];
serif = [ "Liberation Serif" ]; packages = [
emoji = [ "OpenMoji Color" ]; pkgs.liberation_ttf
}; pkgs.noto-fonts
packages = { pkgs.noto-fonts-cjk-sans
sansSerif = [ pkgs.noto-fonts-cjk-serif
pkgs.liberation_ttf ];
pkgs.noto-fonts };
pkgs.noto-fonts-cjk-sans monospace = {
pkgs.noto-fonts-cjk-serif names = [ "JetBrainsMono Nerd Font" ];
]; packages = [
monospace = [ pkgs.nerd-fonts.jetbrains-mono
pkgs.nerd-fonts.jetbrains-mono pkgs.noto-fonts
pkgs.noto-fonts ];
]; };
serif = [ serif = {
pkgs.liberation_ttf names = [ "Liberation Serif" ];
pkgs.noto-fonts packages = [
pkgs.noto-fonts pkgs.liberation_ttf
pkgs.noto-fonts-cjk-sans pkgs.noto-fonts
pkgs.noto-fonts-cjk-serif pkgs.noto-fonts
]; pkgs.noto-fonts-cjk-sans
emoji = [ pkgs.noto-fonts-cjk-serif
pkgs.openmoji-color ];
pkgs.noto-fonts };
]; emoji = {
names = [ "OpenMoji Color" ];
packages = [
pkgs.openmoji-color
pkgs.noto-fonts
];
};
}; };
}; };
} }

View file

@ -6,85 +6,75 @@
}: }:
let let
cfg = config.alqueva.system.fonts; cfg = config.alqueva.system.fonts;
inherit (lib) types mkOption; inherit (lib.options) mkOption mkEnableOption;
mkStringsOption = inherit (lib.types)
default: letterform: listOf
mkOption { package
type = types.listOf types.str; str
inherit default; submodule
description = "The default fonts for ${letterform}."; ;
}; fontSubmodule =
mkPackagesOption = letterform: defaultNames: defaultPackages:
default: letterform: submodule {
mkOption { options = {
type = types.listOf types.package; names = mkOption {
inherit default; description = "Default system fonts used for the ${letterform} font-families.";
description = "The packages you want to use for your ${letterform} fonts."; default = defaultNames;
type = listOf str;
};
packages = mkOption {
description = "Packages for the ${letterform} font-families.";
default = defaultPackages;
type = listOf package;
};
};
}; };
in in
{ {
options.alqueva.system.fonts = { options.alqueva.system.fonts = {
enable = lib.mkEnableOption "" // { enable = mkEnableOption "" // {
description = "Whether you want to use this fonts module."; description = "Whether you want to use this fonts module.";
}; };
packages = extraFonts = mkOption {
{ description = "Extra font packages you may need.";
extra = mkOption { type = listOf package;
type = types.listOf types.package; default = [ ];
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";
};
}; };
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 { config = lib.mkIf cfg.enable {
fonts = { fonts = {
packages = builtins.concatLists (builtins.attrValues cfg.packages); packages = builtins.concatMap (v: v.packages) (builtins.attrValues cfg.fonts);
fontconfig = { fontconfig = {
defaultFonts = {
inherit (cfg.names)
sansSerif
monospace
serif
emoji
;
};
enable = true; enable = true;
defaultFonts = builtins.mapAttrs (_: v: v.names) cfg.fonts;
}; };
}; };
}; };