summary refs log tree commit diff
path: root/nixos/modules/system/boot/loader/external/external.xml
blob: 39ab2156bc8c6e3f62579a3618613be9628c4813 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-bootloader-external">
  <title>External Bootloader Backends</title>
  <para>
    NixOS has support for several bootloader backends by default:
    systemd-boot, grub, uboot, etc. The built-in bootloader backend
    support is generic and supports most use cases. Some users may
    prefer to create advanced workflows around managing the bootloader
    and bootable entries.
  </para>
  <para>
    You can replace the built-in bootloader support with your own
    tooling using the <quote>external</quote> bootloader option.
  </para>
  <para>
    Imagine you have created a new package called FooBoot. FooBoot
    provides a program at
    <literal>${pkgs.fooboot}/bin/fooboot-install</literal> which takes
    the system closure’s path as its only argument and configures the
    system’s bootloader.
  </para>
  <para>
    You can enable FooBoot like this:
  </para>
  <programlisting language="nix">
{ pkgs, ... }: {
  boot.loader.external = {
    enable = true;
    installHook = &quot;${pkgs.fooboot}/bin/fooboot-install&quot;;
  };
}
</programlisting>
  <section xml:id="developing-custom-bootloader-backends">
    <title>Developing Custom Bootloader Backends</title>
    <para>
      Bootloaders should use
      <link xlink:href="https://github.com/NixOS/rfcs/pull/125">RFC-0125</link>’s
      Bootspec format and synthesis tools to identify the key properties
      for bootable system generations.
    </para>
  </section>
</chapter>