66ee7a4c46
Fixes this (line wrapped): $ gnome-control-center [... click on the "Color" item ...] (gnome-control-center:3977): color-cc-panel-WARNING **: \ The name org.freedesktop.ColorManager was not provided by any .service files With this patch applied, the above warnings are not printed and the GUI shows some devices that can be managed (my printer and display). Without this patch the GUI is empty (non-functional). (cups will also complain in the journal with a similar message when doing print jobs, without this patch.)
192 lines
7.3 KiB
Nix
192 lines
7.3 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.services.xserver.desktopManager.gnome3;
|
|
gnome3 = config.environment.gnome3.packageSet;
|
|
|
|
# Remove packages of ys from xs, based on their names
|
|
removePackagesByName = xs: ys:
|
|
let
|
|
pkgName = drv: (builtins.parseDrvName drv.name).name;
|
|
ysNames = map pkgName ys;
|
|
res = (filter (x: !(builtins.elem (pkgName x) ysNames)) xs);
|
|
in
|
|
filter (x: !(builtins.elem (pkgName x) ysNames)) xs;
|
|
|
|
# Prioritize nautilus by default when opening directories
|
|
mimeAppsList = pkgs.writeTextFile {
|
|
name = "gnome-mimeapps";
|
|
destination = "/share/applications/mimeapps.list";
|
|
text = ''
|
|
[Default Applications]
|
|
inode/directory=nautilus.desktop;org.gnome.Nautilus.desktop
|
|
'';
|
|
};
|
|
|
|
nixos-gsettings-desktop-schemas = pkgs.stdenv.mkDerivation {
|
|
name = "nixos-gsettings-desktop-schemas";
|
|
buildCommand = ''
|
|
mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
|
|
cp -rf ${gnome3.gsettings_desktop_schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
|
|
|
|
${concatMapStrings (pkg: "cp -rf ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas\n") cfg.extraGSettingsOverridePackages}
|
|
|
|
chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
|
|
cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
|
|
[org.gnome.desktop.background]
|
|
picture-uri='${pkgs.nixos-artwork}/share/artwork/gnome/Gnome_Dark.png'
|
|
|
|
[org.gnome.desktop.screensaver]
|
|
picture-uri='${pkgs.nixos-artwork}/share/artwork/gnome/Gnome_Dark.png'
|
|
|
|
${cfg.extraGSettingsOverrides}
|
|
EOF
|
|
|
|
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
|
|
'';
|
|
};
|
|
|
|
in {
|
|
|
|
options = {
|
|
|
|
services.xserver.desktopManager.gnome3 = {
|
|
enable = mkOption {
|
|
default = false;
|
|
example = true;
|
|
description = "Enable Gnome 3 desktop manager.";
|
|
};
|
|
|
|
sessionPath = mkOption {
|
|
default = [];
|
|
example = literalExample "[ pkgs.gnome3.gpaste ]";
|
|
description = "Additional list of packages to be added to the session search path.
|
|
Useful for gnome shell extensions or gsettings-conditionated autostart.";
|
|
apply = list: list ++ [ gnome3.gnome_shell gnome3.gnome-shell-extensions ];
|
|
};
|
|
|
|
extraGSettingsOverrides = mkOption {
|
|
default = "";
|
|
type = types.lines;
|
|
description = "Additional gsettings overrides.";
|
|
};
|
|
|
|
extraGSettingsOverridePackages = mkOption {
|
|
default = [];
|
|
type = types.listOf types.path;
|
|
description = "List of packages for which gsettings are overridden.";
|
|
};
|
|
|
|
debug = mkEnableOption "gnome-session debug messages";
|
|
};
|
|
|
|
environment.gnome3.packageSet = mkOption {
|
|
default = null;
|
|
example = literalExample "pkgs.gnome3_18";
|
|
description = "Which GNOME 3 package set to use.";
|
|
apply = p: if p == null then pkgs.gnome3 else p;
|
|
};
|
|
|
|
environment.gnome3.excludePackages = mkOption {
|
|
default = [];
|
|
example = literalExample "[ pkgs.gnome3.totem ]";
|
|
type = types.listOf types.package;
|
|
description = "Which packages gnome should exclude from the default environment";
|
|
};
|
|
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
# Enable helpful DBus services.
|
|
security.polkit.enable = true;
|
|
services.udisks2.enable = true;
|
|
services.accounts-daemon.enable = true;
|
|
services.geoclue2.enable = mkDefault true;
|
|
services.gnome3.at-spi2-core.enable = true;
|
|
services.gnome3.evolution-data-server.enable = true;
|
|
services.gnome3.gnome-documents.enable = mkDefault true;
|
|
services.gnome3.gnome-keyring.enable = true;
|
|
services.gnome3.gnome-online-accounts.enable = mkDefault true;
|
|
services.gnome3.gnome-user-share.enable = mkDefault true;
|
|
services.gnome3.gvfs.enable = true;
|
|
services.gnome3.seahorse.enable = mkDefault true;
|
|
services.gnome3.sushi.enable = mkDefault true;
|
|
services.gnome3.tracker.enable = mkDefault true;
|
|
hardware.pulseaudio.enable = mkDefault true;
|
|
services.telepathy.enable = mkDefault true;
|
|
networking.networkmanager.enable = mkDefault true;
|
|
services.upower.enable = config.powerManagement.enable;
|
|
services.dbus.packages = mkIf config.services.printing.enable [ pkgs.system-config-printer ];
|
|
services.colord.enable = mkDefault true;
|
|
hardware.bluetooth.enable = mkDefault true;
|
|
|
|
fonts.fonts = [ pkgs.dejavu_fonts pkgs.cantarell_fonts ];
|
|
|
|
services.xserver.desktopManager.session = singleton
|
|
{ name = "gnome3";
|
|
bgSupport = true;
|
|
start = ''
|
|
# Set GTK_DATA_PREFIX so that GTK+ can find the themes
|
|
export GTK_DATA_PREFIX=${config.system.path}
|
|
|
|
# find theme engines
|
|
export GTK_PATH=${config.system.path}/lib/gtk-3.0:${config.system.path}/lib/gtk-2.0
|
|
|
|
export XDG_MENU_PREFIX=gnome
|
|
|
|
${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}
|
|
|
|
# Override default mimeapps
|
|
export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${mimeAppsList}/share
|
|
|
|
# Override gsettings-desktop-schema
|
|
export XDG_DATA_DIRS=${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS
|
|
|
|
# Let nautilus find extensions
|
|
export NAUTILUS_EXTENSION_DIR=${config.system.path}/lib/nautilus/extensions-3.0/
|
|
|
|
# Find the mouse
|
|
export XCURSOR_PATH=~/.icons:${config.system.path}/share/icons
|
|
|
|
# Update user dirs as described in http://freedesktop.org/wiki/Software/xdg-user-dirs/
|
|
${pkgs.xdg-user-dirs}/bin/xdg-user-dirs-update
|
|
|
|
${gnome3.gnome_session}/bin/gnome-session ${optionalString cfg.debug "--debug"} &
|
|
waitPID=$!
|
|
'';
|
|
};
|
|
|
|
services.xserver.updateDbusEnvironment = true;
|
|
|
|
environment.variables.GIO_EXTRA_MODULES = [ "${gnome3.dconf}/lib/gio/modules"
|
|
"${gnome3.glib_networking.out}/lib/gio/modules"
|
|
"${gnome3.gvfs}/lib/gio/modules" ];
|
|
environment.systemPackages = gnome3.corePackages ++ cfg.sessionPath
|
|
++ (removePackagesByName gnome3.optionalPackages config.environment.gnome3.excludePackages);
|
|
|
|
# Use the correct gnome3 packageSet
|
|
networking.networkmanager.basePackages =
|
|
{ inherit (pkgs) networkmanager modemmanager wpa_supplicant;
|
|
inherit (gnome3) networkmanager_openvpn networkmanager_vpnc
|
|
networkmanager_openconnect networkmanager_pptp
|
|
networkmanager_l2tp; };
|
|
|
|
# Needed for themes and backgrounds
|
|
environment.pathsToLink = [ "/share" ];
|
|
|
|
};
|
|
|
|
|
|
}
|