aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix')
-rw-r--r--nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix65
1 files changed, 65 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix b/nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix
new file mode 100644
index 00000000000..2d27611946e
--- /dev/null
+++ b/nixpkgs/nixos/modules/system/boot/loader/generations-dir/generations-dir.nix
@@ -0,0 +1,65 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ generationsDirBuilder = pkgs.substituteAll {
+ src = ./generations-dir-builder.sh;
+ isExecutable = true;
+ inherit (pkgs) bash;
+ path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
+ inherit (config.boot.loader.generationsDir) copyKernels;
+ };
+
+ # Temporary check, for nixos to cope both with nixpkgs stdenv-updates and trunk
+ inherit (pkgs.stdenv.hostPlatform) platform;
+
+in
+
+{
+ options = {
+
+ boot.loader.generationsDir = {
+
+ enable = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ Whether to create symlinks to the system generations under
+ <literal>/boot</literal>. When enabled,
+ <literal>/boot/default/kernel</literal>,
+ <literal>/boot/default/initrd</literal>, etc., are updated to
+ point to the current generation's kernel image, initial RAM
+ disk, and other bootstrap files.
+
+ This optional is not necessary with boot loaders such as GNU GRUB
+ for which the menu is updated to point to the latest bootstrap
+ files. However, it is needed for U-Boot on platforms where the
+ boot command line is stored in flash memory rather than in a
+ menu file.
+ '';
+ };
+
+ copyKernels = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ Whether copy the necessary boot files into /boot, so
+ /nix/store is not needed by the boot loader.
+ '';
+ };
+
+ };
+
+ };
+
+
+ config = mkIf config.boot.loader.generationsDir.enable {
+
+ system.build.installBootLoader = generationsDirBuilder;
+ system.boot.loader.id = "generationsDir";
+ system.boot.loader.kernelFile = platform.kernelTarget;
+
+ };
+}