alqueva/hosts/shared/fonts.nix

82 lines
2 KiB
Nix
Raw Normal View History

2024-10-18 00:00:48 +01:00
{
config,
pkgs,
lib,
...
2025-03-22 17:36:40 +00:00
}:
let
cfg = config.alqueva.system.fonts;
2025-04-20 15:38:07 +01:00
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;
};
};
2024-10-18 00:00:48 +01:00
};
2025-03-22 17:36:40 +00:00
in
{
options.alqueva.system.fonts = {
2025-04-20 15:38:07 +01:00
enable = mkEnableOption "" // {
2025-03-22 17:36:40 +00:00
description = "Whether you want to use this fonts module.";
};
2025-04-20 15:38:07 +01:00
extraFonts = mkOption {
description = "Extra font packages you may need.";
type = listOf package;
default = [ ];
2024-10-18 00:00:48 +01:00
};
2025-04-20 15:38:07 +01:00
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 ];
};
};
2024-10-18 00:00:48 +01:00
};
2024-10-18 17:59:58 +01:00
config = lib.mkIf cfg.enable {
2024-10-18 00:00:48 +01:00
fonts = {
packages = builtins.concatMap (v: v.packages) (builtins.attrValues cfg.fonts) ++ cfg.extraFonts;
2024-10-18 00:00:48 +01:00
fontconfig = {
enable = true;
2025-04-20 15:38:07 +01:00
defaultFonts = builtins.mapAttrs (_: v: v.names) cfg.fonts;
2024-10-18 00:00:48 +01:00
};
};
};
}