mirror of
https://github.com/nix-community/raspberry-pi-nix.git
synced 2025-11-08 19:46:03 +01:00
optionally pin all inputs
This commit is contained in:
parent
1570501aba
commit
d77a2ae4ed
1 changed files with 26 additions and 9 deletions
|
|
@ -3,14 +3,13 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.raspberry-pi-nix;
|
cfg = config.raspberry-pi-nix;
|
||||||
kernel-pkgs = if cfg.pin-kernel.enable then pinned else pkgs;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ../sd-image ./config.nix ./i2c.nix ];
|
imports = [ ../sd-image ./config.nix ./i2c.nix ];
|
||||||
|
|
||||||
options = with lib; {
|
options = with lib; {
|
||||||
raspberry-pi-nix = {
|
raspberry-pi-nix = {
|
||||||
pin-kernel = {
|
pin-inputs = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
default = true;
|
default = true;
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
|
@ -98,7 +97,7 @@ in
|
||||||
TARGET_OVERLAYS_DIR="$TARGET_FIRMWARE_DIR/overlays"
|
TARGET_OVERLAYS_DIR="$TARGET_FIRMWARE_DIR/overlays"
|
||||||
TMPFILE="$TARGET_FIRMWARE_DIR/tmp"
|
TMPFILE="$TARGET_FIRMWARE_DIR/tmp"
|
||||||
UBOOT="${pkgs.uboot_rpi_arm64}/u-boot.bin"
|
UBOOT="${pkgs.uboot_rpi_arm64}/u-boot.bin"
|
||||||
KERNEL="${kernel-pkgs.rpi-kernels.latest.kernel}/Image"
|
KERNEL="${pkgs.rpi-kernels.latest.kernel}/Image"
|
||||||
SHOULD_UBOOT=${if cfg.uboot.enable then "1" else "0"}
|
SHOULD_UBOOT=${if cfg.uboot.enable then "1" else "0"}
|
||||||
SRC_FIRMWARE_DIR="${pkgs.raspberrypifw}/share/raspberrypi/boot"
|
SRC_FIRMWARE_DIR="${pkgs.raspberrypifw}/share/raspberrypi/boot"
|
||||||
STARTFILES=("$SRC_FIRMWARE_DIR"/start*.elf)
|
STARTFILES=("$SRC_FIRMWARE_DIR"/start*.elf)
|
||||||
|
|
@ -126,7 +125,7 @@ in
|
||||||
cp "$KERNEL" "$TMPFILE"
|
cp "$KERNEL" "$TMPFILE"
|
||||||
mv -T "$TMPFILE" "$TARGET_FIRMWARE_DIR/kernel.img"
|
mv -T "$TMPFILE" "$TARGET_FIRMWARE_DIR/kernel.img"
|
||||||
echo "${
|
echo "${
|
||||||
builtins.toString kernel-pkgs.rpi-kernels.latest.kernel
|
builtins.toString pkgs.rpi-kernels.latest.kernel
|
||||||
}" > "$STATE_DIRECTORY/kernel-version"
|
}" > "$STATE_DIRECTORY/kernel-version"
|
||||||
rm "$STATE_DIRECTORY/kernel-migration-in-progress"
|
rm "$STATE_DIRECTORY/kernel-migration-in-progress"
|
||||||
}
|
}
|
||||||
|
|
@ -182,7 +181,7 @@ in
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$SHOULD_UBOOT" -ne 1 ]] && [[ ! -f "$STATE_DIRECTORY/kernel-version" || $(< "$STATE_DIRECTORY/kernel-version") != ${
|
if [[ "$SHOULD_UBOOT" -ne 1 ]] && [[ ! -f "$STATE_DIRECTORY/kernel-version" || $(< "$STATE_DIRECTORY/kernel-version") != ${
|
||||||
builtins.toString kernel-pkgs.rpi-kernels.latest.kernel
|
builtins.toString pkgs.rpi-kernels.latest.kernel
|
||||||
} ]]; then
|
} ]]; then
|
||||||
migrate_kernel
|
migrate_kernel
|
||||||
fi
|
fi
|
||||||
|
|
@ -271,9 +270,27 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
overlays = [ core-overlay ]
|
overlays =
|
||||||
++ (if config.raspberry-pi-nix.libcamera-overlay.enable
|
let
|
||||||
then [ libcamera-overlay ] else [ ]);
|
rpi-overlays = [ core-overlay ]
|
||||||
|
++ (if config.raspberry-pi-nix.libcamera-overlay.enable
|
||||||
|
then [ libcamera-overlay ] else [ ]);
|
||||||
|
rpi-overlay = lib.composeManyExtensions rpi-overlays;
|
||||||
|
pin-prev-overlay = overlay: pinned-prev: final: prev:
|
||||||
|
let
|
||||||
|
# apply the overlay to pinned-prev and fix that so no references to the actual final
|
||||||
|
# and prev appear in applied-overlay
|
||||||
|
applied-overlay =
|
||||||
|
lib.fix (final: pinned-prev // overlay final pinned-prev);
|
||||||
|
# We only want to set keys that appear in the overlay, so restrict applied-overlay to
|
||||||
|
# these keys
|
||||||
|
restricted-overlay = lib.getAttrs (builtins.attrNames (overlay { } { })) applied-overlay;
|
||||||
|
in
|
||||||
|
prev // restricted-overlay;
|
||||||
|
in
|
||||||
|
if cfg.pin-inputs.enable
|
||||||
|
then [ (pin-prev-overlay rpi-overlay pinned) ]
|
||||||
|
else [ rpi-overlay ];
|
||||||
};
|
};
|
||||||
boot = {
|
boot = {
|
||||||
initrd.availableKernelModules = [
|
initrd.availableKernelModules = [
|
||||||
|
|
@ -286,7 +303,7 @@ in
|
||||||
# This pin is not necessary, it would be fine to replace it with
|
# This pin is not necessary, it would be fine to replace it with
|
||||||
# `pkgs.rpi-kernels.latest.kernel`. It is helpful to ensure
|
# `pkgs.rpi-kernels.latest.kernel`. It is helpful to ensure
|
||||||
# cache hits for kernel builds though.
|
# cache hits for kernel builds though.
|
||||||
kernelPackages = kernel-pkgs.linuxPackagesFor kernel-pkgs.rpi-kernels.latest.kernel;
|
kernelPackages = pkgs.linuxPackagesFor pkgs.rpi-kernels.latest.kernel;
|
||||||
|
|
||||||
loader = {
|
loader = {
|
||||||
grub.enable = lib.mkDefault false;
|
grub.enable = lib.mkDefault false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue