From 26fd8626ab3ed57fbf50c62fc92f685ab8d35c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jalil=20David=20Salam=C3=A9=20Messina?= Date: Wed, 17 Jan 2024 22:31:45 +0100 Subject: [PATCH] treewide: add support for fallback fonts This modifies the modules to add support for fallback fonts. Some of them just use the default fonts (the first font in the list), some also respect the fallback. --- modules/alacritty/hm.nix | 12 ++++++++++ modules/avizo/hm.nix | 1 - modules/bemenu/hm.nix | 45 +++++++++++++++++++------------------- modules/dunst/hm.nix | 4 +++- modules/emacs/hm.nix | 3 ++- modules/firefox/hm.nix | 10 +++++---- modules/foot/hm.nix | 7 ++++-- modules/fuzzel/hm.nix | 7 ++++-- modules/gnome/hm.nix | 9 ++++++-- modules/grub/nixos.nix | 6 ++++- modules/gtk/hm.nix | 11 ++++++---- modules/i3/hm.nix | 4 ++-- modules/kde/hm.nix | 5 ++++- modules/kitty/hm.nix | 9 +++++--- modules/kmscon/nixos.nix | 2 +- modules/mako/hm.nix | 4 +++- modules/qutebrowser/hm.nix | 6 ++++- modules/rofi/hm.nix | 6 +++-- modules/sway/hm.nix | 9 +++++--- modules/sxiv/hm.nix | 7 +++--- modules/vim/hm.nix | 6 +++-- modules/vscode/hm.nix | 5 +++-- modules/waybar/hm.nix | 6 ++++- modules/wezterm/hm.nix | 14 +++++++----- modules/xfce/hm.nix | 7 +++++- modules/xresources/hm.nix | 8 +++++-- 26 files changed, 141 insertions(+), 72 deletions(-) diff --git a/modules/alacritty/hm.nix b/modules/alacritty/hm.nix index dce85c131..4a9d2fcd7 100644 --- a/modules/alacritty/hm.nix +++ b/modules/alacritty/hm.nix @@ -5,6 +5,18 @@ let colors = config.lib.stylix.colors.withHashtag; + useYaml = (builtins.compareVersions config.programs.alacritty.package.version "0.13.0") < 0; + templateRepo = config.lib.stylix.templates. + "base16-alacritty${if useYaml then "-yaml" else ""}"; + + inherit (config.stylix) fonts; + inherit (fonts) sizes; + + monospace = builtins.head fonts.monospace; + + themeFile = config.lib.stylix.colors { + inherit templateRepo; + }; in { options.stylix.targets.alacritty.enable = config.lib.stylix.mkEnableTarget "Alacritty" true; diff --git a/modules/avizo/hm.nix b/modules/avizo/hm.nix index e54033154..66dda159e 100644 --- a/modules/avizo/hm.nix +++ b/modules/avizo/hm.nix @@ -1,7 +1,6 @@ { config, lib, options, ... }: with config.lib.stylix.colors; -with config.stylix.fonts; let aviOpacity = toString config.stylix.opacity.popups; in diff --git a/modules/bemenu/hm.nix b/modules/bemenu/hm.nix index 0abb7d585..23ebc888b 100644 --- a/modules/bemenu/hm.nix +++ b/modules/bemenu/hm.nix @@ -1,8 +1,10 @@ -{pkgs, config, lib, ... }: +{ pkgs, config, lib, ... }: with config.lib.stylix.colors.withHashtag; -with config.stylix.fonts; let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + sansSerif = builtins.head fonts.sansSerif; bemenuOpacity = lib.toHexString ((((builtins.ceil (config.stylix.opacity.popups * 100)) * 255) / 100)); in { options.stylix.targets.bemenu = { @@ -26,26 +28,23 @@ in { }; config = lib.mkIf config.stylix.targets.bemenu.enable { - programs.bemenu.settings = with config.stylix.targets.bemenu; { - tb = "${base01}${bemenuOpacity}"; # Title bg - nb = "${base01}${bemenuOpacity}"; # Normal bg - fb = "${base01}${bemenuOpacity}"; # Filter bg - hb = "${base03}${bemenuOpacity}"; # Highlighted bg - sb = "${base03}${bemenuOpacity}"; # Selected bg - scb = "${base01}"; # Scrollbar bg - - hf = "${base0A}"; # Highlighted fg - sf = "${base0B}"; # Selected fg - tf = "${base05}"; # Title fg - ff = "${base05}"; # Filter fg - nf = "${base05}"; # Normal fg - scf = "${base03}"; # Scrollbar fg - - ab = "${if alternate then base00 else base01}"; # Alternate bg - af = "${if alternate then base04 else base05}"; # Alternate fg - - # Font name - fn = "${sansSerif.name} ${lib.optionalString (fontSize != null) (builtins.toString fontSize)}"; - }; + home.sessionVariables.BEMENU_OPTS = with config.stylix.targets.bemenu; builtins.concatStringsSep " " [ + # Inspired from https://git.sr.ht/~h4n1/base16-bemenu_opts + "--tb '${base01}${bemenuOpacity}'" + "--nb '${base01}${bemenuOpacity}'" + "--fb '${base01}${bemenuOpacity}'" + "--hb '${base03}${bemenuOpacity}'" + "--sb '${base03}${bemenuOpacity}'" + "--hf '${base0A}'" + "--sf '${base0B}'" + "--tf '${base05}'" + "--ff '${base05}'" + "--nf '${base05}'" + "--scb '${base01}'" + "--scf '${base03}'" + "--ab '${if alternate then base00 else base01}'" + "--af '${if alternate then base04 else base05}'" + "--fn '${sansSerif.name} ${lib.optionalString (fontSize != null) (builtins.toString fontSize)}'" + ]; }; } diff --git a/modules/dunst/hm.nix b/modules/dunst/hm.nix index 3d8c8fa9b..341a69cc4 100644 --- a/modules/dunst/hm.nix +++ b/modules/dunst/hm.nix @@ -1,9 +1,11 @@ { config, lib, ... }: with config.lib.stylix.colors.withHashtag; -with config.stylix.fonts; let dunstOpacity = lib.toHexString ((((builtins.ceil (config.stylix.opacity.popups * 100)) * 255) / 100)); + inherit (config.stylix) fonts; + inherit (fonts) sizes; + sansSerif = builtins.head sansSerif; in { options.stylix.targets.dunst.enable = config.lib.stylix.mkEnableTarget "Dunst" true; diff --git a/modules/emacs/hm.nix b/modules/emacs/hm.nix index f97f18fc8..d3416f155 100644 --- a/modules/emacs/hm.nix +++ b/modules/emacs/hm.nix @@ -1,9 +1,10 @@ { pkgs, config, lib, ... }: with config.lib.stylix.colors.withHashtag; -with config.stylix.fonts; let + inherit (config.stylix) fonts; + monospace = builtins.head fonts.monospace; emacsOpacity = builtins.toString (builtins.ceil (config.stylix.opacity.applications * 100)); in { diff --git a/modules/firefox/hm.nix b/modules/firefox/hm.nix index 81deb510e..97b314a3e 100644 --- a/modules/firefox/hm.nix +++ b/modules/firefox/hm.nix @@ -2,10 +2,12 @@ let profileSettings = { - settings = { - "font.name.monospace.x-western" = config.stylix.fonts.monospace.name; - "font.name.sans-serif.x-western" = config.stylix.fonts.sansSerif.name; - "font.name.serif.x-western" = config.stylix.fonts.serif.name; + settings = let + inherit (config.stylix) fonts; + in { + "font.name.monospace.x-western" = (builtins.head fonts.monospace).name; + "font.name.sans-serif.x-western" = (builtins.head fonts.sansSerif).name; + "font.name.serif.x-western" = (builtins.head fonts.serif).name; }; }; makeProfileSettingsPair = profileName: diff --git a/modules/foot/hm.nix b/modules/foot/hm.nix index 8a4865f48..01defed20 100644 --- a/modules/foot/hm.nix +++ b/modules/foot/hm.nix @@ -14,8 +14,11 @@ in { config.programs.foot.settings = lib.mkIf cfg.enable { main = { include = theme; - font = - with config.stylix.fonts; + font = let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + monospace = builtins.head fonts.monospace; + in "${monospace.name}:size=${toString sizes.terminal}"; dpi-aware = "no"; }; diff --git a/modules/fuzzel/hm.nix b/modules/fuzzel/hm.nix index fce4d2d02..1a5b08ac9 100644 --- a/modules/fuzzel/hm.nix +++ b/modules/fuzzel/hm.nix @@ -21,8 +21,11 @@ in { border = "${base0D-hex}ff"; }; - main = { - font = "${config.stylix.fonts.sansSerif.name}:size=${toString config.stylix.fonts.sizes.popups}"; + main = let + inherit (config.stylix) fonts; + sansSerif = builtins.head fonts.sansSerif; + in { + font = "${sansSerif.name}:size=${toString fonts.sizes.popups}"; dpi-aware = "no"; }; }; diff --git a/modules/gnome/hm.nix b/modules/gnome/hm.nix index 2accc30c0..66864e1dc 100644 --- a/modules/gnome/hm.nix +++ b/modules/gnome/hm.nix @@ -14,8 +14,13 @@ with lib; picture-uri = "file://${config.stylix.image}"; picture-uri-dark = "file://${config.stylix.image}"; }; - - "org/gnome/desktop/interface" = with config.stylix.fonts ; { + "org/gnome/desktop/interface" = let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + serif = builtins.head fonts.serif; + sansSerif = builtins.head fonts.sansSerif; + monospace = builtins.head fonts.monospace; + in { # We show the same colours regardless of this setting, and the quick # settings tile is removed. The value is still used by Epiphany to # request dark mode for websites which support it. diff --git a/modules/grub/nixos.nix b/modules/grub/nixos.nix index 7b985be50..fa29d720c 100644 --- a/modules/grub/nixos.nix +++ b/modules/grub/nixos.nix @@ -1,10 +1,14 @@ { pkgs, config, lib, ... }: with config.lib.stylix; -with config.stylix.fonts; with config.lib.stylix.colors.withHashtag; let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + monospace = builtins.head fonts.monospace; + sansSerif = builtins.head fonts.sansSerif; + # Grub requires fonts to be converted to "PFF2 format" # This function takes a font { name, package } and produces a .pf2 file mkGrubFont = font: diff --git a/modules/gtk/hm.nix b/modules/gtk/hm.nix index b1e601756..034f730c8 100644 --- a/modules/gtk/hm.nix +++ b/modules/gtk/hm.nix @@ -37,10 +37,13 @@ in { # programs.dconf.enable = true; required in system config gtk = { enable = true; - font = { - inherit (config.stylix.fonts.sansSerif) package name; - size = config.stylix.fonts.sizes.applications; - }; + font = let + inherit (config.stylix) fonts; + sansSerif = builtins.head fonts.sansSerif; + in { + inherit (sansSerif) package name; + size = fonts.sizes.applications; + }; theme = { package = pkgs.adw-gtk3; name = "adw-gtk3"; diff --git a/modules/i3/hm.nix b/modules/i3/hm.nix index 96ccc1da4..cbad0fe31 100644 --- a/modules/i3/hm.nix +++ b/modules/i3/hm.nix @@ -9,9 +9,9 @@ let unfocused = base03; fonts = let - fonts = config.stylix.fonts; + inherit (config.stylix) fonts; in { - names = [ fonts.sansSerif.name ]; + names = lib.catAttrs "name" fonts.sansSerif; size = fonts.sizes.desktop * 1.0; }; diff --git a/modules/kde/hm.nix b/modules/kde/hm.nix index 120f27374..3811273ba 100644 --- a/modules/kde/hm.nix +++ b/modules/kde/hm.nix @@ -1,9 +1,12 @@ { pkgs, config, lib, ... }: -with config.stylix.fonts; with config.lib.stylix.colors; let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + sansSerif = builtins.head fonts.sansSerif; + monospace = builtins.head fonts.monospace; formatValue = value: if builtins.isBool value then if value then "true" else "false" diff --git a/modules/kitty/hm.nix b/modules/kitty/hm.nix index b4fc514e8..1ca907f25 100644 --- a/modules/kitty/hm.nix +++ b/modules/kitty/hm.nix @@ -22,9 +22,12 @@ in { config = lib.mkIf cfg.enable { programs.kitty = { - font = { - inherit (config.stylix.fonts.monospace) package name; - size = config.stylix.fonts.sizes.terminal; + font = let + inherit (config.stylix) fonts; + monospace = builtins.head fonts.monospace; + in { + inherit (monospace) package name; + size = fonts.sizes.terminal; }; settings.background_opacity = with config.stylix.opacity; "${builtins.toString terminal}"; extraConfig = '' diff --git a/modules/kmscon/nixos.nix b/modules/kmscon/nixos.nix index 1c74bc570..34e904feb 100644 --- a/modules/kmscon/nixos.nix +++ b/modules/kmscon/nixos.nix @@ -4,7 +4,7 @@ config.lib.stylix.mkEnableTarget "the kmscon virtual console" true; config.services.kmscon = lib.mkIf config.stylix.targets.kmscon.enable { - fonts = [config.stylix.fonts.monospace]; + fonts = config.stylix.fonts.monospace; extraConfig = let formatBase = name: diff --git a/modules/mako/hm.nix b/modules/mako/hm.nix index dc2f9a058..91eee7cf1 100644 --- a/modules/mako/hm.nix +++ b/modules/mako/hm.nix @@ -1,8 +1,10 @@ {pkgs, config, lib, options, ... }: with config.lib.stylix.colors.withHashtag; -with config.stylix.fonts; let + inherit (config.stylix) fonts; + inherit(fonts) sizes; + sansSerif = builtins.head fonts.sansSerif; makoOpacity = lib.toHexString ((((builtins.ceil (config.stylix.opacity.popups * 100)) * 255) / 100)); in { options.stylix.targets.mako.enable = diff --git a/modules/qutebrowser/hm.nix b/modules/qutebrowser/hm.nix index a6bf8cc94..630c10c95 100644 --- a/modules/qutebrowser/hm.nix +++ b/modules/qutebrowser/hm.nix @@ -12,11 +12,15 @@ let inverted-foreground = base00; error = base08; - info = base0B; secondary-info = base0C; warning = base0E; + inherit (config.stylix) fonts; + inherit (fonts) sizes; + serif = builtins.head fonts.serif; + sansSerif = builtins.head fonts.sansSerif; + monospace = builtins.head fonts.monospace; in { options.stylix.targets.qutebrowser.enable = config.lib.stylix.mkEnableTarget "Qutebrowser" true; diff --git a/modules/rofi/hm.nix b/modules/rofi/hm.nix index a71fdd36f..7b6035d50 100644 --- a/modules/rofi/hm.nix +++ b/modules/rofi/hm.nix @@ -1,7 +1,5 @@ { config, lib, ... }: -with config.stylix.fonts; - let inherit (config.lib.formats.rasi) mkLiteral; mkRgba = opacity: color: @@ -14,6 +12,10 @@ let mkLiteral "rgba ( ${r}, ${g}, ${b}, ${opacity} % )"; mkRgb = mkRgba "100"; + inherit (config.stylix) fonts; + inherit (fonts) sizes; + monospace = builtins.head fonts.monospace; + rofiOpacity = builtins.toString (builtins.ceil (config.stylix.opacity.popups * 100)); in { diff --git a/modules/sway/hm.nix b/modules/sway/hm.nix index 10e5e8775..20e766121 100644 --- a/modules/sway/hm.nix +++ b/modules/sway/hm.nix @@ -8,9 +8,12 @@ let focused = base0A; unfocused = base03; - fonts = { - names = [ config.stylix.fonts.sansSerif.name ]; - size = config.stylix.fonts.sizes.desktop + 0.0; + fonts = let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + in { + names = lib.catAttrs "name" fonts.sansSerif; + size = sizes.desktop + 0.0; }; in { diff --git a/modules/sxiv/hm.nix b/modules/sxiv/hm.nix index 44c8294ff..20a91e7c5 100644 --- a/modules/sxiv/hm.nix +++ b/modules/sxiv/hm.nix @@ -1,8 +1,9 @@ { config, lib, ... }: let - colors = config.lib.stylix.colors; - fonts = config.stylix.fonts; + inherit (config.lib.stylix) colors; + inherit (config.stylix) fonts; + sansSerif = builtins.head fonts.sansSerif; in { options.stylix.targets.sxiv.enable = config.lib.stylix.mkEnableTarget "Sxiv" true; @@ -12,7 +13,7 @@ in { properties = { "Sxiv.foreground" = "#${colors.base01}"; "Sxiv.background" = "#${colors.base04}"; - "Sxiv.font" = "${fonts.sansSerif.name}-${toString fonts.sizes.applications}"; + "Sxiv.font" = "${sansSerif.name}-${toString fonts.sizes.applications}"; }; }; }; diff --git a/modules/vim/hm.nix b/modules/vim/hm.nix index b67211d9a..636a83742 100644 --- a/modules/vim/hm.nix +++ b/modules/vim/hm.nix @@ -20,14 +20,16 @@ let }; vimOptions = let - fonts = config.stylix.fonts; + inherit (config.stylix) fonts; + inherit (fonts) sizes; + monospace = builtins.head fonts.monospace; in { plugins = [ themePlugin ]; extraConfig = '' set termguicolors colorscheme base16-stylix unlet g:colors_name - set guifont=${escape [" "] fonts.monospace.name}:h${toString fonts.sizes.terminal} + set guifont=${escape [" "] monospace.name}:h${toString sizes.terminal} ''; }; diff --git a/modules/vscode/hm.nix b/modules/vscode/hm.nix index 82954609c..d5c2ef5a6 100644 --- a/modules/vscode/hm.nix +++ b/modules/vscode/hm.nix @@ -1,8 +1,9 @@ {pkgs, config, lib, ... }: -with config.stylix.fonts; - let + inherit (config.stylix) fonts; + monospace = builtins.head fonts.monospace; + themeFile = config.lib.stylix.colors { template = ./template.mustache; extension = ".json"; diff --git a/modules/waybar/hm.nix b/modules/waybar/hm.nix index 69912a409..8f318eb55 100644 --- a/modules/waybar/hm.nix +++ b/modules/waybar/hm.nix @@ -1,7 +1,11 @@ { config, lib, ... }: with config.lib.stylix.colors.withHashtag; -with config.stylix.fonts; let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + + sansSerif = builtins.head fonts.sansSerif; + colorlessModules = place: '' .modules-${place} #workspaces button { border-bottom: 3px solid transparent; diff --git a/modules/wezterm/hm.nix b/modules/wezterm/hm.nix index afc24828a..beee73e6c 100644 --- a/modules/wezterm/hm.nix +++ b/modules/wezterm/hm.nix @@ -1,6 +1,12 @@ { config, lib, ... }: -let colors = config.lib.stylix.colors.withHashtag; +let + colors = config.lib.stylix.colors.withHashtag; + + inherit (config.stylix) fonts; + inherit (fonts) sizes; + + fontList = lib.strings.concatMapStringsSep ", " ({name,...}: "\"${name}\"") (fonts.monospace ++ fonts.emoji); in { options.stylix.targets.wezterm.enable = config.lib.stylix.mkEnableTarget "wezterm" config.programs.wezterm.enable; @@ -47,7 +53,6 @@ in { }; xdg.configFile."wezterm/wezterm.lua".text = with colors; - with config.stylix.fonts; lib.mkForce '' -- Generated by Stylix local wezterm = require("wezterm") @@ -62,10 +67,7 @@ in { -- See https://github.com/wez/wezterm/issues/2615 use_fancy_tab_bar = false, color_scheme = "stylix", - font = wezterm.font_with_fallback { - "${monospace.name}", - "${emoji.name}", - }, + font = wezterm.font_with_fallback { ${fontList} }, font_size = ${builtins.toString sizes.terminal}, window_background_opacity = ${ builtins.toString config.stylix.opacity.terminal diff --git a/modules/xfce/hm.nix b/modules/xfce/hm.nix index 37dbdbc43..4e332b229 100644 --- a/modules/xfce/hm.nix +++ b/modules/xfce/hm.nix @@ -6,7 +6,12 @@ config.lib.stylix.mkEnableTarget "Xfce" false; config = lib.mkIf config.stylix.targets.xfce.enable { - xfconf.settings = with config.stylix.fonts; { + xfconf.settings = let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + sansSerif = builtins.head fonts.sansSerif; + monospace = builtins.head fonts.monospace; + in { xfwm4 = { "general/title_font" = "${sansSerif.name} ${toString sizes.desktop}"; }; diff --git a/modules/xresources/hm.nix b/modules/xresources/hm.nix index c6c673fb3..90186cd1b 100644 --- a/modules/xresources/hm.nix +++ b/modules/xresources/hm.nix @@ -1,11 +1,15 @@ { config, lib, ... }: -{ +let + inherit (config.stylix) fonts; + inherit (fonts) sizes; + monospace = builtins.head fonts.monospace; +in { options.stylix.targets.xresources.enable = config.lib.stylix.mkEnableTarget "Xresources" true; config = lib.mkIf config.stylix.targets.xresources.enable { - xresources.properties = with config.lib.stylix.colors.withHashtag; with config.stylix.fonts; { + xresources.properties = with config.lib.stylix.colors.withHashtag; { "*.faceName" = monospace.name; "*.faceSize" = sizes.terminal; "*.renderFont" = true;