nixos/gnome: Remove global with expressions

The can potentially mask evaluation errors due to laziness of variable access within.
This commit is contained in:
Jan Tojnar 2024-04-30 18:57:01 +02:00
parent f77c3bf760
commit 5b2b3b8558
22 changed files with 102 additions and 145 deletions

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
let cfg = config.programs.evince; let cfg = config.programs.evince;
in { in {
@ -14,9 +12,9 @@ in {
programs.evince = { programs.evince = {
enable = mkEnableOption "Evince, the GNOME document viewer"; enable = lib.mkEnableOption "Evince, the GNOME document viewer";
package = mkPackageOption pkgs "evince" { }; package = lib.mkPackageOption pkgs "evince" { };
}; };
@ -25,7 +23,7 @@ in {
###### implementation ###### implementation
config = mkIf config.programs.evince.enable { config = lib.mkIf config.programs.evince.enable {
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
let cfg = config.programs.file-roller; let cfg = config.programs.file-roller;
in { in {
@ -14,9 +12,9 @@ in {
programs.file-roller = { programs.file-roller = {
enable = mkEnableOption "File Roller, an archive manager for GNOME"; enable = lib.mkEnableOption "File Roller, an archive manager for GNOME";
package = mkPackageOption pkgs [ "gnome" "file-roller" ] { }; package = lib.mkPackageOption pkgs [ "gnome" "file-roller" ] { };
}; };
@ -25,7 +23,7 @@ in {
###### implementation ###### implementation
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
programs.gnome-disks = { programs.gnome-disks = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable GNOME Disks daemon, a program designed to Whether to enable GNOME Disks daemon, a program designed to
@ -32,7 +30,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.programs.gnome-disks.enable { config = lib.mkIf config.programs.gnome-disks.enable {
environment.systemPackages = [ pkgs.gnome.gnome-disk-utility ]; environment.systemPackages = [ pkgs.gnome.gnome-disk-utility ];

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
let let
cfg = config.programs.gnome-terminal; cfg = config.programs.gnome-terminal;
@ -13,14 +11,14 @@ in
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
options = { options = {
programs.gnome-terminal.enable = mkEnableOption "GNOME Terminal"; programs.gnome-terminal.enable = lib.mkEnableOption "GNOME Terminal";
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.gnome.gnome-terminal ]; environment.systemPackages = [ pkgs.gnome.gnome-terminal ];
services.dbus.packages = [ pkgs.gnome.gnome-terminal ]; services.dbus.packages = [ pkgs.gnome.gnome-terminal ];
systemd.packages = [ pkgs.gnome.gnome-terminal ]; systemd.packages = [ pkgs.gnome.gnome-terminal ];

View File

@ -1,15 +1,13 @@
# GPaste. # GPaste.
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
###### interface ###### interface
options = { options = {
programs.gpaste = { programs.gpaste = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable GPaste, a clipboard manager. Whether to enable GPaste, a clipboard manager.
@ -19,7 +17,7 @@ with lib;
}; };
###### implementation ###### implementation
config = mkIf config.programs.gpaste.enable { config = lib.mkIf config.programs.gpaste.enable {
environment.systemPackages = [ pkgs.gnome.gpaste ]; environment.systemPackages = [ pkgs.gnome.gpaste ];
services.dbus.packages = [ pkgs.gnome.gpaste ]; services.dbus.packages = [ pkgs.gnome.gpaste ];
systemd.packages = [ pkgs.gnome.gpaste ]; systemd.packages = [ pkgs.gnome.gpaste ];

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
###### interface ###### interface
@ -12,7 +10,7 @@ with lib;
programs.seahorse = { programs.seahorse = {
enable = mkEnableOption "Seahorse, a GNOME application for managing encryption keys and passwords in the GNOME Keyring"; enable = lib.mkEnableOption "Seahorse, a GNOME application for managing encryption keys and passwords in the GNOME Keyring";
}; };
@ -21,9 +19,9 @@ with lib;
###### implementation ###### implementation
config = mkIf config.programs.seahorse.enable { config = lib.mkIf config.programs.seahorse.enable {
programs.ssh.askPassword = mkDefault "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass"; programs.ssh.askPassword = lib.mkDefault "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass";
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnome.seahorse pkgs.gnome.seahorse

View File

@ -2,12 +2,10 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -15,8 +13,8 @@ with lib;
services.gnome.at-spi2-core = { services.gnome.at-spi2-core = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable at-spi2-core, a service for the Assistive Technologies Whether to enable at-spi2-core, a service for the Assistive Technologies
@ -34,14 +32,14 @@ with lib;
###### implementation ###### implementation
config = mkMerge [ config = lib.mkMerge [
(mkIf config.services.gnome.at-spi2-core.enable { (lib.mkIf config.services.gnome.at-spi2-core.enable {
environment.systemPackages = [ pkgs.at-spi2-core ]; environment.systemPackages = [ pkgs.at-spi2-core ];
services.dbus.packages = [ pkgs.at-spi2-core ]; services.dbus.packages = [ pkgs.at-spi2-core ];
systemd.packages = [ pkgs.at-spi2-core ]; systemd.packages = [ pkgs.at-spi2-core ];
}) })
(mkIf (!config.services.gnome.at-spi2-core.enable) { (lib.mkIf (!config.services.gnome.at-spi2-core.enable) {
environment.sessionVariables = { environment.sessionVariables = {
NO_AT_BRIDGE = "1"; NO_AT_BRIDGE = "1";
GTK_A11Y = "none"; GTK_A11Y = "none";

View File

@ -2,12 +2,10 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -15,19 +13,19 @@ with lib;
options = { options = {
services.gnome.evolution-data-server = { services.gnome.evolution-data-server = {
enable = mkEnableOption "Evolution Data Server, a collection of services for storing addressbooks and calendars"; enable = lib.mkEnableOption "Evolution Data Server, a collection of services for storing addressbooks and calendars";
plugins = mkOption { plugins = lib.mkOption {
type = types.listOf types.package; type = lib.types.listOf lib.types.package;
default = [ ]; default = [ ];
description = "Plugins for Evolution Data Server."; description = "Plugins for Evolution Data Server.";
}; };
}; };
programs.evolution = { programs.evolution = {
enable = mkEnableOption "Evolution, a Personal information management application that provides integrated mail, calendaring and address book functionality"; enable = lib.mkEnableOption "Evolution, a Personal information management application that provides integrated mail, calendaring and address book functionality";
plugins = mkOption { plugins = lib.mkOption {
type = types.listOf types.package; type = lib.types.listOf lib.types.package;
default = [ ]; default = [ ];
example = literalExpression "[ pkgs.evolution-ews ]"; example = lib.literalExpression "[ pkgs.evolution-ews ]";
description = "Plugins for Evolution."; description = "Plugins for Evolution.";
}; };
@ -40,15 +38,15 @@ with lib;
let let
bundle = pkgs.evolutionWithPlugins.override { inherit (config.services.gnome.evolution-data-server) plugins; }; bundle = pkgs.evolutionWithPlugins.override { inherit (config.services.gnome.evolution-data-server) plugins; };
in in
mkMerge [ lib.mkMerge [
(mkIf config.services.gnome.evolution-data-server.enable { (lib.mkIf config.services.gnome.evolution-data-server.enable {
environment.systemPackages = [ bundle ]; environment.systemPackages = [ bundle ];
services.dbus.packages = [ bundle ]; services.dbus.packages = [ bundle ];
systemd.packages = [ bundle ]; systemd.packages = [ bundle ];
}) })
(mkIf config.programs.evolution.enable { (lib.mkIf config.programs.evolution.enable {
services.gnome.evolution-data-server = { services.gnome.evolution-data-server = {
enable = true; enable = true;
plugins = [ pkgs.evolution ] ++ config.programs.evolution.plugins; plugins = [ pkgs.evolution ] ++ config.programs.evolution.plugins;

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,7 +14,7 @@ with lib;
services.gnome.glib-networking = { services.gnome.glib-networking = {
enable = mkEnableOption "network extensions for GLib"; enable = lib.mkEnableOption "network extensions for GLib";
}; };
@ -24,7 +22,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.glib-networking.enable { config = lib.mkIf config.services.gnome.glib-networking.enable {
services.dbus.packages = [ pkgs.glib-networking ]; services.dbus.packages = [ pkgs.glib-networking ];

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
let let
# GNOME initial setup's run is conditioned on whether # GNOME initial setup's run is conditioned on whether
@ -45,7 +43,7 @@ in
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -54,7 +52,7 @@ in
services.gnome.gnome-initial-setup = { services.gnome.gnome-initial-setup = {
enable = mkEnableOption "GNOME Initial Setup, a Simple, easy, and safe way to prepare a new system"; enable = lib.mkEnableOption "GNOME Initial Setup, a Simple, easy, and safe way to prepare a new system";
}; };
@ -63,12 +61,12 @@ in
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-initial-setup.enable { config = lib.mkIf config.services.gnome.gnome-initial-setup.enable {
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnome.gnome-initial-setup pkgs.gnome.gnome-initial-setup
] ]
++ optional (versionOlder config.system.stateVersion "20.03") createGisStampFilesAutostart ++ lib.optional (lib.versionOlder config.system.stateVersion "20.03") createGisStampFilesAutostart
; ;
systemd.packages = [ systemd.packages = [

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
services.gnome.gnome-keyring = { services.gnome.gnome-keyring = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable GNOME Keyring daemon, a service designed to Whether to enable GNOME Keyring daemon, a service designed to
@ -33,7 +31,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-keyring.enable { config = lib.mkIf config.services.gnome.gnome-keyring.enable {
environment.systemPackages = [ pkgs.gnome.gnome-keyring ]; environment.systemPackages = [ pkgs.gnome.gnome-keyring ];

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
services.gnome.gnome-online-accounts = { services.gnome.gnome-online-accounts = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable GNOME Online Accounts daemon, a service that provides Whether to enable GNOME Online Accounts daemon, a service that provides
@ -32,7 +30,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-online-accounts.enable { config = lib.mkIf config.services.gnome.gnome-online-accounts.enable {
environment.systemPackages = [ pkgs.gnome-online-accounts ]; environment.systemPackages = [ pkgs.gnome-online-accounts ];

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
services.gnome.gnome-online-miners = { services.gnome.gnome-online-miners = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable GNOME Online Miners, a service that Whether to enable GNOME Online Miners, a service that
@ -32,7 +30,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-online-miners.enable { config = lib.mkIf config.services.gnome.gnome-online-miners.enable {
environment.systemPackages = [ pkgs.gnome.gnome-online-miners ]; environment.systemPackages = [ pkgs.gnome.gnome-online-miners ];

View File

@ -1,22 +1,20 @@
# Remote desktop daemon using Pipewire. # Remote desktop daemon using Pipewire.
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
options = { options = {
services.gnome.gnome-remote-desktop = { services.gnome.gnome-remote-desktop = {
enable = mkEnableOption "Remote Desktop support using Pipewire"; enable = lib.mkEnableOption "Remote Desktop support using Pipewire";
}; };
}; };
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-remote-desktop.enable { config = lib.mkIf config.services.gnome.gnome-remote-desktop.enable {
services.pipewire.enable = true; services.pipewire.enable = true;
systemd.packages = [ pkgs.gnome.gnome-remote-desktop ]; systemd.packages = [ pkgs.gnome.gnome-remote-desktop ];

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
let let
cfg = config.services.gnome.gnome-settings-daemon; cfg = config.services.gnome.gnome-settings-daemon;
@ -13,7 +11,7 @@ in
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -22,7 +20,7 @@ in
services.gnome.gnome-settings-daemon = { services.gnome.gnome-settings-daemon = {
enable = mkEnableOption "GNOME Settings Daemon"; enable = lib.mkEnableOption "GNOME Settings Daemon";
}; };
@ -31,7 +29,7 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnome.gnome-settings-daemon pkgs.gnome.gnome-settings-daemon

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,7 +14,7 @@ with lib;
services.gnome.gnome-user-share = { services.gnome.gnome-user-share = {
enable = mkEnableOption "GNOME User Share, a user-level file sharing service for GNOME"; enable = lib.mkEnableOption "GNOME User Share, a user-level file sharing service for GNOME";
}; };
@ -25,7 +23,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.gnome-user-share.enable { config = lib.mkIf config.services.gnome.gnome-user-share.enable {
environment.systemPackages = [ environment.systemPackages = [
pkgs.gnome.gnome-user-share pkgs.gnome.gnome-user-share

View File

@ -1,30 +1,28 @@
# rygel service. # rygel service.
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
options = { options = {
services.gnome.rygel = { services.gnome.rygel = {
enable = mkOption { enable = lib.mkOption {
default = false; default = false;
description = '' description = ''
Whether to enable Rygel UPnP Mediaserver. Whether to enable Rygel UPnP Mediaserver.
You will need to also allow UPnP connections in firewall, see the following [comment](https://github.com/NixOS/nixpkgs/pull/45045#issuecomment-416030795). You will need to also allow UPnP connections in firewall, see the following [comment](https://github.com/NixOS/nixpkgs/pull/45045#issuecomment-416030795).
''; '';
type = types.bool; type = lib.types.bool;
}; };
}; };
}; };
###### implementation ###### implementation
config = mkIf config.services.gnome.rygel.enable { config = lib.mkIf config.services.gnome.rygel.enable {
environment.systemPackages = [ pkgs.gnome.rygel ]; environment.systemPackages = [ pkgs.gnome.rygel ];
services.dbus.packages = [ pkgs.gnome.rygel ]; services.dbus.packages = [ pkgs.gnome.rygel ];

View File

@ -2,12 +2,10 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
services.gnome.sushi = { services.gnome.sushi = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable Sushi, a quick previewer for nautilus. Whether to enable Sushi, a quick previewer for nautilus.
@ -31,7 +29,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.sushi.enable { config = lib.mkIf config.services.gnome.sushi.enable {
environment.systemPackages = [ pkgs.gnome.sushi ]; environment.systemPackages = [ pkgs.gnome.sushi ];

View File

@ -2,12 +2,10 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -16,8 +14,8 @@ with lib;
services.gnome.tracker-miners = { services.gnome.tracker-miners = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable Tracker miners, indexing services for Tracker Whether to enable Tracker miners, indexing services for Tracker
@ -31,7 +29,7 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.gnome.tracker-miners.enable { config = lib.mkIf config.services.gnome.tracker-miners.enable {
environment.systemPackages = [ pkgs.tracker-miners ]; environment.systemPackages = [ pkgs.tracker-miners ];

View File

@ -2,15 +2,13 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib;
let let
cfg = config.services.gnome.tracker; cfg = config.services.gnome.tracker;
in in
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -19,8 +17,8 @@ in
services.gnome.tracker = { services.gnome.tracker = {
enable = mkOption { enable = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = '' description = ''
Whether to enable Tracker services, a search engine, Whether to enable Tracker services, a search engine,
@ -28,8 +26,8 @@ in
''; '';
}; };
subcommandPackages = mkOption { subcommandPackages = lib.mkOption {
type = types.listOf types.package; type = lib.types.listOf lib.types.package;
default = [ ]; default = [ ];
internal = true; internal = true;
description = '' description = ''
@ -44,7 +42,7 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.tracker ]; environment.systemPackages = [ pkgs.tracker ];

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
let let
cfg = config.services.gvfs; cfg = config.services.gvfs;
@ -13,7 +11,7 @@ in
{ {
meta = { meta = {
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
###### interface ###### interface
@ -22,10 +20,10 @@ in
services.gvfs = { services.gvfs = {
enable = mkEnableOption "GVfs, a userspace virtual filesystem"; enable = lib.mkEnableOption "GVfs, a userspace virtual filesystem";
# gvfs can be built with multiple configurations # gvfs can be built with multiple configurations
package = mkPackageOption pkgs [ "gnome" "gvfs" ] { }; package = lib.mkPackageOption pkgs [ "gnome" "gvfs" ] { };
}; };
@ -34,7 +32,7 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ]; environment.systemPackages = [ cfg.package ];

View File

@ -1,8 +1,7 @@
{ config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }:
with lib;
let let
inherit (lib) mkOption types mkDefault mkEnableOption literalExpression;
cfg = config.services.xserver.desktopManager.gnome; cfg = config.services.xserver.desktopManager.gnome;
serviceCfg = config.services.gnome; serviceCfg = config.services.gnome;
@ -51,8 +50,8 @@ let
destination = "/share/gnome-background-properties/nixos.xml"; destination = "/share/gnome-background-properties/nixos.xml";
}; };
flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0; flashbackEnabled = cfg.flashback.enableMetacity || lib.length cfg.flashback.customSessions > 0;
flashbackWms = optional cfg.flashback.enableMetacity { flashbackWms = lib.optional cfg.flashback.enableMetacity {
wmName = "metacity"; wmName = "metacity";
wmLabel = "Metacity"; wmLabel = "Metacity";
wmCommand = "${pkgs.gnome.metacity}/bin/metacity"; wmCommand = "${pkgs.gnome.metacity}/bin/metacity";
@ -67,7 +66,7 @@ in
meta = { meta = {
doc = ./gnome.md; doc = ./gnome.md;
maintainers = teams.gnome.members; maintainers = lib.teams.gnome.members;
}; };
options = { options = {
@ -184,8 +183,8 @@ in
}; };
config = mkMerge [ config = lib.mkMerge [
(mkIf (cfg.enable || flashbackEnabled) { (lib.mkIf (cfg.enable || flashbackEnabled) {
# Seed our configuration into nixos-generate-config # Seed our configuration into nixos-generate-config
system.nixos-generate-config.desktopConfiguration = ['' system.nixos-generate-config.desktopConfiguration = [''
# Enable the GNOME Desktop Environment. # Enable the GNOME Desktop Environment.
@ -200,7 +199,7 @@ in
services.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ]; services.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ];
environment.extraInit = '' environment.extraInit = ''
${concatMapStrings (p: '' ${lib.concatMapStrings (p: ''
if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then 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} export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
fi fi
@ -214,19 +213,19 @@ in
environment.systemPackages = cfg.sessionPath; environment.systemPackages = cfg.sessionPath;
environment.sessionVariables.GNOME_SESSION_DEBUG = mkIf cfg.debug "1"; environment.sessionVariables.GNOME_SESSION_DEBUG = lib.mkIf cfg.debug "1";
# Override GSettings schemas # Override GSettings schemas
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
}) })
(mkIf flashbackEnabled { (lib.mkIf flashbackEnabled {
services.displayManager.sessionPackages = services.displayManager.sessionPackages =
let let
wmNames = map (wm: wm.wmName) flashbackWms; wmNames = map (wm: wm.wmName) flashbackWms;
namesAreUnique = lib.unique wmNames == wmNames; namesAreUnique = lib.unique wmNames == wmNames;
in in
assert (assertMsg namesAreUnique "Flashback WM names must be unique."); assert (lib.assertMsg namesAreUnique "Flashback WM names must be unique.");
map map
(wm: (wm:
pkgs.gnome.gnome-flashback.mkSessionForWm { pkgs.gnome.gnome-flashback.mkSessionForWm {
@ -254,7 +253,7 @@ in
++ (map (wm: gnome-flashback.mkGnomeSession { inherit (wm) wmName wmLabel enableGnomePanel; }) flashbackWms); ++ (map (wm: gnome-flashback.mkGnomeSession { inherit (wm) wmName wmLabel enableGnomePanel; }) flashbackWms);
}) })
(mkIf serviceCfg.core-os-services.enable { (lib.mkIf serviceCfg.core-os-services.enable {
hardware.bluetooth.enable = mkDefault true; hardware.bluetooth.enable = mkDefault true;
hardware.pulseaudio.enable = mkDefault true; hardware.pulseaudio.enable = mkDefault true;
programs.dconf.enable = true; programs.dconf.enable = true;
@ -307,7 +306,7 @@ in
]; ];
}) })
(mkIf serviceCfg.core-shell.enable { (lib.mkIf serviceCfg.core-shell.enable {
services.xserver.desktopManager.gnome.sessionPath = services.xserver.desktopManager.gnome.sessionPath =
let let
mandatoryPackages = [ mandatoryPackages = [
@ -329,7 +328,7 @@ in
services.gnome.gnome-user-share.enable = mkDefault true; services.gnome.gnome-user-share.enable = mkDefault true;
services.gnome.rygel.enable = mkDefault true; services.gnome.rygel.enable = mkDefault true;
services.gvfs.enable = true; services.gvfs.enable = true;
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true)); services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (mkDefault true));
systemd.packages = with pkgs.gnome; [ systemd.packages = with pkgs.gnome; [
gnome-session gnome-session
@ -399,7 +398,7 @@ in
}) })
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/gnome-45/elements/core/meta-gnome-core-utilities.bst # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/gnome-45/elements/core/meta-gnome-core-utilities.bst
(mkIf serviceCfg.core-utilities.enable { (lib.mkIf serviceCfg.core-utilities.enable {
environment.systemPackages = environment.systemPackages =
with pkgs.gnome; with pkgs.gnome;
utils.removePackagesByName utils.removePackagesByName
@ -460,7 +459,7 @@ in
]; ];
}) })
(mkIf serviceCfg.games.enable { (lib.mkIf serviceCfg.games.enable {
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
aisleriot aisleriot
atomix atomix
@ -486,7 +485,7 @@ in
}) })
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst # 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 { (lib.mkIf serviceCfg.core-developer-tools.enable {
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [ environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
dconf-editor dconf-editor
devhelp devhelp