Merge pull request #257458 from K900/die-nixpkgs-config-die

treewide: fail when `nixpkgs.config` is set with explicit `pkgs`, remove all `nixpkgs.config` usages in in-tree modules
This commit is contained in:
K900 2023-10-01 10:11:15 +03:00 committed by GitHub
commit eb8ce7930d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 59 additions and 63 deletions

View File

@ -1,11 +1,7 @@
# Customising Packages {#sec-customising-packages} # Customising Packages {#sec-customising-packages}
Some packages in Nixpkgs have options to enable or disable optional Some packages in Nixpkgs have options to enable or disable optional
functionality or change other aspects of the package. For instance, the functionality or change other aspects of the package.
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;`
::: {.warning} ::: {.warning}
Unfortunately, Nixpkgs currently lacks a way to query available Unfortunately, Nixpkgs currently lacks a way to query available
@ -13,7 +9,7 @@ configuration options.
::: :::
::: {.note} ::: {.note}
Alternatively, many packages come with extensions one might add. For example, many packages come with extensions one might add.
Examples include: Examples include:
- [`passExtensions.pass-otp`](https://search.nixos.org/packages/query=passExtensions.pass-otp) - [`passExtensions.pass-otp`](https://search.nixos.org/packages/query=passExtensions.pass-otp)
- [`python310Packages.requests`](https://search.nixos.org/packages/query=python310Packages.requests) - [`python310Packages.requests`](https://search.nixos.org/packages/query=python310Packages.requests)

View File

@ -257,6 +257,8 @@
- The `services.mtr-exporter.target` has been removed in favor of `services.mtr-exporter.jobs` which allows specifying multiple targets. - 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} ## 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. - 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.

View File

@ -20,9 +20,6 @@ in
{ {
config = mkIf enabled { config = mkIf enabled {
nixpkgs.config.xorg.abiCompat = "1.20";
services.xserver.drivers = singleton services.xserver.drivers = singleton
{ name = "amdgpu"; modules = [ package ]; display = true; }; { name = "amdgpu"; modules = [ package ]; display = true; };

View File

@ -230,9 +230,7 @@ in
plocate = (mkIf isPLocate (mkMerge [ common plocate ])); plocate = (mkIf isPLocate (mkMerge [ common plocate ]));
}; };
nixpkgs.config = { locate.dbfile = cfg.output; }; environment.systemPackages = [ (cfg.locate.override { dbfile = cfg.output; }) ];
environment.systemPackages = [ cfg.locate ];
environment.variables = mkIf (!isMorPLocate) { LOCATE_PATH = cfg.output; }; environment.variables = mkIf (!isMorPLocate) { LOCATE_PATH = cfg.output; };

View File

@ -379,6 +379,16 @@ in
the legacy definitions. 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}
'';
}
]; ];
}; };

View File

@ -27,6 +27,6 @@ with lib;
"opt/brave/native-messaging-hosts/${appId}".source = source "hosts/chromium"; "opt/brave/native-messaging-hosts/${appId}".source = source "hosts/chromium";
"opt/brave/policies/managed/${appId}".source = source "policies/chromium"; "opt/brave/policies/managed/${appId}".source = source "policies/chromium";
}; };
nixpkgs.config.firefox.enableBrowserpass = true; programs.firefox.wrapperConfig.enableBrowserpass = true;
}; };
} }

View File

@ -36,6 +36,12 @@ in
]; ];
}; };
wrapperConfig = mkOption {
type = types.attrs;
default = {};
description = mdDoc "Arguments to pass to Firefox wrapper";
};
policies = mkOption { policies = mkOption {
type = policyFormat.type; type = policyFormat.type;
default = { }; default = { };
@ -227,17 +233,23 @@ in
] ++ optionals nmh.passff [ ] ++ optionals nmh.passff [
passff-host 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 = environment.etc =
let let
policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; }; policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; };

View File

@ -42,6 +42,6 @@ in
services.dbus.packages = [ pkgs.gnome-browser-connector ]; services.dbus.packages = [ pkgs.gnome-browser-connector ];
nixpkgs.config.firefox.enableGnomeExtensions = true; programs.firefox.wrapperConfig.enableGnomeExtensions = true;
}; };
} }

View File

@ -282,9 +282,6 @@ in
# 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";
# If gnome is installed, build vim for gtk3 too.
nixpkgs.config.vim.gui = "gtk3";
}) })
(mkIf flashbackEnabled { (mkIf flashbackEnabled {

View File

@ -379,7 +379,7 @@ in
# Update the start menu for each user that is currently logged in # Update the start menu for each user that is currently logged in
system.userActivationScripts.plasmaSetup = activationScript; system.userActivationScripts.plasmaSetup = activationScript;
nixpkgs.config.firefox.enablePlasmaBrowserIntegration = true; programs.firefox.wrapperConfig.enablePlasmaBrowserIntegration = true;
}) })
(mkIf (cfg.kwinrc != {}) { (mkIf (cfg.kwinrc != {}) {

View File

@ -61,7 +61,7 @@ in
services.xserver.displayManager.lightdm.greeters.gtk.enable = false; services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
nixpkgs.config.lightdm-tiny-greeter.conf = services.xserver.displayManager.lightdm.greeter =
let let
configHeader = '' configHeader = ''
#include <gtk/gtk.h> #include <gtk/gtk.h>
@ -69,13 +69,11 @@ in
static const char *pass_text = "${cfg.label.pass}"; static const char *pass_text = "${cfg.label.pass}";
static const char *session = "${dmcfg.defaultSession}"; static const char *session = "${dmcfg.defaultSession}";
''; '';
config = optionalString (cfg.extraConfig != "") (configHeader + cfg.extraConfig);
package = pkgs.lightdm-tiny-greeter.override { conf = config; };
in in
optionalString (cfg.extraConfig != "")
(configHeader + cfg.extraConfig);
services.xserver.displayManager.lightdm.greeter =
mkDefault { mkDefault {
package = pkgs.lightdm-tiny-greeter.xgreeters; package = package.xgreeters;
name = "lightdm-tiny-greeter"; name = "lightdm-tiny-greeter";
}; };

View File

@ -1,5 +1,5 @@
{ lib, stdenv, linkFarm, lightdm-tiny-greeter, fetchFromGitHub { 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 { stdenv.mkDerivation rec {
pname = "lightdm-tiny-greeter"; pname = "lightdm-tiny-greeter";

View File

@ -1,5 +1,4 @@
{ abiCompat ? null, { callPackage,
callPackage,
lib, stdenv, makeWrapper, fetchurl, fetchpatch, fetchFromGitLab, buildPackages, lib, stdenv, makeWrapper, fetchurl, fetchpatch, fetchFromGitLab, buildPackages,
automake, autoconf, libiconv, libtool, intltool, gettext, python3, perl, automake, autoconf, libiconv, libtool, intltool, gettext, python3, perl,
freetype, tradcpp, fontconfig, meson, ninja, ed, fontforge, freetype, tradcpp, fontconfig, meson, ninja, ed, fontforge,
@ -738,24 +737,18 @@ self: super:
}); });
xorgserver = with xorg; super.xorgserver.overrideAttrs (attrs_passed: xorgserver = with xorg; super.xorgserver.overrideAttrs (attrs_passed:
# exchange attrs if abiCompat is set
let let
version = lib.getVersion attrs_passed; attrs = attrs_passed // {
attrs = buildInputs = attrs_passed.buildInputs ++
if (abiCompat == null || lib.hasPrefix abiCompat version) then lib.optional (libdrm != null) libdrm.dev;
attrs_passed // { postPatch = ''
buildInputs = attrs_passed.buildInputs ++ for i in dri3/*.c
lib.optional (libdrm != null) libdrm.dev; do
postPatch = '' sed -i -e "s|#include <drm_fourcc.h>|#include <libdrm/drm_fourcc.h>|" $i
for i in dri3/*.c done
do '';
sed -i -e "s|#include <drm_fourcc.h>|#include <libdrm/drm_fourcc.h>|" $i meta = attrs_passed.meta // { mainProgram = "X"; };
done };
'';
meta = attrs_passed.meta // { mainProgram = "X"; };
}
else throw "unsupported xorg abiCompat ${abiCompat} for ${attrs_passed.name}";
in attrs // in attrs //
(let (let
version = lib.getVersion attrs; version = lib.getVersion attrs;

View File

@ -1,8 +1,6 @@
{ lib, stdenv, fetchurl, config }: { lib, stdenv, fetchurl, config, dbfile ? config.locate.dbfile or "/var/cache/locatedb" }:
let stdenv.mkDerivation rec {
dbfile = lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config;
in stdenv.mkDerivation rec {
pname = "mlocate"; pname = "mlocate";
version = "0.26"; version = "0.26";

View File

@ -8,10 +8,8 @@
, systemd , systemd
, liburing , liburing
, zstd , zstd
, 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 = "plocate"; pname = "plocate";
version = "1.1.19"; version = "1.1.19";

View File

@ -27666,7 +27666,6 @@ with pkgs;
inherit (buildPackages.darwin) bootstrap_cmds; inherit (buildPackages.darwin) bootstrap_cmds;
udev = if stdenv.isLinux then udev else null; udev = if stdenv.isLinux then udev else null;
libdrm = if stdenv.isLinux then libdrm 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 { }; generatedPackages = lib.callPackageWith __splicedPackages ../servers/x11/xorg/default.nix { };
@ -35614,9 +35613,7 @@ with pkgs;
lightdm-mobile-greeter = callPackage ../applications/display-managers/lightdm-mobile-greeter { }; lightdm-mobile-greeter = callPackage ../applications/display-managers/lightdm-mobile-greeter { };
lightdm-tiny-greeter = callPackage ../applications/display-managers/lightdm-tiny-greeter { lightdm-tiny-greeter = callPackage ../applications/display-managers/lightdm-tiny-greeter { };
conf = config.lightdm-tiny-greeter.conf or "";
};
ly = callPackage ../applications/display-managers/ly { }; ly = callPackage ../applications/display-managers/ly { };