home-cursor: improve icon compatibility
The current cursor configuration poorly accomodate applications not following the XDG icon theme spec. As a result, some applications fail to locate user defined icons and themes. To address this, symlinks from icon directories in the provided cursor package was to $HOME/.icons were added added for greater compatibility with applications using hardcoded icons directories. This approach was chosen to allow for coexistence of declarative and non-declarative icon files in the icons directory. In addition, symlinks of icon directories were mirrored in $XDG_DATA_HOME/.icons for backwards compatibility. As per the XDG icon theme spec, applications are to search in $HOME/.icons first for icons and themes so the existing behavior should not break for XDG compliant applications[1]. [1] https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html
This commit is contained in:
parent
6a94c1a597
commit
bdb5bcad01
|
@ -52,6 +52,27 @@ let
|
||||||
escapeShellArg cfg.x11.defaultCursor
|
escapeShellArg cfg.x11.defaultCursor
|
||||||
}";
|
}";
|
||||||
|
|
||||||
|
defaultIndexThemePackage = pkgs.writeTextFile {
|
||||||
|
name = "index.theme";
|
||||||
|
destination = "/share/icons/default/index.theme";
|
||||||
|
# Set name in icons theme, for compatibility with AwesomeWM etc. See:
|
||||||
|
# https://github.com/nix-community/home-manager/issues/2081
|
||||||
|
# https://wiki.archlinux.org/title/Cursor_themes#XDG_specification
|
||||||
|
text = ''
|
||||||
|
[Icon Theme]
|
||||||
|
Name=Default
|
||||||
|
Comment=Default Cursor Theme
|
||||||
|
Inherits=${cfg.name}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
iconMappings = let
|
||||||
|
knownFiles = filterAttrs (_: type: type != "unknown")
|
||||||
|
(builtins.readDir "${cfg.package}/share/icons");
|
||||||
|
in mapAttrs'
|
||||||
|
(n: _: nameValuePair ".icons/${n}" "${cfg.package}/share/icons/${n}")
|
||||||
|
knownFiles;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
meta.maintainers = [ maintainers.polykernel maintainers.league ];
|
meta.maintainers = [ maintainers.polykernel maintainers.league ];
|
||||||
|
|
||||||
|
@ -120,17 +141,7 @@ in {
|
||||||
(hm.assertions.assertPlatform "home.pointerCursor" pkgs platforms.linux)
|
(hm.assertions.assertPlatform "home.pointerCursor" pkgs platforms.linux)
|
||||||
];
|
];
|
||||||
|
|
||||||
home.packages = [ cfg.package ];
|
home.packages = [ cfg.package defaultIndexThemePackage ];
|
||||||
|
|
||||||
# Set name in icons theme, for compatibility with AwesomeWM etc. See:
|
|
||||||
# https://github.com/nix-community/home-manager/issues/2081
|
|
||||||
# https://wiki.archlinux.org/title/Cursor_themes#XDG_specification
|
|
||||||
xdg.dataFile."icons/default/index.theme".text = ''
|
|
||||||
[icon theme]
|
|
||||||
Name=Default
|
|
||||||
Comment=Default Cursor Theme
|
|
||||||
Inherits=${cfg.name}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Set directory to look for cursors in, needed for some applications
|
# Set directory to look for cursors in, needed for some applications
|
||||||
# that are unable to find cursors otherwise. See:
|
# that are unable to find cursors otherwise. See:
|
||||||
|
@ -142,6 +153,21 @@ in {
|
||||||
XCURSOR_SIZE = mkDefault cfg.size;
|
XCURSOR_SIZE = mkDefault cfg.size;
|
||||||
XCURSOR_THEME = mkDefault cfg.name;
|
XCURSOR_THEME = mkDefault cfg.name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Add symlinks of cursor icons to subdirectories in $HOME/.icons, needed for
|
||||||
|
# backwards compatibility with some applications. See:
|
||||||
|
# https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html
|
||||||
|
home.file = (mapAttrs (_: source: { inherit source; }) iconMappings) // {
|
||||||
|
".icons/default/index.theme".source =
|
||||||
|
"${defaultIndexThemePackage}/share/icons/default/index.theme";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Add cursor icon links to $XDG_DATA_HOME as well for redundancy.
|
||||||
|
xdg.dataFile = (mapAttrs (_: source: { inherit source; }) iconMappings)
|
||||||
|
// {
|
||||||
|
".icons/default/index.theme".source =
|
||||||
|
"${defaultIndexThemePackage}/share/icons/default/index.theme";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
(mkIf cfg.x11.enable {
|
(mkIf cfg.x11.enable {
|
||||||
|
|
Loading…
Reference in a new issue