summaryrefslogtreecommitdiff
path: root/home-manager/fontconfig.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/fontconfig.nix')
-rw-r--r--home-manager/fontconfig.nix83
1 files changed, 83 insertions, 0 deletions
diff --git a/home-manager/fontconfig.nix b/home-manager/fontconfig.nix
new file mode 100644
index 0000000..4473d1a
--- /dev/null
+++ b/home-manager/fontconfig.nix
@@ -0,0 +1,83 @@
+{ config, lib, ... }: let
+ cfg = config.fonts.fontconfig;
+ fcConfd = "fontconfig/conf.d";
+ fcResources = ./resources/fontconfig;
+
+ extraConfigFile = lib.types.submodule ({ name, ... }: {
+ options = {
+ enable = lib.mkEnableOption "Whether this font config file should be generated.";
+ text = lib.mkOption {
+ type = lib.types.nullOr lib.types.lines;
+ default = null;
+ description = "Verbatim contents of the config file. If this option is null then the 'source' option must be set.";
+ };
+ source = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ description = "Config file to source. Alternatively, use the 'text' option instead.";
+ };
+ label = lib.mkOption {
+ type = lib.types.str;
+ default = "name";
+ description = "Label to use for the name of the config file.";
+ };
+ priority = lib.mkOption {
+ type = lib.types.addCheck lib.types.int (x: x >= 0 && x <= 99);
+ default = 90;
+ description = ''
+ Determines the order in which configs are loaded.
+ Must be a value within the range of 0-99, where priority 0 is the highest priority and 99 is the lowest.
+ '';
+ };
+ };
+ config = {
+ label = lib.mkDefault name;
+ };
+ });
+in {
+ options.fonts.fontconfig = {
+ _extraConfigFiles = lib.mkOption {
+ type = lib.types.attrsOf extraConfigFile;
+ default = {};
+ description = ''
+ Extra font config files that will be added to `~/.config/fontconfig/conf.d/`.
+ Files are added as `conf.d/{priority}-{label}.conf`.
+ '';
+ example = ''
+ {
+ tamzen = {
+ enable = true;
+ label = "tamzen-disable-antialiasing";
+ text = tamzenFontConfig; # Pretend this is defined elsewhere
+ priority = 90;
+ }; # => conf.d/90-tamzen-disable-antialiasing.conf
+ commit-mono-options = {
+ enable = true;
+ source = ./resources/fontconfig/commit-mono.conf;
+ priority = 80;
+ }; # => conf.d/80-commit-mono-options.conf
+ };
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ fonts.fontconfig._extraConfigFiles = {
+ tamzen-disable-antialiasing = {
+ enable = true;
+ text = builtins.readFile ./resources/fontconfig/90-tamzen-disable-anti-aliasing.conf;
+ priority = 90;
+ };
+ commit-mono-options = {
+ enable = true;
+ source = ./resources/fontconfig/90-commit-mono-options.conf;
+ priority = 90;
+ };
+ };
+
+ xdg.configFile = lib.mapAttrs' (name: config:
+ lib.nameValuePair "${fcConfd}/${builtins.toString config.priority}-${config.label}.conf"
+ { inherit (config) text; source = lib.mkIf (config.source != null) config.source; }
+ ) cfg._extraConfigFiles;
+ };
+}