From ce87196a00214a0062ece1c3e03a9a97f563580f Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 17:53:40 +0300 Subject: [PATCH 1/8] nixos/nixpkgs: assert that nixpkgs.config is not set when pkgs is passed in externally This is a common footgun people hit often. Remove it. --- nixos/modules/misc/nixpkgs.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nixos/modules/misc/nixpkgs.nix b/nixos/modules/misc/nixpkgs.nix index f9d8bccea284..1b0434fa7674 100644 --- a/nixos/modules/misc/nixpkgs.nix +++ b/nixos/modules/misc/nixpkgs.nix @@ -383,6 +383,16 @@ in the legacy definitions. ''; } + { + assertion = opt.pkgs.isDefined -> cfg.config == {}; + message = '' + Your system configures nixpkgs with an externally created instance. + `nixpkgs.config` options should be passed when creating the instance instead. + + Current value: + ${lib.generators.toPretty { multiline = true; } opt.config} + ''; + } ]; }; From 38461ff27aa4b0511cf1b1f17a62d415ec88cc5c Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 17:54:22 +0300 Subject: [PATCH 2/8] nixos/locate: remove `nixpkgs.config` usage --- nixos/modules/misc/locate.nix | 4 +--- pkgs/tools/misc/mlocate/default.nix | 6 ++---- pkgs/tools/misc/plocate/default.nix | 4 +--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/nixos/modules/misc/locate.nix b/nixos/modules/misc/locate.nix index acf441cda628..482d12fe0ca3 100644 --- a/nixos/modules/misc/locate.nix +++ b/nixos/modules/misc/locate.nix @@ -230,9 +230,7 @@ in plocate = (mkIf isPLocate (mkMerge [ common plocate ])); }; - nixpkgs.config = { locate.dbfile = cfg.output; }; - - environment.systemPackages = [ cfg.locate ]; + environment.systemPackages = [ (cfg.locate.override { dbfile = cfg.output; }) ]; environment.variables = mkIf (!isMorPLocate) { LOCATE_PATH = cfg.output; }; diff --git a/pkgs/tools/misc/mlocate/default.nix b/pkgs/tools/misc/mlocate/default.nix index 12d9f5622cc4..b57f109eda0a 100644 --- a/pkgs/tools/misc/mlocate/default.nix +++ b/pkgs/tools/misc/mlocate/default.nix @@ -1,8 +1,6 @@ -{ lib, stdenv, fetchurl, config }: +{ lib, stdenv, fetchurl, config, dbfile ? config.locate.dbfile or "/var/cache/locatedb" }: -let - dbfile = lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config; -in stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "mlocate"; version = "0.26"; diff --git a/pkgs/tools/misc/plocate/default.nix b/pkgs/tools/misc/plocate/default.nix index 356d58ccbc35..a49ff5d18389 100644 --- a/pkgs/tools/misc/plocate/default.nix +++ b/pkgs/tools/misc/plocate/default.nix @@ -8,10 +8,8 @@ , systemd , liburing , zstd +, dbfile ? config.locate.dbfile or "/var/cache/locatedb" }: -let - dbfile = lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config; -in stdenv.mkDerivation rec { pname = "plocate"; version = "1.1.19"; From 7a7c1859cdb11ba331a75b9a4888e36f5ef17aca Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 17:57:23 +0300 Subject: [PATCH 3/8] nixos/lightdm-tiny-greeter: remove `nixpkgs.config` usage --- .../x11/display-managers/lightdm-greeters/tiny.nix | 10 ++++------ .../display-managers/lightdm-tiny-greeter/default.nix | 2 +- pkgs/top-level/all-packages.nix | 4 +--- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix b/nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix index 8d6bfa98a7e4..dede7680ecb3 100644 --- a/nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix +++ b/nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix @@ -61,7 +61,7 @@ in services.xserver.displayManager.lightdm.greeters.gtk.enable = false; - nixpkgs.config.lightdm-tiny-greeter.conf = + services.xserver.displayManager.lightdm.greeter = let configHeader = '' #include @@ -69,13 +69,11 @@ in static const char *pass_text = "${cfg.label.pass}"; static const char *session = "${dmcfg.defaultSession}"; ''; + config = optionalString (cfg.extraConfig != "") (configHeader + cfg.extraConfig); + package = pkgs.lightdm-tiny-greeter.override { conf = config; }; in - optionalString (cfg.extraConfig != "") - (configHeader + cfg.extraConfig); - - services.xserver.displayManager.lightdm.greeter = mkDefault { - package = pkgs.lightdm-tiny-greeter.xgreeters; + package = package.xgreeters; name = "lightdm-tiny-greeter"; }; diff --git a/pkgs/applications/display-managers/lightdm-tiny-greeter/default.nix b/pkgs/applications/display-managers/lightdm-tiny-greeter/default.nix index 53f004c2a367..bb70fa299d10 100644 --- a/pkgs/applications/display-managers/lightdm-tiny-greeter/default.nix +++ b/pkgs/applications/display-managers/lightdm-tiny-greeter/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, linkFarm, lightdm-tiny-greeter, fetchFromGitHub -, pkg-config, lightdm, gtk3, glib, wrapGAppsHook, conf ? "" }: +, pkg-config, lightdm, gtk3, glib, wrapGAppsHook, config, conf ? config.lightdm-tiny-greeter.conf or "" }: stdenv.mkDerivation rec { pname = "lightdm-tiny-greeter"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 91b3c4469f1a..ed7ae679b6c6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -35647,9 +35647,7 @@ with pkgs; lightdm-mobile-greeter = callPackage ../applications/display-managers/lightdm-mobile-greeter { }; - lightdm-tiny-greeter = callPackage ../applications/display-managers/lightdm-tiny-greeter { - conf = config.lightdm-tiny-greeter.conf or ""; - }; + lightdm-tiny-greeter = callPackage ../applications/display-managers/lightdm-tiny-greeter { }; ly = callPackage ../applications/display-managers/ly { }; From c018561f5467bdbcae1364220000d69431771d68 Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 17:57:48 +0300 Subject: [PATCH 4/8] nixos/amdgpu-pro: remove `nixpkgs.config` usage A new X.org ABI is exceptionally unlikely at this point, and we can add an assertion if it ever happens. --- nixos/modules/hardware/video/amdgpu-pro.nix | 3 -- pkgs/servers/x11/xorg/overrides.nix | 31 ++++++++------------- pkgs/top-level/all-packages.nix | 1 - 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/nixos/modules/hardware/video/amdgpu-pro.nix b/nixos/modules/hardware/video/amdgpu-pro.nix index 299a30b0629b..605aa6ef8b88 100644 --- a/nixos/modules/hardware/video/amdgpu-pro.nix +++ b/nixos/modules/hardware/video/amdgpu-pro.nix @@ -20,9 +20,6 @@ in { config = mkIf enabled { - - nixpkgs.config.xorg.abiCompat = "1.20"; - services.xserver.drivers = singleton { name = "amdgpu"; modules = [ package ]; display = true; }; diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index 2c168a659a89..a66cf9ce1335 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -1,5 +1,4 @@ -{ abiCompat ? null, - callPackage, +{ callPackage, lib, stdenv, makeWrapper, fetchurl, fetchpatch, fetchFromGitLab, buildPackages, automake, autoconf, libiconv, libtool, intltool, gettext, python3, perl, freetype, tradcpp, fontconfig, meson, ninja, ed, fontforge, @@ -738,24 +737,18 @@ self: super: }); xorgserver = with xorg; super.xorgserver.overrideAttrs (attrs_passed: - # exchange attrs if abiCompat is set let - version = lib.getVersion attrs_passed; - attrs = - if (abiCompat == null || lib.hasPrefix abiCompat version) then - attrs_passed // { - buildInputs = attrs_passed.buildInputs ++ - lib.optional (libdrm != null) libdrm.dev; - postPatch = '' - for i in dri3/*.c - do - sed -i -e "s|#include |#include |" $i - done - ''; - meta = attrs_passed.meta // { mainProgram = "X"; }; - } - else throw "unsupported xorg abiCompat ${abiCompat} for ${attrs_passed.name}"; - + attrs = attrs_passed // { + buildInputs = attrs_passed.buildInputs ++ + lib.optional (libdrm != null) libdrm.dev; + postPatch = '' + for i in dri3/*.c + do + sed -i -e "s|#include |#include |" $i + done + ''; + meta = attrs_passed.meta // { mainProgram = "X"; }; + }; in attrs // (let version = lib.getVersion attrs; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ed7ae679b6c6..7ab9c48ec12a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -27692,7 +27692,6 @@ with pkgs; inherit (buildPackages.darwin) bootstrap_cmds; udev = if stdenv.isLinux then udev else null; libdrm = if stdenv.isLinux then libdrm else null; - abiCompat = config.xorg.abiCompat or null; # `config` because we have no `xorg.override` }; generatedPackages = lib.callPackageWith __splicedPackages ../servers/x11/xorg/default.nix { }; From 018f62a1515b0e71a663142807bb2b03b662997c Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 18:00:45 +0300 Subject: [PATCH 5/8] nixos/doc: remove reference to long removed option --- .../manual/configuration/customizing-packages.section.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/nixos/doc/manual/configuration/customizing-packages.section.md b/nixos/doc/manual/configuration/customizing-packages.section.md index 709a07b09cea..76413b7d84fb 100644 --- a/nixos/doc/manual/configuration/customizing-packages.section.md +++ b/nixos/doc/manual/configuration/customizing-packages.section.md @@ -1,11 +1,7 @@ # Customising Packages {#sec-customising-packages} Some packages in Nixpkgs have options to enable or disable optional -functionality or change other aspects of the package. For instance, the -Firefox wrapper package (which provides Firefox with a set of plugins -such as the Adobe Flash player) has an option to enable the Google Talk -plugin. It can be set in `configuration.nix` as follows: -`nixpkgs.config.firefox.enableGoogleTalkPlugin = true;` +functionality or change other aspects of the package. ::: {.warning} Unfortunately, Nixpkgs currently lacks a way to query available @@ -13,7 +9,7 @@ configuration options. ::: ::: {.note} -Alternatively, many packages come with extensions one might add. +For example, many packages come with extensions one might add. Examples include: - [`passExtensions.pass-otp`](https://search.nixos.org/packages/query=passExtensions.pass-otp) - [`python310Packages.requests`](https://search.nixos.org/packages/query=python310Packages.requests) From d3c27efa36abeb7f65cc8764d73d7805128c5386 Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 18:01:07 +0300 Subject: [PATCH 6/8] nixos/firefox: remove `nixpkgs.config` usage --- nixos/modules/programs/browserpass.nix | 2 +- nixos/modules/programs/firefox.nix | 28 +++++++++++++------ .../gnome/gnome-browser-connector.nix | 2 +- .../services/x11/desktop-managers/plasma5.nix | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/nixos/modules/programs/browserpass.nix b/nixos/modules/programs/browserpass.nix index 346d38e5e880..abd99056ff3b 100644 --- a/nixos/modules/programs/browserpass.nix +++ b/nixos/modules/programs/browserpass.nix @@ -27,6 +27,6 @@ with lib; "opt/brave/native-messaging-hosts/${appId}".source = source "hosts/chromium"; "opt/brave/policies/managed/${appId}".source = source "policies/chromium"; }; - nixpkgs.config.firefox.enableBrowserpass = true; + programs.firefox.wrapperConfig.enableBrowserpass = true; }; } diff --git a/nixos/modules/programs/firefox.nix b/nixos/modules/programs/firefox.nix index 8653f066cf8f..43cf64cf1d82 100644 --- a/nixos/modules/programs/firefox.nix +++ b/nixos/modules/programs/firefox.nix @@ -36,6 +36,12 @@ in ]; }; + wrapperConfig = mkOption { + type = types.attrs; + default = {}; + description = mdDoc "Arguments to pass to Firefox wrapper"; + }; + policies = mkOption { type = policyFormat.type; default = { }; @@ -227,17 +233,23 @@ in ] ++ optionals nmh.passff [ passff-host ]; + cfg = let + # copy-pasted from the wrapper; TODO: figure out fix + applicationName = cfg.package.binaryName or (lib.getName cfg.package); + + nixpkgsConfig = config.nixpkgs.config.${applicationName} or {}; + optionConfig = cfg.wrapperConfig; + nmhConfig = { + enableBrowserpass = nmh.browserpass; + enableBukubrow = nmh.bukubrow; + enableTridactylNative = nmh.tridactyl; + enableUgetIntegrator = nmh.ugetIntegrator; + enableFXCastBridge = nmh.fxCast; + }; + in nixpkgsConfig // optionConfig // nmhConfig; }) ]; - nixpkgs.config.firefox = { - enableBrowserpass = nmh.browserpass; - enableBukubrow = nmh.bukubrow; - enableTridactylNative = nmh.tridactyl; - enableUgetIntegrator = nmh.ugetIntegrator; - enableFXCastBridge = nmh.fxCast; - }; - environment.etc = let policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; }; diff --git a/nixos/modules/services/desktops/gnome/gnome-browser-connector.nix b/nixos/modules/services/desktops/gnome/gnome-browser-connector.nix index 5d4ddce94220..9a45d839629b 100644 --- a/nixos/modules/services/desktops/gnome/gnome-browser-connector.nix +++ b/nixos/modules/services/desktops/gnome/gnome-browser-connector.nix @@ -42,6 +42,6 @@ in services.dbus.packages = [ pkgs.gnome-browser-connector ]; - nixpkgs.config.firefox.enableGnomeExtensions = true; + programs.firefox.wrapperConfig.enableGnomeExtensions = true; }; } diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix index 282a34f6b011..758a71b63457 100644 --- a/nixos/modules/services/x11/desktop-managers/plasma5.nix +++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix @@ -379,7 +379,7 @@ in # Update the start menu for each user that is currently logged in system.userActivationScripts.plasmaSetup = activationScript; - nixpkgs.config.firefox.enablePlasmaBrowserIntegration = true; + programs.firefox.wrapperConfig.enablePlasmaBrowserIntegration = true; }) (mkIf (cfg.kwinrc != {}) { From f33cdbcc25f78e6abc097f52f6d40dfdc2ed09c8 Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 18:01:33 +0300 Subject: [PATCH 7/8] nixos/gnome: remove `nixpkgs.config` usage I have no idea how to keep this working, but it feels wrong anyway. --- nixos/modules/services/x11/desktop-managers/gnome.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index fecdd86deb86..a5c7cb16b9d3 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -282,9 +282,6 @@ in # Override GSettings schemas environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; - - # If gnome is installed, build vim for gtk3 too. - nixpkgs.config.vim.gui = "gtk3"; }) (mkIf flashbackEnabled { From 95c3abfda09fc7279f6c536dd620030b7da76601 Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 26 Sep 2023 20:37:49 +0300 Subject: [PATCH 8/8] nixos/doc: add release note for `nixpkgs.config` removal --- nixos/doc/manual/release-notes/rl-2311.section.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md index cdb73fb49fa8..2fb86c2e4bd1 100644 --- a/nixos/doc/manual/release-notes/rl-2311.section.md +++ b/nixos/doc/manual/release-notes/rl-2311.section.md @@ -230,6 +230,8 @@ - The `services.mtr-exporter.target` has been removed in favor of `services.mtr-exporter.jobs` which allows specifying multiple targets. +- Setting `nixpkgs.config` options while providing an external `pkgs` instance will now raise an error instead of silently ignoring the options. NixOS modules no longer set `nixpkgs.config` to accomodate this. This specifically affects `services.locate`, `services.xserver.displayManager.lightdm.greeters.tiny` and `programs.firefox` NixOS modules. No manual intervention should be required in most cases, however, configurations relying on those modules affecting packages outside the system environment should switch to explicit overlays. + ## Other Notable Changes {#sec-release-23.11-notable-changes} - The Cinnamon module now enables XDG desktop integration by default. If you are experiencing collisions related to xdg-desktop-portal-gtk you can safely remove `xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];` from your NixOS configuration.