From 6e5359c64a5b3a85af97359426bf3b619274b5c1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 14 Mar 2026 00:26:45 +0000 Subject: [PATCH 001/149] linuxPackages.vhba: 20250329 -> 20260313 --- pkgs/applications/emulators/cdemu/vhba.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/emulators/cdemu/vhba.nix b/pkgs/applications/emulators/cdemu/vhba.nix index e0e836f2c08f..844c56088162 100644 --- a/pkgs/applications/emulators/cdemu/vhba.nix +++ b/pkgs/applications/emulators/cdemu/vhba.nix @@ -8,11 +8,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "vhba"; - version = "20250329"; + version = "20260313"; src = fetchurl { url = "mirror://sourceforge/cdemu/vhba-module-${finalAttrs.version}.tar.xz"; - hash = "sha256-piog1yDd8M/lpTIo9FE9SY2JwurZ6a8LG2lZ/4EmB14="; + hash = "sha256-KTADv12dwrOG2w0F9ZXFVINVpTXW38Bv03n9mLsZAXQ="; }; makeFlags = kernelModuleMakeFlags ++ [ From 2087fb4770cc12350b4e15a153463af08339b13a Mon Sep 17 00:00:00 2001 From: Marin Date: Fri, 20 Mar 2026 11:07:08 -0600 Subject: [PATCH 002/149] standardnotes: update homepage --- pkgs/by-name/st/standardnotes/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/st/standardnotes/package.nix b/pkgs/by-name/st/standardnotes/package.nix index 7d066391940c..f04bb2dbbbd5 100644 --- a/pkgs/by-name/st/standardnotes/package.nix +++ b/pkgs/by-name/st/standardnotes/package.nix @@ -84,7 +84,7 @@ stdenv.mkDerivation { Standard Notes is a private notes app that features unmatched simplicity, end-to-end encryption, powerful extensions, and open-source applications. ''; - homepage = "https://standardnotes.org"; + homepage = "https://standardnotes.com"; license = lib.licenses.agpl3Only; maintainers = with lib.maintainers; [ mgregoire From 7086284f14d654d452f439e3968ee5964a1272b5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 30 Apr 2026 15:42:32 +0000 Subject: [PATCH 003/149] dhcpcd: 10.3.1 -> 10.3.2 --- pkgs/by-name/dh/dhcpcd/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/dh/dhcpcd/package.nix b/pkgs/by-name/dh/dhcpcd/package.nix index fd0119918706..b7ef86a31b75 100644 --- a/pkgs/by-name/dh/dhcpcd/package.nix +++ b/pkgs/by-name/dh/dhcpcd/package.nix @@ -15,13 +15,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "dhcpcd"; - version = "10.3.1"; + version = "10.3.2"; src = fetchFromGitHub { owner = "NetworkConfiguration"; repo = "dhcpcd"; rev = "v${finalAttrs.version}"; - sha256 = "sha256-L2rR6/qMHWVth2GR3VAoBZmhA6lmCLddbi0VvEG5r70="; + sha256 = "sha256-tJV533j/nQT/PP5KVPJCgTo0Lu8NNMIGnJBvYUG8ufw="; }; nativeBuildInputs = [ pkg-config ]; From 4f300fa962d92222c6806a09f4c1b5f767d14438 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 1 May 2026 14:47:24 +0000 Subject: [PATCH 004/149] libblockdev: 3.4.0 -> 3.5.0 --- pkgs/by-name/li/libblockdev/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libblockdev/package.nix b/pkgs/by-name/li/libblockdev/package.nix index cee436a7c3de..e0c73ed21e7b 100644 --- a/pkgs/by-name/li/libblockdev/package.nix +++ b/pkgs/by-name/li/libblockdev/package.nix @@ -35,13 +35,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "libblockdev"; - version = "3.4.0"; + version = "3.5.0"; src = fetchFromGitHub { owner = "storaged-project"; repo = "libblockdev"; tag = finalAttrs.version; - hash = "sha256-KvcGvMsASgEKTerhh/lSPjQoXYDMBvbaPSdc6f5p7wc="; + hash = "sha256-loll5MYRXBrBSSLCIXuQ0sQCpwSn7yS1Po9ppYnEorY="; }; outputs = [ From a74c641b38ccb4ad6a7c50c121022016306d959b Mon Sep 17 00:00:00 2001 From: sim Date: Tue, 5 May 2026 00:58:50 +0200 Subject: [PATCH 005/149] onioncircuits: add missing dependency Missing `pycountry` dependency prevents the package to run. --- pkgs/by-name/on/onioncircuits/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/on/onioncircuits/package.nix b/pkgs/by-name/on/onioncircuits/package.nix index 40607c3f08a1..10b5fa1689f3 100644 --- a/pkgs/by-name/on/onioncircuits/package.nix +++ b/pkgs/by-name/on/onioncircuits/package.nix @@ -35,6 +35,7 @@ python3.pkgs.buildPythonApplication rec { dependencies = with python3.pkgs; [ pygobject3 stem + pycountry ]; postInstall = '' From c0cbeb9d8e5a731ba88500fb01690cb92455fc25 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Tue, 5 May 2026 18:07:13 +0300 Subject: [PATCH 006/149] nixos/virtualisation: explain resolution is only relevant to grub --- nixos/modules/virtualisation/qemu-vm.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix index b58cdd8ac5f7..5f9ef2eedc84 100644 --- a/nixos/modules/virtualisation/qemu-vm.nix +++ b/nixos/modules/virtualisation/qemu-vm.nix @@ -552,7 +552,7 @@ in y = 768; }; description = '' - The resolution of the virtual machine display. + The resolution of the virtual machine display (relevant only if virtualised machine uses grub bootloader). ''; }; From 44c6c2ef166cc796b417d9885b966489b23a2bf9 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Tue, 5 May 2026 22:56:15 +0300 Subject: [PATCH 007/149] nixos/virtualisation: remove hard-coded virtio-gpu-pci device from aarch machines In 9e78baf5c75ed87360dfcab4c5eeeee2256be2dc, Aarch machines were added the `-device virtio-gpu-pci` argument, to mirror `-vga std` option that was added unconditionally to virtualised x86_64 machines. Since then, in a7ca287ecb3bd5589d2f815a27f1152071d92b57, the `-vga std` option was removed, because that is the default value of this option embedded in QEMU since version 2.2. Removing it from the hard-coded list of qemu options makes it possible for the user to choose their own `-vga` value. Similarly, for Aarch virtualised machines, choosing unconditionally the `-device virtio-gpu-pci` option instead of e.g `-device virtio-gpu-gl-pci`, can be bothersome too - see: https://discourse.nixos.org/t/test-an-aarch64-linux-vm-wayland-compositor-from-an-x86-64-linux-host/77416/2 --- nixos/modules/virtualisation/qemu-vm.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix index 5f9ef2eedc84..1d879218a690 100644 --- a/nixos/modules/virtualisation/qemu-vm.nix +++ b/nixos/modules/virtualisation/qemu-vm.nix @@ -1380,7 +1380,6 @@ in "-device usb-tablet,bus=usb-bus.0" ]) (mkIf pkgs.stdenv.hostPlatform.isAarch [ - "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet" From 97c68e5d5cac7af2d1bda3f8449f821b9f404961 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Sun, 10 May 2026 10:52:48 +0100 Subject: [PATCH 008/149] btrfs-progs: 6.19.1 -> 7.0 Changes: https://raw.githubusercontent.com/kdave/btrfs-progs/v7.0/CHANGES --- pkgs/by-name/bt/btrfs-progs/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/bt/btrfs-progs/package.nix b/pkgs/by-name/bt/btrfs-progs/package.nix index 80f500c9ad30..e5034da09c2e 100644 --- a/pkgs/by-name/bt/btrfs-progs/package.nix +++ b/pkgs/by-name/bt/btrfs-progs/package.nix @@ -21,11 +21,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "btrfs-progs"; - version = "6.19.1"; + version = "7.0"; src = fetchurl { url = "mirror://kernel/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v${finalAttrs.version}.tar.xz"; - hash = "sha256-uyfh7FTnw8C3suWW+FOnPAej1y8hvJQEIHPCTb8EV5Y="; + hash = "sha256-wobWh2y81yMnoLQX5M/SgDU+wj43tUn9vNeACoMtmpk="; }; nativeBuildInputs = [ From 875cbab19fc728a1199b661579f76c42bf2b5503 Mon Sep 17 00:00:00 2001 From: Thomas Gebert Date: Sun, 10 May 2026 14:43:46 -0400 Subject: [PATCH 009/149] bigpemu: 1.22 -> 1.221 --- pkgs/by-name/bi/bigpemu/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/bi/bigpemu/package.nix b/pkgs/by-name/bi/bigpemu/package.nix index cb270a44c39d..d3e988210d3c 100644 --- a/pkgs/by-name/bi/bigpemu/package.nix +++ b/pkgs/by-name/bi/bigpemu/package.nix @@ -11,12 +11,12 @@ let bigpemu-unwrapped = stdenv.mkDerivation rec { pname = "BigPEmu"; - version = "1.22"; + version = "1.221"; src = fetchurl { url = "https://www.richwhitehouse.com/jaguar/builds/BigPEmu_Linux64_v${ builtins.replaceStrings [ "." ] [ "" ] version }.tar.gz"; - hash = "sha256-z1r04qdZ6LNqGb3HwpCMeyKP6vYJz2hAVsIyHAfJsbU="; + hash = "sha256-wP9hDyHV9VwBxATvmR2J92mls7iTyFcMAzvO9EEh7lc="; }; installPhase = '' From 27cae711e77c6cae384bd83100ff297d82466154 Mon Sep 17 00:00:00 2001 From: SandaruKasa Date: Tue, 19 May 2026 01:04:54 +0300 Subject: [PATCH 010/149] nixos/fonts: add Noto CJK to default fonts --- nixos/modules/config/fonts/packages.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/modules/config/fonts/packages.nix b/nixos/modules/config/fonts/packages.nix index 0e4bf4a886a1..aca8a1af3ffc 100644 --- a/nixos/modules/config/fonts/packages.nix +++ b/nixos/modules/config/fonts/packages.nix @@ -47,6 +47,8 @@ in gyre-fonts # TrueType substitutes for standard PostScript fonts liberation_ttf unifont + noto-fonts-cjk-sans + noto-fonts-cjk-serif noto-fonts-color-emoji ] ); From 76c8d4509934c8d32a8203a62c36df5aadf7de43 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Wed, 20 May 2026 19:40:45 +0200 Subject: [PATCH 011/149] switch-to-configuration-ng: honour X-* directives in user-unit migration pass The post-activation pass added in 5cc82c4922f8 to handle units migrating from a per-user manager (home-manager) to NixOS unconditionally restarts or starts any candidate. dbus-broker.service explicitly opts out of restarts via reloadIfChanged because restarting the session bus kills running clients; the second pass ignored that and restarted it anyway. Apply the same X-ReloadIfChanged / X-RestartIfChanged / RefuseManualStop / RefuseManualStart / X-OnlyManualStart checks that handle_modified_unit performs, so a migrated unit is reloaded, skipped, restarted or started as its directives require. Covered by new switch-test specialisations for reloadIfChanged and restartIfChanged = false. --- nixos/tests/switch-test.nix | 39 ++++ .../sw/switch-to-configuration-ng/src/main.rs | 216 ++++++++++++++++-- 2 files changed, 238 insertions(+), 17 deletions(-) diff --git a/nixos/tests/switch-test.nix b/nixos/tests/switch-test.nix index 480d284ada1d..e83e43430fae 100644 --- a/nixos/tests/switch-test.nix +++ b/nixos/tests/switch-test.nix @@ -739,6 +739,22 @@ in ''; }; + # As above, but with reloadIfChanged: pass 2 must reload, not + # restart. + userServiceMigratedToNixosReloadOnly.configuration = { + imports = [ userServiceMigratedToNixosNoStop.configuration ]; + systemd.user.services.migrated = { + reloadIfChanged = true; + serviceConfig.ExecReload = "${pkgs.coreutils}/bin/true"; + }; + }; + + # As above, but with restartIfChanged = false: pass 2 must skip it. + userServiceMigratedToNixosNoRestart.configuration = { + imports = [ userServiceMigratedToNixosNoStop.configuration ]; + systemd.user.services.migrated.restartIfChanged = false; + }; + no_inhibitors.configuration.system.switch.inhibitors = lib.mkForce { }; inhibitors.configuration.system.switch.inhibitors = lib.mkForce { @@ -1818,6 +1834,29 @@ in out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") assert_contains(out, "nixos") + # Pass 2 must honour reloadIfChanged. + switch_to_specialisation("${machine}", "") + machine.fail(f"sudo -u usertest {user_env} systemctl --user is-active migrated.service") + seed_home_unit() + out = switch_to_specialisation("${machine}", "userServiceMigratedToNixosReloadOnly") + assert_lacks(out, "restarting (post-activation) the following user units: migrated.service") + assert_contains(out, "reloading (post-activation) the following user units: migrated.service") + user_systemctl("is-active migrated.service") + # Reloaded only, so the home ExecStart never re-ran. + out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") + assert_contains(out, "home") + + # Pass 2 must honour restartIfChanged = false. + switch_to_specialisation("${machine}", "") + machine.fail(f"sudo -u usertest {user_env} systemctl --user is-active migrated.service") + seed_home_unit() + out = switch_to_specialisation("${machine}", "userServiceMigratedToNixosNoRestart") + assert_lacks(out, "\nrestarting (post-activation) the following user units: migrated.service") + assert_contains(out, "NOT restarting (post-activation) the following user units: migrated.service") + user_systemctl("is-active migrated.service") + out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") + assert_contains(out, "home") + # Units that remain shadowed by ~/.config must be left alone in both # passes even though /etc now also defines them. switch_to_specialisation("${machine}", "") diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs index d9568c7b5464..6046d3437ae0 100644 --- a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs +++ b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs @@ -688,12 +688,7 @@ fn handle_modified_unit( let reload_list = scope.reload_list_file(); let use_restart_as_stop_and_start = new_unit_info.is_none(); - if matches!( - unit, - "sysinit.target" | "basic.target" | "multi-user.target" | "graphical.target" - ) || unit.ends_with(".unit") - || unit.ends_with(".slice") - { + if cannot_be_restarted_directly(unit) { // Do nothing. These cannot be restarted directly. // Slices and Paths don't have to be restarted since properties (resource limits and @@ -940,6 +935,17 @@ fn parse_fstab(fstab: impl BufRead) -> (HashMap, HashMap bool { + matches!( + unit, + "sysinit.target" | "basic.target" | "multi-user.target" | "graphical.target" + ) || unit.ends_with(".path") + || unit.ends_with(".slice") +} + // Returns a HashMap containing the same contents as the passed in `units`, minus the units in // `units_to_filter`. fn filter_units( @@ -957,6 +963,50 @@ fn filter_units( res } +/// Action to take on a unit that migrated to NixOS ownership during the +/// post-activation pass. Honours the same X-* directives as +/// `handle_modified_unit`. +#[derive(Debug, PartialEq)] +enum MigrationAction { + Skip, + Reload, + Restart, + Start, +} + +impl MigrationAction { + /// Action to take on a migrated unit that is still active. + fn for_active_unit(unit: &str, new_unit_info: &UnitInfo) -> Self { + if cannot_be_restarted_directly(unit) { + return Self::Skip; + } + + if parse_systemd_bool(Some(new_unit_info), "Service", "X-ReloadIfChanged", false) { + return Self::Reload; + } + + if !parse_systemd_bool(Some(new_unit_info), "Service", "X-RestartIfChanged", true) + || parse_systemd_bool(Some(new_unit_info), "Unit", "RefuseManualStop", false) + || parse_systemd_bool(Some(new_unit_info), "Unit", "X-OnlyManualStart", false) + { + return Self::Skip; + } + + Self::Restart + } + + /// Action to take on a migrated unit that the previous owner stopped. + fn for_stopped_unit(new_unit_info: &UnitInfo) -> Self { + if parse_systemd_bool(Some(new_unit_info), "Unit", "RefuseManualStart", false) + || parse_systemd_bool(Some(new_unit_info), "Unit", "X-OnlyManualStart", false) + { + return Self::Skip; + } + + Self::Start + } +} + fn unit_is_active(conn: &LocalConnection, unit: &str) -> Result { let unit_object_path = conn .with_proxy( @@ -1510,29 +1560,40 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { let active_after = get_active_units(&systemd)?; + let mut to_reload = HashMap::new(); let mut to_restart = HashMap::new(); let mut to_start = HashMap::new(); + let mut to_skip = HashMap::new(); for unit in &migration_candidates { - match active_after.get(unit) { + // Honour X-* directives so reloadIfChanged/restartIfChanged hold. + let new_unit_file = new_unit_dir.join(unit); + let new_unit_info = parse_unit(&new_unit_file, &new_unit_file)?; + + let action = match active_after.get(unit) { Some(unit_state) => { + // Only act if /etc now wins (i.e. the higher-priority + // copy is gone). Read errors are treated as "leave alone". let now_etc = unit_state .proxy .get("org.freedesktop.systemd1.Unit", "FragmentPath") .map(|p: String| p.starts_with(fragment_prefix)) .unwrap_or(false); - if now_etc { - // Still running with the previous manager's binary; - // restart so the /etc definition takes effect. - to_restart.insert(unit.clone(), ()); + if !now_etc { + // Still shadowed (or read error); leave it alone. + continue; } - // else: still shadowed by ~/.config, leave it alone. + MigrationAction::for_active_unit(unit, &new_unit_info) } - None => { - // Stopped by the previous manager; start the /etc copy. - to_start.insert(unit.clone(), ()); - } - } + // Stopped by the previous manager; start the /etc copy. + None => MigrationAction::for_stopped_unit(&new_unit_info), + }; + match action { + MigrationAction::Skip => to_skip.insert(unit.clone(), ()), + MigrationAction::Reload => to_reload.insert(unit.clone(), ()), + MigrationAction::Restart => to_restart.insert(unit.clone(), ()), + MigrationAction::Start => to_start.insert(unit.clone(), ()), + }; } // Re-start active targets so any other newly-unmasked dependencies are @@ -1543,6 +1604,24 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { } } + if !to_skip.is_empty() { + print_units("NOT restarting (post-activation)", &to_skip); + } + + print_units("reloading (post-activation)", &to_reload); + for unit in to_reload.keys() { + match systemd.reload_unit(unit, "replace") { + Ok(job_path) => { + submitted_jobs.borrow_mut().insert(job_path, Job::Reload); + } + Err(err) => { + eprintln!("Failed to reload user unit {unit}: {err}"); + exit_code = 4; + } + } + } + block_on_jobs(&dbus_conn, &submitted_jobs); + print_units("restarting (post-activation)", &to_restart); for unit in to_restart.keys() { match systemd.restart_unit(unit, "replace") { @@ -2863,4 +2942,107 @@ After=dev-disk-by\x2dlabel-root.device ); } } + + fn unit_info( + sections: &[(&str, &[(&str, &str)])], + ) -> HashMap>> { + sections + .iter() + .map(|(section, kvs)| { + ( + section.to_string(), + kvs.iter() + .map(|(k, v)| (k.to_string(), vec![v.to_string()])) + .collect(), + ) + }) + .collect() + } + + #[test] + fn migration_action_for_active_unit() { + use super::MigrationAction; + + // Plain service: restart. + assert_eq!( + MigrationAction::for_active_unit("foo.service", &unit_info(&[])), + MigrationAction::Restart + ); + + // reloadIfChanged must reload, not restart. + assert_eq!( + MigrationAction::for_active_unit( + "foo.service", + &unit_info(&[("Service", &[("X-ReloadIfChanged", "true")])]) + ), + MigrationAction::Reload + ); + + // X-RestartIfChanged=false (restartIfChanged = false) must skip. + assert_eq!( + MigrationAction::for_active_unit( + "foo.service", + &unit_info(&[("Service", &[("X-RestartIfChanged", "false")])]) + ), + MigrationAction::Skip + ); + + // RefuseManualStop must skip. + assert_eq!( + MigrationAction::for_active_unit( + "foo.service", + &unit_info(&[("Unit", &[("RefuseManualStop", "yes")])]) + ), + MigrationAction::Skip + ); + + // X-OnlyManualStart must skip. + assert_eq!( + MigrationAction::for_active_unit( + "foo.service", + &unit_info(&[("Unit", &[("X-OnlyManualStart", "yes")])]) + ), + MigrationAction::Skip + ); + + // Units that cannot be restarted directly must skip. + for unit in [ + "sysinit.target", + "basic.target", + "multi-user.target", + "graphical.target", + "foo.path", + "bar.slice", + ] { + assert_eq!( + MigrationAction::for_active_unit(unit, &unit_info(&[])), + MigrationAction::Skip, + "{unit}" + ); + } + } + + #[test] + fn migration_action_for_stopped_unit() { + use super::MigrationAction; + + assert_eq!( + MigrationAction::for_stopped_unit(&unit_info(&[])), + MigrationAction::Start + ); + assert_eq!( + MigrationAction::for_stopped_unit(&unit_info(&[( + "Unit", + &[("RefuseManualStart", "true")] + )])), + MigrationAction::Skip + ); + assert_eq!( + MigrationAction::for_stopped_unit(&unit_info(&[( + "Unit", + &[("X-OnlyManualStart", "true")] + )])), + MigrationAction::Skip + ); + } } From 6ced06a1b337cdf403b1e53407cac9cb156b856b Mon Sep 17 00:00:00 2001 From: r-vdp Date: Wed, 20 May 2026 19:46:27 +0200 Subject: [PATCH 012/149] switch-to-configuration-ng: rework user-unit migration candidate selection The previous "FragmentPath not under /etc" deny-list swept up units that were never managed by a per-user manager (e.g. dbus-broker, whose FragmentPath systemd reports under /run/current-system/sw/share via systemd.packages) and missed nothing it should have caught, but for the wrong reason. Make the intent explicit. A unit is a migration candidate iff it is active, the new generation defines it in /etc/systemd/user, and either * its FragmentPath is under $XDG_CONFIG_HOME/systemd/user (the home-manager case; ~/.config shadows /etc, so we must wait for sd-switch to remove the copy), or * its FragmentPath is anywhere else outside /etc and the previous generation did not have it in /etc (package-shipped units found via $XDG_DATA_HOME / $XDG_DATA_DIRS, e.g. ~/.nix-profile/share; /etc outranks these so it wins on daemon-reload). The "previous generation did not have it" guard keeps units that have always been in /etc, but whose FragmentPath systemd reports elsewhere, out of the candidate set, and the existing now_etc check verifies /etc actually won before acting. Compare FragmentPath by parent directory instead of string prefix while here. Covered by a new switch-test case that seeds a unit in ~/.local/share/systemd/user. --- nixos/tests/switch-test.nix | 39 +++++++++ .../sw/switch-to-configuration-ng/src/main.rs | 85 +++++++++++++++---- 2 files changed, 108 insertions(+), 16 deletions(-) diff --git a/nixos/tests/switch-test.nix b/nixos/tests/switch-test.nix index e83e43430fae..4126645f59e0 100644 --- a/nixos/tests/switch-test.nix +++ b/nixos/tests/switch-test.nix @@ -826,6 +826,15 @@ in RemainAfterExit=true ExecStart=${pkgs.runtimeShell} -c 'echo home > %t/migrated-owner' ''; + + # Unit file placed in ~/.local/share/systemd/user (lower priority than + # /etc) to simulate a package-shipped unit. + dataMigratedUnit = pkgs.writeText "migrated.service" '' + [Service] + Type=oneshot + RemainAfterExit=true + ExecStart=${pkgs.runtimeShell} -c 'echo data > %t/migrated-owner' + ''; in # python '' @@ -1857,6 +1866,36 @@ in out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") assert_contains(out, "home") + # Migration from a lower-priority search-path entry ($XDG_DATA_HOME + # here, standing in for ~/.nix-profile/share etc.). /etc outranks + # these, so pass 2 must restart onto the /etc definition. + switch_to_specialisation("${machine}", "") + machine.fail(f"sudo -u usertest {user_env} systemctl --user is-active migrated.service") + machine.succeed( + "sudo -u usertest mkdir -p ~usertest/.local/share/systemd/user", + "sudo -u usertest cp ${dataMigratedUnit} ~usertest/.local/share/systemd/user/migrated.service", + ) + user_systemctl("daemon-reload") + user_systemctl("start migrated.service") + user_systemctl("is-active migrated.service") + out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") + assert_contains(out, "data") + out = user_systemctl("show -p FragmentPath migrated.service") + assert_contains(out, "/.local/share/systemd/user/migrated.service") + out = switch_to_specialisation("${machine}", "userServiceMigratedShadowed") + assert_contains(out, "restarting (post-activation) the following user units: migrated.service") + user_systemctl("is-active migrated.service") + out = user_systemctl("show -p FragmentPath migrated.service") + assert_contains(out, "/etc/systemd/user/migrated.service") + out = machine.succeed(f"sudo -u usertest {user_env} cat /run/user/1001/migrated-owner") + assert_contains(out, "nixos") + # Switching again must NOT touch it: /etc already had it, so it is + # not a candidate even though the lower-priority copy is still there. + out = switch_to_specialisation("${machine}", "userServiceMigratedShadowed") + assert_lacks(out, "migrated.service") + machine.succeed("sudo -u usertest rm -rf ~usertest/.local/share/systemd") + user_systemctl("daemon-reload") + # Units that remain shadowed by ~/.config must be left alone in both # passes even though /etc now also defines them. switch_to_specialisation("${machine}", "") diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs index 6046d3437ae0..bebf3c46a4bf 100644 --- a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs +++ b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs @@ -1395,26 +1395,79 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { let current_active_units = get_active_units(&systemd)?; + let old_unit_dir = old_toplevel.join(scope.etc_dir()); let new_unit_dir = toplevel.join(scope.etc_dir()); - let fragment_prefix = scope - .current_dir() - .to_str() - .expect("scope dir is valid UTF-8"); + let fragment_dir = scope.current_dir(); - // Units that are currently running from a non-/etc location (typically - // ~/.config/systemd/user, i.e. home-manager) but that the new NixOS - // configuration also defines. Pass 1 will skip these because of the - // FragmentPath filter; if the per-user activation (sd-switch) later drops - // its copy, we need a second pass to bring the NixOS-owned definition up. + // Determine $XDG_CONFIG_HOME/systemd/user from the user manager's own + // environment (we are spawned with env_clear()). + let user_config_unit_dir: Option = match systemd.environment() { + Err(err) => { + log::debug!("Failed to read user manager environment: {err}"); + None + } + Ok(env) => { + let lookup = |key: &str| { + env.iter().find_map(|kv| { + kv.strip_prefix(key) + .and_then(|rest| rest.strip_prefix('=')) + .filter(|v| Path::new(v).is_absolute()) + .map(PathBuf::from) + }) + }; + let config_home = + lookup("XDG_CONFIG_HOME").or_else(|| lookup("HOME").map(|h| h.join(".config"))); + if config_home.is_none() { + log::debug!( + "Neither $XDG_CONFIG_HOME nor $HOME is set in the user manager's environment" + ); + } + config_home.map(|config_home| config_home.join("systemd/user")) + } + }; + + if user_config_unit_dir.is_none() { + log::debug!( + "Could not determine $XDG_CONFIG_HOME/systemd/user; \ + units shadowed by ~/.config will not be considered for migration" + ); + } + + // Units active from a non-/etc location that the new generation defines + // in /etc/systemd/user. Pass 1 skips these (FragmentPath filter); pass 2 + // brings the /etc definition into effect once /etc has won. Two cases: + // * ~/.config/systemd/user (home-manager): shadows /etc, so wait for + // the per-user activation (sd-switch) to remove its copy. + // * anywhere else outside /etc ($XDG_DATA_HOME, $XDG_DATA_DIRS, ...): + // /etc outranks these, so only act when /etc is gaining the unit; + // if the previous generation already had it, leave it alone. + // Pass 2's `now_etc` check verifies /etc actually won before acting. let migration_candidates: Vec = current_active_units .iter() .filter(|(unit, _)| new_unit_dir.join(unit).exists()) - .filter(|(_, unit_state)| { - !unit_state + .filter(|(unit, unit_state)| { + let Ok(fragment_path) = unit_state .proxy - .get("org.freedesktop.systemd1.Unit", "FragmentPath") - .map(|p: String| p.starts_with(fragment_prefix)) - .unwrap_or(false) + .get::("org.freedesktop.systemd1.Unit", "FragmentPath") + else { + return false; + }; + let fragment_parent = Path::new(&fragment_path).parent(); + + // Already in /etc: handled by pass 1. + if fragment_parent == Some(fragment_dir) { + return false; + } + + // Loaded from ~/.config/systemd/user, which shadows /etc. + if let Some(dir) = &user_config_unit_dir { + if fragment_parent == Some(dir.as_path()) { + return true; + } + } + + // Elsewhere: only act if /etc is gaining the unit this switch. + !old_unit_dir.join(unit).exists() }) .map(|(unit, _)| unit.clone()) .collect(); @@ -1422,7 +1475,7 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { collect_unit_changes( &toplevel, scope, - &old_toplevel.join(scope.etc_dir()), + &old_unit_dir, &new_unit_dir, ¤t_active_units, &mut units_to_stop, @@ -1577,7 +1630,7 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { let now_etc = unit_state .proxy .get("org.freedesktop.systemd1.Unit", "FragmentPath") - .map(|p: String| p.starts_with(fragment_prefix)) + .map(|p: String| Path::new(&p).parent() == Some(fragment_dir)) .unwrap_or(false); if !now_etc { // Still shadowed (or read error); leave it alone. From 9dc20fcb5590998f4d52f7f5360a06d090de7d55 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 22 May 2026 12:47:06 +0000 Subject: [PATCH 013/149] libgit2: 1.9.3 -> 1.9.4 --- pkgs/by-name/li/libgit2/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libgit2/package.nix b/pkgs/by-name/li/libgit2/package.nix index bfac9149df06..568fa09201aa 100644 --- a/pkgs/by-name/li/libgit2/package.nix +++ b/pkgs/by-name/li/libgit2/package.nix @@ -22,7 +22,7 @@ stdenv.mkDerivation (finalAttrs: { pname = "libgit2"; - version = "1.9.3"; + version = "1.9.4"; # also check the following packages for updates: python3Packages.pygit2 and libgit2-glib outputs = [ @@ -35,7 +35,7 @@ stdenv.mkDerivation (finalAttrs: { owner = "libgit2"; repo = "libgit2"; tag = "v${finalAttrs.version}"; - hash = "sha256-nJrRdPs86oGNL4W2CJb16oSUgfzYr9A2i5sw9BAehME="; + hash = "sha256-ZKUiz3pdFE2SKxh53X2oyr7hs32Njj5YVA0OXDXz7h0="; }; cmakeFlags = [ From fd765cb11e5483f38db03e69324eb13473c4bad2 Mon Sep 17 00:00:00 2001 From: SandaruKasa Date: Fri, 22 May 2026 17:54:26 +0300 Subject: [PATCH 014/149] Revert "google-chrome: fix CJK fonts by default" This reverts commit 97c3e85a82e1a3507d2b579d2dc479983603c8b7. --- pkgs/by-name/go/google-chrome/package.nix | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/pkgs/by-name/go/google-chrome/package.nix b/pkgs/by-name/go/google-chrome/package.nix index 6b446a00ec00..dd3937ec6789 100644 --- a/pkgs/by-name/go/google-chrome/package.nix +++ b/pkgs/by-name/go/google-chrome/package.nix @@ -79,11 +79,6 @@ bzip2, libcap, - # Fonts (See issue #463615) - makeFontsConf, - noto-fonts-cjk-sans, - noto-fonts-cjk-serif, - # Necessary for USB audio devices. libpulseaudio, pulseSupport ? true, @@ -220,13 +215,6 @@ let rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps; binpath = lib.makeBinPath deps; - fontsConf = makeFontsConf { - fontDirectories = [ - noto-fonts-cjk-sans - noto-fonts-cjk-serif - ]; - }; - installPhase = '' runHook preInstall @@ -278,7 +266,6 @@ let --prefix PATH : "$binpath" \ --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \ --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH:${addDriverRunpath.driverLink}/share" \ - --set FONTCONFIG_FILE "${finalAttrs.fontsConf}" \ --set CHROME_WRAPPER "google-chrome-$dist" \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ --add-flags "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" \ From d1bb20ce9a557e881559400faf02bed8094d4753 Mon Sep 17 00:00:00 2001 From: SandaruKasa Date: Fri, 22 May 2026 17:55:18 +0300 Subject: [PATCH 015/149] Revert "microsoft-edge: fix CJK fonts by default" This reverts commit cfd2e6fb9cc52b384ed7c7d4bbd367387b547d7b. --- pkgs/by-name/mi/microsoft-edge/package.nix | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pkgs/by-name/mi/microsoft-edge/package.nix b/pkgs/by-name/mi/microsoft-edge/package.nix index f396929480ef..1410cf1c7298 100644 --- a/pkgs/by-name/mi/microsoft-edge/package.nix +++ b/pkgs/by-name/mi/microsoft-edge/package.nix @@ -90,12 +90,6 @@ libsecret, # Edge Specific libuuid, - - # Fonts (See issue #463615) - makeFontsConf, - noto-fonts-cjk-sans, - noto-fonts-cjk-serif, - # Create a symlink at $out/bin/microsoft-edge-stable withSymlink ? true, }: @@ -200,13 +194,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps; binpath = lib.makeBinPath deps; - fontsConf = makeFontsConf { - fontDirectories = [ - noto-fonts-cjk-sans - noto-fonts-cjk-serif - ]; - }; - installPhase = '' runHook preInstall @@ -254,7 +241,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { --prefix PATH : "$binpath" \ --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \ --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH:${addDriverRunpath.driverLink}/share" \ - --set FONTCONFIG_FILE "${finalAttrs.fontsConf}" \ --set SSL_CERT_FILE "${cacert}/etc/ssl/certs/ca-bundle.crt" \ --set CHROME_WRAPPER "microsoft-edge-$dist" \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \ From 734846393f8c523fb79fe21cf6747ebf5306f13a Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 20 Mar 2026 09:31:27 +0100 Subject: [PATCH 016/149] qemu: 10.2.2 -> 11.0.0 Co-authored-by: Emily --- pkgs/by-name/qe/qemu/package.nix | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/qe/qemu/package.nix b/pkgs/by-name/qe/qemu/package.nix index 31515f58d636..dea71a96bd84 100644 --- a/pkgs/by-name/qe/qemu/package.nix +++ b/pkgs/by-name/qe/qemu/package.nix @@ -140,11 +140,11 @@ stdenv.mkDerivation (finalAttrs: { + lib.optionalString nixosTestRunner "-for-vm-tests" + lib.optionalString toolsOnly "-utils" + lib.optionalString userOnly "-user"; - version = "10.2.2"; + version = "11.0.0"; src = fetchurl { url = "https://download.qemu.org/qemu-${finalAttrs.version}.tar.xz"; - hash = "sha256-eEspb/KcFBeqcjI6vLLS6pq5dxck9Xfc14XDsE8h4XY="; + hash = "sha256-wEyjYBJlPzLRHGdNNwz1KnEOfT8Ywti2PkkyBSpIVNY="; }; depsBuildBuild = [ @@ -165,6 +165,8 @@ stdenv.mkDerivation (finalAttrs: { # For python changes other than simple package additions, ping @dramforever for review. # Don't change `python3Packages` to `python3.pkgs.*`, breaks cross-compilation. python3Packages.distlib + python3Packages.setuptools + python3Packages.wheel # Hooks from the python package are needed to add `$pythonPath` so # `python/scripts/mkvenv.py` can detect `meson` otherwise the vendored meson without patches will be used. python3Packages.python @@ -374,7 +376,11 @@ stdenv.mkDerivation (finalAttrs: { # tests can still timeout on slower systems doCheck = false; - nativeCheckInputs = [ socat ]; + nativeCheckInputs = [ + python3Packages.pygdbmi + python3Packages.qemu-qmp + socat + ]; preCheck = '' # time limits are a little meagre for a build machine that's # potentially under load. @@ -444,7 +450,7 @@ stdenv.mkDerivation (finalAttrs: { license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ qyliss ]; teams = lib.optionals xenSupport xen.meta.teams; - platforms = lib.platforms.unix; + platforms = with lib.systems.inspect; patternLogicalAnd patterns.is64bit patterns.isUnix; } # toolsOnly: Does not have qemu-kvm and there's no main support tool # userOnly: There's one qemu- for every architecture @@ -453,7 +459,14 @@ stdenv.mkDerivation (finalAttrs: { } # userOnly: https://qemu.readthedocs.io/en/master/user/main.html#supported-operating-systems // lib.optionalAttrs userOnly { - platforms = with lib.platforms; (linux ++ freebsd ++ openbsd ++ netbsd); + platforms = + with lib.systems.inspect; + patternLogicalAnd patterns.is64bit [ + patterns.isLinux + patterns.isFreeBSD + patterns.isOpenBSD + patterns.isNetBSD + ]; description = "QEMU User space emulator - launch executables compiled for one CPU on another CPU"; }; }) From 663a59e0b6d7575d7465ea0f03b6fa66f6298038 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Sat, 23 May 2026 12:50:06 +0200 Subject: [PATCH 017/149] nixos/activation: run user nixos-activation.service exactly once per switch stc-ng starts every active target (including default.target) and then explicitly restarts nixos-activation.service. As a Type=oneshot without RemainAfterExit the unit is inactive after login, so the default.target start job re-runs it via Wants=, and the explicit restart runs it again (or, depending on ordering, SIGTERMs the currently running script and re-runs it). Set RemainAfterExit=yes so target starts are a no-op for an already-run activation, and restartIfChanged=false so the unit-diff pass leaves it alone when the script changes. The explicit restart in stc-ng remains the single trigger per switch. Print that restart so it is visible in the switch output, and drop it from the "NOT restarting" list. Extend the user-activation-scripts test to assert the activation is only run once, and never killed. --- nixos/modules/system/activation/activation-script.nix | 3 +++ nixos/tests/switch-test.nix | 7 ++++--- nixos/tests/user-activation-scripts.nix | 8 ++++++++ pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs | 4 ++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/nixos/modules/system/activation/activation-script.nix b/nixos/modules/system/activation/activation-script.nix index 8fd274276a61..338fc1911c01 100644 --- a/nixos/modules/system/activation/activation-script.nix +++ b/nixos/modules/system/activation/activation-script.nix @@ -322,6 +322,9 @@ in description = "Run user-specific NixOS activation"; script = config.system.userActivationScripts.script; unitConfig.ConditionUser = "!@system"; + # switch-to-configuration restarts this explicitly on every switch. + restartIfChanged = false; + serviceConfig.RemainAfterExit = true; serviceConfig.Type = "oneshot"; wantedBy = [ "default.target" ]; }; diff --git a/nixos/tests/switch-test.nix b/nixos/tests/switch-test.nix index 4126645f59e0..256c25108593 100644 --- a/nixos/tests/switch-test.nix +++ b/nixos/tests/switch-test.nix @@ -1754,9 +1754,10 @@ in out = switch_to_specialisation("${machine}", "simpleUserService") user_systemctl("is-active usertest.service") - # No-op switch does nothing + # No-op switch leaves the test unit alone. out = switch_to_specialisation("${machine}", "simpleUserService") - assert_lacks(out, "user units:") + assert_lacks(out, "usertest.service") + assert_contains(out, "restarting the following user units: nixos-activation.service") # Modifying the unit stop-starts it (default stopIfChanged=true) out = switch_to_specialisation("${machine}", "simpleUserServiceModified") @@ -1773,7 +1774,7 @@ in # reloadIfChanged=true reloads instead out = switch_to_specialisation("${machine}", "simpleUserServiceReload") assert_lacks(out, "stopping the following user units:") - assert_lacks(out, "restarting the following user units:") + assert_lacks(out, "restarting the following user units: usertest.service") assert_contains(out, "reloading the following user units: usertest.service") user_systemctl("is-active usertest.service") diff --git a/nixos/tests/user-activation-scripts.nix b/nixos/tests/user-activation-scripts.nix index e8ea2d05c465..8e29a0ab3ae1 100644 --- a/nixos/tests/user-activation-scripts.nix +++ b/nixos/tests/user-activation-scripts.nix @@ -13,6 +13,7 @@ isNormalUser = true; }; systemd.user.tmpfiles.users.alice.rules = [ "r %h/file-to-remove" ]; + specialisation.changed.configuration.system.userActivationScripts.bar = "true"; }; testScript = '' @@ -36,5 +37,12 @@ machine.succeed("/run/current-system/bin/switch-to-configuration test") verify_user_activation_run_count(2) machine.succeed("[[ ! -f /home/alice/file-to-remove ]] || false") + # Activation must not be killed while running. + machine.fail("journalctl -b _SYSTEMD_USER_UNIT=nixos-activation.service | grep -q 'code=killed'") + + # Changed activation script: still exactly one run. + machine.succeed("/run/current-system/specialisation/changed/bin/switch-to-configuration test") + verify_user_activation_run_count(3) + machine.fail("journalctl -b _SYSTEMD_USER_UNIT=nixos-activation.service | grep -q 'code=killed'") ''; } diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs index bebf3c46a4bf..20c80a50baa5 100644 --- a/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs +++ b/pkgs/by-name/sw/switch-to-configuration-ng/src/main.rs @@ -1486,6 +1486,9 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { &mut units_to_filter, )?; + // Restarted unconditionally below; don't list it as skipped. + units_to_skip.remove("nixos-activation.service"); + let print_units = |verb: &str, units: &HashMap| { if units.is_empty() { return; @@ -1586,6 +1589,7 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> { // Toplevels with system.activatable = false do not ship this unit; mirror // the system scope's tolerance for a missing activate script. if new_unit_dir.join("nixos-activation.service").exists() { + eprintln!("restarting the following user units: nixos-activation.service"); match systemd.restart_unit("nixos-activation.service", "replace") { Ok(_) => { log::debug!("waiting for nixos activation to finish"); From b1a881edb95a7caa4b9afbf8114fa718e106dbe1 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sat, 16 May 2026 18:06:33 +0200 Subject: [PATCH 018/149] nixos/user-activation-scripts: refactor assert By using unittest's assertEqual you actually see how often the activation script was being run, i.e. the expected value. (cherry picked from commit 864a84d3e9dff8cbc24ebdadfd8fbae2d2b5e3b7) --- nixos/tests/user-activation-scripts.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nixos/tests/user-activation-scripts.nix b/nixos/tests/user-activation-scripts.nix index 8e29a0ab3ae1..f43332af033f 100644 --- a/nixos/tests/user-activation-scripts.nix +++ b/nixos/tests/user-activation-scripts.nix @@ -18,8 +18,9 @@ testScript = '' def verify_user_activation_run_count(n): - machine.succeed( - '[[ "$(find /home/alice/ -name user-activation-ran.\\* | wc -l)" == %s ]]' % n + t.assertEqual( + n, + int(machine.succeed('find /home/alice/ -name user-activation-ran.\\* | wc -l').rstrip()) ) From cfe6cdf061909e6e2207b4c817bd77ba06781621 Mon Sep 17 00:00:00 2001 From: Kiskae Date: Sat, 23 May 2026 13:08:39 +0200 Subject: [PATCH 019/149] linuxPackages.nvidiaPackages.vulkan_beta: 595.44.08 -> 595.44.09 --- pkgs/os-specific/linux/nvidia-x11/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/nvidia-x11/default.nix b/pkgs/os-specific/linux/nvidia-x11/default.nix index 8970e60aa426..ebc986ae7a61 100644 --- a/pkgs/os-specific/linux/nvidia-x11/default.nix +++ b/pkgs/os-specific/linux/nvidia-x11/default.nix @@ -101,11 +101,11 @@ rec { # Vulkan developer beta driver # See here for more information: https://developer.nvidia.com/vulkan-driver vulkan_beta = generic rec { - version = "595.44.08"; + version = "595.44.09"; persistencedVersion = "595.45.04"; settingsVersion = "595.45.04"; - sha256_64bit = "sha256-slPOKXeI3Y2ebiytS20c8bbwWbUdn2dFkwJih9Mbmyc="; - openSha256 = "sha256-PpfrDfBkrzszROLDfgeBUISIZm3BimmXTRhkL/X4+p8="; + sha256_64bit = "sha256-LOcwE47hUG1aZX7JvLmTb/yC5qQgXYZ0TAavSn38Xug="; + openSha256 = "sha256-QboSiRWRZWseFg7GN/a4vZVQGGBF1UJlC9MyAxUxyF4="; settingsSha256 = "sha256-Y45pryyM+6ZTJyRaRF3LMKaiIWxB5gF5gGEEcQVr9nA="; persistencedSha256 = "sha256-5FoeUaRRMBIPEWGy4Uo0Aho39KXmjzQsuAD9m/XkNpA="; url = "https://developer.nvidia.com/downloads/vulkan-beta-${lib.concatStrings (lib.splitVersion version)}-linux"; From 273dacf4f27a7b0ce69f11a409cccef8595772fb Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 24 May 2026 00:32:45 +0000 Subject: [PATCH 020/149] capstone: 5.0.7 -> 5.0.8 --- pkgs/by-name/ca/capstone/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ca/capstone/package.nix b/pkgs/by-name/ca/capstone/package.nix index 2f0bb919d37c..23d59748b193 100644 --- a/pkgs/by-name/ca/capstone/package.nix +++ b/pkgs/by-name/ca/capstone/package.nix @@ -8,13 +8,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "capstone"; - version = "5.0.7"; + version = "5.0.8"; src = fetchFromGitHub { owner = "capstone-engine"; repo = "capstone"; rev = finalAttrs.version; - hash = "sha256-+6QReHZK+iIXspizy6Kvk7cj016HOKgiaKSaP4h7mao="; + hash = "sha256-Ww/tv95ba0mBgRvQBMAbb/RbMjdgWwMcCVngtWDv1Vc="; }; cmakeFlags = [ From 797001408960f0e608fe3d073cda5a8381c15c77 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Tue, 26 May 2026 16:07:37 +0000 Subject: [PATCH 021/149] bpftrace: 0.25.1 -> 0.26.0 --- pkgs/by-name/bp/bpftrace/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/bp/bpftrace/package.nix b/pkgs/by-name/bp/bpftrace/package.nix index 4a4ef8bfae93..6aa70674c9b9 100644 --- a/pkgs/by-name/bp/bpftrace/package.nix +++ b/pkgs/by-name/bp/bpftrace/package.nix @@ -23,13 +23,13 @@ stdenv.mkDerivation rec { pname = "bpftrace"; - version = "0.25.1"; + version = "0.26.0"; src = fetchFromGitHub { owner = "bpftrace"; repo = "bpftrace"; rev = "v${version}"; - hash = "sha256-nVBIS6cgCY9ZhzVrWBY6hXI0se9zAWMKnvHuJap3x3c="; + hash = "sha256-NYMMQKOWCLbECQX1FPYaLcQyO3H+LHCw02bF1sWsMuY="; }; buildInputs = with llvmPackages; [ From 0c873241f765f004694163bac6241a881803efbd Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Wed, 27 May 2026 00:34:59 +0000 Subject: [PATCH 022/149] libabw: 0.1.3 -> 0.1.4 --- pkgs/by-name/li/libabw/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libabw/package.nix b/pkgs/by-name/li/libabw/package.nix index f2f91e72f382..fee5c763aaf8 100644 --- a/pkgs/by-name/li/libabw/package.nix +++ b/pkgs/by-name/li/libabw/package.nix @@ -14,11 +14,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "libabw"; - version = "0.1.3"; + version = "0.1.4"; src = fetchurl { url = "https://dev-www.libreoffice.org/src/libabw/libabw-${finalAttrs.version}.tar.xz"; - sha256 = "1vbfrmnvib3cym0yyyabnd8xpx4f7wp20vnn09s6dln347fajqz7"; + sha256 = "sha256-+iaFo0QNpuA6Zqd4SA2Ty5X2Bk5FQeWONzl2gHYP1qA="; }; # Boost 1.59 compatibility fix From da38ab0e39b94e1db1247cda2451946005ce9bf3 Mon Sep 17 00:00:00 2001 From: Jakob Klepp <1183303+truh@users.noreply.github.com> Date: Wed, 27 May 2026 17:02:22 +0200 Subject: [PATCH 023/149] nixos-rebuild-ng: use hash token in ControlPath Previously used token %n refers to the hostname which can be `too long for Unix domain socket` --- pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 9f6baaa178a9..567cb87c429c 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -19,7 +19,7 @@ SSH_DEFAULT_OPTS: Final = [ "-o", "ControlMaster=auto", "-o", - f"ControlPath={tmpdir.TMPDIR_PATH / 'ssh-%n'}", + f"ControlPath={tmpdir.TMPDIR_PATH / 'ssh-%C'}", "-o", "ControlPersist=60", ] From e20cd6adb006694024503cc668763774d6724f83 Mon Sep 17 00:00:00 2001 From: Benjamin Sparks Date: Wed, 27 May 2026 23:22:57 +0200 Subject: [PATCH 024/149] nixos-test-driver: adher to `select`'s interface TL;DR add `assert` to correct location for type-narrowing typeshed recently updated their definition of `select` in https://github.com/python/typeshed/commit/bcb6399e155cb6444150fe98dfd9c24eb0343016. The result is that the members of the lists passed to `select` now require an upper bound of `FileDescriptorLike`. The `self.shell` variable is typed as `socket | None`, but previously passed checking against typeshed due to the missing upper-bound. Despite the source code including a type-narrowing `assert`, `ty` does not make use of it within the inner function that `select` is used in, meaning `self.shell` wasn't narrowed at the appropriate place. Now that typeshed has added this upper-bound, type-checking starts to fail, as evidenced in https://github.com/NixOS/nixpkgs/pull/523288#issuecomment-4529738483. So the correct fix is just to add the `assert` into the inner function. --- nixos/lib/test-driver/src/test_driver/machine/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/lib/test-driver/src/test_driver/machine/__init__.py b/nixos/lib/test-driver/src/test_driver/machine/__init__.py index 790da705cf4f..db96445af912 100644 --- a/nixos/lib/test-driver/src/test_driver/machine/__init__.py +++ b/nixos/lib/test-driver/src/test_driver/machine/__init__.py @@ -1031,6 +1031,7 @@ class QemuMachine(BaseMachine): As soon as we read some data from the socket here, we assume that our root shell is operational. """ + assert self.shell (ready, _, _) = select.select([self.shell], [], [], timeout_secs) return bool(ready) From 3133e5783011608e549b82a72daa6d3e2a7593e5 Mon Sep 17 00:00:00 2001 From: c6rg0 Date: Thu, 28 May 2026 16:14:49 +0100 Subject: [PATCH 025/149] ruff: 0.15.14 -> 0.15.15 --- pkgs/by-name/ru/ruff/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ru/ruff/package.nix b/pkgs/by-name/ru/ruff/package.nix index 08d40e4e30ff..75992b42240e 100644 --- a/pkgs/by-name/ru/ruff/package.nix +++ b/pkgs/by-name/ru/ruff/package.nix @@ -16,7 +16,7 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "ruff"; - version = "0.15.14"; + version = "0.15.15"; __structuredAttrs = true; @@ -24,12 +24,12 @@ rustPlatform.buildRustPackage (finalAttrs: { owner = "astral-sh"; repo = "ruff"; tag = finalAttrs.version; - hash = "sha256-Z8UhVS+YbYAxVWodU/I+p3Ns5/EpmzBTChcbkvJwe6Y="; + hash = "sha256-WpjOOCYLZ1d8XPUx3qNHD+fuK6t65u/1/ZezABWpBD0="; }; cargoBuildFlags = [ "--package=ruff" ]; - cargoHash = "sha256-GnRC5jXySAna7uAKPDtpPQUJe8AKqVSU+ynmGKZtfTs="; + cargoHash = "sha256-SfkoLl43Y1DNqIRW+HljVcEHWhedTS99SGhMvkQ4dmo="; nativeBuildInputs = [ installShellFiles ]; From 59cdf0f127dd6bbbcfe044bbe17f2b7ed951c9a4 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:12:01 +0200 Subject: [PATCH 026/149] nixos-rebuild-ng: introduce Elevator abstraction Adds elevate.py with an Elevator base, NoElevator and SudoElevator. Nothing uses it yet. This is a pure addition so the next commit can swap run_wrapper over without mixing new code with the move. The SudoElevator wrapping is byte-for-byte what run_wrapper currently emits (including NIX_SUDOOPTS handling), so behaviour is unchanged once the switch happens. Motivated by #507054: threading a second `run0: bool` alongside `sudo: bool` through every signature does not scale and makes invalid combinations representable. --- .../src/nixos_rebuild/elevate.py | 190 ++++++++++++++++++ .../src/tests/test_elevate.py | 50 +++++ 2 files changed, 240 insertions(+) create mode 100644 pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py create mode 100644 pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py new file mode 100644 index 000000000000..e75fd099d678 --- /dev/null +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py @@ -0,0 +1,190 @@ +"""Privilege-elevation backends for activation commands. + +An :class:`Elevator` describes how to wrap a command so it runs as root, +both on the local machine and on a remote target host over SSH (where no +controlling terminal is available), and how to feed it a pre-supplied +password when the backend supports that. ``run_wrapper`` and its callers +carry a single ``elevate: Elevator`` value and let it produce the command +prefix and stdin. +""" + +from __future__ import annotations + +import os +import shlex +from abc import ABC, abstractmethod +from dataclasses import dataclass, field, replace +from enum import Enum +from typing import Final, Self, override + + +@dataclass(frozen=True) +class Wrapped: + """Result of wrapping a command for elevation.""" + + #: Arguments to prepend to the command. Kept as ``list[str]`` rather than + #: the wider ``process.Args`` because elevators only ever prepend plain + #: strings; callers splice this into their existing ``Args`` list. + prefix: list[str] + #: Text to send on the wrapped command's stdin (typically a password + #: followed by a newline), or ``None`` to leave stdin alone. + stdin: str | None = None + + +class Elevator(ABC): + """How to gain root for activation commands.""" + + #: CLI name, e.g. ``sudo`` or ``run0``. + name: str + + @property + def elevates(self) -> bool: + """Whether this elevator actually changes privileges. + + ``run_wrapper`` uses this to decide between passing ``env`` to + :func:`subprocess.run` directly (unprivileged local case) and + injecting it via ``env -i`` inside the wrapped command (where the + elevator may otherwise scrub the environment). + """ + return True + + @abstractmethod + def wrap_local(self) -> Wrapped: + """Wrap a command run on the local machine.""" + + @abstractmethod + def wrap_remote(self) -> Wrapped: + """Wrap a command run on a target host over SSH. + + The remote side has no controlling terminal, so backends that need + interactive prompts must either accept a pre-supplied password + (see :meth:`with_password`) or rely on a passwordless policy on + the target. + """ + + @abstractmethod + def with_password(self, password: str) -> Self: + """Return a copy that will feed *password* to the backend. + + Backends that have no stdin path for credentials must raise + :class:`ElevateError` with a hint pointing at the alternative + (e.g. a polkit rule). + """ + + def on_remote_failure(self) -> str | None: + """Optional hint to print when a remote elevated command fails.""" + return None + + +class ElevateError(Exception): + """Raised for invalid elevator/flag combinations.""" + + +@dataclass(frozen=True) +class NoElevator(Elevator): + name: str = "none" + + @property + @override + def elevates(self) -> bool: + return False + + @override + def wrap_local(self) -> Wrapped: + return Wrapped(prefix=[]) + + @override + def wrap_remote(self) -> Wrapped: + return Wrapped(prefix=[]) + + @override + def with_password(self, password: str) -> Self: + raise ElevateError( + "--ask-elevate-password requires --elevate to select an elevation method" + ) + + +@dataclass(frozen=True) +class SudoElevator(Elevator): + """Wrap with ``sudo``, optionally feeding the password on stdin. + + Extra arguments come from ``NIX_SUDOOPTS`` for backwards + compatibility with the previous implementation in ``run_wrapper``. + """ + + name: str = "sudo" + password: str | None = None + extra_opts: list[str] = field( + default_factory=lambda: shlex.split(os.getenv("NIX_SUDOOPTS", "")) + ) + + @override + def wrap_local(self) -> Wrapped: + # Local sudo can prompt on /dev/tty itself, so the password is + # only piped when one was supplied explicitly. + return self._wrap() + + @override + def wrap_remote(self) -> Wrapped: + return self._wrap() + + def _wrap(self) -> Wrapped: + if self.password is not None: + return Wrapped( + prefix=["sudo", "--prompt=", "--stdin", *self.extra_opts], + stdin=self.password + "\n", + ) + return Wrapped(prefix=["sudo", *self.extra_opts]) + + @override + def with_password(self, password: str) -> Self: + return replace(self, password=password) + + @override + def on_remote_failure(self) -> str | None: + if self.password is None: + return ( + "while running command with remote sudo, did you forget to " + "use --ask-elevate-password?" + ) + return None + + +class ElevatorKind(Enum): + """CLI-selectable elevation backends. + + The enum *value* is the :class:`Elevator` subclass to instantiate, + ``str(member)`` is what ``--elevate`` accepts on the command line. + Extended by later commits. + """ + + NONE = NoElevator + SUDO = SudoElevator + + @override + def __str__(self) -> str: + return self.name.lower() + + def make(self) -> Elevator: + """Instantiate a fresh, unparameterised elevator of this kind.""" + cls: type[Elevator] = self.value + return cls() + + @classmethod + def choices(cls) -> list[str]: + """All ``--elevate`` values, for argparse ``choices=``.""" + return [str(m) for m in cls] + + @classmethod + def from_name(cls, name: str) -> Elevator: + try: + return cls[name.upper()].make() + except KeyError: + raise ElevateError( + f"unknown elevation method {name!r}, choose from: " + + ", ".join(cls.choices()) + ) from None + + +#: Singleton used as the default ``elevate=`` argument throughout. +NO_ELEVATOR: Final[Elevator] = NoElevator() diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py new file mode 100644 index 000000000000..349d36827448 --- /dev/null +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py @@ -0,0 +1,50 @@ +import pytest +from pytest import MonkeyPatch + +import nixos_rebuild.elevate as e + + +def test_no_elevator() -> None: + n = e.NoElevator() + assert not n.elevates + assert n.wrap_local() == e.Wrapped(prefix=[]) + assert n.wrap_remote() == e.Wrapped(prefix=[]) + with pytest.raises(e.ElevateError): + n.with_password("x") + + +def test_sudo_elevator(monkeypatch: MonkeyPatch) -> None: + monkeypatch.delenv("NIX_SUDOOPTS", raising=False) + + s = e.SudoElevator() + assert s.elevates + assert s.wrap_local() == e.Wrapped(prefix=["sudo"]) + assert s.wrap_remote() == e.Wrapped(prefix=["sudo"]) + assert s.on_remote_failure() is not None + + sp = s.with_password("hunter2") + assert sp.wrap_remote() == e.Wrapped( + prefix=["sudo", "--prompt=", "--stdin"], + stdin="hunter2\n", + ) + assert sp.on_remote_failure() is None + # original unchanged + assert s.password is None + + +def test_sudo_elevator_extra_opts(monkeypatch: MonkeyPatch) -> None: + monkeypatch.setenv("NIX_SUDOOPTS", "--preserve-env=FOO -H") + s = e.SudoElevator() + assert s.wrap_local() == e.Wrapped(prefix=["sudo", "--preserve-env=FOO", "-H"]) + assert s.with_password("p").wrap_remote() == e.Wrapped( + prefix=["sudo", "--prompt=", "--stdin", "--preserve-env=FOO", "-H"], + stdin="p\n", + ) + + +def test_elevator_kind() -> None: + assert isinstance(e.ElevatorKind.from_name("sudo"), e.SudoElevator) + assert isinstance(e.ElevatorKind.from_name("none"), e.NoElevator) + with pytest.raises(e.ElevateError): + e.ElevatorKind.from_name("doas") + assert set(e.ElevatorKind.choices()) == {"none", "sudo"} From b9a7b55898b8d3a671694a60ba2a8b8634832c2c Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:20:39 +0200 Subject: [PATCH 027/149] nixos-rebuild-ng: run_wrapper: delegate sudo wrapping to Elevator Replaces the inline sudo command assembly with calls into the Elevator introduced in the previous commit. The `sudo: bool` parameter is kept as a temporary shim that constructs a SudoElevator internally, so no caller or test changes are needed and the existing test suite proves the move is behaviour-preserving. The shim is removed in the next commit. --- .../src/nixos_rebuild/process.py | 57 ++++++++----------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 9f6baaa178a9..3a0bd047a5d9 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -12,6 +12,7 @@ from ipaddress import AddressValueError, IPv6Address from typing import Final, Literal, Self, TextIO, TypedDict, Unpack, override from . import tmpdir +from .elevate import NO_ELEVATOR, Elevator, SudoElevator logger: Final = logging.getLogger(__name__) @@ -130,10 +131,16 @@ def run_wrapper( env: Mapping[str, EnvValue] | None = None, append_local_env: Mapping[str, str] | None = None, remote: Remote | None = None, + elevate: Elevator = NO_ELEVATOR, sudo: bool = False, **kwargs: Unpack[RunKwargs], ) -> subprocess.CompletedProcess[str]: "Wrapper around `subprocess.run` that supports extra functionality." + # Back-compat shim while callers are migrated to ``elevate=``; + # removed in the next commit. + if sudo: + elevate = SudoElevator(password=remote.sudo_password if remote else None) + process_input = None run_args: list[Arg] = list(args) final_args: list[Arg] @@ -142,7 +149,10 @@ def run_wrapper( resolved_env = _resolve_env_local(normalized_env) if remote: + wrapped = elevate.wrap_remote() + process_input = wrapped.stdin remote_run_args: list[Arg] = [ + *wrapped.prefix, "/bin/sh", "-c", _remote_shell_script(normalized_env), @@ -150,20 +160,6 @@ def run_wrapper( *run_args, ] - if sudo: - sudo_args = shlex.split(os.getenv("NIX_SUDOOPTS", "")) - if remote.sudo_password: - remote_run_args = [ - "sudo", - "--prompt=", - "--stdin", - *sudo_args, - *remote_run_args, - ] - process_input = remote.sudo_password + "\n" - else: - remote_run_args = ["sudo", *sudo_args, *remote_run_args] - ssh_args: list[Arg] = [ "ssh", *remote.opts, @@ -176,22 +172,19 @@ def run_wrapper( popen_env = None # keep ssh's environment normal else: - if sudo: - # subprocess.run(env=...) would affect sudo, but sudo may drop env - # for the target command. - # So we inject env via `sudo env ... cmd`. + wrapped = elevate.wrap_local() + process_input = wrapped.stdin + if elevate.elevates: + # subprocess.run(env=...) would affect the elevator process, + # which may then drop env for the target command. Inject env + # via `env -i ... cmd` instead so it survives. if env is not None and resolved_env: run_args = _prefix_env_cmd(run_args, resolved_env) - - sudo_args = shlex.split(os.getenv("NIX_SUDOOPTS", "")) - final_args = ["sudo", *sudo_args, *run_args] - - # No need to pass env to subprocess.run; keep sudo's own env - # default. + final_args = [*wrapped.prefix, *run_args] popen_env = None else: - # Non-sudo local: we can fully control the environment with - # subprocess.run(env=...) + # Unprivileged local: we can fully control the environment + # with subprocess.run(env=...) final_args = run_args popen_env = None if env is None else resolved_env @@ -225,16 +218,14 @@ def run_wrapper( return r except KeyboardInterrupt: - # sudo commands are activation only and unlikely to be long running - if remote and not sudo: + # elevated commands are activation only and unlikely to be long + # running + if remote and not elevate.elevates: _kill_long_running_ssh_process(args, remote) raise except subprocess.CalledProcessError: - if sudo and remote and remote.sudo_password is None: - logger.error( - "while running command with remote sudo, did you forget to use " - "--ask-sudo-password?" - ) + if remote and (hint := elevate.on_remote_failure()): + logger.error(hint) raise From c0941322a4f423dc42dd0a4c06be1bc0b513d4c2 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:26:41 +0200 Subject: [PATCH 028/149] nixos-rebuild-ng: thread Elevator through the call chain Mechanical replacement of `sudo: bool` with `elevate: Elevator` across run_wrapper, nix.py and services.py, plus test updates. The temporary shim in run_wrapper is removed. `args.elevator` is constructed in execute() from the existing --sudo / --ask-sudo-password flags so the CLI surface is unchanged in this commit. --- .../src/nixos_rebuild/__init__.py | 10 ++- .../nixos-rebuild-ng/src/nixos_rebuild/nix.py | 29 ++++--- .../src/nixos_rebuild/process.py | 8 +- .../src/nixos_rebuild/services.py | 10 +-- .../ni/nixos-rebuild-ng/src/tests/test_nix.py | 86 ++++++++++--------- .../src/tests/test_process.py | 11 ++- 6 files changed, 81 insertions(+), 73 deletions(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py index 71480548fb50..28b6c3e44d75 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py @@ -6,6 +6,7 @@ from typing import Final, assert_never from . import nix, services from .constants import EXECUTABLE, WITH_SHELL_FILES +from .elevate import NO_ELEVATOR, SudoElevator from .models import Action, BuildAttr, Flake, GroupedNixArgs, Profile from .process import Remote from .utils import LogFormatter @@ -321,7 +322,7 @@ def execute(argv: list[str]) -> None: args, grouped_nix_args = parse_args(argv) if args.upgrade or args.upgrade_all: - nix.upgrade_channels(args.upgrade_all, args.sudo) + nix.upgrade_channels(args.upgrade_all, args.elevator) action = Action(args.action) # Only run shell scripts from the Nixpkgs tree if the action is @@ -339,6 +340,13 @@ def execute(argv: list[str]) -> None: profile = Profile.from_arg(args.profile_name) target_host = Remote.from_arg(args.target_host, args.ask_sudo_password) build_host = Remote.from_arg(args.build_host, False, validate_opts=False) + args.elevator = ( + SudoElevator( + password=target_host.sudo_password if target_host else None, + ) + if args.sudo + else NO_ELEVATOR + ) build_attr = BuildAttr.from_arg(args.attr, args.file) flake = Flake.from_arg(args.flake, target_host) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py index c6b5b4d63c45..38894b734133 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py @@ -14,6 +14,7 @@ from textwrap import dedent from typing import Final, Literal from . import tmpdir +from .elevate import NO_ELEVATOR, Elevator from .models import ( Action, BuildAttr, @@ -453,7 +454,7 @@ def get_generations(profile: Profile) -> list[Generation]: def get_generations_from_nix_env( profile: Profile, target_host: Remote | None = None, - sudo: bool = False, + elevate: Elevator = NO_ELEVATOR, ) -> list[Generation]: """Get all NixOS generations from profile with nix-env. Needs root. @@ -468,7 +469,7 @@ def get_generations_from_nix_env( ["nix-env", "-p", profile.path, "--list-generations"], stdout=PIPE, remote=target_host, - sudo=sudo, + elevate=elevate, ) def parse_line(line: str) -> Generation: @@ -600,12 +601,12 @@ def repl_flake(flake: Flake, flake_flags: Args | None = None) -> None: ) -def rollback(profile: Profile, target_host: Remote | None, sudo: bool) -> Path: +def rollback(profile: Profile, target_host: Remote | None, elevate: Elevator) -> Path: "Rollback Nix profile, like one created by `nixos-rebuild switch`." run_wrapper( ["nix-env", "--rollback", "-p", profile.path], remote=target_host, - sudo=sudo, + elevate=elevate, ) # Rollback config PATH is the own profile return profile.path @@ -614,11 +615,11 @@ def rollback(profile: Profile, target_host: Remote | None, sudo: bool) -> Path: def rollback_temporary_profile( profile: Profile, target_host: Remote | None, - sudo: bool, + elevate: Elevator, ) -> Path | None: "Rollback a temporary Nix profile, like one created by `nixos-rebuild test`." generations = get_generations_from_nix_env( - profile, target_host=target_host, sudo=sudo + profile, target_host=target_host, elevate=elevate ) previous_gen_id = None for generation in generations: @@ -635,7 +636,7 @@ def set_profile( profile: Profile, path_to_config: Path, target_host: Remote | None, - sudo: bool, + elevate: Elevator, ) -> None: "Set a path as the current active Nix profile." if not os.environ.get( @@ -668,7 +669,7 @@ def set_profile( run_wrapper( ["nix-env", "-p", profile.path, "--set", path_to_config], remote=target_host, - sudo=sudo, + elevate=elevate, ) @@ -676,7 +677,7 @@ def switch_to_configuration( path_to_config: Path, action: Literal[Action.SWITCH, Action.BOOT, Action.TEST, Action.DRY_ACTIVATE], target_host: Remote | None, - sudo: bool, + elevate: Elevator, install_bootloader: bool = False, specialisation: str | None = None, ) -> None: @@ -716,7 +717,7 @@ def switch_to_configuration( "NIXOS_INSTALL_BOOTLOADER": "1" if install_bootloader else "0", }, remote=target_host, - sudo=sudo, + elevate=elevate, # switch-to-configuration is not expected to produce meaningful # stdout, but if it (or any of its children) does, it would leak # into our stdout and break the "only the store path on stdout" @@ -728,7 +729,7 @@ def switch_to_configuration( def upgrade_channels( all_channels: bool = False, - sudo: bool = False, + elevate: Elevator = NO_ELEVATOR, channels_dir: Path = Path("/nix/var/nix/profiles/per-user/root/channels/"), ) -> None: """Upgrade channels for classic Nix. @@ -736,10 +737,10 @@ def upgrade_channels( It will either upgrade just the `nixos` channel (including any channel that has a `.update-on-nixos-rebuild` file) or all. """ - if not sudo and os.geteuid() != 0: + if not elevate.elevates and os.geteuid() != 0: raise NixOSRebuildError( "if you pass the '--upgrade' or '--upgrade-all' flag, you must " - "also pass '--sudo' or run the command as root (e.g., with sudo)" + "also pass '--elevate' or run the command as root" ) channel_updated = False @@ -752,7 +753,7 @@ def upgrade_channels( run_wrapper( ["nix-channel", "--update", channel_path.name], check=False, - sudo=sudo, + elevate=elevate, ) channel_updated = True diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 3a0bd047a5d9..121c33980459 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -12,7 +12,7 @@ from ipaddress import AddressValueError, IPv6Address from typing import Final, Literal, Self, TextIO, TypedDict, Unpack, override from . import tmpdir -from .elevate import NO_ELEVATOR, Elevator, SudoElevator +from .elevate import NO_ELEVATOR, Elevator logger: Final = logging.getLogger(__name__) @@ -132,15 +132,9 @@ def run_wrapper( append_local_env: Mapping[str, str] | None = None, remote: Remote | None = None, elevate: Elevator = NO_ELEVATOR, - sudo: bool = False, **kwargs: Unpack[RunKwargs], ) -> subprocess.CompletedProcess[str]: "Wrapper around `subprocess.run` that supports extra functionality." - # Back-compat shim while callers are migrated to ``elevate=``; - # removed in the next commit. - if sudo: - elevate = SudoElevator(password=remote.sudo_password if remote else None) - process_input = None run_args: list[Arg] = list(args) final_args: list[Arg] diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py index 4de74aa9c4d4..5237075a17ec 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py @@ -132,12 +132,12 @@ def _rollback_system( ) -> Path: match action: case Action.SWITCH | Action.BOOT: - path_to_config = nix.rollback(profile, target_host, sudo=args.sudo) + path_to_config = nix.rollback(profile, target_host, elevate=args.elevator) case Action.TEST | Action.BUILD: maybe_path_to_config = nix.rollback_temporary_profile( profile, target_host, - sudo=args.sudo, + elevate=args.elevator, ) if maybe_path_to_config: path_to_config = maybe_path_to_config @@ -231,13 +231,13 @@ def _activate_system( profile, path_to_config, target_host=target_host, - sudo=args.sudo, + elevate=args.elevator, ) nix.switch_to_configuration( path_to_config, action, target_host=target_host, - sudo=args.sudo, + elevate=args.elevator, specialisation=args.specialisation, install_bootloader=args.install_bootloader, ) @@ -247,7 +247,7 @@ def _activate_system( path_to_config, action, target_host=target_host, - sudo=args.sudo, + elevate=args.elevator, specialisation=args.specialisation, install_bootloader=args.install_bootloader, ) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index 9b225eca4e84..ef198fdac275 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -9,12 +9,15 @@ from unittest.mock import ANY, Mock, call, patch import pytest from pytest import MonkeyPatch +import nixos_rebuild.elevate as e import nixos_rebuild.models as m import nixos_rebuild.nix as n import nixos_rebuild.process as p from .helpers import get_qualified_name +SUDO = e.SudoElevator() + @patch( get_qualified_name(n.run_wrapper, n), @@ -531,7 +534,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None: ["nix-env", "-p", path, "--list-generations"], stdout=PIPE, remote=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) remote = m.Remote("user@host", [], "password", "ssh") @@ -539,7 +542,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None: get_qualified_name(n.run_wrapper, n), autospec=True, return_value=return_value ) as mock_run: assert n.get_generations_from_nix_env( - m.Profile("system", path), remote, True + m.Profile("system", path), remote, SUDO ) == [ m.Generation(id=2082, current=False, timestamp="2024-11-07 22:58:56"), m.Generation(id=2083, current=False, timestamp="2024-11-07 22:59:41"), @@ -549,7 +552,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None: ["nix-env", "-p", path, "--list-generations"], stdout=PIPE, remote=remote, - sudo=True, + elevate=SUDO, ) @@ -640,19 +643,19 @@ def test_rollback(mock_run: Mock, tmp_path: Path) -> None: profile = m.Profile("system", path) - assert n.rollback(profile, None, False) == profile.path + assert n.rollback(profile, None, e.NO_ELEVATOR) == profile.path mock_run.assert_called_with( ["nix-env", "--rollback", "-p", path], remote=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) target_host = m.Remote("user@localhost", [], None, "ssh") - assert n.rollback(profile, target_host, True) == profile.path + assert n.rollback(profile, target_host, SUDO) == profile.path mock_run.assert_called_with( ["nix-env", "--rollback", "-p", path], remote=target_host, - sudo=True, + elevate=SUDO, ) @@ -672,7 +675,7 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None: """), ) assert ( - n.rollback_temporary_profile(m.Profile("system", path), None, False) + n.rollback_temporary_profile(m.Profile("system", path), None, e.NO_ELEVATOR) == path.parent / "system-2083-link" ) mock_run.assert_called_with( @@ -684,12 +687,12 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None: ], stdout=PIPE, remote=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) target_host = m.Remote("user@localhost", [], None, "ssh") assert ( - n.rollback_temporary_profile(m.Profile("foo", path), target_host, True) + n.rollback_temporary_profile(m.Profile("foo", path), target_host, SUDO) == path.parent / "foo-2083-link" ) mock_run.assert_called_with( @@ -701,12 +704,12 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None: ], stdout=PIPE, remote=target_host, - sudo=True, + elevate=SUDO, ) with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run: mock_run.return_value = CompletedProcess([], 0, stdout="") - assert n.rollback_temporary_profile(profile, None, False) is None + assert n.rollback_temporary_profile(profile, None, e.NO_ELEVATOR) is None @patch(get_qualified_name(n.run_wrapper, n), autospec=True) @@ -719,25 +722,25 @@ def test_set_profile(mock_run: Mock) -> None: m.Profile("system", profile_path), config_path, target_host=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) mock_run.assert_called_with( ["nix-env", "-p", profile_path, "--set", config_path], remote=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) mock_run.return_value = CompletedProcess([], 1) - with pytest.raises(m.NixOSRebuildError) as e: + with pytest.raises(m.NixOSRebuildError) as exc: n.set_profile( m.Profile("system", profile_path), config_path, target_host=None, - sudo=False, + elevate=e.NO_ELEVATOR, ) - assert str(e.value).startswith( + assert str(exc.value).startswith( "error: your NixOS configuration path seems to be missing essential files." ) @@ -756,7 +759,7 @@ def test_switch_to_configuration_without_systemd_run( n.switch_to_configuration( profile_path, m.Action.SWITCH, - sudo=False, + elevate=e.NO_ELEVATOR, target_host=None, specialisation=None, install_bootloader=False, @@ -768,21 +771,21 @@ def test_switch_to_configuration_without_systemd_run( "NIXOS_NO_CHECK": p.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "0", }, - sudo=False, + elevate=e.NO_ELEVATOR, remote=None, stdout=sys.stderr, ) - with pytest.raises(m.NixOSRebuildError) as e: + with pytest.raises(m.NixOSRebuildError) as exc: n.switch_to_configuration( config_path, m.Action.BOOT, - sudo=False, + elevate=e.NO_ELEVATOR, target_host=None, specialisation="special", ) assert ( - str(e.value) + str(exc.value) == "error: '--specialisation' can only be used with 'switch' and 'test'" ) @@ -795,7 +798,7 @@ def test_switch_to_configuration_without_systemd_run( n.switch_to_configuration( Path("/path/to/config"), m.Action.TEST, - sudo=True, + elevate=SUDO, target_host=target_host, install_bootloader=True, specialisation="special", @@ -810,7 +813,7 @@ def test_switch_to_configuration_without_systemd_run( "NIXOS_NO_CHECK": p.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "1", }, - sudo=True, + elevate=SUDO, remote=target_host, stdout=sys.stderr, ) @@ -830,7 +833,7 @@ def test_switch_to_configuration_with_systemd_run( n.switch_to_configuration( profile_path, m.Action.SWITCH, - sudo=False, + elevate=e.NO_ELEVATOR, target_host=None, specialisation=None, install_bootloader=False, @@ -846,7 +849,7 @@ def test_switch_to_configuration_with_systemd_run( "NIXOS_NO_CHECK": p.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "0", }, - sudo=False, + elevate=e.NO_ELEVATOR, remote=None, stdout=sys.stderr, ) @@ -860,7 +863,7 @@ def test_switch_to_configuration_with_systemd_run( n.switch_to_configuration( Path("/path/to/config"), m.Action.TEST, - sudo=True, + elevate=SUDO, target_host=target_host, install_bootloader=True, specialisation="special", @@ -876,7 +879,7 @@ def test_switch_to_configuration_with_systemd_run( "NIXOS_NO_CHECK": p.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "1", }, - sudo=True, + elevate=SUDO, remote=target_host, stdout=sys.stderr, ) @@ -887,11 +890,13 @@ def test_switch_to_configuration_with_systemd_run( def test_upgrade_channels(mock_run: Mock, mock_geteuid: Mock, tmpdir: Path) -> None: tmp_path = Path(tmpdir) - with pytest.raises(m.NixOSRebuildError) as e: - n.upgrade_channels(all_channels=False, sudo=False, channels_dir=tmp_path) - assert str(e.value) == ( + with pytest.raises(m.NixOSRebuildError) as exc: + n.upgrade_channels( + all_channels=False, elevate=e.NO_ELEVATOR, channels_dir=tmp_path + ) + assert str(exc.value) == ( "error: if you pass the '--upgrade' or '--upgrade-all' flag, you must " - "also pass '--sudo' or run the command as root (e.g., with sudo)" + "also pass '--elevate' or run the command as root" ) (tmp_path / "nixos").mkdir() @@ -899,19 +904,20 @@ def test_upgrade_channels(mock_run: Mock, mock_geteuid: Mock, tmpdir: Path) -> N (tmp_path / "nixos-hardware" / ".update-on-nixos-rebuild").touch() (tmp_path / "home-manager").mkdir() - # should work because we are passing sudo=True even with os.geteuid == 1000 - n.upgrade_channels(all_channels=False, sudo=True, channels_dir=tmp_path) + # should work because we are passing an elevator even with os.geteuid == 1000 + n.upgrade_channels(all_channels=False, elevate=SUDO, channels_dir=tmp_path) + # Path.glob order is filesystem-dependent, so don't assert call order. mock_run.assert_has_calls( [ call( ["nix-channel", "--update", "nixos-hardware"], check=False, - sudo=True, + elevate=SUDO, ), call( ["nix-channel", "--update", "nixos"], check=False, - sudo=True, + elevate=SUDO, ), ], any_order=True, @@ -921,23 +927,23 @@ def test_upgrade_channels(mock_run: Mock, mock_geteuid: Mock, tmpdir: Path) -> N # root check mock_geteuid.return_value = 0 - n.upgrade_channels(all_channels=True, sudo=False, channels_dir=tmp_path) + n.upgrade_channels(all_channels=True, elevate=e.NO_ELEVATOR, channels_dir=tmp_path) mock_run.assert_has_calls( [ call( ["nix-channel", "--update", "home-manager"], check=False, - sudo=False, + elevate=e.NO_ELEVATOR, ), call( ["nix-channel", "--update", "nixos-hardware"], check=False, - sudo=False, + elevate=e.NO_ELEVATOR, ), call( ["nix-channel", "--update", "nixos"], check=False, - sudo=False, + elevate=e.NO_ELEVATOR, ), ], any_order=True, diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py index 3780b21f26d5..af8f510c5f49 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py @@ -3,6 +3,7 @@ from unittest.mock import patch from pytest import MonkeyPatch +import nixos_rebuild.elevate as e import nixos_rebuild.models as m import nixos_rebuild.process as p @@ -43,7 +44,7 @@ def test_run_wrapper(mock_run: Any) -> None: p.run_wrapper( ["test", "--with", "flags"], check=False, - sudo=True, + elevate=e.SudoElevator(), env={"FOO": "bar"}, ) mock_run.assert_called_with( @@ -67,7 +68,6 @@ def test_run_wrapper(mock_run: Any) -> None: p.run_wrapper( ["test", "--with", "flags"], check=False, - sudo=False, append_local_env={"FOO": "bar"}, ) mock_run.assert_called_with( @@ -89,7 +89,6 @@ def test_run_wrapper(mock_run: Any) -> None: p.run_wrapper( ["test", "--with", "flags"], check=False, - sudo=False, env={"PATH": "/"}, append_local_env={"FOO": "bar"}, ) @@ -140,7 +139,7 @@ def test_run_wrapper(mock_run: Any) -> None: p.run_wrapper( ["test", "--with", "flags"], check=True, - sudo=True, + elevate=e.SudoElevator(password="password"), env={"FOO": "bar"}, remote=m.Remote("user@localhost", ["--ssh", "opt"], "password", "ssh"), ) @@ -262,7 +261,7 @@ def test_custom_sudo_args(mock_run: Any) -> None: p.run_wrapper( ["test"], check=False, - sudo=True, + elevate=e.SudoElevator(), ) mock_run.assert_called_with( [ @@ -287,7 +286,7 @@ def test_custom_sudo_args(mock_run: Any) -> None: p.run_wrapper( ["test"], check=False, - sudo=True, + elevate=e.SudoElevator(), remote=m.Remote("user@localhost", [], None, "ssh"), ) mock_run.assert_called_with( From a769269aef810723207d77412a61cc651778e2c1 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:27:32 +0200 Subject: [PATCH 029/149] nixos-rebuild-ng: add --elevate and --ask-elevate-password flags --elevate={none,sudo} picks the privilege-elevation backend and --ask-elevate-password (-S) prompts locally and feeds the password to whichever backend is selected. --sudo and --ask-sudo-password are kept as silent aliases that map onto the new flags. --use-remote-sudo stays deprecated as before. --- .../src/nixos_rebuild/__init__.py | 68 +++++++++++++------ .../nixos-rebuild-ng/src/tests/test_main.py | 28 ++++++++ 2 files changed, 76 insertions(+), 20 deletions(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py index 28b6c3e44d75..bff1ccab7ff6 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py @@ -6,7 +6,7 @@ from typing import Final, assert_never from . import nix, services from .constants import EXECUTABLE, WITH_SHELL_FILES -from .elevate import NO_ELEVATOR, SudoElevator +from .elevate import NO_ELEVATOR, ElevateError, ElevatorKind from .models import Action, BuildAttr, Flake, GroupedNixArgs, Profile from .process import Remote from .utils import LogFormatter @@ -164,18 +164,32 @@ def get_parser() -> tuple[argparse.ArgumentParser, dict[str, argparse.ArgumentPa help="JSON output, only implemented for 'list-generations' right now", ) main_parser.add_argument( - "--ask-sudo-password", - "-S", - action="store_true", - help="Asks for sudo password for remote activation, implies --sudo", + "--elevate", + choices=ElevatorKind.choices(), + default=None, + help="Privilege-elevation method for activation commands", ) main_parser.add_argument( - "--sudo", action="store_true", help="Prefixes activation commands with sudo" + "--ask-elevate-password", + "-S", + action="store_true", + help="Prompt locally for the password to feed to the elevation " + "method, implies --elevate=sudo if --elevate is not given", + ) + main_parser.add_argument( + "--sudo", + action="store_true", + help="Alias for '--elevate=sudo'", + ) + main_parser.add_argument( + "--ask-sudo-password", + action="store_true", + help="Alias for '--elevate=sudo --ask-elevate-password'", ) main_parser.add_argument( "--use-remote-sudo", action="store_true", - help="Deprecated, use '--sudo' instead", + help="Deprecated, use '--elevate=sudo' instead", ) main_parser.add_argument("--no-ssh-tty", action="store_true", help="Deprecated") main_parser.add_argument( @@ -246,16 +260,32 @@ def parse_args( args.action = Action.DRY_BUILD.value if args.ask_sudo_password: - args.sudo = True + args.ask_elevate_password = True + + if args.use_remote_sudo: + parser_warn("--use-remote-sudo is deprecated, use --elevate=sudo instead") + + # Map the elevate flags onto an Elevator. The password itself is + # attached later via Elevator.with_password() once the target host + # (used in the prompt) is known. + if args.elevate is not None: + args.elevator = ElevatorKind.from_name(args.elevate) + elif args.sudo or args.use_remote_sudo or args.ask_sudo_password: + args.elevator = ElevatorKind.SUDO.make() + elif args.ask_elevate_password: + # -S historically implied --sudo. Keep that for muscle memory + # but be explicit now that there is more than one backend. + parser_warn( + "--ask-elevate-password without --elevate, falling back to --elevate=sudo" + ) + args.elevator = ElevatorKind.SUDO.make() + else: + args.elevator = NO_ELEVATOR if args.install_grub: parser_warn("--install-grub is deprecated, use --install-bootloader instead") args.install_bootloader = True - if args.use_remote_sudo: - parser_warn("--use-remote-sudo is deprecated, use --sudo instead") - args.sudo = True - if args.fast: parser_warn("--fast is deprecated, use --no-reexec instead") args.no_reexec = True @@ -338,15 +368,13 @@ def execute(argv: list[str]) -> None: services.reexec(argv, args, grouped_nix_args) profile = Profile.from_arg(args.profile_name) - target_host = Remote.from_arg(args.target_host, args.ask_sudo_password) + target_host = Remote.from_arg(args.target_host, args.ask_elevate_password) build_host = Remote.from_arg(args.build_host, False, validate_opts=False) - args.elevator = ( - SudoElevator( - password=target_host.sudo_password if target_host else None, - ) - if args.sudo - else NO_ELEVATOR - ) + if target_host and target_host.sudo_password: + try: + args.elevator = args.elevator.with_password(target_host.sudo_password) + except ElevateError as ex: + sys.exit(f"error: {ex}") build_attr = BuildAttr.from_arg(args.attr, args.file) flake = Flake.from_arg(args.flake, target_host) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py index 3ebba4edc5b6..27335feeae5d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py @@ -21,6 +21,34 @@ DEFAULT_RUN_KWARGS = { } +def test_parse_args_elevate() -> None: + r, _ = nr.parse_args(["nixos-rebuild", "switch"]) + assert r.elevator is nr.elevate.NO_ELEVATOR + + r, _ = nr.parse_args(["nixos-rebuild", "switch", "--elevate=sudo"]) + assert isinstance(r.elevator, nr.elevate.SudoElevator) + + # back-compat aliases + for flag in ("--sudo", "--use-remote-sudo"): + r, _ = nr.parse_args(["nixos-rebuild", "switch", flag]) + assert isinstance(r.elevator, nr.elevate.SudoElevator) + + r, _ = nr.parse_args(["nixos-rebuild", "switch", "--ask-sudo-password"]) + assert isinstance(r.elevator, nr.elevate.SudoElevator) + assert r.ask_elevate_password + + # -S without --elevate implies sudo + r, _ = nr.parse_args(["nixos-rebuild", "switch", "-S"]) + assert isinstance(r.elevator, nr.elevate.SudoElevator) + + # explicit --elevate wins over the --sudo alias + r, _ = nr.parse_args(["nixos-rebuild", "switch", "--elevate=none", "--sudo"]) + assert isinstance(r.elevator, nr.elevate.NoElevator) + + with pytest.raises(SystemExit): + nr.parse_args(["nixos-rebuild", "switch", "--elevate=doas"]) + + def test_parse_args() -> None: with pytest.raises(SystemExit) as e: nr.parse_args(["nixos-rebuild", "unknown-action"]) From 0273aad113950a3bcaf70b883e4db05637bd8ffc Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:28:44 +0200 Subject: [PATCH 030/149] nixos-rebuild-ng: move password prompt out of Remote Remote no longer carries auth state, the elevator owns the password end-to-end. The prompt itself lives in Elevator.with_prompted_password() so the CLI entry point stays a thin orchestrator and all elevation-related plumbing is in one module. --- .../src/nixos_rebuild/__init__.py | 19 ++++++------ .../src/nixos_rebuild/elevate.py | 12 ++++++++ .../src/nixos_rebuild/process.py | 21 +++++--------- .../src/nixos_rebuild/services.py | 6 +--- .../src/tests/test_elevate.py | 22 ++++++++++++++ .../nixos-rebuild-ng/src/tests/test_models.py | 4 +-- .../ni/nixos-rebuild-ng/src/tests/test_nix.py | 20 ++++++------- .../src/tests/test_process.py | 29 +++++++++---------- 8 files changed, 76 insertions(+), 57 deletions(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py index bff1ccab7ff6..c1ad2bde3d00 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py @@ -6,7 +6,7 @@ from typing import Final, assert_never from . import nix, services from .constants import EXECUTABLE, WITH_SHELL_FILES -from .elevate import NO_ELEVATOR, ElevateError, ElevatorKind +from .elevate import NO_ELEVATOR, ElevatorKind from .models import Action, BuildAttr, Flake, GroupedNixArgs, Profile from .process import Remote from .utils import LogFormatter @@ -266,8 +266,8 @@ def parse_args( parser_warn("--use-remote-sudo is deprecated, use --elevate=sudo instead") # Map the elevate flags onto an Elevator. The password itself is - # attached later via Elevator.with_password() once the target host - # (used in the prompt) is known. + # attached later via Elevator.with_prompted_password() once the + # target host (used in the prompt) is known. if args.elevate is not None: args.elevator = ElevatorKind.from_name(args.elevate) elif args.sudo or args.use_remote_sudo or args.ask_sudo_password: @@ -368,13 +368,12 @@ def execute(argv: list[str]) -> None: services.reexec(argv, args, grouped_nix_args) profile = Profile.from_arg(args.profile_name) - target_host = Remote.from_arg(args.target_host, args.ask_elevate_password) - build_host = Remote.from_arg(args.build_host, False, validate_opts=False) - if target_host and target_host.sudo_password: - try: - args.elevator = args.elevator.with_password(target_host.sudo_password) - except ElevateError as ex: - sys.exit(f"error: {ex}") + target_host = Remote.from_arg(args.target_host) + build_host = Remote.from_arg(args.build_host, validate_opts=False) + args.elevator = args.elevator.with_prompted_password( + ask=args.ask_elevate_password, + host_label=target_host.host if target_host else "localhost", + ) build_attr = BuildAttr.from_arg(args.attr, args.file) flake = Flake.from_arg(args.flake, target_host) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py index e75fd099d678..be9e35fce613 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py @@ -10,6 +10,7 @@ prefix and stdin. from __future__ import annotations +import getpass import os import shlex from abc import ABC, abstractmethod @@ -71,6 +72,17 @@ class Elevator(ABC): (e.g. a polkit rule). """ + def with_prompted_password(self, *, ask: bool, host_label: str) -> Self: + """Prompt locally for a password and return a copy carrying it. + + No-op when *ask* is false. May raise :class:`ElevateError` (e.g. + on :class:`NoElevator`). + """ + if not ask: + return self + password = getpass.getpass(f"[{self.name}] password for {host_label}: ") + return self.with_password(password) + def on_remote_failure(self) -> str | None: """Optional hint to print when a remote elevated command fails.""" return None diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 121c33980459..bad599b36643 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -1,5 +1,4 @@ import atexit -import getpass import logging import os import re @@ -46,14 +45,12 @@ type EnvValue = str | Literal[_Env.PRESERVE_ENV] class Remote: host: str opts: list[str] - sudo_password: str | None store_type: str @classmethod def from_arg( cls, host: str | None, - ask_sudo_password: bool | None, validate_opts: bool = True, ) -> Self | None: if not host: @@ -66,25 +63,21 @@ class Remote: opts = shlex.split(os.getenv("NIX_SSHOPTS", "")) if validate_opts: - cls._validate_opts(opts, ask_sudo_password) - sudo_password = None - if ask_sudo_password: - sudo_password = getpass.getpass(f"[sudo] password for {host}: ") - return cls(host, opts, sudo_password, store_type) + cls._validate_opts(opts) + return cls(host, opts, store_type) @staticmethod - def _validate_opts(opts: list[str], ask_sudo_password: bool | None) -> None: + def _validate_opts(opts: list[str]) -> None: for o in opts: if o in ["-t", "-tt", "RequestTTY=yes", "RequestTTY=force"]: logger.warning( f"detected option '{o}' in NIX_SSHOPTS. SSH's TTY may " "cause issues, it is recommended to remove this option" ) - if not ask_sudo_password: - logger.warning( - "if you want to prompt for sudo password use " - "'--ask-sudo-password' option instead" - ) + logger.warning( + "if you want to prompt for a password for remote " + "elevation use '--ask-elevate-password' instead" + ) def ssh_host(self) -> str: """Fix up host string for SSH. diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py index 5237075a17ec..96d9d16e76f2 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py @@ -35,11 +35,7 @@ def reexec( return drv = None - # Parsing the args here but ignore ask_sudo_password since it is not - # needed and we would end up asking sudo password twice - if flake := Flake.from_arg( - args.flake, Remote.from_arg(args.target_host, ask_sudo_password=None) - ): + if flake := Flake.from_arg(args.flake, Remote.from_arg(args.target_host)): drv = nix.build_flake( NIXOS_REBUILD_ATTR, flake, diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py index 349d36827448..6d6231408adb 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py @@ -48,3 +48,25 @@ def test_elevator_kind() -> None: with pytest.raises(e.ElevateError): e.ElevatorKind.from_name("doas") assert set(e.ElevatorKind.choices()) == {"none", "sudo"} + + +def test_with_prompted_password(monkeypatch: MonkeyPatch) -> None: + prompts: list[str] = [] + + def fake_getpass(prompt: str) -> str: + prompts.append(prompt) + return "hunter2" + + monkeypatch.setattr(e.getpass, "getpass", fake_getpass) + + s = e.SudoElevator() + assert s.with_prompted_password(ask=False, host_label="x") is s + assert prompts == [] + + sp = s.with_prompted_password(ask=True, host_label="user@host") + assert isinstance(sp, e.SudoElevator) + assert sp.password == "hunter2" + assert prompts == ["[sudo] password for user@host: "] + + with pytest.raises(e.ElevateError): + e.NoElevator().with_prompted_password(ask=True, host_label="localhost") diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_models.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_models.py index 64ffce686976..fa9a41f93a42 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_models.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_models.py @@ -81,7 +81,7 @@ def test_flake_parse(mock_node: Mock, tmpdir: Path, monkeypatch: MonkeyPatch) -> autospec=True, return_value=subprocess.CompletedProcess([], 0, stdout="remote\n"), ): - target_host = m.Remote("target@remote", [], None, "ssh") + target_host = m.Remote("target@remote", [], "ssh") assert m.Flake.parse("/path/to/flake", target_host) == m.Flake( "/path/to/flake", 'nixosConfigurations."remote"' ) @@ -201,7 +201,7 @@ def test_flake_from_arg( ), ): assert m.Flake.from_arg( - "/path/to", m.Remote("user@host", [], None, "ssh") + "/path/to", m.Remote("user@host", [], "ssh") ) == m.Flake("/path/to", 'nixosConfigurations."remote-hostname"') diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index ef198fdac275..3d5a5093230b 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -86,7 +86,7 @@ def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> def test_build_remote( mock_uuid4: Mock, mock_run: Mock, monkeypatch: MonkeyPatch ) -> None: - build_host = m.Remote("user@host", [], None, "ssh") + build_host = m.Remote("user@host", [], "ssh") monkeypatch.setenv("NIX_SSHOPTS", "--ssh opts") def run_wrapper_side_effect( @@ -180,7 +180,7 @@ def test_build_remote_flake( ) -> None: monkeypatch.chdir(tmpdir) flake = m.Flake.parse("/flake.nix#hostname") - build_host = m.Remote("user@host", [], None, "ssh") + build_host = m.Remote("user@host", [], "ssh") monkeypatch.setenv("NIX_SSHOPTS", "--ssh opts") assert n.build_remote_flake( @@ -240,9 +240,9 @@ def test_copy_closure(monkeypatch: MonkeyPatch) -> None: n.copy_closure(closure, None) mock_run.assert_not_called() - target_host = m.Remote("user@target.host", [], None, "ssh") - build_host = m.Remote("user@build.host", [], None, "ssh") - target_host_ng = m.Remote("user@target.host", [], None, "ssh-ng") + target_host = m.Remote("user@target.host", [], "ssh") + build_host = m.Remote("user@build.host", [], "ssh") + target_host_ng = m.Remote("user@target.host", [], "ssh-ng") with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run: n.copy_closure(closure, target_host) mock_run.assert_called_with( @@ -537,7 +537,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None: elevate=e.NO_ELEVATOR, ) - remote = m.Remote("user@host", [], "password", "ssh") + remote = m.Remote("user@host", [], "ssh") with patch( get_qualified_name(n.run_wrapper, n), autospec=True, return_value=return_value ) as mock_run: @@ -650,7 +650,7 @@ def test_rollback(mock_run: Mock, tmp_path: Path) -> None: elevate=e.NO_ELEVATOR, ) - target_host = m.Remote("user@localhost", [], None, "ssh") + target_host = m.Remote("user@localhost", [], "ssh") assert n.rollback(profile, target_host, SUDO) == profile.path mock_run.assert_called_with( ["nix-env", "--rollback", "-p", path], @@ -690,7 +690,7 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None: elevate=e.NO_ELEVATOR, ) - target_host = m.Remote("user@localhost", [], None, "ssh") + target_host = m.Remote("user@localhost", [], "ssh") assert ( n.rollback_temporary_profile(m.Profile("foo", path), target_host, SUDO) == path.parent / "foo-2083-link" @@ -789,7 +789,7 @@ def test_switch_to_configuration_without_systemd_run( == "error: '--specialisation' can only be used with 'switch' and 'test'" ) - target_host = m.Remote("user@localhost", [], None, "ssh") + target_host = m.Remote("user@localhost", [], "ssh") with monkeypatch.context() as mp: mp.setenv("LOCALE_ARCHIVE", "/path/to/locale") mp.setenv("PATH", "/path/to/bin") @@ -854,7 +854,7 @@ def test_switch_to_configuration_with_systemd_run( stdout=sys.stderr, ) - target_host = m.Remote("user@localhost", [], None, "ssh") + target_host = m.Remote("user@localhost", [], "ssh") with monkeypatch.context() as mp: mp.setenv("LOCALE_ARCHIVE", "/path/to/locale") mp.setenv("PATH", "/path/to/bin") diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py index af8f510c5f49..4d6421146a8d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py @@ -111,7 +111,7 @@ def test_run_wrapper(mock_run: Any) -> None: p.run_wrapper( ["test", "--with", "some flags"], check=True, - remote=m.Remote("user@localhost", ["--ssh", "opt"], "password", "ssh"), + remote=m.Remote("user@localhost", ["--ssh", "opt"], "ssh"), ) mock_run.assert_called_with( [ @@ -141,7 +141,7 @@ def test_run_wrapper(mock_run: Any) -> None: check=True, elevate=e.SudoElevator(password="password"), env={"FOO": "bar"}, - remote=m.Remote("user@localhost", ["--ssh", "opt"], "password", "ssh"), + remote=m.Remote("user@localhost", ["--ssh", "opt"], "ssh"), ) mock_run.assert_called_with( [ @@ -180,7 +180,7 @@ def test__kill_long_running_ssh_process(mock_run: Any) -> None: "build", "/nix/store/la0c8nmpr9xfclla0n4f3qq9iwgdrq4g-nixos-system-sankyuu-nixos-25.05.20250424.f771eb4.drv^*", ], - m.Remote("user@localhost", opts=[], sudo_password=None, store_type="ssh"), + m.Remote("user@localhost", opts=[], store_type="ssh"), ) mock_run.assert_called_with( [ @@ -203,21 +203,18 @@ def test__kill_long_running_ssh_process(mock_run: Any) -> None: def test_remote_from_name(monkeypatch: MonkeyPatch) -> None: monkeypatch.setenv("NIX_SSHOPTS", "") - assert m.Remote.from_arg("user@localhost", None, False) == m.Remote( + assert m.Remote.from_arg("user@localhost", validate_opts=False) == m.Remote( "user@localhost", opts=[], - sudo_password=None, store_type="ssh", ) - with patch("getpass.getpass", autospec=True, return_value="password"): - monkeypatch.setenv("NIX_SSHOPTS", "-f foo -b bar -t") - assert m.Remote.from_arg("user@localhost", True, True) == m.Remote( - "user@localhost", - opts=["-f", "foo", "-b", "bar", "-t"], - sudo_password="password", - store_type="ssh", - ) + monkeypatch.setenv("NIX_SSHOPTS", "-f foo -b bar -t") + assert m.Remote.from_arg("user@localhost") == m.Remote( + "user@localhost", + opts=["-f", "foo", "-b", "bar", "-t"], + store_type="ssh", + ) def test_ssh_host() -> None: @@ -239,13 +236,13 @@ def test_ssh_host() -> None: } for host_input, expected in ssh_remotes.items(): - remote = m.Remote.from_arg(host_input, None, False) + remote = m.Remote.from_arg(host_input, validate_opts=False) assert remote is not None assert remote.ssh_host() == expected assert remote.store_type == "ssh" for host_input, expected in ssh_ng_remotes.items(): - remote = m.Remote.from_arg(host_input, None, False) + remote = m.Remote.from_arg(host_input, validate_opts=False) assert remote is not None assert remote.ssh_host() == expected assert remote.store_type == "ssh-ng" @@ -287,7 +284,7 @@ def test_custom_sudo_args(mock_run: Any) -> None: ["test"], check=False, elevate=e.SudoElevator(), - remote=m.Remote("user@localhost", [], None, "ssh"), + remote=m.Remote("user@localhost", [], "ssh"), ) mock_run.assert_called_with( [ From 4d4952ae28c707aeb66c7def830fd1dd60669510 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:34:20 +0200 Subject: [PATCH 031/149] polkit-stdin-agent: init at 0.3.0 A non-interactive polkit authentication agent that answers PAM prompts from a file descriptor. Provides the missing `sudo --stdin` equivalent for run0/systemd-run, which authorise via polkit and otherwise require a controlling terminal for pkttyagent. Used by the upcoming `nixos-rebuild --elevate=run0 --ask-elevate-password`. The machine performing the elevation enables system.tools.nixos-rebuild.enableRun0Elevation (added in the next commit), which puts this package on PATH locally and at /sw/bin on a remote target. --- .../by-name/po/polkit-stdin-agent/package.nix | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pkgs/by-name/po/polkit-stdin-agent/package.nix diff --git a/pkgs/by-name/po/polkit-stdin-agent/package.nix b/pkgs/by-name/po/polkit-stdin-agent/package.nix new file mode 100644 index 000000000000..7377d1727ca6 --- /dev/null +++ b/pkgs/by-name/po/polkit-stdin-agent/package.nix @@ -0,0 +1,48 @@ +{ + lib, + rustPlatform, + fetchFromGitea, + nix-update-script, + nixosTests, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "polkit-stdin-agent"; + version = "0.3.0"; + + src = fetchFromGitea { + domain = "codeberg.org"; + owner = "r-vdp"; + repo = "polkit-stdin-agent"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Nl/+IBbUEsxSKSWLXwUB3mV4iAG0z9mv+Bl6CSeFzR4="; + }; + + cargoHash = "sha256-Eb/7ejVmtG5FNSh66gZO3337KCPNi+xtYVC5qyFKJzg="; + + strictDeps = true; + __structuredAttrs = true; + + passthru = { + updateScript = nix-update-script { }; + tests = { inherit (nixosTests) nixos-rebuild-target-host; }; + }; + + meta = { + description = "Non-interactive polkit authentication agent that answers PAM prompts from a file descriptor"; + longDescription = '' + Registers a per-process polkit authentication agent for a wrapped + command and answers the PAM conversation from a file descriptor + instead of /dev/tty, giving run0 / systemd-run the same + "password on stdin" ergonomics as `sudo --stdin`. + + Used by `nixos-rebuild --elevate=run0 --ask-elevate-password` to + authenticate on a target host over SSH without allocating a TTY. + ''; + homepage = "https://codeberg.org/r-vdp/polkit-stdin-agent"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ rvdp ]; + platforms = lib.platforms.linux; + mainProgram = "polkit-stdin-agent"; + }; +}) From c30b2c06d953e6f986162c5809d864eae52e61b5 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:32:13 +0200 Subject: [PATCH 032/149] nixos-rebuild-ng: add --elevate=run0 Locally this just prefixes activation commands with `run0 --`, so the user's normal polkit agent (graphical or pkttyagent) handles auth. For --target-host, run0 would need a controlling terminal, which we deliberately do not allocate over SSH. Instead the equivalent `systemd-run --uid=0 --pipe --wait ...` form is used. Without --ask-elevate-password this relies on a polkit rule on the target granting the deploying user `org.freedesktop.systemd1.manage-units`. With --ask-elevate-password the command is wrapped in polkit-stdin-agent, which registers a per-process polkit agent for the child and answers the PAM conversation from stdin. A transient unit does not inherit the SSH login environment. On NixOS the unit's PATH is just the systemd store path, so neither `env` nor `nix-env` would be found inside it. Elevator.wrap_remote() therefore now takes the env mapping and the command, and returns the full remote argv: sudo keeps the existing `/bin/sh -c 'exec /usr/bin/env -i ...'` wrapper inside itself, while run0 puts the shell wrapper *around* systemd-run and forwards the resolved values into the unit via --setenv. The Arg/Args/EnvValue/PRESERVE_ENV types and the env-shell helper move from process.py into elevate.py to avoid a circular import, and callers are updated to import them from there. polkit-stdin-agent is resolved on the machine doing the elevation rather than baked in as a host-arch store path, which would be wrong for --no-reexec, cross-arch deploys (re-exec hits ENOEXEC and falls back), --rollback/--store-path, and Darwin deployers. Locally that is PATH. Remotely, Elevator.for_target_config() binds the elevator to the toplevel just placed on the target, and a small /bin/sh picker tries /sw/bin/polkit-stdin-agent (target-arch, in the copied closure) then PATH, exiting with an actionable error pointing at system.tools.nixos-rebuild.enableRun0Elevation when neither resolves. That option (added here) puts the agent in environment.systemPackages and asserts security.polkit.enable. A nixos-rebuild-target-host subtest exercises the full remote run0 path (polkit-stdin-agent + systemd-run + activation) end-to-end. Drop the now-unused stdenv argument from package.nix while here. Closes #507054. --- nixos/modules/installer/tools/tools.nix | 21 ++ nixos/tests/nixos-rebuild-target-host.nix | 22 ++ pkgs/by-name/ni/nixos-rebuild-ng/package.nix | 1 - .../src/nixos_rebuild/elevate.py | 248 ++++++++++++++++-- .../nixos-rebuild-ng/src/nixos_rebuild/nix.py | 4 +- .../src/nixos_rebuild/process.py | 63 +---- .../src/nixos_rebuild/services.py | 10 + .../src/tests/test_elevate.py | 103 +++++++- .../nixos-rebuild-ng/src/tests/test_main.py | 35 +-- .../ni/nixos-rebuild-ng/src/tests/test_nix.py | 16 +- .../src/tests/test_process.py | 131 +++++++-- 11 files changed, 533 insertions(+), 121 deletions(-) diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 086d8971d466..e7f48a3243ea 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -314,6 +314,27 @@ in name = "nixos-rebuild"; package = config.system.build.nixos-rebuild; }) + ( + { config, ... }: + { + options.system.tools.nixos-rebuild.enableRun0Elevation = lib.mkEnableOption '' + support for being targeted by `nixos-rebuild --elevate=run0 + --ask-elevate-password`. + + This enables polkit and adds {command}`polkit-stdin-agent` to + {option}`environment.systemPackages` so that a deploying host + can find a target-architecture agent at + {file}`/sw/bin/polkit-stdin-agent` after copying the + closure (which is required for cross-architecture deploys and + mismatched nixpkgs revisions to work). + ''; + + config = lib.mkIf config.system.tools.nixos-rebuild.enableRun0Elevation { + security.polkit.enable = lib.mkDefault true; + environment.systemPackages = [ pkgs.polkit-stdin-agent ]; + }; + } + ) (mkToolModule { name = "nixos-version"; package = nixos-version; diff --git a/nixos/tests/nixos-rebuild-target-host.nix b/nixos/tests/nixos-rebuild-target-host.nix index c37c4ce2ee76..ae872a205a0e 100644 --- a/nixos/tests/nixos-rebuild-target-host.nix +++ b/nixos/tests/nixos-rebuild-target-host.nix @@ -22,6 +22,8 @@ }; system.includeBuildDependencies = true; + # Needed so the offline build of the target config succeeds. + system.extraDependencies = [ pkgs.polkit-stdin-agent ]; virtualisation = { cores = 2; @@ -49,6 +51,11 @@ users.users.alice.extraGroups = [ "wheel" ]; users.users.bob.extraGroups = [ "wheel" ]; + # Needed for --elevate=run0. NixOS's default polkit admin rule is + # `unix-group:wheel`, so bob (in wheel) can authenticate with his + # own password via polkit-stdin-agent. + system.tools.nixos-rebuild.enableRun0Elevation = true; + # Disable sudo for root to ensure sudo isn't called without `--sudo` security.sudo.extraRules = lib.mkForce [ { @@ -142,6 +149,7 @@ deployer.copy_from_host("${configFile "config-1-deployed"}", "/root/configuration-1.nix") deployer.copy_from_host("${configFile "config-2-deployed"}", "/root/configuration-2.nix") deployer.copy_from_host("${configFile "config-3-deployed"}", "/root/configuration-3.nix") + deployer.copy_from_host("${configFile "config-4-deployed"}", "/root/configuration-4.nix") deployer.copy_from_host("${targetNetworkJSON}", "/root/target-network.json") deployer.copy_from_host("${targetConfigJSON}", "/root/target-configuration.json") @@ -168,6 +176,20 @@ target_hostname = deployer.succeed("ssh alice@target cat /etc/hostname").rstrip() assert target_hostname == "config-3-deployed", f"{target_hostname=}" + with subtest("Deploy to bob@target with run0 and password"): + # polkit-stdin-agent registers an agent for systemd-run on the + # target and answers the PAM conversation with the password we + # supply locally. The agent is resolved on the target from + # /sw/bin (see Run0Elevator._remote_agent_argv). + deployer.send_chars("nixos-rebuild switch -I nixos-config=/root/configuration-4.nix --target-host bob@target --elevate=run0 --ask-elevate-password\n") + deployer.wait_until_tty_matches("1", "\\[run0\\] password for bob@target") + deployer.send_chars("${nodes.target.users.users.bob.password}\n") + deployer.wait_until_tty_matches("1", "Done. The new configuration is /nix/store/.*config-4-deployed") + target_hostname = deployer.succeed("ssh alice@target cat /etc/hostname").rstrip() + assert target_hostname == "config-4-deployed", f"{target_hostname=}" + # The target-arch agent is reachable at the stable sw/bin path. + target.succeed("test -x /run/current-system/sw/bin/polkit-stdin-agent") + with subtest("Deploy works with very long TMPDIR"): tmp_dir = "/var/folder/veryveryveryveryverylongpathnamethatdoesnotworkwithcontrolpath" deployer.succeed(f"mkdir -p {tmp_dir}") diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/package.nix b/pkgs/by-name/ni/nixos-rebuild-ng/package.nix index 136962b1b7a9..8112f3d867f8 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/package.nix +++ b/pkgs/by-name/ni/nixos-rebuild-ng/package.nix @@ -1,6 +1,5 @@ { lib, - stdenv, callPackage, installShellFiles, mkShell, diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py index be9e35fce613..c69eb097445d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/elevate.py @@ -6,6 +6,12 @@ controlling terminal is available), and how to feed it a pre-supplied password when the backend supports that. ``run_wrapper`` and its callers carry a single ``elevate: Elevator`` value and let it produce the command prefix and stdin. + +The remote case has no controlling terminal and the elevated command's +environment depends on the backend (``sudo`` inherits the SSH login env, +while the run0 backend starts a transient unit with only systemd's +default ``PATH``), so each backend builds the full remote argv itself +via :meth:`Elevator.wrap_remote`. """ from __future__ import annotations @@ -14,24 +20,82 @@ import getpass import os import shlex from abc import ABC, abstractmethod +from collections.abc import Mapping, Sequence from dataclasses import dataclass, field, replace from enum import Enum -from typing import Final, Self, override +from pathlib import Path, PurePosixPath +from typing import ClassVar, Final, Literal, Self, override + +# Kept here (rather than in process.py) so that elevators can build remote +# argvs without a circular import. +type Arg = str | bytes | os.PathLike[str] | os.PathLike[bytes] +type Args = Sequence[Arg] + + +class _Env(Enum): + PRESERVE_ENV = "PRESERVE" + + @override + def __repr__(self) -> str: + return self.value + + +#: Sentinel meaning "copy this variable from the environment the wrapped +#: command would naturally see" (``os.environ`` locally, the SSH login +#: shell's environment remotely). +PRESERVE_ENV: Final = _Env.PRESERVE_ENV + +type EnvValue = str | Literal[_Env.PRESERVE_ENV] + + +def _remote_env_shell_argv( + prefix: Sequence[str], + env: Mapping[str, EnvValue], + args: Args, +) -> list[Arg]: + """Build `` /bin/sh -c 'exec /usr/bin/env -i K=V… "$@"' sh ``. + + The wrapper runs in the SSH login session, resolves ``PRESERVE_ENV`` + variables against that session's environment, and re-execs the command + with exactly that set. ``/usr/bin/env`` is referenced by absolute path so + the wrapper does not depend on ``PATH`` itself (provided on NixOS via + ``environment.usrbinenv``). + """ + assigns: list[str] = [] + for k, v in env.items(): + if v is PRESERVE_ENV: + assigns.append(f'{k}="${{{k}-}}"') + else: + assigns.append(f"{k}={shlex.quote(v)}") + script = f'exec /usr/bin/env -i {" ".join(assigns)} "$@"' + return [*prefix, "/bin/sh", "-c", script, "sh", *args] @dataclass(frozen=True) class Wrapped: - """Result of wrapping a command for elevation.""" + """Result of wrapping a command for local elevation.""" - #: Arguments to prepend to the command. Kept as ``list[str]`` rather than - #: the wider ``process.Args`` because elevators only ever prepend plain - #: strings; callers splice this into their existing ``Args`` list. + #: Arguments to prepend to the command. prefix: list[str] #: Text to send on the wrapped command's stdin (typically a password #: followed by a newline), or ``None`` to leave stdin alone. stdin: str | None = None +@dataclass(frozen=True) +class RemoteWrapped: + """Result of wrapping a command for remote elevation over SSH. + + Unlike :class:`Wrapped` this carries the *full* remote argv: backends + differ in where the env-resolution shell wrapper must sit relative to + the elevator (inside ``sudo``, but *around* ``systemd-run``), so a + plain prefix is not expressive enough. + """ + + argv: list[Arg] + stdin: str | None = None + + class Elevator(ABC): """How to gain root for activation commands.""" @@ -54,13 +118,18 @@ class Elevator(ABC): """Wrap a command run on the local machine.""" @abstractmethod - def wrap_remote(self) -> Wrapped: + def wrap_remote(self, env: Mapping[str, EnvValue], args: Args) -> RemoteWrapped: """Wrap a command run on a target host over SSH. The remote side has no controlling terminal, so backends that need interactive prompts must either accept a pre-supplied password (see :meth:`with_password`) or rely on a passwordless policy on the target. + + *env* is the environment to establish for the elevated command. + :data:`PRESERVE_ENV` values are resolved against the SSH login + shell's environment, and the backend must do so before any step + that replaces it with a service-style one. """ @abstractmethod @@ -83,6 +152,17 @@ class Elevator(ABC): password = getpass.getpass(f"[{self.name}] password for {host_label}: ") return self.with_password(password) + def for_target_config(self, toplevel: PurePosixPath | Path) -> Self: + """Return a copy bound to the toplevel being activated on the target. + + Backends that need a helper binary on the remote + (:class:`Run0Elevator`'s ``polkit-stdin-agent``) use this to find + a target-architecture copy inside the just-copied closure. No-op + by default. + """ + del toplevel # unused in the base implementation + return self + def on_remote_failure(self) -> str | None: """Optional hint to print when a remote elevated command fails.""" return None @@ -106,8 +186,8 @@ class NoElevator(Elevator): return Wrapped(prefix=[]) @override - def wrap_remote(self) -> Wrapped: - return Wrapped(prefix=[]) + def wrap_remote(self, env: Mapping[str, EnvValue], args: Args) -> RemoteWrapped: + return RemoteWrapped(argv=_remote_env_shell_argv([], env, args)) @override def with_password(self, password: str) -> Self: @@ -134,13 +214,6 @@ class SudoElevator(Elevator): def wrap_local(self) -> Wrapped: # Local sudo can prompt on /dev/tty itself, so the password is # only piped when one was supplied explicitly. - return self._wrap() - - @override - def wrap_remote(self) -> Wrapped: - return self._wrap() - - def _wrap(self) -> Wrapped: if self.password is not None: return Wrapped( prefix=["sudo", "--prompt=", "--stdin", *self.extra_opts], @@ -148,6 +221,21 @@ class SudoElevator(Elevator): ) return Wrapped(prefix=["sudo", *self.extra_opts]) + @override + def wrap_remote(self, env: Mapping[str, EnvValue], args: Args) -> RemoteWrapped: + # sudo runs inside the SSH login session, so the env wrapper can + # sit *inside* it and ${VAR-} resolves against the login env. + if self.password is not None: + prefix = ["sudo", "--prompt=", "--stdin", *self.extra_opts] + stdin = self.password + "\n" + else: + prefix = ["sudo", *self.extra_opts] + stdin = None + return RemoteWrapped( + argv=_remote_env_shell_argv(prefix, env, args), + stdin=stdin, + ) + @override def with_password(self, password: str) -> Self: return replace(self, password=password) @@ -162,16 +250,144 @@ class SudoElevator(Elevator): return None +@dataclass(frozen=True) +class Run0Elevator(Elevator): + """Wrap with systemd's polkit-based ``run0``. + + Locally, ``run0`` is used directly and the user's polkit agent + (graphical or ``pkttyagent``) handles any prompts. + + Remotely we spell out the explicit ``systemd-run --uid=0 --pipe`` + form instead. ``run0`` would internally do the same thing when stdio + is not a TTY (see systemd ``src/run/run.c``), but going through + ``systemd-run`` directly gives us ``--setenv K=V``, which we need to + forward the SSH login environment into the transient unit (whose own + ``PATH`` on NixOS is just the systemd store path), and keeps the + argv independent of whether the SSH session happens to have a TTY. + + Authorisation comes from either a polkit rule on the target granting + ``org.freedesktop.systemd1.manage-units`` to the deploying user, or + from ``polkit-stdin-agent`` for ``--ask-elevate-password``. + """ + + name: str = "run0" + password: str | None = None + #: ``${toplevel}/sw/bin/polkit-stdin-agent`` on the target, set via + #: :meth:`for_target_config`. ``None`` falls back to the target's ``PATH``. + remote_agent: str | None = None + + #: Non-interactive equivalent of ``run0`` (see the class docstring). + REMOTE_BASE: ClassVar[tuple[str, ...]] = ( + "systemd-run", + "--uid=0", + "--pipe", + "--quiet", + "--wait", + "--collect", + "--service-type=exec", + "--send-sighup", + ) + + @override + def wrap_local(self) -> Wrapped: + if self.password is not None: + # Resolved from PATH, same requirement as the remote case: the + # machine doing the elevation needs + # system.tools.nixos-rebuild.enableRun0Elevation. + return Wrapped( + prefix=["polkit-stdin-agent", "--password-fd=0", "--", "run0", "--"], + stdin=self.password + "\n", + ) + return Wrapped(prefix=["run0", "--"]) + + @override + def wrap_remote(self, env: Mapping[str, EnvValue], args: Args) -> RemoteWrapped: + # /bin/sh wrapper resolves PRESERVE_ENV in the SSH login session + # and forwards the result into the unit via --setenv. + setenvs: list[str] = [] + for k, v in env.items(): + if v is PRESERVE_ENV: + setenvs.append(f'--setenv={k}="${{{k}-}}"') + else: + setenvs.append(f"--setenv={shlex.quote(f'{k}={v}')}") + script = f'exec {shlex.join(self.REMOTE_BASE)} {" ".join(setenvs)} -- "$@"' + argv: list[Arg] = ["/bin/sh", "-c", script, "sh", *args] + if self.password is not None: + # polkit has no `sudo --stdin` equivalent. polkit-stdin-agent + # registers a per-process agent for the wrapped command and + # answers the PAM conversation from its stdin. + argv = self._remote_agent_argv(argv) + return RemoteWrapped(argv=argv, stdin=self.password + "\n") + return RemoteWrapped(argv=argv) + + #: POSIX sh fragment that picks the first runnable agent from the + #: positional parameters up to ``--`` and execs it with the remainder. + #: ``command -v`` covers both absolute paths and ``PATH`` lookups. + _AGENT_PICKER: ClassVar[str] = ( + "agent=; " + "for a; do " + "shift; " + '[ "$a" = -- ] && break; ' + '[ -z "$agent" ] && command -v "$a" >/dev/null 2>&1 && agent="$a"; ' + "done; " + '[ -n "$agent" ] && exec "$agent" --password-fd=0 -- "$@"; ' + 'echo "nixos-rebuild: polkit-stdin-agent not found on target host ' + '(set system.tools.nixos-rebuild.enableRun0Elevation = true)" >&2; ' + "exit 127" + ) + + def _remote_agent_argv(self, inner: list[Arg]) -> list[Arg]: + """Wrap *inner* in a target-side agent lookup. + + The deployer's own agent may be the wrong arch/nixpkgs (cross-arch + deploys, Darwin deployers, ``--no-reexec``), so resolve on the + target instead: first ``${toplevel}/sw/bin/polkit-stdin-agent`` + (present when ``system.tools.nixos-rebuild.enableRun0Elevation`` + is set), then bare ``polkit-stdin-agent`` on the SSH login PATH. + :data:`_AGENT_PICKER` exits 127 with a hint if neither is found. + """ + candidates: list[str] = [] + if self.remote_agent is not None: + candidates.append(self.remote_agent) + candidates.append("polkit-stdin-agent") + return ["/bin/sh", "-c", self._AGENT_PICKER, "sh", *candidates, "--", *inner] + + @override + def with_password(self, password: str) -> Self: + return replace(self, password=password) + + @override + def for_target_config(self, toplevel: PurePosixPath | Path) -> Self: + return replace( + self, remote_agent=str(toplevel / "sw" / "bin" / "polkit-stdin-agent") + ) + + @override + def on_remote_failure(self) -> str | None: + if self.password is None: + return ( + "while running command with remote run0. Either pass " + "--ask-elevate-password, or grant the deploying user the " + "polkit action 'org.freedesktop.systemd1.manage-units' on " + "the target host (security.polkit.extraConfig)." + ) + return ( + "while running command with remote run0. If the error above " + "mentions polkit-stdin-agent or PolicyKit1, the target host " + "needs system.tools.nixos-rebuild.enableRun0Elevation = true." + ) + + class ElevatorKind(Enum): """CLI-selectable elevation backends. The enum *value* is the :class:`Elevator` subclass to instantiate, ``str(member)`` is what ``--elevate`` accepts on the command line. - Extended by later commits. """ NONE = NoElevator SUDO = SudoElevator + RUN0 = Run0Elevator @override def __str__(self) -> str: diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py index 38894b734133..c9d79868f8f4 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py @@ -14,7 +14,7 @@ from textwrap import dedent from typing import Final, Literal from . import tmpdir -from .elevate import NO_ELEVATOR, Elevator +from .elevate import NO_ELEVATOR, PRESERVE_ENV, Elevator from .models import ( Action, BuildAttr, @@ -26,7 +26,7 @@ from .models import ( Profile, Remote, ) -from .process import PRESERVE_ENV, SSH_DEFAULT_OPTS, run_wrapper +from .process import SSH_DEFAULT_OPTS, run_wrapper from .utils import Args, dict_to_flags FLAKE_FLAGS: Final = ["--extra-experimental-features", "nix-command flakes"] diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index bad599b36643..61408ab8aaf5 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -4,14 +4,20 @@ import os import re import shlex import subprocess -from collections.abc import Mapping, Sequence +from collections.abc import Mapping from dataclasses import dataclass -from enum import Enum from ipaddress import AddressValueError, IPv6Address -from typing import Final, Literal, Self, TextIO, TypedDict, Unpack, override +from typing import Final, Self, TextIO, TypedDict, Unpack from . import tmpdir -from .elevate import NO_ELEVATOR, Elevator +from .elevate import ( + NO_ELEVATOR, + PRESERVE_ENV, + Arg, + Args, + Elevator, + EnvValue, +) logger: Final = logging.getLogger(__name__) @@ -25,22 +31,6 @@ SSH_DEFAULT_OPTS: Final = [ ] -class _Env(Enum): - PRESERVE_ENV = "PRESERVE" - - @override - def __repr__(self) -> str: - return self.value - - -PRESERVE_ENV: Final = _Env.PRESERVE_ENV - - -type Arg = str | bytes | os.PathLike[str] | os.PathLike[bytes] -type Args = Sequence[Arg] -type EnvValue = str | Literal[_Env.PRESERVE_ENV] - - @dataclass(frozen=True) class Remote: host: str @@ -136,16 +126,9 @@ def run_wrapper( resolved_env = _resolve_env_local(normalized_env) if remote: - wrapped = elevate.wrap_remote() - process_input = wrapped.stdin - remote_run_args: list[Arg] = [ - *wrapped.prefix, - "/bin/sh", - "-c", - _remote_shell_script(normalized_env), - "sh", - *run_args, - ] + rwrapped = elevate.wrap_remote(normalized_env, run_args) + process_input = rwrapped.stdin + remote_run_args: list[Arg] = rwrapped.argv ssh_args: list[Arg] = [ "ssh", @@ -246,7 +229,7 @@ def _resolve_env_local(env: dict[str, EnvValue]) -> dict[str, str]: return result -def _prefix_env_cmd(cmd: Sequence[Arg], resolved_env: dict[str, str]) -> list[Arg]: +def _prefix_env_cmd(cmd: Args, resolved_env: dict[str, str]) -> list[Arg]: """ Prefix a command with `env -i K=V ... -- ` to set vars for the command. @@ -258,24 +241,6 @@ def _prefix_env_cmd(cmd: Sequence[Arg], resolved_env: dict[str, str]) -> list[Ar return ["env", "-i", *assigns, *cmd] -def _remote_shell_script(env: Mapping[str, EnvValue]) -> str: - """ - Build the POSIX shell wrapper used for remote execution over SSH. - - SSH sends the remote command as a shell-interpreted command line, so we - need a wrapper to establish a clean environment before `exec`-ing the real - command. This wrapper is always run under `/bin/sh -c` so preserved - variables like `${PATH-}` do not depend on the remote user's login shell. - """ - shell_assigns: list[str] = [] - for k, v in env.items(): - if v is PRESERVE_ENV: - shell_assigns.append(f'{k}="${{{k}-}}"') - else: - shell_assigns.append(f"{k}={shlex.quote(v)}") - return f'exec env -i {" ".join(shell_assigns)} "$@"' - - def _quote_remote_arg(arg: Arg) -> str: return shlex.quote(str(arg)) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py index 96d9d16e76f2..9994941ebb4d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py @@ -298,6 +298,11 @@ def build_and_activate_system( copy_flags=grouped_nix_args.copy_flags, ) elif args.rollback: + if target_host is not None: + # The elevated `nix-env --rollback` runs before path_to_config + # is known, so point the elevator at the profile to find a + # target-arch helper in the *current* generation's sw/bin. + args.elevator = args.elevator.for_target_config(profile.path) path_to_config = _rollback_system( action=action, args=args, @@ -315,6 +320,11 @@ def build_and_activate_system( grouped_nix_args=grouped_nix_args, ) + if target_host is not None and not args.rollback: + # Prefer the helper from the toplevel we just copied to the + # target (correct arch, independent of re-exec / nixpkgs pin). + args.elevator = args.elevator.for_target_config(path_to_config) + current_config = Path("/run/current-system") if args.diff: if current_config.exists(): diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py index 6d6231408adb..25a1c3260cda 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_elevate.py @@ -1,3 +1,5 @@ +from pathlib import PurePosixPath + import pytest from pytest import MonkeyPatch @@ -8,7 +10,10 @@ def test_no_elevator() -> None: n = e.NoElevator() assert not n.elevates assert n.wrap_local() == e.Wrapped(prefix=[]) - assert n.wrap_remote() == e.Wrapped(prefix=[]) + rw = n.wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + assert rw.stdin is None + assert rw.argv[:2] == ["/bin/sh", "-c"] + assert rw.argv[-1] == "cmd" with pytest.raises(e.ElevateError): n.with_password("x") @@ -19,14 +24,16 @@ def test_sudo_elevator(monkeypatch: MonkeyPatch) -> None: s = e.SudoElevator() assert s.elevates assert s.wrap_local() == e.Wrapped(prefix=["sudo"]) - assert s.wrap_remote() == e.Wrapped(prefix=["sudo"]) + rw = s.wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + assert rw.argv[0] == "sudo" + assert rw.argv[1:3] == ["/bin/sh", "-c"] + assert rw.stdin is None assert s.on_remote_failure() is not None sp = s.with_password("hunter2") - assert sp.wrap_remote() == e.Wrapped( - prefix=["sudo", "--prompt=", "--stdin"], - stdin="hunter2\n", - ) + rw = sp.wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + assert rw.argv[:3] == ["sudo", "--prompt=", "--stdin"] + assert rw.stdin == "hunter2\n" assert sp.on_remote_failure() is None # original unchanged assert s.password is None @@ -36,18 +43,94 @@ def test_sudo_elevator_extra_opts(monkeypatch: MonkeyPatch) -> None: monkeypatch.setenv("NIX_SUDOOPTS", "--preserve-env=FOO -H") s = e.SudoElevator() assert s.wrap_local() == e.Wrapped(prefix=["sudo", "--preserve-env=FOO", "-H"]) - assert s.with_password("p").wrap_remote() == e.Wrapped( - prefix=["sudo", "--prompt=", "--stdin", "--preserve-env=FOO", "-H"], - stdin="p\n", + rw = s.with_password("p").wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + assert rw.argv[:5] == ["sudo", "--prompt=", "--stdin", "--preserve-env=FOO", "-H"] + assert rw.stdin == "p\n" + + +def test_run0_elevator() -> None: + r = e.Run0Elevator() + assert r.elevates + assert r.wrap_local() == e.Wrapped(prefix=["run0", "--"]) + assert r.on_remote_failure() is not None + + rp = r.with_password("hunter2") + w = rp.wrap_local() + assert w.prefix[0] == "polkit-stdin-agent" + assert "run0" in w.prefix + assert w.stdin == "hunter2\n" + # With a password the failure hint points at the agent, not at -S. + hint = rp.on_remote_failure() + assert hint is not None and "polkit-stdin-agent" in hint + + +def test_run0_elevator_remote() -> None: + r = e.Run0Elevator() + + # No password: /bin/sh wrapper around systemd-run, env passed via + # --setenv so it is resolved in the SSH login shell rather than + # inside the transient unit (which has a useless PATH on NixOS). + rw = r.wrap_remote( + {"PATH": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "1"}, + ["nix-env", "-p", "/profile"], ) + assert rw.stdin is None + assert rw.argv[:2] == ["/bin/sh", "-c"] + script = rw.argv[2] + assert isinstance(script, str) + assert script.startswith("exec systemd-run --uid=0 --pipe ") + assert '--setenv=PATH="${PATH-}"' in script + assert "--setenv=NIXOS_INSTALL_BOOTLOADER=1" in script + assert script.endswith(' -- "$@"') + assert rw.argv[3:] == ["sh", "nix-env", "-p", "/profile"] + + # With password: an agent-picker /bin/sh wraps the inner /bin/sh, so + # the agent is registered for the inner shell (and the systemd-run it + # execs into). With no toplevel bound the only candidate is bare-name + # PATH lookup. + rw = r.with_password("pw").wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + assert rw.stdin == "pw\n" + assert rw.argv[:3] == ["/bin/sh", "-c", e.Run0Elevator._AGENT_PICKER] + sep = rw.argv.index("--") + assert rw.argv[3:sep] == ["sh", "polkit-stdin-agent"] + assert rw.argv[sep + 1 : sep + 3] == ["/bin/sh", "-c"] + + # Explicit values containing spaces are shell-quoted inside the + # script (the whole thing is later shlex.quoted again for SSH). + rw = r.wrap_remote({"FOO": "a b"}, ["cmd"]) + script = rw.argv[2] + assert isinstance(script, str) + assert "--setenv='FOO=a b'" in script + + +def test_run0_for_target_config() -> None: + toplevel = PurePosixPath("/nix/store/aaaa-nixos-system") + r = e.Run0Elevator().with_password("pw").for_target_config(toplevel) + assert r.remote_agent == f"{toplevel}/sw/bin/polkit-stdin-agent" + + rw = r.wrap_remote({"PATH": e.PRESERVE_ENV}, ["cmd"]) + sep = rw.argv.index("--") + # Order matters: target-arch toplevel first, then PATH. + assert rw.argv[4:sep] == [ + f"{toplevel}/sw/bin/polkit-stdin-agent", + "polkit-stdin-agent", + ] + # Inner argv is preserved verbatim after the separator. + assert rw.argv[sep + 1 : sep + 3] == ["/bin/sh", "-c"] + assert rw.argv[-1] == "cmd" + + # Non-run0 elevators ignore the toplevel. + s = e.SudoElevator() + assert s.for_target_config(toplevel) is s def test_elevator_kind() -> None: assert isinstance(e.ElevatorKind.from_name("sudo"), e.SudoElevator) + assert isinstance(e.ElevatorKind.from_name("run0"), e.Run0Elevator) assert isinstance(e.ElevatorKind.from_name("none"), e.NoElevator) with pytest.raises(e.ElevateError): e.ElevatorKind.from_name("doas") - assert set(e.ElevatorKind.choices()) == {"none", "sudo"} + assert set(e.ElevatorKind.choices()) == {"none", "sudo", "run0"} def test_with_prompted_password(monkeypatch: MonkeyPatch) -> None: diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py index 27335feeae5d..1e0e5779ac90 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py @@ -28,6 +28,9 @@ def test_parse_args_elevate() -> None: r, _ = nr.parse_args(["nixos-rebuild", "switch", "--elevate=sudo"]) assert isinstance(r.elevator, nr.elevate.SudoElevator) + r, _ = nr.parse_args(["nixos-rebuild", "switch", "--elevate=run0"]) + assert isinstance(r.elevator, nr.elevate.Run0Elevator) + # back-compat aliases for flag in ("--sudo", "--use-remote-sudo"): r, _ = nr.parse_args(["nixos-rebuild", "switch", flag]) @@ -691,7 +694,7 @@ def test_execute_nix_switch_build_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "mktemp", "-d", @@ -710,7 +713,7 @@ def test_execute_nix_switch_build_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix-store", "--realise", @@ -730,7 +733,7 @@ def test_execute_nix_switch_build_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "readlink", "-f", @@ -748,7 +751,7 @@ def test_execute_nix_switch_build_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "rm", "-rf", @@ -781,7 +784,7 @@ def test_execute_nix_switch_build_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix-env", "-p", @@ -800,7 +803,7 @@ def test_execute_nix_switch_build_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", "-d", @@ -818,7 +821,7 @@ def test_execute_nix_switch_build_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", "sh", *nr.nix.SWITCH_TO_CONFIGURATION_CMD_PREFIX, str(config_path / "bin/switch-to-configuration"), @@ -907,7 +910,7 @@ def test_execute_nix_switch_flake_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix-env", "-p", @@ -926,7 +929,7 @@ def test_execute_nix_switch_flake_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", "-d", @@ -944,7 +947,7 @@ def test_execute_nix_switch_flake_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", "sh", *nr.nix.SWITCH_TO_CONFIGURATION_CMD_PREFIX, str(config_path / "bin/switch-to-configuration"), @@ -1032,7 +1035,7 @@ def test_execute_nix_switch_flake_build_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix", "--extra-experimental-features", @@ -1271,7 +1274,7 @@ def test_execute_build_dry_run_build_and_target_remote( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix", "--extra-experimental-features", @@ -1526,7 +1529,7 @@ def test_execute_switch_store_path_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", "-f", @@ -1544,7 +1547,7 @@ def test_execute_switch_store_path_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "nix-env", "-p", @@ -1563,7 +1566,7 @@ def test_execute_switch_store_path_target_host( "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", "-d", @@ -1581,7 +1584,7 @@ def test_execute_switch_store_path_target_host( "sudo", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"'""", "sh", *nr.nix.SWITCH_TO_CONFIGURATION_CMD_PREFIX, str(config_path / "bin/switch-to-configuration"), diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index 3d5a5093230b..8100f396cdb7 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -767,8 +767,8 @@ def test_switch_to_configuration_without_systemd_run( mock_run.assert_called_with( [profile_path / "bin/switch-to-configuration", "switch"], env={ - "LOCALE_ARCHIVE": p.PRESERVE_ENV, - "NIXOS_NO_CHECK": p.PRESERVE_ENV, + "LOCALE_ARCHIVE": e.PRESERVE_ENV, + "NIXOS_NO_CHECK": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "0", }, elevate=e.NO_ELEVATOR, @@ -809,8 +809,8 @@ def test_switch_to_configuration_without_systemd_run( "test", ], env={ - "LOCALE_ARCHIVE": p.PRESERVE_ENV, - "NIXOS_NO_CHECK": p.PRESERVE_ENV, + "LOCALE_ARCHIVE": e.PRESERVE_ENV, + "NIXOS_NO_CHECK": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "1", }, elevate=SUDO, @@ -845,8 +845,8 @@ def test_switch_to_configuration_with_systemd_run( "switch", ], env={ - "LOCALE_ARCHIVE": p.PRESERVE_ENV, - "NIXOS_NO_CHECK": p.PRESERVE_ENV, + "LOCALE_ARCHIVE": e.PRESERVE_ENV, + "NIXOS_NO_CHECK": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "0", }, elevate=e.NO_ELEVATOR, @@ -875,8 +875,8 @@ def test_switch_to_configuration_with_systemd_run( "test", ], env={ - "LOCALE_ARCHIVE": p.PRESERVE_ENV, - "NIXOS_NO_CHECK": p.PRESERVE_ENV, + "LOCALE_ARCHIVE": e.PRESERVE_ENV, + "NIXOS_NO_CHECK": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "1", }, elevate=SUDO, diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py index 4d6421146a8d..2abdd26ebe07 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_process.py @@ -8,24 +8,41 @@ import nixos_rebuild.models as m import nixos_rebuild.process as p -def test_remote_shell_script() -> None: - assert p._remote_shell_script({"PATH": p.PRESERVE_ENV}) == ( - '''exec env -i PATH="${PATH-}" "$@"''' - ) - assert p._remote_shell_script( +def test_remote_env_shell_argv() -> None: + assert e._remote_env_shell_argv([], {"PATH": e.PRESERVE_ENV}, ["cmd"]) == [ + "/bin/sh", + "-c", + '''exec /usr/bin/env -i PATH="${PATH-}" "$@"''', + "sh", + "cmd", + ] + assert e._remote_env_shell_argv( + ["sudo"], { - "PATH": p.PRESERVE_ENV, - "LOCALE_ARCHIVE": p.PRESERVE_ENV, - "NIXOS_NO_CHECK": p.PRESERVE_ENV, + "PATH": e.PRESERVE_ENV, + "LOCALE_ARCHIVE": e.PRESERVE_ENV, + "NIXOS_NO_CHECK": e.PRESERVE_ENV, "NIXOS_INSTALL_BOOTLOADER": "0", - } - ) == ( - """exec env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" """ - '''NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"''' - ) - assert p._remote_shell_script({"PATH": p.PRESERVE_ENV, "FOO": "some value"}) == ( - '''exec env -i PATH="${PATH-}" FOO='some value' "$@"''' - ) + }, + ["cmd", "arg"], + ) == [ + "sudo", + "/bin/sh", + "-c", + """exec /usr/bin/env -i PATH="${PATH-}" LOCALE_ARCHIVE="${LOCALE_ARCHIVE-}" """ + '''NIXOS_NO_CHECK="${NIXOS_NO_CHECK-}" NIXOS_INSTALL_BOOTLOADER=0 "$@"''', + "sh", + "cmd", + "arg", + ] + assert e._remote_env_shell_argv( + [], {"PATH": e.PRESERVE_ENV, "FOO": "some value"}, [] + ) == [ + "/bin/sh", + "-c", + '''exec /usr/bin/env -i PATH="${PATH-}" FOO='some value' "$@"''', + "sh", + ] @patch.dict(p.os.environ, {"PATH": "/path/to/bin"}, clear=True) @@ -123,7 +140,7 @@ def test_run_wrapper(mock_run: Any) -> None: "--", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", "--with", @@ -156,7 +173,7 @@ def test_run_wrapper(mock_run: Any) -> None: "--stdin", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" FOO=bar "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" FOO=bar "$@"'""", "sh", "test", "--with", @@ -248,6 +265,82 @@ def test_ssh_host() -> None: assert remote.store_type == "ssh-ng" +@patch.dict(p.os.environ, {"PATH": "/path/to/bin"}, clear=True) +@patch("subprocess.run", autospec=True) +def test_run_wrapper_run0(mock_run: Any) -> None: + p.run_wrapper(["cmd", "arg"], elevate=e.Run0Elevator()) + mock_run.assert_called_with( + ["run0", "--", "cmd", "arg"], + check=True, + text=True, + errors="surrogateescape", + env=None, + input=None, + ) + + run0_script = ( + "exec systemd-run --uid=0 --pipe --quiet --wait --collect " + "--service-type=exec --send-sighup " + '--setenv=PATH="${PATH-}" -- "$@"' + ) + + p.run_wrapper( + ["cmd", "arg"], + elevate=e.Run0Elevator(), + remote=m.Remote("user@host", [], "ssh"), + ) + mock_run.assert_called_with( + [ + "ssh", + *p.SSH_DEFAULT_OPTS, + "user@host", + "--", + "/bin/sh", + "-c", + p._quote_remote_arg(run0_script), + "sh", + "cmd", + "arg", + ], + check=True, + text=True, + errors="surrogateescape", + env=None, + input=None, + ) + + p.run_wrapper( + ["cmd"], + elevate=e.Run0Elevator().with_password("pw"), + remote=m.Remote("user@host", [], "ssh"), + ) + mock_run.assert_called_with( + [ + "ssh", + *p.SSH_DEFAULT_OPTS, + "user@host", + "--", + "/bin/sh", + "-c", + p._quote_remote_arg(e.Run0Elevator._AGENT_PICKER), + "sh", + # No toplevel bound, so the only candidate is PATH lookup. + "polkit-stdin-agent", + "--", + "/bin/sh", + "-c", + p._quote_remote_arg(run0_script), + "sh", + "cmd", + ], + check=True, + text=True, + errors="surrogateescape", + env=None, + input="pw\n", + ) + + @patch("subprocess.run", autospec=True) def test_custom_sudo_args(mock_run: Any) -> None: with patch.dict( @@ -298,7 +391,7 @@ def test_custom_sudo_args(mock_run: Any) -> None: "--args", "/bin/sh", "-c", - """'exec env -i PATH="${PATH-}" "$@"'""", + """'exec /usr/bin/env -i PATH="${PATH-}" "$@"'""", "sh", "test", ], From dbbee0dd3a2219015ca58704100b81377187dad7 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 16 Apr 2026 20:34:49 +0200 Subject: [PATCH 033/149] nixos-rebuild-ng: document --elevate / --ask-elevate-password --- .../ni/nixos-rebuild-ng/nixos-rebuild.8.scd | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/nixos-rebuild.8.scd b/pkgs/by-name/ni/nixos-rebuild-ng/nixos-rebuild.8.scd index d4f83ac9d803..7ec6def5ca21 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/nixos-rebuild.8.scd +++ b/pkgs/by-name/ni/nixos-rebuild-ng/nixos-rebuild.8.scd @@ -21,7 +21,7 @@ nixos-rebuild - reconfigure a NixOS machine _nixos-rebuild_ \[--verbose] [--quiet] [--max-jobs MAX_JOBS] [--cores CORES] [--log-format LOG_FORMAT] [--keep-going] [--keep-failed] [--fallback] [--repair] [--option OPTION OPTION] [--builders BUILDERS] [--include INCLUDE]++ \[--print-build-logs] [--show-trace] [--accept-flake-config] [--refresh] [--impure] [--offline] [--no-net] [--recreate-lock-file] [--no-update-lock-file] [--no-write-lock-file] [--no-registries] [--commit-lock-file]++ \[--update-input UPDATE_INPUT] [--override-input OVERRIDE_INPUT OVERRIDE_INPUT] [--no-build-output] [--use-substitutes] [--help] [--debug] [--file FILE] [--attr ATTR] [--flake [FLAKE]] [--no-flake] [--install-bootloader]++ - \[--profile-name PROFILE_NAME] [--specialisation SPECIALISATION] [--rollback] [--store-path STORE_PATH] [--upgrade] [--upgrade-all] [--json] [--ask-sudo-password] [--sudo] [--no-reexec]++ + \[--profile-name PROFILE_NAME] [--specialisation SPECIALISATION] [--rollback] [--store-path STORE_PATH] [--upgrade] [--upgrade-all] [--json] [--elevate {none,sudo,run0}] [--ask-elevate-password] [--no-reexec]++ \[--build-host BUILD_HOST] [--target-host TARGET_HOST] [--no-build-nix] [--image-variant IMAGE_VARIANT]++ \[{switch,boot,test,build,edit,repl,dry-build,dry-run,dry-activate,build-image,build-vm,build-vm-with-bootloader,list-generations}] @@ -269,17 +269,41 @@ It must be one of the following: target-host connection to cache.nixos.org is faster than the connection between hosts. +*--elevate* {none,sudo,run0} + Privilege-elevation method used for activation commands. Setting this + option allows deploying as a non-root user. + + _sudo_ prefixes commands with *sudo*. Additional sudo options can be + passed via the NIX_SUDOOPTS environment variable. + + _run0_ uses systemd's polkit-based elevation. Locally this runs *run0* + directly so the user's normal polkit agent handles any prompts. With + *--target-host* the equivalent _systemd-run --uid=0 --pipe_ form is + used (no remote TTY is allocated). Unless *--ask-elevate-password* is + also passed, the deploying user must be granted the polkit action + _org.freedesktop.systemd1.manage-units_ on the target host without + authentication, e.g. via _security.polkit.extraConfig_. + +*--ask-elevate-password*, *-S* + Prompt locally for a password and feed it to the elevation method. + Implies *--elevate=sudo* if *--elevate* is not given. + + For _sudo_ this uses *sudo --stdin*. For _run0_ the command is wrapped + in *polkit-stdin-agent*, which registers a per-process polkit agent + and answers the PAM conversation from the supplied password. The + machine performing the elevation (the local host, or the target host + with *--target-host*) must set + _system.tools.nixos-rebuild.enableRun0Elevation = true_. + *--elevate=run0 --ask-elevate-password* is not usable otherwise. + *--sudo* - When set, *nixos-rebuild* prefixes activation commands with sudo. - Setting this option allows deploying as a non-root user. + Alias for *--elevate=sudo*. - You can set sudo options by defining the NIX_SUDOOPTS environment - variable. +*--ask-sudo-password* + Alias for *--elevate=sudo --ask-elevate-password*. -*--ask-sudo-password*, *-S* - When set, *nixos-rebuild* will ask for sudo password for remote - activation (i.e.: on *--target-host*) at the start of the build process. - Implies *--sudo*. +*--use-remote-sudo* + Deprecated, use *--elevate=sudo* instead. *--file* _path_, *-f* _path_ Build the NixOS system from the specified file. The file must From 82921fdd3b10231097d130b61c8827d0318a74e1 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Thu, 28 May 2026 23:34:22 +0000 Subject: [PATCH 034/149] spade: 0.18.0 -> 0.19.0 Diff: https://gitlab.com/spade-lang/spade/-/compare/v0.18.0...0.19.0 Changelog: https://gitlab.com/spade-lang/spade/-/blob/v0.19.0/CHANGELOG.md --- pkgs/by-name/sp/spade/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/sp/spade/package.nix b/pkgs/by-name/sp/spade/package.nix index 448e439e3038..ba08513aa2c9 100644 --- a/pkgs/by-name/sp/spade/package.nix +++ b/pkgs/by-name/sp/spade/package.nix @@ -16,18 +16,18 @@ rustPlatform.buildRustPackage rec { pname = "spade"; - version = "0.18.0"; + version = "0.19.0"; src = fetchFromGitLab { owner = "spade-lang"; repo = "spade"; rev = "v${version}"; - hash = "sha256-BSbE0hJvCIaxxqCo+QltZuoS2yst6TgUnHXAE4kZD2A="; + hash = "sha256-HSRttrf4Dsl9iatqVr9YH4MoKPwe9XJWJYqNRchFLY0="; # only needed for vatch, which contains test data fetchSubmodules = true; }; - cargoHash = "sha256-+lQiXOof6MnjnVf8CXNYgeyzFMf0myLErbSfnjLVZWU="; + cargoHash = "sha256-koMnkwgQtVMvxlslvC5dZAhr3K/66XWyp5UPW7yZtio="; # TODO: somehow respect https://nixos.org/manual/nixpkgs/stable/#var-passthru-updateScript-commit passthru.updateScript = _experimental-update-script-combinators.sequence [ From 6a2ddda788f3762e270c506ce83b72b510d6b178 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Thu, 28 May 2026 23:34:38 +0000 Subject: [PATCH 035/149] swim: 0.18.0 -> 0.19.0 Diff: https://gitlab.com/spade-lang/swim/-/compare/v0.18.0...v0.19.0 Changelog: https://gitlab.com/spade-lang/swim/-/blob/v0.19.0/CHANGELOG.md --- pkgs/by-name/sw/swim/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/sw/swim/package.nix b/pkgs/by-name/sw/swim/package.nix index 5c5528bc7759..26cfc74f1cee 100644 --- a/pkgs/by-name/sw/swim/package.nix +++ b/pkgs/by-name/sw/swim/package.nix @@ -10,16 +10,16 @@ rustPlatform.buildRustPackage rec { pname = "swim"; - version = "0.18.0"; + version = "0.19.0"; src = fetchFromGitLab { owner = "spade-lang"; repo = "swim"; rev = "v${version}"; - hash = "sha256-l0iEzctt3WHW7m3wnr5WdthqBlGSh0SxHCQlM6it0Ds="; + hash = "sha256-5/yIucyErZpY5iN/6r8JNAfsrYPxh+lBHDBD6cnjbHQ="; }; - cargoHash = "sha256-k3sWg/oG5+ckxa10Jt/AncbyoB8kaOcG3xKPg1fl/ME="; + cargoHash = "sha256-+znzedDuB7hMzaRtAvLNUC9gG0Q2R8Fn61D64udAyAM="; nativeBuildInputs = [ pkg-config ]; From 443a7efcc1400bd9a6abf3069a54559499db459e Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 29 May 2026 00:35:34 +0000 Subject: [PATCH 036/149] ostui: 1.0.5 -> 1.1.1 --- pkgs/by-name/os/ostui/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/os/ostui/package.nix b/pkgs/by-name/os/ostui/package.nix index 51a739a57f6f..7b21f97e0515 100644 --- a/pkgs/by-name/os/ostui/package.nix +++ b/pkgs/by-name/os/ostui/package.nix @@ -8,13 +8,13 @@ }: buildGoModule (finalAttrs: { pname = "ostui"; - version = "1.0.5"; + version = "1.1.1"; src = fetchFromSourcehut { owner = "~ser"; repo = "ostui"; rev = "v${finalAttrs.version}"; - hash = "sha256-85vCyKcQIGjO6raYgKUt4D3N9UjbBJmEKkWxUB4Av48="; + hash = "sha256-5QwI4E6OqxnFPSgWsowNRolK6yi4tQR8ZyADzYw7tNY="; }; vendorHash = "sha256-3FP+qZChS9A8R6il282pkyFweeOolrAu0L0WFcnrdKI="; From f5c8639dd50cb768590f47da7cbdc101ef981215 Mon Sep 17 00:00:00 2001 From: zowoq <59103226+zowoq@users.noreply.github.com> Date: Fri, 29 May 2026 10:01:04 +1000 Subject: [PATCH 037/149] nixos/nspawn-container: use ty instead of mypy the test driver package is also using ty https://github.com/NixOS/nixpkgs/commit/85d58871aebce2ac2a1a04b8812a4a8869827bf3 --- .../nspawn-container/run-nspawn/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nixos/modules/virtualisation/nspawn-container/run-nspawn/package.nix b/nixos/modules/virtualisation/nspawn-container/run-nspawn/package.nix index 4f7a0e68748b..9177cd54825d 100644 --- a/nixos/modules/virtualisation/nspawn-container/run-nspawn/package.nix +++ b/nixos/modules/virtualisation/nspawn-container/run-nspawn/package.nix @@ -3,10 +3,10 @@ e2fsprogs, iproute2, lib, - mypy, ruff, setuptools, systemd, + ty, }: buildPythonApplication { @@ -35,13 +35,13 @@ buildPythonApplication { doCheck = true; nativeCheckInputs = [ - mypy ruff + ty ]; checkPhase = '' - echo -e "\x1b[32m## run mypy\x1b[0m" - mypy run_nspawn + echo -e "\x1b[32m## run ty\x1b[0m" + ty check --error-on-warning run_nspawn echo -e "\x1b[32m## run ruff check\x1b[0m" ruff check . echo -e "\x1b[32m## run ruff format\x1b[0m" From c14bfbf0463a36a9702c4fc312fa9d5d264d7c45 Mon Sep 17 00:00:00 2001 From: Jost Alemann Date: Sat, 23 May 2026 11:25:39 +0200 Subject: [PATCH 038/149] ty: 0.0.38 -> 0.0.40 Changelog: https://github.com/astral-sh/ty/releases/tag/0.0.40 Diff: https://github.com/astral-sh/ty/compare/0.0.38...0.0.40 --- pkgs/by-name/ty/ty/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ty/ty/package.nix b/pkgs/by-name/ty/ty/package.nix index 0dde0db10465..6433db1b5d0d 100644 --- a/pkgs/by-name/ty/ty/package.nix +++ b/pkgs/by-name/ty/ty/package.nix @@ -17,7 +17,7 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "ty"; - version = "0.0.38"; + version = "0.0.40"; __structuredAttrs = true; src = fetchFromGitHub { @@ -25,7 +25,7 @@ rustPlatform.buildRustPackage (finalAttrs: { repo = "ty"; tag = finalAttrs.version; fetchSubmodules = true; - hash = "sha256-70Y5i9m2h2+Jc44jLOf+gXX/PeDbURRJ80y+6h5SlRk="; + hash = "sha256-kdfPnyQXYtf3BDrYCFGfX0bMoPGjRpyH3aUeRZBiUKY="; }; # For Darwin platforms, remove the integration test for file notifications, @@ -39,7 +39,7 @@ rustPlatform.buildRustPackage (finalAttrs: { cargoBuildFlags = [ "--package=ty" ]; - cargoHash = "sha256-+c2JfB55w9otmmgTFIDMwkpASJV7bIMEf0uqRXjk/QM="; + cargoHash = "sha256-yUbHTzUGNdpm3b1s/SkcpFGdp7WjN+xO+CVrPPwrh6A="; nativeBuildInputs = [ installShellFiles ]; buildInputs = [ rust-jemalloc-sys ]; From 61542c96d144e59669ec2c909bc08ed308bb4a38 Mon Sep 17 00:00:00 2001 From: Jost Alemann Date: Wed, 27 May 2026 22:45:01 +0200 Subject: [PATCH 039/149] ty: add ddogfoodd to maintainers --- pkgs/by-name/ty/ty/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/ty/ty/package.nix b/pkgs/by-name/ty/ty/package.nix index 6433db1b5d0d..8b1c65bf1be6 100644 --- a/pkgs/by-name/ty/ty/package.nix +++ b/pkgs/by-name/ty/ty/package.nix @@ -101,6 +101,7 @@ rustPlatform.buildRustPackage (finalAttrs: { mainProgram = "ty"; maintainers = with lib.maintainers; [ bengsparks + ddogfoodd figsoda GaetanLepage ]; From 4f6f2b4dde0115f532db304f087f7e0395e80eb1 Mon Sep 17 00:00:00 2001 From: dinckelman Date: Fri, 29 May 2026 14:43:12 +0200 Subject: [PATCH 040/149] linuxPackages.nvidiaPackages.legacy_580: 580.142 -> 580.159.04 --- pkgs/os-specific/linux/nvidia-x11/default.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/os-specific/linux/nvidia-x11/default.nix b/pkgs/os-specific/linux/nvidia-x11/default.nix index b01fb26204ce..a89769a30ab3 100644 --- a/pkgs/os-specific/linux/nvidia-x11/default.nix +++ b/pkgs/os-specific/linux/nvidia-x11/default.nix @@ -156,12 +156,12 @@ rec { # LTSB supported until Aug 2028 legacy_580 = generic { - version = "580.142"; - sha256_64bit = "sha256-IJFfzz/+icNVDPk7YKBKKFRTFQ2S4kaOGRGkNiBEdWM="; - sha256_aarch64 = "sha256-jntr88SpTYR648P1rizQjB/8KleBoa14Ay12vx8XETM="; - openSha256 = "sha256-v968LbRqy8jB9+yHy9ceP2TDdgyqfDQ6P41NsCoM2AY="; - settingsSha256 = "sha256-BnrIlj5AvXTfqg/qcBt2OS9bTDDZd3uhf5jqOtTMTQM="; - persistencedSha256 = "sha256-il403KPFAnDbB+dITnBGljhpsUPjZwmLjGt8iPKuBqw="; + version = "580.159.04"; + sha256_64bit = "sha256-weZnYbCI0Xs632y2l53przi+JoTRArABoXbc+vq9yh4="; + sha256_aarch64 = "sha256-iRLyYjvHyDl2Xzb87j20o1MYNKLK/zql1JwSWbI3Kus="; + openSha256 = "sha256-zsNmjZW0cyZWPp3vDT3mNeqAo0hS0M7e9Tbvwvij+F4="; + settingsSha256 = "sha256-U0hics4gQeZWsD+ch9PBz42zfTOEVcKRVIqYZb3VOY8="; + persistencedSha256 = "sha256-vDawiy52GB8JABUKZDiQUc8uda8p/7jCFW7rTu6QMa4="; }; # Last one without the bug reported here: From f244ed8941324d3015c5893371fd5c6643013966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Thu, 28 May 2026 10:50:46 +0700 Subject: [PATCH 041/149] =?UTF-8?q?chroma:=202.25.0=20=E2=86=92=202.26.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/by-name/ch/chroma/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ch/chroma/package.nix b/pkgs/by-name/ch/chroma/package.nix index 8c80771e80ee..edec36419bcd 100644 --- a/pkgs/by-name/ch/chroma/package.nix +++ b/pkgs/by-name/ch/chroma/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "chroma"; - version = "2.25.0"; + version = "2.26.0"; src = fetchFromGitHub { owner = "alecthomas"; repo = "chroma"; tag = "v${finalAttrs.version}"; - hash = "sha256-K2r863R1ckroKVsxMXZanxfTnMrkFtch1ZFYLUb0mMc="; + hash = "sha256-ha0orbrfhJpDeXkv718msAmjEBXE8UsoONco1502/lk="; }; - vendorHash = "sha256-lamMRKrGF0b5mfXMCsQid/UO6AyuKryJX7cKIRJho1c="; + vendorHash = "sha256-ftvHfqcfm2cy2B8cv9gp9aovge3QpYrxkULP/fAy6oc="; modRoot = "./cmd/chroma"; From 4b794705ce88d138bd15c239cb735c959fedce89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Fri, 29 May 2026 20:25:22 +0700 Subject: [PATCH 042/149] =?UTF-8?q?chroma:=202.26.0=20=E2=86=92=202.26.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/by-name/ch/chroma/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ch/chroma/package.nix b/pkgs/by-name/ch/chroma/package.nix index edec36419bcd..965c5eb69add 100644 --- a/pkgs/by-name/ch/chroma/package.nix +++ b/pkgs/by-name/ch/chroma/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "chroma"; - version = "2.26.0"; + version = "2.26.1"; src = fetchFromGitHub { owner = "alecthomas"; repo = "chroma"; tag = "v${finalAttrs.version}"; - hash = "sha256-ha0orbrfhJpDeXkv718msAmjEBXE8UsoONco1502/lk="; + hash = "sha256-kOhPaiqtFU3H43jz+GjfOOIVEy5acpP9SwQ1/2xsMQc="; }; - vendorHash = "sha256-ftvHfqcfm2cy2B8cv9gp9aovge3QpYrxkULP/fAy6oc="; + vendorHash = "sha256-mPB7qPPMIQLjmyN2T7qX/X1Ip0E4X0jNv5h+UfVEHrY="; modRoot = "./cmd/chroma"; From 36a8393049930cadd50ae55e8b908b06a5e6de25 Mon Sep 17 00:00:00 2001 From: Adam Rizkalla Date: Fri, 29 May 2026 11:40:45 -0500 Subject: [PATCH 043/149] python3Packages.zenoh: 1.6.2 -> 1.9.0 Signed-off-by: Adam Rizkalla --- pkgs/development/python-modules/zenoh/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/python-modules/zenoh/default.nix b/pkgs/development/python-modules/zenoh/default.nix index 8946bcc4b3ea..c74b906ce3a5 100644 --- a/pkgs/development/python-modules/zenoh/default.nix +++ b/pkgs/development/python-modules/zenoh/default.nix @@ -9,19 +9,19 @@ buildPythonPackage rec { pname = "zenoh"; - version = "1.6.2"; # nixpkgs-update: no auto update + version = "1.9.0"; # nixpkgs-update: no auto update pyproject = true; src = fetchFromGitHub { owner = "eclipse-zenoh"; repo = "zenoh-python"; rev = version; - hash = "sha256-GGqZGtHSCaPeO6wFFBxPjdjhsIdcgI1RJ4mZbGq4uzc="; + hash = "sha256-rKWbJti5bgwAfc8LpQFsU6KhhcWyWAwOX+SF1UAGRbk="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit src pname version; - hash = "sha256-2Hieow0+GzcNQmvqsJd+5bpE9RWUDbaBR9jah+O4GtI="; + hash = "sha256-g7Om2QvlbwVmB0wGcbuafUELh53IJ2uM+miHyzBKQQI="; }; build-system = [ From 852b4f37c4d1f0fc53a04bdf10572b1941d38cf6 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 29 May 2026 18:55:14 +0000 Subject: [PATCH 044/149] vscode-extensions.detachhead.basedpyright: 1.39.3 -> 1.39.6 --- .../vscode/extensions/detachhead.basedpyright/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix b/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix index 68f9f7bbe333..f21f58fc6b29 100644 --- a/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix +++ b/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix @@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { name = "basedpyright"; publisher = "detachhead"; - version = "1.39.3"; - hash = "sha256-uuWkSxjsY7ZL1QUwqkiwPTN8oGUktfm7/Hgv3Enmgqc="; + version = "1.39.6"; + hash = "sha256-shxV0g1XDu7qjrGiwyHGpY2qBCJt23tz7SuDbm5AXws="; }; meta = { changelog = "https://github.com/detachhead/basedpyright/releases"; From db81e7567f3b9fcc3465cf42ad032f913b24b34c Mon Sep 17 00:00:00 2001 From: Andrew Childs Date: Fri, 22 May 2026 11:21:06 +0900 Subject: [PATCH 045/149] linux: use correct strip program when stripping vmlinux Otherwise may fail during cross complation with: [...]/strip: Unable to recognise the architecture of the input file: `/[...]/vmlinux` --- pkgs/os-specific/linux/kernel/build.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/build.nix b/pkgs/os-specific/linux/kernel/build.nix index ac191a3ba149..04cbc24e9c02 100644 --- a/pkgs/os-specific/linux/kernel/build.nix +++ b/pkgs/os-specific/linux/kernel/build.nix @@ -510,7 +510,7 @@ lib.makeOverridable ( preFixup = '' if [ -z "''${dontStrip-}" -a -e $out/vmlinux ]; then - strip -v -S -p $out/vmlinux + $STRIP -v -S -p $out/vmlinux fi ''; From fd573a70ddefbf3770f8339c956ec53785a99420 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Sat, 30 May 2026 09:16:43 +0100 Subject: [PATCH 046/149] capstone: 5.0.8 -> 5.0.9 Changes: https://github.com/capstone-engine/capstone/releases/tag/5.0.9 --- pkgs/by-name/ca/capstone/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ca/capstone/package.nix b/pkgs/by-name/ca/capstone/package.nix index 23d59748b193..b464b9d53885 100644 --- a/pkgs/by-name/ca/capstone/package.nix +++ b/pkgs/by-name/ca/capstone/package.nix @@ -8,13 +8,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "capstone"; - version = "5.0.8"; + version = "5.0.9"; src = fetchFromGitHub { owner = "capstone-engine"; repo = "capstone"; rev = finalAttrs.version; - hash = "sha256-Ww/tv95ba0mBgRvQBMAbb/RbMjdgWwMcCVngtWDv1Vc="; + hash = "sha256-uAiiKWKGjEATPE0Xc3g+aOLCz5ffIlDmf+7jaGwaZ4I="; }; cmakeFlags = [ From d75b1d024232c98f1092a13d6e2833146ff2b38a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Sat, 30 May 2026 11:45:12 +0100 Subject: [PATCH 047/149] aquamarine: 0.11.0 -> 0.12.0 --- pkgs/by-name/aq/aquamarine/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/aq/aquamarine/package.nix b/pkgs/by-name/aq/aquamarine/package.nix index 03774520b95c..7b7fa7a2cd2d 100644 --- a/pkgs/by-name/aq/aquamarine/package.nix +++ b/pkgs/by-name/aq/aquamarine/package.nix @@ -23,13 +23,13 @@ }: gcc15Stdenv.mkDerivation (finalAttrs: { pname = "aquamarine"; - version = "0.11.0"; + version = "0.12.0"; src = fetchFromGitHub { owner = "hyprwm"; repo = "aquamarine"; tag = "v${finalAttrs.version}"; - hash = "sha256-nGiqEpbQK/tg7Mzyb8kIik9uDcm3cInWDcHRquFAOS4="; + hash = "sha256-TtAhxedbRAl1u6OyT+4eRxZ417G2NMJNoqEbIhjvWo0="; }; nativeBuildInputs = [ From 0945d7ed77c95b2cb3b320abe53dde496b2e5377 Mon Sep 17 00:00:00 2001 From: Michael Daniels Date: Sat, 30 May 2026 11:26:03 -0400 Subject: [PATCH 048/149] {cri-o,cri-o-unwrapped}: move to by-name --- .../default.nix => by-name/cr/cri-o-unwrapped/package.nix} | 0 .../cri-o/wrapper.nix => by-name/cr/cri-o/package.nix} | 0 pkgs/top-level/all-packages.nix | 3 --- 3 files changed, 3 deletions(-) rename pkgs/{applications/virtualization/cri-o/default.nix => by-name/cr/cri-o-unwrapped/package.nix} (100%) rename pkgs/{applications/virtualization/cri-o/wrapper.nix => by-name/cr/cri-o/package.nix} (100%) diff --git a/pkgs/applications/virtualization/cri-o/default.nix b/pkgs/by-name/cr/cri-o-unwrapped/package.nix similarity index 100% rename from pkgs/applications/virtualization/cri-o/default.nix rename to pkgs/by-name/cr/cri-o-unwrapped/package.nix diff --git a/pkgs/applications/virtualization/cri-o/wrapper.nix b/pkgs/by-name/cr/cri-o/package.nix similarity index 100% rename from pkgs/applications/virtualization/cri-o/wrapper.nix rename to pkgs/by-name/cr/cri-o/package.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a7ccbe0f949d..b3b580c8c799 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10427,9 +10427,6 @@ with pkgs; ) haskellPackages.bench; - cri-o = callPackage ../applications/virtualization/cri-o/wrapper.nix { }; - cri-o-unwrapped = callPackage ../applications/virtualization/cri-o { }; - ### GAMES inherit (callPackages ../games/fteqw { }) From d01101d8e2b2cec49906c129df48517586c8de65 Mon Sep 17 00:00:00 2001 From: Adam Dinwoodie Date: Sat, 30 May 2026 16:36:30 +0100 Subject: [PATCH 049/149] git: use finalAttrs for doInstallCheck config For easier overriding with `git.override` or `git.overrideAttrs`, determine whether configuration related to running the install checks is present based on whether the install checks are actually being run, not on the function argument which may not be the same. --- pkgs/by-name/gi/git/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/gi/git/package.nix b/pkgs/by-name/gi/git/package.nix index fa7bcc7cd054..072fe282a3e3 100644 --- a/pkgs/by-name/gi/git/package.nix +++ b/pkgs/by-name/gi/git/package.nix @@ -157,7 +157,7 @@ stdenv.mkDerivation (finalAttrs: { substituteInPlace contrib/credential/libsecret/Makefile \ --replace-fail 'pkg-config' "$PKG_CONFIG" '' - + lib.optionalString doInstallCheck '' + + lib.optionalString finalAttrs.doInstallCheck '' # ensure we are using the correct shell when executing the test scripts patchShebangs t/*.sh '' From 68157d88863aa070260b1b970470e1faea78ae3f Mon Sep 17 00:00:00 2001 From: Paul Meyer Date: Sat, 30 May 2026 17:52:06 +0200 Subject: [PATCH 050/149] linux/common-config: enable deflate/zstd for erofs Signed-off-by: Paul Meyer --- pkgs/os-specific/linux/kernel/common-config.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index d1734a2b32c5..e0083addb03f 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -773,6 +773,9 @@ let SQUASHFS_LZ4 = yes; SQUASHFS_ZSTD = yes; + EROFS_FS_ZIP_DEFLATE = whenAtLeast "6.6" yes; + EROFS_FS_ZIP_ZSTD = whenAtLeast "6.10" yes; + # Native Language Support modules, needed by some filesystems NLS = yes; NLS_DEFAULT = freeform "utf8"; From 3264095251089348bbaf4e0e46234b56cd24228b Mon Sep 17 00:00:00 2001 From: Ben Siraphob Date: Mon, 27 Apr 2026 02:57:44 -0700 Subject: [PATCH 051/149] open-vm-tools: fix strictDeps inputs --- pkgs/by-name/op/open-vm-tools/package.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/op/open-vm-tools/package.nix b/pkgs/by-name/op/open-vm-tools/package.nix index 8d0823306974..6736e664eccc 100644 --- a/pkgs/by-name/op/open-vm-tools/package.nix +++ b/pkgs/by-name/op/open-vm-tools/package.nix @@ -15,6 +15,7 @@ pciutils, procps, libtirpc, + libtool, rpcsvc-proto, libx11, libxext, @@ -71,8 +72,10 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ autoreconfHook + glib # provides glib-genmarshal at build time makeWrapper pkg-config + rpcsvc-proto # provides rpcgen at build time udevCheckHook ]; @@ -84,12 +87,12 @@ stdenv.mkDerivation (finalAttrs: { libdrm libmspack libtirpc + libtool # provides libltdl (libxmlsec dynamic loading) libxcrypt libxml2 openssl pam procps - rpcsvc-proto udev xercesc xmlsec @@ -186,6 +189,8 @@ stdenv.mkDerivation (finalAttrs: { }" ''; + strictDeps = true; + meta = { homepage = "https://github.com/vmware/open-vm-tools"; changelog = "https://github.com/vmware/open-vm-tools/releases/tag/stable-${finalAttrs.version}"; From 6a5db4a3a5dcfb37ad8e27accf44e54efe9da2e1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 07:57:17 +0000 Subject: [PATCH 052/149] uutils-acl: 0.0.1-unstable-2026-05-17 -> 0.0.1-unstable-2026-05-29 --- pkgs/by-name/uu/uutils-acl/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/uu/uutils-acl/package.nix b/pkgs/by-name/uu/uutils-acl/package.nix index 124394efd5ef..c459a54536f1 100644 --- a/pkgs/by-name/uu/uutils-acl/package.nix +++ b/pkgs/by-name/uu/uutils-acl/package.nix @@ -7,16 +7,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "uutils-acl"; - version = "0.0.1-unstable-2026-05-17"; + version = "0.0.1-unstable-2026-05-29"; src = fetchFromGitHub { owner = "uutils"; repo = "acl"; - rev = "8c23acae9473c2a6a425a95eda474cdec33fb9a4"; - hash = "sha256-q1dMJMMhL7/vA1ffy4KBhoPx7BoZnnr7yxLc9XDOCak="; + rev = "41b2a98f52d4a4d3e87f3debec506b259c296453"; + hash = "sha256-42Eos2bIhA2DTvt9ZYlijtSk075iz/WJAhy5eBf4XAY="; }; - cargoHash = "sha256-06gamu+PZK68QSA4vLYyjRS6ecO/ugjkmaHH2tipTl4="; + cargoHash = "sha256-7kzG0x5UQvF7MRu9tnrnJdhm4zYqrSfUa8mTrnfcIqs="; cargoBuildFlags = [ "--workspace" ]; From fae9cc5c16101a5eaaf22807718dcf31efdd386d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 08:07:31 +0000 Subject: [PATCH 053/149] uutils-procps: 0.0.1-unstable-2026-05-13 -> 0.0.1-unstable-2026-05-30 --- pkgs/by-name/uu/uutils-procps/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/uu/uutils-procps/package.nix b/pkgs/by-name/uu/uutils-procps/package.nix index c04b5e21d987..47823f26226d 100644 --- a/pkgs/by-name/uu/uutils-procps/package.nix +++ b/pkgs/by-name/uu/uutils-procps/package.nix @@ -10,16 +10,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "uutils-procps"; - version = "0.0.1-unstable-2026-05-13"; + version = "0.0.1-unstable-2026-05-30"; src = fetchFromGitHub { owner = "uutils"; repo = "procps"; - rev = "c0b901770156504d1a2021794d5375b7f35a2112"; - hash = "sha256-1aB/xFZaB9mvjYsHud0wajpdXKVKFLIFfeb9vpJebFQ="; + rev = "67cdcd74b855dfa324c3270fa2f05dae2681a64c"; + hash = "sha256-gURJ37fugUnv+EXRAlhJIZ0xwzWeY/2X9ScxJALPOGU="; }; - cargoHash = "sha256-fv7bgnbuhE2XKxb7ZKL2Vjt+mmrdqK6bSVKRBdTgoRE="; + cargoHash = "sha256-mtaOME1eRpQy2IaSh+ari4CwmsKbuPy2v2s5CdauQpo="; cargoBuildFlags = [ "--workspace" ]; From 077513501a115e401f9d44b8d3d4dc4d3fe482b1 Mon Sep 17 00:00:00 2001 From: linsui <36977733+linsui@users.noreply.github.com> Date: Sun, 31 May 2026 16:28:44 +0800 Subject: [PATCH 054/149] boring: 0.14.0 -> 0.15.0 --- pkgs/by-name/bo/boring/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/bo/boring/package.nix b/pkgs/by-name/bo/boring/package.nix index 42ecfdb879cd..ab25fc9021b5 100644 --- a/pkgs/by-name/bo/boring/package.nix +++ b/pkgs/by-name/bo/boring/package.nix @@ -11,13 +11,13 @@ buildGoModule (finalAttrs: { pname = "boring"; - version = "0.14.0"; + version = "0.15.0"; src = fetchFromGitHub { owner = "alebeck"; repo = "boring"; tag = "v${finalAttrs.version}"; - hash = "sha256-cyRy7lF2wGupzDnW4zPKEuM0X0aaHrWbF/3p13xb2DA="; + hash = "sha256-WdohrSeq2N1zDQlYnwIMn1FF3IIb3zAiLSuOOf2GioU="; }; nativeBuildInputs = [ @@ -26,7 +26,7 @@ buildGoModule (finalAttrs: { subPackages = [ "cmd/boring" ]; - vendorHash = "sha256-4YU0l2YhlMQzcKSMhXt3oEeCk87Yu90esiPelRs5/OQ="; + vendorHash = "sha256-yjqJ7G9n3c1ABLWynswzLP7B6bSwH1dIYKfVZqJX30g="; ldflags = [ "-s" From 35e6afa1846082566200bc93c18b8ba4bf322c7d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 09:01:56 +0000 Subject: [PATCH 055/149] mangareader: 2.5.0 -> 2.5.1 --- pkgs/by-name/ma/mangareader/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ma/mangareader/package.nix b/pkgs/by-name/ma/mangareader/package.nix index 25885f446d37..45798c2d9484 100644 --- a/pkgs/by-name/ma/mangareader/package.nix +++ b/pkgs/by-name/ma/mangareader/package.nix @@ -9,13 +9,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "mangareader"; - version = "2.5.0"; + version = "2.5.1"; src = fetchFromGitHub { owner = "g-fb"; repo = "mangareader"; rev = finalAttrs.version; - hash = "sha256-jBBij57n5XWUA5K5DgTZnzuZABur13OxEbp6FzWcf30="; + hash = "sha256-zOAorzUyGPTJr1xfskDoMhN7SsLPH3XFcmAwEfNIRnc="; }; nativeBuildInputs = [ From d27c28eadba20b0dcb591401a1572f1cc8dcf640 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 10:03:49 +0000 Subject: [PATCH 056/149] vscode-extensions.ms-python.mypy-type-checker: 2026.4.0 -> 2026.6.0 --- .../vscode/extensions/ms-python.mypy-type-checker/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/vscode/extensions/ms-python.mypy-type-checker/default.nix b/pkgs/applications/editors/vscode/extensions/ms-python.mypy-type-checker/default.nix index 5daf4054b0ea..18b76d350a86 100644 --- a/pkgs/applications/editors/vscode/extensions/ms-python.mypy-type-checker/default.nix +++ b/pkgs/applications/editors/vscode/extensions/ms-python.mypy-type-checker/default.nix @@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { publisher = "ms-python"; name = "mypy-type-checker"; - version = "2026.4.0"; - hash = "sha256-N0zml16XSBwjGHzCR1L0W9WiSgqD/375VIQGpGfCkFE="; + version = "2026.6.0"; + hash = "sha256-Sis9Tm5uWTyAIJnHvdh/dwOs580YprqDQ3XP8FhWvw0="; }; meta = { From d72fb51665ea00e8979dde1884cfbc14781ddb5a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 10:35:45 +0000 Subject: [PATCH 057/149] v2ray-domain-list-community: 20260522120028 -> 20260531040030 --- pkgs/by-name/v2/v2ray-domain-list-community/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/v2/v2ray-domain-list-community/package.nix b/pkgs/by-name/v2/v2ray-domain-list-community/package.nix index 25f8a62a0eb7..0358e2142496 100644 --- a/pkgs/by-name/v2/v2ray-domain-list-community/package.nix +++ b/pkgs/by-name/v2/v2ray-domain-list-community/package.nix @@ -9,12 +9,12 @@ let generator = pkgsBuildBuild.buildGoModule rec { pname = "v2ray-domain-list-community"; - version = "20260522120028"; + version = "20260531040030"; src = fetchFromGitHub { owner = "v2fly"; repo = "domain-list-community"; rev = version; - hash = "sha256-+w+waGLxlkrp42Cy0WJoawcUpBuXbssD5/lokJhUJyw="; + hash = "sha256-+3lr7x+Ye2FcNjPNlxzI51yaNjQZl0CKeJ497HQZkm0="; }; vendorHash = "sha256-9tXv+rDBowxDN9gH4zHCr4TRbic4kijco3Y6bojJKRk="; meta = { From b98abf3b72fde009596cfecbe7a882edc4521e4e Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 11:24:27 +0000 Subject: [PATCH 058/149] vscode-extensions.fstarlang.fstar-vscode-assistant: 0.24.0 -> 0.25.0 --- .../extensions/fstarlang.fstar-vscode-assistant/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix b/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix index 02df798f5c49..55f7767f06b4 100644 --- a/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix +++ b/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix @@ -4,8 +4,8 @@ vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { name = "fstar-vscode-assistant"; publisher = "FStarLang"; - version = "0.24.0"; - hash = "sha256-2XFisNp/TvkBNytzs56kdMnaZTX6f1qWp1k59uLwcuE="; + version = "0.25.0"; + hash = "sha256-sya3P9Kn3DM/z5p8xF6TLEUPgrCs5+jgD89Y1KSJAgY="; }; meta = { description = "Interactive editing mode VS Code extension for F*"; From 329c947ea46d229ad17c9ad5c5f71f8400933bf4 Mon Sep 17 00:00:00 2001 From: Florian Brandes Date: Sun, 31 May 2026 14:42:36 +0200 Subject: [PATCH 059/149] python3Packages.flask-admin: 2.1.0 -> 2.2.0 Diff: https://github.com/pallets-eco/flask-admin/compare/v2.1.0...v2.2.0 Changelog: https://github.com/pallets-eco/flask-admin/releases/tag/v2.2.0 Signed-off-by: Florian Brandes --- pkgs/development/python-modules/flask-admin/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/flask-admin/default.nix b/pkgs/development/python-modules/flask-admin/default.nix index 1cc2e1fbc908..5c75fca02d7e 100644 --- a/pkgs/development/python-modules/flask-admin/default.nix +++ b/pkgs/development/python-modules/flask-admin/default.nix @@ -52,14 +52,14 @@ buildPythonPackage rec { pname = "flask-admin"; - version = "2.1.0"; + version = "2.2.0"; pyproject = true; src = fetchFromGitHub { owner = "flask-admin"; repo = "flask-admin"; tag = "v${version}"; - hash = "sha256-xEVsYYwpcHMyvlmUYDviM5MLVz8bWLShUW6GOpfAmro="; + hash = "sha256-lRLyGvCat6nBixFKkrn4NxeVF52Hl32admAL37mf9wc="; }; build-system = [ flit-core ]; From 8da5bec8ff3fefb456b5da24415dadfa5e840e53 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 15:52:42 +0000 Subject: [PATCH 060/149] starkiller: 3.4.0 -> 3.5.0 --- pkgs/by-name/st/starkiller/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/st/starkiller/package.nix b/pkgs/by-name/st/starkiller/package.nix index b116900433a0..ad1a2ea538c1 100644 --- a/pkgs/by-name/st/starkiller/package.nix +++ b/pkgs/by-name/st/starkiller/package.nix @@ -10,18 +10,18 @@ stdenv.mkDerivation (finalAttrs: { pname = "starkiller"; - version = "3.4.0"; + version = "3.5.0"; src = fetchFromGitHub { owner = "bc-security"; repo = "starkiller"; rev = "v${finalAttrs.version}"; - hash = "sha256-odjS3OJFaLSHimK+Wn5GrfBs2jNTTMsN8SCDkexWPcQ="; + hash = "sha256-uFSv/SfXATi01e4VH6iImvRnlFTUB3OarhfSTLQDg/M="; }; yarnOfflineCache = fetchYarnDeps { yarnLock = finalAttrs.src + "/yarn.lock"; - hash = "sha256-BKhflhrJdDsZK9r7GnVDoiX21dUayewPYgm5XOpMdxc="; + hash = "sha256-NAnROD2Bt2sYydLbZVzudwDajbc4zonTjSLcdD32KNE="; }; buildPhase = '' From a3f0e42372fe55170e7d1045edd3df3fe7d420b6 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 17:28:30 +0000 Subject: [PATCH 061/149] gh-gei: 1.29.1 -> 1.30.0 --- pkgs/by-name/gh/gh-gei/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/gh/gh-gei/package.nix b/pkgs/by-name/gh/gh-gei/package.nix index bf79aa6eb2cf..7f552b939092 100644 --- a/pkgs/by-name/gh/gh-gei/package.nix +++ b/pkgs/by-name/gh/gh-gei/package.nix @@ -7,13 +7,13 @@ buildDotnetModule rec { pname = "gh-gei"; - version = "1.29.1"; + version = "1.30.0"; src = fetchFromGitHub { owner = "github"; repo = "gh-gei"; rev = "v${version}"; - hash = "sha256-Ykd2/Y5Duw2yDO0uKhdt8mYLG85SeolByj/UK7ACJCo="; + hash = "sha256-dmou1CGsx7QLlDI3W1x0Sen35okUNQ4ofe8RMLQDP34="; }; dotnet-sdk = dotnetCorePackages.sdk_8_0_4xx; From a8cca1cf240b9414bc3eb43030840d062120326b Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 19:14:15 +0000 Subject: [PATCH 062/149] python3Packages.langchain-protocol: 0.0.15 -> 0.0.16 --- .../development/python-modules/langchain-protocol/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/langchain-protocol/default.nix b/pkgs/development/python-modules/langchain-protocol/default.nix index 85a85d42d11e..5fa39b168f07 100644 --- a/pkgs/development/python-modules/langchain-protocol/default.nix +++ b/pkgs/development/python-modules/langchain-protocol/default.nix @@ -8,14 +8,14 @@ buildPythonPackage (finalAttrs: { pname = "langchain-protocol"; - version = "0.0.15"; + version = "0.0.16"; pyproject = true; # Not available vis Github yet; required by langchain-core src = fetchPypi { pname = "langchain_protocol"; inherit (finalAttrs) version; - hash = "sha256-mrLRHuc5RHVPEOA35xcJjTpnlvDlivqcrdphVOdlWt4="; + hash = "sha256-gGx83ZUbHE9pL6QPzmCCH/DyIdQ2DidnPd8sK5nCt/8="; }; build-system = [ From 1ac3c5dc9969eb532bc5fb22bfedaa4f2b4293c0 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Fri, 17 Apr 2026 10:57:19 +0200 Subject: [PATCH 063/149] nixos/shadow: use file capabilities for newuidmap/newgidmap Writing a multi-line /proc//[ug]id_map only requires CAP_SETUID/CAP_SETGID over the parent user namespace, not full root. shadow's own --with-fcaps install mode (70971457b761) sets exactly cap_setuid+ep / cap_setgid+ep, and Arch, Fedora and Debian have shipped these binaries with file capabilities instead of setuid for years. The setuid variant already drops to the same single capability before the uid_map write (see lib/idmapping.c), so the privilege at the point attacker-controlled data reaches the kernel is unchanged. The reduction is in the startup window: with file capabilities the process never has euid 0 and never holds the full capability set during NSS lookups, /etc/subuid parsing and /proc/ opening. The only functional difference is that mapping host uid 0 into a child namespace additionally needs CAP_SETFCAP, which the setuid path got implicitly. NixOS never puts uid 0 into auto-allocated subuid ranges, and granting it manually is a deliberate root-equivalent configuration; the release notes document the override for that case. nixosTests.{shadow,podman,docker-rootless} pass; the latter two exercise newuidmap/newgidmap via rootless containers. Supersedes #461172. Co-authored-by: Rasheeq Azad --- nixos/doc/manual/release-notes/rl-2611.section.md | 2 +- nixos/modules/programs/shadow.nix | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2611.section.md b/nixos/doc/manual/release-notes/rl-2611.section.md index 798e204a578d..d94e2419c116 100644 --- a/nixos/doc/manual/release-notes/rl-2611.section.md +++ b/nixos/doc/manual/release-notes/rl-2611.section.md @@ -24,4 +24,4 @@ -- Create the first release note entry in this section! +- The `newuidmap` and `newgidmap` security wrappers are now installed with `cap_setuid`/`cap_setgid` file capabilities instead of the setuid-root bit, matching shadow's `--with-fcaps` install mode and other major distributions. Rootless containers (podman, docker-rootless, unprivileged user namespaces) are unaffected. The only behavioural change is that mapping host uid 0 via `/etc/subuid` (which NixOS never configures by default) additionally requires `cap_setfcap`; users who explicitly grant uid 0 in a subuid range can restore the previous behaviour with `security.wrappers.newuidmap.capabilities = lib.mkForce "cap_setuid,cap_setfcap+ep";`. diff --git a/nixos/modules/programs/shadow.nix b/nixos/modules/programs/shadow.nix index d179283ac559..3c53531d90f7 100644 --- a/nixos/modules/programs/shadow.nix +++ b/nixos/modules/programs/shadow.nix @@ -267,13 +267,22 @@ in group = "root"; inherit source; }; + mkCapRoot = capabilities: source: { + inherit capabilities source; + owner = "root"; + group = "root"; + }; in { su = mkSetuidRoot "${config.security.shadow.su.package}/bin/su"; sg = mkSetuidRoot "${cfg.package.out}/bin/sg"; newgrp = mkSetuidRoot "${cfg.package.out}/bin/newgrp"; - newuidmap = mkSetuidRoot "${cfg.package.out}/bin/newuidmap"; - newgidmap = mkSetuidRoot "${cfg.package.out}/bin/newgidmap"; + # File capabilities instead of setuid root, mirroring shadow's + # own --with-fcaps install mode and what Arch/Fedora/Debian ship. + # The kernel only requires CAP_SETUID/CAP_SETGID over the parent + # userns to write a multi-line /proc//[ug]id_map. + newuidmap = mkCapRoot "cap_setuid+ep" "${cfg.package.out}/bin/newuidmap"; + newgidmap = mkCapRoot "cap_setgid+ep" "${cfg.package.out}/bin/newgidmap"; } // lib.optionalAttrs config.users.mutableUsers { chsh = mkSetuidRoot "${cfg.package.out}/bin/chsh"; From 331748b1e9d1ade26aa3ab09dbfc632949df2273 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 21:26:40 +0000 Subject: [PATCH 064/149] python3Packages.imgsize: 4.0.1 -> 4.0.2 --- pkgs/development/python-modules/imgsize/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/python-modules/imgsize/default.nix b/pkgs/development/python-modules/imgsize/default.nix index a9b3a1b4432b..7668497f2110 100644 --- a/pkgs/development/python-modules/imgsize/default.nix +++ b/pkgs/development/python-modules/imgsize/default.nix @@ -8,19 +8,19 @@ buildPythonPackage rec { pname = "imgsize"; - version = "4.0.1"; + version = "4.0.2"; pyproject = true; src = fetchFromGitHub { owner = "ojii"; repo = "imgsize"; tag = version; - sha256 = "sha256-Cm6dywl9QOtF8qZ3L/XHCeNf3mU1ki5l8RUpWQilBPw="; + sha256 = "sha256-pHLYDC3UjrCKOdfgo2OreE5hGyIyWVSIsQR6piJZe6k="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit pname version src; - hash = "sha256-8vSBsnNqvHlbSj7m09U9fqBMRHnC2qtpMtWp2KYGA08="; + hash = "sha256-AXBd6cCpBVEYnU/uqynnO8wsVypV34r023kwzwSsbe4="; }; nativeBuildInputs = [ From 93d8842c937430b3dfcdf2c4a71ff9872f431896 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 21:41:36 +0000 Subject: [PATCH 065/149] vscode-extensions.cweijan.vscode-database-client2: 8.4.6 -> 8.4.7 --- pkgs/applications/editors/vscode/extensions/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/vscode/extensions/default.nix b/pkgs/applications/editors/vscode/extensions/default.nix index 90e532d1ed90..5d5ad9c106de 100644 --- a/pkgs/applications/editors/vscode/extensions/default.nix +++ b/pkgs/applications/editors/vscode/extensions/default.nix @@ -1145,8 +1145,8 @@ let mktplcRef = { name = "vscode-database-client2"; publisher = "cweijan"; - version = "8.4.6"; - hash = "sha256-GBz0hS75VgfuGuHY/K/VHxp5sFptUCJaz/CXrm6wFPc="; + version = "8.4.7"; + hash = "sha256-HiyLNVtdJgzwn6BSR4ojHOkLrQ49PhRQa4twst69j7Q="; }; meta = { description = "Database Client For Visual Studio Code"; From ca3808788d497e238c495e81285200eb5d8821a0 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 23:08:49 +0000 Subject: [PATCH 066/149] python3Packages.llama-stack-client: 0.7.2 -> 0.7.4 --- .../development/python-modules/llama-stack-client/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/llama-stack-client/default.nix b/pkgs/development/python-modules/llama-stack-client/default.nix index 176d1f26cd39..267d487befe4 100644 --- a/pkgs/development/python-modules/llama-stack-client/default.nix +++ b/pkgs/development/python-modules/llama-stack-client/default.nix @@ -32,13 +32,13 @@ buildPythonPackage (finalAttrs: { pname = "llama-stack-client"; - version = "0.7.2"; + version = "0.7.4"; pyproject = true; src = fetchPypi { pname = "llama_stack_client"; inherit (finalAttrs) version; - hash = "sha256-DjRYgAr2oY/Y/F4HYO1iaTGkFvbB/fJK66QAHm/Kmuw="; + hash = "sha256-SxPWXuH1ob5eYoZyWWs2YWsyElJufS28QXnby2hgwWc="; }; postPatch = '' From 3cb9a8deaca2e22ddc9fd25d9719b22e3f0d5452 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 23:17:55 +0000 Subject: [PATCH 067/149] mpvScripts.videoclip: 0.2-unstable-2026-01-22 -> 0.2-unstable-2026-05-31 --- pkgs/by-name/mp/mpv/scripts/videoclip.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/mp/mpv/scripts/videoclip.nix b/pkgs/by-name/mp/mpv/scripts/videoclip.nix index 2669a7831aef..762bc7400eca 100644 --- a/pkgs/by-name/mp/mpv/scripts/videoclip.nix +++ b/pkgs/by-name/mp/mpv/scripts/videoclip.nix @@ -10,13 +10,13 @@ }: buildLua { pname = "videoclip"; - version = "0.2-unstable-2026-01-22"; + version = "0.2-unstable-2026-05-31"; src = fetchFromGitHub { owner = "Ajatt-Tools"; repo = "videoclip"; - rev = "4856934684e4490fc0cab0b58054eac5f07754d7"; - hash = "sha256-JQGPiVRMPZa4AkxqrNlTzC2QnJ4/kQov01nIcUuFy6I="; + rev = "d9a3e0966b238b824b86767956eb44a11ac367c6"; + hash = "sha256-NZaflGehxoIf9eY3/p9WrKXXQj3x6GDZ6iMLeu5BhPc="; }; patchPhase = '' From 442c7b8bb94570a47b678b004a401fef0197b52d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Sun, 31 May 2026 16:14:35 -0700 Subject: [PATCH 068/149] glslang: add meta.changelog --- pkgs/by-name/gl/glslang/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/gl/glslang/package.nix b/pkgs/by-name/gl/glslang/package.nix index 3af77636355d..fc06faf61314 100644 --- a/pkgs/by-name/gl/glslang/package.nix +++ b/pkgs/by-name/gl/glslang/package.nix @@ -84,6 +84,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { inherit (finalAttrs.src.meta) homepage; + changelog = "https://github.com/KhronosGroup/glslang/blob/${finalAttrs.src.tag}/CHANGES.md"; description = "Khronos reference front-end for GLSL and ESSL"; license = lib.licenses.asl20; platforms = lib.platforms.unix; From 418d9575993e97bf56ea13597c9dc443026bf092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 1 Jun 2026 01:02:32 +0200 Subject: [PATCH 069/149] asn1ate: update source to resolve redirection --- pkgs/development/python-modules/asn1ate/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/asn1ate/default.nix b/pkgs/development/python-modules/asn1ate/default.nix index 31fa4a7b2743..0a54896521f0 100644 --- a/pkgs/development/python-modules/asn1ate/default.nix +++ b/pkgs/development/python-modules/asn1ate/default.nix @@ -13,7 +13,7 @@ buildPythonPackage rec { src = fetchFromGitHub { sha256 = "1p8hv4gsyqsdr0gafcq497n52pybiqmc22di8ai4nsj60fv0km45"; rev = "v${version}"; - owner = "kimgr"; + owner = "schneider-electric"; repo = "asn1ate"; }; @@ -21,6 +21,7 @@ buildPythonPackage rec { meta = { description = "Python library for translating ASN.1 into other forms"; + homepage = "https://github.com/schneider-electric/asn1ate"; mainProgram = "asn1ate"; license = lib.licenses.bsd3; platforms = lib.platforms.unix; From f015bef5e3576897994d44326e713d917b10e199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 1 Jun 2026 01:02:32 +0200 Subject: [PATCH 070/149] ctrtool: update source to resolve redirection --- pkgs/by-name/ct/ctrtool/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/ct/ctrtool/package.nix b/pkgs/by-name/ct/ctrtool/package.nix index eabfba7e4c8e..251cba277c33 100644 --- a/pkgs/by-name/ct/ctrtool/package.nix +++ b/pkgs/by-name/ct/ctrtool/package.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation (finalAttrs: { version = "1.3.0"; src = fetchFromGitHub { - owner = "jakcron"; + owner = "3DSGuy"; repo = "Project_CTR"; rev = "ctrtool-v${finalAttrs.version}"; sha256 = "GvEzv97DqCsaDWVqDpajQRWYe+WM8xCYmGE0D3UcSrM="; @@ -37,6 +37,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { license = lib.licenses.mit; description = "Tool to extract data from a 3ds rom"; + homepage = "https://github.com/3DSGuy/Project_CTR"; platforms = with lib.platforms; linux ++ darwin; maintainers = with lib.maintainers; [ marius851000 ]; mainProgram = "ctrtool"; From 35c045f7e0fc1d4fb1dae460d9fd7f2ea21a6efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 1 Jun 2026 01:02:32 +0200 Subject: [PATCH 071/149] nbxplorer: update source to resolve redirection --- pkgs/by-name/nb/nbxplorer/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/nb/nbxplorer/package.nix b/pkgs/by-name/nb/nbxplorer/package.nix index 41e649390c39..0bab98085f76 100644 --- a/pkgs/by-name/nb/nbxplorer/package.nix +++ b/pkgs/by-name/nb/nbxplorer/package.nix @@ -10,7 +10,7 @@ buildDotnetModule rec { version = "2.6.0"; src = fetchFromGitHub { - owner = "dgarage"; + owner = "btcpayserver"; repo = "NBXplorer"; tag = "v${version}"; hash = "sha256-X1+UdsKVOC3QpES22p0MG1Rz1oresilBM+b/4I1nCyI="; @@ -29,6 +29,7 @@ buildDotnetModule rec { meta = { description = "Minimalist UTXO tracker for HD Cryptocurrency Wallets"; + homepage = "https://github.com/btcpayserver/NBXplorer"; maintainers = with lib.maintainers; [ kcalvinalvin erikarvstedt From 048325cce322d34c22a56165dad2eec40c3e3e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 1 Jun 2026 01:02:32 +0200 Subject: [PATCH 072/149] physlock: update source to resolve redirection --- pkgs/by-name/ph/physlock/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/ph/physlock/package.nix b/pkgs/by-name/ph/physlock/package.nix index 9df8771e3fdf..7d484d4d4c5a 100644 --- a/pkgs/by-name/ph/physlock/package.nix +++ b/pkgs/by-name/ph/physlock/package.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation (finalAttrs: { version = "13"; pname = "physlock"; src = fetchFromGitHub { - owner = "muennich"; + owner = "xyb3rt"; repo = "physlock"; rev = "v${finalAttrs.version}"; sha256 = "1mz4xxjip5ldiw9jgfq9zvqb6w10bcjfx6939w1appqg8f521a7s"; @@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Secure suspend/hibernate-friendly alternative to `vlock -an`"; + homepage = "https://github.com/xyb3rt/physlock"; mainProgram = "physlock"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.linux; From 84914467e83a26ac57cc1acc34f546851e7094a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Mon, 1 Jun 2026 01:02:32 +0200 Subject: [PATCH 073/149] syntex: update source to resolve redirection --- pkgs/by-name/sy/syntex/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/sy/syntex/package.nix b/pkgs/by-name/sy/syntex/package.nix index faf7257de051..535717fea4ea 100644 --- a/pkgs/by-name/sy/syntex/package.nix +++ b/pkgs/by-name/sy/syntex/package.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation { version = "0.0pre20160915"; src = fetchFromGitHub { owner = "mxgmn"; - repo = "SynTex"; + repo = "TextureSynthesis"; rev = "f499a7c8112be4a63eb44843ba72957c2c9a04db"; sha256 = "13fz6frlxsdz8qq94fsvim27cd5klmdsax5109yxm9175vgvpa0a"; }; @@ -31,6 +31,7 @@ stdenv.mkDerivation { buildInputs = [ mono ]; meta = { description = "Texture synthesis from examples"; + homepage = "https://github.com/mxgmn/TextureSynthesis"; license = lib.licenses.mit; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; From 131c13b48eab8179a756768c66b0c7d48e1deb2b Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 31 May 2026 23:32:57 +0000 Subject: [PATCH 074/149] pi-coding-agent: 0.75.4 -> 0.78.0 --- pkgs/by-name/pi/pi-coding-agent/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/pi/pi-coding-agent/package.nix b/pkgs/by-name/pi/pi-coding-agent/package.nix index e37c769445f7..05a9ce5246de 100644 --- a/pkgs/by-name/pi/pi-coding-agent/package.nix +++ b/pkgs/by-name/pi/pi-coding-agent/package.nix @@ -12,16 +12,16 @@ }: buildNpmPackage (finalAttrs: { pname = "pi-coding-agent"; - version = "0.75.4"; + version = "0.78.0"; src = fetchFromGitHub { owner = "earendil-works"; repo = "pi"; tag = "v${finalAttrs.version}"; - hash = "sha256-zyIgs2N7uVz+7E+NqxH78baRw0OwXvlrjZiDIP/v0M4="; + hash = "sha256-Cw+W5w6yuL+cH+JfgCbEwiyeXloMb7yFd46TXJPZGTg="; }; - npmDepsHash = "sha256-5Vl+0BBUS7Rtb6XqpGKbbNMyh+9UX2aAsgtn60QLX7A="; + npmDepsHash = "sha256-TxMiT7nJqLZRXKFoxb4FpsETGe3I99qU7olTgNsoQd4="; npmWorkspace = "packages/coding-agent"; From ba698bbb48719a4b7e286bd6cdb167995f80fa93 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 00:32:48 +0000 Subject: [PATCH 075/149] python3Packages.libipld: 3.3.2 -> 3.4.1 --- pkgs/development/python-modules/libipld/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/python-modules/libipld/default.nix b/pkgs/development/python-modules/libipld/default.nix index 0de4688cd0ea..c4a0c6545a0d 100644 --- a/pkgs/development/python-modules/libipld/default.nix +++ b/pkgs/development/python-modules/libipld/default.nix @@ -17,18 +17,18 @@ buildPythonPackage rec { pname = "libipld"; - version = "3.3.2"; + version = "3.4.1"; pyproject = true; # use pypi, GitHub does not include Cargo.lock src = fetchPypi { inherit pname version; - hash = "sha256-foXM2RNhEOY5Q9lSMrGTyJPjacQGJz0jUWDlzEs5yc4="; + hash = "sha256-XTT8j5DJVDIPyn/vEg5f6a9Y+2dP9yNfJ4cDZN5sEG8="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit src; - hash = "sha256-BtFIX6xCJWBkIOzYEr8XohA1jsXC9rhiaMd87pe101w="; + hash = "sha256-8DYIiX/lFGYz/4+vWgoYTsV5L3O7rulof6UomrulbeM="; }; build-system = [ From c682ad3da53172d501ea47baebd4671c55063921 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 00:36:31 +0000 Subject: [PATCH 076/149] libcdada: 0.6.1 -> 0.6.4 --- pkgs/by-name/li/libcdada/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libcdada/package.nix b/pkgs/by-name/li/libcdada/package.nix index 4031d35844c5..a9b01e438d20 100644 --- a/pkgs/by-name/li/libcdada/package.nix +++ b/pkgs/by-name/li/libcdada/package.nix @@ -7,13 +7,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "libcdada"; - version = "0.6.1"; + version = "0.6.4"; src = fetchFromGitHub { owner = "msune"; repo = "libcdada"; rev = "v${finalAttrs.version}"; - hash = "sha256-x//22FvgxIGL9H2whMAVCTyI9gAjlMWkEmpOAcoeOgE="; + hash = "sha256-z4Nr0jE+nuBmLirbHnC98GlXV0n9j09ps7uWgOLN9nM="; }; nativeBuildInputs = [ From b59952e5239ca943c2a36cd63f36eaa08f3099eb Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 13:48:49 +0100 Subject: [PATCH 077/149] =?UTF-8?q?lib/systems:=20don=E2=80=99t=20specify?= =?UTF-8?q?=20`multi=5Fv7=5Fdefconfig`=20explicitly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This has been the default for `defconfig` upstream since 32872c04ffd5a855c43802c5aa76c711eb021948, which is in all our supported kernels. --- lib/systems/platforms.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index ae78b4edc9d4..a9c70cad19f9 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -306,7 +306,7 @@ rec { linux-kernel = { name = "armv7l-hf-multiplatform"; Major = "2.6"; # Using "2.6" enables 2.6 kernel syscalls in glibc. - baseConfig = "multi_v7_defconfig"; + baseConfig = "defconfig"; DTB = true; autoModules = true; preferBuiltin = true; From 53f91beef8956255656ed88407afb5a1f61ca5ea Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 15:03:38 +0100 Subject: [PATCH 078/149] lib/systems: remove unused `linux-kernel.Major` field --- lib/systems/platforms.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index a9c70cad19f9..91fcbe3862e4 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -305,7 +305,6 @@ rec { armv7l-hf-multiplatform = { linux-kernel = { name = "armv7l-hf-multiplatform"; - Major = "2.6"; # Using "2.6" enables 2.6 kernel syscalls in glibc. baseConfig = "defconfig"; DTB = true; autoModules = true; From c76c290c147b7b5b4695e18cad4b773e520b8c42 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 13:44:01 +0100 Subject: [PATCH 079/149] lib/systems: remove redundant kernel configuration These are now already set upstream and should result in no change, even for the Raspberry Pi vendor kernels. --- lib/systems/platforms.nix | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index 91fcbe3862e4..d35bea4dd469 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -192,11 +192,6 @@ rec { DTB = true; autoModules = true; preferBuiltin = true; - extraConfig = '' - # Disable OABI to have seccomp_filter (required for systemd) - # https://github.com/raspberrypi/firmware/issues/651 - OABI_COMPAT n - ''; target = "zImage"; }; gcc = { @@ -311,19 +306,6 @@ rec { preferBuiltin = true; target = "zImage"; extraConfig = '' - # Serial port for Raspberry Pi 3. Wasn't included in ARMv7 defconfig - # until 4.17. - SERIAL_8250_BCM2835AUX y - SERIAL_8250_EXTENDED y - SERIAL_8250_SHARE_IRQ y - - # Hangs ODROID-XU4 - ARM_BIG_LITTLE_CPUIDLE n - - # Disable OABI to have seccomp_filter (required for systemd) - # https://github.com/raspberrypi/firmware/issues/651 - OABI_COMPAT n - # >=5.12 fails with: # drivers/net/ethernet/micrel/ks8851_common.o: in function `ks8851_probe_common': # ks8851_common.c:(.text+0x179c): undefined reference to `__this_module' @@ -362,22 +344,6 @@ rec { autoModules = true; preferBuiltin = true; extraConfig = '' - # Raspberry Pi 3 stuff. Not needed for s >= 4.10. - ARCH_BCM2835 y - BCM2835_MBOX y - BCM2835_WDT y - RASPBERRYPI_FIRMWARE y - RASPBERRYPI_POWER y - SERIAL_8250_BCM2835AUX y - SERIAL_8250_EXTENDED y - SERIAL_8250_SHARE_IRQ y - - # Cavium ThunderX stuff. - PCI_HOST_THUNDER_ECAM y - - # Nvidia Tegra stuff. - PCI_TEGRA y - # The default (=y) forces us to have the XHCI firmware available in initrd, # which our initrd builder can't currently do easily. USB_XHCI_TEGRA m From d408bc4f02ecb5a9ee338f6b469834000e7dd6b9 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 13:45:38 +0100 Subject: [PATCH 080/149] lib/systems: remove obsolete `KS8851_MLL` workaround MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was fixed by 51bb08dd04a05035a64504faa47651d36b0f3125 upstream, which is in all our supported kernels ≥ 5.12. --- lib/systems/platforms.nix | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index d35bea4dd469..c3ad042dd9d5 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -305,13 +305,6 @@ rec { autoModules = true; preferBuiltin = true; target = "zImage"; - extraConfig = '' - # >=5.12 fails with: - # drivers/net/ethernet/micrel/ks8851_common.o: in function `ks8851_probe_common': - # ks8851_common.c:(.text+0x179c): undefined reference to `__this_module' - # See: https://lore.kernel.org/netdev/20210116164828.40545-1-marex@denx.de/T/ - KS8851_MLL y - ''; }; gcc = { # Some table about fpu flags: From 9c5ca61078405508747011d179690de59d587bdf Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 24 Jun 2025 16:48:12 +0100 Subject: [PATCH 081/149] lib/systems: remove broken kernel configurations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit None of these successfully build a kernel, and as we’re moving away from putting kernel configuration in the platform structure and don’t package the vendor kernels that all but `fuloong2f_n32` expect, there’s no point to keeping these kernel configurations in Nixpkgs. --- lib/systems/platforms.nix | 104 -------------------------------------- 1 file changed, 104 deletions(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index c3ad042dd9d5..5722fe87909d 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -212,15 +212,6 @@ rec { }; zero-gravitas = { - linux-kernel = { - name = "zero-gravitas"; - - baseConfig = "zero-gravitas_defconfig"; - # Target verified by checking /boot on reMarkable 1 device - target = "zImage"; - autoModules = false; - DTB = true; - }; gcc = { fpu = "neon"; cpu = "cortex-a9"; @@ -228,15 +219,6 @@ rec { }; zero-sugar = { - linux-kernel = { - name = "zero-sugar"; - - baseConfig = "zero-sugar_defconfig"; - DTB = true; - autoModules = false; - preferBuiltin = true; - target = "zImage"; - }; gcc = { cpu = "cortex-a7"; fpu = "neon-vfpv4"; @@ -269,24 +251,6 @@ rec { }; }; - guruplug = lib.recursiveUpdate sheevaplug { - # Define `CONFIG_MACH_GURUPLUG' (see - # ) - # and other GuruPlug-specific things. Requires the `guruplug-defconfig' - # patch. - linux-kernel.baseConfig = "guruplug_defconfig"; - }; - - beaglebone = lib.recursiveUpdate armv7l-hf-multiplatform { - linux-kernel = { - name = "beaglebone"; - baseConfig = "bb.org_defconfig"; - autoModules = false; - extraConfig = ""; # TBD kernel config - target = "zImage"; - }; - }; - # https://developer.android.com/ndk/guides/abis#v7a armv7a-android = { linux-kernel.name = "armeabi-v7a"; @@ -370,74 +334,6 @@ rec { }; fuloong2f_n32 = { - linux-kernel = { - name = "fuloong2f_n32"; - baseConfig = "lemote2f_defconfig"; - autoModules = false; - extraConfig = '' - MIGRATION n - COMPACTION n - - # nixos mounts some cgroup - CGROUPS y - - BLK_DEV_RAM y - BLK_DEV_INITRD y - BLK_DEV_CRYPTOLOOP m - BLK_DEV_DM m - DM_CRYPT m - MD y - EXT4_FS m - USB_STORAGE_CYPRESS_ATACB m - - IP_PNP y - IP_PNP_DHCP y - IP_PNP_BOOTP y - NFS_FS y - ROOT_NFS y - TUN m - NFS_V4 y - NFS_V4_1 y - NFS_FSCACHE y - NFSD m - NFSD_V2_ACL y - NFSD_V3 y - NFSD_V3_ACL y - NFSD_V4 y - - # Fail to build - DRM n - SCSI_ADVANSYS n - USB_ISP1362_HCD n - SND_SOC n - SND_ALI5451 n - FB_SAVAGE n - SCSI_NSP32 n - ATA_SFF n - SUNGEM n - IRDA n - ATM_HE n - SCSI_ACARD n - BLK_DEV_CMD640_ENHANCED n - - FUSE_FS m - - # Needed for udev >= 150 - SYSFS_DEPRECATED_V2 n - - VGA_CONSOLE n - VT_HW_CONSOLE_BINDING y - SERIAL_8250_CONSOLE y - FRAMEBUFFER_CONSOLE y - EXT2_FS y - EXT3_FS y - MAGIC_SYSRQ y - - # The kernel doesn't boot at all, with FTRACE - FTRACE n - ''; - target = "vmlinux"; - }; gcc = { arch = "loongson2f"; float = "hard"; From af6485561c479599e1091b8aa9a7b6cb23d14aa4 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 24 Jun 2025 15:41:57 +0100 Subject: [PATCH 082/149] lib/systems: remove unused platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These were not used by the selection logic or `lib/systems/examples.nix`, so any consumer would have to be including them explicitly. Since we’re moving away from setting Linux kernel configuration in the platform structure, breaking these explictily won’t reduce the convenience and will help signal to any such expert users that they need to move their kernel configuration elsewhere. --- lib/systems/platforms.nix | 54 --------------------------------------- 1 file changed, 54 deletions(-) diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index 5722fe87909d..ee220ce31cf2 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -226,31 +226,6 @@ rec { }; }; - utilite = { - linux-kernel = { - name = "utilite"; - maseConfig = "multi_v7_defconfig"; - autoModules = false; - extraConfig = '' - # Ubi for the mtd - MTD_UBI y - UBIFS_FS y - UBIFS_FS_XATTR y - UBIFS_FS_ADVANCED_COMPR y - UBIFS_FS_LZO y - UBIFS_FS_ZLIB y - UBIFS_FS_DEBUG n - ''; - makeFlags = [ "LOADADDR=0x10800000" ]; - target = "uImage"; - DTB = true; - }; - gcc = { - cpu = "cortex-a9"; - fpu = "neon"; - }; - }; - # https://developer.android.com/ndk/guides/abis#v7a armv7a-android = { linux-kernel.name = "armeabi-v7a"; @@ -379,35 +354,6 @@ rec { }; }; - # based on: - # https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html - # https://gmplib.org/~tege/qemu.html#mips64-debian - mips64el-qemu-linux-gnuabi64 = { - linux-kernel = { - name = "mips64el"; - baseConfig = "64r2el_defconfig"; - target = "vmlinuz"; - autoModules = false; - DTB = true; - # for qemu 9p passthrough filesystem - extraConfig = '' - MIPS_MALTA y - PAGE_SIZE_4KB y - CPU_LITTLE_ENDIAN y - CPU_MIPS64_R2 y - 64BIT y - CPU_MIPS64_R2 y - - NET_9P y - NET_9P_VIRTIO y - 9P_FS y - 9P_FS_POSIX_ACL y - PCI y - VIRTIO_PCI y - ''; - }; - }; - ## ## Other ## From 0c19eb3e5559a9e27a3402dda4357d0cd2b58dae Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 24 Jun 2025 18:56:51 +0100 Subject: [PATCH 083/149] lib/systems: unify ARMv5 platforms with stock kernel configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `sheevaplug` kernel configuration was added a very long time ago and has not been adjusted for years. `pogoplug4` was identical to `sheevaplug` except for an even more stripped‐down kernel configuration, no device tree support, and a different load address for the uImage. These days, the stock kernel configuration builds and there has been an upstream device tree for the Pogoplug Series 4 for years; unify `sheevaplug` and `pogoplug4` into an `armv5tel-multiplatform` that uses the standard configuration. ARMv5 was also the only platform that defaulted to uImage, the [legacy U‐Boot image format] that is deprecated upstream. Our bootloader machinery in NixOS does not handle these images in any special way and even the original ARMv6 Raspberry Pi platform defaults to the standard zImage. We switch `armv5tel-multiplatform` to zImage to match. [legacy U‐Boot image format]: https://docs.u-boot.org/en/latest/usage/cmd/bootm.html#legacy-boot It is of course natural to worry about backwards compatibility here: this switches to a different kernel image format and drops support for root on NFS along with random oddities like KGDB and LatencyTOP. Renaming the platform is intended to help mitigate this risk. The reality, however, is that it is currently very difficult to build a configuration for ARMv5. I found online as an example configuration from many years ago; it already set `autoModules`, and builds U‐Boot using `CONFIG_DISTRO_DEFAULTS`, which should work out of the box without requiring the legacy U‐Boot image format. Even then, however, I confirmed with the author that it hasn’t been used in years, and I could barely get it to build with a modern Nixpkgs: OpenSSH is broken, Nix is broken, multiple default `environment.systemPackages` in the SD image profile are broken, `boot.initrd.includeDefaultModules` is broken, and `hardware.enableAllHardware` is broken. I conclude that if anyone is actively building systems on ARMv5, they have a forked Nixpkgs or a very custom setup. Given our general move to standard boot chains and no platform‐specific hacks, and the decaying state of our unofficial support for 32‐bit ARM, I think it is not worth maintaining support for the legacy image format for this one ancient platform. If anyone is running a heavily stripped‐down NixOS configuration on mission‐critical SheevaPlugs using a custom Nix‐free deployment setup relying on the legacy U‐Boot image format and somehow none of these kernel changes manage to loudly break their build, hopefully they’ll at least notice the release notes entry! Otherwise there’s always JTAG… --- doc/release-notes/rl-2611.section.md | 4 + lib/systems/examples.nix | 10 +- lib/systems/platforms.nix | 137 +----------------- .../linux/make-bootstrap-tools-cross.nix | 2 +- pkgs/test/cross/default.nix | 2 +- pkgs/top-level/release-cross.nix | 6 +- 6 files changed, 17 insertions(+), 144 deletions(-) diff --git a/doc/release-notes/rl-2611.section.md b/doc/release-notes/rl-2611.section.md index 6aa19f0952b7..4b36a630421d 100644 --- a/doc/release-notes/rl-2611.section.md +++ b/doc/release-notes/rl-2611.section.md @@ -19,6 +19,10 @@ - `uhttpmock` providing 0.0 ABI was removed. `uhttpmock_1_0` providing 1.0 ABI was renamed to `uhttpmock` and `uhttpmock_1_0` was kept as an alias. +- The ARMv5 Linux kernel build now uses a standard configuration and generates a standard compressed image instead of the deprecated legacy U‐Boot image format. + `lib.systems.{examples,platforms}.{sheevaplug,pogoplug4}` have been unified into `lib.systems.examples.armv5tel-multiplatform`. + Note that there is no official support for ARMv5 and it is not possible to build even a simple NixOS configuration out of the box. + - `requireFile` now sets `meta.license = lib.licenses.unfree` by default. Users of `requireFile`-based derivations that preserve this default will need to explicitly allow their evaluation as described in [](#sec-allow-unfree). - `librest` providing 0.7 ABI was removed. `librest_1_0` providing 1.0 ABI was renamed to `librest` and `librest_1_0` was kept as an alias. diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix index 18c954ffc06e..055f727d53c9 100644 --- a/lib/systems/examples.nix +++ b/lib/systems/examples.nix @@ -40,10 +40,9 @@ rec { rust.rustcTarget = "powerpc-unknown-linux-gnu"; }; - sheevaplug = { + armv5tel-multiplatform = { config = "armv5tel-unknown-linux-gnueabi"; - } - // platforms.sheevaplug; + }; raspberryPi = { config = "armv6l-unknown-linux-gnueabihf"; @@ -99,11 +98,6 @@ rec { useLLVM = true; }; - pogoplug4 = { - config = "armv5tel-unknown-linux-gnueabi"; - } - // platforms.pogoplug4; - ben-nanonote = { config = "mipsel-unknown-linux-uclibc"; } diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index ee220ce31cf2..b10c787728a0 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -46,138 +46,15 @@ rec { ## ARM ## - pogoplug4 = { + armv5tel-multiplatform = { linux-kernel = { - name = "pogoplug4"; + name = "armv5tel-multiplatform"; baseConfig = "multi_v5_defconfig"; - autoModules = false; - extraConfig = '' - # Ubi for the mtd - MTD_UBI y - UBIFS_FS y - UBIFS_FS_XATTR y - UBIFS_FS_ADVANCED_COMPR y - UBIFS_FS_LZO y - UBIFS_FS_ZLIB y - UBIFS_FS_DEBUG n - ''; - makeFlags = [ "LOADADDR=0x8000" ]; - target = "uImage"; - # TODO reenable once manual-config's config actually builds a .dtb and this is checked to be working - #DTB = true; - }; - gcc = { - arch = "armv5te"; - }; - }; - - sheevaplug = { - linux-kernel = { - name = "sheevaplug"; - - baseConfig = "multi_v5_defconfig"; - autoModules = false; - extraConfig = '' - BLK_DEV_RAM y - BLK_DEV_INITRD y - BLK_DEV_CRYPTOLOOP m - BLK_DEV_DM m - DM_CRYPT m - MD y - BTRFS_FS m - XFS_FS m - JFS_FS m - EXT4_FS m - USB_STORAGE_CYPRESS_ATACB m - - # mv cesa requires this sw fallback, for mv-sha1 - CRYPTO_SHA1 y - # Fast crypto - CRYPTO_TWOFISH y - CRYPTO_TWOFISH_COMMON y - CRYPTO_BLOWFISH y - CRYPTO_BLOWFISH_COMMON y - - IP_PNP y - IP_PNP_DHCP y - NFS_FS y - ROOT_NFS y - TUN m - NFS_V4 y - NFS_V4_1 y - NFS_FSCACHE y - NFSD m - NFSD_V2_ACL y - NFSD_V3 y - NFSD_V3_ACL y - NFSD_V4 y - NETFILTER y - IP_NF_IPTABLES y - IP_NF_FILTER y - IP_NF_MATCH_ADDRTYPE y - IP_NF_TARGET_LOG y - IP_NF_MANGLE y - IPV6 m - VLAN_8021Q m - - CIFS y - CIFS_XATTR y - CIFS_POSIX y - CIFS_FSCACHE y - CIFS_ACL y - - WATCHDOG y - WATCHDOG_CORE y - ORION_WATCHDOG m - - ZRAM m - NETCONSOLE m - - # Disable OABI to have seccomp_filter (required for systemd) - # https://github.com/raspberrypi/firmware/issues/651 - OABI_COMPAT n - - # Fail to build - DRM n - SCSI_ADVANSYS n - USB_ISP1362_HCD n - SND_SOC n - SND_ALI5451 n - FB_SAVAGE n - SCSI_NSP32 n - ATA_SFF n - SUNGEM n - IRDA n - ATM_HE n - SCSI_ACARD n - BLK_DEV_CMD640_ENHANCED n - - FUSE_FS m - - # systemd uses cgroups - CGROUPS y - - # Latencytop - LATENCYTOP y - - # Ubi for the mtd - MTD_UBI y - UBIFS_FS y - UBIFS_FS_XATTR y - UBIFS_FS_ADVANCED_COMPR y - UBIFS_FS_LZO y - UBIFS_FS_ZLIB y - UBIFS_FS_DEBUG n - - # Kdb, for kernel troubles - KGDB y - KGDB_SERIAL_CONSOLE y - KGDB_KDB y - ''; - makeFlags = [ "LOADADDR=0x0200000" ]; - target = "uImage"; - DTB = true; # Beyond 3.10 + DTB = true; + autoModules = true; + preferBuiltin = true; + target = "zImage"; }; gcc = { arch = "armv5te"; @@ -407,7 +284,7 @@ rec { if version == null then pc else if lib.versionOlder version "6" then - sheevaplug + armv5tel-multiplatform else if lib.versionOlder version "7" then raspberrypi else diff --git a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix index d69cc836a19e..5b670400ef43 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix @@ -25,7 +25,7 @@ lib.mapAttrs (n: make) ( # on how to request an upload. # Sort following the sorting in `./default.nix` `bootstrapFiles` argument. - armv5tel-unknown-linux-gnueabi = sheevaplug; + armv5tel-unknown-linux-gnueabi = armv5tel-multiplatform; armv6l-unknown-linux-gnueabihf = raspberryPi; armv7l-unknown-linux-gnueabihf = armv7l-hf-multiplatform; aarch64-unknown-linux-gnu = aarch64-multiplatform; diff --git a/pkgs/test/cross/default.nix b/pkgs/test/cross/default.nix index c5320f72a4bc..b4a007fa17e2 100644 --- a/pkgs/test/cross/default.nix +++ b/pkgs/test/cross/default.nix @@ -189,7 +189,7 @@ let pkgs.pkgsLLVM.stdenv pkgs.pkgsStatic.bash pkgs.pkgsCross.arm-embedded.stdenv - pkgs.pkgsCross.sheevaplug.stdenv # for armv5tel + pkgs.pkgsCross.armv5tel-multiplatform.stdenv pkgs.pkgsCross.raspberryPi.stdenv # for armv6l pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv pkgs.pkgsCross.m68k.stdenv diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index e264d1cf8590..cc0ab49a8c40 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -197,8 +197,8 @@ in crossIphone32 = mapTestOnCross systems.examples.iphone32 darwinCommon; - # Test some cross builds to the Sheevaplug - crossSheevaplugLinux = mapTestOnCross systems.examples.sheevaplug ( + # Test some cross builds to ARMv5 + armv5tel = mapTestOnCross systems.examples.armv5tel-multiplatform ( linuxCommon // { ubootSheevaplug = nativePlatforms; @@ -235,8 +235,6 @@ in # Linux on armv7l-hf armv7l-hf = mapTestOnCross systems.examples.armv7l-hf-multiplatform linuxCommon; - pogoplug4 = mapTestOnCross systems.examples.pogoplug4 linuxCommon; - # Linux on aarch64 aarch64 = mapTestOnCross systems.examples.aarch64-multiplatform linuxCommon; aarch64-musl = mapTestOnCross systems.examples.aarch64-multiplatform-musl linuxCommon; From 38dec9fcff007aac9f36e596f0740ae0dcad63b7 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 13:08:36 +0100 Subject: [PATCH 084/149] =?UTF-8?q?makeInitrd{,NG}:=20drop=20legacy=20U?= =?UTF-8?q?=E2=80=90Boot=20image=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that ARMv5 no longer uses `uImage`, there’s no point in keeping around support for this deprecated format that the rest of the NixOS infrastructure doesn’t handle. Modern U‐Boot setups should not be affected in any way by this. --- .../manual/release-notes/rl-2611.section.md | 2 + .../kernel/initrd-compressor-meta.nix | 7 ---- pkgs/build-support/kernel/make-initrd-ng.nix | 38 +++++-------------- pkgs/build-support/kernel/make-initrd.nix | 33 +++++----------- pkgs/build-support/kernel/make-initrd.sh | 8 +--- 5 files changed, 21 insertions(+), 67 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2611.section.md b/nixos/doc/manual/release-notes/rl-2611.section.md index 798e204a578d..8397e17792cf 100644 --- a/nixos/doc/manual/release-notes/rl-2611.section.md +++ b/nixos/doc/manual/release-notes/rl-2611.section.md @@ -18,6 +18,8 @@ - `boot.vesa` has been removed. It was deprecated in 2020 because Xorg now works better with kernel modesetting. If you still need the legacy VESA 800x600 fallback, set `boot.kernelParams = [ "vga=0x317" "nomodeset" ];` directly. +- Support for the legacy U‐Boot image format has been removed from the initrd generators, as it is deprecated upstream and no longer used by any platform in Nixpkgs. + - Python 2 has been removed from the top-level package set, as it is long past end-of-life. The `python2`, `python27`, `python2Full`, `python27Full`, `python2Packages`, and `python27Packages` attributes, along with the legacy `python`, `pythonFull`, and `pythonPackages` aliases, now throw an error directing you to `python3`. The `isPy2` and `isPy27` package flags have been removed accordingly. The only remaining Python 2 interpreter is vendored inside the `resholve` package for its `oil` dependency and is not exposed for general use. ## Other Notable Changes {#sec-release-26.11-notable-changes} diff --git a/pkgs/build-support/kernel/initrd-compressor-meta.nix b/pkgs/build-support/kernel/initrd-compressor-meta.nix index 52e009967b50..728b9291627f 100644 --- a/pkgs/build-support/kernel/initrd-compressor-meta.nix +++ b/pkgs/build-support/kernel/initrd-compressor-meta.nix @@ -1,18 +1,15 @@ rec { cat = { executable = pkgs: "cat"; - ubootName = "none"; extension = ".cpio"; }; gzip = { executable = pkgs: "${pkgs.gzip}/bin/gzip"; defaultArgs = [ "-9n" ]; - ubootName = "gzip"; extension = ".gz"; }; bzip2 = { executable = pkgs: "${pkgs.bzip2}/bin/bzip2"; - ubootName = "bzip2"; extension = ".bz2"; }; xz = { @@ -29,24 +26,20 @@ rec { "--check=crc32" "--lzma1=dict=512KiB" ]; - ubootName = "lzma"; extension = ".lzma"; }; lz4 = { executable = pkgs: "${pkgs.lz4}/bin/lz4"; defaultArgs = [ "-l" ]; - ubootName = "lz4"; extension = ".lz4"; }; lzop = { executable = pkgs: "${pkgs.lzop}/bin/lzop"; - ubootName = "lzo"; extension = ".lzo"; }; zstd = { executable = pkgs: "${pkgs.zstd}/bin/zstd"; defaultArgs = [ "-10" ]; - ubootName = "zstd"; extension = ".zst"; }; pigz = gzip // { diff --git a/pkgs/build-support/kernel/make-initrd-ng.nix b/pkgs/build-support/kernel/make-initrd-ng.nix index 768af8f5c48d..8fe1f553c9ed 100644 --- a/pkgs/build-support/kernel/make-initrd-ng.nix +++ b/pkgs/build-support/kernel/make-initrd-ng.nix @@ -4,14 +4,13 @@ let # from it. compressors = import ./initrd-compressor-meta.nix; # Get the basename of the actual compression program from the whole - # compression command, for the purpose of guessing the u-boot + # compression command, for the purpose of guessing the # compression type and filename extension. compressorName = fullCommand: builtins.elemAt (builtins.match "([^ ]*/)?([^ ]+).*" fullCommand) 1; in { stdenvNoCC, cpio, - ubootTools, lib, pkgsBuildHost, makeInitrdNGTool, @@ -57,22 +56,13 @@ in # symlinks to store paths. prepend ? [ ], - # Whether to wrap the initramfs in a u-boot image. - makeUInitrd ? stdenvNoCC.hostPlatform.linux-kernel.target == "uImage", - - # If generating a u-boot image, the architecture to use. The default - # guess may not align with u-boot's nomenclature correctly, so it can - # be overridden. - # See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L81-106 for a list. - uInitrdArch ? stdenvNoCC.hostPlatform.ubootArch, - - # The name of the compression, as recognised by u-boot. - # See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L195-204 for a list. - # If this isn't guessed, you may want to complete the metadata above and send a PR :) - uInitrdCompression ? - _compressorMeta.ubootName - or (throw "Unrecognised compressor ${_compressorName}, please specify uInitrdCompression"), + # Deprecated; remove in 27.05. + makeUInitrd ? null, + uInitrdArch ? null, + uInitrdCompression ? null, }: +assert lib.assertMsg (makeUInitrd == null && uInitrdArch == null && uInitrdCompression == null) + "makeInitrdNg: U‐Boot legacy image support has been removed as it is deprecated upstream and ARMv5 kernels no longer default to uImage"; stdenvNoCC.mkDerivation (finalAttrs: { __structuredAttrs = true; @@ -83,11 +73,8 @@ stdenvNoCC.mkDerivation (finalAttrs: { inherit name extension - makeUInitrd - uInitrdArch prepend ; - ${if makeUInitrd then "uInitrdCompression" else null} = uInitrdCompression; compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}"; contentsJSON = builtins.toJSON contents; @@ -95,8 +82,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { nativeBuildInputs = [ makeInitrdNGTool cpio - ] - ++ lib.optional makeUInitrd ubootTools; + ]; buildCommand = '' mkdir -p ./root/{run,tmp,var/empty} @@ -109,13 +95,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { done (cd root && find . -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null | eval -- $compress >> "$out/initrd") - if [ -n "$makeUInitrd" ]; then - mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img - # Compatibility symlink - ln -sf "initrd.img" "$out/initrd" - else - ln -s "initrd" "$out/initrd$extension" - fi + ln -s "initrd" "$out/initrd$extension" ''; passthru = { diff --git a/pkgs/build-support/kernel/make-initrd.nix b/pkgs/build-support/kernel/make-initrd.nix index 364507ba8e7e..a6624486ffbe 100644 --- a/pkgs/build-support/kernel/make-initrd.nix +++ b/pkgs/build-support/kernel/make-initrd.nix @@ -10,18 +10,16 @@ # of algorithms. let # Some metadata on various compression programs, relevant to naming - # the initramfs file and, if applicable, generating a u-boot image - # from it. + # the initramfs file. compressors = import ./initrd-compressor-meta.nix; # Get the basename of the actual compression program from the whole - # compression command, for the purpose of guessing the u-boot + # compression command, for the purpose of guessing the # compression type and filename extension. compressorName = fullCommand: builtins.elemAt (builtins.match "([^ ]*/)?([^ ]+).*" fullCommand) 1; in { stdenvNoCC, cpio, - ubootTools, lib, pkgsBuildHost, # Name of the derivation (not of the resulting file!) @@ -65,22 +63,13 @@ in # symlinks to store paths. prepend ? [ ], - # Whether to wrap the initramfs in a u-boot image. - makeUInitrd ? stdenvNoCC.hostPlatform.linux-kernel.target or "dummy" == "uImage", - - # If generating a u-boot image, the architecture to use. The default - # guess may not align with u-boot's nomenclature correctly, so it can - # be overridden. - # See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L81-106 for a list. - uInitrdArch ? stdenvNoCC.hostPlatform.linuxArch, - - # The name of the compression, as recognised by u-boot. - # See https://gitlab.denx.de/u-boot/u-boot/-/blob/9bfb567e5f1bfe7de8eb41f8c6d00f49d2b9a426/common/image.c#L195-204 for a list. - # If this isn't guessed, you may want to complete the metadata above and send a PR :) - uInitrdCompression ? - _compressorMeta.ubootName - or (throw "Unrecognised compressor ${_compressorName}, please specify uInitrdCompression"), + # Deprecated; remove in 27.05. + makeUInitrd ? null, + uInitrdArch ? null, + uInitrdCompression ? null, }: +assert lib.assertMsg (makeUInitrd == null && uInitrdArch == null && uInitrdCompression == null) + "makeInitrd: U‐Boot legacy image support has been removed as it is deprecated upstream and ARMv5 kernels no longer default to uImage"; stdenvNoCC.mkDerivation (finalAttrs: { __structuredAttrs = true; @@ -91,18 +80,14 @@ stdenvNoCC.mkDerivation (finalAttrs: { inherit name extension - makeUInitrd - uInitrdArch prepend ; - ${if makeUInitrd then "uInitrdCompression" else null} = uInitrdCompression; builder = ./make-initrd.sh; nativeBuildInputs = [ cpio - ] - ++ lib.optional makeUInitrd ubootTools; + ]; compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}"; diff --git a/pkgs/build-support/kernel/make-initrd.sh b/pkgs/build-support/kernel/make-initrd.sh index f3bc977279b5..cc30ba0175db 100644 --- a/pkgs/build-support/kernel/make-initrd.sh +++ b/pkgs/build-support/kernel/make-initrd.sh @@ -36,10 +36,4 @@ done (cd root && find * .[^.*] -exec touch -h -d '@1' '{}' +) (cd root && find * .[^.*] -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null | eval -- $compress >> "$out/initrd") -if [ -n "$makeUInitrd" ]; then - mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img - # Compatibility symlink - ln -sf "initrd.img" "$out/initrd" -else - ln -s "initrd" "$out/initrd$extension" -fi +ln -s "initrd" "$out/initrd$extension" From efbf25d7576b1bb049499e0e5fa09ac120b2bae8 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 25 Jun 2025 13:11:53 +0100 Subject: [PATCH 085/149] linux: drop uImage support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that ARMv5 no longer uses `uImage`, there’s no point in keeping around support for this deprecated format that the rest of the NixOS infrastructure doesn’t handle. Modern U‐Boot setups should not be affected in any way by this. --- doc/release-notes/rl-2611.section.md | 2 ++ pkgs/os-specific/linux/kernel/build.nix | 33 ++----------------------- 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/doc/release-notes/rl-2611.section.md b/doc/release-notes/rl-2611.section.md index 4b36a630421d..1df5e6b9a01c 100644 --- a/doc/release-notes/rl-2611.section.md +++ b/doc/release-notes/rl-2611.section.md @@ -23,6 +23,8 @@ `lib.systems.{examples,platforms}.{sheevaplug,pogoplug4}` have been unified into `lib.systems.examples.armv5tel-multiplatform`. Note that there is no official support for ARMv5 and it is not possible to build even a simple NixOS configuration out of the box. +- Support for the legacy U‐Boot image format has been removed from the Linux kernel builders, as it is deprecated upstream and no longer used by any platform in Nixpkgs. + - `requireFile` now sets `meta.license = lib.licenses.unfree` by default. Users of `requireFile`-based derivations that preserve this default will need to explicitly allow their evaluation as described in [](#sec-allow-unfree). - `librest` providing 0.7 ABI was removed. `librest_1_0` providing 1.0 ABI was renamed to `librest` and `librest_1_0` was kept as an alias. diff --git a/pkgs/os-specific/linux/kernel/build.nix b/pkgs/os-specific/linux/kernel/build.nix index 04cbc24e9c02..23a08f5beaa4 100644 --- a/pkgs/os-specific/linux/kernel/build.nix +++ b/pkgs/os-specific/linux/kernel/build.nix @@ -19,7 +19,6 @@ zlib, pahole, kmod, - ubootTools, fetchpatch, rustc-unwrapped, rust-bindgen-unwrapped, @@ -116,31 +115,6 @@ lib.makeOverridable ( ; }; - # Folding in `ubootTools` in the default nativeBuildInputs is problematic, as - # it makes updating U-Boot cumbersome, since it will go above the current - # threshold of rebuilds - # - # To prevent these needless rounds of staging for U-Boot builds, we can - # limit the inclusion of ubootTools to target platforms where uImage *may* - # be produced. - # - # This command lists those (kernel-named) platforms: - # .../linux $ grep -l uImage ./arch/*/Makefile | cut -d'/' -f3 | sort - # - # This is still a guesstimation, but since none of our cached platforms - # coincide in that list, this gives us "perfect" decoupling here. - linuxPlatformsUsingUImage = [ - "arc" - "arm" - "csky" - "mips" - "powerpc" - "sh" - "sparc" - "xtensa" - ]; - needsUbootTools = lib.elem stdenv.hostPlatform.linuxArch linuxPlatformsUsingUImage; - config = let attrName = attr: "CONFIG_" + attr; @@ -267,7 +241,6 @@ lib.makeOverridable ( kmod hexdump ] - ++ optional needsUbootTools ubootTools ++ optionals (lib.versionAtLeast version "5.2") [ cpio pahole @@ -536,12 +509,10 @@ lib.makeOverridable ( kernelAtLeast = lib.versionAtLeast baseVersion; }; - # Some image types need special install targets (e.g. uImage is installed with make uinstall on arm) + # Some image types need special install targets installTargets = [ (stdenv.hostPlatform.linux-kernel.installTarget or ( - if target == "uImage" && stdenv.hostPlatform.linuxArch == "arm" then - "uinstall" - else if + if (target == "zImage" || target == "Image.gz" || target == "vmlinuz.efi") && builtins.elem stdenv.hostPlatform.linuxArch [ "arm" From b126100591d393d3ec006d2cfff2bbd532d644fd Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 02:29:26 +0000 Subject: [PATCH 086/149] qoi: 0-unstable-2026-04-21 -> 0-unstable-2026-05-29 --- pkgs/by-name/qo/qoi/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/qo/qoi/package.nix b/pkgs/by-name/qo/qoi/package.nix index feceac3d0311..da1d82e3e286 100644 --- a/pkgs/by-name/qo/qoi/package.nix +++ b/pkgs/by-name/qo/qoi/package.nix @@ -10,13 +10,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "qoi"; - version = "0-unstable-2026-04-21"; # no upstream version yet. + version = "0-unstable-2026-05-29"; # no upstream version yet. src = fetchFromGitHub { owner = "phoboslab"; repo = "qoi"; - rev = "e084ec009b38c755acc40fe31d3f83ee17935b9d"; - hash = "sha256-sPwmpkMo++Eo33fsiLHY6QYScXQNCucQyNPJdDysgFw="; + rev = "97bacc86a9c4abf5a2d452102dc26546c4c670b9"; + hash = "sha256-9R43rWfpB2J6TXHoTt0u0LLiTY9XYmmph+pb7Y6aU84="; }; patches = [ From 6c12665bab074d95fab48b524d924ee3aa7c1ce5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 02:55:11 +0000 Subject: [PATCH 087/149] tree-sitter-grammars.tree-sitter-swift: 0.7.2 -> 0.7.3 --- pkgs/by-name/tr/tree-sitter/grammars/grammar-sources.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/tr/tree-sitter/grammars/grammar-sources.nix b/pkgs/by-name/tr/tree-sitter/grammars/grammar-sources.nix index b6c72d4b9bd4..7d56da69a556 100644 --- a/pkgs/by-name/tr/tree-sitter/grammars/grammar-sources.nix +++ b/pkgs/by-name/tr/tree-sitter/grammars/grammar-sources.nix @@ -2583,9 +2583,9 @@ }; swift = rec { - version = "0.7.2"; + version = "0.7.3"; url = "github:alex-pinkus/tree-sitter-swift/${version}-with-generated-files"; - hash = "sha256-tG+tM7B6901QP4QyJdf55V38b4XduSU1eb+gaP7BikE="; + hash = "sha256-SnWwqk6IRpaNldsraSKwHGtS64LiCndxDksrvLMs1P8="; meta = { license = lib.licenses.mit; maintainers = with lib.maintainers; [ From d68b46dc66d749ef86ac13e0226ac17ab77c1111 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 03:25:38 +0000 Subject: [PATCH 088/149] veryl: 0.20.0 -> 0.20.1 --- pkgs/by-name/ve/veryl/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ve/veryl/package.nix b/pkgs/by-name/ve/veryl/package.nix index f787ded6d86a..10846811396c 100644 --- a/pkgs/by-name/ve/veryl/package.nix +++ b/pkgs/by-name/ve/veryl/package.nix @@ -10,17 +10,17 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "veryl"; - version = "0.20.0"; + version = "0.20.1"; src = fetchFromGitHub { owner = "veryl-lang"; repo = "veryl"; rev = "v${finalAttrs.version}"; - hash = "sha256-ZHt62r/mxPRNG0nv9IqTtmR4V++K8e6ttJ1zDeVjv+Q="; + hash = "sha256-jY8CeuRjtRtyQl07ezl/PUILvMABFJn9Q6AH11C4M/0="; fetchSubmodules = true; }; - cargoHash = "sha256-aouhM9rbMmlm78k6LTT5UGpFFpYRJXCo/2pnuiIxQag="; + cargoHash = "sha256-j6lJlGqtQf/mRYKDUi3nttbPWfI7CyE1tlksGhrnrEM="; nativeBuildInputs = [ pkg-config From 1deb44775cd5d5552765ea3bfe70d710716b4175 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 04:21:53 +0000 Subject: [PATCH 089/149] libretro.yabause: 0-unstable-2026-04-20 -> 0-unstable-2026-05-30 --- pkgs/applications/emulators/libretro/cores/yabause.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/emulators/libretro/cores/yabause.nix b/pkgs/applications/emulators/libretro/cores/yabause.nix index 611196f73712..df0e6ae2a15e 100644 --- a/pkgs/applications/emulators/libretro/cores/yabause.nix +++ b/pkgs/applications/emulators/libretro/cores/yabause.nix @@ -6,13 +6,13 @@ }: mkLibretroCore { core = "yabause"; - version = "0-unstable-2026-04-20"; + version = "0-unstable-2026-05-30"; src = fetchFromGitHub { owner = "libretro"; repo = "yabause"; - rev = "7cb15b8f9eea5a6fa7cae34468a6989522bcba75"; - hash = "sha256-UWZgt0vdjncM7JCzdSWa4XZMJBJ/pnk4QpSKz459Fq0="; + rev = "8926b0c6c347f8c5c755911ddb0ac695420ffbf8"; + hash = "sha256-6MTUq1p3PWNwPqFmLu21BVOrHBl1koEQ98d9+B8qYq8="; }; makefile = "Makefile"; From 44da25b281d65821477f2afc83b11b2fcf702263 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 05:51:27 +0000 Subject: [PATCH 090/149] regname: 0.1.0 -> 0.2.0 --- pkgs/by-name/re/regname/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/re/regname/package.nix b/pkgs/by-name/re/regname/package.nix index 77c74957a9a9..d40ca5c64495 100644 --- a/pkgs/by-name/re/regname/package.nix +++ b/pkgs/by-name/re/regname/package.nix @@ -7,16 +7,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "regname"; - version = "0.1.0"; + version = "0.2.0"; src = fetchFromGitHub { owner = "linkdd"; repo = "regname"; tag = "v${finalAttrs.version}"; - hash = "sha256-zKsWEjFMTFibzfZ2dEc+RN74Ih1jr9vJhOUU0gY1rYE="; + hash = "sha256-oa02AyZxbT2M4MxOCgWvy+4pTyy6WGONHS5U/l3haTA="; }; - cargoHash = "sha256-6iRDUOXPDzlD11JEL4at+z3aWkhn/dECtl7y2/vGMwo="; + cargoHash = "sha256-waayV+1Tg3CmPM7mdMc4D0G2BOSk1Mw3ga0O+R3IrwU="; passthru.updateScript = nix-update-script { }; From 50f518860cb61c98f99f8c99a221911746d36d57 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 06:20:36 +0000 Subject: [PATCH 091/149] alpaca-proxy: 2.0.12 -> 2.0.13 --- pkgs/by-name/al/alpaca-proxy/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/al/alpaca-proxy/package.nix b/pkgs/by-name/al/alpaca-proxy/package.nix index 04122e8912a0..9db4f78d4720 100644 --- a/pkgs/by-name/al/alpaca-proxy/package.nix +++ b/pkgs/by-name/al/alpaca-proxy/package.nix @@ -5,16 +5,16 @@ }: buildGoModule (finalAttrs: { pname = "alpaca-proxy"; - version = "2.0.12"; + version = "2.0.13"; src = fetchFromGitHub { owner = "samuong"; repo = "alpaca"; tag = "v${finalAttrs.version}"; - hash = "sha256-Yz90kJGyf2iA3LCj9d/oG5rLVUZVI//cqI6w67iV9Tc="; + hash = "sha256-dzTWruf/1eU34UeLzZkTSxbAqhCfxRuXMPYuKPGImUc="; }; - vendorHash = "sha256-3A88gc8j0OrxBIAFBNlz3Np5CV9xpwwIDCnnfXyBj4Q="; + vendorHash = "sha256-pxCMomMmHqPWdjLi7C4LfcjbgdjMzJVvyhOd1YmHWTU="; ldflags = [ "-s" From 65192aee197c0d1742736d13591da0dfe68be3e9 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 06:26:09 +0000 Subject: [PATCH 092/149] augustus-go: 0.0.8 -> 0.0.10 --- pkgs/by-name/au/augustus-go/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/au/augustus-go/package.nix b/pkgs/by-name/au/augustus-go/package.nix index 8c83b2a26469..608bfc8e5f4e 100644 --- a/pkgs/by-name/au/augustus-go/package.nix +++ b/pkgs/by-name/au/augustus-go/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "augustus-go"; - version = "0.0.8"; + version = "0.0.10"; src = fetchFromGitHub { owner = "praetorian-inc"; repo = "augustus"; tag = "v${finalAttrs.version}"; - hash = "sha256-yC7Wxx7PCWLpIMdXieks7oTdW5Ot6e6zIJHnRyZUOlo="; + hash = "sha256-Lh0N2wWTPCsWWaiIcntCqeMIo9ZPGhMEwy0pP42iLzY="; }; - vendorHash = "sha256-4PQX87yICvP6h4IPjFTWnhbftPBx53im95V0oiL3v6E="; + vendorHash = "sha256-LPBv1i2F5hgJBXBcuZiBwgY0S5OGi0B9Nmy488mbaBQ="; ldflags = [ "-s" ]; From 76be5d03685a46b1d9c42e1522eeacedd5e79c00 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 08:47:54 +0200 Subject: [PATCH 093/149] essh: init at 0.2.8 SSH client to manage connections, keys and sessions https://github.com/matthart1983/essh --- pkgs/by-name/es/essh/package.nix | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 pkgs/by-name/es/essh/package.nix diff --git a/pkgs/by-name/es/essh/package.nix b/pkgs/by-name/es/essh/package.nix new file mode 100644 index 000000000000..1ec379dc7fe6 --- /dev/null +++ b/pkgs/by-name/es/essh/package.nix @@ -0,0 +1,47 @@ +{ + lib, + fetchFromGitHub, + pkg-config, + rustPlatform, + sqlite, + versionCheckHook, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "essh"; + version = "0.2.8"; + + src = fetchFromGitHub { + owner = "matthart1983"; + repo = "essh"; + tag = "v${finalAttrs.version}"; + hash = "sha256-njBhA3CSTAlWjcgY3y+hvl19By2QGy2tHP8+FxgycIA="; + }; + + __structuredAttrs = true; + + cargoHash = "sha256-TlvUdlKnRA/L5oePn+YWum1wy3ktHFuXP5V+nH2QNnc="; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ sqlite ]; + + nativeCheckInputs = [ versionCheckHook ]; + + doInstallCheck = true; + + versionCheckProgramArg = [ "-V" ]; + + checkFlags = [ + "--skip=mock_ssh_server_drives_real_connect_flow_end_to_end" + ]; + + meta = { + description = "SSH client to manage connections, keys and sessions"; + homepage = "https://github.com/matthart1983/essh"; + changelog = "https://github.com/matthart1983/essh/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ fab ]; + mainProgram = "essh"; + }; +}) From c39b69db3177e4156c86cfd63edd33517b92d303 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 07:30:33 +0000 Subject: [PATCH 094/149] gobgp: 4.5.0 -> 4.6.0 --- pkgs/by-name/go/gobgp/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/go/gobgp/package.nix b/pkgs/by-name/go/gobgp/package.nix index 00828ef47238..025e1cc35c7a 100644 --- a/pkgs/by-name/go/gobgp/package.nix +++ b/pkgs/by-name/go/gobgp/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "gobgp"; - version = "4.5.0"; + version = "4.6.0"; src = fetchFromGitHub { owner = "osrg"; repo = "gobgp"; rev = "v${finalAttrs.version}"; - sha256 = "sha256-XbErKP/F7E/e03b1rNTfpnAqkqcu2TwPtj2rV65HCnI="; + sha256 = "sha256-O+jKCckHAM7KCPvWpC0ZofJx2RR+GwAK8qz8tJXtsZQ="; }; - vendorHash = "sha256-XZIcjBMNZbNDYmZLiH5s5kFoSi62n5JruqnsnlQFP4I="; + vendorHash = "sha256-fGDjeWmIe0GNZTDCXDBU4b286rMdCnPgRBInLZsFWxQ="; postConfigure = '' export CGO_ENABLED=0 From 46c66ce6c32efa3517102f63291546ac37a7264f Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 07:31:03 +0000 Subject: [PATCH 095/149] gobgpd: 4.5.0 -> 4.6.0 --- pkgs/by-name/go/gobgpd/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/go/gobgpd/package.nix b/pkgs/by-name/go/gobgpd/package.nix index cf7f3a44af39..ca13175dfadf 100644 --- a/pkgs/by-name/go/gobgpd/package.nix +++ b/pkgs/by-name/go/gobgpd/package.nix @@ -7,16 +7,16 @@ buildGoModule (finalAttrs: { pname = "gobgpd"; - version = "4.5.0"; + version = "4.6.0"; src = fetchFromGitHub { owner = "osrg"; repo = "gobgp"; tag = "v${finalAttrs.version}"; - hash = "sha256-XbErKP/F7E/e03b1rNTfpnAqkqcu2TwPtj2rV65HCnI="; + hash = "sha256-O+jKCckHAM7KCPvWpC0ZofJx2RR+GwAK8qz8tJXtsZQ="; }; - vendorHash = "sha256-XZIcjBMNZbNDYmZLiH5s5kFoSi62n5JruqnsnlQFP4I="; + vendorHash = "sha256-fGDjeWmIe0GNZTDCXDBU4b286rMdCnPgRBInLZsFWxQ="; postConfigure = '' export CGO_ENABLED=0 From fd95c4bdffb76ed4b80747c5ce0864e98d737757 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 08:23:51 +0000 Subject: [PATCH 096/149] python3Packages.scikit-posthocs: 0.13.0 -> 0.14.0 --- pkgs/development/python-modules/scikit-posthocs/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/scikit-posthocs/default.nix b/pkgs/development/python-modules/scikit-posthocs/default.nix index 87ee46b01ec9..fd5db75eb8ed 100644 --- a/pkgs/development/python-modules/scikit-posthocs/default.nix +++ b/pkgs/development/python-modules/scikit-posthocs/default.nix @@ -15,14 +15,14 @@ buildPythonPackage rec { pname = "scikit-posthocs"; - version = "0.13.0"; + version = "0.14.0"; pyproject = true; src = fetchFromGitHub { owner = "maximtrp"; repo = "scikit-posthocs"; tag = "v${version}"; - hash = "sha256-jdppRvzkW+Y+bHh8yhCjU5VJgjFc9OsEmAzNNFMtr9E="; + hash = "sha256-hFqZVMsbFvqbfr0gHYsy0H6eCHJOxtz0vZm5Onk7Vzo="; }; build-system = [ setuptools ]; From 45bb9ba612bb4736bb1f43fe11db0212735afcd1 Mon Sep 17 00:00:00 2001 From: Markus Kowalewski Date: Mon, 1 Jun 2026 11:28:05 +0200 Subject: [PATCH 097/149] moosefs: migrate fuse2 -> fuse3 --- pkgs/by-name/mo/moosefs/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/mo/moosefs/package.nix b/pkgs/by-name/mo/moosefs/package.nix index 3995293b1d54..f7744c5edc44 100644 --- a/pkgs/by-name/mo/moosefs/package.nix +++ b/pkgs/by-name/mo/moosefs/package.nix @@ -3,7 +3,7 @@ stdenv, fetchFromGitHub, python3, - fuse, + fuse3, pkg-config, libpcap, zlib, @@ -27,7 +27,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ - fuse + fuse3 libpcap zlib python3 From df05739595c0022dc2008137c9959da5ffd7cb69 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:31:56 +0200 Subject: [PATCH 098/149] python3Packages.iamdata: 0.1.202605311 -> 0.1.202606011 Diff: https://github.com/cloud-copilot/iam-data-python/compare/v0.1.202605311...v0.1.202606011 Changelog: https://github.com/cloud-copilot/iam-data-python/releases/tag/v0.1.202606011 --- pkgs/development/python-modules/iamdata/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/iamdata/default.nix b/pkgs/development/python-modules/iamdata/default.nix index 134cb0d00495..9f157e4a36a3 100644 --- a/pkgs/development/python-modules/iamdata/default.nix +++ b/pkgs/development/python-modules/iamdata/default.nix @@ -8,14 +8,14 @@ buildPythonPackage (finalAttrs: { pname = "iamdata"; - version = "0.1.202605311"; + version = "0.1.202606011"; pyproject = true; src = fetchFromGitHub { owner = "cloud-copilot"; repo = "iam-data-python"; tag = "v${finalAttrs.version}"; - hash = "sha256-YTAnViAo+G2Yxwi1lnt1oBteV8GDHlWDcQBITy/wgoQ="; + hash = "sha256-O2TrzMml1mCbWN4yFotixnXVMSINeAY/iK4jWJWCtAA="; }; __darwinAllowLocalNetworking = true; From 097c72d7032bbd0bef85cbdef410098dee10b7ce Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:32:57 +0200 Subject: [PATCH 099/149] python3Packages.mypy-boto3-groundstation: 1.43.0 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index 7ab9a4ff90f2..5bfc7285ecef 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -586,8 +586,8 @@ in "sha256-kw8ncmITgoIGnWIOk9X3S8klQ4B56LtH1CVLFKwA2ic="; mypy-boto3-groundstation = - buildMypyBoto3Package "groundstation" "1.43.0" - "sha256-nTKK7qqa2apyNM4/U2AphLGvoSqemVKfpAciilJ0pRE="; + buildMypyBoto3Package "groundstation" "1.43.18" + "sha256-+DDeD9YWo98meLZU2Mzu5AE0S7HFg6kfxeUWUh9XcQA="; mypy-boto3-guardduty = buildMypyBoto3Package "guardduty" "1.43.15" From ac5443d62bc51bbd125fe48f48a6a5ec845790da Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:19 +0200 Subject: [PATCH 100/149] python3Packages.mypy-boto3-omics: 1.43.0 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index 5bfc7285ecef..3c54cd9eff4a 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -962,8 +962,8 @@ in "sha256-BUl/wnJKR3TB1YsTCLrJdEoH9Lz8DZ6H94STOOX8gkQ="; mypy-boto3-omics = - buildMypyBoto3Package "omics" "1.43.0" - "sha256-by5t5x+vu84vjqe176tFcz1zhDUIsmUo6dH5f3OyWOw="; + buildMypyBoto3Package "omics" "1.43.18" + "sha256-aMV1kli90lXUsGmOwP1lPW9yTH+0/520hBonZC3AIjY="; mypy-boto3-opensearch = buildMypyBoto3Package "opensearch" "1.43.16" From cba49da7412323a51118e1e19a3baca462b4e09d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:27 +0200 Subject: [PATCH 101/149] python3Packages.mypy-boto3-quicksight: 1.43.10 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index 3c54cd9eff4a..612dfa7030ce 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -1070,8 +1070,8 @@ in "sha256-YrrEKl3aGz//5Z5JGapHhWtk6hBXQ4cuRQmLqGYztzg="; mypy-boto3-quicksight = - buildMypyBoto3Package "quicksight" "1.43.10" - "sha256-I+J24XB8hRjuklH5dlYAyTfOI6f7cN+EhKMI2UYFHQw="; + buildMypyBoto3Package "quicksight" "1.43.18" + "sha256-+cfQUyFlqWRQtkX28raVgZjdwnqhyK5vNyZjpWW3aEI="; mypy-boto3-ram = buildMypyBoto3Package "ram" "1.43.0" From 49cb07398fc468701656e6c0135b3c1d3d53e7ab Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:28 +0200 Subject: [PATCH 102/149] python3Packages.mypy-boto3-rds-data: 1.43.0 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index 612dfa7030ce..9df1c73a3498 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -1086,8 +1086,8 @@ in "sha256-ZKRhSBcrpdi3T2Qdw5v8WFg7dDbGCUlZBgIrmgHSUFs="; mypy-boto3-rds-data = - buildMypyBoto3Package "rds-data" "1.43.0" - "sha256-sgjEU7RqruiFWqUxxiDt/mx0uTJFhJQxkJsXvo5lYbk="; + buildMypyBoto3Package "rds-data" "1.43.18" + "sha256-dpTlWnEq5++iAsccn0Jj4C2yyvs8Cs5tMph5yzpbjcc="; mypy-boto3-redshift = buildMypyBoto3Package "redshift" "1.43.7" From 1291208e19a597ac1a90f6e18d7850f4699ba982 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:32 +0200 Subject: [PATCH 103/149] python3Packages.mypy-boto3-route53resolver: 1.43.6 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index 9df1c73a3498..c79e800689d8 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -1150,8 +1150,8 @@ in "sha256-F1xhitFa4Eac9VlCpfqjCObUH+YvLz7TYDYfI/bPYbc="; mypy-boto3-route53resolver = - buildMypyBoto3Package "route53resolver" "1.43.6" - "sha256-/KAlBKNGLO+PLapddz4kSW3ymsGc7Bf/tlhiIV/K9Bs="; + buildMypyBoto3Package "route53resolver" "1.43.18" + "sha256-IoIpgRY94hxtu0keb2KrqrL/mUmY4Cun0JPNpdEVwF0="; mypy-boto3-rum = buildMypyBoto3Package "rum" "1.43.0" From 763e13a035d7333c87b0e99ead48c2045da330ac Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:39 +0200 Subject: [PATCH 104/149] python3Packages.mypy-boto3-sesv2: 1.43.0 -> 1.43.18 --- pkgs/development/python-modules/mypy-boto3/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix index c79e800689d8..082ac7d64e74 100644 --- a/pkgs/development/python-modules/mypy-boto3/default.nix +++ b/pkgs/development/python-modules/mypy-boto3/default.nix @@ -1250,8 +1250,8 @@ in "sha256-JO9Mm6dTJuFnbyRzuSaPpT2lvDNaSUMlspWgeH+bt5M="; mypy-boto3-sesv2 = - buildMypyBoto3Package "sesv2" "1.43.0" - "sha256-rHuTd77z8sOL25W1F+LaRabZpqOkv/J+oiclvHvnGuc="; + buildMypyBoto3Package "sesv2" "1.43.18" + "sha256-2wRWO4EF6lH/69o8UvavMG5tlsqOSP4hdvF5bwOcS1M="; mypy-boto3-shield = buildMypyBoto3Package "shield" "1.43.0" From 4f5f98fb90ccce4be45fdf5e02cd2f3bcbac92ac Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 14:33:54 +0200 Subject: [PATCH 105/149] python3Packages.boto3-stubs: 1.43.17 -> 1.43.18 --- pkgs/development/python-modules/boto3-stubs/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/boto3-stubs/default.nix b/pkgs/development/python-modules/boto3-stubs/default.nix index 80cc6bf0720c..01c4c7131c26 100644 --- a/pkgs/development/python-modules/boto3-stubs/default.nix +++ b/pkgs/development/python-modules/boto3-stubs/default.nix @@ -358,13 +358,13 @@ buildPythonPackage (finalAttrs: { pname = "boto3-stubs"; - version = "1.43.17"; + version = "1.43.18"; pyproject = true; src = fetchPypi { pname = "boto3_stubs"; inherit (finalAttrs) version; - hash = "sha256-noNa6wsJD4OKnDr3vJ8TGHWv5kOUyJW6Ht4V9OZcNb8="; + hash = "sha256-Cb9IDGK8VM9ZvQrROz2w7ZoAWSZ1/QEki8uk+T6qdmA="; }; build-system = [ setuptools ]; From fadf6f958c8783b9fb74fbaae647932b5eb39305 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 12:42:57 +0000 Subject: [PATCH 106/149] kstars: 3.8.2 -> 3.8.3 --- pkgs/by-name/ks/kstars/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ks/kstars/package.nix b/pkgs/by-name/ks/kstars/package.nix index 602fbc70ce84..b4ab87c637b7 100644 --- a/pkgs/by-name/ks/kstars/package.nix +++ b/pkgs/by-name/ks/kstars/package.nix @@ -24,11 +24,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "kstars"; - version = "3.8.2"; + version = "3.8.3"; src = fetchurl { url = "mirror://kde/stable/kstars/${finalAttrs.version}/kstars-${finalAttrs.version}.tar.xz"; - hash = "sha256-rKP2YsBjccPu/NVTo6aHyUulinrkYNDGOQf2y59pztk="; + hash = "sha256-xez++JWHcQIx5Mk+TUeBrhcnbQNE4tqX31T9bthqGdU="; }; nativeBuildInputs = with kdePackages; [ From 3dac74910b759d0479e9cfeb29d718193b9302a1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 13:03:30 +0000 Subject: [PATCH 107/149] vendir: 0.45.3 -> 0.45.4 --- pkgs/by-name/ve/vendir/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ve/vendir/package.nix b/pkgs/by-name/ve/vendir/package.nix index 1e9771badd48..a3b1714c004b 100644 --- a/pkgs/by-name/ve/vendir/package.nix +++ b/pkgs/by-name/ve/vendir/package.nix @@ -6,13 +6,13 @@ buildGoModule (finalAttrs: { pname = "vendir"; - version = "0.45.3"; + version = "0.45.4"; src = fetchFromGitHub { owner = "vmware-tanzu"; repo = "carvel-vendir"; rev = "v${finalAttrs.version}"; - sha256 = "sha256-pGChtADYje6tGM0qYTwSrGQkUu6P1N8AZiXLJDWoYjA="; + sha256 = "sha256-6Emc25RGd3diHc8wQCiH+tEuiD/SmYiA1L1KU9Z5cEk="; }; vendorHash = null; From 8f52d1e0c2a2b1bb72bfd5192d061be16e1e2918 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 14:46:51 +0000 Subject: [PATCH 108/149] namespace-cli: 0.0.516 -> 0.0.517 --- pkgs/by-name/na/namespace-cli/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/na/namespace-cli/package.nix b/pkgs/by-name/na/namespace-cli/package.nix index 9a68a0749167..971f04edea95 100644 --- a/pkgs/by-name/na/namespace-cli/package.nix +++ b/pkgs/by-name/na/namespace-cli/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "namespace-cli"; - version = "0.0.516"; + version = "0.0.517"; src = fetchFromGitHub { owner = "namespacelabs"; repo = "foundation"; rev = "v${finalAttrs.version}"; - hash = "sha256-IVKqyANGPLbeogh058fy1/mr/jWbceuQml4qKdDUwFQ="; + hash = "sha256-hYgfmWTDiJgwoVMz6yUgkn/RKOFzHEDnN/wpZ7EYWCQ="; }; - vendorHash = "sha256-XNCogbQkG/BQPWW04Lpzca2sEXeIvp2XC//BILbshwQ="; + vendorHash = "sha256-rLP+djBDM1EJWFfC8s9e34Wz8EUDCzU23iJel5gscUs="; subPackages = [ "cmd/nsc" From 7f7d2e649a7147b6ae275e010d44c156addd96d5 Mon Sep 17 00:00:00 2001 From: "Adam C. Stephens" Date: Mon, 1 Jun 2026 10:56:16 -0400 Subject: [PATCH 109/149] nixos/lxcfs: fuse -> fuse3 --- nixos/modules/virtualisation/lxcfs.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/virtualisation/lxcfs.nix b/nixos/modules/virtualisation/lxcfs.nix index 711bcf655d22..999ebb53d7d4 100644 --- a/nixos/modules/virtualisation/lxcfs.nix +++ b/nixos/modules/virtualisation/lxcfs.nix @@ -41,7 +41,7 @@ in serviceConfig = { ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/lib/lxcfs"; ExecStart = "${pkgs.lxcfs}/bin/lxcfs /var/lib/lxcfs"; - ExecStopPost = "-${pkgs.fuse}/bin/fusermount -u /var/lib/lxcfs"; + ExecStopPost = "-${pkgs.fuse3}/bin/fusermount3 -u /var/lib/lxcfs"; KillMode = "process"; Restart = "on-failure"; }; From f5df55072b44137887425fdf9b0b157eeba08fef Mon Sep 17 00:00:00 2001 From: Jennifer Graul Date: Mon, 1 Jun 2026 17:01:36 +0200 Subject: [PATCH 110/149] nixos/pam_mount: migrate to fuse3 Part of #526161 --- nixos/modules/security/pam_mount.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/security/pam_mount.nix b/nixos/modules/security/pam_mount.nix index d6459c2598f9..e4714b6079d1 100644 --- a/nixos/modules/security/pam_mount.nix +++ b/nixos/modules/security/pam_mount.nix @@ -179,10 +179,10 @@ in }" /> - ${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ,${ + ${pkgs.fuse3}/bin/mount.fuse3 %(VOLUME) %(MNTPT) -o ,${ lib.concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ]) }' - ${pkgs.fuse}/bin/fusermount -u %(MNTPT) + ${pkgs.fuse3}/bin/fusermount3 -u %(MNTPT) ${pkgs.pam_mount}/bin/mount.crypt -o ,${ lib.concatStringsSep "," (cfg.cryptMountOptions ++ [ "%(OPTIONS)" ]) From e5049aed76965a7075526f6e2a6dd94f5e59daa0 Mon Sep 17 00:00:00 2001 From: w191923 Date: Mon, 1 Jun 2026 17:21:35 +0200 Subject: [PATCH 111/149] mautrix-meta: 26.05 -> 26.05.1 --- pkgs/by-name/ma/mautrix-meta/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ma/mautrix-meta/package.nix b/pkgs/by-name/ma/mautrix-meta/package.nix index 437f5622a114..2d264f144cd0 100644 --- a/pkgs/by-name/ma/mautrix-meta/package.nix +++ b/pkgs/by-name/ma/mautrix-meta/package.nix @@ -15,8 +15,8 @@ buildGoModule rec { pname = "mautrix-meta"; - version = "26.05"; - tag = "v0.2605.0"; + version = "26.05.1"; + tag = "v0.2605.1"; subPackages = [ "cmd/mautrix-meta" ]; @@ -24,7 +24,7 @@ buildGoModule rec { owner = "mautrix"; repo = "meta"; inherit tag; - hash = "sha256-zpolDtwGulDTiojJPnkj9O0D5b4rgPYQX6A28rvuvM0="; + hash = "sha256-Lc4DfZ1lznbTIKWi3SMbdOAefCoa9unUvvQlsP6ZdRo="; }; buildInputs = lib.optional (!withGoolm) olm; From 09032360da78f3815d228fbe8b0913ab07e7390d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 15:22:19 +0000 Subject: [PATCH 112/149] go-car: 2.16.0 -> 2.17.0 --- pkgs/by-name/go/go-car/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/go/go-car/package.nix b/pkgs/by-name/go/go-car/package.nix index e53a218e8441..ba009f93d194 100644 --- a/pkgs/by-name/go/go-car/package.nix +++ b/pkgs/by-name/go/go-car/package.nix @@ -7,19 +7,19 @@ buildGoModule (finalAttrs: { pname = "go-car"; - version = "2.16.0"; + version = "2.17.0"; src = fetchFromGitHub { owner = "ipld"; repo = "go-car"; tag = "v${finalAttrs.version}"; - hash = "sha256-ams0SK9Dz9McW3GLwyndCrRluvaaJiychbZX1pSW3Nw="; + hash = "sha256-votPngF8qpX/6vZcsmDM/I5Vb3wASvuKduBjJi0eQ2w="; }; modRoot = "cmd"; subPackages = [ "car" ]; - vendorHash = "sha256-ZbMhX4H1rHdkdK6YIGDmSzro9q9PmkYvx9UhBaJ/i4M="; + vendorHash = "sha256-uzzSw51FoAdHPqqoMY2C/zx1nHbbii6izzTjguYYghs="; buildInputs = [ libpcap ]; From bda3d9ef3698485db769cba08eb6af1341cf6ab0 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:05 +0200 Subject: [PATCH 113/149] linux_testing: 7.1-rc4 -> 7.1-rc6 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index fd9cf5dac790..ce7caad77c1c 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -1,7 +1,7 @@ { "testing": { - "version": "7.1-rc4", - "hash": "sha256:06z73f1vprl4adbdj01h3407p3f8bl8jsz91zx454c62k2jg3w40", + "version": "7.1-rc6", + "hash": "sha256:1fmbsjhdrkzim6vzqc40raikv1szfw28q0lbvap8a1g77an0qi58", "lts": false }, "6.1": { From 3e9caa186f62c8e1dc03b403004f888fc71d6b3c Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:20 +0200 Subject: [PATCH 114/149] linux_7_0: 7.0.10 -> 7.0.11 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index ce7caad77c1c..99ce785eed42 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -35,8 +35,8 @@ "lts": true }, "7.0": { - "version": "7.0.10", - "hash": "sha256:1p1j9s0b4qv9m0pm6vj477rqgyd1b0lsk0gy74cks3n2cbmpfj89", + "version": "7.0.11", + "hash": "sha256:012307ni1v555a1rgzsxsg99pj8fplrghvhw0jk3c4d0vmb86v75", "lts": false } } From 28254d87ca1a4f205a74ca48690daf940d723185 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:27 +0200 Subject: [PATCH 115/149] linux_6_18: 6.18.33 -> 6.18.34 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index 99ce785eed42..df241fb95ae1 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -30,8 +30,8 @@ "lts": true }, "6.18": { - "version": "6.18.33", - "hash": "sha256:10mp1ypsdz42jr26g1xxbw806mvpy0n35418fhsgxxlr4lqgy5kg", + "version": "6.18.34", + "hash": "sha256:0q6palsvwx0gnisjr658hlngfpvyzv0k5q4pvdk23122zcr4f334", "lts": true }, "7.0": { From 221fae9c48d2b98fc0cb02ef21cfe48a4238d68a Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:34 +0200 Subject: [PATCH 116/149] linux_6_12: 6.12.91 -> 6.12.92 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index df241fb95ae1..2f030c72634a 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -25,8 +25,8 @@ "lts": true }, "6.12": { - "version": "6.12.91", - "hash": "sha256:0sbrb612b653w64g5jkpbf68y0fka2sgnwblam41k7wz2sgapwhg", + "version": "6.12.92", + "hash": "sha256:0gly5wld3x8l0f3zk9pspsw1q2d7zbjbx4c2ndb49b1wvfvpdqqg", "lts": true }, "6.18": { From 10035889cf19e0264b390247844d497d716b5c56 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:40 +0200 Subject: [PATCH 117/149] linux_6_6: 6.6.141 -> 6.6.142 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index 2f030c72634a..4f037c04cfdc 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -20,8 +20,8 @@ "lts": true }, "6.6": { - "version": "6.6.141", - "hash": "sha256:1qbzxgqs7q9gyqfrf0j7p0pgjxnjj5mibamhm280mf9anqp6bhiv", + "version": "6.6.142", + "hash": "sha256:0w1bdzp9x1sqcr9xlk7dvylhs7kycghjabfgd3iv49ydfmx61xmj", "lts": true }, "6.12": { From 2a612a8cbf3bd600afea16628592ba3d52568d75 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:46 +0200 Subject: [PATCH 118/149] linux_6_1: 6.1.174 -> 6.1.175 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index 4f037c04cfdc..62ecc569be5f 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -5,8 +5,8 @@ "lts": false }, "6.1": { - "version": "6.1.174", - "hash": "sha256:0vp07x4v82qnmc1pifv3ynp2ab5mvlbfnpqvs5893bi3yrnk927d", + "version": "6.1.175", + "hash": "sha256:11fapr04y96p9ja6mfzm7bcd3zb4dzyw6qrh7c11bss9wjlq9s9p", "lts": true }, "5.15": { From 661833f61e0b987bb8900086a71b8411468de5a4 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:51 +0200 Subject: [PATCH 119/149] linux_5_15: 5.15.208 -> 5.15.209 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index 62ecc569be5f..eac04ed0a54b 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -10,8 +10,8 @@ "lts": true }, "5.15": { - "version": "5.15.208", - "hash": "sha256:0wmi50q8vgblhbh77d1a4sw4snymr6srqd22bxcjg9i7wcv70gdm", + "version": "5.15.209", + "hash": "sha256:1d0yhbpqlkr1znahky15dfavr6dzb3wb8c15k9qqvkf2xb3pfv9l", "lts": true }, "5.10": { From d07b0d9dacbe69dd061c3d738b60c58e9a9db9f4 Mon Sep 17 00:00:00 2001 From: Bart Oostveen Date: Mon, 1 Jun 2026 18:25:56 +0200 Subject: [PATCH 120/149] linux_5_10: 5.10.257 -> 5.10.258 --- pkgs/os-specific/linux/kernel/kernels-org.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/kernels-org.json b/pkgs/os-specific/linux/kernel/kernels-org.json index eac04ed0a54b..f2e87f79b99c 100644 --- a/pkgs/os-specific/linux/kernel/kernels-org.json +++ b/pkgs/os-specific/linux/kernel/kernels-org.json @@ -15,8 +15,8 @@ "lts": true }, "5.10": { - "version": "5.10.257", - "hash": "sha256:1lghcrxc1fqarvym03jrcda2a3labc887ci9yjqgbmv3nphzvc88", + "version": "5.10.258", + "hash": "sha256:1rdldzb3g33v6zvcmxafqpkjgqpp4n5qlxwb77wfd5jpzhgcnz4y", "lts": true }, "6.6": { From f3d669578491334ab19b550f51d8818a6104bd3c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 16:37:39 +0000 Subject: [PATCH 121/149] zuban: 0.7.2 -> 0.8.0 --- pkgs/by-name/zu/zuban/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/zu/zuban/package.nix b/pkgs/by-name/zu/zuban/package.nix index df8422c0453a..9b6fbda85dfd 100644 --- a/pkgs/by-name/zu/zuban/package.nix +++ b/pkgs/by-name/zu/zuban/package.nix @@ -9,13 +9,13 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "zuban"; - version = "0.7.2"; + version = "0.8.0"; src = fetchFromGitHub { owner = "zubanls"; repo = "zuban"; tag = "v${finalAttrs.version}"; - hash = "sha256-KCQOJ2NyWohbfW6fdG7F+borxUEXOy1IRB/jlc1wrc0="; + hash = "sha256-/m66vCXutOBMXMJfulJ9nFeqRWVJCIrHVJiICOvs/+A="; fetchSubmodules = true; }; @@ -26,7 +26,7 @@ rustPlatform.buildRustPackage (finalAttrs: { buildAndTestSubdir = "crates/zuban"; - cargoHash = "sha256-r8ezvIkd4R3rFdoKr+KKHKnLWl1/Vl3Ch9GdKhVflMo="; + cargoHash = "sha256-mT8QG4pI96gTgFFZN49Yi7Ax90ulPM8pA0tdB/fdSuM="; nativeInstallCheckInputs = [ versionCheckHook From 9faa86a1c939a8cb19da800a679713c7b7969b58 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 16:37:53 +0000 Subject: [PATCH 122/149] scip-go: 0.2.6 -> 0.2.7 --- pkgs/by-name/sc/scip-go/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/sc/scip-go/package.nix b/pkgs/by-name/sc/scip-go/package.nix index 979d4ab95983..92cf58587847 100644 --- a/pkgs/by-name/sc/scip-go/package.nix +++ b/pkgs/by-name/sc/scip-go/package.nix @@ -6,13 +6,13 @@ buildGoModule (finalAttrs: { pname = "scip-go"; - version = "0.2.6"; + version = "0.2.7"; src = fetchFromGitHub { owner = "sourcegraph"; repo = "scip-go"; rev = "v${finalAttrs.version}"; - hash = "sha256-QtfGiMRrGHgL1VHLMX9icXkY/jv567On3xe/dYmoaQI="; + hash = "sha256-Him9V4+cXxQxG6a3L960rXEhxJYKl7n8mRlRK2PeMIg="; }; vendorHash = "sha256-aKOjU6LhixVpMW2JUkI++jjd4eQbv3w4apBjLbfqpvw="; From 12f6fb8aec27844695d58f4ef1b74890ce9480a9 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 16:41:14 +0000 Subject: [PATCH 123/149] updatecli: 0.117.0 -> 0.117.1 --- pkgs/by-name/up/updatecli/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/up/updatecli/package.nix b/pkgs/by-name/up/updatecli/package.nix index 45243ebb97de..8ab0db0c484b 100644 --- a/pkgs/by-name/up/updatecli/package.nix +++ b/pkgs/by-name/up/updatecli/package.nix @@ -12,17 +12,17 @@ buildGoModule (finalAttrs: { pname = "updatecli"; - version = "0.117.0"; + version = "0.117.1"; src = fetchFromGitHub { owner = "updatecli"; repo = "updatecli"; rev = "v${finalAttrs.version}"; - hash = "sha256-9nA+sOlcIm5Try0oag1Oz/ALPDaMag0jZKzHrS0Brf8="; + hash = "sha256-24ZL2o5TauhPFDG6evOSHJUX3ZMDlekpUu5zvh2ZEQE="; }; proxyVendor = true; - vendorHash = "sha256-8WPwZjoDbRDi1IbjdZ40796JA5PRh8T75wRlWgTF7dI="; + vendorHash = "sha256-q53DDtSBYaXJElJZU4KV4Y3o0OIuOTPF0pskqpmQWXk="; # tests require network access doCheck = false; From 85af375155d52d22745ac550776bcf2ec56c6a1f Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 16:44:34 +0000 Subject: [PATCH 124/149] apidog: 2.8.30 -> 2.8.32 --- pkgs/by-name/ap/apidog/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ap/apidog/package.nix b/pkgs/by-name/ap/apidog/package.nix index 9abfb1a8c63b..e350b2a792f7 100644 --- a/pkgs/by-name/ap/apidog/package.nix +++ b/pkgs/by-name/ap/apidog/package.nix @@ -7,11 +7,11 @@ let pname = "apidog"; - version = "2.8.30"; + version = "2.8.32"; src = fetchurl { url = "https://file-assets.apidog.com/download/${version}/Apidog-${version}.AppImage"; - hash = "sha256-h5h/zhUbnYYtYVyWySLZk3QISd4VWs5Gl/JdhgMJKh8="; + hash = "sha256-7MaDC9VsiC+iHe83Vd4vDJQPoDLwUFmCu3R1OwVcTjM="; }; appimageContents = appimageTools.extract { From ce2e4f3b10eb5204d826f512821cbbac3adaebe1 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 1 Jun 2026 16:35:06 +0000 Subject: [PATCH 125/149] mistral-vibe: 2.12.1 -> 2.13.0 Diff: https://github.com/mistralai/mistral-vibe/compare/v2.12.1...v2.13.0 Changelog: https://github.com/mistralai/mistral-vibe/blob/v2.13.0/CHANGELOG.md --- pkgs/by-name/mi/mistral-vibe/package.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/mi/mistral-vibe/package.nix b/pkgs/by-name/mi/mistral-vibe/package.nix index 3c8025e22034..04442dfcfe9c 100644 --- a/pkgs/by-name/mi/mistral-vibe/package.nix +++ b/pkgs/by-name/mi/mistral-vibe/package.nix @@ -28,7 +28,7 @@ let in python3Packages.buildPythonApplication (finalAttrs: { pname = "mistral-vibe"; - version = "2.12.1"; + version = "2.13.0"; pyproject = true; __structuredAttrs = true; @@ -36,7 +36,7 @@ python3Packages.buildPythonApplication (finalAttrs: { owner = "mistralai"; repo = "mistral-vibe"; tag = "v${finalAttrs.version}"; - hash = "sha256-aMh1gVTsK8rDe9DVGjFci40OizCln4lDKCN/Vz+6vAs="; + hash = "sha256-N4VkqsqcjJfRJwShs5JGyoeGXgc8Ioa0M3UZbO68z0A="; }; build-system = with python3Packages; [ @@ -128,6 +128,7 @@ python3Packages.buildPythonApplication (finalAttrs: { tomli-w tree-sitter tree-sitter-bash + truststore typing-extensions typing-inspection uc-micro-py @@ -159,6 +160,10 @@ python3Packages.buildPythonApplication (finalAttrs: { versionCheckKeepEnvironment = [ "HOME" ]; disabledTests = [ + # vibe.core.llm.exceptions.BackendError: LLM backend error [mock-provider] + # reason: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier (_ssl.c:1032) + "test_generic_backend_streaming_uses_ssl_cert_file" + # Fail in the sandbox # vibe.core.audio_recorder.audio_recorder_port.NoAudioInputDeviceError: No audio input device available "test_audio_stream_yields_chunks" From c0cb6df1b6c980ee59acc97eeaace44a9ab04f6d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 17:30:51 +0000 Subject: [PATCH 126/149] warmup-s3-archives: 1.2.0 -> 1.2.1 --- pkgs/by-name/wa/warmup-s3-archives/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/wa/warmup-s3-archives/package.nix b/pkgs/by-name/wa/warmup-s3-archives/package.nix index b37345dfbced..cde22e2238e2 100644 --- a/pkgs/by-name/wa/warmup-s3-archives/package.nix +++ b/pkgs/by-name/wa/warmup-s3-archives/package.nix @@ -8,16 +8,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "warmup-s3-archives"; - version = "1.2.0"; + version = "1.2.1"; src = fetchFromGitLab { owner = "philipmw"; repo = "warmup-s3-archives"; tag = "v${finalAttrs.version}"; - hash = "sha256-SIbynXs81EJz+r5vwl7BIj8UW6sXRWefU1h5D1g4V+4="; + hash = "sha256-AI/PD7Kkzzg5IqBy0uRM1QG7+pzhjECo+ad2I0pUkKo="; }; - cargoHash = "sha256-Ck+xhPz2e+FtaaG3DI/7OJXHxjaNajPJg45xGWAjh+w="; + cargoHash = "sha256-2LOJ+f6SIkzPM+ucWU+7COUwo2Pvti7hL8k0+ry29SM="; passthru.updateScript = nix-update-script { }; From 8659a3da2343b87ba1197814ff9be9eb5e9bd45a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 17:33:29 +0000 Subject: [PATCH 127/149] xremap: 0.15.7 -> 0.15.8 --- pkgs/by-name/xr/xremap/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/xr/xremap/package.nix b/pkgs/by-name/xr/xremap/package.nix index e3f937dfb586..032ccfee3578 100644 --- a/pkgs/by-name/xr/xremap/package.nix +++ b/pkgs/by-name/xr/xremap/package.nix @@ -58,13 +58,13 @@ assert ( ); rustPlatform.buildRustPackage (finalAttrs: { pname = "xremap${variant.suffix or ""}"; - version = "0.15.7"; + version = "0.15.8"; src = fetchFromGitHub { owner = "xremap"; repo = "xremap"; tag = "v${finalAttrs.version}"; - hash = "sha256-vsXojdGdAhtFdOlyBEnnBHvZfcgDhNqMN9axxu6wfb0="; + hash = "sha256-Ia5jG+wsdhFmX2ZreIHpRQDscOF6FB0zZlOWWboMqDk="; }; nativeBuildInputs = [ pkg-config ]; @@ -72,7 +72,7 @@ rustPlatform.buildRustPackage (finalAttrs: { buildNoDefaultFeatures = true; buildFeatures = variant.features; - cargoHash = "sha256-Fd+SnT3lUoB2tU/lZtI9AoRMV2Dcl4XLknCVgAbTL60="; + cargoHash = "sha256-xwAO6OekuyxRGXIYek0918ZHod21Ae/mbGn8ZP6LjSc="; passthru = lib.mapAttrs (name: lib.const (xremap.override { withVariant = name; })) variants; From 4e794c6622e87a1b13e45ab4111bc5ceb65a719d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 17:49:39 +0000 Subject: [PATCH 128/149] vscode-extensions.foam.foam-vscode: 0.40.4 -> 0.42.0 --- pkgs/applications/editors/vscode/extensions/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/vscode/extensions/default.nix b/pkgs/applications/editors/vscode/extensions/default.nix index caa8e1ba1c2c..943a966dcc8e 100644 --- a/pkgs/applications/editors/vscode/extensions/default.nix +++ b/pkgs/applications/editors/vscode/extensions/default.nix @@ -1760,8 +1760,8 @@ let mktplcRef = { name = "foam-vscode"; publisher = "foam"; - version = "0.40.4"; - hash = "sha256-WqFIWt3c3XtdsXys+V4tQWxzDMefYOQ88MzTSPDHOKE="; + version = "0.42.0"; + hash = "sha256-mk4ZgaBxLFPvrm3EU+hdidorhdWp7EGfRP0e/kARd1A="; }; meta = { changelog = "https://marketplace.visualstudio.com/items/foam.foam-vscode/changelog"; From 27c905ab1a41116277b1ddf3e75d6642b97b36c8 Mon Sep 17 00:00:00 2001 From: aktaboot Date: Mon, 1 Jun 2026 18:54:45 +0200 Subject: [PATCH 129/149] nixosTests.gocryptfs: init --- nixos/tests/all-tests.nix | 1 + nixos/tests/gocryptfs.nix | 57 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 nixos/tests/gocryptfs.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index f76f15b9eb41..ee33521ff66b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -673,6 +673,7 @@ in gobgpd = runTest ./gobgpd.nix; gocd-agent = runTest ./gocd-agent.nix; gocd-server = runTest ./gocd-server.nix; + gocryptfs = runTest ./gocryptfs.nix; gokapi = runTest ./gokapi.nix; gollum = runTest ./gollum.nix; gonic = runTest ./gonic.nix; diff --git a/nixos/tests/gocryptfs.nix b/nixos/tests/gocryptfs.nix new file mode 100644 index 000000000000..7474bdd56f23 --- /dev/null +++ b/nixos/tests/gocryptfs.nix @@ -0,0 +1,57 @@ +{ + name = "gocryptfs"; + meta = { + maintainers = [ ]; + }; + + nodes.machine = + { pkgs, ... }: + { + + environment.systemPackages = [ + pkgs.gocryptfs + pkgs.openssl + ]; + + specialisation.fstab-test.configuration = { + fileSystems."/plain" = { + device = "/encrypted"; + fsType = "fuse.gocryptfs"; + options = [ + "nofail" + "allow_other" + "passfile=/tmp/password.txt" + ]; + }; + }; + }; + + testScript = '' + + # Generate a password + machine.execute("openssl rand -base64 32 > /tmp/password.txt") + + # Initialize an encrypted vault + machine.execute("mkdir -p /encrypted /plain") + machine.execute("gocryptfs -init /encrypted -passfile /password.txt -quiet") + + # Open and mount vault + machine.execute("gocryptfs /encrypted /plain -passfile /tmp/password.txt -quiet") + + machine.execute("echo test > /plain/data.txt") + machine.execute("echo test > /tmp/data.txt") + + # Unmount + machine.execute("fusermount -u /plain") + + # Switch to the specialisation + machine.succeed("/run/current-system/specialisation/fstab-test/bin/switch-to-configuration test") + + # Wait for mount + machine.wait_for_unit("local-fs.target") + + # Check data + machine.succeed("diff /plain/data.txt /tmp/data.txt") + + ''; +} From a56e6d45cc435ab3b5564635633ea1e507d3c470 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 18:24:53 +0000 Subject: [PATCH 130/149] vespa-cli: 8.692.16 -> 8.697.20 --- pkgs/by-name/ve/vespa-cli/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ve/vespa-cli/package.nix b/pkgs/by-name/ve/vespa-cli/package.nix index 9d9bd34ebcc7..de5385e95237 100644 --- a/pkgs/by-name/ve/vespa-cli/package.nix +++ b/pkgs/by-name/ve/vespa-cli/package.nix @@ -9,14 +9,14 @@ buildGoModule (finalAttrs: { pname = "vespa-cli"; - version = "8.692.16"; + version = "8.697.20"; __structuredAttrs = true; src = fetchFromGitHub { owner = "vespa-engine"; repo = "vespa"; tag = "v${finalAttrs.version}"; - hash = "sha256-xpulYJ9qA7loxr2USE0/7ITOA5Sc55Y4k/1SDCAt2AA="; + hash = "sha256-h2dwCScX0LVd5hV1fnhKjXQue/ywmqyk5t/vzEDAwQE="; }; # case-insensitive conflicts which produce platform `vendorHash` checksumm @@ -24,7 +24,7 @@ buildGoModule (finalAttrs: { sourceRoot = "${finalAttrs.src.name}/client/go"; - vendorHash = "sha256-OFZsGtarujDxiFgdY7bLnnJZzmnez9uqfEAWuap2+8I="; + vendorHash = "sha256-lrMGxMzUdr2ZlTn13AGwzHZBHUDonmoSxmUIo7cWx3g="; env.CGO_ENABLED = 0; From 593164e8f8d8e137bb603a2fb00bb9245302003c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 18:31:54 +0000 Subject: [PATCH 131/149] slothy: 0.2.0 -> 0.2.1 --- pkgs/development/python-modules/slothy/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/slothy/default.nix b/pkgs/development/python-modules/slothy/default.nix index f3e9b53ede81..fa35bc5d3ec0 100644 --- a/pkgs/development/python-modules/slothy/default.nix +++ b/pkgs/development/python-modules/slothy/default.nix @@ -12,14 +12,14 @@ buildPythonPackage rec { pname = "slothy"; - version = "0.2.0"; + version = "0.2.1"; pyproject = true; src = fetchFromGitHub { owner = "slothy-optimizer"; repo = "slothy"; tag = version; - hash = "sha256-1seD/wqAyEcv5HJFO8j53ARd64fddGropA6xk0dq2yk="; + hash = "sha256-/xjOhf/Z4IQjrI05IfLWurZ0x0zTH97pr9F8dtEEsbA="; }; build-system = [ setuptools ]; From 97de3412493de3134efb14c49cc61ad0b18e4c00 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 18:33:03 +0000 Subject: [PATCH 132/149] sbom-utility: 0.19.0 -> 0.19.1 --- pkgs/by-name/sb/sbom-utility/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/sb/sbom-utility/package.nix b/pkgs/by-name/sb/sbom-utility/package.nix index f94a2f1a39ae..6fff931f6a49 100644 --- a/pkgs/by-name/sb/sbom-utility/package.nix +++ b/pkgs/by-name/sb/sbom-utility/package.nix @@ -9,7 +9,7 @@ }: let - version = "0.19.0"; + version = "0.19.1"; in buildGoModule { pname = "sbom-utility"; @@ -19,7 +19,7 @@ buildGoModule { owner = "CycloneDX"; repo = "sbom-utility"; tag = "v${version}"; - hash = "sha256-G+0gQrQIWAgYsojFuvXU1IhMS2p3fHCejJLjZNaAU1I="; + hash = "sha256-AEy29ZL2KfWuHzVohUF5xWI34QgvtIDQfH6AlVfFkAY="; }; vendorHash = "sha256-vyYSir5u6d5nv+2ScrHpasQGER4VFSoLb1FDUDIrtDM="; From a4be3a1d530cf66757ba38a00ab41e21004975d3 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 18:48:23 +0000 Subject: [PATCH 133/149] pulumi-esc: 0.24.0 -> 0.25.0 --- pkgs/by-name/pu/pulumi-esc/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/pu/pulumi-esc/package.nix b/pkgs/by-name/pu/pulumi-esc/package.nix index 63d69f85626b..cf898654a883 100644 --- a/pkgs/by-name/pu/pulumi-esc/package.nix +++ b/pkgs/by-name/pu/pulumi-esc/package.nix @@ -6,18 +6,18 @@ buildGoModule (finalAttrs: { pname = "pulumi-esc"; - version = "0.24.0"; + version = "0.25.0"; src = fetchFromGitHub { owner = "pulumi"; repo = "esc"; rev = "v${finalAttrs.version}"; - hash = "sha256-umZEP3c7y/3DgcWj1iUH8wUUKFRw43jCrF+nZk62jXU="; + hash = "sha256-mtsbd66vjvy30khJxrCLd9RzUZGO9VPi9hfa7HIiq8s="; }; subPackages = "cmd/esc"; - vendorHash = "sha256-DNT1qwgtjSwLnSTru9jumwTIISCIhe5SGHz4CzE/fSo="; + vendorHash = "sha256-Va8vcIbNqAcrbJECa+utSg6EZNOTSZalP/W3GC0I2lM="; ldflags = [ "-s" From f3f5047f5ae93ff05d2fd0f7b8324ddfc8807810 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Mon, 1 Jun 2026 20:08:17 +0100 Subject: [PATCH 134/149] bats.tests: fix the eval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without the chnage the eval fails as: $ nix build --no-link -f. bats.tests error: … while evaluating the attribute 'resholve' at pkgs/by-name/ba/bats/package.nix:250:5: 249| inherit bash-preexec locate-dominating-file; 250| resholve = resholve.tests.cli; | ^ 251| } … while evaluating the attribute 'tests.cli' at pkgs/development/misc/resholve/resholve.nix:58:5: 57| ; 58| tests = callPackage ./test.nix { | ^ 59| inherit (stack trace truncated; use '--show-trace' to show the full, detailed trace) error: function 'anonymous lambda' called with unexpected argument 'python27' at pkgs/development/misc/resholve/test.nix:1:1: 1| { | ^ 2| lib, --- pkgs/development/misc/resholve/resholve.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/development/misc/resholve/resholve.nix b/pkgs/development/misc/resholve/resholve.nix index 67200729d4ef..ffb6c2cf6ac9 100644 --- a/pkgs/development/misc/resholve/resholve.nix +++ b/pkgs/development/misc/resholve/resholve.nix @@ -59,7 +59,6 @@ python27.pkgs.buildPythonApplication { inherit rSrc binlore - python27 resholve ; }; From b599661fe41fd97c39be158636209b5b6910fc8c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 19:15:55 +0000 Subject: [PATCH 135/149] nushellPlugins.desktop_notifications: 0.112.2 -> 0.113.1 --- .../nu/nushell-plugin-desktop_notifications/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/nu/nushell-plugin-desktop_notifications/package.nix b/pkgs/by-name/nu/nushell-plugin-desktop_notifications/package.nix index f21d01f6b55c..e4bb6cbe4175 100644 --- a/pkgs/by-name/nu/nushell-plugin-desktop_notifications/package.nix +++ b/pkgs/by-name/nu/nushell-plugin-desktop_notifications/package.nix @@ -7,16 +7,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "nu_plugin_desktop_notifications"; - version = "0.112.2"; + version = "0.113.1"; src = fetchFromGitHub { owner = "FMotalleb"; repo = "nu_plugin_desktop_notifications"; tag = "v${finalAttrs.version}"; - hash = "sha256-u/7KUcVoNAAxY+FQe7kB8Yuj2mygdNvS242I+HTA6Ac="; + hash = "sha256-aA47T3Fxo2eH0JclZRC7zY4RK8eRnAqj712LhgXEMpU="; }; - cargoHash = "sha256-xgCXB06QXl97udmgmnHodNSV/aK2UXaBmdo6dIhG4lo="; + cargoHash = "sha256-e/q/X0Temmkoj6DcPLUC+QfN9lVDrE4esVEx9LF4bHc="; passthru.updateScript = nix-update-script { }; From 4dfe429dfd76bedb832a081b665fcb914d81a6a1 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Mon, 1 Jun 2026 21:54:29 +0200 Subject: [PATCH 136/149] zigbee2mqtt: 2.10.1 -> 2.11.0 https://github.com/Koenkk/zigbee2mqtt/releases/tag/2.11.0 --- pkgs/by-name/zi/zigbee2mqtt/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/zi/zigbee2mqtt/package.nix b/pkgs/by-name/zi/zigbee2mqtt/package.nix index b4cbb34b0e4c..7991d5a7c972 100644 --- a/pkgs/by-name/zi/zigbee2mqtt/package.nix +++ b/pkgs/by-name/zi/zigbee2mqtt/package.nix @@ -14,20 +14,20 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "zigbee2mqtt"; - version = "2.10.1"; + version = "2.11.0"; src = fetchFromGitHub { owner = "Koenkk"; repo = "zigbee2mqtt"; tag = finalAttrs.version; - hash = "sha256-UAU7yxpaCIUrjXp8uMUEPnwSRGTHNQMD9PqSIoH686Q="; + hash = "sha256-4/P7ZPVdafWQqfi7sg+9Uy1MZYeHaNDESAaUq0nrBQ8="; }; pnpmDeps = fetchPnpmDeps { inherit (finalAttrs) pname version src; pnpm = pnpm_9; fetcherVersion = 3; - hash = "sha256-QxUoTQxBscovpYWo3WdBYInHkPbvLxDSZmjNLkDllVw="; + hash = "sha256-KSPdu9v34WYxyZtcL0NtP58LWmhK0KU0be6Z/VkZjH0="; }; nativeBuildInputs = [ From 550360d98e59300a23d52c182c5369fc12e491e9 Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Mon, 1 Jun 2026 20:20:42 +1000 Subject: [PATCH 137/149] python3Packages.ale-py: fix darwin build --- pkgs/development/python-modules/ale-py/default.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/development/python-modules/ale-py/default.nix b/pkgs/development/python-modules/ale-py/default.nix index 3282fd421f5d..ec10c5decc26 100644 --- a/pkgs/development/python-modules/ale-py/default.nix +++ b/pkgs/development/python-modules/ale-py/default.nix @@ -48,6 +48,15 @@ buildPythonPackage (finalAttrs: { ++ lib.optionals stdenv.hostPlatform.isLinux [ jax ]; + + # disable lto on darwin, cmake cannot find llvm-ar + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + substituteInPlace src/ale/CMakeLists.txt \ + --replace-fail \ + 'set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)' \ + 'set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)' + ''; + dontUseCmakeConfigure = true; buildInputs = [ @@ -104,10 +113,5 @@ buildPythonPackage (finalAttrs: { changelog = "https://github.com/Farama-Foundation/Arcade-Learning-Environment/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.gpl2; maintainers = with lib.maintainers; [ billhuang ]; - badPlatforms = [ - # FAILED: src/ale/libale.a - # /bin/sh: CMAKE_CXX_COMPILER_AR-NOTFOUND: command not found - lib.systems.inspect.patterns.isDarwin - ]; }; }) From c96b3b146f8c809df329894a698f36ab2cfe79c3 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 20:29:40 +0000 Subject: [PATCH 138/149] gearboy: 3.8.4 -> 3.8.6 --- pkgs/by-name/ge/gearboy/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ge/gearboy/package.nix b/pkgs/by-name/ge/gearboy/package.nix index 2cbc8b2c277f..c1c19d8a3a2f 100644 --- a/pkgs/by-name/ge/gearboy/package.nix +++ b/pkgs/by-name/ge/gearboy/package.nix @@ -16,13 +16,13 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "gearboy"; - version = "3.8.4"; + version = "3.8.6"; src = fetchFromGitHub { owner = "drhelius"; repo = "Gearboy"; tag = finalAttrs.version; - hash = "sha256-wgiUHOL55P9N/wXMy8ZOPq4KcAomPJoWEwukXuYRbGo="; + hash = "sha256-HdTypXuIVMl3y83RbjNviAtgl2KwCU+faI6ZcG2P/LY="; }; __structuredAttrs = true; From cfb7a7db1e7935d86cdff70d7e1f292b8e4f01ff Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 20:33:40 +0000 Subject: [PATCH 139/149] python3Packages.iocx: 0.7.4 -> 0.7.4.1 --- pkgs/development/python-modules/iocx/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/iocx/default.nix b/pkgs/development/python-modules/iocx/default.nix index a802796f2ed2..15f6d1537c75 100644 --- a/pkgs/development/python-modules/iocx/default.nix +++ b/pkgs/development/python-modules/iocx/default.nix @@ -11,14 +11,14 @@ buildPythonPackage (finalAttrs: { pname = "iocx"; - version = "0.7.4"; + version = "0.7.4.1"; pyproject = true; src = fetchFromGitHub { owner = "iocx-dev"; repo = "iocx"; tag = "v${finalAttrs.version}"; - hash = "sha256-z/l6i+RKYfEC02OxFHEXvo38VYty2FVt48pP+HBLJco="; + hash = "sha256-bSfmAAsVgtyCapcc9k4ky+nAFZV6GUf/EX1Ht8TOEg4="; }; build-system = [ setuptools ]; From 88b021ed8f33fc754a8c7b28a0a9bc463d4123fe Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Jun 2026 22:37:33 +0200 Subject: [PATCH 140/149] python3Packages.tencentcloud-sdk-python: 3.1.105 -> 3.1.107 Diff: https://github.com/TencentCloud/tencentcloud-sdk-python/compare/3.1.105...3.1.107 Changelog: https://github.com/TencentCloud/tencentcloud-sdk-python/blob/3.1.107/CHANGELOG.md --- .../python-modules/tencentcloud-sdk-python/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix index ccd1f49355bd..caeee15b8b85 100644 --- a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix +++ b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix @@ -9,14 +9,14 @@ buildPythonPackage (finalAttrs: { pname = "tencentcloud-sdk-python"; - version = "3.1.105"; + version = "3.1.107"; pyproject = true; src = fetchFromGitHub { owner = "TencentCloud"; repo = "tencentcloud-sdk-python"; tag = finalAttrs.version; - hash = "sha256-Ru3aykWrA1kOtsYv8gp/m7rTWBzEU+hVi2jOCYhjduQ="; + hash = "sha256-6hXJx3VSXQlUs6h4gYP+Yqy6uoMKplKX1CfiwFIbZ70="; }; build-system = [ setuptools ]; From 5dca05f1d0639ae5bf7140994aeb7a5732a61bd1 Mon Sep 17 00:00:00 2001 From: "nixpkgs-ci[bot]" <190413589+nixpkgs-ci[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:03:17 +0000 Subject: [PATCH 141/149] maintainers/github-teams.json: Automated sync --- maintainers/github-teams.json | 1 + 1 file changed, 1 insertion(+) diff --git a/maintainers/github-teams.json b/maintainers/github-teams.json index 6ef8ff8e70a9..baa4550e5f8a 100644 --- a/maintainers/github-teams.json +++ b/maintainers/github-teams.json @@ -935,6 +935,7 @@ "infinisil": 20525370 }, "members": { + "andir": 638836, "pyrox0": 35778371 }, "name": "Security review" From 5d26766cbf8c6d79a2d6460eedaffdbf36980443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Thu, 23 Apr 2026 10:39:34 -0700 Subject: [PATCH 142/149] treewide: add missing meta.homepage with source git repository Added homepage where missing, where the sources are pulled from: - https://github.com - https://git.sr.ht - https://gitlab.com - https://invent.kde.org - https://codeberg.org - https://gitlab.gnome.org - https://gitlab.freedesktop.org - https://git.FreeBSD.org - https://salsa.debian.org - https://git.tvdr.de - https://git.suckless.org --- pkgs/applications/audio/mopidy/soundcloud.nix | 1 + .../graphics/gimp/plugins/default.nix | 2 + pkgs/applications/misc/ape/clex.nix | 1 + .../irc/weechat/scripts/edit/default.nix | 1 + .../version-management/monotone/default.nix | 1 + .../kodi/addons/bluetooth-manager/default.nix | 1 + .../video/kodi/addons/joystick/default.nix | 1 + .../kodi/addons/kodi-platform/default.nix | 1 + .../kodi/addons/steam-controller/default.nix | 1 + .../kodi/addons/vfs-libarchive/default.nix | 1 + .../video/kodi/addons/vfs-rar/default.nix | 1 + .../video/kodi/addons/vfs-sftp/default.nix | 1 + pkgs/applications/video/vdr/plugins.nix | 3 + .../by-name/_9/_90secondportraits/package.nix | 1 + pkgs/by-name/ai/aitrack/package.nix | 1 + pkgs/by-name/al/alkimia/package.nix | 1 + pkgs/by-name/ar/archivemount/package.nix | 1 + pkgs/by-name/ar/argpp/package.nix | 1 + .../as/asterisk-module-sccp/package.nix | 1 + pkgs/by-name/ba/bacnet-stack/package.nix | 1 + pkgs/by-name/ba/badvpn/package.nix | 1 + pkgs/by-name/ba/bam/package.nix | 1 + pkgs/by-name/ba/bash_unit/package.nix | 1 + pkgs/by-name/bg/bgs/package.nix | 1 + pkgs/by-name/bi/biosdevname/package.nix | 1 + pkgs/by-name/bl/blobfuse/package.nix | 1 + pkgs/by-name/bo/boxed-cpp/package.nix | 1 + pkgs/by-name/ci/cidrgrep/package.nix | 1 + pkgs/by-name/ck/ckdl/package.nix | 1 + pkgs/by-name/co/coc-cmake/package.nix | 1 + pkgs/by-name/co/convchain/package.nix | 1 + pkgs/by-name/cr/crystal2nix/package.nix | 1 + pkgs/by-name/de/debian-devscripts/package.nix | 1 + pkgs/by-name/de/delly/package.nix | 1 + pkgs/by-name/de/depotdownloader/package.nix | 1 + pkgs/by-name/di/diod/package.nix | 1 + pkgs/by-name/di/disorderfs/package.nix | 1 + pkgs/by-name/dn/dnsviz/package.nix | 1 + pkgs/by-name/do/domine/package.nix | 6 +- pkgs/by-name/dr/drone-cli/package.nix | 1 + pkgs/by-name/du/duckmarines/package.nix | 1 + pkgs/by-name/dy/dydisnix/package.nix | 1 + pkgs/by-name/en/envio/package.nix | 1 + pkgs/by-name/ev/evdev-proto/package.nix | 1 + pkgs/by-name/ev/evtest/package.nix | 1 + pkgs/by-name/ex/expenses/package.nix | 1 + pkgs/by-name/fa/falcon/package.nix | 1 + pkgs/by-name/fi/filter-audio/package.nix | 1 + pkgs/by-name/fl/flip/package.nix | 1 + pkgs/by-name/fp/fplll/package.nix | 1 + pkgs/by-name/fp/fplll_20160331/package.nix | 1 + pkgs/by-name/gb/gbsplay/package.nix | 1 + pkgs/by-name/ge/geomcpp/package.nix | 1 + pkgs/by-name/gf/gfxtablet/package.nix | 1 + .../gi/gitlab-container-registry/package.nix | 1 + .../gitlab-elasticsearch-indexer/package.nix | 1 + pkgs/by-name/gl/glui/package.nix | 1 + pkgs/by-name/gn/gnss-share/package.nix | 1 + .../by-name/go/go-bindata-assetfs/package.nix | 1 + pkgs/by-name/go/golden-cheetah/package.nix | 1 + pkgs/by-name/go/gopro-tool/package.nix | 1 + pkgs/by-name/go/gotemplate/package.nix | 1 + pkgs/by-name/gr/grimblast/package.nix | 1 + pkgs/by-name/gt/gt/package.nix | 1 + pkgs/by-name/gt/gtk-sharp-beans/package.nix | 1 + pkgs/by-name/gt/gtk4-layer-shell/package.nix | 1 + pkgs/by-name/gt/gtkclipblock/package.nix | 1 + pkgs/by-name/hf/hfsprogs/package.nix | 1 + pkgs/by-name/hh/hhpc/package.nix | 1 + pkgs/by-name/hi/hiraeth/package.nix | 1 + pkgs/by-name/ho/hostess/package.nix | 1 + pkgs/by-name/ht/https-dns-proxy/package.nix | 1 + pkgs/by-name/hy/hyprprop/package.nix | 1 + pkgs/by-name/in/intel-media-sdk/package.nix | 1 + pkgs/by-name/io/ioq3-scion/package.nix | 1 + pkgs/by-name/ip/ipgrep/package.nix | 1 + pkgs/by-name/ja/jack-passthrough/package.nix | 1 + pkgs/by-name/km/kminion/package.nix | 1 + pkgs/by-name/ks/kstart/package.nix | 1 + pkgs/by-name/kw/kwakd/package.nix | 1 + pkgs/by-name/li/libloragw-2g4/package.nix | 1 + pkgs/by-name/li/libloragw-sx1301/package.nix | 1 + pkgs/by-name/li/libloragw-sx1302/package.nix | 1 + pkgs/by-name/li/libunicode/package.nix | 1 + pkgs/by-name/li/libusbgx/package.nix | 1 + pkgs/by-name/li/libxo/package.nix | 1 + pkgs/by-name/lo/loadwatch/package.nix | 1 + pkgs/by-name/lo/logmich/package.nix | 1 + pkgs/by-name/ma/mari0/package.nix | 1 + pkgs/by-name/mi/minio-certgen/package.nix | 1 + pkgs/by-name/mi/mirakurun/package.nix | 1 + pkgs/by-name/mi/mix2nix/package.nix | 1 + pkgs/by-name/mq/mqttmultimeter/package.nix | 1 + pkgs/by-name/mr/mrrescue/package.nix | 1 + pkgs/by-name/ms/mscompress/package.nix | 1 + pkgs/by-name/ms/msr-tools/package.nix | 1 + pkgs/by-name/mu/munge/package.nix | 1 + pkgs/by-name/mv/mvebu64boot/package.nix | 1 + pkgs/by-name/ne/netris/package.nix | 1 + .../ne/networkmanager-iodine/package.nix | 1 + pkgs/by-name/ne/newtonwars/package.nix | 1 + pkgs/by-name/ni/nilfs-utils/package.nix | 1 + pkgs/by-name/ns/nsplist/package.nix | 1 + pkgs/by-name/nu/numlockx/package.nix | 1 + .../od/odroid-xu3-bootloader/package.nix | 1 + pkgs/by-name/oi/ois/package.nix | 1 + pkgs/by-name/or/orthorobot/package.nix | 1 + pkgs/by-name/ox/oxygenfonts/package.nix | 1 + pkgs/by-name/pa/pa_applet/package.nix | 1 + pkgs/by-name/pb/pbzx/package.nix | 1 + pkgs/by-name/pd/pdftag/package.nix | 1 + pkgs/by-name/pi/pipenv/package.nix | 1 + pkgs/by-name/pi/pixz/package.nix | 1 + pkgs/by-name/pl/plistcpp/package.nix | 1 + pkgs/by-name/po/powercap/package.nix | 1 + pkgs/by-name/po/powersploit/package.nix | 1 + pkgs/by-name/pr/priocpp/package.nix | 1 + pkgs/by-name/pw/pwalarmctl/package.nix | 1 + pkgs/by-name/pw/pwalarmd/package.nix | 1 + pkgs/by-name/qu/quartz-wm/package.nix | 1 + pkgs/by-name/qu/quirc/package.nix | 1 + .../re/reattach-to-user-namespace/package.nix | 1 + pkgs/by-name/rt/rt/package.nix | 1 + pkgs/by-name/rt/rt5677-firmware/package.nix | 1 + pkgs/by-name/rt/rtl8761b-firmware/package.nix | 1 + pkgs/by-name/ru/runzip/package.nix | 1 + pkgs/by-name/rw/rwc/package.nix | 1 + pkgs/by-name/se/seehecht/package.nix | 1 + pkgs/by-name/se/sexp-cpp/package.nix | 1 + .../sh/sha1collisiondetection/package.nix | 1 + pkgs/by-name/si/sigtop/package.nix | 1 + pkgs/by-name/sl/slack-cli/package.nix | 1 + pkgs/by-name/sn/snooze/package.nix | 1 + pkgs/by-name/st/stlink/package.nix | 1 + pkgs/by-name/st/stress/package.nix | 1 + pkgs/by-name/st/strutcpp/package.nix | 1 + pkgs/by-name/st/stw/package.nix | 1 + .../sw/sway-assign-cgroups/package.nix | 1 + pkgs/by-name/sy/sympow/package.nix | 1 + pkgs/by-name/ta/tar2ext4/package.nix | 1 + pkgs/by-name/te/termbench-pro/package.nix | 1 + pkgs/by-name/te/termtekst/package.nix | 1 + pkgs/by-name/te/tesh/package.nix | 1 + pkgs/by-name/ti/tinycmmc/package.nix | 1 + pkgs/by-name/ti/tinygettext/package.nix | 1 + pkgs/by-name/tp/tpacpi-bat/package.nix | 1 + pkgs/by-name/ui/uitest/package.nix | 1 + .../by-name/un/unnamed-sdvx-clone/package.nix | 1 + .../wa/wavefunctioncollapse/package.nix | 1 + pkgs/by-name/we/webcord-vencord/package.nix | 1 + pkgs/by-name/wi/wireworld/package.nix | 1 + pkgs/by-name/wm/wmfs/package.nix | 1 + pkgs/by-name/ws/wstsound/package.nix | 1 + pkgs/by-name/xb/xbanish/package.nix | 1 + .../xd/xdg-desktop-portal-gtk/package.nix | 1 + pkgs/by-name/xd/xdgcpp/package.nix | 1 + pkgs/by-name/xi/xib2nib/package.nix | 1 + pkgs/by-name/xs/xsensors/package.nix | 1 + pkgs/by-name/xs/xss-lock/package.nix | 1 + pkgs/by-name/xs/xssstate/package.nix | 1 + pkgs/by-name/xv/xva-img/package.nix | 1 + pkgs/by-name/xw/xwinmosaic/package.nix | 1 + pkgs/by-name/zs/zs-apc-spdu-ctl/package.nix | 1 + .../compilers/llvm/common/clang/default.nix | 1 + .../compilers/llvm/common/lldb/default.nix | 1 + .../compilers/llvm/common/llvm/default.nix | 1 + .../compilers/yosys/plugins/bluespec.nix | 1 + pkgs/development/libraries/qoauth/default.nix | 1 + pkgs/development/lisp-modules/packages.nix | 26 ++++++- pkgs/development/misc/or1k/newlib.nix | 4 ++ pkgs/development/misc/vc4/newlib.nix | 4 ++ .../mobile/webos/cmake-modules.nix | 1 + pkgs/development/mobile/webos/novacom.nix | 1 + pkgs/development/mobile/webos/novacomd.nix | 1 + .../ocaml-modules/aches/default.nix | 1 + pkgs/development/ocaml-modules/aches/lwt.nix | 1 + .../development/ocaml-modules/bz2/default.nix | 1 + .../ocaml-modules/camlp-streams/default.nix | 1 + .../ocaml-modules/clap/default.nix | 1 + .../ocaml-modules/fontconfig/default.nix | 1 + .../ocaml-modules/hashcons/default.nix | 1 + .../ocaml-modules/lwt-exit/default.nix | 1 + .../ocaml-modules/lwt-watcher/default.nix | 1 + .../ocaml-modules/reason-native/dir.nix | 1 + .../ocaml-modules/reason-native/fp.nix | 1 + .../ocaml-modules/reason-native/frame.nix | 1 + .../ocaml-modules/reason-native/fs.nix | 1 + .../reason-native/qcheck-rely.nix | 1 + .../reason-native/unicode-config.nix | 1 + .../ocaml-modules/reason-native/unicode.nix | 1 + .../ocaml-modules/reason-native/utf8.nix | 1 + .../ocaml-modules/ringo/default.nix | 1 + .../secp256k1-internal/default.nix | 1 + .../ocaml-modules/systemd/default.nix | 1 + .../ocaml-modules/tezt/default.nix | 1 + .../python-modules/cx-logging/default.nix | 1 + .../django-auditlog/default.nix | 1 + .../python-modules/enocean-async/default.nix | 1 + .../python-modules/freeze-core/default.nix | 1 + .../python-modules/kmock/default.nix | 1 + .../mdx-truly-sane-lists/default.nix | 1 + .../python-modules/outspin/default.nix | 1 + .../python-modules/paperbush/default.nix | 1 + .../python-modules/protoletariat/default.nix | 1 + .../python-modules/pyftgl/default.nix | 1 + .../python-modules/tstr/default.nix | 1 + .../rocm-modules/mscclpp/default.nix | 3 + .../tools/misc/luarocks/default.nix | 1 + .../tools/misc/luarocks/luarocks-nix.nix | 1 + pkgs/misc/tmux-plugins/default.nix | 69 +++++++++++++++++++ .../tmux-plugins/tmux-fingers/default.nix | 4 ++ .../darwin/by-name/lo/locale/package.nix | 1 + pkgs/os-specific/linux/r8168/default.nix | 1 + pkgs/os-specific/linux/sheep-net/default.nix | 1 + .../nagios-plugins/check_openvpn/default.nix | 1 + .../sql/postgresql/ext/pg_similarity.nix | 1 + pkgs/servers/sql/postgresql/ext/pgjwt.nix | 1 + .../fish/plugins/foreign-env/default.nix | 1 + pkgs/shells/fish/plugins/grc.nix | 1 + pkgs/tools/compression/bzip2/1_1.nix | 1 + .../ibus-engines/ibus-libpinyin/default.nix | 1 + .../ibus-engines/ibus-pinyin/default.nix | 1 + pkgs/tools/misc/xvfb-run/default.nix | 1 + pkgs/top-level/emscripten-packages.nix | 4 ++ 224 files changed, 337 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/audio/mopidy/soundcloud.nix b/pkgs/applications/audio/mopidy/soundcloud.nix index edd172d40d16..24fb170ecb4c 100644 --- a/pkgs/applications/audio/mopidy/soundcloud.nix +++ b/pkgs/applications/audio/mopidy/soundcloud.nix @@ -32,6 +32,7 @@ pythonPackages.buildPythonApplication (finalAttrs: { meta = { description = "Mopidy extension for playing music from SoundCloud"; + homepage = "https://github.com/mopidy/mopidy-soundcloud"; license = lib.licenses.mit; maintainers = [ ]; }; diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index aa2a2e442fd7..cdbac84aaf3d 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -264,6 +264,7 @@ lib.makeScope pkgs.newScope ( meta = { broken = gimp.apiVersion != "2.0"; + homepage = "https://github.com/lmanul/gimp-texturize"; }; }; @@ -321,6 +322,7 @@ lib.makeScope pkgs.newScope ( meta = { broken = gimp.apiVersion != "2.0"; + homepage = "https://github.com/carlobaldassi/gimp-lqr-plugin"; }; }; diff --git a/pkgs/applications/misc/ape/clex.nix b/pkgs/applications/misc/ape/clex.nix index dc199c9b81e8..b8ecc586be7c 100644 --- a/pkgs/applications/misc/ape/clex.nix +++ b/pkgs/applications/misc/ape/clex.nix @@ -22,6 +22,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Large lexicon for APE (~100,000 entries)"; + homepage = "https://github.com/Attempto/Clex"; license = lib.licenses.gpl3; platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ yrashk ]; diff --git a/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix b/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix index 983f635010fb..fb2dfe072ef6 100644 --- a/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix +++ b/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix @@ -29,6 +29,7 @@ stdenv.mkDerivation rec { meta = { inherit (weechat.meta) platforms; description = "This simple weechat plugin allows you to compose messages in your $EDITOR"; + homepage = "https://github.com/keith/edit-weechat"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ eraserhd ]; }; diff --git a/pkgs/applications/version-management/monotone/default.nix b/pkgs/applications/version-management/monotone/default.nix index d72a5d37a394..0bc7b6a2044e 100644 --- a/pkgs/applications/version-management/monotone/default.nix +++ b/pkgs/applications/version-management/monotone/default.nix @@ -109,6 +109,7 @@ stdenv.mkDerivation rec { meta = { description = "Free distributed version control system"; + homepage = "https://github.com/7c6f434c/monotone-mirror"; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.unix; license = lib.licenses.gpl2Plus; diff --git a/pkgs/applications/video/kodi/addons/bluetooth-manager/default.nix b/pkgs/applications/video/kodi/addons/bluetooth-manager/default.nix index bbfd17ead73e..7a55e140ebe8 100644 --- a/pkgs/applications/video/kodi/addons/bluetooth-manager/default.nix +++ b/pkgs/applications/video/kodi/addons/bluetooth-manager/default.nix @@ -17,6 +17,7 @@ buildKodiAddon rec { meta = { description = "Addon that allows to manage bluetooth devices from within a Linux based Kodi"; + homepage = "https://github.com/wastis/BluetoothManager"; platforms = lib.platforms.all; maintainers = lib.teams.kodi.members; license = lib.licenses.gpl3Plus; diff --git a/pkgs/applications/video/kodi/addons/joystick/default.nix b/pkgs/applications/video/kodi/addons/joystick/default.nix index 4fbe911df2c5..7397ec97f395 100644 --- a/pkgs/applications/video/kodi/addons/joystick/default.nix +++ b/pkgs/applications/video/kodi/addons/joystick/default.nix @@ -25,6 +25,7 @@ buildKodiBinaryAddon rec { meta = { description = "Binary addon for raw joystick input"; + homepage = "https://github.com/xbmc/peripheral.joystick"; platforms = lib.platforms.all; license = lib.licenses.gpl2Only; teams = [ lib.teams.kodi ]; diff --git a/pkgs/applications/video/kodi/addons/kodi-platform/default.nix b/pkgs/applications/video/kodi/addons/kodi-platform/default.nix index 7bf24912818a..21fa17f4b45a 100644 --- a/pkgs/applications/video/kodi/addons/kodi-platform/default.nix +++ b/pkgs/applications/video/kodi/addons/kodi-platform/default.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation rec { ]; meta = { + homepage = "https://github.com/xbmc/kodi-platform"; license = lib.licenses.gpl2Plus; }; } diff --git a/pkgs/applications/video/kodi/addons/steam-controller/default.nix b/pkgs/applications/video/kodi/addons/steam-controller/default.nix index 4a39639a5b75..11c3c645c852 100644 --- a/pkgs/applications/video/kodi/addons/steam-controller/default.nix +++ b/pkgs/applications/video/kodi/addons/steam-controller/default.nix @@ -20,6 +20,7 @@ buildKodiBinaryAddon rec { meta = { description = "Binary addon for steam controller"; + homepage = "https://github.com/kodi-game/peripheral.steamcontroller"; platforms = lib.platforms.all; teams = [ lib.teams.kodi ]; license = lib.licenses.gpl2Only; diff --git a/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix b/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix index 623eaab5031a..ce4b788dae17 100644 --- a/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix +++ b/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix @@ -35,6 +35,7 @@ buildKodiBinaryAddon rec { meta = { description = "LibArchive Virtual Filesystem add-on for Kodi"; + homepage = "https://github.com/xbmc/vfs.libarchive"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.all; teams = [ lib.teams.kodi ]; diff --git a/pkgs/applications/video/kodi/addons/vfs-rar/default.nix b/pkgs/applications/video/kodi/addons/vfs-rar/default.nix index 37a056096942..1f3a265295f3 100644 --- a/pkgs/applications/video/kodi/addons/vfs-rar/default.nix +++ b/pkgs/applications/video/kodi/addons/vfs-rar/default.nix @@ -21,6 +21,7 @@ buildKodiBinaryAddon rec { meta = { description = "RAR archive Virtual Filesystem add-on for Kodi"; + homepage = "https://github.com/xbmc/vfs.rar"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.all; teams = [ lib.teams.kodi ]; diff --git a/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix b/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix index 6ab37f4a3280..585a2d809637 100644 --- a/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix +++ b/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix @@ -27,6 +27,7 @@ buildKodiBinaryAddon rec { meta = { description = "SFTP Virtual Filesystem add-on for Kodi"; + homepage = "https://github.com/xbmc/vfs.sftp"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.all; teams = [ lib.teams.kodi ]; diff --git a/pkgs/applications/video/vdr/plugins.nix b/pkgs/applications/video/vdr/plugins.nix index 6108fe01baee..12f59e05d2ea 100644 --- a/pkgs/applications/video/vdr/plugins.nix +++ b/pkgs/applications/video/vdr/plugins.nix @@ -19,6 +19,9 @@ let buildInputs = [ vdr ]; preConfigure = "cd PLUGINS/src/${name}"; installFlags = [ "DESTDIR=$(out)" ]; + meta = { + homepage = "https://git.tvdr.de/?p=vdr.git"; + }; }; in { diff --git a/pkgs/by-name/_9/_90secondportraits/package.nix b/pkgs/by-name/_9/_90secondportraits/package.nix index c2e1017602e7..1639f6cada32 100644 --- a/pkgs/by-name/_9/_90secondportraits/package.nix +++ b/pkgs/by-name/_9/_90secondportraits/package.nix @@ -77,6 +77,7 @@ stdenv.mkDerivation rec { meta = { description = "Silly speed painting game"; + homepage = "https://github.com/SimonLarsen/90-Second-Portraits"; mainProgram = "90secondportraits"; platforms = love.meta.platforms; license = with lib.licenses; [ diff --git a/pkgs/by-name/ai/aitrack/package.nix b/pkgs/by-name/ai/aitrack/package.nix index d84af9229587..0209263988b7 100644 --- a/pkgs/by-name/ai/aitrack/package.nix +++ b/pkgs/by-name/ai/aitrack/package.nix @@ -44,6 +44,7 @@ stdenv.mkDerivation { meta = { description = "6DoF Head tracking software"; + homepage = "https://github.com/mdk97/aitrack-linux"; mainProgram = "aitrack"; maintainers = with lib.maintainers; [ ck3d ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/al/alkimia/package.nix b/pkgs/by-name/al/alkimia/package.nix index 6fff009eac5d..05ce294b85cf 100644 --- a/pkgs/by-name/al/alkimia/package.nix +++ b/pkgs/by-name/al/alkimia/package.nix @@ -50,6 +50,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Library used by KDE finance applications"; + homepage = "https://invent.kde.org/office/alkimia"; mainProgram = "onlinequoteseditor5"; longDescription = '' Alkimia is the infrastructure for common storage and business diff --git a/pkgs/by-name/ar/archivemount/package.nix b/pkgs/by-name/ar/archivemount/package.nix index feebb2c9245b..eeee1af090e3 100644 --- a/pkgs/by-name/ar/archivemount/package.nix +++ b/pkgs/by-name/ar/archivemount/package.nix @@ -38,6 +38,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Gateway between FUSE and libarchive: allows mounting of cpio, .tar.gz, .tar.bz2 archives"; + homepage = "https://git.sr.ht/~nabijaczleweli/archivemount-ng"; changelog = "https://git.sr.ht/~nabijaczleweli/archivemount-ng/refs/${finalAttrs.version}"; mainProgram = "archivemount"; license = [ diff --git a/pkgs/by-name/ar/argpp/package.nix b/pkgs/by-name/ar/argpp/package.nix index 131a31a75a89..d53a9e7ea892 100644 --- a/pkgs/by-name/ar/argpp/package.nix +++ b/pkgs/by-name/ar/argpp/package.nix @@ -31,6 +31,7 @@ stdenv.mkDerivation { meta = { description = "Argument Parser for C++"; + homepage = "https://github.com/Grumbel/argpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.free; diff --git a/pkgs/by-name/as/asterisk-module-sccp/package.nix b/pkgs/by-name/as/asterisk-module-sccp/package.nix index 3c99f0030cc5..32952fc436b2 100644 --- a/pkgs/by-name/as/asterisk-module-sccp/package.nix +++ b/pkgs/by-name/as/asterisk-module-sccp/package.nix @@ -38,6 +38,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Replacement for the SCCP channel driver in Asterisk"; + homepage = "https://github.com/chan-sccp/chan-sccp"; license = lib.licenses.gpl1Only; maintainers = with lib.maintainers; [ das_j ]; # https://github.com/chan-sccp/chan-sccp/issues/609 diff --git a/pkgs/by-name/ba/bacnet-stack/package.nix b/pkgs/by-name/ba/bacnet-stack/package.nix index e70700ee7c32..5f5e744a2f33 100644 --- a/pkgs/by-name/ba/bacnet-stack/package.nix +++ b/pkgs/by-name/ba/bacnet-stack/package.nix @@ -28,6 +28,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "BACnet open source protocol stack for embedded systems, Linux, and Windows"; + homepage = "https://github.com/bacnet-stack/bacnet-stack"; platforms = lib.platforms.linux; license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ WhittlesJr ]; diff --git a/pkgs/by-name/ba/badvpn/package.nix b/pkgs/by-name/ba/badvpn/package.nix index 5d6f80fabb2c..9d3176914abe 100644 --- a/pkgs/by-name/ba/badvpn/package.nix +++ b/pkgs/by-name/ba/badvpn/package.nix @@ -45,6 +45,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Set of network-related (mostly VPN-related) tools"; + homepage = "https://github.com/ambrop72/badvpn"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/ba/bam/package.nix b/pkgs/by-name/ba/bam/package.nix index 74b34c555f6e..3d4dfa1cfb58 100644 --- a/pkgs/by-name/ba/bam/package.nix +++ b/pkgs/by-name/ba/bam/package.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Yet another build manager"; + homepage = "https://github.com/matricks/bam"; mainProgram = "bam"; maintainers = with lib.maintainers; [ raskin diff --git a/pkgs/by-name/ba/bash_unit/package.nix b/pkgs/by-name/ba/bash_unit/package.nix index 2eba0309bea8..5f6504362ac9 100644 --- a/pkgs/by-name/ba/bash_unit/package.nix +++ b/pkgs/by-name/ba/bash_unit/package.nix @@ -46,6 +46,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Bash unit testing enterprise edition framework for professionals"; + homepage = "https://github.com/bash-unit/bash_unit"; maintainers = with lib.maintainers; [ pamplemousse ]; platforms = lib.platforms.all; license = lib.licenses.gpl3Plus; diff --git a/pkgs/by-name/bg/bgs/package.nix b/pkgs/by-name/bg/bgs/package.nix index 905576f50795..5eb863d8c2f9 100644 --- a/pkgs/by-name/bg/bgs/package.nix +++ b/pkgs/by-name/bg/bgs/package.nix @@ -32,6 +32,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Extremely fast and small background setter for X"; + homepage = "https://github.com/Gottox/bgs"; license = lib.licenses.mit; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ pSub ]; diff --git a/pkgs/by-name/bi/biosdevname/package.nix b/pkgs/by-name/bi/biosdevname/package.nix index db07553b8a77..8b3ddc57e646 100644 --- a/pkgs/by-name/bi/biosdevname/package.nix +++ b/pkgs/by-name/bi/biosdevname/package.nix @@ -31,6 +31,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Udev helper for naming devices per BIOS names"; + homepage = "https://github.com/dell/biosdevname"; license = lib.licenses.gpl2Only; platforms = [ "x86_64-linux" diff --git a/pkgs/by-name/bl/blobfuse/package.nix b/pkgs/by-name/bl/blobfuse/package.nix index c7c85ed93ff6..a531043641c2 100644 --- a/pkgs/by-name/bl/blobfuse/package.nix +++ b/pkgs/by-name/bl/blobfuse/package.nix @@ -36,6 +36,7 @@ buildGoModule { meta = { description = "Mount an Azure Blob storage as filesystem through FUSE"; + homepage = "https://github.com/Azure/azure-storage-fuse"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ jbgi ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/bo/boxed-cpp/package.nix b/pkgs/by-name/bo/boxed-cpp/package.nix index 1645b5aa5121..38361ee764fe 100644 --- a/pkgs/by-name/bo/boxed-cpp/package.nix +++ b/pkgs/by-name/bo/boxed-cpp/package.nix @@ -23,6 +23,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Boxing primitive types in C++"; + homepage = "https://github.com/contour-terminal/boxed-cpp"; license = lib.licenses.asl20; platforms = lib.platforms.unix; maintainers = [ lib.maintainers.moni ]; diff --git a/pkgs/by-name/ci/cidrgrep/package.nix b/pkgs/by-name/ci/cidrgrep/package.nix index 9047a4e9b54b..4138935d5b4f 100644 --- a/pkgs/by-name/ci/cidrgrep/package.nix +++ b/pkgs/by-name/ci/cidrgrep/package.nix @@ -23,6 +23,7 @@ buildGoModule { meta = { description = "Like grep but for IPv4 CIDRs"; + homepage = "https://github.com/tomdoherty/cidrgrep"; mainProgram = "cidrgrep"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ das_j ]; diff --git a/pkgs/by-name/ck/ckdl/package.nix b/pkgs/by-name/ck/ckdl/package.nix index 65254375c634..130287c9dc31 100644 --- a/pkgs/by-name/ck/ckdl/package.nix +++ b/pkgs/by-name/ck/ckdl/package.nix @@ -59,6 +59,7 @@ pkgs.stdenv.mkDerivation { meta = { description = "C library that implements reading and writing the KDL Document Language"; + homepage = "https://github.com/tjol/ckdl"; license = lib.licenses.mit; platforms = lib.platforms.all; }; diff --git a/pkgs/by-name/co/coc-cmake/package.nix b/pkgs/by-name/co/coc-cmake/package.nix index 22379cc0709c..303a1f73fef2 100644 --- a/pkgs/by-name/co/coc-cmake/package.nix +++ b/pkgs/by-name/co/coc-cmake/package.nix @@ -56,6 +56,7 @@ stdenv.mkDerivation (finalAttrs: { ''; meta = { + homepage = "https://github.com/voldikss/coc-extensions"; license = lib.licenses.mit; }; }) diff --git a/pkgs/by-name/co/convchain/package.nix b/pkgs/by-name/co/convchain/package.nix index c6bc8559fac8..e1d6d4ba95bd 100644 --- a/pkgs/by-name/co/convchain/package.nix +++ b/pkgs/by-name/co/convchain/package.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation { buildInputs = [ mono ]; meta = { description = "Bitmap generation from a single example with convolutions and MCMC"; + homepage = "https://github.com/mxgmn/ConvChain"; license = lib.licenses.mit; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/cr/crystal2nix/package.nix b/pkgs/by-name/cr/crystal2nix/package.nix index 18c23623e85e..313e07127085 100644 --- a/pkgs/by-name/cr/crystal2nix/package.nix +++ b/pkgs/by-name/cr/crystal2nix/package.nix @@ -37,6 +37,7 @@ crystal.buildCrystalPackage rec { meta = { description = "Utility to convert Crystal's shard.lock files to a Nix file"; + homepage = "https://github.com/nix-community/crystal2nix"; mainProgram = "crystal2nix"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ diff --git a/pkgs/by-name/de/debian-devscripts/package.nix b/pkgs/by-name/de/debian-devscripts/package.nix index 0637f01e2d7c..62971a600963 100644 --- a/pkgs/by-name/de/debian-devscripts/package.nix +++ b/pkgs/by-name/de/debian-devscripts/package.nix @@ -258,6 +258,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Debian package maintenance scripts"; + homepage = "https://salsa.debian.org/debian/devscripts"; license = lib.licenses.free; # Mix of public domain, Artistic+GPL, GPL1+, GPL2+, GPL3+, and GPL2-only... TODO maintainers = with lib.maintainers; [ raskin ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/de/delly/package.nix b/pkgs/by-name/de/delly/package.nix index 9ddef424e0ed..5d46510ee21e 100644 --- a/pkgs/by-name/de/delly/package.nix +++ b/pkgs/by-name/de/delly/package.nix @@ -61,6 +61,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Structural variant caller for mapped DNA sequenced data"; + homepage = "https://github.com/dellytools/delly"; mainProgram = "delly"; license = lib.licenses.bsd3; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/de/depotdownloader/package.nix b/pkgs/by-name/de/depotdownloader/package.nix index bd5e7010be7c..43768226ed97 100644 --- a/pkgs/by-name/de/depotdownloader/package.nix +++ b/pkgs/by-name/de/depotdownloader/package.nix @@ -25,6 +25,7 @@ buildDotnetModule rec { meta = { description = "Steam depot downloader utilizing the SteamKit2 library"; + homepage = "https://github.com/SteamRE/DepotDownloader"; changelog = "https://github.com/SteamRE/DepotDownloader/releases/tag/DepotDownloader_${version}"; license = lib.licenses.gpl2Only; maintainers = [ lib.maintainers.babbaj ]; diff --git a/pkgs/by-name/di/diod/package.nix b/pkgs/by-name/di/diod/package.nix index 1645cc6a8ed1..32b3748bed52 100644 --- a/pkgs/by-name/di/diod/package.nix +++ b/pkgs/by-name/di/diod/package.nix @@ -48,6 +48,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "I/O forwarding server that implements a variant of the 9P protocol"; + homepage = "https://github.com/chaos/diod"; maintainers = with lib.maintainers; [ rnhmjoj ]; platforms = lib.platforms.linux; license = lib.licenses.gpl2Plus; diff --git a/pkgs/by-name/di/disorderfs/package.nix b/pkgs/by-name/di/disorderfs/package.nix index 48f79c65e24a..722c5ed52d5a 100644 --- a/pkgs/by-name/di/disorderfs/package.nix +++ b/pkgs/by-name/di/disorderfs/package.nix @@ -34,6 +34,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Overlay FUSE filesystem that introduces non-determinism into filesystem metadata"; + homepage = "https://salsa.debian.org/reproducible-builds/disorderfs"; mainProgram = "disorderfs"; license = lib.licenses.gpl3; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/dn/dnsviz/package.nix b/pkgs/by-name/dn/dnsviz/package.nix index c1c40906f782..60f44a3afc0e 100644 --- a/pkgs/by-name/dn/dnsviz/package.nix +++ b/pkgs/by-name/dn/dnsviz/package.nix @@ -50,6 +50,7 @@ python3Packages.buildPythonApplication (finalAttrs: { This tool suite powers the Web-based analysis available at https://dnsviz.net/ ''; + homepage = "https://github.com/dnsviz/dnsviz"; license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ jojosch ]; }; diff --git a/pkgs/by-name/do/domine/package.nix b/pkgs/by-name/do/domine/package.nix index ea4d2c2e777e..f33637e36c52 100644 --- a/pkgs/by-name/do/domine/package.nix +++ b/pkgs/by-name/do/domine/package.nix @@ -16,5 +16,9 @@ buildDartApplication { }; pubspecLock = lib.importJSON ./pubspec.lock.json; - meta.mainProgram = "domine"; + + meta = { + homepage = "https://github.com/breitburg/domine"; + mainProgram = "domine"; + }; } diff --git a/pkgs/by-name/dr/drone-cli/package.nix b/pkgs/by-name/dr/drone-cli/package.nix index 808ce7c85d77..a1081bbc9e0a 100644 --- a/pkgs/by-name/dr/drone-cli/package.nix +++ b/pkgs/by-name/dr/drone-cli/package.nix @@ -31,5 +31,6 @@ buildGoModule rec { maintainers = with lib.maintainers; [ techknowlogick ]; license = lib.licenses.asl20; description = "Command line client for the Drone continuous integration server"; + homepage = "https://github.com/harness/drone-cli"; }; } diff --git a/pkgs/by-name/du/duckmarines/package.nix b/pkgs/by-name/du/duckmarines/package.nix index f2f345236445..436023074cce 100644 --- a/pkgs/by-name/du/duckmarines/package.nix +++ b/pkgs/by-name/du/duckmarines/package.nix @@ -74,6 +74,7 @@ stdenv.mkDerivation rec { meta = { description = "Duck-themed action puzzle video game"; + homepage = "https://github.com/SimonLarsen/duckmarines"; platforms = love.meta.platforms; hydraPlatforms = [ ]; license = with lib.licenses; [ diff --git a/pkgs/by-name/dy/dydisnix/package.nix b/pkgs/by-name/dy/dydisnix/package.nix index 88ed04017393..3fdd9bb9d350 100644 --- a/pkgs/by-name/dy/dydisnix/package.nix +++ b/pkgs/by-name/dy/dydisnix/package.nix @@ -53,6 +53,7 @@ stdenv.mkDerivation { longDescription = '' Dynamic Disnix is a (very experimental!) prototype extension framework for Disnix supporting dynamic (re)deployment of service-oriented systems. ''; + homepage = "https://github.com/svanderburg/dydisnix"; license = lib.licenses.lgpl21Plus; maintainers = [ lib.maintainers.tomberek ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/en/envio/package.nix b/pkgs/by-name/en/envio/package.nix index 1e5edb2e598f..9cf6e4411cf4 100644 --- a/pkgs/by-name/en/envio/package.nix +++ b/pkgs/by-name/en/envio/package.nix @@ -44,6 +44,7 @@ rustPlatform.buildRustPackage (finalAttrs: { passthru.updateScript = nix-update-script { }; meta = { + homepage = "https://github.com/humblepenguinn/envio"; changelog = "https://github.com/humblepenguinn/envio/blob/v${finalAttrs.version}/CHANGELOG.md"; description = "Modern and secure CLI tool for managing environment variables"; mainProgram = "envio"; diff --git a/pkgs/by-name/ev/evdev-proto/package.nix b/pkgs/by-name/ev/evdev-proto/package.nix index db41ff6b7ac8..c9e0bb879007 100644 --- a/pkgs/by-name/ev/evdev-proto/package.nix +++ b/pkgs/by-name/ev/evdev-proto/package.nix @@ -66,6 +66,7 @@ stdenv.mkDerivation { meta = { description = "Input event device header files for FreeBSD"; + homepage = "https://cgit.freebsd.org/ports"; maintainers = with lib.maintainers; [ qyliss ]; platforms = lib.platforms.freebsd; license = lib.licenses.gpl2Only; diff --git a/pkgs/by-name/ev/evtest/package.nix b/pkgs/by-name/ev/evtest/package.nix index d4be04e8b00f..deb874269d2c 100644 --- a/pkgs/by-name/ev/evtest/package.nix +++ b/pkgs/by-name/ev/evtest/package.nix @@ -27,6 +27,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Simple tool for input event debugging"; + homepage = "https://gitlab.freedesktop.org/libevdev/evtest"; license = lib.licenses.gpl2; platforms = lib.platforms.linux; maintainers = [ lib.maintainers.bjornfor ]; diff --git a/pkgs/by-name/ex/expenses/package.nix b/pkgs/by-name/ex/expenses/package.nix index fbca8e350f87..4e444ee02d64 100644 --- a/pkgs/by-name/ex/expenses/package.nix +++ b/pkgs/by-name/ex/expenses/package.nix @@ -42,6 +42,7 @@ buildGoModule (finalAttrs: { meta = { description = "Interactive command line expense logger"; + homepage = "https://github.com/manojkarthick/expenses"; license = lib.licenses.mit; maintainers = [ lib.maintainers.manojkarthick ]; mainProgram = "expenses"; diff --git a/pkgs/by-name/fa/falcon/package.nix b/pkgs/by-name/fa/falcon/package.nix index 1f6835a67ab9..26c8c902fba9 100644 --- a/pkgs/by-name/fa/falcon/package.nix +++ b/pkgs/by-name/fa/falcon/package.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation { meta = { description = "Programming language with macros and syntax at once"; + homepage = "https://github.com/falconpl/falcon"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ pSub ]; platforms = with lib.platforms; unix; diff --git a/pkgs/by-name/fi/filter-audio/package.nix b/pkgs/by-name/fi/filter-audio/package.nix index 5239a915e199..2e252117398d 100644 --- a/pkgs/by-name/fi/filter-audio/package.nix +++ b/pkgs/by-name/fi/filter-audio/package.nix @@ -21,6 +21,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Lightweight audio filtering library made from webrtc code"; + homepage = "https://github.com/irungentoo/filter_audio"; license = lib.licenses.bsd3; maintainers = [ ]; platforms = lib.platforms.all; diff --git a/pkgs/by-name/fl/flip/package.nix b/pkgs/by-name/fl/flip/package.nix index 415363fd146b..03e8f0601ec2 100644 --- a/pkgs/by-name/fl/flip/package.nix +++ b/pkgs/by-name/fl/flip/package.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation { meta = { description = "Tool for visualizing and communicating the errors in rendered images"; + homepage = "https://github.com/NVlabs/flip"; license = lib.licenses.bsd3; platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ zmitchell ]; diff --git a/pkgs/by-name/fp/fplll/package.nix b/pkgs/by-name/fp/fplll/package.nix index 1e1795c34b79..496a22d76fdf 100644 --- a/pkgs/by-name/fp/fplll/package.nix +++ b/pkgs/by-name/fp/fplll/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Lattice algorithms using floating-point arithmetic"; + homepage = "https://github.com/fplll/fplll"; changelog = [ # Some release notes are added to the github tags, though they are not # always complete. diff --git a/pkgs/by-name/fp/fplll_20160331/package.nix b/pkgs/by-name/fp/fplll_20160331/package.nix index f3560ed20a04..09fcedb80430 100644 --- a/pkgs/by-name/fp/fplll_20160331/package.nix +++ b/pkgs/by-name/fp/fplll_20160331/package.nix @@ -32,6 +32,7 @@ stdenv.mkDerivation { ]; meta = { description = "Lattice algorithms using floating-point arithmetic"; + homepage = "https://github.com/fplll/fplll"; license = lib.licenses.lgpl21Plus; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/gb/gbsplay/package.nix b/pkgs/by-name/gb/gbsplay/package.nix index 3c1eae01e586..2f83334f1596 100644 --- a/pkgs/by-name/gb/gbsplay/package.nix +++ b/pkgs/by-name/gb/gbsplay/package.nix @@ -35,6 +35,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Gameboy sound player"; + homepage = "https://github.com/mmitch/gbsplay"; license = lib.licenses.gpl1Plus; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ sigmanificient ]; diff --git a/pkgs/by-name/ge/geomcpp/package.nix b/pkgs/by-name/ge/geomcpp/package.nix index 8b6f70498e80..1c89777b5ed1 100644 --- a/pkgs/by-name/ge/geomcpp/package.nix +++ b/pkgs/by-name/ge/geomcpp/package.nix @@ -40,6 +40,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Collection of point, size and rect classes"; + homepage = "https://github.com/Grumbel/geomcpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.free; diff --git a/pkgs/by-name/gf/gfxtablet/package.nix b/pkgs/by-name/gf/gfxtablet/package.nix index bf42a69562d4..2aef4702d7cc 100644 --- a/pkgs/by-name/gf/gfxtablet/package.nix +++ b/pkgs/by-name/gf/gfxtablet/package.nix @@ -31,6 +31,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Uinput driver for Android GfxTablet tablet-as-input-device app"; + homepage = "https://github.com/rfc2822/GfxTablet"; mainProgram = "networktablet"; license = lib.licenses.mit; maintainers = [ lib.maintainers.raskin ]; diff --git a/pkgs/by-name/gi/gitlab-container-registry/package.nix b/pkgs/by-name/gi/gitlab-container-registry/package.nix index 49a9c7bcf156..6f7021ae3974 100644 --- a/pkgs/by-name/gi/gitlab-container-registry/package.nix +++ b/pkgs/by-name/gi/gitlab-container-registry/package.nix @@ -40,6 +40,7 @@ buildGo125Module rec { meta = { description = "GitLab Docker toolset to pack, ship, store, and deliver content"; + homepage = "https://gitlab.com/gitlab-org/container-registry"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ e1mo ]; teams = with lib.teams; [ gitlab ]; diff --git a/pkgs/by-name/gi/gitlab-elasticsearch-indexer/package.nix b/pkgs/by-name/gi/gitlab-elasticsearch-indexer/package.nix index 8fe4d80326c1..fe56f1aefbcc 100644 --- a/pkgs/by-name/gi/gitlab-elasticsearch-indexer/package.nix +++ b/pkgs/by-name/gi/gitlab-elasticsearch-indexer/package.nix @@ -52,6 +52,7 @@ buildGoModule (finalAttrs: { meta = { description = "Indexes Git repositories into Elasticsearch for GitLab"; + homepage = "https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer"; mainProgram = "gitlab-elasticsearch-indexer"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ diff --git a/pkgs/by-name/gl/glui/package.nix b/pkgs/by-name/gl/glui/package.nix index d3569d97177d..120c53b89235 100644 --- a/pkgs/by-name/gl/glui/package.nix +++ b/pkgs/by-name/gl/glui/package.nix @@ -43,6 +43,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "User interface library using OpenGL"; + homepage = "https://github.com/libglui/glui"; license = lib.licenses.zlib; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/gn/gnss-share/package.nix b/pkgs/by-name/gn/gnss-share/package.nix index 6a95b9110999..c56c76e656f0 100644 --- a/pkgs/by-name/gn/gnss-share/package.nix +++ b/pkgs/by-name/gn/gnss-share/package.nix @@ -24,6 +24,7 @@ buildGoModule (finalAttrs: { with geoclue* or other clients that support fetching NMEA location data over sockets. ''; + homepage = "https://gitlab.com/postmarketOS/gnss-share"; license = lib.licenses.gpl3; maintainers = with lib.maintainers; [ balsoft ]; mainProgram = "gnss-share"; diff --git a/pkgs/by-name/go/go-bindata-assetfs/package.nix b/pkgs/by-name/go/go-bindata-assetfs/package.nix index 31f199cab1ff..0566b29f7676 100644 --- a/pkgs/by-name/go/go-bindata-assetfs/package.nix +++ b/pkgs/by-name/go/go-bindata-assetfs/package.nix @@ -24,6 +24,7 @@ buildGoModule { meta = { description = "Serve embedded files from jteeuwen/go-bindata"; + homepage = "https://github.com/elazarl/go-bindata-assetfs"; mainProgram = "go-bindata-assetfs"; license = lib.licenses.bsd2; maintainers = with lib.maintainers; [ avnik ]; diff --git a/pkgs/by-name/go/golden-cheetah/package.nix b/pkgs/by-name/go/golden-cheetah/package.nix index 2640f13d4df4..193eef957c5a 100644 --- a/pkgs/by-name/go/golden-cheetah/package.nix +++ b/pkgs/by-name/go/golden-cheetah/package.nix @@ -118,6 +118,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Performance software for cyclists, runners and triathletes. Built from source and without API tokens"; + homepage = "https://github.com/GoldenCheetah/GoldenCheetah"; mainProgram = "GoldenCheetah"; platforms = with lib.platforms; darwin ++ linux; maintainers = with lib.maintainers; [ adamcstephens ]; diff --git a/pkgs/by-name/go/gopro-tool/package.nix b/pkgs/by-name/go/gopro-tool/package.nix index 475d2df02067..04e558c59b63 100644 --- a/pkgs/by-name/go/gopro-tool/package.nix +++ b/pkgs/by-name/go/gopro-tool/package.nix @@ -50,6 +50,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Tool to control GoPro webcam mode in Linux (requires v4l2loopback kernel module and a firewall rule)"; + homepage = "https://github.com/juchem/gopro-tool"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ ZMon3y ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/go/gotemplate/package.nix b/pkgs/by-name/go/gotemplate/package.nix index f37217e3315a..99f71a72ef27 100644 --- a/pkgs/by-name/go/gotemplate/package.nix +++ b/pkgs/by-name/go/gotemplate/package.nix @@ -23,6 +23,7 @@ buildGoModule (finalAttrs: { meta = { description = "CLI for go text/template"; + homepage = "https://github.com/coveooss/gotemplate"; mainProgram = "gotemplate"; changelog = "https://github.com/coveooss/gotemplate/releases/tag/v${finalAttrs.version}"; license = lib.licenses.mit; diff --git a/pkgs/by-name/gr/grimblast/package.nix b/pkgs/by-name/gr/grimblast/package.nix index 37cb9323a0a6..145eefc82620 100644 --- a/pkgs/by-name/gr/grimblast/package.nix +++ b/pkgs/by-name/gr/grimblast/package.nix @@ -66,6 +66,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { meta = { description = "Helper for screenshots within Hyprland, based on grimshot"; + homepage = "https://github.com/hyprwm/contrib"; license = lib.licenses.mit; platforms = lib.platforms.unix; teams = [ lib.teams.hyprland ]; diff --git a/pkgs/by-name/gt/gt/package.nix b/pkgs/by-name/gt/gt/package.nix index 8d0aedb32a20..fd62a2b45d99 100644 --- a/pkgs/by-name/gt/gt/package.nix +++ b/pkgs/by-name/gt/gt/package.nix @@ -45,6 +45,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Linux command line tool for setting up USB gadgets using configfs"; + homepage = "https://github.com/linux-usb-gadgets/gt"; mainProgram = "gt"; license = with lib.licenses; [ asl20 ]; maintainers = [ ]; diff --git a/pkgs/by-name/gt/gtk-sharp-beans/package.nix b/pkgs/by-name/gt/gtk-sharp-beans/package.nix index c1e51246fe2a..a7d4d16bdeba 100644 --- a/pkgs/by-name/gt/gtk-sharp-beans/package.nix +++ b/pkgs/by-name/gt/gtk-sharp-beans/package.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Binds some API from GTK that isn't in GTK# 2.12.x"; + homepage = "https://github.com/mono/gtk-sharp-beans"; platforms = lib.platforms.linux; license = lib.licenses.lgpl21; }; diff --git a/pkgs/by-name/gt/gtk4-layer-shell/package.nix b/pkgs/by-name/gt/gtk4-layer-shell/package.nix index cb9f617116a0..d9504df82901 100644 --- a/pkgs/by-name/gt/gtk4-layer-shell/package.nix +++ b/pkgs/by-name/gt/gtk4-layer-shell/package.nix @@ -67,6 +67,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Library to create panels and other desktop components for Wayland using the Layer Shell protocol and GTK4"; + homepage = "https://github.com/wmww/gtk4-layer-shell"; mainProgram = "gtk4-layer-demo"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ donovanglover ]; diff --git a/pkgs/by-name/gt/gtkclipblock/package.nix b/pkgs/by-name/gt/gtkclipblock/package.nix index 528b623f0857..b3ceeb108e48 100644 --- a/pkgs/by-name/gt/gtkclipblock/package.nix +++ b/pkgs/by-name/gt/gtkclipblock/package.nix @@ -54,6 +54,7 @@ stdenv.mkDerivation { meta = { description = "LD_PRELOAD hack to prevent GTK programs from interacting with the primary clipboard"; + homepage = "https://github.com/notpeelz/gtkclipblock"; license = lib.licenses.lgpl3Only; maintainers = with lib.maintainers; [ uartman ]; platforms = [ "x86_64-linux" ]; diff --git a/pkgs/by-name/hf/hfsprogs/package.nix b/pkgs/by-name/hf/hfsprogs/package.nix index ea4399cb710d..11fe8435a853 100644 --- a/pkgs/by-name/hf/hfsprogs/package.nix +++ b/pkgs/by-name/hf/hfsprogs/package.nix @@ -34,6 +34,7 @@ stdenv.mkDerivation { meta = { description = "HFS/HFS+ user space utils"; + homepage = "https://github.com/glaubitz/hfs"; license = lib.licenses.apple-psl20; platforms = lib.platforms.linux; }; diff --git a/pkgs/by-name/hh/hhpc/package.nix b/pkgs/by-name/hh/hhpc/package.nix index 6547ff2315bb..cd505e128105 100644 --- a/pkgs/by-name/hh/hhpc/package.nix +++ b/pkgs/by-name/hh/hhpc/package.nix @@ -27,6 +27,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Hides the mouse pointer in X11"; + homepage = "https://github.com/aktau/hhpc"; maintainers = with lib.maintainers; [ nico202 ]; platforms = lib.platforms.unix; license = lib.licenses.bsd3; diff --git a/pkgs/by-name/hi/hiraeth/package.nix b/pkgs/by-name/hi/hiraeth/package.nix index 7ae714bacc20..15db36dae618 100644 --- a/pkgs/by-name/hi/hiraeth/package.nix +++ b/pkgs/by-name/hi/hiraeth/package.nix @@ -18,6 +18,7 @@ buildGoModule (finalAttrs: { meta = { description = "Share files with an expiration date"; + homepage = "https://github.com/lukaswrz/hiraeth"; license = lib.licenses.agpl3Plus; maintainers = [ lib.maintainers.lukaswrz ]; mainProgram = "hiraeth"; diff --git a/pkgs/by-name/ho/hostess/package.nix b/pkgs/by-name/ho/hostess/package.nix index 1ba92b49cfed..df56822cc9b5 100644 --- a/pkgs/by-name/ho/hostess/package.nix +++ b/pkgs/by-name/ho/hostess/package.nix @@ -21,6 +21,7 @@ buildGoModule (finalAttrs: { meta = { description = "Idempotent command-line utility for managing your /etc/hosts* file"; + homepage = "https://github.com/cbednarski/hostess"; mainProgram = "hostess"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ edlimerkaj ]; diff --git a/pkgs/by-name/ht/https-dns-proxy/package.nix b/pkgs/by-name/ht/https-dns-proxy/package.nix index 1c3b045bacdf..8e6aefc4b2b2 100644 --- a/pkgs/by-name/ht/https-dns-proxy/package.nix +++ b/pkgs/by-name/ht/https-dns-proxy/package.nix @@ -53,6 +53,7 @@ stdenv.mkDerivation rec { meta = { description = "DNS to DNS over HTTPS (DoH) proxy"; + homepage = "https://github.com/aarond10/https_dns_proxy"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ peterhoeg ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/hy/hyprprop/package.nix b/pkgs/by-name/hy/hyprprop/package.nix index 2a63d6d1f9e7..4c3c9f3dbab9 100644 --- a/pkgs/by-name/hy/hyprprop/package.nix +++ b/pkgs/by-name/hy/hyprprop/package.nix @@ -63,6 +63,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; }; meta = { description = "Xprop replacement for Hyprland"; + homepage = "https://github.com/hyprwm/contrib"; license = lib.licenses.mit; platforms = lib.platforms.unix; teams = [ lib.teams.hyprland ]; diff --git a/pkgs/by-name/in/intel-media-sdk/package.nix b/pkgs/by-name/in/intel-media-sdk/package.nix index 838f3dfbe2b5..12b89950abda 100644 --- a/pkgs/by-name/in/intel-media-sdk/package.nix +++ b/pkgs/by-name/in/intel-media-sdk/package.nix @@ -63,6 +63,7 @@ stdenv.mkDerivation rec { meta = { description = "Intel Media SDK"; + homepage = "https://github.com/Intel-Media-SDK/MediaSDK"; mainProgram = "mfx-tracer-config"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ diff --git a/pkgs/by-name/io/ioq3-scion/package.nix b/pkgs/by-name/io/ioq3-scion/package.nix index c054f1cc3b50..c5e07544da3d 100644 --- a/pkgs/by-name/io/ioq3-scion/package.nix +++ b/pkgs/by-name/io/ioq3-scion/package.nix @@ -22,6 +22,7 @@ ioquake3.overrideAttrs (old: { env.NIX_CFLAGS_COMPILE = "-std=gnu17"; meta = { description = "ioquake3 with support for path aware networking"; + homepage = "https://github.com/lschulz/ioq3-scion"; maintainers = with lib.maintainers; [ matthewcroughan ]; platforms = lib.platforms.linux; }; diff --git a/pkgs/by-name/ip/ipgrep/package.nix b/pkgs/by-name/ip/ipgrep/package.nix index 00d47caca389..010011bbc570 100644 --- a/pkgs/by-name/ip/ipgrep/package.nix +++ b/pkgs/by-name/ip/ipgrep/package.nix @@ -39,6 +39,7 @@ python3Packages.buildPythonApplication (finalAttrs: { ipgrep extracts possibly obfuscated host names and IP addresses from text, resolves host names, and prints them, sorted by ASN. ''; + homepage = "https://github.com/jedisct1/ipgrep"; license = lib.licenses.mit; platforms = lib.platforms.all; }; diff --git a/pkgs/by-name/ja/jack-passthrough/package.nix b/pkgs/by-name/ja/jack-passthrough/package.nix index 7ddef896944a..4725c4c63e2f 100644 --- a/pkgs/by-name/ja/jack-passthrough/package.nix +++ b/pkgs/by-name/ja/jack-passthrough/package.nix @@ -39,6 +39,7 @@ stdenv.mkDerivation { more ports than they normally would or to prevent them from auto-connecting to certain things. ''; + homepage = "https://github.com/guysherman/jack-passthrough"; # license unknown: https://github.com/guysherman/jack-passthrough/issues/2 license = lib.licenses.unfree; maintainers = [ lib.maintainers.PowerUser64 ]; diff --git a/pkgs/by-name/km/kminion/package.nix b/pkgs/by-name/km/kminion/package.nix index cd72491a7be5..db72214b1125 100644 --- a/pkgs/by-name/km/kminion/package.nix +++ b/pkgs/by-name/km/kminion/package.nix @@ -36,6 +36,7 @@ buildGoModule (finalAttrs: { meta = { description = "Feature-rich Prometheus exporter for Apache Kafka written in Go"; + homepage = "https://github.com/redpanda-data/kminion"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ cafkafk ]; mainProgram = "kminion"; diff --git a/pkgs/by-name/ks/kstart/package.nix b/pkgs/by-name/ks/kstart/package.nix index 56904bdcf4fa..73973607ad89 100644 --- a/pkgs/by-name/ks/kstart/package.nix +++ b/pkgs/by-name/ks/kstart/package.nix @@ -61,6 +61,7 @@ stdenv.mkDerivation (finalAttrs: { "man" ]; description = "Modified version of kerberos tools that support automatic ticket refresh"; + homepage = "https://github.com/rra/kstart"; license = lib.licenses.mit; platforms = lib.platforms.linux ++ lib.platforms.darwin; }; diff --git a/pkgs/by-name/kw/kwakd/package.nix b/pkgs/by-name/kw/kwakd/package.nix index e26f7d5bbff7..f5f2ee38a050 100644 --- a/pkgs/by-name/kw/kwakd/package.nix +++ b/pkgs/by-name/kw/kwakd/package.nix @@ -25,6 +25,7 @@ stdenv.mkDerivation { meta = { description = "Super small webserver that serves blank pages"; + homepage = "https://github.com/fetchinson/kwakd"; mainProgram = "kwakd"; license = lib.licenses.gpl2Only; maintainers = [ lib.maintainers.nicknovitski ]; diff --git a/pkgs/by-name/li/libloragw-2g4/package.nix b/pkgs/by-name/li/libloragw-2g4/package.nix index a68ffa732f47..fb7ea1b9a4a4 100644 --- a/pkgs/by-name/li/libloragw-2g4/package.nix +++ b/pkgs/by-name/li/libloragw-2g4/package.nix @@ -39,6 +39,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "LoRa 2.4Ghz Gateway - Linux host Hardware Abstraction Layer, and tools (Packet Forwarder...)"; + homepage = "https://github.com/Lora-net/gateway_2g4_hal"; license = [ lib.licenses.bsd3 lib.licenses.mit diff --git a/pkgs/by-name/li/libloragw-sx1301/package.nix b/pkgs/by-name/li/libloragw-sx1301/package.nix index aa9c8c3da07a..48c78ef6cda4 100644 --- a/pkgs/by-name/li/libloragw-sx1301/package.nix +++ b/pkgs/by-name/li/libloragw-sx1301/package.nix @@ -35,6 +35,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Driver/HAL to build a gateway using a concentrator board based on Semtech SX1301 multi-channel modem and SX1257/SX1255 RF transceivers"; + homepage = "https://github.com/brocaar/lora_gateway"; license = [ lib.licenses.bsd3 lib.licenses.mit diff --git a/pkgs/by-name/li/libloragw-sx1302/package.nix b/pkgs/by-name/li/libloragw-sx1302/package.nix index 47f4629b2fc9..c04f3eba309a 100644 --- a/pkgs/by-name/li/libloragw-sx1302/package.nix +++ b/pkgs/by-name/li/libloragw-sx1302/package.nix @@ -41,6 +41,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "SX1302 Hardware Abstraction Layer and Tools (packet forwarder...)"; + homepage = "https://github.com/brocaar/sx1302_hal"; license = [ lib.licenses.bsd3 lib.licenses.mit diff --git a/pkgs/by-name/li/libunicode/package.nix b/pkgs/by-name/li/libunicode/package.nix index 255c97a81dbc..b6a4661d0b34 100644 --- a/pkgs/by-name/li/libunicode/package.nix +++ b/pkgs/by-name/li/libunicode/package.nix @@ -49,6 +49,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Modern C++20 Unicode library"; + homepage = "https://github.com/contour-terminal/libunicode"; mainProgram = "unicode-query"; license = lib.licenses.asl20; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/li/libusbgx/package.nix b/pkgs/by-name/li/libusbgx/package.nix index fa119c947744..81f68f5b28c4 100644 --- a/pkgs/by-name/li/libusbgx/package.nix +++ b/pkgs/by-name/li/libusbgx/package.nix @@ -22,6 +22,7 @@ stdenv.mkDerivation { buildInputs = [ libconfig ]; meta = { description = "C library encapsulating the kernel USB gadget-configfs userspace API functionality"; + homepage = "https://github.com/linux-usb-gadgets/libusbgx"; license = with lib.licenses; [ lgpl21Plus # library gpl2Plus # examples diff --git a/pkgs/by-name/li/libxo/package.nix b/pkgs/by-name/li/libxo/package.nix index f8747a754e0e..84f8e3a281a3 100644 --- a/pkgs/by-name/li/libxo/package.nix +++ b/pkgs/by-name/li/libxo/package.nix @@ -63,6 +63,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Library to generate text, XML, JSON, and HTML"; + homepage = "https://github.com/Juniper/libxo"; license = lib.licenses.bsd2; maintainers = [ lib.maintainers.reckenrode ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/lo/loadwatch/package.nix b/pkgs/by-name/lo/loadwatch/package.nix index 2b71539c1fb0..dd275ec43cf5 100644 --- a/pkgs/by-name/lo/loadwatch/package.nix +++ b/pkgs/by-name/lo/loadwatch/package.nix @@ -19,6 +19,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Run a program using only idle cycles"; + homepage = "https://git.sr.ht/~woffs/loadwatch"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ woffs ]; platforms = lib.platforms.all; diff --git a/pkgs/by-name/lo/logmich/package.nix b/pkgs/by-name/lo/logmich/package.nix index b334e503b549..a0182ff78c19 100644 --- a/pkgs/by-name/lo/logmich/package.nix +++ b/pkgs/by-name/lo/logmich/package.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation { meta = { description = "A trivial logging library"; + homepage = "https://github.com/logmich/logmich"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.zlib; diff --git a/pkgs/by-name/ma/mari0/package.nix b/pkgs/by-name/ma/mari0/package.nix index cfe426771ffa..7c608693ddc7 100644 --- a/pkgs/by-name/ma/mari0/package.nix +++ b/pkgs/by-name/ma/mari0/package.nix @@ -51,6 +51,7 @@ stdenv.mkDerivation { meta = { description = "Crossover between Super Mario Bros. and Portal"; + homepage = "https://github.com/Stabyourself/mari0"; mainProgram = "mari0"; platforms = love.meta.platforms; license = lib.licenses.mit; diff --git a/pkgs/by-name/mi/minio-certgen/package.nix b/pkgs/by-name/mi/minio-certgen/package.nix index 1896ed524dd1..a61e7d43257a 100644 --- a/pkgs/by-name/mi/minio-certgen/package.nix +++ b/pkgs/by-name/mi/minio-certgen/package.nix @@ -19,6 +19,7 @@ buildGoModule (finalAttrs: { meta = { description = "Simple Minio tool to generate self-signed certificates, and provides SAN certificates with DNS and IP entries"; + homepage = "https://github.com/minio/certgen"; downloadPage = "https://github.com/minio/certgen"; license = lib.licenses.bsd3; maintainers = [ ]; diff --git a/pkgs/by-name/mi/mirakurun/package.nix b/pkgs/by-name/mi/mirakurun/package.nix index 4317d296276b..37e7c70f2be4 100644 --- a/pkgs/by-name/mi/mirakurun/package.nix +++ b/pkgs/by-name/mi/mirakurun/package.nix @@ -73,6 +73,7 @@ buildNpmPackage rec { meta = { description = "Resource manager for TV tuners"; + homepage = "https://github.com/Chinachu/Mirakurun"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ midchildan ]; }; diff --git a/pkgs/by-name/mi/mix2nix/package.nix b/pkgs/by-name/mi/mix2nix/package.nix index b15d6855a9b6..1b3084aebe0e 100644 --- a/pkgs/by-name/mi/mix2nix/package.nix +++ b/pkgs/by-name/mi/mix2nix/package.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Generate nix expressions from mix.lock file"; + homepage = "https://github.com/ydlr/mix2nix"; mainProgram = "mix2nix"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ ydlr ]; diff --git a/pkgs/by-name/mq/mqttmultimeter/package.nix b/pkgs/by-name/mq/mqttmultimeter/package.nix index a860c28d954e..8097f64ee461 100644 --- a/pkgs/by-name/mq/mqttmultimeter/package.nix +++ b/pkgs/by-name/mq/mqttmultimeter/package.nix @@ -60,6 +60,7 @@ buildDotnetModule rec { meta = { mainProgram = builtins.head executables; description = "MQTT traffic monitor"; + homepage = "https://github.com/chkr1011/mqttMultimeter"; license = lib.licenses.free; maintainers = with lib.maintainers; [ peterhoeg ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/mr/mrrescue/package.nix b/pkgs/by-name/mr/mrrescue/package.nix index 370a2c7eed04..f765f4c6c75f 100644 --- a/pkgs/by-name/mr/mrrescue/package.nix +++ b/pkgs/by-name/mr/mrrescue/package.nix @@ -70,6 +70,7 @@ stdenv.mkDerivation { meta = { description = "Arcade-style fire fighting game"; + homepage = "https://github.com/SimonLarsen/mrrescue"; mainProgram = "mrrescue"; maintainers = [ ]; platforms = love.meta.platforms; diff --git a/pkgs/by-name/ms/mscompress/package.nix b/pkgs/by-name/ms/mscompress/package.nix index d639f68949c1..dbfb27911966 100644 --- a/pkgs/by-name/ms/mscompress/package.nix +++ b/pkgs/by-name/ms/mscompress/package.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = ''Microsoft "compress.exe/expand.exe" compatible (de)compressor''; + homepage = "https://github.com/stapelberg/mscompress"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ peterhoeg ]; platforms = lib.platforms.all; diff --git a/pkgs/by-name/ms/msr-tools/package.nix b/pkgs/by-name/ms/msr-tools/package.nix index 8e6b0c1dd1e3..a6d8e40a9fd9 100644 --- a/pkgs/by-name/ms/msr-tools/package.nix +++ b/pkgs/by-name/ms/msr-tools/package.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation { meta = { description = "Tools to read/write from/to MSR CPU registers on Linux"; + homepage = "https://github.com/intel/msr-tools"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ peterhoeg ]; diff --git a/pkgs/by-name/mu/munge/package.nix b/pkgs/by-name/mu/munge/package.nix index f7893063482b..7fc62723aa80 100644 --- a/pkgs/by-name/mu/munge/package.nix +++ b/pkgs/by-name/mu/munge/package.nix @@ -75,6 +75,7 @@ stdenv.mkDerivation (finalAttrs: { description = '' An authentication service for creating and validating credentials ''; + homepage = "https://github.com/dun/munge"; license = [ # MUNGE lib.licenses.gpl3Plus diff --git a/pkgs/by-name/mv/mvebu64boot/package.nix b/pkgs/by-name/mv/mvebu64boot/package.nix index d33974f73a7e..f7e1b6ced1c1 100644 --- a/pkgs/by-name/mv/mvebu64boot/package.nix +++ b/pkgs/by-name/mv/mvebu64boot/package.nix @@ -28,6 +28,7 @@ stdenv.mkDerivation { meta = { description = "Boot 64-bit Marvell EBU SoC over UART"; + homepage = "https://github.com/pali/mvebu64boot"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ lukegb ]; platforms = lib.platforms.all; diff --git a/pkgs/by-name/ne/netris/package.nix b/pkgs/by-name/ne/netris/package.nix index 60dffc6036f7..fe54b8eaf795 100644 --- a/pkgs/by-name/ne/netris/package.nix +++ b/pkgs/by-name/ne/netris/package.nix @@ -41,6 +41,7 @@ stdenv.mkDerivation { meta = { description = "Free networked version of T*tris"; + homepage = "https://github.com/naclander/netris"; mainProgram = "netris"; license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ patryk27 ]; diff --git a/pkgs/by-name/ne/networkmanager-iodine/package.nix b/pkgs/by-name/ne/networkmanager-iodine/package.nix index 0dafad3b66af..fc18072a8f3a 100644 --- a/pkgs/by-name/ne/networkmanager-iodine/package.nix +++ b/pkgs/by-name/ne/networkmanager-iodine/package.nix @@ -72,6 +72,7 @@ stdenv.mkDerivation { meta = { description = "NetworkManager's iodine plugin"; + homepage = "https://gitlab.gnome.org/GNOME/network-manager-iodine"; inherit (networkmanager.meta) maintainers teams platforms; license = lib.licenses.gpl2Plus; }; diff --git a/pkgs/by-name/ne/newtonwars/package.nix b/pkgs/by-name/ne/newtonwars/package.nix index cfef73d2a03b..e511baf0b92f 100644 --- a/pkgs/by-name/ne/newtonwars/package.nix +++ b/pkgs/by-name/ne/newtonwars/package.nix @@ -45,6 +45,7 @@ stdenv.mkDerivation { meta = { description = "Space battle game with gravity as the main theme"; + homepage = "https://github.com/Draradech/NewtonWars"; mainProgram = "nw"; maintainers = with lib.maintainers; [ pSub ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/ni/nilfs-utils/package.nix b/pkgs/by-name/ni/nilfs-utils/package.nix index 9a4c6d54ab51..4b5679c33a95 100644 --- a/pkgs/by-name/ni/nilfs-utils/package.nix +++ b/pkgs/by-name/ni/nilfs-utils/package.nix @@ -59,6 +59,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "NILFS utilities"; + homepage = "https://github.com/nilfs-dev/nilfs-utils"; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; license = with lib.licenses; [ diff --git a/pkgs/by-name/ns/nsplist/package.nix b/pkgs/by-name/ns/nsplist/package.nix index aa649c2d0cc3..98dd27fe5519 100644 --- a/pkgs/by-name/ns/nsplist/package.nix +++ b/pkgs/by-name/ns/nsplist/package.nix @@ -35,6 +35,7 @@ stdenv.mkDerivation { meta = { maintainers = [ ]; description = "Parses .plist files"; + homepage = "https://github.com/matthewbauer/NSPlist"; license = lib.licenses.mit; platforms = lib.platforms.unix; }; diff --git a/pkgs/by-name/nu/numlockx/package.nix b/pkgs/by-name/nu/numlockx/package.nix index c02817dae95f..9b561c60c7d9 100644 --- a/pkgs/by-name/nu/numlockx/package.nix +++ b/pkgs/by-name/nu/numlockx/package.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation { meta = { description = "Allows to start X with NumLock turned on"; + homepage = "https://github.com/rg3/numlockx"; license = lib.licenses.mit; platforms = lib.platforms.all; mainProgram = "numlockx"; diff --git a/pkgs/by-name/od/odroid-xu3-bootloader/package.nix b/pkgs/by-name/od/odroid-xu3-bootloader/package.nix index 7868f85c0ed7..b559cc3a6c73 100644 --- a/pkgs/by-name/od/odroid-xu3-bootloader/package.nix +++ b/pkgs/by-name/od/odroid-xu3-bootloader/package.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation { platforms = lib.platforms.linux; license = lib.licenses.unfreeRedistributableFirmware; description = "Secure boot enabled boot loader for ODROID-XU{3,4}"; + homepage = "https://github.com/hardkernel/u-boot"; maintainers = [ ]; }; } diff --git a/pkgs/by-name/oi/ois/package.nix b/pkgs/by-name/oi/ois/package.nix index e619fa6f72ad..2565c1a9a193 100644 --- a/pkgs/by-name/oi/ois/package.nix +++ b/pkgs/by-name/oi/ois/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Object-oriented C++ input system"; + homepage = "https://github.com/wgois/OIS"; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.unix; license = lib.licenses.zlib; diff --git a/pkgs/by-name/or/orthorobot/package.nix b/pkgs/by-name/or/orthorobot/package.nix index 416ea142b70c..e2516d336447 100644 --- a/pkgs/by-name/or/orthorobot/package.nix +++ b/pkgs/by-name/or/orthorobot/package.nix @@ -79,6 +79,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Recharge the robot"; + homepage = "https://github.com/Stabyourself/orthorobot"; mainProgram = "orthorobot"; platforms = love.meta.platforms; license = lib.licenses.wtfpl; diff --git a/pkgs/by-name/ox/oxygenfonts/package.nix b/pkgs/by-name/ox/oxygenfonts/package.nix index 584d1b8e1c86..78a3613c3fd3 100644 --- a/pkgs/by-name/ox/oxygenfonts/package.nix +++ b/pkgs/by-name/ox/oxygenfonts/package.nix @@ -51,6 +51,7 @@ stdenvNoCC.mkDerivation { See: http://sansoxygen.com/ ''; + homepage = "https://github.com/vernnobile/oxygenFont"; license = lib.licenses.ofl; platforms = lib.platforms.all; }; diff --git a/pkgs/by-name/pa/pa_applet/package.nix b/pkgs/by-name/pa/pa_applet/package.nix index c32aabca6e67..607d50e27c64 100644 --- a/pkgs/by-name/pa/pa_applet/package.nix +++ b/pkgs/by-name/pa/pa_applet/package.nix @@ -49,6 +49,7 @@ stdenv.mkDerivation { meta = { description = ""; + homepage = "https://github.com/fernandotcl/pa-applet"; mainProgram = "pa-applet"; license = lib.licenses.bsd2; maintainers = [ ]; diff --git a/pkgs/by-name/pb/pbzx/package.nix b/pkgs/by-name/pb/pbzx/package.nix index a895863821ab..8aee634e3b83 100644 --- a/pkgs/by-name/pb/pbzx/package.nix +++ b/pkgs/by-name/pb/pbzx/package.nix @@ -29,6 +29,7 @@ stdenv.mkDerivation (finalAttrs: { ''; meta = { description = "Stream parser of Apple's pbzx compression format"; + homepage = "https://github.com/NiklasRosenstein/pbzx"; platforms = lib.platforms.unix; license = lib.licenses.gpl3; maintainers = [ ]; diff --git a/pkgs/by-name/pd/pdftag/package.nix b/pkgs/by-name/pd/pdftag/package.nix index bae1464c9eb9..738ab6684c41 100644 --- a/pkgs/by-name/pd/pdftag/package.nix +++ b/pkgs/by-name/pd/pdftag/package.nix @@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Edit metadata found in PDFs"; + homepage = "https://github.com/arrufat/pdftag"; license = lib.licenses.gpl3; platforms = lib.platforms.unix; mainProgram = "pdftag"; diff --git a/pkgs/by-name/pi/pipenv/package.nix b/pkgs/by-name/pi/pipenv/package.nix index f634948ad3fc..f625406ec75d 100644 --- a/pkgs/by-name/pi/pipenv/package.nix +++ b/pkgs/by-name/pi/pipenv/package.nix @@ -108,6 +108,7 @@ buildPythonApplication rec { meta = { description = "Python Development Workflow for Humans"; + homepage = "https://github.com/pypa/pipenv"; license = lib.licenses.mit; platforms = lib.platforms.all; mainProgram = "pipenv"; diff --git a/pkgs/by-name/pi/pixz/package.nix b/pkgs/by-name/pi/pixz/package.nix index 5dcdcd49afb2..dc3b398874be 100644 --- a/pkgs/by-name/pi/pixz/package.nix +++ b/pkgs/by-name/pi/pixz/package.nix @@ -49,6 +49,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Parallel compressor/decompressor for xz format"; + homepage = "https://github.com/vasi/pixz"; license = lib.licenses.bsd2; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/pl/plistcpp/package.nix b/pkgs/by-name/pl/plistcpp/package.nix index 015e443d7f37..f57dc1953aab 100644 --- a/pkgs/by-name/pl/plistcpp/package.nix +++ b/pkgs/by-name/pl/plistcpp/package.nix @@ -39,6 +39,7 @@ stdenv.mkDerivation { meta = { maintainers = [ ]; description = "CPP bindings for Plist"; + homepage = "https://github.com/matthewbauer/PlistCpp"; license = lib.licenses.mit; platforms = lib.platforms.unix; }; diff --git a/pkgs/by-name/po/powercap/package.nix b/pkgs/by-name/po/powercap/package.nix index 38692932a202..7e28880391cb 100644 --- a/pkgs/by-name/po/powercap/package.nix +++ b/pkgs/by-name/po/powercap/package.nix @@ -34,6 +34,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Tools and library to read/write to the Linux power capping framework (sysfs interface)"; + homepage = "https://github.com/powercap/powercap"; license = lib.licenses.bsd3; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ rowanG077 ]; diff --git a/pkgs/by-name/po/powersploit/package.nix b/pkgs/by-name/po/powersploit/package.nix index 1f2600a7493d..9c452d954b28 100644 --- a/pkgs/by-name/po/powersploit/package.nix +++ b/pkgs/by-name/po/powersploit/package.nix @@ -26,6 +26,7 @@ stdenvNoCC.mkDerivation { meta = { changelog = "https://github.com/PowerShellMafia/PowerSploit/releases/"; description = "PowerShell Post-Exploitation Framework"; + homepage = "https://github.com/PowerShellMafia/PowerSploit"; license = with lib.licenses; [ bsd3 ]; maintainers = with lib.maintainers; [ shard7 ]; platforms = lib.platforms.all; diff --git a/pkgs/by-name/pr/priocpp/package.nix b/pkgs/by-name/pr/priocpp/package.nix index d2518f9bee89..6e65a8a71a4d 100644 --- a/pkgs/by-name/pr/priocpp/package.nix +++ b/pkgs/by-name/pr/priocpp/package.nix @@ -47,6 +47,7 @@ stdenv.mkDerivation { meta = { description = "Property I/O for C++"; + homepage = "https://github.com/Grumbel/priocpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.free; diff --git a/pkgs/by-name/pw/pwalarmctl/package.nix b/pkgs/by-name/pw/pwalarmctl/package.nix index 6e6a09f14a75..ebc6392463b7 100644 --- a/pkgs/by-name/pw/pwalarmctl/package.nix +++ b/pkgs/by-name/pw/pwalarmctl/package.nix @@ -35,6 +35,7 @@ rustPlatform.buildRustPackage (finalAttrs: { for live configuration changes and access to the active state of pwalarmd. ''; + homepage = "https://github.com/amyipdev/pwalarmd"; mainProgram = "pwalarmctl"; license = lib.licenses.gpl2Only; platforms = lib.platforms.all; diff --git a/pkgs/by-name/pw/pwalarmd/package.nix b/pkgs/by-name/pw/pwalarmd/package.nix index 37eda91a9eb2..dfce084957c0 100644 --- a/pkgs/by-name/pw/pwalarmd/package.nix +++ b/pkgs/by-name/pw/pwalarmd/package.nix @@ -29,6 +29,7 @@ rustPlatform.buildRustPackage (finalAttrs: { It has extensive configuration and personalization, PulseAudio and PipeWire support, and supports live configuration changes. ''; + homepage = "https://github.com/amyipdev/pwalarmd"; mainProgram = "pwalarmd"; license = lib.licenses.gpl2Only; platforms = lib.platforms.all; diff --git a/pkgs/by-name/qu/quartz-wm/package.nix b/pkgs/by-name/qu/quartz-wm/package.nix index 68d373ba102a..d9bc9b1fd90c 100644 --- a/pkgs/by-name/qu/quartz-wm/package.nix +++ b/pkgs/by-name/qu/quartz-wm/package.nix @@ -41,6 +41,7 @@ clangStdenv.mkDerivation (finalAttrs: { ]; meta = { + homepage = "https://gitlab.freedesktop.org/xorg/app/quartz-wm"; license = lib.licenses.apple-psl20; platforms = lib.platforms.darwin; maintainers = [ lib.maintainers.booxter ]; diff --git a/pkgs/by-name/qu/quirc/package.nix b/pkgs/by-name/qu/quirc/package.nix index e5fb332a2289..de49ff5fe24f 100644 --- a/pkgs/by-name/qu/quirc/package.nix +++ b/pkgs/by-name/qu/quirc/package.nix @@ -74,6 +74,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Small QR code decoding library"; + homepage = "https://github.com/dlbeer/quirc"; license = lib.licenses.isc; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/re/reattach-to-user-namespace/package.nix b/pkgs/by-name/re/reattach-to-user-namespace/package.nix index a77f696f55ea..9e5d6419fd9b 100644 --- a/pkgs/by-name/re/reattach-to-user-namespace/package.nix +++ b/pkgs/by-name/re/reattach-to-user-namespace/package.nix @@ -30,6 +30,7 @@ stdenv.mkDerivation rec { meta = { description = "Wrapper that provides access to the Mac OS X pasteboard service"; + homepage = "https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard"; license = lib.licenses.bsd2; maintainers = [ ]; platforms = lib.platforms.darwin; diff --git a/pkgs/by-name/rt/rt/package.nix b/pkgs/by-name/rt/rt/package.nix index 5582bc15bee5..9ea0019a6532 100644 --- a/pkgs/by-name/rt/rt/package.nix +++ b/pkgs/by-name/rt/rt/package.nix @@ -183,6 +183,7 @@ stdenv.mkDerivation (finalAttrs: { ''; meta = { + homepage = "https://github.com/bestpractical/rt"; platforms = lib.platforms.unix; license = lib.licenses.gpl2Only; }; diff --git a/pkgs/by-name/rt/rt5677-firmware/package.nix b/pkgs/by-name/rt/rt5677-firmware/package.nix index 7ec294d8780b..e7c03db10ded 100644 --- a/pkgs/by-name/rt/rt5677-firmware/package.nix +++ b/pkgs/by-name/rt/rt5677-firmware/package.nix @@ -22,6 +22,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { meta = { description = "Firmware for Realtek rt5677 device"; + homepage = "https://github.com/raphael/linux-samus"; license = lib.licenses.unfreeRedistributableFirmware; maintainers = with lib.maintainers; [ zohl ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/rt/rtl8761b-firmware/package.nix b/pkgs/by-name/rt/rtl8761b-firmware/package.nix index eb32aa353440..0fe71e03ca15 100644 --- a/pkgs/by-name/rt/rtl8761b-firmware/package.nix +++ b/pkgs/by-name/rt/rtl8761b-firmware/package.nix @@ -27,6 +27,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { meta = { description = "Firmware for Realtek RTL8761b"; + homepage = "https://github.com/Realtek-OpenSource/android_hardware_realtek"; license = lib.licenses.unfreeRedistributableFirmware; maintainers = with lib.maintainers; [ milibopp ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/ru/runzip/package.nix b/pkgs/by-name/ru/runzip/package.nix index 5ad60868bcf0..ce558eba78ab 100644 --- a/pkgs/by-name/ru/runzip/package.nix +++ b/pkgs/by-name/ru/runzip/package.nix @@ -39,6 +39,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Tool to convert filename encoding inside a ZIP archive"; + homepage = "https://github.com/vlm/zip-fix-filename-encoding"; license = lib.licenses.bsd2; maintainers = [ lib.maintainers.raskin ]; # runzip vendors libzip 0.7.1. diff --git a/pkgs/by-name/rw/rwc/package.nix b/pkgs/by-name/rw/rwc/package.nix index 597885ca7d53..f14cedf10a02 100644 --- a/pkgs/by-name/rw/rwc/package.nix +++ b/pkgs/by-name/rw/rwc/package.nix @@ -19,6 +19,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Report when files are changed"; + homepage = "https://github.com/leahneukirchen/rwc"; license = lib.licenses.publicDomain; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ somasis ]; diff --git a/pkgs/by-name/se/seehecht/package.nix b/pkgs/by-name/se/seehecht/package.nix index 17ef07029f27..5feb2f9068b4 100644 --- a/pkgs/by-name/se/seehecht/package.nix +++ b/pkgs/by-name/se/seehecht/package.nix @@ -23,6 +23,7 @@ rustPlatform.buildRustPackage (finalAttrs: { meta = { description = "Tool to quickly open a markdown document with already filled out frontmatter"; + homepage = "https://codeberg.org/annaaurora/seehecht"; license = lib.licenses.lgpl3Only; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ annaaurora ]; diff --git a/pkgs/by-name/se/sexp-cpp/package.nix b/pkgs/by-name/se/sexp-cpp/package.nix index 52b915243d36..a5ce0cb66786 100644 --- a/pkgs/by-name/se/sexp-cpp/package.nix +++ b/pkgs/by-name/se/sexp-cpp/package.nix @@ -38,6 +38,7 @@ stdenv.mkDerivation { meta = { description = "S-Expression parser for C++"; + homepage = "https://github.com/lispparser/sexp-cpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.gpl3; diff --git a/pkgs/by-name/sh/sha1collisiondetection/package.nix b/pkgs/by-name/sh/sha1collisiondetection/package.nix index 907f662b3666..32289cba10cc 100644 --- a/pkgs/by-name/sh/sha1collisiondetection/package.nix +++ b/pkgs/by-name/sh/sha1collisiondetection/package.nix @@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: { each file. It is very fast and takes less than twice the amount of time as regular SHA-1. ''; + homepage = "https://github.com/cr-marcstevens/sha1collisiondetection"; platforms = lib.platforms.all; license = lib.licenses.mit; mainProgram = "sha1dcsum"; diff --git a/pkgs/by-name/si/sigtop/package.nix b/pkgs/by-name/si/sigtop/package.nix index dad47b1a982b..7f3305b1bf0b 100644 --- a/pkgs/by-name/si/sigtop/package.nix +++ b/pkgs/by-name/si/sigtop/package.nix @@ -28,6 +28,7 @@ buildGoModule (finalAttrs: { meta = { description = "Utility to export messages, attachments and other data from Signal Desktop"; + homepage = "https://github.com/tbvdm/sigtop"; mainProgram = "sigtop"; license = lib.licenses.isc; platforms = lib.platforms.all; diff --git a/pkgs/by-name/sl/slack-cli/package.nix b/pkgs/by-name/sl/slack-cli/package.nix index 36bbe1bdd64c..bd49d240c99e 100644 --- a/pkgs/by-name/sl/slack-cli/package.nix +++ b/pkgs/by-name/sl/slack-cli/package.nix @@ -59,6 +59,7 @@ stdenv.mkDerivation (finalAttrs: { ''; meta = { + homepage = "https://github.com/rockymadden/slack-cli"; license = lib.licenses.mit; maintainers = [ ]; mainProgram = "slack"; diff --git a/pkgs/by-name/sn/snooze/package.nix b/pkgs/by-name/sn/snooze/package.nix index f49604c270c9..1c3432259a8b 100644 --- a/pkgs/by-name/sn/snooze/package.nix +++ b/pkgs/by-name/sn/snooze/package.nix @@ -19,6 +19,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Tool for waiting until a particular time and then running a command"; + homepage = "https://github.com/leahneukirchen/snooze"; maintainers = with lib.maintainers; [ kaction ]; license = lib.licenses.cc0; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/st/stlink/package.nix b/pkgs/by-name/st/stlink/package.nix index da9ea1b4786f..7ebde6a72328 100644 --- a/pkgs/by-name/st/stlink/package.nix +++ b/pkgs/by-name/st/stlink/package.nix @@ -63,6 +63,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "In-circuit debug and programming for ST-Link devices"; + homepage = "https://github.com/stlink-org/stlink"; license = lib.licenses.bsd3; platforms = lib.platforms.unix; badPlatforms = lib.platforms.darwin; diff --git a/pkgs/by-name/st/stress/package.nix b/pkgs/by-name/st/stress/package.nix index a61ba45c7b12..bce58a7dec9c 100644 --- a/pkgs/by-name/st/stress/package.nix +++ b/pkgs/by-name/st/stress/package.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Simple workload generator for POSIX systems. It imposes a configurable amount of CPU, memory, I/O, and disk stress on the system"; + homepage = "https://github.com/resurrecting-open-source-projects/stress"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.unix; mainProgram = "stress"; diff --git a/pkgs/by-name/st/strutcpp/package.nix b/pkgs/by-name/st/strutcpp/package.nix index f15f2bfaa1be..6b87b838dcf7 100644 --- a/pkgs/by-name/st/strutcpp/package.nix +++ b/pkgs/by-name/st/strutcpp/package.nix @@ -32,6 +32,7 @@ stdenv.mkDerivation { meta = { description = "Collection of string utilities"; + homepage = "https://github.com/Grumbel/strutcpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.free; diff --git a/pkgs/by-name/st/stw/package.nix b/pkgs/by-name/st/stw/package.nix index ace62888fa4e..8a02a0659269 100644 --- a/pkgs/by-name/st/stw/package.nix +++ b/pkgs/by-name/st/stw/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation { meta = { description = "Simple text widget for X resembling the watch(1) command"; + homepage = "https://github.com/sineemore/stw"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ somasis ]; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/sw/sway-assign-cgroups/package.nix b/pkgs/by-name/sw/sway-assign-cgroups/package.nix index 432d5d86b91d..234a5d9aeb11 100644 --- a/pkgs/by-name/sw/sway-assign-cgroups/package.nix +++ b/pkgs/by-name/sw/sway-assign-cgroups/package.nix @@ -44,6 +44,7 @@ python3Packages.buildPythonApplication (finalAttrs: { Therefore it's recommended to supplement the script with use of systemd user services for such background apps. ''; + homepage = "https://github.com/alebastr/sway-systemd"; license = lib.licenses.mit; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ nickhu ]; diff --git a/pkgs/by-name/sy/sympow/package.nix b/pkgs/by-name/sy/sympow/package.nix index 06bf91fadc5f..862bdfd5a74a 100644 --- a/pkgs/by-name/sy/sympow/package.nix +++ b/pkgs/by-name/sy/sympow/package.nix @@ -72,6 +72,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Compute special values of symmetric power elliptic curve L-functions"; + homepage = "https://gitlab.com/rezozer/forks/sympow"; mainProgram = "sympow"; license = { shortName = "sympow"; diff --git a/pkgs/by-name/ta/tar2ext4/package.nix b/pkgs/by-name/ta/tar2ext4/package.nix index eebeb10e9f6f..9300227c8dfd 100644 --- a/pkgs/by-name/ta/tar2ext4/package.nix +++ b/pkgs/by-name/ta/tar2ext4/package.nix @@ -20,6 +20,7 @@ buildGoModule (finalAttrs: { meta = { description = "Convert a tar archive to an ext4 image"; + homepage = "https://github.com/microsoft/hcsshim"; maintainers = with lib.maintainers; [ qyliss ]; license = lib.licenses.mit; mainProgram = "tar2ext4"; diff --git a/pkgs/by-name/te/termbench-pro/package.nix b/pkgs/by-name/te/termbench-pro/package.nix index 6ac6f19f1848..99f4bb29a714 100644 --- a/pkgs/by-name/te/termbench-pro/package.nix +++ b/pkgs/by-name/te/termbench-pro/package.nix @@ -40,6 +40,7 @@ stdenv.mkDerivation { meta = { description = "Terminal Benchmarking as CLI and library"; + homepage = "https://github.com/contour-terminal/termbench-pro"; mainProgram = "tb"; license = lib.licenses.asl20; platforms = lib.platforms.unix; diff --git a/pkgs/by-name/te/termtekst/package.nix b/pkgs/by-name/te/termtekst/package.nix index 9589b1ccd50a..0ae2be7536be 100644 --- a/pkgs/by-name/te/termtekst/package.nix +++ b/pkgs/by-name/te/termtekst/package.nix @@ -39,6 +39,7 @@ python3Packages.buildPythonApplication (finalAttrs: { as a workaround the braille set is abused to approximate the graphics. ''; + homepage = "https://github.com/zevv/termtekst"; license = lib.licenses.mit; platforms = lib.platforms.all; }; diff --git a/pkgs/by-name/te/tesh/package.nix b/pkgs/by-name/te/tesh/package.nix index 9a6eae86f6ec..4ed4a53ed376 100644 --- a/pkgs/by-name/te/tesh/package.nix +++ b/pkgs/by-name/te/tesh/package.nix @@ -29,6 +29,7 @@ python3Packages.buildPythonPackage rec { ]; meta = { + homepage = "https://github.com/OceanSprint/tesh"; license = lib.licenses.mit; }; } diff --git a/pkgs/by-name/ti/tinycmmc/package.nix b/pkgs/by-name/ti/tinycmmc/package.nix index 796639ee45b3..ccc467c45338 100644 --- a/pkgs/by-name/ti/tinycmmc/package.nix +++ b/pkgs/by-name/ti/tinycmmc/package.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation { meta = { description = "Tiny CMake Module Collections"; + homepage = "https://github.com/Grumbel/tinycmmc"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.zlib; diff --git a/pkgs/by-name/ti/tinygettext/package.nix b/pkgs/by-name/ti/tinygettext/package.nix index 7ea1ea0fc1b9..7208f4898094 100644 --- a/pkgs/by-name/ti/tinygettext/package.nix +++ b/pkgs/by-name/ti/tinygettext/package.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation { meta = { description = "A simple gettext replacement that works directly on .po files"; + homepage = "https://github.com/tinygettext/tinygettext"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.zlib; diff --git a/pkgs/by-name/tp/tpacpi-bat/package.nix b/pkgs/by-name/tp/tpacpi-bat/package.nix index 48111ede5e44..de5f86b1ba8c 100644 --- a/pkgs/by-name/tp/tpacpi-bat/package.nix +++ b/pkgs/by-name/tp/tpacpi-bat/package.nix @@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: { maintainers = [ lib.maintainers.orbekk ]; platforms = lib.platforms.linux; description = "Tool to set battery charging thresholds on Lenovo Thinkpad"; + homepage = "https://github.com/teleshoes/tpacpi-bat"; mainProgram = "tpacpi-bat"; license = lib.licenses.gpl3Plus; }; diff --git a/pkgs/by-name/ui/uitest/package.nix b/pkgs/by-name/ui/uitest/package.nix index 9eff2ef5b47f..3bbfaddb6484 100644 --- a/pkgs/by-name/ui/uitest/package.nix +++ b/pkgs/by-name/ui/uitest/package.nix @@ -27,6 +27,7 @@ stdenv.mkDerivation { meta = { description = "Simple testing framework for interactive tests"; + homepage = "https://github.com/Grumbel/uitest"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.gpl3; diff --git a/pkgs/by-name/un/unnamed-sdvx-clone/package.nix b/pkgs/by-name/un/unnamed-sdvx-clone/package.nix index 20684058b43f..1a92f78a9cf0 100644 --- a/pkgs/by-name/un/unnamed-sdvx-clone/package.nix +++ b/pkgs/by-name/un/unnamed-sdvx-clone/package.nix @@ -103,6 +103,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Game based on K-Shoot MANIA and Sound Voltex"; + homepage = "https://github.com/Drewol/unnamed-sdvx-clone"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ sako ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/wa/wavefunctioncollapse/package.nix b/pkgs/by-name/wa/wavefunctioncollapse/package.nix index 6d9b6ce6aa8a..a720ebeb9f47 100644 --- a/pkgs/by-name/wa/wavefunctioncollapse/package.nix +++ b/pkgs/by-name/wa/wavefunctioncollapse/package.nix @@ -31,6 +31,7 @@ stdenv.mkDerivation { buildInputs = [ mono ]; meta = { description = "Generator of bitmaps that are locally similar to the input bitmap"; + homepage = "https://github.com/mxgmn/WaveFunctionCollapse"; license = lib.licenses.mit; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/we/webcord-vencord/package.nix b/pkgs/by-name/we/webcord-vencord/package.nix index 7053f4bb5a7c..24f36c08118b 100644 --- a/pkgs/by-name/we/webcord-vencord/package.nix +++ b/pkgs/by-name/we/webcord-vencord/package.nix @@ -21,6 +21,7 @@ inherit (old.meta) license mainProgram platforms; description = "Webcord with Vencord web extension"; + homepage = "https://github.com/SpacingBat3/WebCord"; maintainers = with lib.maintainers; [ FlafyDev NotAShelf diff --git a/pkgs/by-name/wi/wireworld/package.nix b/pkgs/by-name/wi/wireworld/package.nix index cbcececa93a0..41f9d9ddd6f9 100644 --- a/pkgs/by-name/wi/wireworld/package.nix +++ b/pkgs/by-name/wi/wireworld/package.nix @@ -51,6 +51,7 @@ stdenv.mkDerivation { meta = { description = "Fascinating electronics logic puzzles, game where you'll learn how to build clocks, diodes, and logic gates"; + homepage = "https://gitlab.com/blinry/wireworld"; mainProgram = "Wireworld"; license = with lib.licenses; [ mit diff --git a/pkgs/by-name/wm/wmfs/package.nix b/pkgs/by-name/wm/wmfs/package.nix index 273c2c920d85..355d0fd4de2c 100644 --- a/pkgs/by-name/wm/wmfs/package.nix +++ b/pkgs/by-name/wm/wmfs/package.nix @@ -52,6 +52,7 @@ stdenv.mkDerivation { meta = { description = "Window manager from scratch"; + homepage = "https://github.com/xorg62/wmfs"; license = lib.licenses.bsd2; maintainers = [ lib.maintainers.balsoft ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/ws/wstsound/package.nix b/pkgs/by-name/ws/wstsound/package.nix index 2464faaf69ed..b836fb9a2294 100644 --- a/pkgs/by-name/ws/wstsound/package.nix +++ b/pkgs/by-name/ws/wstsound/package.nix @@ -57,6 +57,7 @@ stdenv.mkDerivation { meta = { description = "Windstille Sound Library"; + homepage = "https://github.com/WindstilleTeam/wstsound"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.free; diff --git a/pkgs/by-name/xb/xbanish/package.nix b/pkgs/by-name/xb/xbanish/package.nix index 572c7bb0778c..1ce78f8e111b 100644 --- a/pkgs/by-name/xb/xbanish/package.nix +++ b/pkgs/by-name/xb/xbanish/package.nix @@ -48,6 +48,7 @@ stdenv.mkDerivation (finalAttrs: { The name comes from ratpoison's "banish" command that sends the cursor to the corner of the screen. ''; + homepage = "https://github.com/jcs/xbanish"; license = lib.licenses.bsd3; maintainers = [ lib.maintainers.choochootrain ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/xd/xdg-desktop-portal-gtk/package.nix b/pkgs/by-name/xd/xdg-desktop-portal-gtk/package.nix index e9c77c3c0348..c8dab9ff8426 100644 --- a/pkgs/by-name/xd/xdg-desktop-portal-gtk/package.nix +++ b/pkgs/by-name/xd/xdg-desktop-portal-gtk/package.nix @@ -48,6 +48,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Desktop integration portals for sandboxed apps"; + homepage = "https://github.com/flatpak/xdg-desktop-portal-gtk"; maintainers = with lib.maintainers; [ jtojnar ]; platforms = lib.platforms.linux; license = lib.licenses.lgpl21Plus; diff --git a/pkgs/by-name/xd/xdgcpp/package.nix b/pkgs/by-name/xd/xdgcpp/package.nix index ef8162e9fa15..3853360be99a 100644 --- a/pkgs/by-name/xd/xdgcpp/package.nix +++ b/pkgs/by-name/xd/xdgcpp/package.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation { meta = { description = "Implementation of the XDG Base Directory Specification in C++"; + homepage = "https://github.com/Grumbel/xdgcpp"; maintainers = [ lib.maintainers.SchweGELBin ]; platforms = lib.platforms.linux; license = lib.licenses.lgpl3; diff --git a/pkgs/by-name/xi/xib2nib/package.nix b/pkgs/by-name/xi/xib2nib/package.nix index 35d87f62867e..df1184698951 100644 --- a/pkgs/by-name/xi/xib2nib/package.nix +++ b/pkgs/by-name/xi/xib2nib/package.nix @@ -31,6 +31,7 @@ stdenv.mkDerivation { meta = { maintainers = [ ]; description = "Compiles CocoaTouch .xib files into .nib"; + homepage = "https://github.com/matthewbauer/xib2nib"; license = lib.licenses.mit; platforms = lib.platforms.unix; }; diff --git a/pkgs/by-name/xs/xsensors/package.nix b/pkgs/by-name/xs/xsensors/package.nix index 36745f3453dc..e97d756d0cb1 100644 --- a/pkgs/by-name/xs/xsensors/package.nix +++ b/pkgs/by-name/xs/xsensors/package.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation (finalAttrs: { ]; meta = { + homepage = "https://github.com/Mystro256/xsensors"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.linux; maintainers = [ ]; diff --git a/pkgs/by-name/xs/xss-lock/package.nix b/pkgs/by-name/xs/xss-lock/package.nix index 86a7cfeaa8ce..d01902021757 100644 --- a/pkgs/by-name/xs/xss-lock/package.nix +++ b/pkgs/by-name/xs/xss-lock/package.nix @@ -47,6 +47,7 @@ stdenv.mkDerivation { meta = { description = "Use external locker (such as i3lock) as X screen saver"; + homepage = "https://github.com/xdbob/xss-lock"; license = lib.licenses.mit; mainProgram = "xss-lock"; maintainers = with lib.maintainers; [ diff --git a/pkgs/by-name/xs/xssstate/package.nix b/pkgs/by-name/xs/xssstate/package.nix index 8572a6ecccf0..d53b0e502604 100644 --- a/pkgs/by-name/xs/xssstate/package.nix +++ b/pkgs/by-name/xs/xssstate/package.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation (finalAttrs: { ]; meta = { + homepage = "https://git.suckless.org/xssstate/file/README.html"; description = "Simple tool to retrieve the X screensaver state"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ onemoresuza ]; diff --git a/pkgs/by-name/xv/xva-img/package.nix b/pkgs/by-name/xv/xva-img/package.nix index 718c31ef0aa0..dcc57afe23f6 100644 --- a/pkgs/by-name/xv/xva-img/package.nix +++ b/pkgs/by-name/xv/xva-img/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { maintainers = [ ]; description = "Tool for converting Xen images to raw and back"; + homepage = "https://github.com/eriklax/xva-img"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.unix; mainProgram = "xva-img"; diff --git a/pkgs/by-name/xw/xwinmosaic/package.nix b/pkgs/by-name/xw/xwinmosaic/package.nix index 0a45662bb9df..8436101ff10c 100644 --- a/pkgs/by-name/xw/xwinmosaic/package.nix +++ b/pkgs/by-name/xw/xwinmosaic/package.nix @@ -46,6 +46,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "X window switcher drawing a colourful grid"; + homepage = "https://github.com/soulthreads/xwinmosaic"; license = lib.licenses.bsd2; maintainers = [ lib.maintainers.raskin ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/zs/zs-apc-spdu-ctl/package.nix b/pkgs/by-name/zs/zs-apc-spdu-ctl/package.nix index fcfd1ae18781..8e3d17ef417a 100644 --- a/pkgs/by-name/zs/zs-apc-spdu-ctl/package.nix +++ b/pkgs/by-name/zs/zs-apc-spdu-ctl/package.nix @@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "APC SPDU control utility"; + homepage = "https://github.com/fogti/zs-apc-spdu-ctl"; license = lib.licenses.mit; maintainers = [ ]; platforms = lib.platforms.linux; diff --git a/pkgs/development/compilers/llvm/common/clang/default.nix b/pkgs/development/compilers/llvm/common/clang/default.nix index e3ef79039539..4b6a18a18a43 100644 --- a/pkgs/development/compilers/llvm/common/clang/default.nix +++ b/pkgs/development/compilers/llvm/common/clang/default.nix @@ -245,6 +245,7 @@ stdenv.mkDerivation ( meta = llvm_meta // { description = "man page for Clang ${version}"; + homepage = "https://github.com/llvm/llvm-project"; }; } ) diff --git a/pkgs/development/compilers/llvm/common/lldb/default.nix b/pkgs/development/compilers/llvm/common/lldb/default.nix index e146f1d896b8..75bdebc71906 100644 --- a/pkgs/development/compilers/llvm/common/lldb/default.nix +++ b/pkgs/development/compilers/llvm/common/lldb/default.nix @@ -213,6 +213,7 @@ stdenv.mkDerivation ( meta = llvm_meta // { description = "man pages for LLDB ${version}"; + homepage = "https://github.com/llvm/llvm-project"; }; } ) diff --git a/pkgs/development/compilers/llvm/common/llvm/default.nix b/pkgs/development/compilers/llvm/common/llvm/default.nix index d5dcd4d58cce..a886dac9c709 100644 --- a/pkgs/development/compilers/llvm/common/llvm/default.nix +++ b/pkgs/development/compilers/llvm/common/llvm/default.nix @@ -626,6 +626,7 @@ stdenv.mkDerivation ( meta = llvm_meta // { description = "man pages for LLVM ${version}"; + homepage = "https://github.com/llvm/llvm-project"; }; } ) diff --git a/pkgs/development/compilers/yosys/plugins/bluespec.nix b/pkgs/development/compilers/yosys/plugins/bluespec.nix index 29f2da23e49d..4379a5a16394 100644 --- a/pkgs/development/compilers/yosys/plugins/bluespec.nix +++ b/pkgs/development/compilers/yosys/plugins/bluespec.nix @@ -38,6 +38,7 @@ stdenv.mkDerivation { meta = { description = "Bluespec plugin for Yosys"; + homepage = "https://github.com/thoughtpolice/yosys-bluespec"; license = lib.licenses.isc; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ thoughtpolice ]; diff --git a/pkgs/development/libraries/qoauth/default.nix b/pkgs/development/libraries/qoauth/default.nix index 6ec0a7bc0517..d8f840078aa0 100644 --- a/pkgs/development/libraries/qoauth/default.nix +++ b/pkgs/development/libraries/qoauth/default.nix @@ -40,6 +40,7 @@ stdenv.mkDerivation rec { meta = { description = "Qt library for OAuth authentication"; + homepage = "https://github.com/ayoy/qoauth"; inherit (qtbase.meta) platforms; license = lib.licenses.lgpl21; }; diff --git a/pkgs/development/lisp-modules/packages.nix b/pkgs/development/lisp-modules/packages.nix index 83399f8ec787..560e80f954dc 100644 --- a/pkgs/development/lisp-modules/packages.nix +++ b/pkgs/development/lisp-modules/packages.nix @@ -221,6 +221,9 @@ let "slynk/indentation" "slynk/retro" ]; + meta = { + homepage = "https://github.com/joaotavora/sly"; + }; }; cephes = build-with-compile-into-pwd { @@ -331,6 +334,9 @@ let nativeLibs = [ pkgs.gtk4 ]; + meta = { + homepage = "https://github.com/bohonghuang/cl-gtk4"; + }; }; cl-gtk4_dot_adw = build-asdf-system { @@ -347,6 +353,9 @@ let nativeLibs = [ pkgs.libadwaita ]; + meta = { + homepage = "https://github.com/bohonghuang/cl-gtk4"; + }; }; cl-gtk4_dot_webkit = build-asdf-system { @@ -363,6 +372,9 @@ let nativeLibs = [ pkgs.webkitgtk_6_0 ]; + meta = { + homepage = "https://github.com/bohonghuang/cl-gtk4"; + }; }; cl-avro = build-asdf-system { @@ -389,6 +401,9 @@ let time-interval trivial-extensible-sequences ]; + meta = { + homepage = "https://github.com/SahilKang/cl-avro"; + }; }; frugal-uuid = super.frugal-uuid.overrideLispAttrs (o: { @@ -433,6 +448,9 @@ let mcclim mcclim-layouts ]; + meta = { + homepage = "https://github.com/kaveh808/kons-9"; + }; }; kons-9 = build-asdf-system { @@ -465,6 +483,9 @@ let shasht org_dot_melusina_dot_confidence ]; + meta = { + homepage = "https://github.com/kaveh808/kons-9"; + }; }; nsb-cga = super.nsb-cga.overrideLispAttrs (old: { @@ -528,7 +549,10 @@ let runHook postInstall ''; - meta.mainProgram = "qlot"; + meta = { + mainProgram = "qlot"; + homepage = "https://github.com/fukamachi/qlot"; + }; }; fset = super.fset.overrideLispAttrs (old: { diff --git a/pkgs/development/misc/or1k/newlib.nix b/pkgs/development/misc/or1k/newlib.nix index b45cf4fe96ee..4ea6471eeacf 100644 --- a/pkgs/development/misc/or1k/newlib.nix +++ b/pkgs/development/misc/or1k/newlib.nix @@ -43,4 +43,8 @@ stdenvNoLibc.mkDerivation { incdir = "/${stdenv.targetPlatform.config}/include"; libdir = "/${stdenv.targetPlatform.config}/lib"; }; + + meta = { + homepage = "https://github.com/openrisc/newlib"; + }; } diff --git a/pkgs/development/misc/vc4/newlib.nix b/pkgs/development/misc/vc4/newlib.nix index 4575a4149f31..20bcd3276498 100644 --- a/pkgs/development/misc/vc4/newlib.nix +++ b/pkgs/development/misc/vc4/newlib.nix @@ -39,4 +39,8 @@ stdenvNoLibc.mkDerivation { incdir = "/${stdenv.targetPlatform.config}/include"; libdir = "/${stdenv.targetPlatform.config}/lib"; }; + + meta = { + homepage = "https://github.com/itszor/newlib-vc4"; + }; } diff --git a/pkgs/development/mobile/webos/cmake-modules.nix b/pkgs/development/mobile/webos/cmake-modules.nix index 22953516a172..5c8802e5e261 100644 --- a/pkgs/development/mobile/webos/cmake-modules.nix +++ b/pkgs/development/mobile/webos/cmake-modules.nix @@ -38,6 +38,7 @@ stdenv.mkDerivation rec { meta = { description = "CMake modules needed to build Open WebOS components"; + homepage = "https://github.com/openwebos/cmake-modules-webos"; license = lib.licenses.asl20; maintainers = [ ]; }; diff --git a/pkgs/development/mobile/webos/novacom.nix b/pkgs/development/mobile/webos/novacom.nix index 6cde96f7895f..975320fbf16a 100644 --- a/pkgs/development/mobile/webos/novacom.nix +++ b/pkgs/development/mobile/webos/novacom.nix @@ -36,6 +36,7 @@ stdenv.mkDerivation rec { meta = { description = "Utility for communicating with WebOS devices"; + homepage = "https://github.com/openwebos/novacom"; license = lib.licenses.asl20; maintainers = [ ]; platforms = lib.platforms.linux; diff --git a/pkgs/development/mobile/webos/novacomd.nix b/pkgs/development/mobile/webos/novacomd.nix index 781efe73c6b1..505920b3a249 100644 --- a/pkgs/development/mobile/webos/novacomd.nix +++ b/pkgs/development/mobile/webos/novacomd.nix @@ -61,6 +61,7 @@ stdenv.mkDerivation rec { meta = { description = "Daemon for communicating with WebOS devices"; + homepage = "https://github.com/openwebos/novacomd"; mainProgram = "novacomd"; license = lib.licenses.asl20; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/aches/default.nix b/pkgs/development/ocaml-modules/aches/default.nix index 63f814baf6c2..a166056100cf 100644 --- a/pkgs/development/ocaml-modules/aches/default.nix +++ b/pkgs/development/ocaml-modules/aches/default.nix @@ -14,6 +14,7 @@ buildDunePackage { meta = { description = "Caches (bounded-size stores) for in-memory values and for resources"; + homepage = "https://gitlab.com/nomadic-labs/ringo"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/aches/lwt.nix b/pkgs/development/ocaml-modules/aches/lwt.nix index e0bc45820ba6..2d52b6410d76 100644 --- a/pkgs/development/ocaml-modules/aches/lwt.nix +++ b/pkgs/development/ocaml-modules/aches/lwt.nix @@ -17,6 +17,7 @@ buildDunePackage { meta = { description = "Caches (bounded-size stores) for Lwt promises"; + homepage = "https://gitlab.com/nomadic-labs/ringo"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/bz2/default.nix b/pkgs/development/ocaml-modules/bz2/default.nix index 67689cac1a2e..36d0efa13bb0 100644 --- a/pkgs/development/ocaml-modules/bz2/default.nix +++ b/pkgs/development/ocaml-modules/bz2/default.nix @@ -40,6 +40,7 @@ stdenv.mkDerivation rec { meta = { description = "OCaml bindings for the libbz2 (AKA, bzip2) (de)compression library"; + homepage = "https://gitlab.com/irill/camlbz2"; downloadPage = "https://gitlab.com/irill/camlbz2"; license = lib.licenses.lgpl21; broken = lib.versionOlder ocaml.version "4.02" || lib.versionAtLeast ocaml.version "5.0"; diff --git a/pkgs/development/ocaml-modules/camlp-streams/default.nix b/pkgs/development/ocaml-modules/camlp-streams/default.nix index 9457682b189e..9095eb0518e2 100644 --- a/pkgs/development/ocaml-modules/camlp-streams/default.nix +++ b/pkgs/development/ocaml-modules/camlp-streams/default.nix @@ -17,6 +17,7 @@ buildDunePackage (finalAttrs: { meta = { description = "Stream and Genlex libraries for use with Camlp4 and Camlp5"; + homepage = "https://github.com/ocaml/camlp-streams"; license = lib.licenses.lgpl21Only; maintainers = [ lib.maintainers.vbgl ]; }; diff --git a/pkgs/development/ocaml-modules/clap/default.nix b/pkgs/development/ocaml-modules/clap/default.nix index 7735cf2d6249..12c919263ded 100644 --- a/pkgs/development/ocaml-modules/clap/default.nix +++ b/pkgs/development/ocaml-modules/clap/default.nix @@ -19,6 +19,7 @@ buildDunePackage (finalAttrs: { meta = { description = "Command-Line Argument Parsing, imperative style with a consumption mechanism"; + homepage = "https://github.com/rbardou/clap"; license = lib.licenses.mit; }; }) diff --git a/pkgs/development/ocaml-modules/fontconfig/default.nix b/pkgs/development/ocaml-modules/fontconfig/default.nix index 4668d6e316e4..361e80ee4524 100644 --- a/pkgs/development/ocaml-modules/fontconfig/default.nix +++ b/pkgs/development/ocaml-modules/fontconfig/default.nix @@ -39,6 +39,7 @@ stdenv.mkDerivation { meta = { description = "Fontconfig bindings for OCaml"; + homepage = "https://github.com/flh/ocaml-fontconfig"; license = lib.licenses.gpl2Plus; platforms = ocaml.meta.platforms; maintainers = with lib.maintainers; [ vbgl ]; diff --git a/pkgs/development/ocaml-modules/hashcons/default.nix b/pkgs/development/ocaml-modules/hashcons/default.nix index a8649341c964..011af37382bd 100644 --- a/pkgs/development/ocaml-modules/hashcons/default.nix +++ b/pkgs/development/ocaml-modules/hashcons/default.nix @@ -19,6 +19,7 @@ buildDunePackage (finalAttrs: { meta = { description = "OCaml hash-consing library"; + homepage = "https://github.com/backtracking/ocaml-hashcons"; license = lib.licenses.lgpl21; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/lwt-exit/default.nix b/pkgs/development/ocaml-modules/lwt-exit/default.nix index bc9288d9d152..83f4f8e967e2 100644 --- a/pkgs/development/ocaml-modules/lwt-exit/default.nix +++ b/pkgs/development/ocaml-modules/lwt-exit/default.nix @@ -26,6 +26,7 @@ buildDunePackage (finalAttrs: { meta = { description = "Opinionated clean-exit and signal-handling library for Lwt programs"; + homepage = "https://gitlab.com/nomadic-labs/lwt-exit"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/lwt-watcher/default.nix b/pkgs/development/ocaml-modules/lwt-watcher/default.nix index 27a64c186efd..2c336b085185 100644 --- a/pkgs/development/ocaml-modules/lwt-watcher/default.nix +++ b/pkgs/development/ocaml-modules/lwt-watcher/default.nix @@ -23,6 +23,7 @@ buildDunePackage (finalAttrs: { meta = { description = "One-to-many broadcast in Lwt"; + homepage = "https://gitlab.com/nomadic-labs/lwt-watcher"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/reason-native/dir.nix b/pkgs/development/ocaml-modules/reason-native/dir.nix index 3f0cb5c4d141..353ace38bc48 100644 --- a/pkgs/development/ocaml-modules/reason-native/dir.nix +++ b/pkgs/development/ocaml-modules/reason-native/dir.nix @@ -22,6 +22,7 @@ buildDunePackage { meta = { description = "Library that provides a consistent API for common system, user and application directories consistently on all platforms"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/dir"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/fp.nix b/pkgs/development/ocaml-modules/reason-native/fp.nix index dc630aa12aba..9db0cc29903e 100644 --- a/pkgs/development/ocaml-modules/reason-native/fp.nix +++ b/pkgs/development/ocaml-modules/reason-native/fp.nix @@ -17,6 +17,7 @@ buildDunePackage { meta = { description = "Library for creating and operating on file paths consistently on multiple platforms"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/fp"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/frame.nix b/pkgs/development/ocaml-modules/reason-native/frame.nix index 998ab567a14d..fd9ae6668d9d 100644 --- a/pkgs/development/ocaml-modules/reason-native/frame.nix +++ b/pkgs/development/ocaml-modules/reason-native/frame.nix @@ -24,6 +24,7 @@ buildDunePackage { meta = { description = "Reason Native text layout library"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/frame"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/fs.nix b/pkgs/development/ocaml-modules/reason-native/fs.nix index 331607990544..939bc1699229 100644 --- a/pkgs/development/ocaml-modules/reason-native/fs.nix +++ b/pkgs/development/ocaml-modules/reason-native/fs.nix @@ -22,6 +22,7 @@ buildDunePackage { meta = { description = "Reason Native file system API"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/fs"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/qcheck-rely.nix b/pkgs/development/ocaml-modules/reason-native/qcheck-rely.nix index df376cf7b3ce..d8cbe8fbd9f7 100644 --- a/pkgs/development/ocaml-modules/reason-native/qcheck-rely.nix +++ b/pkgs/development/ocaml-modules/reason-native/qcheck-rely.nix @@ -26,6 +26,7 @@ buildDunePackage { meta = { description = "Library containing custom Rely matchers allowing for easily using QCheck with Rely. QCheck is a 'QuickCheck inspired property-based testing for OCaml, and combinators to generate random values to run tests on'"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/qcheck-rely"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/unicode-config.nix b/pkgs/development/ocaml-modules/reason-native/unicode-config.nix index b0393918b188..6b9a8c6f32b5 100644 --- a/pkgs/development/ocaml-modules/reason-native/unicode-config.nix +++ b/pkgs/development/ocaml-modules/reason-native/unicode-config.nix @@ -17,6 +17,7 @@ buildDunePackage { meta = { description = "Configuration used to generate the @reason-native/unicode library"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/unicode-config"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/unicode.nix b/pkgs/development/ocaml-modules/reason-native/unicode.nix index f8376ec67561..663c02e49306 100644 --- a/pkgs/development/ocaml-modules/reason-native/unicode.nix +++ b/pkgs/development/ocaml-modules/reason-native/unicode.nix @@ -17,6 +17,7 @@ buildDunePackage { meta = { description = "Easy to use and well documented Unicode symbols"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/unicode"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/reason-native/utf8.nix b/pkgs/development/ocaml-modules/reason-native/utf8.nix index 5e2c6eef79ea..f272c4fd2632 100644 --- a/pkgs/development/ocaml-modules/reason-native/utf8.nix +++ b/pkgs/development/ocaml-modules/reason-native/utf8.nix @@ -17,6 +17,7 @@ buildDunePackage { meta = { description = "Utf8 logic with minimal dependencies"; + homepage = "https://github.com/reasonml/reason-native"; downloadPage = "https://github.com/reasonml/reason-native/tree/master/src/utf8"; license = lib.licenses.mit; maintainers = [ ]; diff --git a/pkgs/development/ocaml-modules/ringo/default.nix b/pkgs/development/ocaml-modules/ringo/default.nix index 06ef0791de53..47ddef1cdb4b 100644 --- a/pkgs/development/ocaml-modules/ringo/default.nix +++ b/pkgs/development/ocaml-modules/ringo/default.nix @@ -20,6 +20,7 @@ buildDunePackage (finalAttrs: { meta = { description = "Caches (bounded-size key-value stores) and other bounded-size stores"; + homepage = "https://gitlab.com/nomadic-labs/ringo"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/secp256k1-internal/default.nix b/pkgs/development/ocaml-modules/secp256k1-internal/default.nix index 077cd46b44b3..734120c012e4 100644 --- a/pkgs/development/ocaml-modules/secp256k1-internal/default.nix +++ b/pkgs/development/ocaml-modules/secp256k1-internal/default.nix @@ -42,6 +42,7 @@ buildDunePackage (finalAttrs: { meta = { description = "Bindings to secp256k1 internal functions (generic operations on the curve)"; + homepage = "https://gitlab.com/nomadic-labs/ocaml-secp256k1-internal"; license = lib.licenses.mit; maintainers = [ lib.maintainers.ulrikstrid ]; }; diff --git a/pkgs/development/ocaml-modules/systemd/default.nix b/pkgs/development/ocaml-modules/systemd/default.nix index ce6410a282bd..b7f2c3666bfe 100644 --- a/pkgs/development/ocaml-modules/systemd/default.nix +++ b/pkgs/development/ocaml-modules/systemd/default.nix @@ -18,6 +18,7 @@ buildDunePackage { meta = { platforms = lib.platforms.linux; description = "OCaml module for native access to the systemd facilities"; + homepage = "https://github.com/juergenhoetzel/ocaml-systemd"; license = lib.licenses.lgpl3Only; maintainers = [ lib.maintainers.atagen ]; }; diff --git a/pkgs/development/ocaml-modules/tezt/default.nix b/pkgs/development/ocaml-modules/tezt/default.nix index c77951e6f250..7e5e36aa09ff 100644 --- a/pkgs/development/ocaml-modules/tezt/default.nix +++ b/pkgs/development/ocaml-modules/tezt/default.nix @@ -30,6 +30,7 @@ buildDunePackage rec { meta = { description = "Test framework for unit tests, integration tests, and regression tests"; + homepage = "https://gitlab.com/nomadic-labs/tezt"; license = lib.licenses.mit; broken = lib.versionAtLeast lwt.version "6.0.0"; }; diff --git a/pkgs/development/python-modules/cx-logging/default.nix b/pkgs/development/python-modules/cx-logging/default.nix index fd984216f9e5..cda1235ed4d3 100644 --- a/pkgs/development/python-modules/cx-logging/default.nix +++ b/pkgs/development/python-modules/cx-logging/default.nix @@ -37,6 +37,7 @@ buildPythonPackage (finalAttrs: { meta = { description = "Python and C interfaces for logging"; + homepage = "https://github.com/anthony-tuininga/cx_Logging"; changelog = "https://github.com/anthony-tuininga/cx_Logging/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ sigmanificient ]; diff --git a/pkgs/development/python-modules/django-auditlog/default.nix b/pkgs/development/python-modules/django-auditlog/default.nix index c589b1ecb1c2..4266d96ba71c 100644 --- a/pkgs/development/python-modules/django-auditlog/default.nix +++ b/pkgs/development/python-modules/django-auditlog/default.nix @@ -66,6 +66,7 @@ buildPythonPackage rec { meta = { changelog = "https://github.com/jazzband/django-auditlog/blob/${src.tag}/CHANGELOG.md"; description = "Django app that keeps a log of changes made to an object"; + homepage = "https://github.com/jazzband/django-auditlog"; downloadPage = "https://github.com/jazzband/django-auditlog"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ leona ]; diff --git a/pkgs/development/python-modules/enocean-async/default.nix b/pkgs/development/python-modules/enocean-async/default.nix index a92f9dd4d86f..fa23095331c0 100644 --- a/pkgs/development/python-modules/enocean-async/default.nix +++ b/pkgs/development/python-modules/enocean-async/default.nix @@ -45,6 +45,7 @@ buildPythonPackage (finalAttrs: { meta = { changelog = "https://github.com/henningkerstan/enocean-async/blob/${finalAttrs.src.tag}/CHANGELOG.md"; description = "Async implementation of the EnOcean Serial Protocol Version 3"; + homepage = "https://github.com/henningkerstan/enocean-async"; license = lib.licenses.asl20; maintainers = [ lib.maintainers.dotlambda ]; }; diff --git a/pkgs/development/python-modules/freeze-core/default.nix b/pkgs/development/python-modules/freeze-core/default.nix index 6095a22b7524..194efee77ea5 100644 --- a/pkgs/development/python-modules/freeze-core/default.nix +++ b/pkgs/development/python-modules/freeze-core/default.nix @@ -55,6 +55,7 @@ buildPythonPackage (finalAttrs: { meta = { description = "Core dependency for cx_Freeze"; + homepage = "https://github.com/marcelotduarte/freeze-core"; changelog = "https://github.com/marcelotduarte/freeze-core/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ sigmanificient ]; diff --git a/pkgs/development/python-modules/kmock/default.nix b/pkgs/development/python-modules/kmock/default.nix index 153c92cf1f39..99cd9ac584b1 100644 --- a/pkgs/development/python-modules/kmock/default.nix +++ b/pkgs/development/python-modules/kmock/default.nix @@ -71,6 +71,7 @@ buildPythonPackage (finalAttrs: { meta = { description = "HTTP/API/Kubernetes Mock Server in Python"; + homepage = "https://github.com/nolar/kmock"; changelog = "https://github.com/nolar/kmock/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ sigmanificient ]; diff --git a/pkgs/development/python-modules/mdx-truly-sane-lists/default.nix b/pkgs/development/python-modules/mdx-truly-sane-lists/default.nix index bf22ebeae71f..2427efdb54b6 100644 --- a/pkgs/development/python-modules/mdx-truly-sane-lists/default.nix +++ b/pkgs/development/python-modules/mdx-truly-sane-lists/default.nix @@ -35,6 +35,7 @@ buildPythonPackage rec { Features custom indents for nested lists and fix for messy linebreaks and paragraphs between lists. ''; + homepage = "https://github.com/radude/mdx_truly_sane_lists"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ kaction ]; }; diff --git a/pkgs/development/python-modules/outspin/default.nix b/pkgs/development/python-modules/outspin/default.nix index 5908863e5456..fc92fbc1bc9f 100644 --- a/pkgs/development/python-modules/outspin/default.nix +++ b/pkgs/development/python-modules/outspin/default.nix @@ -26,6 +26,7 @@ buildPythonPackage (finalAttrs: { meta = { changelog = "https://github.com/trag1c/outspin/blob/${finalAttrs.src.tag}/CHANGELOG.md"; description = "Conveniently read single char inputs in the console"; + homepage = "https://github.com/trag1c/outspin"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ sigmanificient ]; }; diff --git a/pkgs/development/python-modules/paperbush/default.nix b/pkgs/development/python-modules/paperbush/default.nix index b7e7331c3495..2287b0d0940e 100644 --- a/pkgs/development/python-modules/paperbush/default.nix +++ b/pkgs/development/python-modules/paperbush/default.nix @@ -23,6 +23,7 @@ buildPythonPackage (finalAttrs: { meta = { changelog = "https://github.com/trag1c/paperbush/blob/${finalAttrs.src.tag}/CHANGELOG.md"; description = "Super concise argument parsing tool for Python"; + homepage = "https://github.com/trag1c/paperbush"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ sigmanificient ]; }; diff --git a/pkgs/development/python-modules/protoletariat/default.nix b/pkgs/development/python-modules/protoletariat/default.nix index 92f5a09ed77c..bf899be7906b 100644 --- a/pkgs/development/python-modules/protoletariat/default.nix +++ b/pkgs/development/python-modules/protoletariat/default.nix @@ -52,6 +52,7 @@ buildPythonPackage (finalAttrs: { meta = { description = "Python protocol buffers for the rest of us"; + homepage = "https://github.com/cpcloud/protoletariat"; changelog = "https://github.com/cpcloud/protoletariat/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = with lib.licenses; [ asl20 ]; maintainers = with lib.maintainers; [ sigmanificient ]; diff --git a/pkgs/development/python-modules/pyftgl/default.nix b/pkgs/development/python-modules/pyftgl/default.nix index 8cb6330d5e92..701194acfe1a 100644 --- a/pkgs/development/python-modules/pyftgl/default.nix +++ b/pkgs/development/python-modules/pyftgl/default.nix @@ -47,6 +47,7 @@ buildPythonPackage rec { meta = { description = "Python bindings for FTGL (FreeType for OpenGL)"; + homepage = "https://github.com/umlaeute/pyftgl"; license = lib.licenses.gpl2Plus; }; } diff --git a/pkgs/development/python-modules/tstr/default.nix b/pkgs/development/python-modules/tstr/default.nix index cf1a3e78221e..cc1eb41c788b 100644 --- a/pkgs/development/python-modules/tstr/default.nix +++ b/pkgs/development/python-modules/tstr/default.nix @@ -30,6 +30,7 @@ buildPythonPackage (finalAttrs: { meta = { description = "Backports of various template string utilities"; + homepage = "https://github.com/ilotoki0804/tstr"; license = [ lib.licenses.asl20 ]; maintainers = with lib.maintainers; [ sigmanificient ]; }; diff --git a/pkgs/development/rocm-modules/mscclpp/default.nix b/pkgs/development/rocm-modules/mscclpp/default.nix index b7fa373e80a7..58a0066a48ab 100644 --- a/pkgs/development/rocm-modules/mscclpp/default.nix +++ b/pkgs/development/rocm-modules/mscclpp/default.nix @@ -39,4 +39,7 @@ stdenv.mkDerivation { "-DFETCHCONTENT_SOURCE_DIR_JSON=${nlohmann_json.src}" ]; env.ROCM_PATH = clr; + meta = { + homepage = "https://github.com/microsoft/mscclpp"; + }; } diff --git a/pkgs/development/tools/misc/luarocks/default.nix b/pkgs/development/tools/misc/luarocks/default.nix index 9ad31b6e78cd..0ce2558441c5 100644 --- a/pkgs/development/tools/misc/luarocks/default.nix +++ b/pkgs/development/tools/misc/luarocks/default.nix @@ -132,6 +132,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Package manager for Lua"; + homepage = "https://github.com/luarocks/luarocks"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ raskin diff --git a/pkgs/development/tools/misc/luarocks/luarocks-nix.nix b/pkgs/development/tools/misc/luarocks/luarocks-nix.nix index 9acca73d82e0..684c102401f6 100644 --- a/pkgs/development/tools/misc/luarocks/luarocks-nix.nix +++ b/pkgs/development/tools/misc/luarocks/luarocks-nix.nix @@ -41,6 +41,7 @@ luarocks_bootstrap.overrideAttrs (old: { maintainers platforms ; + homepage = "https://github.com/nix-community/luarocks-nix"; mainProgram = "luarocks"; }; }) diff --git a/pkgs/misc/tmux-plugins/default.nix b/pkgs/misc/tmux-plugins/default.nix index 28c809ed996d..6b61a16d94ab 100644 --- a/pkgs/misc/tmux-plugins/default.nix +++ b/pkgs/misc/tmux-plugins/default.nix @@ -85,6 +85,9 @@ in tag = "v${version}"; hash = "sha256-kyUrJdraDDye8WEBP2RgHN7kHmafToYtLmrMJ9u0f+0="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-battery"; + }; }; better-mouse-mode = mkTmuxPlugin { @@ -197,6 +200,9 @@ in rev = "77ca3aab2aed8ede3e2b941079b1c92dd221cf5f"; hash = "sha256-ugVk1zpKeUjOlDWi3LEkJPFsCqyZEivGzGWiqODnkK0="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-copycat"; + }; }; cpu = mkTmuxPlugin { @@ -208,6 +214,9 @@ in rev = "98d787191bc3e8f19c3de54b96ba1caf61385861"; hash = "sha256-ymmCI6VYvf94Ot7h2GAboTRBXPIREP+EB33+px5aaJk="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-cpu"; + }; }; ctrlw = mkTmuxPlugin rec { @@ -219,6 +228,9 @@ in rev = "v${version}"; hash = "sha256-YYbPkGQmukIDD1fcYleioETFai/SOJni+aZ9Jh2+Zc8="; }; + meta = { + homepage = "https://github.com/eraserhd/tmux-ctrlw"; + }; }; dracula = mkTmuxPlugin rec { @@ -316,6 +328,9 @@ in postInstall = '' sed -i -e 's|fpp |${pkgs.fpp}/bin/fpp |g' $target/fpp.tmux ''; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-fpp"; + }; }; fuzzback = mkTmuxPlugin { @@ -496,6 +511,9 @@ in rev = "b085ad423b5d59a2c8b8d71772352e7028b8e1d0"; hash = "sha256-Wp4xY2nxv4jl/G7bjNokYk3TcbS9waLERBFSpT1XGlw="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-logging"; + }; }; minimal-tmux-status = mkTmuxPlugin { @@ -552,6 +570,9 @@ in rev = "58abb615971cb617821e2e7e41c660334f55a92d"; hash = "sha256-LFPcPDBiSvsOhOhlAScajr/Y/Uw2CPdl87qzD9szQKo="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-net-speed"; + }; }; nord = mkTmuxPlugin { @@ -587,6 +608,9 @@ in rev = "9415f0207e71e37cbd870c9443426dbea6da78b9"; hash = "sha256-RFdnF/ScOPoeVgGXWhQs28tS7CmsRA0DyFyutCPEmzc="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-maildir-counter"; + }; }; online-status = mkTmuxPlugin { @@ -598,6 +622,9 @@ in rev = "ea86704ced8a20f4a431116aa43f57edcf5a6312"; hash = "sha256-OQW2WcNDVBMgX5IIlykn7f1wI8miXuqLQTlqsdHbw8M="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-online-status"; + }; }; open = mkTmuxPlugin { @@ -609,6 +636,9 @@ in rev = "cedb4584908bd8458fadc8d3e64101d3cbb48d46"; hash = "sha256-sFl+wkvQ498irwKWXXAT6/XBrziYLT+CvLCBV2HrQIM="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-open"; + }; }; onedark-theme = mkTmuxPlugin { @@ -621,6 +651,9 @@ in rev = "3607ef889a47dd3b4b31f66cda7f36da6f81b85c"; hash = "sha256-pQooiDEeB8NvBOQ1IKUgPSSQDK+hMTLMGuiKy6GWVKY="; }; + meta = { + homepage = "https://github.com/odedlaz/tmux-onedark-theme"; + }; }; pain-control = mkTmuxPlugin { @@ -632,6 +665,9 @@ in rev = "2db63de3b08fc64831d833240749133cecb67d92"; hash = "sha256-84NJtxoz4KTVv+i3cde235WcHhRSBIkZjtobZIk16nA="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-pain-control"; + }; }; pass = mkTmuxPlugin { @@ -685,6 +721,9 @@ in postInstall = '' sed -i -e 's,9 plumb,${pkgs.plan9port}/bin/9 plumb,' $target/scripts/plumb ''; + meta = { + homepage = "https://github.com/eraserhd/tmux-plumb"; + }; }; power-theme = mkTmuxPlugin { @@ -714,6 +753,9 @@ in rev = "15acc6172300bc2eb13c81718dc53da6ae69de4f"; hash = "sha256-9LWRV0Hw8MmDwn5hWl3DrBuYUqBjLCO02K9bbx11MyM="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-prefix-highlight"; + }; }; resurrect = mkTmuxPlugin { @@ -818,6 +860,9 @@ in postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' sed -e 's:reattach-to-user-namespace:${pkgs.reattach-to-user-namespace}/bin/reattach-to-user-namespace:g' -i $target/sensible.tmux ''; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-sensible"; + }; }; session-wizard = mkTmuxPlugin rec { @@ -873,6 +918,9 @@ in rev = "09ec86be38eae98ffc27bd0dde605ed10ae0dc89"; hash = "sha256-hFNrdbhmBUAyJ73RCG4RILzJ3LHIYiuNYGsqJGsVGAw="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-sessionist"; + }; }; sidebar = mkTmuxPlugin { @@ -884,6 +932,9 @@ in rev = "aacbdb45bc5ab69db448a72de4155d0b8dbac677"; hash = "sha256-7MCouewjpTCMGmWMaTWWQevlR0LrLTBjXGumsNcH6a4="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-sidebar"; + }; }; sysstat = mkTmuxPlugin { @@ -895,6 +946,9 @@ in rev = "29e150f403151f2341f3abcb2b2487a5f011dd23"; hash = "sha256-2EMSV6z9FZHq20dkPna0qELSVIOIAnOHpiCLbG7adQQ="; }; + meta = { + homepage = "https://github.com/samoshkin/tmux-plugin-sysstat"; + }; }; tilish = mkTmuxPlugin { @@ -944,6 +998,9 @@ in rev = "e5e7b4f1af37f8f3fc81ca17eadee5ae5d82cd09"; hash = "sha256-nVA4fkmxf8he3lxG6P0sASvH6HlSt8dKGovEv5RAcdA="; }; + meta = { + homepage = "https://github.com/seebi/tmux-colors-solarized"; + }; }; tmux-floax = mkTmuxPlugin { @@ -1171,6 +1228,9 @@ in find $target -type f -print0 | xargs -0 sed -i -e 's|fzf |${pkgs.fzf}/bin/fzf |g' find $target -type f -print0 | xargs -0 sed -i -e 's|zoxide |${pkgs.zoxide}/bin/zoxide |g' ''; + meta = { + homepage = "https://github.com/joshmedeski/t-smart-tmux-session-manager"; + }; }; urlview = mkTmuxPlugin { @@ -1185,6 +1245,9 @@ in postInstall = '' sed -i -e '14,20{s|extract_url|${pkgs.extract_url}/bin/extract_url|g}' $target/urlview.tmux ''; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-urlview"; + }; }; vim-tmux-focus-events = mkTmuxPlugin { @@ -1216,6 +1279,9 @@ in rev = "c45243dc1f32ac6bcf6068e5300f3b2b237e576a"; hash = "sha256-IEPnr/GdsAnHzdTjFnXCuMyoNLm3/Jz4cBAM0AJBrj8="; }; + meta = { + homepage = "https://github.com/christoomey/vim-tmux-navigator"; + }; }; weather = mkTmuxPlugin { @@ -1251,6 +1317,9 @@ in rev = "acfd36e4fcba99f8310a7dfb432111c242fe7392"; hash = "sha256-/5HPaoOx2U2d8lZZJo5dKmemu6hKgHJYq23hxkddXpA="; }; + meta = { + homepage = "https://github.com/tmux-plugins/tmux-yank"; + }; }; tmux-nova = mkTmuxPlugin rec { diff --git a/pkgs/misc/tmux-plugins/tmux-fingers/default.nix b/pkgs/misc/tmux-plugins/tmux-fingers/default.nix index 72fae95c6772..f4fa5c87aa6a 100644 --- a/pkgs/misc/tmux-plugins/tmux-fingers/default.nix +++ b/pkgs/misc/tmux-plugins/tmux-fingers/default.nix @@ -29,6 +29,10 @@ let # Unhandled exception: Missing ENV key: "TMUX" (KeyError) doCheck = false; doInstallCheck = false; + + meta = { + homepage = "https://github.com/Morantron/tmux-fingers"; + }; }; in mkTmuxPlugin { diff --git a/pkgs/os-specific/darwin/by-name/lo/locale/package.nix b/pkgs/os-specific/darwin/by-name/lo/locale/package.nix index 85376eafe625..78be8eec1f29 100644 --- a/pkgs/os-specific/darwin/by-name/lo/locale/package.nix +++ b/pkgs/os-specific/darwin/by-name/lo/locale/package.nix @@ -54,6 +54,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { meta = { description = "Locale data for Darwin"; + homepage = "https://github.com/apple-oss-distributions/adv_cmds"; license = [ lib.licenses.apsl10 lib.licenses.apsl20 diff --git a/pkgs/os-specific/linux/r8168/default.nix b/pkgs/os-specific/linux/r8168/default.nix index 3ff8e2ad9f24..3cf1687d86d8 100644 --- a/pkgs/os-specific/linux/r8168/default.nix +++ b/pkgs/os-specific/linux/r8168/default.nix @@ -60,6 +60,7 @@ stdenv.mkDerivation rec { If you want to use this driver, you might need to blacklist the r8169 driver by adding "r8169" to boot.blacklistedKernelModules. ''; + homepage = "https://github.com/mtorromeo/r8168"; license = lib.licenses.gpl2Plus; platforms = lib.platforms.linux; maintainers = [ ]; diff --git a/pkgs/os-specific/linux/sheep-net/default.nix b/pkgs/os-specific/linux/sheep-net/default.nix index 61083960b102..c7c2b113def2 100644 --- a/pkgs/os-specific/linux/sheep-net/default.nix +++ b/pkgs/os-specific/linux/sheep-net/default.nix @@ -25,6 +25,7 @@ stdenv.mkDerivation (finalAttrs: { ''; meta = { + homepage = "https://github.com/kanjitalk755/macemu"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ matthewcroughan ]; platforms = lib.platforms.linux; diff --git a/pkgs/servers/monitoring/nagios-plugins/check_openvpn/default.nix b/pkgs/servers/monitoring/nagios-plugins/check_openvpn/default.nix index 51763b874ff9..319a63220249 100644 --- a/pkgs/servers/monitoring/nagios-plugins/check_openvpn/default.nix +++ b/pkgs/servers/monitoring/nagios-plugins/check_openvpn/default.nix @@ -21,6 +21,7 @@ python3Packages.buildPythonApplication rec { meta = { description = "Nagios/icinga/sensu check plugin for OpenVPN"; + homepage = "https://github.com/liquidat/nagios-icinga-openvpn"; license = lib.licenses.mit; mainProgram = "check_openvpn"; maintainers = with lib.maintainers; [ peterhoeg ]; diff --git a/pkgs/servers/sql/postgresql/ext/pg_similarity.nix b/pkgs/servers/sql/postgresql/ext/pg_similarity.nix index 6caa133c36b1..b4dc86bfd034 100644 --- a/pkgs/servers/sql/postgresql/ext/pg_similarity.nix +++ b/pkgs/servers/sql/postgresql/ext/pg_similarity.nix @@ -36,6 +36,7 @@ postgresqlBuildExtension { is tightly integrated in the RDBMS in the sense that it defines operators so instead of the traditional operators (= and <>) you can use ~~~ and ~!~ (any of these operators represents a similarity function). ''; + homepage = "https://github.com/eulerto/pg_similarity"; platforms = postgresql.meta.platforms; license = lib.licenses.bsd3; maintainers = [ ]; diff --git a/pkgs/servers/sql/postgresql/ext/pgjwt.nix b/pkgs/servers/sql/postgresql/ext/pgjwt.nix index 575bfd3bafc8..2c8572efd84c 100644 --- a/pkgs/servers/sql/postgresql/ext/pgjwt.nix +++ b/pkgs/servers/sql/postgresql/ext/pgjwt.nix @@ -38,6 +38,7 @@ postgresqlBuildExtension (finalAttrs: { longDescription = '' sign() and verify() functions to create and verify JSON Web Tokens. ''; + homepage = "https://github.com/michelp/pgjwt"; license = lib.licenses.mit; platforms = postgresql.meta.platforms; maintainers = with lib.maintainers; [ spinus ]; diff --git a/pkgs/shells/fish/plugins/foreign-env/default.nix b/pkgs/shells/fish/plugins/foreign-env/default.nix index 287009acce4d..e19dd23c8d99 100644 --- a/pkgs/shells/fish/plugins/foreign-env/default.nix +++ b/pkgs/shells/fish/plugins/foreign-env/default.nix @@ -22,6 +22,7 @@ buildFishPlugin { meta = { description = "Foreign environment interface for Fish shell"; + homepage = "https://github.com/oh-my-fish/plugin-foreign-env"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ jgillich diff --git a/pkgs/shells/fish/plugins/grc.nix b/pkgs/shells/fish/plugins/grc.nix index 15a8b09135be..da653483f91b 100644 --- a/pkgs/shells/fish/plugins/grc.nix +++ b/pkgs/shells/fish/plugins/grc.nix @@ -21,6 +21,7 @@ buildFishPlugin { meta = { description = "Grc Colourizer for some commands on Fish shell"; + homepage = "https://github.com/oh-my-fish/plugin-grc"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ onny ]; platforms = with lib.platforms; unix; diff --git a/pkgs/tools/compression/bzip2/1_1.nix b/pkgs/tools/compression/bzip2/1_1.nix index d62ad11e3ec4..d6ff290fd1a4 100644 --- a/pkgs/tools/compression/bzip2/1_1.nix +++ b/pkgs/tools/compression/bzip2/1_1.nix @@ -46,6 +46,7 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "High-quality data compression program"; + homepage = "https://gitlab.com/federicomenaquintero/bzip2"; license = lib.licenses.bzip2; pkgConfigModules = [ "bz2" ]; platforms = lib.platforms.all; diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix index f189c05222f3..6412d8731901 100644 --- a/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix +++ b/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix @@ -68,6 +68,7 @@ stdenv.mkDerivation rec { meta = { isIbusEngine = true; description = "IBus interface to the libpinyin input method"; + homepage = "https://github.com/libpinyin/ibus-libpinyin"; license = lib.licenses.gpl3Plus; maintainers = with lib.maintainers; [ linsui diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-pinyin/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-pinyin/default.nix index 3cfbb0bd1091..1905555c6bd8 100644 --- a/pkgs/tools/inputmethods/ibus-engines/ibus-pinyin/default.nix +++ b/pkgs/tools/inputmethods/ibus-engines/ibus-pinyin/default.nix @@ -49,6 +49,7 @@ stdenv.mkDerivation rec { meta = { isIbusEngine = true; description = "PinYin engine for IBus"; + homepage = "https://github.com/ibus/ibus-pinyin"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ azuwis ]; platforms = lib.platforms.linux; diff --git a/pkgs/tools/misc/xvfb-run/default.nix b/pkgs/tools/misc/xvfb-run/default.nix index ff77c0a7447d..e99fdb3e5dc2 100644 --- a/pkgs/tools/misc/xvfb-run/default.nix +++ b/pkgs/tools/misc/xvfb-run/default.nix @@ -78,6 +78,7 @@ stdenvNoCC.mkDerivation { meta = { description = "Convenience script to run a virtualized X-Server"; + homepage = "https://github.com/archlinux/svntogit-packages"; platforms = lib.platforms.linux ++ lib.platforms.darwin; license = lib.licenses.gpl2Only; maintainers = [ lib.maintainers.artturin ]; diff --git a/pkgs/top-level/emscripten-packages.nix b/pkgs/top-level/emscripten-packages.nix index e588a4287d09..50053381acef 100644 --- a/pkgs/top-level/emscripten-packages.nix +++ b/pkgs/top-level/emscripten-packages.nix @@ -155,6 +155,10 @@ rec { cp README.md $doc/share/${pname} ''; checkPhase = ""; + + meta = { + homepage = "https://gitlab.com/odfplugfest/xmlmirror"; + }; }; zlib = From caadb70cdf7176ebf9cce6ec3a23856270587f0d Mon Sep 17 00:00:00 2001 From: nelind Date: Mon, 1 Jun 2026 23:23:14 +0200 Subject: [PATCH 143/149] tranquil-pds: 0.6.3 -> 0.6.4 --- pkgs/by-name/tr/tranquil-pds/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/tr/tranquil-pds/package.nix b/pkgs/by-name/tr/tranquil-pds/package.nix index 9d274810bc64..272af9d3fd81 100644 --- a/pkgs/by-name/tr/tranquil-pds/package.nix +++ b/pkgs/by-name/tr/tranquil-pds/package.nix @@ -10,15 +10,15 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "tranquil-pds"; - version = "0.6.3"; + version = "0.6.4"; src = fetchgit { url = "https://tangled.org/tranquil.farm/tranquil-pds"; tag = "v${finalAttrs.version}"; - hash = "sha256-TORNOFPlbCt4QWNd+bmxkShTUvT/5ynOj+UBYITAhg8="; + hash = "sha256-kGB5jFwghMsjlAoS4mj94s9peo7PL54UKTH/3TS567w="; }; - cargoHash = "sha256-tQk9WQZmaG2XEx5gocPhYd8fZ2cikvduhln5h/w+WZA="; + cargoHash = "sha256-X2zoQSBQaq+W0rT/Y08EA1b81pbePUvH7q+Ccmtbf+Y="; __structuredAttrs = true; From fb7b7969a90722102d02b25994b9f84bd5c28a78 Mon Sep 17 00:00:00 2001 From: nelind Date: Mon, 1 Jun 2026 23:47:54 +0200 Subject: [PATCH 144/149] tranqui-pds-frontend: 0.6.3 -> 0.6.4 --- pkgs/by-name/tr/tranquil-pds-frontend/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/tr/tranquil-pds-frontend/package.nix b/pkgs/by-name/tr/tranquil-pds-frontend/package.nix index ced153fb08dd..0375eac4cdaf 100644 --- a/pkgs/by-name/tr/tranquil-pds-frontend/package.nix +++ b/pkgs/by-name/tr/tranquil-pds-frontend/package.nix @@ -10,12 +10,12 @@ stdenvNoCC.mkDerivation (finalAttrs: { pname = "tranquil-frontend"; - version = "0.6.3"; + version = "0.6.4"; src = fetchgit { url = "https://tangled.org/tranquil.farm/tranquil-pds"; tag = "v${finalAttrs.version}"; - hash = "sha256-TORNOFPlbCt4QWNd+bmxkShTUvT/5ynOj+UBYITAhg8="; + hash = "sha256-kGB5jFwghMsjlAoS4mj94s9peo7PL54UKTH/3TS567w="; }; sourceRoot = "${finalAttrs.src.name}/frontend"; @@ -28,7 +28,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { ; inherit pnpm; fetcherVersion = 4; - hash = "sha256-qbmIAvE/3u/NB5x9bERCGQqwiDLkzjff3QchgR+ZDFs="; + hash = "sha256-9G74AVRXPgR+aj00ksCc1+dDqgE2GQR4cpjJsY6yjro="; }; strictDeps = true; From aac4dd963bd26c01f21b2b452f6f26e862a21d2f Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 21:55:03 +0000 Subject: [PATCH 145/149] figurine: 2.0.0 -> 2.1.1 --- pkgs/by-name/fi/figurine/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/fi/figurine/package.nix b/pkgs/by-name/fi/figurine/package.nix index 51b850c51a4b..5007a27b0d69 100644 --- a/pkgs/by-name/fi/figurine/package.nix +++ b/pkgs/by-name/fi/figurine/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "figurine"; - version = "2.0.0"; + version = "2.1.1"; src = fetchFromGitHub { owner = "arsham"; repo = "figurine"; rev = "v${finalAttrs.version}"; - hash = "sha256-U25nbXr8SuSgMq1Nqk/7Ci4tKoWAyccv8j4aTIEox3k="; + hash = "sha256-5UCvC3gweOqEzJdTob0mgmljMneYZ4m3G9SD03Xg9tM="; }; - vendorHash = "sha256-CdiHPN0zfOedsz2M6JWFMQpG70vxLbKj//WkKyN58AQ="; + vendorHash = "sha256-4A40TbUeqsw7RHO/1qbAURE1ntarh2GmtPgE7dglGoc="; ldflags = [ "-s" From 5703f2aad56247e35478fbb0c4a0a53362793f65 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 1 Jun 2026 16:56:28 +0000 Subject: [PATCH 146/149] mistral-rs: 0.8.0 -> 0.8.3 Diff: https://github.com/EricLBuehler/mistral.rs/compare/v0.8.0...v0.8.3 Changelog: https://github.com/EricLBuehler/mistral.rs/releases/tag/v0.8.3 --- pkgs/by-name/mi/mistral-rs/package.nix | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/mi/mistral-rs/package.nix b/pkgs/by-name/mi/mistral-rs/package.nix index 79b3ae825d7c..760ba33786d0 100644 --- a/pkgs/by-name/mi/mistral-rs/package.nix +++ b/pkgs/by-name/mi/mistral-rs/package.nix @@ -20,7 +20,6 @@ versionCheckHook, - testers, mistral-rs, nix-update-script, @@ -74,13 +73,14 @@ let in rustPlatform.buildRustPackage (finalAttrs: { pname = "mistral-rs"; - version = "0.8.0"; + version = "0.8.3"; + __structuredAttrs = true; src = fetchFromGitHub { owner = "EricLBuehler"; repo = "mistral.rs"; tag = "v${finalAttrs.version}"; - hash = "sha256-WuDvD2ifk0AtB4fpgLqQSiXVfb/50M9oIuz738pdsis="; + hash = "sha256-Ohkr45VXuXB7Ms8igZxQ7shrJa3+WBVT1fNYlc6JvZQ="; }; patches = [ @@ -96,7 +96,7 @@ rustPlatform.buildRustPackage (finalAttrs: { "lto = false" ''; - cargoHash = "sha256-MzGU62v6ZvVzTN7Ra+zz1uNlk4ul09YG5Hbj2A7hZbY="; + cargoHash = "sha256-ZwUCzbRpDgT7KwsT9kPGsGp4iU/0I+lrMFqM3UCwkYw="; nativeBuildInputs = [ pkg-config @@ -185,6 +185,17 @@ rustPlatform.buildRustPackage (finalAttrs: { "--skip=gguf::gguf_tokenizer::tests::test_encode_decode_llama" "--skip=util::tests::test_parse_image_url" "--skip=utils::tiktoken::tests::test_tiktoken_conversion" + + # Spawn a nested sandbox (bubblewrap-like) which fails inside the nix build sandbox + "--skip=callbacks_outlive_manager_executor_tempdir" + "--skip=sandboxed_session_can_execute_python" + "--skip=sandboxed_session_default_policy_can_execute_python" + + # Linux namespace / seccomp tests require capabilities the nix build sandbox blocks + "--skip=network_none_blocks_socket" + "--skip=rlimit_nproc_caps_processes" + "--skip=seccomp_blocks_ptrace" + "--skip=unshare_is_denied_inside_child" ]; nativeInstallCheckInputs = [ From 0bc924b3ccc7a5f150a2e82d920cb9b20c419095 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 22:38:47 +0000 Subject: [PATCH 147/149] terraform-providers.hashicorp_azurerm: 4.73.0 -> 4.75.0 --- .../networking/cluster/terraform-providers/providers.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.json b/pkgs/applications/networking/cluster/terraform-providers/providers.json index 7a1371da42e1..3ee9ec16f3af 100644 --- a/pkgs/applications/networking/cluster/terraform-providers/providers.json +++ b/pkgs/applications/networking/cluster/terraform-providers/providers.json @@ -535,11 +535,11 @@ "vendorHash": null }, "hashicorp_azurerm": { - "hash": "sha256-1WglgZrVUQXMLI/01QxhJ19Nv5+SdR3eEjOJ3PKEwCI=", + "hash": "sha256-DR68u61zP/eyllRkwNqKSXktAKjJJ0psXd9WWa2zA20=", "homepage": "https://registry.terraform.io/providers/hashicorp/azurerm", "owner": "hashicorp", "repo": "terraform-provider-azurerm", - "rev": "v4.73.0", + "rev": "v4.75.0", "spdx": "MPL-2.0", "vendorHash": null }, From 63f2f9534341ee06c447c8941412b701db977448 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 23:02:47 +0000 Subject: [PATCH 148/149] home-assistant-custom-components.entity-notes: 3.3.10 -> 3.3.11 --- .../home-assistant/custom-components/entity-notes/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/home-assistant/custom-components/entity-notes/package.nix b/pkgs/servers/home-assistant/custom-components/entity-notes/package.nix index bc71285acac1..a1f51a666a74 100644 --- a/pkgs/servers/home-assistant/custom-components/entity-notes/package.nix +++ b/pkgs/servers/home-assistant/custom-components/entity-notes/package.nix @@ -8,13 +8,13 @@ buildHomeAssistantComponent rec { owner = "martindell"; domain = "entity_notes"; - version = "3.3.10"; + version = "3.3.11"; src = fetchFromGitHub { inherit owner; repo = "ha-entity-notes"; tag = "v${version}"; - hash = "sha256-2ZwIqqF3OQ6wjfi5c3cV8NyJNcucd95Nkrs/OimHrb0="; + hash = "sha256-J+HIa8VgfObhuOY8jn39hQH3I4DEgVn65U9w9a/vNd4="; }; dependencies = [ From c9690fa6dedf80fbbaeb945b28281d2022c898e5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 1 Jun 2026 23:49:58 +0000 Subject: [PATCH 149/149] home-assistant-custom-lovelace-modules.sankey-chart: 6.0.0 -> 6.3.0 --- .../custom-lovelace-modules/sankey-chart/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/sankey-chart/package.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/sankey-chart/package.nix index 614e0dafd54e..f499ae3ca86e 100644 --- a/pkgs/servers/home-assistant/custom-lovelace-modules/sankey-chart/package.nix +++ b/pkgs/servers/home-assistant/custom-lovelace-modules/sankey-chart/package.nix @@ -6,16 +6,16 @@ buildNpmPackage rec { pname = "sankey-chart"; - version = "6.0.0"; + version = "6.3.0"; src = fetchFromGitHub { owner = "MindFreeze"; repo = "ha-sankey-chart"; rev = "v${version}"; - hash = "sha256-LNJvUy0vj6j5FKaEN2l9AD92pY6qKie1tRiuiA61Q58="; + hash = "sha256-W14fU3qM98QtNDPzfILAoHJiwGhGK39i/LTJyriKLcE="; }; - npmDepsHash = "sha256-VLByimuvXO+PMTzuK4M07An7nnMXHe8dHS4ptdIt/sc="; + npmDepsHash = "sha256-are6FGTk5woHbtqAyZQ34FWN9+uB6n66k71ZM+w6t70="; installPhase = '' runHook preInstall