2022-04-14 06:53:08 +02:00
|
|
|
{ config, lib, pkgs, utils, ... }:
|
2014-02-07 00:37:17 +01:00
|
|
|
|
2014-04-14 16:26:48 +02:00
|
|
|
with lib;
|
2014-02-07 00:37:17 +01:00
|
|
|
|
|
|
|
let
|
2019-08-25 18:52:38 -04:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
cfg = config.services.xserver.desktopManager.gnome;
|
|
|
|
serviceCfg = config.services.gnome;
|
2014-04-11 00:28:15 +02:00
|
|
|
|
2014-04-19 23:44:49 +02:00
|
|
|
# Prioritize nautilus by default when opening directories
|
|
|
|
mimeAppsList = pkgs.writeTextFile {
|
|
|
|
name = "gnome-mimeapps";
|
|
|
|
destination = "/share/applications/mimeapps.list";
|
|
|
|
text = ''
|
|
|
|
[Default Applications]
|
2015-04-10 17:02:57 +02:00
|
|
|
inode/directory=nautilus.desktop;org.gnome.Nautilus.desktop
|
2014-04-19 23:44:49 +02:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2020-10-24 11:08:50 -04:00
|
|
|
defaultFavoriteAppsOverride = ''
|
|
|
|
[org.gnome.shell]
|
2023-11-19 22:54:22 +01:00
|
|
|
favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop' ]
|
2020-10-24 11:08:50 -04:00
|
|
|
'';
|
|
|
|
|
2022-09-25 20:31:34 +02:00
|
|
|
nixos-background-light = pkgs.nixos-artwork.wallpapers.simple-blue;
|
2022-04-13 21:28:42 +02:00
|
|
|
nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray;
|
|
|
|
|
2022-09-25 20:31:34 +02:00
|
|
|
# TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
|
|
|
|
nixos-gsettings-desktop-schemas = pkgs.gnome.nixos-gsettings-overrides.override {
|
|
|
|
inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages favoriteAppsOverride;
|
|
|
|
inherit flashbackEnabled nixos-background-dark nixos-background-light;
|
|
|
|
};
|
2015-07-29 16:27:09 +02:00
|
|
|
|
2022-04-13 21:28:42 +02:00
|
|
|
nixos-background-info = pkgs.writeTextFile rec {
|
|
|
|
name = "nixos-background-info";
|
|
|
|
text = ''
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
|
|
|
|
<wallpapers>
|
|
|
|
<wallpaper deleted="false">
|
|
|
|
<name>Blobs</name>
|
2022-09-25 20:31:34 +02:00
|
|
|
<filename>${nixos-background-light.gnomeFilePath}</filename>
|
2022-04-13 21:28:42 +02:00
|
|
|
<filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark>
|
|
|
|
<options>zoom</options>
|
|
|
|
<shade_type>solid</shade_type>
|
|
|
|
<pcolor>#3a4ba0</pcolor>
|
|
|
|
<scolor>#2f302f</scolor>
|
|
|
|
</wallpaper>
|
|
|
|
</wallpapers>
|
|
|
|
'';
|
|
|
|
destination = "/share/gnome-background-properties/nixos.xml";
|
|
|
|
};
|
|
|
|
|
2019-01-09 09:52:58 +01:00
|
|
|
flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;
|
2021-02-21 23:17:27 +01:00
|
|
|
flashbackWms = optional cfg.flashback.enableMetacity {
|
|
|
|
wmName = "metacity";
|
|
|
|
wmLabel = "Metacity";
|
|
|
|
wmCommand = "${pkgs.gnome.metacity}/bin/metacity";
|
|
|
|
enableGnomePanel = true;
|
|
|
|
} ++ cfg.flashback.customSessions;
|
2019-01-09 09:52:58 +01:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
notExcluded = pkg: mkDefault (!(lib.elem pkg config.environment.gnome.excludePackages));
|
2020-10-06 07:37:47 -04:00
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
in
|
|
|
|
|
|
|
|
{
|
2014-02-07 00:37:17 +01:00
|
|
|
|
2020-04-01 20:16:24 -04:00
|
|
|
meta = {
|
2023-01-25 00:33:40 +01:00
|
|
|
doc = ./gnome.md;
|
2020-04-01 20:16:24 -04:00
|
|
|
maintainers = teams.gnome.members;
|
|
|
|
};
|
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
imports = [
|
|
|
|
# Added 2021-05-07
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "core-os-services" "enable" ]
|
|
|
|
[ "services" "gnome" "core-os-services" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "core-shell" "enable" ]
|
|
|
|
[ "services" "gnome" "core-shell" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "core-utilities" "enable" ]
|
|
|
|
[ "services" "gnome" "core-utilities" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "core-developer-tools" "enable" ]
|
|
|
|
[ "services" "gnome" "core-developer-tools" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "games" "enable" ]
|
|
|
|
[ "services" "gnome" "games" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "gnome3" "experimental-features" "realtime-scheduling" ]
|
|
|
|
[ "services" "gnome" "experimental-features" "realtime-scheduling" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "enable" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "enable" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "sessionPath" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "sessionPath" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "favoriteAppsOverride" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "favoriteAppsOverride" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "extraGSettingsOverrides" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverrides" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "extraGSettingsOverridePackages" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverridePackages" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "debug" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "debug" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome3" "flashback" ]
|
|
|
|
[ "services" "xserver" "desktopManager" "gnome" "flashback" ]
|
|
|
|
)
|
|
|
|
(mkRenamedOptionModule
|
|
|
|
[ "environment" "gnome3" "excludePackages" ]
|
|
|
|
[ "environment" "gnome" "excludePackages" ]
|
|
|
|
)
|
2022-02-19 07:03:02 +01:00
|
|
|
(mkRemovedOptionModule
|
|
|
|
[ "services" "gnome" "experimental-features" "realtime-scheduling" ]
|
|
|
|
"Set `security.rtkit.enable = true;` to make realtime scheduling possible. (Still needs to be enabled using GSettings.)"
|
|
|
|
)
|
2021-05-07 23:18:14 +02:00
|
|
|
];
|
|
|
|
|
2014-02-07 00:37:17 +01:00
|
|
|
options = {
|
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
services.gnome = {
|
2019-08-25 18:52:38 -04:00
|
|
|
core-os-services.enable = mkEnableOption (lib.mdDoc "essential services for GNOME3");
|
|
|
|
core-shell.enable = mkEnableOption (lib.mdDoc "GNOME Shell services");
|
|
|
|
core-utilities.enable = mkEnableOption (lib.mdDoc "GNOME core utilities");
|
2020-10-03 16:14:55 -04:00
|
|
|
core-developer-tools.enable = mkEnableOption (lib.mdDoc "GNOME core developer tools");
|
2019-08-25 18:52:38 -04:00
|
|
|
games.enable = mkEnableOption (lib.mdDoc "GNOME games");
|
|
|
|
};
|
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
services.xserver.desktopManager.gnome = {
|
2015-10-08 14:53:37 +02:00
|
|
|
enable = mkOption {
|
2020-04-20 20:05:26 +02:00
|
|
|
type = types.bool;
|
2015-10-08 14:53:37 +02:00
|
|
|
default = false;
|
2021-06-07 08:34:38 +02:00
|
|
|
description = lib.mdDoc "Enable GNOME desktop manager.";
|
2015-10-08 14:53:37 +02:00
|
|
|
};
|
|
|
|
|
2018-07-31 11:01:38 +02:00
|
|
|
sessionPath = mkOption {
|
|
|
|
default = [];
|
2021-01-31 12:37:53 +01:00
|
|
|
type = types.listOf types.package;
|
2021-10-03 18:06:03 +02:00
|
|
|
example = literalExpression "[ pkgs.gnome.gpaste ]";
|
2018-08-01 19:02:50 +02:00
|
|
|
description = lib.mdDoc ''
|
|
|
|
Additional list of packages to be added to the session search path.
|
|
|
|
Useful for GNOME Shell extensions or GSettings-conditional autostart.
|
|
|
|
|
|
|
|
Note that this should be a last resort; patching the package is preferred (see GPaste).
|
|
|
|
'';
|
2018-07-31 11:01:38 +02:00
|
|
|
};
|
|
|
|
|
2020-10-24 11:08:50 -04:00
|
|
|
favoriteAppsOverride = mkOption {
|
|
|
|
internal = true; # this is messy
|
|
|
|
default = defaultFavoriteAppsOverride;
|
|
|
|
type = types.lines;
|
2021-10-03 18:06:03 +02:00
|
|
|
example = literalExpression ''
|
|
|
|
'''
|
|
|
|
[org.gnome.shell]
|
|
|
|
favorite-apps=[ 'firefox.desktop', 'org.gnome.Calendar.desktop' ]
|
|
|
|
'''
|
2020-10-24 11:08:50 -04:00
|
|
|
'';
|
|
|
|
description = lib.mdDoc "List of desktop files to put as favorite apps into gnome-shell. These need to be installed somehow globally.";
|
|
|
|
};
|
|
|
|
|
2015-10-08 14:53:37 +02:00
|
|
|
extraGSettingsOverrides = mkOption {
|
|
|
|
default = "";
|
|
|
|
type = types.lines;
|
|
|
|
description = lib.mdDoc "Additional gsettings overrides.";
|
|
|
|
};
|
|
|
|
|
|
|
|
extraGSettingsOverridePackages = mkOption {
|
|
|
|
default = [];
|
|
|
|
type = types.listOf types.path;
|
|
|
|
description = lib.mdDoc "List of packages for which gsettings are overridden.";
|
|
|
|
};
|
2016-06-11 16:44:57 +02:00
|
|
|
|
|
|
|
debug = mkEnableOption (lib.mdDoc "gnome-session debug messages");
|
2019-01-09 09:52:58 +01:00
|
|
|
|
|
|
|
flashback = {
|
2021-05-28 14:56:38 +02:00
|
|
|
enableMetacity = mkEnableOption (lib.mdDoc "the standard GNOME Flashback session with Metacity");
|
2019-01-09 09:52:58 +01:00
|
|
|
|
|
|
|
customSessions = mkOption {
|
|
|
|
type = types.listOf (types.submodule {
|
|
|
|
options = {
|
|
|
|
wmName = mkOption {
|
2021-02-21 23:17:27 +01:00
|
|
|
type = types.strMatching "[a-zA-Z0-9_-]+";
|
|
|
|
description = lib.mdDoc "A unique identifier for the window manager.";
|
2019-01-09 09:52:58 +01:00
|
|
|
example = "xmonad";
|
|
|
|
};
|
|
|
|
|
|
|
|
wmLabel = mkOption {
|
|
|
|
type = types.str;
|
2021-02-21 23:17:27 +01:00
|
|
|
description = lib.mdDoc "The name of the window manager to show in the session chooser.";
|
2019-01-09 09:52:58 +01:00
|
|
|
example = "XMonad";
|
|
|
|
};
|
|
|
|
|
|
|
|
wmCommand = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
description = lib.mdDoc "The executable of the window manager to use.";
|
2021-10-03 18:06:03 +02:00
|
|
|
example = literalExpression ''"''${pkgs.haskellPackages.xmonad}/bin/xmonad"'';
|
2019-01-09 09:52:58 +01:00
|
|
|
};
|
2021-02-21 23:17:27 +01:00
|
|
|
|
|
|
|
enableGnomePanel = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = true;
|
2021-10-03 18:06:03 +02:00
|
|
|
example = false;
|
2021-02-21 23:17:27 +01:00
|
|
|
description = lib.mdDoc "Whether to enable the GNOME panel in this session.";
|
|
|
|
};
|
2019-01-09 09:52:58 +01:00
|
|
|
};
|
|
|
|
});
|
|
|
|
default = [];
|
|
|
|
description = lib.mdDoc "Other GNOME Flashback sessions to enable.";
|
|
|
|
};
|
2021-06-01 09:59:58 +02:00
|
|
|
|
|
|
|
panelModulePackages = mkOption {
|
|
|
|
default = [ pkgs.gnome.gnome-applets ];
|
2021-10-03 18:06:03 +02:00
|
|
|
defaultText = literalExpression "[ pkgs.gnome.gnome-applets ]";
|
2023-10-06 16:40:53 +08:00
|
|
|
type = types.listOf types.package;
|
2021-06-01 09:59:58 +02:00
|
|
|
description = lib.mdDoc ''
|
|
|
|
Packages containing modules that should be made available to `gnome-panel` (usually for applets).
|
|
|
|
|
|
|
|
If you're packaging something to use here, please install the modules in `$out/lib/gnome-panel/modules`.
|
|
|
|
'';
|
|
|
|
};
|
2019-01-09 09:52:58 +01:00
|
|
|
};
|
2017-01-31 02:36:35 -05:00
|
|
|
};
|
2014-08-14 21:03:42 +02:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
environment.gnome.excludePackages = mkOption {
|
2014-04-09 00:02:20 +02:00
|
|
|
default = [];
|
2021-10-03 18:06:03 +02:00
|
|
|
example = literalExpression "[ pkgs.gnome.totem ]";
|
2014-04-09 00:02:20 +02:00
|
|
|
type = types.listOf types.package;
|
|
|
|
description = lib.mdDoc "Which packages gnome should exclude from the default environment";
|
|
|
|
};
|
|
|
|
|
2014-02-07 00:37:17 +01:00
|
|
|
};
|
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
config = mkMerge [
|
2019-08-26 05:36:11 -04:00
|
|
|
(mkIf (cfg.enable || flashbackEnabled) {
|
2020-10-10 22:44:36 -04:00
|
|
|
# Seed our configuration into nixos-generate-config
|
2021-02-13 18:45:27 -05:00
|
|
|
system.nixos-generate-config.desktopConfiguration = [''
|
2021-06-07 08:34:38 +02:00
|
|
|
# Enable the GNOME Desktop Environment.
|
2020-10-10 22:44:36 -04:00
|
|
|
services.xserver.displayManager.gdm.enable = true;
|
2021-05-07 23:18:14 +02:00
|
|
|
services.xserver.desktopManager.gnome.enable = true;
|
2021-02-13 18:45:27 -05:00
|
|
|
''];
|
2020-10-10 22:44:36 -04:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
services.gnome.core-os-services.enable = true;
|
|
|
|
services.gnome.core-shell.enable = true;
|
|
|
|
services.gnome.core-utilities.enable = mkDefault true;
|
2019-08-25 18:52:38 -04:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
services.xserver.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ];
|
2014-02-07 00:37:17 +01:00
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
environment.extraInit = ''
|
|
|
|
${concatMapStrings (p: ''
|
|
|
|
if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
|
|
|
|
export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -d "${p}/lib/girepository-1.0" ]; then
|
|
|
|
export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
|
|
|
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
|
|
|
|
fi
|
|
|
|
'') cfg.sessionPath}
|
|
|
|
'';
|
|
|
|
|
|
|
|
environment.systemPackages = cfg.sessionPath;
|
|
|
|
|
2019-09-27 19:48:44 -04:00
|
|
|
environment.sessionVariables.GNOME_SESSION_DEBUG = mkIf cfg.debug "1";
|
2019-08-25 18:52:38 -04:00
|
|
|
|
|
|
|
# Override GSettings schemas
|
2019-09-27 19:48:44 -04:00
|
|
|
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
|
2019-08-25 18:52:38 -04:00
|
|
|
})
|
|
|
|
|
2019-08-26 05:36:11 -04:00
|
|
|
(mkIf flashbackEnabled {
|
2021-02-21 23:17:27 +01:00
|
|
|
services.xserver.displayManager.sessionPackages =
|
|
|
|
let
|
|
|
|
wmNames = map (wm: wm.wmName) flashbackWms;
|
|
|
|
namesAreUnique = lib.unique wmNames == wmNames;
|
|
|
|
in
|
|
|
|
assert (assertMsg namesAreUnique "Flashback WM names must be unique.");
|
|
|
|
map
|
|
|
|
(wm:
|
|
|
|
pkgs.gnome.gnome-flashback.mkSessionForWm {
|
2023-10-06 18:07:17 +08:00
|
|
|
inherit (wm) wmName wmLabel wmCommand;
|
2021-02-21 23:17:27 +01:00
|
|
|
}
|
|
|
|
) flashbackWms;
|
2019-08-26 05:36:11 -04:00
|
|
|
|
2020-02-09 01:39:46 +01:00
|
|
|
security.pam.services.gnome-flashback = {
|
2019-08-26 05:36:11 -04:00
|
|
|
enableGnomeKeyring = true;
|
|
|
|
};
|
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
systemd.packages = with pkgs.gnome; [
|
2019-11-06 15:14:25 -05:00
|
|
|
gnome-flashback
|
2021-02-21 23:17:27 +01:00
|
|
|
] ++ map gnome-flashback.mkSystemdTargetForWm flashbackWms;
|
|
|
|
|
2023-10-06 11:40:20 +08:00
|
|
|
environment.systemPackages = with pkgs.gnome; [
|
|
|
|
gnome-flashback
|
2023-10-06 16:40:53 +08:00
|
|
|
(gnome-panel-with-modules.override {
|
|
|
|
panelModulePackages = cfg.flashback.panelModulePackages;
|
|
|
|
})
|
2023-10-06 17:56:38 +08:00
|
|
|
]
|
|
|
|
# For /share/applications/${wmName}.desktop
|
2023-10-06 18:07:17 +08:00
|
|
|
++ (map (wm: gnome-flashback.mkWmApplication { inherit (wm) wmName wmLabel wmCommand; }) flashbackWms)
|
|
|
|
# For /share/gnome-session/sessions/gnome-flashback-${wmName}.session
|
|
|
|
++ (map (wm: gnome-flashback.mkGnomeSession { inherit (wm) wmName wmLabel enableGnomePanel; }) flashbackWms);
|
2019-08-26 05:36:11 -04:00
|
|
|
})
|
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
(mkIf serviceCfg.core-os-services.enable {
|
|
|
|
hardware.bluetooth.enable = mkDefault true;
|
|
|
|
hardware.pulseaudio.enable = mkDefault true;
|
|
|
|
programs.dconf.enable = true;
|
|
|
|
security.polkit.enable = true;
|
|
|
|
services.accounts-daemon.enable = true;
|
|
|
|
services.dleyna-renderer.enable = mkDefault true;
|
|
|
|
services.dleyna-server.enable = mkDefault true;
|
2021-04-15 22:11:12 +02:00
|
|
|
services.power-profiles-daemon.enable = mkDefault true;
|
2021-05-07 23:18:14 +02:00
|
|
|
services.gnome.at-spi2-core.enable = true;
|
|
|
|
services.gnome.evolution-data-server.enable = true;
|
|
|
|
services.gnome.gnome-keyring.enable = true;
|
|
|
|
services.gnome.gnome-online-accounts.enable = mkDefault true;
|
|
|
|
services.gnome.gnome-online-miners.enable = true;
|
|
|
|
services.gnome.tracker-miners.enable = mkDefault true;
|
|
|
|
services.gnome.tracker.enable = mkDefault true;
|
2019-08-25 18:52:38 -04:00
|
|
|
services.hardware.bolt.enable = mkDefault true;
|
2022-08-17 10:47:13 -04:00
|
|
|
# TODO: Enable once #177946 is resolved
|
|
|
|
# services.packagekit.enable = mkDefault true;
|
2019-08-25 18:52:38 -04:00
|
|
|
services.udisks2.enable = true;
|
|
|
|
services.upower.enable = config.powerManagement.enable;
|
|
|
|
services.xserver.libinput.enable = mkDefault true; # for controlling touchpad settings via gnome control center
|
|
|
|
|
2022-05-29 21:32:09 +02:00
|
|
|
# Explicitly enabled since GNOME will be severely broken without these.
|
2022-05-29 21:17:43 +02:00
|
|
|
xdg.mime.enable = true;
|
2022-05-29 21:32:09 +02:00
|
|
|
xdg.icons.enable = true;
|
2022-05-29 21:17:43 +02:00
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
xdg.portal.enable = true;
|
2021-10-07 03:11:42 +02:00
|
|
|
xdg.portal.extraPortals = [
|
|
|
|
pkgs.xdg-desktop-portal-gnome
|
2021-10-07 17:15:18 +02:00
|
|
|
(pkgs.xdg-desktop-portal-gtk.override {
|
|
|
|
# Do not build portals that we already have.
|
|
|
|
buildPortalsInGnome = false;
|
|
|
|
})
|
2021-10-07 03:11:42 +02:00
|
|
|
];
|
2023-09-19 21:48:58 +08:00
|
|
|
xdg.portal.configPackages = mkDefault [ pkgs.gnome.gnome-session ];
|
2019-08-25 18:52:38 -04:00
|
|
|
|
|
|
|
networking.networkmanager.enable = mkDefault true;
|
|
|
|
|
|
|
|
services.xserver.updateDbusEnvironment = true;
|
|
|
|
|
2019-10-19 21:32:17 -04:00
|
|
|
# gnome has a custom alert theme but it still
|
|
|
|
# inherits from the freedesktop theme.
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
sound-theme-freedesktop
|
|
|
|
];
|
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
# Needed for themes and backgrounds
|
|
|
|
environment.pathsToLink = [
|
|
|
|
"/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
|
|
|
|
];
|
|
|
|
})
|
|
|
|
|
|
|
|
(mkIf serviceCfg.core-shell.enable {
|
2021-12-16 20:31:45 +01:00
|
|
|
services.xserver.desktopManager.gnome.sessionPath =
|
|
|
|
let
|
|
|
|
mandatoryPackages = [
|
|
|
|
pkgs.gnome.gnome-shell
|
|
|
|
];
|
|
|
|
optionalPackages = [
|
|
|
|
pkgs.gnome.gnome-shell-extensions
|
|
|
|
];
|
|
|
|
in
|
|
|
|
mandatoryPackages
|
|
|
|
++ utils.removePackagesByName optionalPackages config.environment.gnome.excludePackages;
|
2022-05-29 22:17:32 +02:00
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
services.colord.enable = mkDefault true;
|
2021-05-07 23:18:14 +02:00
|
|
|
services.gnome.glib-networking.enable = true;
|
2022-07-27 00:23:44 +02:00
|
|
|
services.gnome.gnome-browser-connector.enable = mkDefault true;
|
2021-05-07 23:18:14 +02:00
|
|
|
services.gnome.gnome-initial-setup.enable = mkDefault true;
|
|
|
|
services.gnome.gnome-remote-desktop.enable = mkDefault true;
|
|
|
|
services.gnome.gnome-settings-daemon.enable = true;
|
|
|
|
services.gnome.gnome-user-share.enable = mkDefault true;
|
|
|
|
services.gnome.rygel.enable = mkDefault true;
|
2019-08-25 18:52:38 -04:00
|
|
|
services.gvfs.enable = true;
|
2019-09-06 09:45:49 -04:00
|
|
|
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
|
2019-09-16 07:19:00 +02:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
systemd.packages = with pkgs.gnome; [
|
2020-01-18 20:26:45 -05:00
|
|
|
gnome-session
|
|
|
|
gnome-shell
|
|
|
|
];
|
2019-08-25 18:52:38 -04:00
|
|
|
|
2021-05-07 23:18:14 +02:00
|
|
|
services.udev.packages = with pkgs.gnome; [
|
2020-10-11 16:40:55 +00:00
|
|
|
# Force enable KMS modifiers for devices that require them.
|
|
|
|
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1443
|
|
|
|
mutter
|
|
|
|
];
|
|
|
|
|
2019-08-26 06:50:20 -04:00
|
|
|
services.avahi.enable = mkDefault true;
|
|
|
|
|
2020-01-18 20:26:45 -05:00
|
|
|
xdg.portal.extraPortals = [
|
2021-05-07 23:18:14 +02:00
|
|
|
pkgs.gnome.gnome-shell
|
2020-01-18 20:26:45 -05:00
|
|
|
];
|
2019-09-09 19:28:59 -04:00
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
services.geoclue2.enable = mkDefault true;
|
|
|
|
services.geoclue2.enableDemoAgent = false; # GNOME has its own geoclue agent
|
|
|
|
|
2019-09-08 23:38:31 +00:00
|
|
|
services.geoclue2.appConfig.gnome-datetime-panel = {
|
2019-08-25 18:52:38 -04:00
|
|
|
isAllowed = true;
|
|
|
|
isSystem = true;
|
|
|
|
};
|
2019-09-08 23:38:31 +00:00
|
|
|
services.geoclue2.appConfig.gnome-color-panel = {
|
2019-08-25 18:52:38 -04:00
|
|
|
isAllowed = true;
|
|
|
|
isSystem = true;
|
|
|
|
};
|
|
|
|
services.geoclue2.appConfig."org.gnome.Shell" = {
|
|
|
|
isAllowed = true;
|
|
|
|
isSystem = true;
|
|
|
|
};
|
2014-02-07 00:37:17 +01:00
|
|
|
|
2023-07-19 13:43:36 +02:00
|
|
|
fonts.packages = with pkgs; [
|
2019-08-25 18:52:38 -04:00
|
|
|
cantarell-fonts
|
|
|
|
dejavu_fonts
|
|
|
|
source-code-pro # Default monospace font in 3.32
|
2021-10-25 08:24:29 -07:00
|
|
|
source-sans
|
2019-08-25 18:52:38 -04:00
|
|
|
];
|
|
|
|
|
2020-10-03 16:03:16 -04:00
|
|
|
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/blob/gnome-3-38/elements/core/meta-gnome-core-shell.bst
|
2021-12-16 20:31:45 +01:00
|
|
|
environment.systemPackages =
|
|
|
|
let
|
|
|
|
mandatoryPackages = with pkgs.gnome; [
|
|
|
|
gnome-shell
|
|
|
|
];
|
|
|
|
optionalPackages = with pkgs.gnome; [
|
|
|
|
adwaita-icon-theme
|
|
|
|
nixos-background-info
|
|
|
|
gnome-backgrounds
|
|
|
|
gnome-bluetooth
|
|
|
|
gnome-color-manager
|
|
|
|
gnome-control-center
|
|
|
|
gnome-shell-extensions
|
|
|
|
pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
|
|
|
|
pkgs.gnome-user-docs
|
|
|
|
pkgs.orca
|
|
|
|
pkgs.glib # for gsettings program
|
|
|
|
pkgs.gnome-menus
|
|
|
|
pkgs.gtk3.out # for gtk-launch program
|
2023-10-30 21:41:44 +01:00
|
|
|
pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
|
2021-12-16 20:31:45 +01:00
|
|
|
];
|
|
|
|
in
|
|
|
|
mandatoryPackages
|
|
|
|
++ utils.removePackagesByName optionalPackages config.environment.gnome.excludePackages;
|
2019-08-25 18:52:38 -04:00
|
|
|
})
|
|
|
|
|
2023-11-19 22:54:22 +01:00
|
|
|
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/gnome-45/elements/core/meta-gnome-core-utilities.bst
|
2019-08-25 18:52:38 -04:00
|
|
|
(mkIf serviceCfg.core-utilities.enable {
|
2021-05-18 13:53:10 +02:00
|
|
|
environment.systemPackages =
|
|
|
|
with pkgs.gnome;
|
2022-04-14 06:53:08 +02:00
|
|
|
utils.removePackagesByName
|
2021-05-18 13:53:10 +02:00
|
|
|
([
|
|
|
|
baobab
|
|
|
|
epiphany
|
2022-02-16 21:42:04 +01:00
|
|
|
pkgs.gnome-text-editor
|
2021-05-18 13:53:10 +02:00
|
|
|
gnome-calculator
|
|
|
|
gnome-calendar
|
|
|
|
gnome-characters
|
|
|
|
gnome-clocks
|
2022-02-19 08:31:07 +01:00
|
|
|
pkgs.gnome-console
|
2021-05-18 13:53:10 +02:00
|
|
|
gnome-contacts
|
|
|
|
gnome-font-viewer
|
|
|
|
gnome-logs
|
|
|
|
gnome-maps
|
|
|
|
gnome-music
|
|
|
|
gnome-system-monitor
|
|
|
|
gnome-weather
|
2023-08-18 17:45:59 +08:00
|
|
|
pkgs.loupe
|
2021-05-18 13:53:10 +02:00
|
|
|
nautilus
|
|
|
|
pkgs.gnome-connections
|
|
|
|
simple-scan
|
2023-08-15 17:12:06 +08:00
|
|
|
pkgs.snapshot
|
2021-05-18 13:53:10 +02:00
|
|
|
totem
|
|
|
|
yelp
|
|
|
|
] ++ lib.optionals config.services.flatpak.enable [
|
|
|
|
# Since PackageKit Nix support is not there yet,
|
|
|
|
# only install gnome-software if flatpak is enabled.
|
|
|
|
gnome-software
|
|
|
|
])
|
|
|
|
config.environment.gnome.excludePackages;
|
2019-08-25 18:52:38 -04:00
|
|
|
|
2020-10-06 07:37:47 -04:00
|
|
|
# Enable default program modules
|
|
|
|
# Since some of these have a corresponding package, we only
|
|
|
|
# enable that program module if the package hasn't been excluded
|
2021-05-07 23:18:14 +02:00
|
|
|
# through `environment.gnome.excludePackages`
|
|
|
|
programs.evince.enable = notExcluded pkgs.gnome.evince;
|
|
|
|
programs.file-roller.enable = notExcluded pkgs.gnome.file-roller;
|
|
|
|
programs.geary.enable = notExcluded pkgs.gnome.geary;
|
|
|
|
programs.gnome-disks.enable = notExcluded pkgs.gnome.gnome-disk-utility;
|
|
|
|
programs.seahorse.enable = notExcluded pkgs.gnome.seahorse;
|
|
|
|
services.gnome.sushi.enable = notExcluded pkgs.gnome.sushi;
|
2020-10-06 07:37:47 -04:00
|
|
|
|
2022-03-28 16:26:41 -07:00
|
|
|
# VTE shell integration for gnome-console
|
|
|
|
programs.bash.vteIntegration = mkDefault true;
|
|
|
|
programs.zsh.vteIntegration = mkDefault true;
|
|
|
|
|
2019-08-25 18:52:38 -04:00
|
|
|
# Let nautilus find extensions
|
|
|
|
# TODO: Create nautilus-with-extensions package
|
2022-08-07 17:11:53 +00:00
|
|
|
environment.sessionVariables.NAUTILUS_4_EXTENSION_DIR = "${config.system.path}/lib/nautilus/extensions-4";
|
2019-08-25 18:52:38 -04:00
|
|
|
|
|
|
|
# Override default mimeapps for nautilus
|
2019-09-27 19:48:44 -04:00
|
|
|
environment.sessionVariables.XDG_DATA_DIRS = [ "${mimeAppsList}/share" ];
|
2019-08-25 18:52:38 -04:00
|
|
|
|
|
|
|
environment.pathsToLink = [
|
|
|
|
"/share/nautilus-python/extensions"
|
|
|
|
];
|
|
|
|
})
|
|
|
|
|
|
|
|
(mkIf serviceCfg.games.enable {
|
2022-04-14 06:53:08 +02:00
|
|
|
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
|
2020-10-03 16:04:14 -04:00
|
|
|
aisleriot
|
|
|
|
atomix
|
|
|
|
five-or-more
|
|
|
|
four-in-a-row
|
2022-01-27 15:40:02 -05:00
|
|
|
pkgs.gnome-2048
|
2020-10-03 16:04:14 -04:00
|
|
|
gnome-chess
|
|
|
|
gnome-klotski
|
|
|
|
gnome-mahjongg
|
|
|
|
gnome-mines
|
|
|
|
gnome-nibbles
|
|
|
|
gnome-robots
|
|
|
|
gnome-sudoku
|
|
|
|
gnome-taquin
|
|
|
|
gnome-tetravex
|
|
|
|
hitori
|
|
|
|
iagno
|
|
|
|
lightsoff
|
|
|
|
quadrapassel
|
|
|
|
swell-foop
|
|
|
|
tali
|
2022-04-11 10:51:54 +02:00
|
|
|
] config.environment.gnome.excludePackages;
|
2019-08-25 18:52:38 -04:00
|
|
|
})
|
2020-10-03 16:14:55 -04:00
|
|
|
|
|
|
|
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
|
|
|
|
(mkIf serviceCfg.core-developer-tools.enable {
|
2022-04-14 06:53:08 +02:00
|
|
|
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
|
2020-10-03 16:14:55 -04:00
|
|
|
dconf-editor
|
|
|
|
devhelp
|
|
|
|
pkgs.gnome-builder
|
|
|
|
# boxes would make sense in this option, however
|
|
|
|
# it doesn't function well enough to be included
|
|
|
|
# in default configurations.
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/60908
|
|
|
|
/* gnome-boxes */
|
2022-04-11 10:51:54 +02:00
|
|
|
] config.environment.gnome.excludePackages;
|
2020-10-03 16:14:55 -04:00
|
|
|
|
2021-05-11 18:11:01 +02:00
|
|
|
services.sysprof.enable = notExcluded pkgs.sysprof;
|
2020-10-03 16:14:55 -04:00
|
|
|
})
|
2019-08-25 18:52:38 -04:00
|
|
|
];
|
2014-02-16 21:37:18 +01:00
|
|
|
|
2014-02-07 00:37:17 +01:00
|
|
|
}
|