Commit Graph

2782 Commits

Author SHA1 Message Date
Luj
85f5bb8e46 nixos/systemd-boot: atomically update copied destination files (#444960) 2025-09-24 16:12:02 +02:00
sternenseemann
85c7452e80 nixos/systemd-boot: fsync() copied files
Since mkstemp() gives us a file descriptor, we may as well call fsync().
2025-09-24 01:35:51 +02:00
sternenseemann
94c190a55c nixos/systemd-boot: atomically update copied destination files
We absolutely do not want to leave an incomplete file behind in /boot
since an incomplete initrd would render the machine unbootable. Errors
while writing are relatively common, mostly due to full /boot
partitions.

systemd-boot-builder does never attempt to re-write already existing
files which means that such situations are not fixable by re-running
nixos-rebuild etc. Instead the user needs to know about internals of the
systemd-boot and manually delete the correct file to recover from a
partially written kernel or (more commonly) initrd in /boot.

Note that this used to be a non issue since systemd-boot-builder used to
always delete all kernels and initrds before copying kernels and
initrds, so dest.exist() would always return False. This was fixed in
f2ca990558, revealing the underlying bad
assumption (that copyfile() always succeeds or fails without writing
anything).

The solution is to write to a temporary file first and move it to the
destination path only after this has succeeded. This way, if an error
occurs during copying, only a file distinct from dest is left behind
which would be cleaned up by subsequent runs of remove_old_entries().

Resolves #444066.
2025-09-24 01:00:44 +02:00
misuzu
e7fa9ff16c nixos-init: init at 0.1.0 (#433154) 2025-09-23 12:48:56 +00:00
nikstur
3c24952c6d chroot-realpath: drop in favour of nixos-init 2025-09-23 00:21:34 +02:00
nikstur
d9e6299acc nixos/etc: use nixos-init to find etc 2025-09-23 00:21:33 +02:00
nikstur
d0c03e4c5a nixos-init: init at 0.1.0 2025-09-23 00:21:33 +02:00
h7x4
4ba3f60b8a various: use mkPackageOption 2025-09-22 02:46:54 +02:00
Franz Pletz
6e3bccdd2d nixos/systemd: add units for capsule support 2025-09-17 21:41:43 +02:00
misuzu
72f6935afb nixos/plymouth-tpm2-totp: init (#424861) 2025-09-15 16:27:55 +00:00
Majiir Paktu
b5bbf6f901 nixos/plymouth-tpm2-totp: init 2025-09-15 12:22:54 -04:00
r-vdp
c4753ff331 nixos/systemd-boot-builder: make sure to print informational messages to stderr
Otherwise this gets printed to stdout when running things like
nixos-rebuild, while people rely on the toplevel store path being the only
output of such commands.
2025-09-15 10:19:15 +02:00
Rane
77448445c1 nixos/limine: fix install script when using Xen with EFI (#441473) 2025-09-10 08:55:40 +10:00
John Titor
5d9e8f43d7 nixos/refind: allow use only on UEFI platforms 2025-09-06 12:29:15 +05:30
Tristan Ross
062b58f36f nixos/refind: init 2025-09-06 12:29:15 +05:30
Jared Baur
231bf43f72 nixos/systemd-boot-builder: remove old devicetree files (#439585) 2025-09-03 15:33:13 +01:00
Jeremy Fleischman
683d9e3b54 nixos/systemd-boot-builder: remove old devicetree files
I just stumbled across this during code inspection. I haven't tested
this at all.
2025-09-03 13:35:57 +01:00
Acid Bong
68dacf00f4 nixos/limine: use SBctl from the option 2025-09-03 01:12:09 +05:30
Paul Haerle
160448060e Add Xen multiboot kernel to bootspec and package, refactor boot options, add xen bootspec support to Limine (#393287) 2025-09-02 13:07:11 +02:00
Will Fancher
1782471af1 nixos/plymouth: Fix emergency / rescue mode. (#439447) 2025-09-02 07:57:39 +00:00
Will Fancher
73c52fbf7b nixos/plymouth: Pull ask-password in sysinit
This mirrors 'systemd-ask-password-console.path'
2025-09-02 03:40:03 -04:00
Will Fancher
825442f5cd nixos/plymouth: Fix rescue / emergency mode not quitting plymouth 2025-09-02 02:50:43 -04:00
Ali Rizvi
c372a3fbe9 nixos/systemd-oomd: add After=swap.target to fix swap detection issues
This should be removed after systemd 258 releases, as it is a temporary drop-in fix to circumvent the issue of systemd-oomd failing to detect a valid swap (noticeable in cases of users using `zram` as swap).

I've taken the liberty to clarify which `After=` override should be dropped when, based on the systemd version on Nixpkgs.
2025-08-31 16:19:35 -04:00
yunfachi
ae0f69acb9 nixos/plymouth: use system.nixos.distroName in nixosBreezePlymouth 2025-08-30 14:33:56 +03:00
Rane
647c04f2e9 nixos/limine: Add support for booting Xen 2025-08-30 14:43:43 +10:00
Sandro Jäckel
e9e0a0984f nixos/plymouth: dedupe theme check 2025-08-30 02:01:35 +02:00
Sandro Jäckel
c7c502a5fc nixos/plymouth: list available themes if the current one does not exist 2025-08-30 00:25:41 +02:00
Sandro Jäckel
7dbd50832a nixos/plymouth: fix theme == "breeze" breakage after removing Plasma 5 2025-08-30 00:25:38 +02:00
Philip Taron
54a65ab16f nixos/systemd-initrd: silence various warnings (#432704) 2025-08-28 15:53:59 -07:00
Alyssa Ross
bcd38e11bf nixos/systemd: fix enabling non-existent service
This service doesn't exist when withBootLoader is false.

Fixes: 2c98ea1e33 ("nixos/systemd: add upstream units for boot counting")
2025-08-28 12:29:48 +02:00
Philip Taron
e1e38fdab8 nixos/networkd: allow setting ManageForeignNextHops option (#376630) 2025-08-26 13:10:21 -07:00
Florian Klink
cadd6c49ee nixos/systemd-user: enable systemd-tmpfiles-clean.timer (#391976) 2025-08-26 11:34:47 +03:00
r-vdp
2c98ea1e33 nixos/systemd: add upstream units for boot counting
These units are needed to be able to experiment with systemd's boot counting
functionality (e.g. with out-of-tree bootloaders like lanzaboote), and they
cannot easily be added through configuration without patching nixpkgs.
They are basically a no-op when boot entries do not contain any
counters, so AFAICT there is no disadvantage to them being enabled by default.
2025-08-25 22:26:52 +03:00
dish
970dcca69c treewide: Fix links in module documentation 2025-08-25 12:55:11 -04:00
Florian Klink
6d3383c9e3 nixos/logind: migrate to settings option (#435407) 2025-08-25 13:31:13 +03:00
Felix Buehler
89526e1171 nixos/logind: migrate to settings option 2025-08-24 18:52:40 +02:00
schnusch
44c7414cc6 nixos/systemd-user: add systemd.user.tmpfiles.enable
enabled by default, see #391976
2025-08-22 17:52:13 +02:00
schnusch
5241898a20 nixos/systemd-user: enable systemd-tmpfiles-clean.timer
Set systemd.user.timers.systemd-tmpfiles-clean.wantedBy when any user tmpfiles
rules are set so NixOS knows to enable the unit.
2025-08-22 17:47:17 +02:00
nixpkgs-ci[bot]
d263613f2e Merge master into staging-next 2025-08-22 12:06:42 +00:00
Luj
30f409ed23 nixos/systemd-boot-builder: use pathlib.Path where possible (#434767) 2025-08-22 10:27:08 +01:00
K900
31d5c4e753 nixos/treewide: clean up some more references to deleted qt5 things 2025-08-22 11:38:49 +03:00
nixpkgs-ci[bot]
53fe08332e Merge master into staging-next 2025-08-21 20:43:13 +00:00
K900
35d0bafabf nixos/treewide: clean up Plasma 5 references
Preparing to drop.
2025-08-21 22:31:56 +03:00
budimanjojo
59f0f1e7ea nixos/networkd: allow setting ManageForeignNextHops option
Signed-off-by: budimanjojo <budimanjojo@gmail.com>
2025-08-21 02:22:06 +07:00
nixpkgs-ci[bot]
8721febb4b Merge master into staging-next 2025-08-20 00:16:19 +00:00
Will Fancher
bf9cb5e0d4 nixos/boot/kernel: allow kernel without MODULES support (#411792) 2025-08-19 21:28:36 +00:00
Linus Heckemann
f2ca990558 nixos/systemd-boot-builder: use pathlib.Path where possible
`switch-to-configuration boot` was taking suspiciously long on a machine
of mine where the boot partition is on a slow SD card. Some tracing led
me to discover that it was in fact deleting all the kernels and initrds
every time, only to rewrite them.

This turned out to be because of the naive (non-path-normalising) string
concatenation used to construct paths in `known_paths`, so all the files
were recognised as obsolete and deleted:


known_paths=['/EFI/nixos/5jz3m9df1cbxn4hzjjs3aaz8lb9vvimc-linux-6.15.7-Image.efi', '/EFI/nixos/xri8qzfvzclf89x7nfwgq248miw7jbp0-initrd-linux-6.15.7-initrd.efi', '/EFI/nixos/b18llskzrcdgw2nbib58qqcaabiik6yc-linux-6.16-Image.efi', '/EFI/nixos/mdj53j746bii1vw227dfhkyd8ajwab2w-initrd-linux-6.16-initrd.efi', '/EFI/nixos/b18llskzrcdgw2nbib58qqcaabiik6yc-linux-6.16-Image.efi', '/EFI/nixos/mdj53j746bii1vw227dfhkyd8ajwab2w-initrd-linux-6.16-initrd.efi', '/EFI/nixos/b18llskzrcdgw2nbib58qqcaabiik6yc-linux-6.16-Image.efi', '/EFI/nixos/mdj53j746bii1vw227dfhkyd8ajwab2w-initrd-linux-6.16-initrd.efi', '/EFI/nixos/5jz3m9df1cbxn4hzjjs3aaz8lb9vvimc-linux-6.15.7-Image.efi', '/EFI/nixos/1ihk03c1i5518hlgm5mnhrig2hy3hq24-initrd-linux-6.15.7-initrd.efi', '/EFI/nixos/5jz3m9df1cbxn4hzjjs3aaz8lb9vvimc-linux-6.15.7-Image.efi', '/EFI/nixos/1ihk03c1i5518hlgm5mnhrig2hy3hq24-initrd-linux-6.15.7-initrd.efi', '/EFI/nixos/5jz3m9df1cbxn4hzjjs3aaz8lb9vvimc-linux-6.15.7-Image.efi', '/EFI/nixos/1ihk03c1i5518hlgm5mnhrig2hy3hq24-initrd-linux-6.15.7-initrd.efi']
path='/boot//EFI/nixos/5jz3m9df1cbxn4hzjjs3aaz8lb9vvimc-linux-6.15.7-Image.efi'
path='/boot//EFI/nixos/xri8qzfvzclf89x7nfwgq248miw7jbp0-initrd-linux-6.15.7-initrd.efi'
path='/boot//EFI/nixos/b18llskzrcdgw2nbib58qqcaabiik6yc-linux-6.16-Image.efi'
path='/boot//EFI/nixos/mdj53j746bii1vw227dfhkyd8ajwab2w-initrd-linux-6.16-initrd.efi'
path='/boot//EFI/nixos/1ihk03c1i5518hlgm5mnhrig2hy3hq24-initrd-linux-6.15.7-initrd.efi'


This can be avoided by using pathlib.Path, which normalises paths and
generally provides a more consistent and convenient API. I therefore
went ahead and replaced all use of `str` for path handling with `Path`
in the builder. This may fix some other, similar bugs, as well, but I
haven't checked in detail.
2025-08-18 20:11:57 +02:00
K900
f4924fc36c Merge remote-tracking branch 'origin/master' into staging-next 2025-08-16 09:11:21 +03:00
Jared Baur
ca9040f22c nixos/kernel: obtain in-tree kernel modules via the modules output 2025-08-15 20:56:59 -07:00
andre4ik3
216d98ab97 nixos/systemd-initrd: silence various warnings
Silences 2 warning messages that appear when using the systemd initrd:

1. "System tainted (var-run-bad)": occurs because `/var/run` isn't a
   symlink to `/run`. Fixed by making /run and linking /var/run to it.

2. "Failed to make /usr a mountpoint": occurs because ProtectSystem
   defaults to true in the initrd, which makes systemd try to remount
   `/usr` as read-only, which doesn't exist in the initrd. Fixed by
   linking `/usr/bin` and `/usr/sbin` to the initrd bin directories.

Also moves the `/tmp` creation from the initrd module to make-initrd-ng,
to avoid making an unnecessary `/tmp/.keep`, saving a store path and a
few bytes in the initrd image.
2025-08-16 00:28:13 +00:00