diff --git a/flake.lock b/flake.lock index 825f79e..b65ecbe 100644 --- a/flake.lock +++ b/flake.lock @@ -41,6 +41,56 @@ "type": "github" } }, + "libcamera-src": { + "flake": false, + "locked": { + "lastModified": 1725630279, + "narHash": "sha256-KH30jmHfxXq4j2CL7kv18DYECJRp9ECuWNPnqPZajPA=", + "owner": "raspberrypi", + "repo": "libcamera", + "rev": "69a894c4adad524d3063dd027f5c4774485cf9db", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "repo": "libcamera", + "rev": "69a894c4adad524d3063dd027f5c4774485cf9db", + "type": "github" + } + }, + "libpisp-src": { + "flake": false, + "locked": { + "lastModified": 1724944683, + "narHash": "sha256-Fo2UJmQHS855YSSKKmGrsQnJzXog1cdpkIOO72yYAM4=", + "owner": "raspberrypi", + "repo": "libpisp", + "rev": "28196ed6edcfeda88d23cc5f213d51aa6fa17bb3", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "v1.0.7", + "repo": "libpisp", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1756750488, + "narHash": "sha256-e4ZAu2sjOtGpvbdS5zo+Va5FUUkAnizl4wb0/JlIL2I=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "47eb4856cfd01eaeaa7bb5944a0f27db8fb9b94a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1756542300, @@ -93,13 +143,164 @@ "type": "github" } }, + "raspberry-pi-nix": { + "inputs": { + "libcamera-src": "libcamera-src", + "libpisp-src": "libpisp-src", + "nixpkgs": [ + "nixpkgs" + ], + "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_12_17-src": "rpi-linux-6_12_17-src", + "rpi-linux-6_6_78-src": "rpi-linux-6_6_78-src", + "rpi-linux-stable-src": "rpi-linux-stable-src", + "rpicam-apps-src": "rpicam-apps-src" + }, + "locked": { + "lastModified": 1742223591, + "narHash": "sha256-ZNTz8r5jlJ1jvpqf5+aUYgpnYJSVX0iP14doOc1Hm0E=", + "owner": "nix-community", + "repo": "raspberry-pi-nix", + "rev": "3e8100d5e976a6a2be363015cb33463af9ef441a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "raspberry-pi-nix", + "type": "github" + } + }, "root": { "inputs": { "disko": "disko", "home-manager": "home-manager", + "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", - "photocatalog": "photocatalog" + "photocatalog": "photocatalog", + "raspberry-pi-nix": "raspberry-pi-nix" + } + }, + "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": 1723266537, + "narHash": "sha256-T7eTKXqY9cxEMdab8Snda4CEOrEihy5uOhA6Fy+Mhnw=", + "owner": "RPi-Distro", + "repo": "firmware-nonfree", + "rev": "4b356e134e8333d073bd3802d767a825adec3807", + "type": "github" + }, + "original": { + "owner": "RPi-Distro", + "ref": "bookworm", + "repo": "firmware-nonfree", + "type": "github" + } + }, + "rpi-firmware-src": { + "flake": false, + "locked": { + "lastModified": 1728405098, + "narHash": "sha256-4gnK0KbqFnjBmWia9Jt2gveVWftmHrprpwBqYVqE/k0=", + "owner": "raspberrypi", + "repo": "firmware", + "rev": "7bbb5f80d20a2335066a8781459c9f33e5eebc64", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "1.20241008", + "repo": "firmware", + "type": "github" + } + }, + "rpi-linux-6_12_17-src": { + "flake": false, + "locked": { + "lastModified": 1740765145, + "narHash": "sha256-hoCsGc4+RC/2LmxDtswLBL5ZhWlw4vSiL4Vkl39r2MU=", + "owner": "raspberrypi", + "repo": "linux", + "rev": "5985ce32e511f4e8279a841a1b06a8c7d972b386", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "rpi-6.12.y", + "repo": "linux", + "type": "github" + } + }, + "rpi-linux-6_6_78-src": { + "flake": false, + "locked": { + "lastModified": 1740503700, + "narHash": "sha256-Y8+ot4Yi3UKwlZK3ap15rZZ16VZDvmeFkD46+6Ku7bE=", + "owner": "raspberrypi", + "repo": "linux", + "rev": "2e071057fded90e789c0101498e45a1778be93fe", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "rpi-6.6.y", + "repo": "linux", + "type": "github" + } + }, + "rpi-linux-stable-src": { + "flake": false, + "locked": { + "lastModified": 1728403745, + "narHash": "sha256-phCxkuO+jUGZkfzSrBq6yErQeO2Td+inIGHxctXbD5U=", + "owner": "raspberrypi", + "repo": "linux", + "rev": "5aeecea9f4a45248bcf564dec924965e066a7bfd", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "stable_20241008", + "repo": "linux", + "type": "github" + } + }, + "rpicam-apps-src": { + "flake": false, + "locked": { + "lastModified": 1727515047, + "narHash": "sha256-qCYGrcibOeGztxf+sd44lD6VAOGoUNwRqZDdAmcTa/U=", + "owner": "raspberrypi", + "repo": "rpicam-apps", + "rev": "a8ccf9f3cd9df49875dfb834a2b490d41d226031", + "type": "github" + }, + "original": { + "owner": "raspberrypi", + "ref": "v1.5.2", + "repo": "rpicam-apps", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index d3712aa..85ab7e2 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,13 @@ url = "github:nix-community/disko/latest"; inputs.nixpkgs.follows = "nixpkgs"; }; + raspberry-pi-nix = { + url = "github:nix-community/raspberry-pi-nix/master"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-hardware = { + url = "github:NixOS/nixos-hardware/master"; + }; }; outputs = @@ -103,6 +110,7 @@ pkgsStable = pkgsStableSettings host.system; hosts = hosts; ip = host.ip; + quirks = (quirks: (import ./quirks { inherit quirks; })); }; pkgs = pkgsSettings host.system; modules = commonModules ++ [ diff --git a/hosts/fenixbook/default.nix b/hosts/fenixbook/default.nix index cd5fe46..5348067 100644 --- a/hosts/fenixbook/default.nix +++ b/hosts/fenixbook/default.nix @@ -2,6 +2,8 @@ config, lib, pkgs, + inputs, + quirks, ... }: let @@ -10,13 +12,13 @@ let ]; in { - imports = ( - import ../../quirks { - quirks = [ - "development" - ]; - } - ); + imports = + (quirks [ + "development" + ]) + ++ [ + inputs.nixos-hardware.nixosModules.lenovo-thinkpad-p1 + ]; home-manager = { users = lib.genAttrs users (user: import ./${user}.nix); diff --git a/hosts/fenixpc/default.nix b/hosts/fenixpc/default.nix index 6f04f99..d07ce51 100644 --- a/hosts/fenixpc/default.nix +++ b/hosts/fenixpc/default.nix @@ -3,6 +3,7 @@ lib, pkgs, pkgsStable, + quirks, ... }: let @@ -12,13 +13,11 @@ let in { imports = ( - import ../../quirks { - quirks = [ - "development" - "steam" - "32bit" - ]; - } + quirks [ + "development" + "steam" + "32bit" + ] ); home-manager = { diff --git a/quirks/rpi5.nix b/quirks/rpi5.nix new file mode 100644 index 0000000..54ec4ae --- /dev/null +++ b/quirks/rpi5.nix @@ -0,0 +1,124 @@ +{ + lib, + pkgs, + inputs, + ... +}: +{ + imports = [ + inputs.raspberry-pi-nix.nixosModules.raspberry-pi + inputs.nixos-hardware.nixosModules.raspberry-pi-5 + ]; + + boot.loader.systemd-boot.enable = lib.mkForce false; + boot = { + kernelPackages = lib.mkForce pkgs.linuxKernel.packages.linux_rpi4; + + initrd.kernelModules = [ + "zstd" + "btrfs" + "nvme" + ]; + tmp = { + tmpfsSize = lib.mkForce "25%"; + }; + }; + + zramSwap = { + enable = true; + memoryPercent = 50; + algorithm = "zstd"; + }; + + powerManagement.cpuFreqGovernor = "ondemand"; + + raspberry-pi-nix = { + board = "bcm2712"; + # kernel-version = "v6_10_12"; + libcamera-overlay = { + enable = false; + }; + uboot = { + enable = false; + }; + }; + + hardware = { + raspberry-pi = { + config = { + all = { + base-dt-params = { + BOOT_UART = { + enable = false; + value = 1; + }; + uart_2ndstage = { + enable = false; + value = 1; + }; + audio = { + enable = true; + value = "off"; + }; + sd_poll_once = { + enable = true; + }; + + # NVME disk access + pciex1 = { + enable = true; + }; + pciex1_gen = { + enable = true; + value = 3; + }; + nvme = { + enable = true; + }; + + }; + dt-overlays = { + vc4-kms-v3d-pi5 = { + enable = true; + params = { }; + }; + }; + options = { + hdmi_blanking = { + enable = true; + value = 1; + }; + disable_overscan = { + enable = true; + value = 1; + }; + gpu_mem_256 = { + enable = true; + value = 76; + }; + gpu_mem_512 = { + enable = true; + value = 76; + }; + gpu_mem_1024 = { + enable = true; + value = 76; + }; + disable_splash = { + enable = true; + value = 1; + }; + temp_limit = { + enable = true; + value = 75; + }; + initial_turbo = { + enable = true; + value = 20; + }; + }; + }; + }; + }; + }; +}