rose-pine-nix/modules/home-manager/gtk.nix

121 lines
3.5 KiB
Nix

{ config
, pkgs
, lib
, ...
}:
let
inherit (lib) ctp mkOption mkEnableOption types;
cfg = config.gtk.catppuccin;
enable = cfg.enable && config.gtk.enable;
# "dark" and "light" can be used alongside the regular accents
cursorAccentType = ctp.mergeEnums ctp.types.accentOption (lib.types.enum [ "dark" "light" ]);
in
{
options.gtk.catppuccin =
ctp.mkCatppuccinOpt "gtk"
// {
accent = ctp.mkAccentOpt "gtk";
size = mkOption {
type = types.enum [ "standard" "compact" ];
default = "standard";
description = "Catppuccin size variant for gtk";
};
tweaks = mkOption {
type = types.listOf (types.enum [ "black" "rimless" "normal" ]);
default = [ "normal" ];
description = "Catppuccin tweaks for gtk";
};
gnomeShellTheme = mkEnableOption "Catppuccin gtk theme for GNOME Shell";
cursor = ctp.mkCatppuccinOpt "gtk cursors"
// {
accent = ctp.mkBasicOpt "accent" cursorAccentType "gtk cursors";
};
icon = ctp.mkCatppuccinOpt "gtk modified Papirus icon theme"
// {
accent = ctp.mkAccentOpt "gtk modified Papirus icon theme";
};
};
config = lib.mkIf enable {
gtk = {
theme =
let
flavourUpper = ctp.mkUpper cfg.flavour;
accentUpper = ctp.mkUpper cfg.accent;
sizeUpper = ctp.mkUpper cfg.size;
# use the light gtk theme for latte
gtkTheme =
if cfg.flavour == "latte"
then "Light"
else "Dark";
in
{
name = "Catppuccin-${flavourUpper}-${sizeUpper}-${accentUpper}-${gtkTheme}";
package = pkgs.catppuccin-gtk.override {
inherit (cfg) size tweaks;
accents = [ cfg.accent ];
variant = cfg.flavour;
};
};
cursorTheme =
let
flavourUpper = ctp.mkUpper cfg.cursor.flavour;
accentUpper = ctp.mkUpper cfg.cursor.accent;
in
lib.mkIf cfg.cursor.enable {
name = "Catppuccin-${flavourUpper}-${accentUpper}-Cursors";
package = pkgs.catppuccin-cursors.${cfg.cursor.flavour + accentUpper};
};
iconTheme =
let
# use the light icon theme for latte
polarity =
if cfg.icon.flavour == "latte"
then "Light"
else "Dark";
in
lib.mkIf cfg.icon.enable {
name = "Papirus-${polarity}";
package = pkgs.catppuccin-papirus-folders.override {
flavor = cfg.icon.flavour;
inherit (cfg.icon) accent;
};
};
};
xdg.configFile =
let
gtk4Dir = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0";
in
{
"gtk-4.0/assets".source = "${gtk4Dir}/assets";
"gtk-4.0/gtk.css".source = "${gtk4Dir}/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${gtk4Dir}/gtk-dark.css";
};
home.packages = lib.mkIf cfg.gnomeShellTheme [ pkgs.gnomeExtensions.user-themes ];
dconf.settings = lib.mkIf cfg.gnomeShellTheme {
"org/gnome/shell" = {
disable-user-extensions = false;
enabled-extensions = [
"user-theme@gnome-shell-extensions.gcampax.github.com"
];
};
"org/gnome/shell/extensions/user-theme" = {
inherit (config.gtk.theme) name;
};
"org/gnome/desktop/interface" = {
color-scheme =
if cfg.flavour == "latte"
then "default"
else "prefer-dark";
};
};
};
}