169 lines
4 KiB
Nix
169 lines
4 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib)
|
|
types
|
|
mkOption
|
|
literalMD
|
|
mkMerge
|
|
mkIf
|
|
mkDefault
|
|
;
|
|
cfg = config.marleyos.theme;
|
|
|
|
colorThemes = lib.types.enum [
|
|
"rose-pine"
|
|
];
|
|
|
|
colorThemeType = types.submodule {
|
|
options = {
|
|
base = mkOption {
|
|
type = colorThemes;
|
|
example = "rose-pine";
|
|
description = literalMD ''
|
|
The color theme to use. This should match the base of the enable
|
|
options provided by the input's module. For instance, the rose-pine
|
|
home-manager module provides the {option}`rose-pine.enable` base
|
|
option and the {option}`programs.gtk.rose-pine.enable` option.
|
|
'';
|
|
};
|
|
|
|
flavor = mkOption {
|
|
type = with types; nullOr str;
|
|
default = null;
|
|
example = "moon";
|
|
description = "The theme flavor to use, if applicable.";
|
|
};
|
|
|
|
accent = mkOption {
|
|
type = with types; nullOr str;
|
|
default = null;
|
|
example = "rose";
|
|
description = "The theme accent to use, if applicable.";
|
|
};
|
|
};
|
|
};
|
|
|
|
mkColorThemeOpt =
|
|
mode: flavor:
|
|
(mkOption {
|
|
type = with types; either str colorThemeType;
|
|
default = {
|
|
base = "rose-pine";
|
|
inherit flavor;
|
|
};
|
|
description = "The color theme to use in ${mode} mode.";
|
|
});
|
|
|
|
# https://github.com/nix-community/home-manager/blob/master/modules/misc/gtk.nix
|
|
iconThemeType = types.submodule {
|
|
options = {
|
|
package = mkOption {
|
|
type = with 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 = mkOption {
|
|
type = with types; str;
|
|
example = "Adwaita";
|
|
description = "The name of the icon theme within the package.";
|
|
};
|
|
};
|
|
};
|
|
in
|
|
{
|
|
options.marleyos.theme = {
|
|
colors = {
|
|
default = mkOption {
|
|
type = with types; str;
|
|
default = "dark";
|
|
description = "Whether to prefer the light or dark theme.";
|
|
};
|
|
|
|
light = mkColorThemeOpt "light" "dawn";
|
|
dark = mkColorThemeOpt "dark" "main";
|
|
|
|
base = mkOption {
|
|
type = colorThemes;
|
|
};
|
|
flavor = mkOption {
|
|
type = with types; nullOr str;
|
|
};
|
|
accent = mkOption {
|
|
type = with types; nullOr str;
|
|
};
|
|
|
|
isRosePine = mkOption {
|
|
type = with types; bool;
|
|
};
|
|
};
|
|
|
|
icons = mkOption {
|
|
type = with types; nullOr iconThemeType;
|
|
default = null;
|
|
description = "The icon theme to use.";
|
|
};
|
|
|
|
pinentry = mkOption {
|
|
type = with types; package;
|
|
default = pkgs.pinentry-gtk2;
|
|
description = "The pinentry package to use.";
|
|
};
|
|
};
|
|
|
|
config = mkMerge [
|
|
# colors
|
|
{
|
|
marleyos.theme.colors = rec {
|
|
inherit (cfg.colors."${cfg.colors.default}") base;
|
|
inherit (cfg.colors."${cfg.colors.default}") flavor;
|
|
inherit (cfg.colors."${cfg.colors.default}") accent;
|
|
|
|
# HACK: Need to come up with a better solution
|
|
isRosePine = base == "rose-pine";
|
|
};
|
|
}
|
|
|
|
# icons
|
|
(mkIf (cfg.icons != null) {
|
|
gtk = mkIf config.gtk.enable (mkDefault {
|
|
iconTheme = {
|
|
inherit (cfg.icons) name;
|
|
package = mkIf (cfg.icons.package != null) cfg.icons.package;
|
|
};
|
|
});
|
|
|
|
services.dunst = mkIf config.services.dunst.enable (mkDefault {
|
|
iconTheme = {
|
|
inherit (cfg.icons) name;
|
|
package = mkIf (cfg.icons.package != null) cfg.icons.package;
|
|
};
|
|
});
|
|
})
|
|
|
|
# pinentry
|
|
{
|
|
home.packages = [
|
|
cfg.pinentry
|
|
];
|
|
|
|
programs.rbw = mkIf config.programs.rbw.enable (mkDefault {
|
|
settings.pinentry = cfg.pinentry;
|
|
});
|
|
|
|
services.gpg-agent = mkIf config.services.gpg-agent.enable (mkDefault {
|
|
pinentryPackage = cfg.pinentry;
|
|
});
|
|
}
|
|
];
|
|
}
|