nix-config/modules/home-manager-modules/gnome.nix
2025-06-25 17:27:18 -05:00

75 lines
2.2 KiB
Nix

{
lib,
config,
...
}: {
options.gnome = {
extensions = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "The set of extensions to install and enable in the user environment.";
};
hotkeys = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({name, ...}: {
options = {
name = lib.mkOption {
type = lib.types.strMatching "[a-zA-Z0-9_-]+";
default = builtins.replaceStrings [" " "/"] ["_" "-"] name;
};
binding = lib.mkOption {
type = lib.types.str;
};
command = lib.mkOption {
type = lib.types.str;
};
};
}));
default = {};
};
};
config = {
home.packages = config.gnome.extensions;
dconf = {
settings = lib.mkMerge [
{
"org/gnome/shell" = {
disable-user-extensions = false; # enables user extensions
enabled-extensions = builtins.map (extension: extension.extensionUuid) config.gnome.extensions;
};
}
(
lib.mkMerge (
builtins.map (value: let
entry = "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${value.name}";
in {
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"${entry}/"
];
};
${entry} = value;
})
(
lib.attrsets.mapAttrsToList (_: value: value) config.gnome.hotkeys
)
)
)
# (
# builtins.listToAttrs (
# lib.lists.imap0 (
# i: value: lib.attrsets.nameValuePair "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString i}" value
# )
# (lib.attrsets.mapAttrsToList (_: value: value) config.gnome.hotkeys)
# )
# )
# "org/gnome/settings-daemon/plugins/media-keys" = {
# custom-keybindings = [
# "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
# ];
# };
];
};
};
}