diff --git a/flake.lock b/flake.lock index a0a9396..d3e6941 100644 --- a/flake.lock +++ b/flake.lock @@ -365,40 +365,6 @@ "type": "github" } }, - "libcamera-src": { - "flake": false, - "locked": { - "lastModified": 1718617480, - "narHash": "sha256-qqEMJzMotybf1nJp1dsz3zc910Qj0TmqCm1CwuSb1VY=", - "owner": "raspberrypi", - "repo": "libcamera", - "rev": "6ddd79b5bdbedc1f61007aed35391f1559f9e29a", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "repo": "libcamera", - "rev": "6ddd79b5bdbedc1f61007aed35391f1559f9e29a", - "type": "github" - } - }, - "libpisp-src": { - "flake": false, - "locked": { - "lastModified": 1718613892, - "narHash": "sha256-V/d4RrXoq8HNc8r/Kr1gH3E7YTZzfIdgbaJtq/Xi7uQ=", - "owner": "raspberrypi", - "repo": "libpisp", - "rev": "b567f04556801ca350331ed21a1ae3eef4675c23", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "ref": "v1.0.6", - "repo": "libpisp", - "type": "github" - } - }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -537,22 +503,6 @@ "type": "indirect" } }, - "nixpkgs_4": { - "locked": { - "lastModified": 1722651103, - "narHash": "sha256-IRiJA0NVAoyaZeKZluwfb2DoTpBAj+FLI0KfybBeDU0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a633d89c6dc9a2a8aae11813a62d7c58b2c0cc51", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixvim": { "inputs": { "devshell": "devshell", @@ -604,33 +554,6 @@ "type": "github" } }, - "raspberry-pi-nix": { - "inputs": { - "libcamera-src": "libcamera-src", - "libpisp-src": "libpisp-src", - "nixpkgs": "nixpkgs_4", - "rpi-bluez-firmware-src": "rpi-bluez-firmware-src", - "rpi-firmware-nonfree-src": "rpi-firmware-nonfree-src", - "rpi-firmware-src": "rpi-firmware-src", - "rpi-linux-6_10_0-rc5-src": "rpi-linux-6_10_0-rc5-src", - "rpi-linux-6_6_31-src": "rpi-linux-6_6_31-src", - "rpicam-apps-src": "rpicam-apps-src", - "u-boot-src": "u-boot-src" - }, - "locked": { - "lastModified": 1722525809, - "narHash": "sha256-LTCbMSKbSHvKubfXolss39UeTKDIoP9wWTyXV/tDPHU=", - "owner": "nix-community", - "repo": "raspberry-pi-nix", - "rev": "35bb455fdeb495043a94433f67e05fa88980cdad", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "raspberry-pi-nix", - "type": "github" - } - }, "root": { "inputs": { "agenix": "agenix", @@ -646,113 +569,10 @@ "nixpkgs-unstable": "nixpkgs-unstable", "nixvim": "nixvim", "plasma-manager": "plasma-manager", - "raspberry-pi-nix": "raspberry-pi-nix", "secrets": "secrets", "thunderbird-gnome-theme": "thunderbird-gnome-theme" } }, - "rpi-bluez-firmware-src": { - "flake": false, - "locked": { - "lastModified": 1708969706, - "narHash": "sha256-KakKnOBeWxh0exu44beZ7cbr5ni4RA9vkWYb9sGMb8Q=", - "owner": "RPi-Distro", - "repo": "bluez-firmware", - "rev": "78d6a07730e2d20c035899521ab67726dc028e1c", - "type": "github" - }, - "original": { - "owner": "RPi-Distro", - "ref": "bookworm", - "repo": "bluez-firmware", - "type": "github" - } - }, - "rpi-firmware-nonfree-src": { - "flake": false, - "locked": { - "lastModified": 1708967191, - "narHash": "sha256-BGq0+cr+xBRwQM/LqiQuRWuZpQsKM5jfcrNCqWMuVzM=", - "owner": "RPi-Distro", - "repo": "firmware-nonfree", - "rev": "223ccf3a3ddb11b3ea829749fbbba4d65b380897", - "type": "github" - }, - "original": { - "owner": "RPi-Distro", - "ref": "bookworm", - "repo": "firmware-nonfree", - "type": "github" - } - }, - "rpi-firmware-src": { - "flake": false, - "locked": { - "lastModified": 1716978780, - "narHash": "sha256-KsCo7ZG6vKstxRyFljZtbQvnDSqiAPdUza32xTY/tlA=", - "owner": "raspberrypi", - "repo": "firmware", - "rev": "3590de0c181d433af368a95f15bc480bdaff8b47", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "ref": "1.20240529", - "repo": "firmware", - "type": "github" - } - }, - "rpi-linux-6_10_0-rc5-src": { - "flake": false, - "locked": { - "lastModified": 1719265450, - "narHash": "sha256-xd/Pz/uZFYW9hJIFKryWDE9Aks6f2EIvEDCmfk0C70c=", - "owner": "raspberrypi", - "repo": "linux", - "rev": "f61d3aca8045e70d64b55f7b98f083738f639ad2", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "ref": "rpi-6.10.y", - "repo": "linux", - "type": "github" - } - }, - "rpi-linux-6_6_31-src": { - "flake": false, - "locked": { - "lastModified": 1716545726, - "narHash": "sha256-UWUTeCpEN7dlFSQjog6S3HyEWCCnaqiUqV5KxCjYink=", - "owner": "raspberrypi", - "repo": "linux", - "rev": "c1432b4bae5b6582f4d32ba381459f33c34d1424", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "ref": "stable_20240529", - "repo": "linux", - "type": "github" - } - }, - "rpicam-apps-src": { - "flake": false, - "locked": { - "lastModified": 1717081637, - "narHash": "sha256-s4zJh6r3VhiquO54KWZ78dVCH1BmlphY9zEB9BidNyo=", - "owner": "raspberrypi", - "repo": "rpicam-apps", - "rev": "49344f2a8d1817558d4e6463032fcf11be618b38", - "type": "github" - }, - "original": { - "owner": "raspberrypi", - "ref": "v1.5.0", - "repo": "rpicam-apps", - "type": "github" - } - }, "secrets": { "flake": false, "locked": { @@ -851,19 +671,6 @@ "type": "github" } }, - "u-boot-src": { - "flake": false, - "locked": { - "lastModified": 1712055538, - "narHash": "sha256-IlaDdjKq/Pq2orzcU959h93WXRZfvKBGDO/MFw9mZMg=", - "type": "tarball", - "url": "https://ftp.denx.de/pub/u-boot/u-boot-2024.04.tar.bz2" - }, - "original": { - "type": "tarball", - "url": "https://ftp.denx.de/pub/u-boot/u-boot-2024.04.tar.bz2" - } - }, "utils": { "inputs": { "systems": "systems_2" diff --git a/flake.nix b/flake.nix index 3da5acb..2ae8f66 100644 --- a/flake.nix +++ b/flake.nix @@ -41,9 +41,6 @@ inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; }; - raspberry-pi-nix = { - url = "github:nix-community/raspberry-pi-nix"; - }; secrets = { url = "git+ssh://git@git.vimium.com/jordan/nix-secrets.git"; flake = false; @@ -123,7 +120,7 @@ mail = mkNixosSystem { system = "x86_64-linux"; name = "mail"; }; odyssey = mkNixosSystem { system = "x86_64-linux"; name = "odyssey"; }; pi = mkNixosSystem { system = "aarch64-linux"; name = "pi"; extraModules = [ nixos-hardware.nixosModules.raspberry-pi-4 ]; }; - skycam = mkNixosSystem { system = "aarch64-linux"; name = "skycam"; extraModules = [ inputs.raspberry-pi-nix.nixosModules.raspberry-pi ]; }; + skycam = mkNixosSystem { system = "aarch64-linux"; name = "skycam"; extraModules = [ nixos-hardware.nixosModules.raspberry-pi-4 ]; }; vps1 = mkNixosSystem { system = "x86_64-linux"; name = "vps1"; }; }; diff --git a/hosts/common.nix b/hosts/common.nix index 655cfd9..816a65c 100644 --- a/hosts/common.nix +++ b/hosts/common.nix @@ -62,12 +62,10 @@ auto-optimise-store = true; substituters = [ "http://odyssey.mesh.vimium.net" - "https://nix-community.cachix.org" "https://cache.nixos.org" ]; trusted-public-keys = [ "odyssey.mesh.vimium.net:ZhQhjscPWjoN4rlZwoMELznEiBnZ9O26iyGA27ibilQ=" - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; }; gc = { diff --git a/hosts/skycam/default.nix b/hosts/skycam/default.nix index e8e2a9f..f331df1 100644 --- a/hosts/skycam/default.nix +++ b/hosts/skycam/default.nix @@ -6,11 +6,49 @@ ../server.nix ]; - raspberry-pi-nix = { - board = "bcm2711"; - libcamera-overlay.enable = false; + hardware = { + raspberry-pi."4" = { + apply-overlays-dtmerge.enable = true; + audio.enable = false; + xhci.enable = false; + }; + deviceTree = { + enable = true; + filter = "*rpi-4-*.dtb"; + # From https://github.com/Electrostasy/dots/blob/3b81723feece67610a252ce754912f6769f0cd34/hosts/phobos/klipper.nix#L43-L65 + overlays = + let + mkCompatibleDtsFile = dtbo: + let + drv = pkgs.runCommand "fix-dts" { nativeBuildInputs = with pkgs; [ dtc gnused ]; } '' + mkdir "$out" + dtc -I dtb -O dts ${dtbo} | sed -e 's/bcm2835/bcm2711/' > $out/overlay.dts + ''; + in + "${drv}/overlay.dts"; + + inherit (config.boot.kernelPackages) kernel; + in + [ + { + name = "imx708.dtbo"; + dtsFile = mkCompatibleDtsFile "${kernel}/dtbs/overlays/imx708.dtbo"; + } + { + name = "vc4-kms-v3d-pi4.dtbo"; + dtsFile = mkCompatibleDtsFile "${kernel}/dtbs/overlays/vc4-kms-v3d-pi4.dtbo"; + } + ]; + }; + firmware = with pkgs; [ + firmwareLinuxNonfree + ]; }; + services.udev.extraRules = '' + SUBSYSTEM="dma_heap", GROUP="video", MODE="0600" + ''; + networking = { hostId = "731d1660"; firewall = { diff --git a/hosts/skycam/hardware-configuration.nix b/hosts/skycam/hardware-configuration.nix index 20155b8..65f519a 100644 --- a/hosts/skycam/hardware-configuration.nix +++ b/hosts/skycam/hardware-configuration.nix @@ -1,6 +1,24 @@ { config, lib, modulesPath, ... }: { + imports = [ + (modulesPath + "/installer/sd-card/sd-image-aarch64.nix") + ]; + + boot = { + kernelModules = [ "bcm2835-v4l2" ]; + kernelParams = [ "cma=512M" ]; + supportedFilesystems = lib.mkForce [ "f2fs" "vfat xfs" ]; + tmp.cleanOnBoot = true; + }; + + nixpkgs.overlays = [ + (final: super: { + makeModulesClosure = x: + super.makeModulesClosure (x // { allowMissing = true; }); + }) + ]; + fileSystems = { "/" = { device = "/dev/disk/by-label/NIXOS_SD"; diff --git a/modules/options.nix b/modules/options.nix index 014ea98..0ab1d70 100644 --- a/modules/options.nix +++ b/modules/options.nix @@ -36,7 +36,7 @@ with lib; in { inherit name; isNormalUser = true; - extraGroups = [ "networkmanager" "wheel" "lxd" "video" ]; + extraGroups = [ "networkmanager" "wheel" "lxd" ]; description = "Jordan Holt"; useDefaultShell = true; openssh.authorizedKeys.keys = [ diff --git a/overlays/0001-Always-installed.patch b/overlays/0001-Always-installed.patch deleted file mode 100644 index 42b275a..0000000 --- a/overlays/0001-Always-installed.patch +++ /dev/null @@ -1,32 +0,0 @@ -From ff76624c4407c6132cd4068e6ce065a7b429351f Mon Sep 17 00:00:00 2001 -From: Jordan Holt -Date: Sun, 4 Aug 2024 15:46:04 +0100 -Subject: [PATCH] Always installed - ---- - src/libcamera/source_paths.cpp | 9 --------- - 1 file changed, 9 deletions(-) - -diff --git a/src/libcamera/source_paths.cpp b/src/libcamera/source_paths.cpp -index 1af5386a..3fc7d044 100644 ---- a/src/libcamera/source_paths.cpp -+++ b/src/libcamera/source_paths.cpp -@@ -39,15 +39,6 @@ namespace { - */ - bool isLibcameraInstalled() - { -- /* -- * DT_RUNPATH (DT_RPATH when the linker uses old dtags) is removed on -- * install. -- */ -- for (const ElfW(Dyn) *dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn) { -- if (dyn->d_tag == DT_RUNPATH || dyn->d_tag == DT_RPATH) -- return false; -- } -- - return true; - } - --- -2.44.1 -