From b216fe5215c9daead0126457e2d302d911b7302e Mon Sep 17 00:00:00 2001 From: mjallen18 Date: Tue, 30 Dec 2025 14:28:48 -0600 Subject: [PATCH] bruh --- modules/nixos/disko/default.nix | 3 +- .../nixos/hardware/raspberry-pi/config.nix | 2 +- .../nixos/hardware/raspberry-pi/default.nix | 136 ++++++++++++++-- .../raspberry-pi/firmware-builder.nix | 18 +++ .../hardware/raspberry-pi/firmware-builder.sh | 92 +++++++++++ .../generational/install-device-tree.sh | 75 +++++++++ .../generational/install-firmware.sh | 66 ++++++++ .../generational/nixos-generations-builder.sh | 146 ++++++++++++++++++ .../hardware/raspberry-pi/uboot-builder.nix | 23 +++ .../hardware/raspberry-pi/uboot-builder.sh | 67 ++++++++ modules/nixos/services/ai/default.nix | 2 +- modules/nixos/services/sunshine/default.nix | 17 +- overlays/linux-cachyos/default.nix | 3 + packages/uboot/default.nix | 2 +- systems/aarch64-linux/pi5/boot.nix | 74 ++++----- 15 files changed, 667 insertions(+), 59 deletions(-) create mode 100644 modules/nixos/hardware/raspberry-pi/firmware-builder.nix create mode 100644 modules/nixos/hardware/raspberry-pi/firmware-builder.sh create mode 100644 modules/nixos/hardware/raspberry-pi/generational/install-device-tree.sh create mode 100644 modules/nixos/hardware/raspberry-pi/generational/install-firmware.sh create mode 100644 modules/nixos/hardware/raspberry-pi/generational/nixos-generations-builder.sh create mode 100644 modules/nixos/hardware/raspberry-pi/uboot-builder.nix create mode 100644 modules/nixos/hardware/raspberry-pi/uboot-builder.sh diff --git a/modules/nixos/disko/default.nix b/modules/nixos/disko/default.nix index d36d27e..0e22581 100644 --- a/modules/nixos/disko/default.nix +++ b/modules/nixos/disko/default.nix @@ -123,7 +123,7 @@ in partitions = { FIRMWARE = lib.mkIf cfg.enableFirmware { priority = 1; - name = "FIRMWARE"; + name = "${config.${namespace}.network.hostName}-FIRMWARE"; start = "1M"; end = "1G"; type = "0700"; @@ -138,6 +138,7 @@ in priority = if cfg.enableFirmware then 2 else 1; type = "EF00"; size = "500M"; + name = "${config.${namespace}.network.hostName}-EFI"; content = { type = "filesystem"; format = "vfat"; diff --git a/modules/nixos/hardware/raspberry-pi/config.nix b/modules/nixos/hardware/raspberry-pi/config.nix index 3db2b2a..c35aab7 100644 --- a/modules/nixos/hardware/raspberry-pi/config.nix +++ b/modules/nixos/hardware/raspberry-pi/config.nix @@ -179,6 +179,6 @@ in { }; config = { - hardware.raspberry-pi.config-generated = render-raspberrypi-config cfg.config; + ${namespace}.hardware.raspberry-pi.config-generated = render-raspberrypi-config cfg.config; }; } \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/default.nix b/modules/nixos/hardware/raspberry-pi/default.nix index 8190670..77517fa 100644 --- a/modules/nixos/hardware/raspberry-pi/default.nix +++ b/modules/nixos/hardware/raspberry-pi/default.nix @@ -12,6 +12,110 @@ let applyOverlays = _final.callPackage ./apply-overlays-dtmerge.nix { }; }; }; + + ubootBinName = "u-boot.bin"; + + deviceTree = ({ pkgs + , firmware + }: pkgs.replaceVarsWith { + src = ./generational/install-device-tree.sh; + isExecutable = true; + + replacements = { + inherit (pkgs) bash; + path = pkgs.lib.makeBinPath [ + pkgs.coreutils + ]; + + inherit firmware; + }; + }); + + # installs raspberry's firmware independent of the nixos generations + # sometimes referred to as "boot code" + raspberryPiFirmware = ({ pkgs + , firmware + , configTxt + }: pkgs.replaceVarsWith { + src = ./generational/install-firmware.sh; + isExecutable = true; + + replacements = { + inherit (pkgs) bash; + path = pkgs.lib.makeBinPath [ + pkgs.coreutils + ]; + + inherit firmware configTxt; + }; + }); + + # Builders used to write during system activation + firmwareBuilder = import ./firmware-builder.nix { + inherit pkgs; + configTxt = pkgs.writeTextFile { + name = "config.txt"; + text = '' + # Do not edit! + # This configuration file is generated from NixOS configuration + # options `hardware.raspberry-pi.config`. + # Any manual changes will be overwritten on the next configuration + # switch. + ${config.${namespace}.hardware.raspberry-pi.config-generated} + ''; + }; + firmware = pkgs.${namespace}.raspberrypifw; + }; + ubootBuilder = import ./uboot-builder.nix { + inherit pkgs; + ubootPackage = pkgs.${namespace}.uboot-pi5; + firmwareBuilder = firmwarePopulateCmd; + extlinuxConfBuilder = config.boot.loader.generic-extlinux-compatible.populateCmd; + }; + + # Builders exposed via populateCmd, which run on the build architecture + populateFirmwareBuilder = import ./firmware-builder.nix { + pkgs = pkgs.buildPackages; + configTxt = pkgs.writeTextFile { + name = "config.txt"; + text = '' + # Do not edit! + # This configuration file is generated from NixOS configuration + # options `hardware.raspberry-pi.config`. + # Any manual changes will be overwritten on the next configuration + # switch. + ${config.${namespace}.hardware.raspberry-pi.config-generated} + ''; + }; + firmware = pkgs.${namespace}.raspberrypifw; + }; + + populateUbootBuilder = import ./uboot-builder.nix { + inherit ubootBinName; + pkgs = pkgs.buildPackages; + ubootPackage = pkgs.${namespace}.uboot-pi5; + firmwareBuilder = firmwarePopulateCmd; + extlinuxConfBuilder = config.boot.loader.generic-extlinux-compatible.populateCmd; + }; + + firmwarePopulateCmd = "${populateFirmwareBuilder} ${firmwareBuilderArgs}"; + firmwareBuilderArgs = lib.optionalString (!true) " -r"; + + # these will receive the top-level path as an argument when invoked as + # system.build.installBootloader + builder = { + # system.build.installBootLoader + uboot = "${ubootBuilder} -f /boot/firmware -b /boot -c"; + }; + + # firmware: caller must provide `-c ` and `-f ` + # boot: caller must provide `-c ` and `-b ` + populateCmds = { + uboot = { + firmware = "${populateUbootBuilder}"; + boot = "${populateUbootBuilder}"; + }; + }; in { options.${namespace}.hardware.raspberry-pi = { @@ -38,6 +142,7 @@ in imports = [ ./audio.nix ./bluetooth.nix + ./config.nix ./i2c.nix ./leds.nix ./modesetting.nix @@ -60,7 +165,10 @@ in "reset-raspberrypi" # required for vl805 firmware to load ]); loader = { - generic-extlinux-compatible.enable = lib.mkDefault true; + generic-extlinux-compatible = { + enable = lib.mkDefault true; + useGenerationDeviceTree = false; + }; grub.enable = lib.mkForce false; }; }; @@ -150,12 +258,21 @@ in i2c.enable = lib.mkDefault true; }; - # Pi specific system tags - system.nixos.tags = [ - "raspberry-pi-${cfg.variant}" - # config.boot.loader.raspberry-pi.bootloader - config.boot.kernelPackages.kernel.version - ]; + system = { + build.installBootLoader = lib.mkOverride 60 (builder."uboot"); + boot = { + loader = { + id = lib.mkOverride 60 ("raspberrypi-uboot"); + kernelFile = pkgs.stdenv.hostPlatform.linux-kernel.target; + }; + }; + # Pi specific system tags + nixos.tags = [ + "raspberry-pi-${cfg.variant}" + # config.boot.loader.raspberry-pi.bootloader + config.boot.kernelPackages.kernel.version + ]; + }; # Common programs programs.kdeconnect.enable = lib.mkDefault false; @@ -191,11 +308,6 @@ in }; nixpkgs.overlays = [ ] ++ (if cfg.variant == "5" then [ - (final: prev: { - ubootRaspberryPi5 = prev.uboot.ubootRaspberryPi4_64Bit.override { - defconfig = "rpi_5_defconfig"; - }; - }) (final: prev: { # https://github.com/nvmd/nixos-raspberrypi/issues/64 # credit for the initial version of this snippet goes to @micahcc diff --git a/modules/nixos/hardware/raspberry-pi/firmware-builder.nix b/modules/nixos/hardware/raspberry-pi/firmware-builder.nix new file mode 100644 index 0000000..515b67d --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/firmware-builder.nix @@ -0,0 +1,18 @@ +{ pkgs +, configTxt +, firmware ? pkgs.raspberrypifw +}: + +pkgs.replaceVarsWith { + src = ./firmware-builder.sh; + isExecutable = true; + + replacements = { + inherit (pkgs) bash; + path = pkgs.lib.makeBinPath [ + pkgs.coreutils + ]; + + inherit firmware configTxt; + }; +} \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/firmware-builder.sh b/modules/nixos/hardware/raspberry-pi/firmware-builder.sh new file mode 100644 index 0000000..5747ff2 --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/firmware-builder.sh @@ -0,0 +1,92 @@ +#! @bash@/bin/sh -e + +shopt -s nullglob + +export PATH=/empty:@path@ + +usage() { + echo "usage: $0 -c [-d ] [-r]" >&2 + exit 1 +} + +default= # Default configuration +target=/boot/firmware # Firmware target directory + +while getopts "c:d:r" opt; do + case "$opt" in + c) default="$OPTARG" ;; + d) target="$OPTARG" ;; + r) useVendorDeviceTree=1 ;; + \?) usage ;; + esac +done + +# Copy a file from the Nix store to $target. +declare -A filesCopied + +copyForced() { + local src="$1" + local dst="$2" + cp $src $dst.tmp + mv $dst.tmp $dst +} + +# Add the firmware files +# fwdir=@firmware@/share/raspberrypi/boot/ +SRC_FIRMWARE_DIR=@firmware@/share/raspberrypi/boot +dtb_path=$SRC_FIRMWARE_DIR + +echo "copying firmware..." + +# Device Tree + +if [ -n "$useVendorDeviceTree" ]; then + echo -n "using vendor firmware from " + dtb_path=$SRC_FIRMWARE_DIR +else + echo -n "using default generation's kernel device tree binaries: " + dtb_path=$(readlink -f $default/dtbs) +fi +echo $dtb_path + +DTBS=("$dtb_path"/*.dtb) +for dtb in "${DTBS[@]}"; do +# for dtb in $dtb_path/broadcom/*.dtb; do + dst="$target/$(basename $dtb)" + copyForced $dtb "$dst" + filesCopied[$dst]=1 +done + +SRC_OVERLAYS_DIR="$dtb_path/overlays" +SRC_OVERLAYS=("$SRC_OVERLAYS_DIR"/*) +mkdir -p $target/overlays +for ovr in "${SRC_OVERLAYS[@]}"; do +# for ovr in $dtb_path/overlays/*; do + dst="$target/overlays/$(basename $ovr)" + copyForced $ovr "$dst" + filesCopied[$dst]=1 +done + +# remove obsolete device tree files +for fn in $target/*.dtb $target/overlays/*; do + if ! test "${filesCopied[$fn]}" = 1; then + rm -vf -- "$fn" + fi +done + + +# Boot code + +STARTFILES=("$SRC_FIRMWARE_DIR"/start*.elf) +BOOTCODE="$SRC_FIRMWARE_DIR/bootcode.bin" +FIXUPS=("$SRC_FIRMWARE_DIR"/fixup*.dat) +for SRC in "${STARTFILES[@]}" "$BOOTCODE" "${FIXUPS[@]}"; do + dst="$target/$(basename $SRC)" + copyForced "$SRC" "$dst" +done + +echo "copying config.txt..." +# Add the config.txt +copyForced @configTxt@ $target/config.txt + +echo "raspberry pi firmware installed" \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/generational/install-device-tree.sh b/modules/nixos/hardware/raspberry-pi/generational/install-device-tree.sh new file mode 100644 index 0000000..9a76e2c --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/generational/install-device-tree.sh @@ -0,0 +1,75 @@ +#! @bash@/bin/sh -e + +# shellcheck disable=SC3030,SC3043,SC3044,SC3054 + +shopt -s nullglob + +export PATH=/empty:@path@ + +usage() { + echo "usage: $0 -c [-d ] [-r]" >&2 + exit 1 +} + +generationPath= # Path to nixos configuration/generation +target=/boot/firmware # Device tree files target directory + +while getopts "c:d:r" opt; do + case "$opt" in + c) generationPath="$OPTARG" ;; + d) target="$OPTARG" ;; + r) useVendorDeviceTree=1 ;; + \?) usage ;; + esac +done + +# Copy a file from the Nix store to $target. +declare -A filesCopied + +copyForced() { + local src="$1" + local dst="$2" + + local dstTmp="$dst.tmp.$$" + + cp "$src" "$dstTmp" + mv "$dstTmp" "$dst" +} + +echo "$0: $@" +echo -n "installing device tree files: " + +# Device Tree + +if [ -n "$useVendorDeviceTree" ]; then + echo -n "vendor firmware " + dtb_path=@firmware@/share/raspberrypi/boot +else + echo -n "generation's kernel's " + dtb_path=$(readlink -f "$generationPath/dtbs") +fi +echo "$dtb_path" + +# firmware package has dtbs in its root, +# dtbs built with kernel are in broadcom/ +DTBS=("$dtb_path"/*.dtb "$dtb_path"/broadcom/*.dtb) +for dtb in "${DTBS[@]}"; do + dst="$target/$(basename "$dtb")" + copyForced "$dtb" "$dst" + filesCopied[$dst]=1 +done + +SRC_OVERLAYS=("$dtb_path/overlays"/*) +mkdir -p "$target/overlays" +for ovr in "${SRC_OVERLAYS[@]}"; do + dst="$target/overlays/$(basename "$ovr")" + copyForced "$ovr" "$dst" + filesCopied[$dst]=1 +done + +# remove obsolete device tree files +for fn in $target/*.dtb $target/overlays/*; do + if ! test "${filesCopied[$fn]}" = 1; then + rm -vf -- "$fn" + fi +done \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/generational/install-firmware.sh b/modules/nixos/hardware/raspberry-pi/generational/install-firmware.sh new file mode 100644 index 0000000..4b6f91a --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/generational/install-firmware.sh @@ -0,0 +1,66 @@ +#! @bash@/bin/sh -e + +# shellcheck disable=SC3030,SC3043,SC3044,SC3054 + +shopt -s nullglob + +export PATH=/empty:@path@ + +usage() { + echo "usage: $0 -c [-d ]" >&2 + exit 1 +} + +generationPath= # Path to nixos configuration/generation +target=/boot/firmware # Firmware target directory + +while getopts "c:d:" opt; do + case "$opt" in + c) generationPath="$OPTARG" ;; + d) target="$OPTARG" ;; + \?) usage ;; + esac +done + +# Copy a file from the Nix store to $target. +declare -A filesCopied + +copyForced() { + local src="$1" + local dst="$2" + + local dstTmp="$dst.tmp.$$" + + cp "$src" "$dstTmp" + mv "$dstTmp" "$dst" +} + +# Add the firmware files +# fwdir=@firmware@/share/raspberrypi/boot/ +SRC_FIRMWARE_DIR=@firmware@/share/raspberrypi/boot + +echo "copying raspberry pi firmware..." + +# Boot code + +STARTFILES=("$SRC_FIRMWARE_DIR"/start*.elf) +BOOTCODE="$SRC_FIRMWARE_DIR/bootcode.bin" +FIXUPS=("$SRC_FIRMWARE_DIR"/fixup*.dat) +for SRC in "${STARTFILES[@]}" "$BOOTCODE" "${FIXUPS[@]}"; do + dst="$target/$(basename "$SRC")" + copyForced "$SRC" "$dst" + filesCopied[$dst]=1 +done + +# remove obsolete firmware files +for fn in $target/start*.elf $target/fixup*.dat; do + if ! test "${filesCopied[$fn]}" = 1; then + rm -vf -- "$fn" + fi +done + +echo "copying config.txt..." +# Add the config.txt +copyForced @configTxt@ "$target/config.txt" + +echo "raspberry pi firmware installed" \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/generational/nixos-generations-builder.sh b/modules/nixos/hardware/raspberry-pi/generational/nixos-generations-builder.sh new file mode 100644 index 0000000..51d5b80 --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/generational/nixos-generations-builder.sh @@ -0,0 +1,146 @@ +#! @bash@/bin/sh -e + +# shellcheck disable=SC3043,SC3044,SC3054 + +shopt -s nullglob + +export PATH=/empty:@path@ + +# used to track copied generations to decide which are obsolete +# and need to be removed +declare -A activeGenerations + +moveWBackup() { + local src="$1" + local dst="$2" + + # Backup $dst if already exists + local dstBkp="$dst.bkp.$$" + if [ -e "$dst" ]; then + mv "$dst" "$dstBkp" + fi + + # Move $src as "new" $dst + mv "$src" "$dst" + + # Remove backup directory of the previous $dst + rm -rf "$dstBkp" +} + +# Copy generation's kernel, initrd, cmdline to `gensDir/generationName`. +addEntry() { + local generationPath="$1" + local generationName="$2" + local gensDir="$3" + + local dst="$gensDir/$generationName" + + echo "* nixos generation '$generationName' -> $dst" + # Don't copy the files if $dst already exists, unless it's the default + # configuration. + # This means that we have to create $dst atomically to prevent partially + # copied generations if this script is ever interrupted. + # + # For "default" generation: make backup and then replace with the new + # "default", minimizing the time when where isn't any "default" generation + # directory + if ! [ -e $dst ] || [ "$generationName" = "default" ]; then + local dstTmp="$dst.tmp.$$" + mkdir -p "$dstTmp" || true + + @nixosGenBuilder@ -c "$generationPath" -n "$generationName" -d "$dstTmp" + + # Move new generation on its place, backing up the previous version + # if it exists + # This may only happen when "$generationName" = "default" + moveWBackup "$dstTmp" "$dst" + fi + + activeGenerations["$generationName"]=1 +} + +removeObsoleteGenerations() { + local path="$1" + + echo "removing obsolete generations in $path..." + for gen in $path/*; do + if ! [ "${activeGenerations["$(basename "$gen")"]}" = 1 ]; then + echo "* $gen is obsolete" + rm -vrf "$gen" + fi + done +} + +addAllEntries() { + local defaultGenerationPath="$1" + local outdir="$2" + local numGenerations="$3" + + local gensDir="$outdir/@nixosGenerationsDir@" + mkdir -p "$gensDir" || true + + # Add default generation + addEntry "$defaultGenerationPath" default "$gensDir" + + if [ "$numGenerations" -gt 0 ]; then + # Add up to $numGenerations generations of the system profile, in reverse + # (most recent to least recent) order. + for generation in $( + (cd /nix/var/nix/profiles && ls -d system-*-link) \ + | sed 's/system-\([0-9]\+\)-link/\1/' \ + | sort -n -r \ + | head -n "$numGenerations"); do + link=/nix/var/nix/profiles/system-$generation-link + addEntry "$link" "${generation}-default" "$gensDir" + for specialisation in $( + ls /nix/var/nix/profiles/system-$generation-link/specialisation \ + | sort -n -r); do + link=/nix/var/nix/profiles/system-$generation-link/specialisation/$specialisation + addEntry "$link" "${generation}-${specialisation}" "$gensDir" + done + done + fi + + removeObsoleteGenerations "$gensDir" +} + +usage() { + echo "usage: $0 -c [-b ] [-g ]" >&2 + exit 1 +} + + +default= # Default configuration +numGenerations=0 # Number of other generations to keep (kernel, initrd, DTBs, overlays) + +echo "$0: $@" +while getopts "c:b:g:f:" opt; do + case "$opt" in + c) default="$OPTARG" ;; + b) boottarget="$OPTARG" ;; + g) numGenerations="$OPTARG" ;; + f) fwtarget="$OPTARG" ;; + \?) usage ;; + esac +done + +if [ -z "$boottarget" ] && [ -z "$fwtarget" ]; then + echo "Error: at least one of \`-b \` and \`-f \` must be set" + usage +fi + +if [ -n "$fwtarget" ]; then + echo "installing nixos-generation-independent firmware..." + @installFirmwareBuilder@ -c "$default" -d "$fwtarget" + + echo "installing nixos generations..." + addAllEntries "$default" "$fwtarget" "$numGenerations" +fi + +if [ -n "$boottarget" ]; then + echo "'-b $boottarget' isn't used when loading the kernel directly with \`kernel\`: "\ + "kernels are copied directly to " + exit 0 +fi + +echo "generational bootloader installed" \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/uboot-builder.nix b/modules/nixos/hardware/raspberry-pi/uboot-builder.nix new file mode 100644 index 0000000..2b7264c --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/uboot-builder.nix @@ -0,0 +1,23 @@ +{ pkgs +, ubootPackage +, ubootBinName ? "u-boot.bin" +, extlinuxConfBuilder +, firmwareBuilder +}: + +pkgs.replaceVarsWith { + src = ./uboot-builder.sh; + isExecutable = true; + + replacements = { + inherit (pkgs) bash; + path = pkgs.lib.makeBinPath [ + pkgs.coreutils + ]; + + uboot = ubootPackage; + inherit ubootBinName; + inherit extlinuxConfBuilder; + inherit firmwareBuilder; + }; +} \ No newline at end of file diff --git a/modules/nixos/hardware/raspberry-pi/uboot-builder.sh b/modules/nixos/hardware/raspberry-pi/uboot-builder.sh new file mode 100644 index 0000000..f060c46 --- /dev/null +++ b/modules/nixos/hardware/raspberry-pi/uboot-builder.sh @@ -0,0 +1,67 @@ +#! @bash@/bin/sh -e + +shopt -s nullglob + +export PATH=/empty:@path@ + +usage() { + echo "usage: $0 -f -b -c " >&2 + exit 1 +} + +default= # Default configuration, needed for extlinux +# fwtarget=/boot/firmware # firmware target directory +# boottarget=/boot # boot configuration target directory + +echo "uboot-builder: $@" +while getopts "c:b:f:" opt; do + case "$opt" in + c) default="$OPTARG" ;; + b) boottarget="$OPTARG" ;; + f) fwtarget="$OPTARG" ;; + \?) usage ;; + esac +done + +if [ -z "$boottarget" ] && [ -z "$fwtarget" ]; then + echo "Error: at least one of \`-b \` and \`-f \` must be set" + usage +fi + +# # process arguments for this builder, then pass the remainder to extlinux' +# while getopts ":f:" opt; do +# case "$opt" in +# f) target="$OPTARG" ;; +# *) ;; +# esac +# done +# shift $((OPTIND-2)) +# extlinuxBuilderExtraArgs="$@" + +copyForced() { + local src="$1" + local dst="$2" + cp $src $dst.tmp + mv $dst.tmp $dst +} + +if [ -n "$fwtarget" ]; then + @firmwareBuilder@ -c $default -d $fwtarget + + echo "copying u-boot binary..." + copyForced @uboot@/u-boot.bin $fwtarget/@ubootBinName@ +fi + +if [ -n "$boottarget" ]; then + echo "generating extlinux configuration..." + @extlinuxConfBuilder@ -c $default -d $boottarget +fi + +msg="" +if [ -n "$fwtarget" ]; then + msg="uboot" +fi +if [ -n "$boottarget" ]; then + msg="$msg+extlinux" +fi +echo "$msg bootloader installed" \ No newline at end of file diff --git a/modules/nixos/services/ai/default.nix b/modules/nixos/services/ai/default.nix index 6863f7a..9e2a413 100755 --- a/modules/nixos/services/ai/default.nix +++ b/modules/nixos/services/ai/default.nix @@ -31,7 +31,7 @@ let }; llama-cpp = { - enable = true; + enable = false; port = 8127; host = "0.0.0.0"; openFirewall = cfg.openFirewall; diff --git a/modules/nixos/services/sunshine/default.nix b/modules/nixos/services/sunshine/default.nix index 19f1131..2e9580a 100644 --- a/modules/nixos/services/sunshine/default.nix +++ b/modules/nixos/services/sunshine/default.nix @@ -25,21 +25,26 @@ let name = "steam"; prep-cmd = [ { + do = "${pkgs.cosmic-randr}/bin/cosmic-randr mode HDMI-A-1 1280 800"; + undo = "${pkgs.cosmic-randr}/bin/cosmic-randr mode HDMI-A-1 1920 1080"; + } + { + do = "${pkgs.util-linux}/bin/setsid ${pkgs.steam}/bin/steam steam://open/bigpicture"; undo = "${pkgs.util-linux}/bin/setsid ${pkgs.steam}/bin/steam steam://close/bigpicture"; } ]; - detached = [ - "${pkgs.util-linux}/bin/setsid ${pkgs.steam}/bin/steam steam://open/bigpicture" - ]; + # detached = [ + # "${pkgs.steam}/bin/steam steam://open/bigpicture" + # ]; exclude-global-prep-cmd = "false"; auto-detach = "true"; } { - name = "1440p Desktop"; + name = "800p Desktop"; prep-cmd = [ { - do = "''${pkgs.kdePackages.libkscreen}/bin/kscreen-doctor output.DP-4.mode.2560x1440@60"; - undo = "''${pkgs.kdePackages.libkscreen}/bin/kscreen-doctor output.DP-4.mode.3440x1440@60"; + do = "${pkgs.cosmic-randr}/bin/cosmic-randr mode HDMI-A-1 1280 800"; + undo = "${pkgs.cosmic-randr}/bin/cosmic-randr mode HDMI-A-1 1920 1080"; } ]; exclude-global-prep-cmd = "false"; diff --git a/overlays/linux-cachyos/default.nix b/overlays/linux-cachyos/default.nix index 42b50d5..bb49b62 100644 --- a/overlays/linux-cachyos/default.nix +++ b/overlays/linux-cachyos/default.nix @@ -7,6 +7,7 @@ let nixpkgs = inputs.nixpkgs; inherit self; }; + ubootPackages = final.callPackage ../../packages/uboot { }; in { ${namespace} = prev.${namespace} // { @@ -33,5 +34,7 @@ in # RC linuxPackages_cachyos-rc-lto = cachyosPackages.cachyos-rc-lto; linuxPackages_cachyos-rc-lto-znver4 = cachyosPackages.cachyos-rc-lto-znver4; + + uboot-pi5 = ubootPackages.ubootRaspberryPi5; }; } diff --git a/packages/uboot/default.nix b/packages/uboot/default.nix index 485b923..992b84a 100644 --- a/packages/uboot/default.nix +++ b/packages/uboot/default.nix @@ -268,7 +268,7 @@ in }; ubootRaspberryPi5 = buildUBoot { - defconfig = "rpi_5_defconfig"; + defconfig = "rpi_arm64_defconfig"; extraMeta.platforms = [ "aarch64-linux" ]; filesToInstall = [ "u-boot.bin" ]; }; diff --git a/systems/aarch64-linux/pi5/boot.nix b/systems/aarch64-linux/pi5/boot.nix index 7e531cf..9baef21 100755 --- a/systems/aarch64-linux/pi5/boot.nix +++ b/systems/aarch64-linux/pi5/boot.nix @@ -12,46 +12,46 @@ in supportedFilesystems = lib.mkForce [ ]; }; - # hardware.raspberry-pi.config = { - # all = { - # # [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters + ${namespace}.hardware.raspberry-pi.config = { + all = { + # [all] conditional filter, https://www.raspberrypi.com/documentation/computers/config_txt.html#conditional-filters - # options = { - # # https://www.raspberrypi.com/documentation/computers/config_txt.html#enable_uart - # # in conjunction with `console=serial0,115200` in kernel command line (`cmdline.txt`) - # # creates a serial console, accessible using GPIOs 14 and 15 (pins - # # 8 and 10 on the 40-pin header) - # enable_uart = { - # enable = true; - # value = true; - # }; - # # https://www.raspberrypi.com/documentation/computers/config_txt.html#uart_2ndstage - # # enable debug logging to the UART, also automatically enables - # # UART logging in `start.elf` - # uart_2ndstage = { - # enable = true; - # value = true; - # }; - # }; + options = { + # https://www.raspberrypi.com/documentation/computers/config_txt.html#enable_uart + # in conjunction with `console=serial0,115200` in kernel command line (`cmdline.txt`) + # creates a serial console, accessible using GPIOs 14 and 15 (pins + # 8 and 10 on the 40-pin header) + enable_uart = { + enable = true; + value = true; + }; + # https://www.raspberrypi.com/documentation/computers/config_txt.html#uart_2ndstage + # enable debug logging to the UART, also automatically enables + # UART logging in `start.elf` + uart_2ndstage = { + enable = true; + value = true; + }; + }; - # # Base DTB parameters - # # https://github.com/raspberrypi/linux/blob/a1d3defcca200077e1e382fe049ca613d16efd2b/arch/arm/boot/dts/overlays/README#L132 - # base-dt-params = { + # Base DTB parameters + # https://github.com/raspberrypi/linux/blob/a1d3defcca200077e1e382fe049ca613d16efd2b/arch/arm/boot/dts/overlays/README#L132 + base-dt-params = { - # # https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#enable-pcie - # pciex1 = { - # enable = true; - # value = "on"; - # }; - # # PCIe Gen 3.0 - # # https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#pcie-gen-3-0 - # pciex1_gen = { - # enable = true; - # value = "3"; - # }; + # https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#enable-pcie + pciex1 = { + enable = true; + value = "on"; + }; + # PCIe Gen 3.0 + # https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#pcie-gen-3-0 + pciex1_gen = { + enable = true; + value = "3"; + }; - # }; + }; - # }; - # }; + }; + }; }