diff --git a/pkgs/os-specific/linux/systemd/0003-Fix-NixOS-containers.patch b/pkgs/os-specific/linux/systemd/0003-Fix-NixOS-containers.patch
index f8f3fc1ad62c..745e7181543d 100644
--- a/pkgs/os-specific/linux/systemd/0003-Fix-NixOS-containers.patch
+++ b/pkgs/os-specific/linux/systemd/0003-Fix-NixOS-containers.patch
@@ -10,10 +10,10 @@ container, so checking early whether it exists will fail.
1 file changed, 2 insertions(+)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
-index e4fccaa3a7..05e6be8874 100644
+index 6e615d280a..e16cb17c7f 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
-@@ -6208,6 +6208,7 @@ static int run(int argc, char *argv[]) {
+@@ -6223,6 +6223,7 @@ static int run(int argc, char *argv[]) {
goto finish;
}
} else {
@@ -21,7 +21,7 @@ index e4fccaa3a7..05e6be8874 100644
_cleanup_free_ char *p = NULL;
if (arg_pivot_root_new)
-@@ -6227,6 +6228,7 @@ static int run(int argc, char *argv[]) {
+@@ -6242,6 +6243,7 @@ static int run(int argc, char *argv[]) {
log_error_errno(r, "Unable to determine if %s looks like it has an OS tree (i.e. whether /usr/ exists): %m", arg_directory);
goto finish;
}
diff --git a/pkgs/os-specific/linux/systemd/0005-Get-rid-of-a-useless-message-in-user-sessions.patch b/pkgs/os-specific/linux/systemd/0005-Get-rid-of-a-useless-message-in-user-sessions.patch
index 8b8000c29d1e..bee57fa30b55 100644
--- a/pkgs/os-specific/linux/systemd/0005-Get-rid-of-a-useless-message-in-user-sessions.patch
+++ b/pkgs/os-specific/linux/systemd/0005-Get-rid-of-a-useless-message-in-user-sessions.patch
@@ -13,7 +13,7 @@ in containers.
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/core/manager.c b/src/core/manager.c
-index 7938c989af..c1ae20dfc0 100644
+index a5a51023c5..22cc7bd789 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1578,7 +1578,8 @@ static unsigned manager_dispatch_stop_when_bound_queue(Manager *m) {
diff --git a/pkgs/os-specific/linux/systemd/0007-Change-usr-share-zoneinfo-to-etc-zoneinfo.patch b/pkgs/os-specific/linux/systemd/0007-Change-usr-share-zoneinfo-to-etc-zoneinfo.patch
index 6bb741e08c0e..2ad26b56efee 100644
--- a/pkgs/os-specific/linux/systemd/0007-Change-usr-share-zoneinfo-to-etc-zoneinfo.patch
+++ b/pkgs/os-specific/linux/systemd/0007-Change-usr-share-zoneinfo-to-etc-zoneinfo.patch
@@ -35,7 +35,7 @@ index 3a13e04a27..4fd58068a1 100644
Etc/UTC. The resulting link should lead to the
corresponding binary
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
-index 8c776960e1..2e0563bd00 100644
+index 5dd00af952..e682337ef0 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -1443,7 +1443,7 @@ static int get_timezones_from_zone1970_tab(char ***ret) {
@@ -75,10 +75,10 @@ index 8c776960e1..2e0563bd00 100644
return -EINVAL;
if (!timezone_is_valid(e, LOG_DEBUG))
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
-index 55bd273f21..d00aa16592 100644
+index 38e3adaed6..953ad05fb5 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
-@@ -571,7 +571,7 @@ static int prompt_timezone(int rfd, sd_varlink **mute_console_link) {
+@@ -576,7 +576,7 @@ static int prompt_timezone(int rfd, sd_varlink **mute_console_link) {
static int process_timezone(int rfd, sd_varlink **mute_console_link) {
_cleanup_close_ int pfd = -EBADF;
@@ -87,7 +87,7 @@ index 55bd273f21..d00aa16592 100644
const char *e;
int r;
-@@ -617,12 +617,9 @@ static int process_timezone(int rfd, sd_varlink **mute_console_link) {
+@@ -622,12 +622,9 @@ static int process_timezone(int rfd, sd_varlink **mute_console_link) {
if (isempty(arg_timezone))
return 0;
@@ -103,10 +103,10 @@ index 55bd273f21..d00aa16592 100644
return log_error_errno(r, "Failed to create /etc/localtime symlink: %m");
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
-index 05e6be8874..6dc00ff416 100644
+index e16cb17c7f..ff15d9d7f2 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
-@@ -1808,8 +1808,8 @@ int userns_mkdir(const char *root, const char *path, mode_t mode, uid_t uid, gid
+@@ -1820,8 +1820,8 @@ int userns_mkdir(const char *root, const char *path, mode_t mode, uid_t uid, gid
static const char *timezone_from_path(const char *path) {
return PATH_STARTSWITH_SET(
path,
diff --git a/pkgs/os-specific/linux/systemd/0010-systemd-shutdown-execute-scripts-in-etc-systemd-syst.patch b/pkgs/os-specific/linux/systemd/0010-systemd-shutdown-execute-scripts-in-etc-systemd-syst.patch
index 76ed16737834..37b56151b0b2 100644
--- a/pkgs/os-specific/linux/systemd/0010-systemd-shutdown-execute-scripts-in-etc-systemd-syst.patch
+++ b/pkgs/os-specific/linux/systemd/0010-systemd-shutdown-execute-scripts-in-etc-systemd-syst.patch
@@ -10,7 +10,7 @@ This is needed for NixOS to use such scripts as systemd directory is immutable.
1 file changed, 1 insertion(+)
diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c
-index 25882970ef..599dd0a63f 100644
+index ff68f9e272..53f2ba1eee 100644
--- a/src/shutdown/shutdown.c
+++ b/src/shutdown/shutdown.c
@@ -329,6 +329,7 @@ static void notify_supervisor(void) {
diff --git a/pkgs/os-specific/linux/systemd/0011-systemd-sleep-execute-scripts-in-etc-systemd-system-.patch b/pkgs/os-specific/linux/systemd/0011-systemd-sleep-execute-scripts-in-etc-systemd-system-.patch
index 7e7587a897d8..e39b77a9f86c 100644
--- a/pkgs/os-specific/linux/systemd/0011-systemd-sleep-execute-scripts-in-etc-systemd-system-.patch
+++ b/pkgs/os-specific/linux/systemd/0011-systemd-sleep-execute-scripts-in-etc-systemd-system-.patch
@@ -9,7 +9,7 @@ This is needed for NixOS to use such scripts as systemd directory is immutable.
1 file changed, 1 insertion(+)
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
-index 4fa6f16fcd..012cf16f90 100644
+index 0d128053ba..4deec9f72d 100644
--- a/src/sleep/sleep.c
+++ b/src/sleep/sleep.c
@@ -248,6 +248,7 @@ static int execute(
diff --git a/pkgs/os-specific/linux/systemd/0013-inherit-systemd-environment-when-calling-generators.patch b/pkgs/os-specific/linux/systemd/0013-inherit-systemd-environment-when-calling-generators.patch
index f1b17f5b76f7..5f2663d71425 100644
--- a/pkgs/os-specific/linux/systemd/0013-inherit-systemd-environment-when-calling-generators.patch
+++ b/pkgs/os-specific/linux/systemd/0013-inherit-systemd-environment-when-calling-generators.patch
@@ -16,10 +16,10 @@ executables that are being called from managers.
1 file changed, 8 insertions(+)
diff --git a/src/core/manager.c b/src/core/manager.c
-index c1ae20dfc0..c120e555a2 100644
+index 22cc7bd789..0a56da1307 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
-@@ -3994,9 +3994,17 @@ static int build_generator_environment(Manager *m, char ***ret) {
+@@ -3996,9 +3996,17 @@ static int build_generator_environment(Manager *m, char ***ret) {
* adjust generated units to that. Let's pass down some bits of information that are easy for us to
* determine (but a bit harder for generator scripts to determine), as environment variables. */
diff --git a/pkgs/os-specific/linux/systemd/0015-tpm2_context_init-fix-driver-name-checking.patch b/pkgs/os-specific/linux/systemd/0015-tpm2_context_init-fix-driver-name-checking.patch
index b8ab9c30c9b5..91c6ba58515e 100644
--- a/pkgs/os-specific/linux/systemd/0015-tpm2_context_init-fix-driver-name-checking.patch
+++ b/pkgs/os-specific/linux/systemd/0015-tpm2_context_init-fix-driver-name-checking.patch
@@ -27,7 +27,7 @@ filename_is_valid with path_is_valid.
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c
-index e089cfbc5e..35e135945b 100644
+index cf11b50695..7c5daffc23 100644
--- a/src/shared/tpm2-util.c
+++ b/src/shared/tpm2-util.c
@@ -741,7 +741,7 @@ int tpm2_context_new(const char *device, Tpm2Context **ret_context) {
diff --git a/pkgs/os-specific/linux/systemd/0017-meson.build-do-not-create-systemdstatedir.patch b/pkgs/os-specific/linux/systemd/0017-meson.build-do-not-create-systemdstatedir.patch
index 2bd396c210af..7d9d626bef09 100644
--- a/pkgs/os-specific/linux/systemd/0017-meson.build-do-not-create-systemdstatedir.patch
+++ b/pkgs/os-specific/linux/systemd/0017-meson.build-do-not-create-systemdstatedir.patch
@@ -8,10 +8,10 @@ Subject: [PATCH] meson.build: do not create systemdstatedir
1 file changed, 1 deletion(-)
diff --git a/meson.build b/meson.build
-index 4746146a98..c13b72af56 100644
+index 8289d8f28a..d3cf28c631 100644
--- a/meson.build
+++ b/meson.build
-@@ -2859,7 +2859,6 @@ install_data('LICENSE.GPL2',
+@@ -2858,7 +2858,6 @@ install_data('LICENSE.GPL2',
install_subdir('LICENSES',
install_dir : docdir)
diff --git a/pkgs/os-specific/linux/systemd/0018-meson-Don-t-link-ssh-dropins.patch b/pkgs/os-specific/linux/systemd/0018-meson-Don-t-link-ssh-dropins.patch
index 2e6f9677fa4a..00fe9ff8def3 100644
--- a/pkgs/os-specific/linux/systemd/0018-meson-Don-t-link-ssh-dropins.patch
+++ b/pkgs/os-specific/linux/systemd/0018-meson-Don-t-link-ssh-dropins.patch
@@ -8,7 +8,7 @@ Subject: [PATCH] meson: Don't link ssh dropins
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
-index c13b72af56..32f6e791e7 100644
+index d3cf28c631..54e17a9e2d 100644
--- a/meson.build
+++ b/meson.build
@@ -214,13 +214,13 @@ sshconfdir = get_option('sshconfdir')
diff --git a/pkgs/os-specific/linux/systemd/0019-install-unit_file_exists_full-follow-symlinks.patch b/pkgs/os-specific/linux/systemd/0019-install-unit_file_exists_full-follow-symlinks.patch
deleted file mode 100644
index b28703c2a3c5..000000000000
--- a/pkgs/os-specific/linux/systemd/0019-install-unit_file_exists_full-follow-symlinks.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Marie Ramlow
-Date: Fri, 10 Jan 2025 15:51:33 +0100
-Subject: [PATCH] install: unit_file_exists_full: follow symlinks
-
----
- src/shared/install.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/shared/install.c b/src/shared/install.c
-index a22c6df2f7..7e900c8bcd 100644
---- a/src/shared/install.c
-+++ b/src/shared/install.c
-@@ -3227,7 +3227,7 @@ int unit_file_exists_full(RuntimeScope scope, const LookupPaths *lp, const char
- &c,
- lp,
- name,
-- /* flags= */ 0,
-+ /* flags= */ SEARCH_FOLLOW_CONFIG_SYMLINKS,
- ret_path ? &info : NULL,
- /* changes= */ NULL,
- /* n_changes= */ NULL);
diff --git a/pkgs/os-specific/linux/systemd/0020-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch b/pkgs/os-specific/linux/systemd/0019-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch
similarity index 100%
rename from pkgs/os-specific/linux/systemd/0020-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch
rename to pkgs/os-specific/linux/systemd/0019-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch
diff --git a/pkgs/os-specific/linux/systemd/default.nix b/pkgs/os-specific/linux/systemd/default.nix
index 77d8b4666219..080377fab8a8 100644
--- a/pkgs/os-specific/linux/systemd/default.nix
+++ b/pkgs/os-specific/linux/systemd/default.nix
@@ -206,13 +206,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
inherit pname;
- version = "259";
+ version = "259.2";
src = fetchFromGitHub {
owner = "systemd";
repo = "systemd";
rev = "v${finalAttrs.version}";
- hash = "sha256-lJUX1sWRouhEEPZoA9UjjOy5IUZYGGV8pltAU0E4Dsg=";
+ hash = "sha256-nyqmKZ7j6zA/heODen0j0xH8FiTSGT+E4rfaUoqPbjU=";
};
# On major changes, or when otherwise required, you *must* :
@@ -246,11 +246,9 @@ stdenv.mkDerivation (finalAttrs: {
# if the install prefix is not /usr, but that does not work for us
# because we include the config snippet manually
./0018-meson-Don-t-link-ssh-dropins.patch
-
- ./0019-install-unit_file_exists_full-follow-symlinks.patch
]
++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isGnu) [
- ./0020-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch
+ ./0019-timesyncd-disable-NSCD-when-DNSSEC-validation-is-dis.patch
];
postPatch = ''
@@ -507,7 +505,6 @@ stdenv.mkDerivation (finalAttrs: {
(lib.mesonEnable "libcurl" wantCurl)
(lib.mesonEnable "libidn" false)
(lib.mesonEnable "libidn2" withLibidn2)
- (lib.mesonEnable "libiptc" false)
(lib.mesonEnable "repart" withRepart)
(lib.mesonEnable "sysupdate" withSysupdate)
(lib.mesonEnable "sysupdated" withSysupdate)