From e03b8873cbd86986e99fc31ce81114f3d396d560 Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Sun, 6 Apr 2025 14:03:41 +0200 Subject: [PATCH] style: big gtk rework I hate gtk --- modules/style/fonts.nix | 1 - modules/style/gtk.nix | 26 +++++++++++++++++--- modules/style/theming.nix | 50 +++++++++++++++++++++++++++------------ 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/modules/style/fonts.nix b/modules/style/fonts.nix index 4bd9a68..18727cb 100644 --- a/modules/style/fonts.nix +++ b/modules/style/fonts.nix @@ -58,7 +58,6 @@ in { (pkgs) material-icons material-design-icons - papirus-icon-theme lexend noto-fonts noto-fonts-cjk-sans diff --git a/modules/style/gtk.nix b/modules/style/gtk.nix index d079c06..7440c41 100644 --- a/modules/style/gtk.nix +++ b/modules/style/gtk.nix @@ -7,9 +7,9 @@ inherit (lib.options) mkOption mkEnableOption; inherit (lib.types) str package; inherit (lib.modules) mkIf; - cfg = config.modules.theme.gtk; + cfg = config.modules.theming.gtk; in { - options.modules.theme.gtk = { + options.modules.theming.gtk = { enable = mkEnableOption "Wether to enable GTK theming"; theme = { name = mkOption { @@ -32,7 +32,7 @@ in { }; package = mkOption { description = "The GTK icon theme package"; - default = pkgs.catppuccin-papirus-folders; + default = pkgs.papirus-icon-theme; type = package; }; }; @@ -40,5 +40,25 @@ in { config = mkIf cfg.enable { # NOTE: we need this or gtk breaks programs.dconf.enable = true; + + environment = { + systemPackages = builtins.attrValues { + inherit + (pkgs) + gruvbox-gtk-theme + papirus-icon-theme + ; + }; + variables = let + cursorSize = 32; + in { + GTK_THEME = "Gruvbox-Dark"; + XCURSOR_THEME = "BreezeX-RosePine-Linux"; + XCURSOR_SIZE = cursorSize; + + HYPRCURSOR_THEME = "BreezeX-RosePine-Linux"; + HYPRCURSOR_SIZE = cursorSize; + }; + }; }; } diff --git a/modules/style/theming.nix b/modules/style/theming.nix index ce272d4..5e3655e 100644 --- a/modules/style/theming.nix +++ b/modules/style/theming.nix @@ -7,9 +7,31 @@ inherit (lib.modules) mkMerge mkIf; inherit (lib.options) mkEnableOption; cfg = config.modules.theming; + inherit (builtins) toString isBool; + inherit (lib) boolToString escape generators; + + toGtk3Ini = generators.toINI { + mkKeyValue = key: value: let + value' = + if isBool value + then boolToString value + else toString value; + in "${escape ["="] key}=${value'}"; + }; + + gtkIni = { + gtk-application-prefer-dark-theme = 1; + gtk-font-name = "Lexend 11"; + gtk-icon-theme-name = "Papirus-Dark"; + gtk-xft-antialias = 1; + gtk-xft-hinting = 1; + gtk-xft-hintstyle = "hintslight"; + gtk-xft-rgba = "rgb"; + gtk-cursor-theme-name = "BreezeX-RosePine-Linux"; + gtk-theme-name = "Gruvbox-Dark"; + }; in { options.modules.theming = { - gtk.enable = mkEnableOption "gtk theming"; qt.enable = mkEnableOption "qt theming"; }; config = mkMerge [ @@ -19,25 +41,23 @@ in { inherit (pkgs) rose-pine-cursor; }; etc = { - "xdg/gtk-4.0/settings.ini".text = '' - [Settings] - gtk-application-prefer-dark-theme=true - gtk-cursor-theme-name=BreezeX-RosePine-Linux - ''; - - "xdg/gtk-3.0/settings.ini".text = '' - [Settings] - gtk-application-prefer-dark-theme=true - gtk-cursor-theme-name=BreezeX-RosePine-Linux - ''; + "xdg/gtk-4.0/settings.ini".text = toGtk3Ini { + Settings = gtkIni; + }; + "xdg/gtk-3.0/settings.ini".text = toGtk3Ini { + Settings = gtkIni; + }; "xdg/gtk-2.0/gtkrc".text = '' - gtk-cursor-theme-name = "BreezeX-RosePine-Linux" - gtk-cursor-theme-size = 30 + gtk-cursor-theme-name = BreezeX-RosePine-Linux + gtk-cursor-theme-size = 32 + gtk-theme-name = Gruvbox-Dark + gtk-icon-theme-name = Papirus-Dark + gtk-font-name = Lexend 11 ''; "xdg/Xresources".text = '' - Xcursor.size: 30 + Xcursor.size: 32 Xcursor.theme: BreezeX-RosePine-Linux ''; };