{ 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 = { 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; }; } ( 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/" # ]; # }; ]; }; }; }