From 0b72dd7dee30cfea602d002122f2b9f04f0f875a Mon Sep 17 00:00:00 2001 From: Myned Date: Wed, 1 Jan 2025 11:48:29 -0600 Subject: [PATCH] icons: partially implement home.pointerCursor to fix XCURSOR_* issues Signed-off-by: Myned --- options/custom/settings/default.nix | 1 + options/custom/settings/gtk/default.nix | 27 ++++++------ options/custom/settings/icons.nix | 55 +++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 options/custom/settings/icons.nix diff --git a/options/custom/settings/default.nix b/options/custom/settings/default.nix index 4d41c38..0dbadd5 100644 --- a/options/custom/settings/default.nix +++ b/options/custom/settings/default.nix @@ -19,6 +19,7 @@ with lib; { dconf.enable = true; fonts.enable = true; gtk.enable = true; + icons.enable = true; qt.enable = true; #// stylix.enable = true; xdg.enable = true; diff --git a/options/custom/settings/gtk/default.nix b/options/custom/settings/gtk/default.nix index a5fa3b5..e5226a7 100644 --- a/options/custom/settings/gtk/default.nix +++ b/options/custom/settings/gtk/default.nix @@ -14,28 +14,18 @@ in { css = readFile ./style.css; in { enable = true; - gtk3.extraCss = css; - - gtk4 = { - extraConfig.gtk-hint-font-metrics = 1; # Fix blurry fonts - extraCss = css; - }; font = with config.custom.settings.fonts; { name = sans-serif; size = 12; }; - iconTheme = { - name = "Papirus-Dark"; - package = pkgs.papirus-icon-theme; + cursorTheme = with config.custom.settings.icons.cursor; { + inherit name package size; }; - # BUG: home.pointerCursor breaks XCURSOR_PATH for some child windows, so avoid that workaround - cursorTheme = { - size = 24; - name = "GoogleDot-Black"; - package = pkgs.google-cursor; + iconTheme = with config.custom.settings.icons.icon; { + inherit name package; }; theme = { @@ -45,6 +35,15 @@ in { # https://github.com/nix-community/home-manager/issues/5133 #// package = pkgs.adw-gtk3; }; + + gtk3 = { + extraCss = css; + }; + + gtk4 = { + extraConfig.gtk-hint-font-metrics = 1; # Fix blurry fonts + extraCss = css; + }; }; }; } diff --git a/options/custom/settings/icons.nix b/options/custom/settings/icons.nix new file mode 100644 index 0000000..f71dd53 --- /dev/null +++ b/options/custom/settings/icons.nix @@ -0,0 +1,55 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.custom.settings.icons; +in { + options.custom.settings.icons = { + enable = mkOption {default = false;}; + + cursor = { + # https://github.com/ful1e5/Google_Cursor + name = mkOption {default = "GoogleDot-Black";}; + package = mkOption {default = pkgs.google-cursor;}; + size = mkOption {default = 24;}; + }; + + icon = { + # https://github.com/PapirusDevelopmentTeam/papirus-icon-theme + name = mkOption {default = "Papirus-Dark";}; + package = mkOption {default = pkgs.papirus-icon-theme;}; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = [cfg.cursor.package cfg.icon.package]; + + # BUG: home.pointerCursor breaks XCURSOR_PATH for some child windows, so avoid that workaround + # HACK: Copy home-manager index.theme without setting XCURSOR_* environment variables + home-manager.sharedModules = let + # https://github.com/nix-community/home-manager/blob/59a4c43e9ba6db24698c112720a58a334117de83/modules/config/home-cursor.nix#L66C3-L77C8 + defaultIndexThemePackage = pkgs.writeTextFile { + name = "index.theme"; + destination = "/share/icons/default/index.theme"; + + text = '' + [Icon Theme] + Name=Default + Comment=Default Cursor Theme + Inherits=${cfg.cursor.name} + ''; + }; + in [ + { + # https://github.com/nix-community/home-manager/blob/59a4c43e9ba6db24698c112720a58a334117de83/modules/config/home-cursor.nix#L161 + home.file.".icons/default/index.theme".source = "${defaultIndexThemePackage}/share/icons/default/index.theme"; + home.file.".icons/${cfg.cursor.name}".source = "${cfg.cursor.package}/share/icons/${cfg.cursor.name}"; + xdg.dataFile."icons/default/index.theme".source = "${defaultIndexThemePackage}/share/icons/default/index.theme"; + xdg.dataFile."icons/${cfg.cursor.name}".source = "${cfg.cursor.package}/share/icons/${cfg.cursor.name}"; + } + ]; + }; +}