Commit graph

383 commits

Author SHA1 Message Date
Emily 7f9a83be1f
nixos/nixos-init: add more strict assertions for required config (#450775) 2025-10-12 15:15:13 +00:00
nikstur 8f5d10fd7e nixos/nixos-init: add more strict assertions for required config 2025-10-12 16:55:23 +02:00
nikstur 26cf6ffe54 nixos/top-level: only include preSwitchChecks when they are set 2025-10-09 23:52:38 +02:00
Wolfgang Walther 91a8fee3aa
treewide: remove redundant parentheses
Auto-fixed by nixf-diagnose.
2025-10-05 10:52:03 +02:00
misuzu e7fa9ff16c
nixos-init: init at 0.1.0 (#433154) 2025-09-23 12:48:56 +00:00
nikstur d0c03e4c5a nixos-init: init at 0.1.0 2025-09-23 00:21:33 +02:00
Val Packett 313fa9dc99 nixos/top-level: fix cutoffPackages without initialRamdisk
In systems without initrd (e.g. containers) that also use system.replaceDependencies, we'd get:

error: attribute 'initialRamdisk' missing
at /nix/store/8vfhnwmmzqqzy97q9c5m4bzyaqqf63zy-source/nixos/modules/system/activation/top-level.nix:286:21:
   285|       cutoffPackages = mkOption {
   286|         default = [ config.system.build.initialRamdisk ];
      |                     ^

Make that initialRamdisk reference conditional on the initrd being enabled.
2025-09-18 18:59:45 -03:00
Will Fancher 6b5020dc9c nixos/top-level: Install 'bootStage2' as 'init' in all non-initrd configs
Eventually we'd like to change our posture on this, and somehow ensure
that 'init' is always our systemd binary, but for now containers
require us to do it this way.
2025-09-10 09:45:48 -04:00
nikstur bc5eefd2a5 nixos/activation-script: disable userActivationScripts when system is not activatable 2025-08-10 22:43:42 +02:00
nikstur d5ae87bdeb
Revert "nixos: allow more things to be disabled" 2025-08-10 22:22:08 +02:00
nikstur 089e2e5eaf nixos/activation-script: disable userActivationScripts when system is not activatable 2025-07-31 20:42:36 +02:00
Wolfgang Walther 5a0711127c
treewide: run nixfmt 1.0.0 2025-07-24 13:55:40 +02:00
Martin Weinelt 3beaa4d288
nixos/activatable-script: drop nettools dependency
The hostname is not set over nettools since d300940637.
2025-07-06 00:59:35 +02:00
Jared Baur c59d4343f9
treewide: remove Perl-based switch-to-configuration 2025-06-11 08:56:42 -07:00
Ramses 139080c304
nixos/specialisation: escape and restrict specialisation names (#405393) 2025-05-17 19:47:05 +02:00
Will Fancher 4b0d1225f5 lib/asserts: Factor out NixOS's toplevel assertion / warning logic. 2025-05-14 01:21:10 -04:00
Berk D. Demir e4bf5ce70d nixos/activation: Fix shellcheck test failure
lib/test.nix relies on `fileset.toSource` which creates a source dir
with the files of interest. `testers.shellcheck` passes all the files in
the source dir to shellcheck. The issue is related to relative path
sourcing, i.e. `source ./lib.sh` where shellcheck cannot make any
assumptions about the working directory.

Options were:
1) Disable this warning with a directive
   Prior disabling in the tree:
    - pkgs/tools/nix/info/info.sh
    - nixos/modules/testing/test-instrumentation.nix

2) Set source-path to SCRIPTDIR with a directive
   https://github.com/koalaman/shellcheck/wiki/Directive#source-path

   Even though we don't enable external script following for shellcheck
   with `-x` flag given every file in the source dir is passed, this
   directive seems to capture the intent to help shellcheck a bit
   better.

Went with option 2.
2025-05-12 09:58:28 -07:00
toborwinner 2b9fc0ccc5
nixos/specialisation: escape and restrict specialisation names
Prevent the specialisation names from containing a forward slash.
Also escape them to allow for spaces in specialisation names.
2025-05-09 00:10:54 +02:00
Raito Bezarius 139bfb5b5e nixos/system/activation/bootspec: generalize the bootspec tooling package
After RFC-0125 implementation, Determinate Systems was pinged multiple
times to transfer the repository ownership of the tooling to a
vendor-neutral repository.

Unfortunately, this never manifested. Additionally, the leadership of
the NixOS project was too dysfunctional to deal with this sort of
problem. It might even still be the case up to this day.

Nonetheless, nixpkgs is about enabling end users to enact their own
policies. It would be better to live in a world where there is one
obvious choice of bootspec tooling, in the meantime, we can live in a
world where people can choose their bootspec tooling.

The Lix forge possess one fork of the Bootspec tooling:
https://git.lix.systems/lix-community/bootspec which will live its own
life from now on.

Change-Id: I00c4dd64e00b4c24f6641472902e7df60ed13b55
Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
2025-04-24 18:22:02 +02:00
Silvan Mosberger 374e6bcc40 treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:

  nix-build ci -A fmt.check

This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).

This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).

Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).

