From da6641a57a7bd33a59c6c00d2f82c9344ca15d2f Mon Sep 17 00:00:00 2001 From: pennae Date: Tue, 3 Jan 2023 08:44:06 +0100 Subject: [PATCH] nixos/gnome: convert manual chapter to MD --- .../services/x11/desktop-managers/gnome.md | 167 +++++++ .../services/x11/desktop-managers/gnome.nix | 2 + .../services/x11/desktop-managers/gnome.xml | 408 +++++++++--------- 3 files changed, 376 insertions(+), 201 deletions(-) create mode 100644 nixos/modules/services/x11/desktop-managers/gnome.md diff --git a/nixos/modules/services/x11/desktop-managers/gnome.md b/nixos/modules/services/x11/desktop-managers/gnome.md new file mode 100644 index 000000000000..d9e75bfe6bdd --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/gnome.md @@ -0,0 +1,167 @@ +# GNOME Desktop {#chap-gnome} + +GNOME provides a simple, yet full-featured desktop environment with a focus on productivity. Its Mutter compositor supports both Wayland and X server, and the GNOME Shell user interface is fully customizable by extensions. + +## Enabling GNOME {#sec-gnome-enable} + +All of the core apps, optional apps, games, and core developer tools from GNOME are available. + +To enable the GNOME desktop use: + +``` +services.xserver.desktopManager.gnome.enable = true; +services.xserver.displayManager.gdm.enable = true; +``` + +::: {.note} +While it is not strictly necessary to use GDM as the display manager with GNOME, it is recommended, as some features such as screen lock [might not work](#sec-gnome-faq-can-i-use-lightdm-with-gnome) without it. +::: + +The default applications used in NixOS are very minimal, inspired by the defaults used in [gnome-build-meta](https://gitlab.gnome.org/GNOME/gnome-build-meta/blob/40.0/elements/core/meta-gnome-core-utilities.bst). + +### GNOME without the apps {#sec-gnome-without-the-apps} + +If you’d like to only use the GNOME desktop and not the apps, you can disable them with: + +``` +services.gnome.core-utilities.enable = false; +``` + +and none of them will be installed. + +If you’d only like to omit a subset of the core utilities, you can use +[](#opt-environment.gnome.excludePackages). +Note that this mechanism can only exclude core utilities, games and core developer tools. + +### Disabling GNOME services {#sec-gnome-disabling-services} + +It is also possible to disable many of the [core services](https://github.com/NixOS/nixpkgs/blob/b8ec4fd2a4edc4e30d02ba7b1a2cc1358f3db1d5/nixos/modules/services/x11/desktop-managers/gnome.nix#L329-L348). For example, if you do not need indexing files, you can disable Tracker with: + +``` +services.gnome.tracker-miners.enable = false; +services.gnome.tracker.enable = false; +``` + +Note, however, that doing so is not supported and might break some applications. Notably, GNOME Music cannot work without Tracker. + +### GNOME games {#sec-gnome-games} + +You can install all of the GNOME games with: + +``` +services.gnome.games.enable = true; +``` + +### GNOME core developer tools {#sec-gnome-core-developer-tools} + +You can install GNOME core developer tools with: + +``` +services.gnome.core-developer-tools.enable = true; +``` + +## Enabling GNOME Flashback {#sec-gnome-enable-flashback} + +GNOME Flashback provides a desktop environment based on the classic GNOME 2 architecture. You can enable the default GNOME Flashback session, which uses the Metacity window manager, with: + +``` +services.xserver.desktopManager.gnome.flashback.enableMetacity = true; +``` + +It is also possible to create custom sessions that replace Metacity with a different window manager using [](#opt-services.xserver.desktopManager.gnome.flashback.customSessions). + +The following example uses `xmonad` window manager: + +``` +services.xserver.desktopManager.gnome.flashback.customSessions = [ + { + wmName = "xmonad"; + wmLabel = "XMonad"; + wmCommand = "${pkgs.haskellPackages.xmonad}/bin/xmonad"; + enableGnomePanel = false; + } +]; +``` + +## Icons and GTK Themes {#sec-gnome-icons-and-gtk-themes} + +Icon themes and GTK themes don’t require any special option to install in NixOS. + +You can add them to [](#opt-environment.systemPackages) and switch to them with GNOME Tweaks. +If you’d like to do this manually in dconf, change the values of the following keys: + +``` +/org/gnome/desktop/interface/gtk-theme +/org/gnome/desktop/interface/icon-theme +``` + +in `dconf-editor` + +## Shell Extensions {#sec-gnome-shell-extensions} + +Most Shell extensions are packaged under the `gnomeExtensions` attribute. +Some packages that include Shell extensions, like `gnome.gpaste`, don’t have their extension decoupled under this attribute. + +You can install them like any other package: + +``` +environment.systemPackages = [ + gnomeExtensions.dash-to-dock + gnomeExtensions.gsconnect + gnomeExtensions.mpris-indicator-button +]; +``` + +Unfortunately, we lack a way for these to be managed in a completely declarative way. +So you have to enable them manually with an Extensions application. +It is possible to use a [GSettings override](#sec-gnome-gsettings-overrides) for this on `org.gnome.shell.enabled-extensions`, but that will only influence the default value. + +## GSettings Overrides {#sec-gnome-gsettings-overrides} + +Majority of software building on the GNOME platform use GLib’s [GSettings](https://developer.gnome.org/gio/unstable/GSettings.html) system to manage runtime configuration. For our purposes, the system consists of XML schemas describing the individual configuration options, stored in the package, and a settings backend, where the values of the settings are stored. On NixOS, like on most Linux distributions, dconf database is used as the backend. + +[GSettings vendor overrides](https://developer.gnome.org/gio/unstable/GSettings.html#id-1.4.19.2.9.25) can be used to adjust the default values for settings of the GNOME desktop and apps by replacing the default values specified in the XML schemas. Using overrides will allow you to pre-seed user settings before you even start the session. + +::: {.warning} +Overrides really only change the default values for GSettings keys so if you or an application changes the setting value, the value set by the override will be ignored. Until [NixOS’s dconf module implements changing values](https://github.com/NixOS/nixpkgs/issues/54150), you will either need to keep that in mind and clear the setting from the backend using `dconf reset` command when that happens, or use the [module from home-manager](https://nix-community.github.io/home-manager/options.html#opt-dconf.settings). +::: + +You can override the default GSettings values using the +[](#opt-services.xserver.desktopManager.gnome.extraGSettingsOverrides) option. + +Take note that whatever packages you want to override GSettings for, you need to add them to +[](#opt-services.xserver.desktopManager.gnome.extraGSettingsOverridePackages). + +You can use `dconf-editor` tool to explore which GSettings you can set. + +### Example {#sec-gnome-gsettings-overrides-example} + +``` +services.xserver.desktopManager.gnome = { + extraGSettingsOverrides = '' + # Change default background + [org.gnome.desktop.background] + picture-uri='file://${pkgs.nixos-artwork.wallpapers.mosaic-blue.gnomeFilePath}' + + # Favorite apps in gnome-shell + [org.gnome.shell] + favorite-apps=['org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop'] + ''; + + extraGSettingsOverridePackages = [ + pkgs.gsettings-desktop-schemas # for org.gnome.desktop + pkgs.gnome.gnome-shell # for org.gnome.shell + ]; +}; +``` + +## Frequently Asked Questions {#sec-gnome-faq} + +### Can I use LightDM with GNOME? {#sec-gnome-faq-can-i-use-lightdm-with-gnome} + +Yes you can, and any other display-manager in NixOS. + +However, it doesn’t work correctly for the Wayland session of GNOME Shell yet, and +won’t be able to lock your screen. + +See [this issue.](https://github.com/NixOS/nixpkgs/issues/56342) diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index 9c1978e362bc..21c3608290cf 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -66,6 +66,8 @@ in { meta = { + # Don't edit the docbook xml directly, edit the md and generate it: + # `pandoc gnome.md -t docbook --top-level-division=chapter --extract-media=media -f markdown-smart --lua-filter ../../../../../doc/build-aux/pandoc-filters/myst-reader/roles.lua --lua-filter ../../../../../doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua > gnome.xml` doc = ./gnome.xml; maintainers = teams.gnome.members; }; diff --git a/nixos/modules/services/x11/desktop-managers/gnome.xml b/nixos/modules/services/x11/desktop-managers/gnome.xml index 1b3a270c17e2..d1038bded000 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.xml +++ b/nixos/modules/services/x11/desktop-managers/gnome.xml @@ -1,215 +1,224 @@ - - GNOME Desktop - - GNOME provides a simple, yet full-featured desktop environment with a focus on productivity. Its Mutter compositor supports both Wayland and X server, and the GNOME Shell user interface is fully customizable by extensions. - - -
- Enabling GNOME - + + GNOME Desktop - All of the core apps, optional apps, games, and core developer tools from GNOME are available. + GNOME provides a simple, yet full-featured desktop environment with + a focus on productivity. Its Mutter compositor supports both Wayland + and X server, and the GNOME Shell user interface is fully + customizable by extensions. - - - To enable the GNOME desktop use: - - - +
+ Enabling GNOME + + All of the core apps, optional apps, games, and core developer + tools from GNOME are available. + + + To enable the GNOME desktop use: + + services.xserver.desktopManager.gnome.enable = true; services.xserver.displayManager.gdm.enable = true; - - - - While it is not strictly necessary to use GDM as the display manager with GNOME, it is recommended, as some features such as screen lock might not work without it. - - - - - The default applications used in NixOS are very minimal, inspired by the defaults used in gnome-build-meta. - - -
- GNOME without the apps - - - If you’d like to only use the GNOME desktop and not the apps, you can disable them with: - - - + + + While it is not strictly necessary to use GDM as the display + manager with GNOME, it is recommended, as some features such as + screen lock + might + not work without it. + + + + The default applications used in NixOS are very minimal, inspired + by the defaults used in + gnome-build-meta. + +
+ GNOME without the apps + + If you’d like to only use the GNOME desktop and not the apps, + you can disable them with: + + services.gnome.core-utilities.enable = false; - - - and none of them will be installed. - - - - If you’d only like to omit a subset of the core utilities, you can use . - Note that this mechanism can only exclude core utilities, games and core developer tools. - -
- -
- Disabling GNOME services - - - It is also possible to disable many of the core services. For example, if you do not need indexing files, you can disable Tracker with: - - - + + and none of them will be installed. + + + If you’d only like to omit a subset of the core utilities, you + can use + . + Note that this mechanism can only exclude core utilities, games + and core developer tools. + +
+
+ Disabling GNOME services + + It is also possible to disable many of the + core + services. For example, if you do not need indexing files, + you can disable Tracker with: + + services.gnome.tracker-miners.enable = false; services.gnome.tracker.enable = false; - - - Note, however, that doing so is not supported and might break some applications. Notably, GNOME Music cannot work without Tracker. - -
- -
- GNOME games - - - You can install all of the GNOME games with: - - - + + Note, however, that doing so is not supported and might break + some applications. Notably, GNOME Music cannot work without + Tracker. + +
+
+ GNOME games + + You can install all of the GNOME games with: + + services.gnome.games.enable = true; -
- -
- GNOME core developer tools - - - You can install GNOME core developer tools with: - - - +
+
+ GNOME core developer tools + + You can install GNOME core developer tools with: + + services.gnome.core-developer-tools.enable = true; +
-
- -
- Enabling GNOME Flashback - - - GNOME Flashback provides a desktop environment based on the classic GNOME 2 architecture. You can enable the default GNOME Flashback session, which uses the Metacity window manager, with: - - - +
+ Enabling GNOME Flashback + + GNOME Flashback provides a desktop environment based on the + classic GNOME 2 architecture. You can enable the default GNOME + Flashback session, which uses the Metacity window manager, with: + + services.xserver.desktopManager.gnome.flashback.enableMetacity = true; - - - It is also possible to create custom sessions that replace Metacity with a different window manager using . - - - - The following example uses xmonad window manager: - - - + + It is also possible to create custom sessions that replace + Metacity with a different window manager using + . + + + The following example uses xmonad window + manager: + + services.xserver.desktopManager.gnome.flashback.customSessions = [ { - wmName = "xmonad"; - wmLabel = "XMonad"; - wmCommand = "${pkgs.haskellPackages.xmonad}/bin/xmonad"; + wmName = "xmonad"; + wmLabel = "XMonad"; + wmCommand = "${pkgs.haskellPackages.xmonad}/bin/xmonad"; enableGnomePanel = false; } ]; - -
- -
- Icons and GTK Themes - - - Icon themes and GTK themes don’t require any special option to install in NixOS. - - - - You can add them to and switch to them with GNOME Tweaks. - If you’d like to do this manually in dconf, change the values of the following keys: - - - +
+
+ Icons and GTK Themes + + Icon themes and GTK themes don’t require any special option to + install in NixOS. + + + You can add them to + and switch + to them with GNOME Tweaks. If you’d like to do this manually in + dconf, change the values of the following keys: + + /org/gnome/desktop/interface/gtk-theme /org/gnome/desktop/interface/icon-theme - - - in dconf-editor - -
- -
- Shell Extensions - - - Most Shell extensions are packaged under the gnomeExtensions attribute. - Some packages that include Shell extensions, like gnome.gpaste, don’t have their extension decoupled under this attribute. - - - - You can install them like any other package: - - - + + in dconf-editor + +
+
+ Shell Extensions + + Most Shell extensions are packaged under the + gnomeExtensions attribute. Some packages that + include Shell extensions, like gnome.gpaste, + don’t have their extension decoupled under this attribute. + + + You can install them like any other package: + + environment.systemPackages = [ gnomeExtensions.dash-to-dock gnomeExtensions.gsconnect gnomeExtensions.mpris-indicator-button ]; - - - Unfortunately, we lack a way for these to be managed in a completely declarative way. - So you have to enable them manually with an Extensions application. - It is possible to use a GSettings override for this on org.gnome.shell.enabled-extensions, but that will only influence the default value. - -
- -
- GSettings Overrides - - - Majority of software building on the GNOME platform use GLib’s GSettings system to manage runtime configuration. For our purposes, the system consists of XML schemas describing the individual configuration options, stored in the package, and a settings backend, where the values of the settings are stored. On NixOS, like on most Linux distributions, dconf database is used as the backend. - - - - GSettings vendor overrides can be used to adjust the default values for settings of the GNOME desktop and apps by replacing the default values specified in the XML schemas. Using overrides will allow you to pre-seed user settings before you even start the session. - - - - - Overrides really only change the default values for GSettings keys so if you or an application changes the setting value, the value set by the override will be ignored. Until NixOS’s dconf module implements changing values, you will either need to keep that in mind and clear the setting from the backend using dconf reset command when that happens, or use the module from home-manager. - - - - - You can override the default GSettings values using the option. - - - - Take note that whatever packages you want to override GSettings for, you need to add them to - . - - - - You can use dconf-editor tool to explore which GSettings you can set. - - -
- Example - - + + Unfortunately, we lack a way for these to be managed in a + completely declarative way. So you have to enable them manually + with an Extensions application. It is possible to use a + GSettings + override for this on + org.gnome.shell.enabled-extensions, but that + will only influence the default value. + +
+
+ GSettings Overrides + + Majority of software building on the GNOME platform use GLib’s + GSettings + system to manage runtime configuration. For our purposes, the + system consists of XML schemas describing the individual + configuration options, stored in the package, and a settings + backend, where the values of the settings are stored. On NixOS, + like on most Linux distributions, dconf database is used as the + backend. + + + GSettings + vendor overrides can be used to adjust the default values + for settings of the GNOME desktop and apps by replacing the + default values specified in the XML schemas. Using overrides will + allow you to pre-seed user settings before you even start the + session. + + + + Overrides really only change the default values for GSettings + keys so if you or an application changes the setting value, the + value set by the override will be ignored. Until + NixOS’s + dconf module implements changing values, you will either + need to keep that in mind and clear the setting from the backend + using dconf reset command when that happens, + or use the + module + from home-manager. + + + + You can override the default GSettings values using the + + option. + + + Take note that whatever packages you want to override GSettings + for, you need to add them to + . + + + You can use dconf-editor tool to explore which + GSettings you can set. + +
+ Example + services.xserver.desktopManager.gnome = { extraGSettingsOverrides = '' # Change default background @@ -227,27 +236,24 @@ services.xserver.desktopManager.gnome = { ]; }; +
-
- -
- Frequently Asked Questions - -
- Can I use LightDM with GNOME? - - - Yes you can, and any other display-manager in NixOS. - - - - However, it doesn’t work correctly for the Wayland session of GNOME Shell yet, and - won’t be able to lock your screen. - - - - See this issue. - +
+ Frequently Asked Questions +
+ Can I use LightDM with GNOME? + + Yes you can, and any other display-manager in NixOS. + + + However, it doesn’t work correctly for the Wayland session of + GNOME Shell yet, and won’t be able to lock your screen. + + + See + this + issue. + +
-