Merge staging-next into staging

Changed files
+63 -75
doc
release-notes
nixos
lib
modules
services
tests
lemurs
pkgs
applications
display-managers
networking
mailreaders
thunderbird
by-name
gd
ma
makejinja
development
libraries
ngtcp2
python-modules
openai
+2
doc/release-notes/rl-2511.section.md
···
- `go-mockery` has been updated to v3. For migration instructions see the [upstream documentation](https://vektra.github.io/mockery/latest/v3/). If v2 is still required `go-mockery_v2` has been added but will be removed on or before 2029-12-31 in-line with it's [upstream support lifecycle](https://vektra.github.io/mockery/
+
- NixOS display manager modules now strictly use tty1, where many of them previously used tty7. Options to configure display managers' VT have been dropped. A configuration with a display manager enabled will not start `getty@tty1.service`, even if the system is forced to boot into `multi-user.target` instead of `graphical.target`.
+
## Other Notable Changes {#sec-nixpkgs-release-25.11-notable-changes}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
-3
nixos/lib/systemd-lib.nix
···
ln -s ${cfg.ctrlAltDelUnit} $out/ctrl-alt-del.target
ln -s rescue.target $out/kbrequest.target
-
mkdir -p $out/getty.target.wants/
-
ln -s ../autovt@tty1.service $out/getty.target.wants/
-
ln -s ../remote-fs.target $out/multi-user.target.wants/
''}
''; # */
+10
nixos/modules/services/display-managers/default.nix
···
in
lib.mkIf noDmUsed (lib.mkDefault false);
+
# We can't just rely on 'Conflicts=autovt@tty1.service' because
+
# 'switch-to-configuration switch' will start 'autovt@tty1.service'
+
# and kill us.
+
systemd.services."autovt@tty1".enable =
+
lib.mkIf config.systemd.services.display-manager.enable false;
+
systemd.services.display-manager = {
description = "Display Manager";
after = [
"acpid.service"
"systemd-logind.service"
"systemd-user-sessions.service"
+
"autovt@tty1.service"
+
];
+
conflicts = [
+
"autovt@tty1.service"
];
restartIfChanged = false;
-3
nixos/modules/services/display-managers/gdm.nix
···
users.groups.gdm.gid = config.ids.gids.gdm;
# GDM needs different xserverArgs, presumable because using wayland by default.
-
services.xserver.tty = null;
services.xserver.display = null;
services.xserver.verbose = null;
···
"rc-local.service"
"systemd-machined.service"
"systemd-user-sessions.service"
-
"getty@tty${gdm.initialVT}.service"
"plymouth-quit.service"
"plymouth-start.service"
];
systemd.services.display-manager.conflicts = [
-
"getty@tty${gdm.initialVT}.service"
"plymouth-quit.service"
];
systemd.services.display-manager.onFailure = [
+10 -10
nixos/modules/services/display-managers/greetd.nix
···
}:
let
cfg = config.services.greetd;
-
tty = "tty${toString cfg.vt}";
+
tty = "tty1";
settingsFormat = pkgs.formats.toml { };
in
{
+
imports = [
+
(lib.mkRemovedOptionModule [
+
"services"
+
"greetd"
+
"vt"
+
] "The VT is now fixed to VT1.")
+
];
+
options.services.greetd = {
enable = lib.mkEnableOption "greetd, a minimal and flexible login manager daemon";
···
'';
};
-
vt = lib.mkOption {
-
type = lib.types.int;
-
default = 1;
-
description = ''
-
The virtual console (tty) that greetd should use. This option also disables getty on that tty.
-
'';
-
};
-
restart = lib.mkOption {
type = lib.types.bool;
default = !(cfg.settings ? initial_session);
···
};
config = lib.mkIf cfg.enable {
-
services.greetd.settings.terminal.vt = lib.mkDefault cfg.vt;
+
services.greetd.settings.terminal.vt = 1;
services.greetd.settings.default_session.user = lib.mkDefault "greeter";
security.pam.services.greetd = {
+14 -14
nixos/modules/services/display-managers/lemurs.nix
···
settingsFormat = pkgs.formats.toml { };
in
{
+
imports = [
+
(lib.mkRemovedOptionModule [
+
"services"
+
"displayManager"
+
"lemurs"
+
"vt"
+
] "The VT is now fixed to VT1.")
+
];
+
options.services.displayManager.lemurs = {
enable = lib.mkEnableOption "" // {
description = ''
···
See [lemurs configuration documentation](https://github.com/coastalwhite/lemurs/blob/main/extra/config.toml) for available options.
'';
};
-
-
vt = lib.mkOption {
-
type = lib.types.ints.positive;
-
default = 2;
-
description = ''
-
The virtual console (tty) that lemurs should use.
-
'';
-
};
};
config = lib.mkIf cfg.enable {
assertions = [
···
# Required for wayland with setLoginUid = false;
seatd.enable = true;
xserver = {
-
# To enable user switching, allow lemurs to allocate TTYs/displays dynamically.
-
tty = null;
+
# To enable user switching, allow lemurs to allocate displays dynamically.
display = null;
};
displayManager = {
···
desktops = config.services.displayManager.sessionData.desktops;
in
{
-
tty = lib.mkDefault cfg.vt;
+
tty = 1;
system_shell = lib.mkDefault "${pkgs.bash}/bin/bash";
initial_path = lib.mkDefault "/run/current-system/sw/bin";
x11 = {
···
Wants = [ "systemd-user-sessions.service" ];
After = [
"systemd-user-sessions.service"
-
"getty@tty${toString cfg.vt}.service"
"plymouth-quit-wait.service"
];
-
Conflicts = [ "getty@tty${toString cfg.vt}.service" ];
};
serviceConfig = {
Type = "idle";
# Defaults from lemurs upstream configuration
StandardInput = "tty";
-
TTYPath = "/dev/tty${toString cfg.vt}";
+
TTYPath = "/dev/tty1";
TTYReset = "yes";
TTYVHangup = "yes";
+
# Clear the console before starting
+
TTYVTDisallocate = true;
};
# Don't kill a user session when using nixos-rebuild
restartIfChanged = false;
+5 -6
nixos/modules/services/display-managers/ly.nix
···
defaultConfig = {
shutdown_cmd = "/run/current-system/systemd/bin/systemctl poweroff";
restart_cmd = "/run/current-system/systemd/bin/systemctl reboot";
-
tty = 2;
service_name = "ly";
path = "/run/current-system/sw/bin";
term_reset_cmd = "${pkgs.ncurses}/bin/tput reset";
···
displayManager = {
enable = true;
execCmd = "exec /run/current-system/sw/bin/ly";
+
+
# Set this here instead of 'defaultConfig' so users get eval
+
# errors when they change it.
+
ly.settings.tty = 1;
};
xserver = {
-
# To enable user switching, allow ly to allocate TTYs/displays dynamically.
-
tty = null;
+
# To enable user switching, allow ly to allocate displays dynamically.
display = null;
};
};
···
after = [
"systemd-user-sessions.service"
"plymouth-quit-wait.service"
-
"getty@tty${toString finalConfig.tty}.service"
];
-
-
conflicts = [ "getty@tty7.service" ];
serviceConfig = {
Type = "idle";
+1 -7
nixos/modules/services/display-managers/sddm.nix
···
}
// optionalAttrs xcfg.enable {
X11 = {
-
MinimumVT = if xcfg.tty != null then xcfg.tty else 7;
ServerPath = toString xserverWrapper;
XephyrPath = "${pkgs.xorg.xorgserver.out}/bin/Xephyr";
SessionCommand = toString dmcfg.sessionData.wrapper;
···
services = {
dbus.packages = [ sddm ];
xserver = {
-
# To enable user switching, allow sddm to allocate TTYs/displays dynamically.
-
tty = null;
+
# To enable user switching, allow sddm to allocate displays dynamically.
display = null;
};
};
···
services.display-manager = {
after = [
"systemd-user-sessions.service"
-
"getty@tty7.service"
"plymouth-quit.service"
"systemd-logind.service"
-
];
-
conflicts = [
-
"getty@tty7.service"
];
};
};
+2
nixos/modules/services/ttys/getty.nix
···
"container-getty@.service"
];
+
systemd.targets.getty.wants = [ "autovt@tty1.service" ];
+
systemd.services."getty@" = {
serviceConfig.ExecStart = [
# override upstream default with an empty ExecStart
+1 -9
nixos/modules/services/x11/display-managers/lightdm.nix
···
lightdmConf = writeText "lightdm.conf" ''
[LightDM]
+
minimum-vt = 1
${optionalString cfg.greeter.enable ''
greeter-user = ${config.users.users.lightdm.name}
greeters-directory = ${cfg.greeter.package}
···
exec ${lightdm}/sbin/lightdm
'';
-
# Replaces getty
-
systemd.services.display-manager.conflicts = [
-
"getty@tty7.service"
-
# TODO: Add "plymouth-quit.service" so LightDM can control when plymouth
-
# quits. Currently this breaks switching to configurations with plymouth.
-
];
-
# Pull in dependencies of services we replace.
systemd.services.display-manager.after = [
"rc-local.service"
"systemd-machined.service"
"systemd-user-sessions.service"
-
"getty@tty7.service"
"user.slice"
];
···
];
users.groups.lightdm.gid = config.ids.gids.lightdm;
-
services.xserver.tty = null; # We might start multiple X servers so let the tty increment themselves..
services.xserver.display = null; # We specify our own display (and logfile) in xserver-wrapper up there
};
}
+5 -7
nixos/modules/services/x11/xserver.nix
···
"dir"
];
})
+
(lib.mkRemovedOptionModule [
+
"services"
+
"xserver"
+
"tty"
+
] "'services.xserver.tty' was removed because it was ineffective.")
];
###### interface
···
'';
};
-
tty = mkOption {
-
type = types.nullOr types.int;
-
default = 7;
-
description = "Virtual console for the X server.";
-
};
-
display = mkOption {
type = types.nullOr types.int;
default = 0;
···
"${cfg.xkb.dir}"
]
++ optional (cfg.display != null) ":${toString cfg.display}"
-
++ optional (cfg.tty != null) "vt${toString cfg.tty}"
++ optional (cfg.dpi != null) "-dpi ${toString cfg.dpi}"
++ optional (cfg.logFile != null) "-logfile ${toString cfg.logFile}"
++ optional (cfg.verbose != null) "-verbose ${toString cfg.verbose}"
+3 -1
nixos/tests/lemurs/lemurs.nix
···
];
};
+
enableOCR = true;
+
nodes.machine = _: {
imports = [ ../common/user-account.nix ];
services.displayManager.lemurs.enable = true;
···
machine.start()
machine.wait_for_unit("multi-user.target")
-
machine.wait_until_succeeds("pgrep -f 'lemurs.*tty1'")
+
machine.wait_for_text("Login")
machine.screenshot("postboot")
with subtest("Log in as alice on a virtual console"):
+1 -3
pkgs/applications/display-managers/sddm/unwrapped.nix
···
"-DUID_MIN=1000"
"-DUID_MAX=29999"
-
# we still want to run the DM on VT 7 for the time being, as 1-6 are
-
# occupied by getties by default
-
"-DSDDM_INITIAL_VT=7"
+
"-DSDDM_INITIAL_VT=1"
"-DQT_IMPORTS_DIR=${placeholder "out"}/${qtbase.qtQmlPrefix}"
"-DCMAKE_INSTALL_SYSCONFDIR=${placeholder "out"}/etc"
+2 -2
pkgs/applications/networking/mailreaders/thunderbird/packages.nix
···
thunderbird = thunderbird-latest;
thunderbird-latest = common {
-
version = "140.0.1";
-
sha512 = "fbef1d0228c49fc9c11425b6be03bb7e44e6abc6f2027ee23317270ca2c6b0a935bb41b38667acf014bd9e1166cbe62754f1e919e04f2355dc4c833e015c78b8";
+
version = "141.0";
+
sha512 = "cd747c0831532f90685975567102d1bdb90a780e21209fe4b7bddf2d84ac88576766706e95e22043a30a8a89b6d3daffb56a68c3ccc4a300b8236b20d4fca675";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-latest";
+1 -4
pkgs/by-name/gd/gdm/package.nix
···
mesonFlags = [
"-Dgdm-xsession=true"
# TODO: Setup a default-path? https://gitlab.gnome.org/GNOME/gdm/-/blob/6fc40ac6aa37c8ad87c32f0b1a5d813d34bf7770/meson_options.txt#L6
-
"-Dinitial-vt=${finalAttrs.passthru.initialVT}"
+
"-Dinitial-vt=1"
"-Dudev-dir=${placeholder "out"}/lib/udev/rules.d"
"-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
"-Dsystemduserunitdir=${placeholder "out"}/lib/systemd/user"
···
passthru = {
updateScript = gnome.updateScript { packageName = "gdm"; };
-
# Used in GDM NixOS module
-
# Don't remove.
-
initialVT = "7";
dconfDb = "${finalAttrs.finalPackage}/share/gdm/greeter-dconf-defaults";
dconfProfile = "user-db:user\nfile-db:${finalAttrs.passthru.dconfDb}";
+2 -2
pkgs/by-name/ma/makejinja/package.nix
···
python3Packages.buildPythonApplication rec {
pname = "makejinja";
-
version = "2.8.0";
+
version = "2.8.1";
pyproject = true;
src = fetchFromGitHub {
owner = "mirkolenz";
repo = "makejinja";
tag = "v${version}";
-
hash = "sha256-Y6R+nVwIuviYhvLp5Aqb+BUCaAD6fF+GH8zmJrWNxFc=";
+
hash = "sha256-vK5MJb4n3/NmkohpJ1shEexvjHlEAfwZJWy2oL+rzRk=";
};
build-system = with python3Packages; [ setuptools ];
+2 -2
pkgs/development/libraries/ngtcp2/gnutls.nix
···
stdenv.mkDerivation rec {
pname = "ngtcp2";
-
version = "1.13.0";
+
version = "1.14.0";
src = fetchFromGitHub {
owner = "ngtcp2";
repo = "ngtcp2";
rev = "v${version}";
-
hash = "sha256-SvxGZoV4N9wNAsI5pOjjGECgk2vV0FifzHi1gbGjqnc=";
+
hash = "sha256-TpfCfVhguFbTqQiY+zl6Kn7fsIQHR1tvNC4YLkxmBis=";
};
outputs = [
+2 -2
pkgs/development/python-modules/openai/default.nix
···
buildPythonPackage rec {
pname = "openai";
-
version = "1.97.0";
+
version = "1.97.1";
pyproject = true;
src = fetchFromGitHub {
owner = "openai";
repo = "openai-python";
tag = "v${version}";
-
hash = "sha256-q+GUEHducm71Zqh7ZfRF217awFKQIsOSEWoe04M3DFM=";
+
hash = "sha256-ANY74P3tM8VVPh9m6hOdZSkMhcQphi72bKNcLrsLEq8=";
};
postPatch = ''substituteInPlace pyproject.toml --replace-fail "hatchling==1.26.3" "hatchling"'';