Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fonts: support fallback fonts #201

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions docs/src/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,25 @@ The default combination of fonts is:
```nix
{
stylix.fonts = {
serif = {
serif = [{
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
}];

sansSerif = {
sansSerif = [{
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
}];

monospace = {
monospace = [{
package = pkgs.dejavu_fonts;
name = "DejaVu Sans Mono";
};
}];

emoji = {
emoji = [{
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
}];
};
Comment on lines 109 to 129
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The following format would better highlight the list:

  sytlix.fonts = {
    serif = [
      {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Serif";
      }
    ];

    sansSerif = [
      {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Sans";
      }
    ];

    monospace = [
      {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Sans Mono";
      }
    ];

    emoji = [
      {
        package = pkgs.noto-fonts-emoji;
        name = "Noto Color Emoji";
      }
    ];
  };

}
```
Expand Down
12 changes: 12 additions & 0 deletions modules/alacritty/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion modules/avizo/hm.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{ config, lib, options, ... }:

with config.lib.stylix.colors;
with config.stylix.fonts;
let
aviOpacity = toString config.stylix.opacity.popups;
in
Expand Down
45 changes: 22 additions & 23 deletions modules/bemenu/hm.nix
Original file line number Diff line number Diff line change
@@ -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 = {
Expand All @@ -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)}'"
];
Comment on lines -29 to +48
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you explain why the previous programs.bemenu.settings implementation was replaced?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably a mistake I made while fixing merge conflicts

};
}
4 changes: 3 additions & 1 deletion modules/dunst/hm.nix
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
3 changes: 2 additions & 1 deletion modules/emacs/hm.nix
Original file line number Diff line number Diff line change
@@ -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
{
Expand Down
10 changes: 6 additions & 4 deletions modules/firefox/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
7 changes: 5 additions & 2 deletions modules/foot/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
};
Expand Down
7 changes: 5 additions & 2 deletions modules/fuzzel/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
};
};
Expand Down
9 changes: 7 additions & 2 deletions modules/gnome/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 5 additions & 1 deletion modules/grub/nixos.nix
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
11 changes: 7 additions & 4 deletions modules/gtk/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
4 changes: 2 additions & 2 deletions modules/i3/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down
5 changes: 4 additions & 1 deletion modules/kde/hm.nix
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
9 changes: 6 additions & 3 deletions modules/kitty/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ''
Expand Down
2 changes: 1 addition & 1 deletion modules/kmscon/nixos.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 3 additions & 1 deletion modules/mako/hm.nix
Original file line number Diff line number Diff line change
@@ -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 =
Expand Down
6 changes: 5 additions & 1 deletion modules/qutebrowser/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 4 additions & 2 deletions modules/rofi/hm.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
{ config, lib, ... }:

with config.stylix.fonts;

let
inherit (config.lib.formats.rasi) mkLiteral;
mkRgba = opacity: color:
Expand All @@ -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
{
Expand Down
9 changes: 6 additions & 3 deletions modules/sway/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
7 changes: 4 additions & 3 deletions modules/sxiv/hm.nix
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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}";
};
};
};
Expand Down
6 changes: 4 additions & 2 deletions modules/vim/hm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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}
'';
};

Expand Down
Loading