nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1use anyhow::{Context, Result};
2
3use crate::{
4 SYSROOT_PATH, config::Config, find_init_in_prefix, init, switch_root, verify_init_is_nixos,
5};
6
7/// Entrypoint for the `initrd-bin` binary.
8///
9/// Initialize `NixOS` from a systemd initrd.
10pub fn initrd_init() -> Result<()> {
11 let init_in_sysroot =
12 find_init_in_prefix(SYSROOT_PATH).context("Failed to find init in sysroot")?;
13
14 let init_path = if let Ok(toplevel) = verify_init_is_nixos(SYSROOT_PATH, &init_in_sysroot) {
15 log::info!("Initializing NixOS...");
16 let config = Config::from_toplevel(&toplevel, SYSROOT_PATH)
17 .context("Failed to get configuration")?;
18 init(SYSROOT_PATH, &toplevel, &config)?;
19 None
20 } else {
21 log::info!("Not initializing NixOS. Switching to new root immediately...");
22 Some(init_in_sysroot)
23 };
24
25 switch_root(init_path)?;
26 Ok(())
27}