95 lines
2.9 KiB
Nix
95 lines
2.9 KiB
Nix
{
|
|
description = "A very basic flake";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
pre-commit-hooks = {
|
|
url = "github:cachix/pre-commit-hooks.nix";
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, pre-commit-hooks }:
|
|
flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
nixosConfig = nixpkgs.lib.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
"${nixpkgs}/nixos/modules/installer/netboot/netboot-minimal.nix"
|
|
({ pkgs, ... }: {
|
|
services.openssh = {
|
|
enable = true;
|
|
startWhenNeeded = true;
|
|
};
|
|
|
|
users.users.root.openssh.authorizedKeys.keyFiles = [
|
|
(pkgs.fetchurl {
|
|
url = "https://github.com/eboskma.keys";
|
|
sha256 = "uwK4FSLSHiwCJU9U7RBFHIoCmr7uUQLM0JM1u0bi4xo=";
|
|
})
|
|
];
|
|
|
|
networking = {
|
|
useDHCP = true;
|
|
};
|
|
|
|
system.stateVersion = "23.05";
|
|
})
|
|
];
|
|
};
|
|
|
|
kexecScript = pkgs.writeScript "kexec-installer" ''
|
|
#!/bin/sh
|
|
if ! kexec -v >/dev/null 2>&1; then
|
|
echo "kexec not found: please install kexec-tools" 2>&1
|
|
exit 1
|
|
fi
|
|
kexec --load ./bzImage \
|
|
--initrd=./initrd.zst \
|
|
--command-line "init=${nixosConfig.config.system.build.toplevel}/init ${toString nixosConfig.config.boot.kernelParams}"
|
|
if systemctl --version >/dev/null 2>&1; then
|
|
systemctl kexec
|
|
else
|
|
kexec -e
|
|
fi
|
|
'';
|
|
in
|
|
{
|
|
formatter = pkgs.nixpkgs-fmt;
|
|
|
|
checks = {
|
|
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
|
src = ./.;
|
|
hooks = {
|
|
nixpkgs-fmt.enable = true;
|
|
deadnix.enable = true;
|
|
statix.enable = true;
|
|
shellcheck = {
|
|
enable = true;
|
|
types_or = [ "executable" ];
|
|
};
|
|
shfmt.enable = true;
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
devShells.default = with pkgs; mkShell {
|
|
inherit (self.checks.${system}.pre-commit-check) shellHook;
|
|
name = "kexec-installer";
|
|
};
|
|
|
|
packages.kexec-installer = pkgs.linkFarm "netboot" [
|
|
{ name = "initrd.zst"; path = "${nixosConfig.config.system.build.netbootRamdisk}/initrd.zst"; }
|
|
{ name = "bzImage"; path = "${nixosConfig.config.system.build.kernel}/bzImage"; }
|
|
{ name = "kexec-installer"; path = kexecScript; }
|
|
];
|
|
|
|
packages.default = self.packages.${system}.kexec-installer;
|
|
});
|
|
|
|
}
|