1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-03-31 04:04:32 +00:00
home-manager/modules/config/home-cursor.nix

257 lines
7.8 KiB
Nix
Raw Normal View History

home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
{ config, options, lib, pkgs, ... }:
let
2025-02-18 22:35:53 +00:00
inherit (lib)
mkEnableOption mkOption mkIf mkMerge mkDefault mkAliasOptionModule types
literalExpression escapeShellArg hm getAttrFromPath any optional;
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
cfg = config.home.pointerCursor;
2025-02-18 22:36:56 +00:00
enable = if (lib.versionOlder config.home.stateVersion "25.05") then
# respect .enable if it is declared
if (any (x: x ? enable) options.home.pointerCursor.definitions) then
cfg.enable
else
cfg != null
else
(cfg ? enable) && cfg.enable;
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
pointerCursorModule = types.submodule {
options = {
2025-02-18 22:36:56 +00:00
enable = mkEnableOption "cursor config generation";
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
package = mkOption {
type = types.package;
2025-02-18 22:35:53 +00:00
example = literalExpression "pkgs.vanilla-dmz";
description = "Package providing the cursor theme.";
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
name = mkOption {
type = types.str;
example = "Vanilla-DMZ";
description = "The cursor name within the package.";
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
size = mkOption {
type = types.int;
default = 32;
example = 64;
description = "The cursor size.";
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
x11 = {
enable = mkEnableOption ''
x11 config generation for {option}`home.pointerCursor`
'';
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
defaultCursor = mkOption {
type = types.str;
default = "left_ptr";
example = "X_cursor";
description = "The default cursor file to use within the package.";
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
};
gtk = {
enable = mkEnableOption ''
gtk config generation for {option}`home.pointerCursor`
'';
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
2025-02-18 22:37:18 +00:00
dotIcons = {
enable = mkEnableOption ''
`.icons` config generation for {option}`home.pointerCursor`
'' // {
default = true;
};
};
hyprcursor = {
enable = mkEnableOption "hyprcursor config generation";
size = mkOption {
type = types.nullOr types.int;
example = 32;
default = null;
description = "The cursor size for hyprcursor.";
};
};
2025-02-21 22:16:56 +00:00
sway = {
enable = mkEnableOption
"sway config generation for {option}`home.pointerCursor`";
};
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
};
};
2025-02-18 22:36:56 +00:00
cursorPath = "${cfg.package}/share/icons/${escapeShellArg cfg.name}/cursors/${
2025-02-18 22:35:53 +00:00
escapeShellArg cfg.x11.defaultCursor
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
}";
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}
'';
};
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
in {
meta.maintainers = [ lib.maintainers.league ];
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
imports = [
2025-02-18 22:35:53 +00:00
(mkAliasOptionModule [ "xsession" "pointerCursor" "package" ] [
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
"home"
"pointerCursor"
"package"
])
2025-02-18 22:35:53 +00:00
(mkAliasOptionModule [ "xsession" "pointerCursor" "name" ] [
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
"home"
"pointerCursor"
"name"
])
2025-02-18 22:35:53 +00:00
(mkAliasOptionModule [ "xsession" "pointerCursor" "size" ] [
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
"home"
"pointerCursor"
"size"
])
2025-02-18 22:35:53 +00:00
(mkAliasOptionModule [ "xsession" "pointerCursor" "defaultCursor" ] [
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
"home"
"pointerCursor"
"x11"
"defaultCursor"
])
];
options = {
home.pointerCursor = mkOption {
type = types.nullOr pointerCursorModule;
2025-02-18 22:36:56 +00:00
default = if (lib.versionOlder config.home.stateVersion "25.05") then
null
else
{ };
description = ''
2025-02-18 22:36:56 +00:00
Cursor configuration.
2023-01-24 05:30:04 -05:00
Top-level options declared under this submodule are backend independent
options. Options declared under namespaces such as `x11`
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
are backend specific options. By default, only backend independent cursor
configurations are generated. If you need configurations for specific
backends, you can toggle them via the enable option. For example,
[](#opt-home.pointerCursor.x11.enable)
will enable x11 cursor configurations.
Note that this will merely generate the cursor configurations.
To apply the configurations, the relevant subsytems must also be configured.
For example, [](#opt-home.pointerCursor.gtk.enable) will generate
the gtk cursor configuration, but [](#opt-gtk.enable) needs
to be set for it to be applied.
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
'';
};
};
2025-02-18 22:36:56 +00:00
config = mkMerge [
(mkIf enable (mkMerge [
{
assertions = [
(hm.assertions.assertPlatform "home.pointerCursor" pkgs
lib.platforms.linux)
];
2025-02-18 22:36:56 +00:00
home.packages = [ cfg.package defaultIndexThemePackage ];
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
2025-02-18 22:36:56 +00:00
home.sessionVariables = {
XCURSOR_SIZE = mkDefault cfg.size;
XCURSOR_THEME = mkDefault cfg.name;
};
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
2025-02-18 22:36:56 +00:00
# Set directory to look for cursors in, needed for some applications
# that are unable to find cursors otherwise. See:
# https://github.com/nix-community/home-manager/issues/2812
# https://wiki.archlinux.org/title/Cursor_themes#Environment_variable
home.sessionSearchVariables.XCURSOR_PATH =
[ "${config.home.profileDirectory}/share/icons" ];
# Add cursor icon link to $XDG_DATA_HOME/icons as well for redundancy.
xdg.dataFile."icons/default/index.theme".source =
"${defaultIndexThemePackage}/share/icons/default/index.theme";
xdg.dataFile."icons/${cfg.name}".source =
"${cfg.package}/share/icons/${cfg.name}";
2025-02-18 22:37:18 +00:00
}
2025-02-18 22:36:56 +00:00
2025-02-18 22:37:18 +00:00
(mkIf cfg.dotIcons.enable {
2025-02-18 22:36:56 +00:00
# Add symlink of cursor icon directory to $HOME/.icons, needed for
# backwards compatibility with some applications. See:
# https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html
home.file.".icons/default/index.theme".source =
"${defaultIndexThemePackage}/share/icons/default/index.theme";
home.file.".icons/${cfg.name}".source =
"${cfg.package}/share/icons/${cfg.name}";
2025-02-18 22:37:18 +00:00
})
2025-02-18 22:36:56 +00:00
(mkIf cfg.x11.enable {
xsession.profileExtra = ''
${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cursorPath} ${
toString cfg.size
}
'';
2025-02-18 22:36:56 +00:00
xresources.properties = {
"Xcursor.theme" = cfg.name;
"Xcursor.size" = cfg.size;
};
})
(mkIf cfg.gtk.enable {
gtk.cursorTheme = mkDefault { inherit (cfg) package name size; };
})
(mkIf cfg.hyprcursor.enable {
home.sessionVariables = {
HYPRCURSOR_THEME = cfg.name;
HYPRCURSOR_SIZE = if cfg.hyprcursor.size != null then
cfg.hyprcursor.size
else
cfg.size;
};
})
(mkIf cfg.sway.enable {
wayland.windowManager.sway = {
config = {
seat = {
"*" = {
xcursor_theme =
"${cfg.name} ${toString config.gtk.cursorTheme.size}";
};
2025-02-21 22:16:56 +00:00
};
};
};
2025-02-18 22:36:56 +00:00
})
]))
{
warnings = (optional (any (x:
getAttrFromPath
([ "xsession" "pointerCursor" ] ++ [ x ] ++ [ "isDefined" ])
options) [ "package" "name" "size" "defaultCursor" ]) ''
The option `xsession.pointerCursor` has been merged into `home.pointerCursor` and will be removed
in the future. Please change to set `home.pointerCursor` directly and enable `home.pointerCursor.x10.enable`
to generate x10 specific cursor configurations. You can refer to the documentation for more details.
'') ++ (optional ((lib.versionAtLeast config.home.stateVersion "25.05")
&& (cfg == null)) ''
Setting home.pointerCursor to null is deprecated.
Please update your configuration so that
home.pointerCursor.enable = false;
'');
}
];
home.pointerCursor: init (#2891) * home.pointerCursor: init The current architecture for cursor configurations is composed of individual options for different backends. For example, X specific settings are managed under `xsession.pointerCursor` and gtk specific settings are managed under `gtk.cursorTheme`. While this architecture is modular, it causes duplication of similar structures for each component. In theory, this provides flexibility because the components are independent of each other which can be arranged in arbitrary ways to achieve the desired result. However in practice, users wish to have one cursor theme applied to their entire system The duplication of options correspond to duplication of settings on the user side and it becomes a burden to keep track of all necessary settings. This commit is an attempt to unify cursor configurations for different window systems and GUI toolkits based on https://github.com/nix-community/home-manager/pull/2481#issuecomment-978917480. `home.pointerCursor` is introduced as the interface for all cursor configurations. It contain all options relevant to cursor themes with eneral options delcared under `home.pointerCursor.*` and backend specific options declared under `home.pointerCursor.<backend>.*`. By default, a backend independent configuration is generated. Backend specific configurations can be toggled via the `home.pointerCursor.<backend>.enable` option for each backend. This was decided over using a list of enums because it allows easy access to the state of the backend. Note generating different cursor configurations for different backends is still possible by defining only `home.pointerCursor` and managing the respective options manually. * xcursor: migrate options to home.pointerCursor - Removed `xession.pointerCursor` as x11 cursor configurations are now handled in `home.pointerCursor.x11`. - Updated `meta.maintainer` field in `home.pointerCursor` and CODEOWNERS.
2022-05-03 18:29:17 -04:00
}