remove extlinux bootloader wrapper: use colinsane.extraBootFiles

This commit is contained in:
colin 2022-06-24 00:10:07 -07:00
parent 065d139cbc
commit d38f17207b
5 changed files with 102 additions and 160 deletions

View File

@ -1,4 +1,4 @@
{ ... }:
{ pkgs, ... }:
{
imports = [
./fs.nix
@ -6,7 +6,9 @@
colinsane.gui.sway.enable = true;
colinsane.impermanence.enable = true;
colinsane.extlinux.enable = true;
boot.loader.generic-extlinux-compatible.enable = true;
boot.loader.efi.canTouchEfiVariables = false;
colinsane.image.extraBootFiles = [ pkgs.bootpart-uefi-x86_64 ];
# docs: https://nixos.org/manual/nixos/stable/options.html#opt-system.stateVersion
system.stateVersion = "21.05";

View File

@ -2,7 +2,6 @@
{
imports = [
./extlinux.nix
./x86_64.nix
];
}

View File

@ -1,27 +0,0 @@
#! @bash@/bin/sh -ex
# this wraps <nixpkgs>/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh
# to expose a COMPLETE extlinux bootloader installation.
# parse CLI. we only care about some of the flags
target=/boot # default target
while getopts "t:c:d:g:n:r" opt; do
case "$opt" in
d) target="$OPTARG" ;;
*) ;;
esac
done
# populate /boot/extlinux/extlinux.conf & /boot/nixos
@genericBuilder@ $@
# populate the EFI directory with syslinux, and configure it to read that extlinux.conf file managed by nixos
mkdir -p $target/EFI/syslinux $target/EFI/BOOT
cp @syslinux@/share/syslinux/efi64/* $target/EFI/syslinux/
echo "DEFAULT trampoline" > $target/EFI/syslinux/syslinux.cfg
echo "LABEL trampoline" >> $target/EFI/syslinux/syslinux.cfg
echo "CONFIG ../../extlinux/extlinux.conf ../../extlinux" >> $target/EFI/syslinux/syslinux.cfg
# create the EFI/BOOT/BOOTX64.EFI default entry
cp $target/EFI/syslinux/* $target/EFI/BOOT
mv $target/EFI/BOOT/syslinux.efi $target/EFI/BOOT/BOOTX64.EFI

View File

@ -1,47 +0,0 @@
{ lib, pkgs, config, nixpkgs, ... }:
with lib;
let
cfg = config.colinsane.extlinux;
genericBuilder = (import "${nixpkgs}/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix" { inherit pkgs; });
builder = pkgs.substituteAll {
src = ./extlinux-builder.sh;
isExecutable = true;
inherit (pkgs) bash syslinux;
inherit genericBuilder;
};
in
{
options = {
colinsane.extlinux.enable = mkOption {
default = false;
type = types.bool;
};
};
config = mkIf cfg.enable {
# XXX: i'm not 100% sure this is true. i saw some errors related to reading EFI vars though.
boot.loader.efi.canTouchEfiVariables = false;
system.build.installBootLoader = let
dtCfg = config.hardware.deviceTree;
builderArgs = "-g 20 -t 5"
+ lib.optionalString (dtCfg.name != null) "-n ${dtCfg.name}";
in "${builder} ${builderArgs} -c";
system.boot.loader.id = "extlinux";
};
# i'm not sure why the below doesn't work instead??
# config = mkIf cfg.enable {
# system.build.installBootLoader =
# let
# generic-install = (import "${nixpkgs}/nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix" {
# inherit lib pkgs;
# config = config // {
# boot.loader.generic-extlinux-compatible.enable = true;
# };
# });
# in generic-install.config.system.build.installBootLoader;
# system.boot.loader.id = "extlinux";
# };
}

View File

@ -1,6 +1,17 @@
{ config, lib, pkgs, mobile-nixos, utils, ... }:
with lib;
let
cfg = config.colinsane.image;
in
{
options = {
colinsane.image.extraBootFiles = mkOption {
default = [];
type = types.listOf types.package;
};
};
config = let
# return true if super starts with sub
startsWith = super: sub: (
(builtins.substring 0 (builtins.stringLength sub) super) == sub
@ -34,8 +45,7 @@ let
"ext4" = pkgs.imageBuilder.fileSystem.makeExt4;
"btrfs" = pkgs.imageBuilder.fileSystem.makeBtrfs;
};
in
{
in {
system.build.img-without-firmware = with pkgs; imageBuilder.diskImage.makeGPT {
name = "nixos";
diskID = vfatUuidFromFs bootFs;
@ -54,10 +64,14 @@ in
partitionUUID = "44444444-4444-4444-4444-4444${vfatUuidFromFs bootFs}";
size = imageBuilder.size.MiB 256;
populateCommands = ''
populateCommands = let
extras = builtins.toString (builtins.map (d: "cp -R ${d}/* ./") cfg.extraBootFiles);
in ''
echo "running installBootLoader"
${config.system.build.installBootLoader} ${config.system.build.toplevel} -d .
echo "ran installBootLoader"
${extras}
echo "copied extraBootFiles"
'';
})
(fsBuilderMapNix."${nixFs.fsType}" {
@ -87,4 +101,5 @@ in
];
};
system.build.img = lib.mkDefault config.system.build.img-without-firmware;
};
}