qclk/firmware/default.nix

93 lines
2.4 KiB
Nix

{ self, inputs, ... }:
let
nixpkgsLib = inputs.nixpkgs.lib.extend (final: prev:
let
date = final.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101");
revCode = flake: flake.shortRev or "dirty";
in
{
trivial = prev.trivial // {
release = "24.08:u-${prev.trivial.release}";
codeName = "Alpha";
revisionWithDefault = default: self.rev or default;
versionSuffix = ".${date}.${revCode self}:u-${revCode inputs.nixpkgs}";
};
}
);
mkSystem = target: nixpkgsLib.nixosSystem {
modules = [
{
imports = [
inputs.impermanence.nixosModules.impermanence
];
}
./base.nix
./disk.nix
./network.nix
target
];
};
in
{
flake.nixosConfigurations = {
qclk-rpi3 = mkSystem target/rpi3.nix;
};
perSystem = { libMy, pkgs, ... }: {
devenv.shells.firmware = libMy.withRootdir {
packages = with pkgs; [
nixos-rebuild
nixVersions.latest
];
scripts = {
build.exec = ''
nix build "..#nixosConfigurations.qclk-$1.config.system.build.toplevel"
'';
build-image.exec = ''
set -e
export PATH="$PATH:${pkgs.util-linux}/bin:${pkgs.fakeroot}/bin:${pkgs.e2fsprogs}/bin"
die() {
echo "$1" >&2
exit 1
}
[ -z "$1" ] && die "Need to set target"
target=$1
out=qclkos-$target.img
nix build "..#nixosConfigurations.qclk-$target.config.my.disk.image"
persistRoot=$(mktemp --tmpdir -d qclkos-persist-XXXXX)
# TODO: bless with unique stuff (e.g. keys)
touch "$persistRoot"/test.txt
cp --sparse=always result/$out $out
chmod u+w $out
eval $(partx $out -o START,SECTORS --nr 2 --pairs)
persistImg=$(mktemp --tmpdir qclkos-persist-XXXXX.img)
truncate -s $((SECTORS * 512)) $persistImg
fakeroot mkfs.ext4 -L qclkos-persist -d $persistRoot $persistImg
dd conv=notrunc if=$persistImg of=$out seek=$START count=$SECTORS
rm -r "$persistRoot" "$persistImg"
'';
push-config.exec = ''
host=$1; shift
target=$1; shift
verb=$1; shift
export NIX_SSHOPTS="-i .keys/management.key"
nixos-rebuild $verb --flake ..#qclk-$target --target-host root@"$host" --use-substitutes "$@"
'';
};
};
};
}