If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
2025-04-01 20:10:43 +02:00
Connor Baker cd7df192e3 treewide: add name argument to calls to testers.shellcheck 2025-03-08 00:15:22 +00:00
r-vdp 125edf8424
switch-to-configuration: don't block on flock, see 7a56ddaf9d 2025-02-17 13:14:25 +01:00
r-vdp 713607abea
nixos/activation: document the arguments that are passed to the pre-switch-check script 2025-01-28 12:00:10 +01:00
r-vdp e6bc540ce0
nixos/activation: pass the action as an argument to the pre-switch-checks
This allows for instance to reject switching into a configuration, while
still allowing to reboot into that same configuration.

This can be useful for instance to reject switching to a configuration
with a new systemd major version, but setting that same configuration as
the new boot default with `switch-to-configuration boot` is fine.
2025-01-28 11:40:38 +01:00
Peder Bergebakken Sundt 953f72e76e nixos/*: tag manpage references 2025-01-27 02:47:01 +01:00
r-vdp 73f3fe4839
nixos/activation: log output from pre-switch checks on stderr 2025-01-23 15:51:40 +01:00
r-vdp 113dbd79de
nixos/activation: improve preSwitchChecks
A couple of improvements:

1. Avoid the generally discouraged apply argument to options, as it has
   quite weird semantics
2. Avoid issues when a user calls a preSwitchCheck `script`, which
   would've been silently overridden by the existing implementation.
   Reliance on a special attribute name like that is bound to lead to a
   very-hard-to-debug problem for someone at some point
3. Use writeShellApplication so that the preSwitchChecks are checked by
   shellcheck and and so that they run with basic bash guardrails
4. Fix shellcheck issue (testing the value of $?)
5. Add a positive preSwitchCheck to the nixos test, to make sure that
   that works as intended
2025-01-23 15:51:37 +01:00
piegames dd7d5339f7 treewide: Fix incorrect string indentations 2025-01-07 19:49:28 +01:00
Will Fancher 15be453e9a
switch-to-configuration: Better handling of socket-activated units (#359724) 2025-01-04 11:51:21 -05:00
Lucy 8a1561bba6 doc: Add warning for configuration file copy in flake systems 2024-12-29 10:39:46 +01:00
misuzu b8be6313dc
nixos/activation-script: check rmdir in usrbinenv (#264523) 2024-12-14 13:28:42 +02:00
misuzu 21e39e915f
system/activation: mention deps attr in activationScripts example (#363915) 2024-12-11 20:01:19 +02:00
Silvan Mosberger 4f0dadbf38 treewide: format all inactive Nix files
After final improvements to the official formatter implementation,
this commit now performs the first treewide reformat of Nix files using it.
This is part of the implementation of RFC 166.

Only "inactive" files are reformatted, meaning only files that
aren't being touched by any PR with activity in the past 2 months.
This is to avoid conflicts for PRs that might soon be merged.
Later we can do a full treewide reformat to get the rest,
which should not cause as many conflicts.

A CI check has already been running for some time to ensure that new and
already-formatted files are formatted, so the files being reformatted here
should also stay formatted.

This commit was automatically created and can be verified using

    nix-build a08b3a4d19.tar.gz \
      --argstr baseRev b32a094368
    result/bin/apply-formatting $NIXPKGS_PATH
2024-12-10 20:26:33 +01:00
phaer df8e6f7487 system/activation: mention deps attr in activationScripts example
As it helps making deps easier to discover - as we don't currently
render submodule options in the module correctly - and is arguably
more technical correct: When using nixos-install to install nixos
into a chroot in i.e. /mnt, there's no gurantee that /mnt/dev exists
before the specialfs phase ran.
2024-12-10 14:17:09 +01:00
misuzu 4b0caba2c5
nixos/activation, switch-to-configuration-ng, doc: improve NIXOS_LUSTRATE installation experience (#349049) 2024-12-01 19:16:26 +02:00
Andreas Fuchs 1fed2312e7 Add X-NotSocketActivated logic to switch-to-configuration.pl, as well 2024-11-29 09:53:10 -05:00
Jared Baur 6e192c4489
nixos/activation: Add pre-switch checks
Add an option for shell script fragments that are ran before switching
to a new NixOS system configuration (pre installation of bootloader or
system activation). Also add a new subcommand for
switch-to-configuration called "check" that will cause the program to
always exit after checks are ran.
2024-11-21 13:02:54 -08:00
Jeff Huffman 898c9e3c91
nixos/activation: prevent error during NIXOS_LUSTRATE install 2024-11-21 10:19:21 -05:00
Will Fancher 5d9ac94606 nixos/activation-script: Make installBootLoader default a script
Fixes #344535
2024-11-04 04:12:52 -05:00
Will Fancher 37ee6ba681 Revert "NixOS apply script"
Reverts #344407

This has broken nixos-rebuild switch so that it no longer updates the profile, which has bad consequences including not updating the systemd-boot menu with new generations.
2024-11-01 20:18:09 -04:00
Robert Hensing 514ea18006 nixos: Update s-t-c and apply help text 2024-10-30 00:23:37 +01:00
Robert Hensing 7902cea1de nixos: Update documentation to refer to bin/apply 2024-10-30 00:21:21 +01:00
Robert Hensing 6427500989 nixos/toplevel: Add bin/apply 2024-10-30 00:21:20 +01:00
Jared Baur 9bbef50e24
nixos/switchable-system: add evaluation warning when using perl stc 2024-10-24 08:50:51 -07:00
Jared Baur 81f92fbc29
nixos/switchable-system: nixfmt 2024-10-24 06:22:58 -07:00
r-vdp 24bf6e9cb8
nixos/etc-overlay: avoid rebuilding the initrd every time the etc contents change
Before this change, the hash of the etc metadata image was included in
the mount unit that's responsible for mounting this metadata image in the
initrd.
And because this metadata image changes with every change to the etc
contents, the initrd would be rebuild every time as well.
This can lead to a lot of rebuilds (especially when revision info is
included in /etc/os-release) and all these initrd archives use up a lot of
space on the ESP.

With this change, we instead include a symlink to the metadata image in the
top-level directory, in the same way as we already do for things like init and
prepare-root, and we deduce the store path from the init= kernel parameter,
in the same way as we already do to find the path to init and prepare-root.

Doing so avoids rebuilding the initrd all the time.
2024-10-16 17:42:58 +02:00
Jared Baur c39781c558
nixos/activation-script: only setup nix tmpfiles if nix is enabled
If nix is not installed on the end system, the tmpfiles settings related
to it do not need to be setup.
2024-10-05 09:03:19 -07:00
Alois Wohlschlager 59ca239d1a replaceDirectDependencies: split off from replaceDependencies
This allows both swapping out and reusing the rewrite machinery.
2024-09-24 12:20:15 +02:00
Alois Wohlschlager 63d6a7037c nixos/top-level: wire up cutoffPackages for replaceDependencies
Move replaceRuntimeDependencies to the replaceDependencies namespace,
where the structure is more consistent with the replaceDependencies
function. This makes space for wiring up cutoffPackages as an option
too.

By default, the system's initrd is excluded. The replacement process does not
work properly anyway due to the structure of the initrd (the files being copied
into it, and it being compressed). In the worst case (which has been observed
to actually occur in practice), a store path makes it into the incompressible
parts of the archive, checksums are broken, and the system won't boot.
2024-09-24 12:20:15 +02:00
Alois Wohlschlager d3abae8dee nixos/top-level: improve replaceRuntimeDependencies
Instead of iterating over all replacements and applying them one by one,
use the newly introduced replaceDependencies function to apply them all
at once for replaceRuntimeDependencies. The advantages are twofold in
case there are multiple replacements:
* Performance is significantly improved, because there is only one pass
  over the closure to be made.
* Correctness is improved, because replaceDependencies also replaces
  dependencies of the replacements themselves if applicable.

Fixes: https://github.com/NixOS/nixpkgs/issues/4336
2024-09-24 12:20:15 +02:00