{ 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}"; } ]; }; }