DashNix/modules/programs/gnome.nix

77 lines
2.2 KiB
Nix

{
lib,
options,
config,
pkgs,
...
}: {
options.mods.gnome = {
enable = lib.mkOption {
default = false;
example = true;
type = lib.types.bool;
description = "Enables the Gnome desktop environment";
};
useDefaultOptions = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Use default options provided by module. If disabled, will only apply extraOptions.";
};
extraOptions = lib.mkOption {
default = {};
example = {};
type = with lib.types; attrsOf anything;
description = "Extra options to be applied to the gnome config";
};
extraDconf = lib.mkOption {
default = {};
example = {};
type = with lib.types; attrsOf anything;
description = "Extra options to be applied to the dconf config";
};
};
config = let
defaultExtensions = with pkgs.gnomeExtensions; [
blur-my-shell
dash-to-dock
tray-icons-reloaded
];
in
lib.mkIf config.mods.gnome.enable (
lib.optionalAttrs (options ? services.xserver.desktopManager.gnome) (
{
services.xserver = {
enable = true;
desktopManager.gnome.enable = true;
};
}
// lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;}
// {
services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions;
}
)
// lib.optionalAttrs (options ? dconf) (
lib.mkIf config.mods.gnome.useDefaultOptions {
dconf = {
enable = true;
settings = {
"org/gnome/shell" = {
disable-user-extensions = false;
enabled-extensions = map (extension: extension.extensionUuid) defaultExtensions;
};
"org/gnome/desktop/interface" = {
cursor-theme = config.mods.stylix.cursor.name;
cursor-size = config.mods.stylix.cursor.size;
color-scheme = "prefer-dark";
};
};
};
}
// {
dconf = config.mods.gnome.extraDconf;
}
)
);
}