GNOME: Difference between revisions

From NixOS Wiki
imported>Why-not-try-calmer
(added link to nixos manual)
 
(7 intermediate revisions by 6 users not shown)
Line 1: Line 1:


[https://gnome.org/ {{PAGENAME}}] ([[wikipedia:en:{{PAGENAME}}]]) is available as a [[module]] (and also especially as a module for <code>services.xserver.desktopManager</code>).
[[{{PAGENAME}}]] (/(ɡ)noʊm/) is a [[desktop environment]] known for its focus on being simple, intuitive, and easy to use. It is made by The GNOME Project and is composed entirely of free and open-source software. Its Mutter compositor supports both [[Wayland]] and X server, and the GNOME Shell user interface is customizable by extensions.


[[{{PAGENAME}}]] (/(ɡ)noʊm/) is a [[desktop environment]] that aims to be simple and easy to use. It is designed by The GNOME Project and is composed entirely of free and open-source software. GNOME is a part of the GNU Project.
This article is an extension of the documentation in the [https://nixos.org/manual/nixos/stable/#chap-gnome NixOS manual].


[https://gnome.org/ {{PAGENAME}}] is available as a [[module]] and can be enabled with <code>services.xserver.desktopManager</code>.
== Installation ==
== Installation ==


Line 14: Line 15:
</syntaxHighlight>
</syntaxHighlight>


=== Excluding some GNOME applications from the default install ===
=== Excluding GNOME Applications ===


Not all applications that come pre-installed with the GNOME desktop environment are desirable for everyone to have on their machines. There's a way to edit {{inline Command|configuration.nix}} to exclude these kinds of packages, for example as follows:
To exclude certain applications that are installed by default with GNOME edit {{ic|configuration.nix}} as follows:


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nixos">
environment.gnome.excludePackages = (with pkgs; [
environment.gnome.excludePackages = (with pkgs; [
   gnome-photos
   # for packages that are pkgs.***
   gnome-tour
   gnome-tour
  gnome-connections
]) ++ (with pkgs.gnome; [
]) ++ (with pkgs.gnome; [
   cheese # webcam tool
   # for packages that are pkgs.gnome.***
  gnome-music
  gnome-terminal
  gedit # text editor
   epiphany # web browser
   epiphany # web browser
   geary # email reader
   geary # email reader
   evince # document viewer
   evince # document viewer
  gnome-characters
  totem # video player
  tali # poker game
  iagno # go game
  hitori # sudoku game
  atomix # puzzle game
]);
]);
</syntaxHighlight>
</syntaxhighlight>


== Configuration ==
== Configuration ==


=== Managing extensions ===
=== Managing Extensions ===
 
GNOME extensions are managed and configured by the program "Extensions" that comes with GNOME.
 
Extensions can be installed with Nix, however they aren't enabled by default. To enable them the "Extensions" program can be used.
<syntaxhighlight lang="nixos">
environment.systemPackages = (with pkgs.gnomeExtensions; [
  blur-my-shell
  pop-shell
  # ***
]);
</syntaxhighlight>
 
To declaratively enable and configure, use of modules like home-manager you are required to configure dconf settings.
 
<syntaxhighlight lang="nixos">
dconf = {
        enable = true;
        settings = {
                "org/gnome/shell" = {
                        disabled-user-extensions = false; # enables user extensions (disabled by default)
                        enabled-extensions = [
                                "blur-my-shell@aunetx"
                                # ****
                        ];
                };
 
                # Configure individual extensions
                "org/gnome/shell/extensions/blur-my-shell" = {
                        brightness = 0.75;
                        noise-amount = 0;
                };
        };
};
</syntaxhighlight>


GNOME extensions are managed and configured by the program "Extension" that comes with GNOME.
To learn about settings that can be configured with dconf either look into "dconf editor" program or type <syntaxhighlight lang="shell">dconf watch /</syntaxhighlight> in the terminal and change settings from the GUI and see which options are responsible for that component/element.


Extensions to be installed system-wide by adding them to NixOS configuration in {{ic|environment.systemPackages}} or per-user, or from the GNOME extensions website using a Web browser extension.


=== Dark mode ===
=== Dark mode ===
Line 51: Line 77:
Change default color theme for all GTK4 applications to dark using [[Home Manager]]. Change <code>myuser</code> to the user you want to apply the configuration to.
Change default color theme for all GTK4 applications to dark using [[Home Manager]]. Change <code>myuser</code> to the user you want to apply the configuration to.


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nix">
home-manager.users.myuser = {
home-manager.users.myuser = {
  dconf = {
        dconf = {
    enable = true;
                enable = true;
    settings."org/gnome/desktop/interface".color-scheme = "prefer-dark";
                settings."org/gnome/desktop/interface".color-scheme = "prefer-dark";
  };
        };
};
};
</syntaxHighlight>
</syntaxhighlight>


== Tips and tricks ==
== Tips and tricks ==


=== Running GNOME programs outside of GNOME ===
=== To run GNOME programs outside of GNOME ===


While we are packaging GNOME platform-based applications to be largely [https://nixos.org/nixpkgs/manual/#sec-language-gnome self-contained], they still depend, for one reason or another, on some global configuration. The {{ic|gnome.nix}} module sets all the necessary options for you but if you are running customized set-up, you might need to replicate that yourself.
GNOME platform-based applications are largely [https://nixos.org/nixpkgs/manual/#sec-language-gnome self-contained], but they still depend, for one reason or another, on some global configuration. The {{ic|gnome.nix}} module sets all the necessary options for you but if you are running customized set-up, you might need to replicate that yourself.


For instance, if you see the following error:
For instance, if you see the following error:


<syntaxHighlight lang=text>
<syntaxhighlight lang="text">
dconf-WARNING **: failed to commit changes to dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
dconf-WARNING **: failed to commit changes to dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
</syntaxHighlight>
</syntaxhighlight>


you should enable dconf module:
you should enable dconf module:
Line 98: Line 124:
</syntaxHighlight>
</syntaxHighlight>


=== Running ancient applications ===
=== To run old applications ===


Long ago, in the GNOME 2 era, applications used GConf service to store configuration. This has been deprecated for many years but some applications were abandoned before they managed to upgrade to a newer dconf system. If you are running such application and getting an error like:
Some old applications use GConf service to store configuration. This has been deprecated for many years but some applications were abandoned before they managed to upgrade to a newer dconf system. If you are running such application and getting an error like:


<syntaxHighlight lang=text>
<syntaxHighlight lang=text>
Line 112: Line 138:
</syntaxHighlight>
</syntaxHighlight>


After applying the update one also has restart their desktop session to refresh the user-specific dbus session.
After applying the update restart your desktop session to refresh the user-specific dbus session.


=== Dynamic triple buffering ===
=== Dynamic triple buffering ===
Line 118: Line 144:
Big [https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441 merge request] against Mutter improves the performance of the window manager by a lot (and is already used by Ubuntu). Not merged into nixpkgs due to [https://github.com/NixOS/nixpkgs/issues/197181 philosophy of nixpkgs], but users are free to add this overlay to get it too.
Big [https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441 merge request] against Mutter improves the performance of the window manager by a lot (and is already used by Ubuntu). Not merged into nixpkgs due to [https://github.com/NixOS/nixpkgs/issues/197181 philosophy of nixpkgs], but users are free to add this overlay to get it too.


Currently it's adapted for Gnome 45.
For NixOS 23.11 (gnome 45), add the following:
 
<syntaxhighlight lang="nix">
nixpkgs.overlays = [
        (final: prev: {
                gnome = prev.gnome.overrideScope (gnomeFinal: gnomePrev: {
                        mutter = gnomePrev.mutter.overrideAttrs ( old: {
                                src = pkgs.fetchgit {
                                        url = "https://gitlab.gnome.org/vanvugt/mutter.git";
                                        rev = "0b896518b2028d9c4d6ea44806d093fd33793689";
                                        sha256 = "sha256-mzNy5GPlB2qkI2KEAErJQzO//uo8yO0kPQUwvGDwR4w=";
                                };
                        });
                });
        })
];
</syntaxhighlight>


<syntaxHighlight lang=nix>
For NixOS 24.05 (gnome 46), add the following:
 
<syntaxhighlight lang="nix">
nixpkgs.overlays = [
nixpkgs.overlays = [
  (final: prev: {
        (final: prev: {
    gnome = prev.gnome.overrideScope' (gnomeFinal: gnomePrev: {
                gnome = prev.gnome.overrideScope (gnomeFinal: gnomePrev: {
      mutter = gnomePrev.mutter.overrideAttrs ( old: {
                        mutter = gnomePrev.mutter.overrideAttrs ( old: {
        src = pkgs.fetchgit {
                                src = pkgs.fetchgit {
          url = "https://gitlab.gnome.org/vanvugt/mutter.git";
                                        url = "https://gitlab.gnome.org/vanvugt/mutter.git";
          # GNOME 45: triple-buffering-v4-45
                                        rev = "663f19bc02c1b4e3d1a67b4ad72d644f9b9d6970";
          rev = "0b896518b2028d9c4d6ea44806d093fd33793689";
                                        sha256 = "sha256-I1s4yz5JEWJY65g+dgprchwZuPGP9djgYXrMMxDQGrs=";
          sha256 = "sha256-mzNy5GPlB2qkI2KEAErJQzO//uo8yO0kPQUwvGDwR4w=";
                                };
        };
                        });
      } );
                });
    });
        })
  })
];
];
</syntaxHighlight>
 
</syntaxhighlight>


You might need to disable aliases to make it work:
You might need to disable aliases to make it work:
Line 149: Line 193:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
services.sysprof.enable = true;
services.sysprof.enable = true;
</syntaxHighlight>
=== Automatic screen rotation ===
<syntaxHighlight lang=nix>
hardware.sensor.iio.enable = true;
</syntaxHighlight>
</syntaxHighlight>


Line 154: Line 204:


=== Change user's profile picture ===
=== Change user's profile picture ===
Currently there is no way to change the user's profile picture using Gnome Control Center [https://github.com/NixOS/nixpkgs/issues/10025 (see this issue)] and currently there is no plan to support it officially in NixOS.
Currently there is no way to change the user's profile picture using Gnome Control Center [https://github.com/NixOS/nixpkgs/issues/10025 (see this issue)] and currently there is no plan to support it officially in NixOS. However, you can modify it by copying the profile picture that you want to the path '''/home/$USER/.face''' as a workaround, i.e.
However, you can modify it by copying the profile picture that you want to the path '''/home/$USER/.face''' as a workaround, i.e.


<syntaxHighlight lang=console>
<syntaxHighlight lang=console>
Line 185: Line 234:
[[Category:Desktop environment]]
[[Category:Desktop environment]]
[[Category:Applications]]
[[Category:Applications]]
[[Category:NixOS Manual]]

Latest revision as of 19:31, 16 May 2024

GNOME (/(ɡ)noʊm/) is a desktop environment known for its focus on being simple, intuitive, and easy to use. It is made by The GNOME Project and is composed entirely of free and open-source software. Its Mutter compositor supports both Wayland and X server, and the GNOME Shell user interface is customizable by extensions.

This article is an extension of the documentation in the NixOS manual.

GNOME is available as a module and can be enabled with services.xserver.desktopManager.

Installation

To use GNOME, add this to your configuration.nix:

services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;

Excluding GNOME Applications

To exclude certain applications that are installed by default with GNOME edit configuration.nix as follows:

environment.gnome.excludePackages = (with pkgs; [
  # for packages that are pkgs.***
  gnome-tour
  gnome-connections
]) ++ (with pkgs.gnome; [
  # for packages that are pkgs.gnome.***
  epiphany # web browser
  geary # email reader
  evince # document viewer
]);

Configuration

Managing Extensions

GNOME extensions are managed and configured by the program "Extensions" that comes with GNOME.

Extensions can be installed with Nix, however they aren't enabled by default. To enable them the "Extensions" program can be used.

environment.systemPackages = (with pkgs.gnomeExtensions; [
  blur-my-shell
  pop-shell
  # ***
]);

To declaratively enable and configure, use of modules like home-manager you are required to configure dconf settings.

dconf = {
        enable = true;
        settings = {
                "org/gnome/shell" = {
                        disabled-user-extensions = false; # enables user extensions (disabled by default)
                        enabled-extensions = [
                                "blur-my-shell@aunetx"
                                # ****
                        ];
                };

                # Configure individual extensions
                "org/gnome/shell/extensions/blur-my-shell" = {
                        brightness = 0.75;
                        noise-amount = 0;
                };
        };
};

To learn about settings that can be configured with dconf either look into "dconf editor" program or type

dconf watch /

in the terminal and change settings from the GUI and see which options are responsible for that component/element.


Dark mode

Change default color theme for all GTK4 applications to dark using Home Manager. Change myuser to the user you want to apply the configuration to.

home-manager.users.myuser = {
        dconf = {
                enable = true;
                settings."org/gnome/desktop/interface".color-scheme = "prefer-dark";
        };
};

Tips and tricks

To run GNOME programs outside of GNOME

GNOME platform-based applications are largely self-contained, but they still depend, for one reason or another, on some global configuration. The gnome.nix module sets all the necessary options for you but if you are running customized set-up, you might need to replicate that yourself.

For instance, if you see the following error:

dconf-WARNING **: failed to commit changes to dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files

you should enable dconf module:

programs.dconf.enable = true;

Many applications rely heavily on having an icon theme available, GNOME’s Adwaita is a good choice but most recent icon themes should work as well.

environment.systemPackages = [ gnome.adwaita-icon-theme ];

Systray Icons

To get systray icons, install the related gnome shell extension

environment.systemPackages = with pkgs; [ gnomeExtensions.appindicator ];

And ensure gnome-settings-daemon udev rules are enabled :

services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ];

To run old applications

Some old applications use GConf service to store configuration. This has been deprecated for many years but some applications were abandoned before they managed to upgrade to a newer dconf system. If you are running such application and getting an error like:

GLib.GException: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information

you need to add gnome2.GConf to the list of dbus packages in your configuration.nix:

services.dbus.packages = with pkgs; [ gnome2.GConf ];

After applying the update restart your desktop session to refresh the user-specific dbus session.

Dynamic triple buffering

Big merge request against Mutter improves the performance of the window manager by a lot (and is already used by Ubuntu). Not merged into nixpkgs due to philosophy of nixpkgs, but users are free to add this overlay to get it too.

For NixOS 23.11 (gnome 45), add the following:

nixpkgs.overlays = [
        (final: prev: {
                gnome = prev.gnome.overrideScope (gnomeFinal: gnomePrev: {
                        mutter = gnomePrev.mutter.overrideAttrs ( old: {
                                src = pkgs.fetchgit {
                                        url = "https://gitlab.gnome.org/vanvugt/mutter.git";
                                        rev = "0b896518b2028d9c4d6ea44806d093fd33793689";
                                        sha256 = "sha256-mzNy5GPlB2qkI2KEAErJQzO//uo8yO0kPQUwvGDwR4w=";
                                };
                        });
                });
        })
];

For NixOS 24.05 (gnome 46), add the following:

nixpkgs.overlays = [
        (final: prev: {
                gnome = prev.gnome.overrideScope (gnomeFinal: gnomePrev: {
                        mutter = gnomePrev.mutter.overrideAttrs ( old: {
                                src = pkgs.fetchgit {
                                        url = "https://gitlab.gnome.org/vanvugt/mutter.git";
                                        rev = "663f19bc02c1b4e3d1a67b4ad72d644f9b9d6970";
                                        sha256 = "sha256-I1s4yz5JEWJY65g+dgprchwZuPGP9djgYXrMMxDQGrs=";
                                };
                        });
                });
        })
];

You might need to disable aliases to make it work:

nixpkgs.config.allowAliases = false;

Profiling (with sysprof)

Install sysprof as a system package (it won't work properly if installed against users). Then enable the associated service with

services.sysprof.enable = true;

Automatic screen rotation

hardware.sensor.iio.enable = true;

Troubleshoots

Change user's profile picture

Currently there is no way to change the user's profile picture using Gnome Control Center (see this issue) and currently there is no plan to support it officially in NixOS. However, you can modify it by copying the profile picture that you want to the path /home/$USER/.face as a workaround, i.e.

$ mv /path/to/image.jpg ~/.face

automatic login

If you have enabled auto login (with GNOME) with something like

grep autoLogin /etc/nixos/configuration.nix
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "account";

than add the following (as a workaround for a current (2023)[1] problem)

# nano /etc/nixos/configuration.nix
systemd.services."getty@tty1".enable = false;
systemd.services."autovt@tty1".enable = false;

.

Also see

GNOME/Calendar