marleyos/modules/home/options/theme/default.nix

139 lines
3.6 KiB
Nix

{
lib,
config,
system,
pkgs,
...
}: let
inherit (lib.snowfall.system) is-linux;
cfg = config.marleyos.theme;
# https://github.com/nix-community/home-manager/blob/master/modules/misc/gtk.nix
iconThemeType = lib.types.submodule {
options = {
package = lib.mkOption {
type = with lib.types; nullOr package;
default = null;
example = pkgs.gnome.adwaita-icon-theme;
description = ''
Package providing the icon theme. This package will be installed to
your profile. If `null` then the theme is assumed to already be
available in your profile.
'';
};
name = lib.mkOption {
type = with lib.types; str;
example = "Adwaita";
description = "The name of the icon theme within the package.";
};
};
};
mkFontType = type: default: (lib.mkOption {
type = lib.types.submodule {
options = {
package = lib.mkOption {
type = with lib.types; package;
default = default.package;
description = "The package providing the ${type} font.";
};
name = lib.mkOption {
type = with lib.types; str;
default = default.name;
description = "The name of the ${type} font.";
};
ligatures = lib.mkOption {
type = with lib.types; listOf str;
default = default.ligatures;
description = "The ligature features to enable for programs that support it.";
};
};
};
inherit default;
description = "The ${type} font to use.";
});
in {
options.marleyos.theme = {
icons = lib.mkOption {
type = with lib.types; nullOr iconThemeType;
default = null;
description = "The icon theme to use.";
};
fonts = lib.mkOption {
type = with lib.types;
submodule {
options = {
monospace = mkFontType "monospace" {
package = pkgs.maple-mono-NF;
name = "Maple Mono NF";
ligatures = [];
};
sansSerif = mkFontType "sans-serif" {
package = pkgs.dm-sans;
name = "DeepMind Sans";
ligatures = [];
};
serif = mkFontType "serif" {
package = pkgs.eb-garamond;
name = "EB Garamond";
ligatures = [];
};
emoji = mkFontType "emoji" {
package = pkgs.whatsapp-emoji-font;
name = "Apple Color Emoji";
ligatures = [];
};
};
};
default = {};
description = "Default font configuration.";
};
};
config = lib.mkMerge [
# icons
(lib.mkIf ((cfg.icons != null) && (is-linux system)) {
gtk = lib.mkDefault {
iconTheme = {
inherit (cfg.icons) name;
package = lib.mkIf (cfg.icons.package != null) cfg.icons.package;
};
};
services.dunst = lib.mkDefault {
iconTheme = {
inherit (cfg.icons) name;
package = lib.mkIf (cfg.icons.package != null) cfg.icons.package;
};
};
})
# fonts
{
home.packages = [
cfg.fonts.monospace.package
cfg.fonts.sansSerif.package
cfg.fonts.serif.package
cfg.fonts.emoji.package
];
fonts.fontconfig = lib.mkIf (is-linux system) {
enable = true;
defaultFonts = {
monospace = [cfg.fonts.monospace.name];
sansSerif = [cfg.fonts.sansSerif.name];
serif = [cfg.fonts.serif.name];
emoji = [cfg.fonts.emoji.name];
};
};
}
];
}