From 1fa7ae2a66235a37202c7000e37c4cc6681aa477 Mon Sep 17 00:00:00 2001 From: ooks-io Date: Tue, 10 Dec 2024 19:11:52 +1100 Subject: [PATCH] nixos: rework font options --- modules/home/workstation/appearance/fonts.nix | 22 ++++++---- .../hyprland/components/waybar.nix | 2 +- modules/home/workstation/terminal/foot.nix | 36 +++++++++++----- modules/nixos/appearance/options.nix | 42 ++++++++++++------- modules/nixos/workstation/themes/hozen.nix | 29 ++++++++++--- modules/nixos/workstation/themes/minimal.nix | 17 +++++++- 6 files changed, 107 insertions(+), 41 deletions(-) diff --git a/modules/home/workstation/appearance/fonts.nix b/modules/home/workstation/appearance/fonts.nix index 1a42574..b190577 100644 --- a/modules/home/workstation/appearance/fonts.nix +++ b/modules/home/workstation/appearance/fonts.nix @@ -1,19 +1,23 @@ { osConfig, pkgs, + lib, ... }: let inherit (osConfig.ooknet.appearance.fonts) monospace regular; + inherit (lib) optionals; in { fonts.fontconfig.enable = true; - home.packages = [ - monospace.package - regular.package + home.packages = + [ + monospace.package + regular.package - pkgs.noto-fonts - pkgs.noto-fonts-cjk-sans - pkgs.noto-fonts-emoji - (pkgs.nerdfonts.override - {fonts = ["NerdFontsSymbolsOnly"];}) - ]; + pkgs.noto-fonts + pkgs.noto-fonts-cjk-sans + pkgs.noto-fonts-emoji + (pkgs.nerdfonts.override + {fonts = ["NerdFontsSymbolsOnly"];}) + ] + ++ optionals (monospace.fallback != null) [monospace.fallback.package]; } diff --git a/modules/home/workstation/hyprland/components/waybar.nix b/modules/home/workstation/hyprland/components/waybar.nix index 16c44b7..1aaa034 100644 --- a/modules/home/workstation/hyprland/components/waybar.nix +++ b/modules/home/workstation/hyprland/components/waybar.nix @@ -94,7 +94,7 @@ in { */ '' * { - font-family: "${fonts.monospace.family}:style=Medium"; + font-family: "${fonts.monospace.family}"; font-size: ${toString fonts.monospace.size}px; border: solid #${color.border.base}; } diff --git a/modules/home/workstation/terminal/foot.nix b/modules/home/workstation/terminal/foot.nix index 3a6f95b..3c6d15e 100644 --- a/modules/home/workstation/terminal/foot.nix +++ b/modules/home/workstation/terminal/foot.nix @@ -4,15 +4,27 @@ hozen, ... }: let - inherit (osConfig.ooknet.appearance) fonts; + inherit (osConfig.ooknet.appearance.fonts) monospace; inherit (hozen) color; inherit (lib) mkMerge mkIf; inherit (osConfig.ooknet.workstation) default; + + mkFontConfig = font: style: let + mkFont = f: let + sizeAttr = + if f.bitmap + then "pixelsize" + else "size"; + familyStyle = f.variants.${style} or f.variants.regular; + in "${familyStyle}:${sizeAttr}=${toString font.size}"; + primary = mkFont font; + fallback = + if font.fallback != null + then ",${mkFont font.fallback}" + else ""; + in "${primary}${fallback}"; + cfg = osConfig.ooknet.workstation.programs.foot; - fontOptions = let - size = if fonts.monospace.bitmap then "pixelsize" else "size"; - family = if fonts.monospace.bitmap then "${fonts.monospace.family}:style=Medium" else "${fonts.monospace.family}"; - in "${family}:${size}${toString fonts.monospace.size}"; in { config = mkMerge [ (mkIf (cfg.enable || default.terminal == "foot") { @@ -22,16 +34,20 @@ in { settings = { main = { term = "xterm-256color"; - font = "${fonts.monospace.family}:style=Medium:pixelsize=${toString fonts.monospace.size}",${fonts.monospace.fallback.family}; - font-bold = "${fonts.monospace.family}:style=Medium:pixelsize=${toString fonts.monospace.size}"; - font-italic = "${fonts.monospace.family}:style=Medium:pixelsize=${toString fonts.monospace.size}"; - font-bold-italic = "${fonts.monospace.family}:style=Medium:pixelsize=${toString fonts.monospace.size}"; - dpi-aware = "no"; + font = mkFontConfig monospace "regular"; + font-bold = mkFontConfig monospace "bold"; + font-italic = mkFontConfig monospace "italic"; + font-bold-italic = mkFontConfig monospace "boldItalic"; + dpi-aware = + if monospace.bitmap + then "no" + else "yes"; letter-spacing = "0"; bold-text-in-bright = "palette-based"; resize-delay-ms = "80"; pad = "9x9 center"; selection-target = "clipboard"; + font-size-adjustment = "1px"; }; tweak = { diff --git a/modules/nixos/appearance/options.nix b/modules/nixos/appearance/options.nix index aea78c4..ae3e5a4 100644 --- a/modules/nixos/appearance/options.nix +++ b/modules/nixos/appearance/options.nix @@ -1,12 +1,32 @@ {lib, ...}: let inherit (lib) mkOption; - inherit (lib.types) str package path int bool; + inherit (lib.types) str package path int bool submodule nullOr; - mkFontOption = { + mkVariantOption = { + regular = mkOption { + type = str; + default = ""; + }; + bold = mkOption { + type = str; + default = ""; + }; + italic = mkOption { + type = str; + default = ""; + }; + boldItalic = mkOption { + type = str; + default = ""; + }; + }; + + mkBaseFontOption = { family = mkOption { type = str; default = ""; }; + variants = mkVariantOption; package = mkOption { type = package; default = null; @@ -19,21 +39,15 @@ type = bool; default = false; }; - fallback = { - family = mkOption { - type = str; - default = ""; - }; - package = mkOption { - type = package; - default = null; - }; - size = mkOption { - type = int; + }; + mkFontOption = + mkBaseFontOption + // { + fallback = mkOption { + type = nullOr (submodule {options = mkBaseFontOption;}); default = null; }; }; - }; in { # imports = [./palettes]; options.ooknet.appearance = { diff --git a/modules/nixos/workstation/themes/hozen.nix b/modules/nixos/workstation/themes/hozen.nix index 83f8d12..eb8c22c 100644 --- a/modules/nixos/workstation/themes/hozen.nix +++ b/modules/nixos/workstation/themes/hozen.nix @@ -13,17 +13,36 @@ in { ooknet.appearance = { fonts = { monospace = { - family = "CozetteHiDpi"; - package = pkgs.cozette; - size = 22; + bitmap = true; + package = pkgs.monocraft; + size = 18; + family = "Monocraft"; + variants = { + regular = "Monocraft:style=Medium"; + bold = "Monocraft:style=Medium"; + italic = "Monocraft:style=Medium"; + boldItalic = "Monocraft:style=Medium"; + }; fallback = { - family = "JetBrainsMono Nerd Font"; - package = pkgs.nerfonts.override {fonts = ["JetBrainsMono"];}; + family = "JetBrainsMono NFM"; + variants = { + regular = "JetBrainsMono NFM:style=Regular"; + bold = "JetBrainsMono NFM:style=Bold"; + italic = "JetBrainsMono NFM:style=Italic"; + boldItalic = "JetBrainsMono NFM:style=Bold Italic"; + }; + package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; size = 18; }; }; regular = { family = "Fira Sans"; + variants = { + regular = "Fira Sans:style=Regular"; + bold = "Fira Sans:style=Bold"; + italic = "Fira Sans:style=Italic"; + boldItalic = "Fira Sans:style=Bold Italic"; + }; package = pkgs.fira; }; }; diff --git a/modules/nixos/workstation/themes/minimal.nix b/modules/nixos/workstation/themes/minimal.nix index 1050dce..c3aa8a4 100644 --- a/modules/nixos/workstation/themes/minimal.nix +++ b/modules/nixos/workstation/themes/minimal.nix @@ -13,12 +13,25 @@ in { ooknet.appearance = { fonts = { monospace = { - family = "JetBrainsMono Nerd Font"; package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}; + size = 18; + family = "JetBrainsMono NF"; + variants = { + regular = "JetBrainsMono NF:style=Regular"; + bold = "JetBrainsMono NF:style=Bold"; + italic = "JetBrainsMono NF:style=Italic"; + boldItalic = "JetBrainsMono NF:style=Bold Italic"; + }; }; regular = { - family = "Fira Sans"; package = pkgs.fira; + family = "Fira Sans"; + variants = { + regular = "Fira Sans:style=Regular"; + bold = "Fira Sans:style=Bold"; + italic = "Fira Sans:style=Italic"; + boldItalic = "Fira Sans:style=Bold Italic"; + }; }; };