alqueva/hosts/shared/fonts.nix

81 lines
2 KiB
Nix

{
config,
pkgs,
lib,
...
}:
let
cfg = config.alqueva.system.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 = mkEnableOption "" // {
description = "Whether you want to use this fonts module.";
};
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.concatMap (v: v.packages) (builtins.attrValues cfg.fonts);
fontconfig = {
enable = true;
defaultFonts = builtins.mapAttrs (_: v: v.names) cfg.fonts;
};
};
};
}