# https://citizen428.net/blog/installing-nixos-raspberry-pi-3/ # https://faint.day/blog/raspberry-pi-3-hardware-accelerated-video-playback/ # https://github.com/jc-kynesim/rpi-ffmpeg/tree/dev/7.1/rpi_import_2 { config, lib, pkgs, modulesPath, ... }: { imports = [ #"${modulesPath}/installer/sd-card/sd-image.nix" ]; users.users.naunet = { isNormalUser = true; uid = 1000; extraGroups = [ "wheel" "input" "audio" "video" "render" "disk" "cdrom" ]; }; security.sudo.extraRules = [ { users = [ "naunet" ]; commands = [ { command = "ALL"; options = [ "NOPASSWD" ]; } ]; } ]; nix = { settings = { experimental-features = [ "nix-command" "flakes" ]; system-features = [ "big-parallel" ]; auto-optimise-store = true; download-buffer-size = 134217728; trusted-users = [ "naunet" ]; }; gc.automatic = false; optimise.automatic = true; }; fileSystems."/" = { device = "/dev/disk/by-label/NIXOS_SD"; fsType = "ext4"; options = [ "noatime" ]; }; # https://forums.gentoo.org/viewtopic-t-1101170-start-0.html nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; boot.initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" "bcm2835_dma" "i2c_bcm2835" "reset-raspberrypi" ]; boot.extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; boot.kernelModules = [ "v4l2loopback" ]; boot.kernelParams = [ "mitigations=off" "file_caps=1" ]; boot.blacklistedKernelModules = [ "snd_bcm2835" ]; hardware.enableRedistributableFirmware = true; hardware.graphics = { enable = true; }; console = { font = "Lat2-Terminus16"; keyMap = "us"; useXkbConfig = false; }; time.timeZone = "America/New_York"; i18n.defaultLocale = "en_US.UTF-8"; i18n.supportedLocales = [ "C.UTF-8/UTF-8" "${config.i18n.defaultLocale}/UTF-8" ]; i18n.glibcLocales = pkgs.glibcLocales.override { allLocales = false; locales = [ "C.UTF-8/UTF-8" "${config.i18n.defaultLocale}/UTF-8" ]; }; networking = { hostName = "cmsb-001"; wireless = { enable = true; fallbackToWPA2 = false; networks."Verizon_TMKS9N" = { pskRaw = "794b2c76b39a7f83d08e028e20fb980cef890424ae0b69acdf2e37c590a9fb6a"; authProtocols = [ "WPA-PSK" "WPA-EAP" "FT-PSK" "FT-EAP" ]; }; userControlled.enable = true; }; firewall = { enable = true; allowedTCPPorts = []; }; }; services.openssh.enable = true; users.defaultUserShell = pkgs.bashInteractive; environment.systemPackages = with pkgs; [ libraspberrypi dtc alsa-utils kitty.terminfo htop # https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/full.nix#L12 ((vim-full.override { features = "small"; guiSupport = "off"; luaSupport = false; pythonSupport = false; rubySupport = false; cscopeSupport = false; netbeansSupport = false; ximSupport = false; ftNixSupport = false; sodiumSupport = false; }).customize { name = "vi"; vimrcConfig = { customRC = ""; }; }) mesa-demos vulkan-tools v4l-utils cage nfs-utils mpv ]; security.wrappers = { cage = { owner = "root"; group = "root"; source = "${pkgs.cage}/bin/cage"; setuid = true; }; "mount.nfs" = { owner = "root"; group = "root"; source = "${pkgs.nfs-utils.out}/bin/mount.nfs"; setuid = true; }; }; # services.cage = { # enable = true; # user = "naunet"; # environment = { # WLR_LIBINPUT_NO_DEVICES = "1"; # }; # program = "${pkgs.camu}/bin/cmv"; # }; # systemd.services."cage-tty1".serviceConfig.StandardOutput = lib.mkForce "journal+console"; # systemd.services."cage-tty1".wantedBy = []; # https://pablo.tools/blog/computers/nixos-generate-raspberry-images/ #sdImage = { # populateFirmwareCommands = let # configTxt = pkgs.writeText "config.txt" '' # ''; # in '' # (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/) # cp ${configTxt} firmware/config.txt # cp ${pkgs.ubootRaspberryPi3_64bit}/u-boot.bin firmware/u-boot-rpi3.bin # ''; # populateRootCommands = '' # mkdir -p ./files/boot # ${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot # ''; #}; # https://retropie.org.uk/docs/Overclocking/ # BOOT/config.txt (changes) # gpu_mem=128 # total_mem=1024 # arm_freq=1250 # gpu_freq=500 # core_freq=450 # sdram_freq=500 # sdram_schmoo=0x02000020 # over_voltage=2 # over_voltage_sdram=2 # https://github.com/NixOS/nixos-hardware/issues/631 hardware.deviceTree = { enable = true; filter = "bcm2837-rpi-3-b*.dtb"; overlays = [ # brcm,bcm2835 -> brcm,bcm2837 { # https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.6.y/arch/arm/boot/dts/overlays/justboom-digi-overlay.dts name = "justboom-digi"; dtsFile = ./justboom-digi-overlay.dts; } { # https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.6.y/arch/arm/boot/dts/overlays/cma-overlay.dts name = "cma-overlay"; dtsFile = ./cma-overlay.dts; } #{ # https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.6.y/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts # name = "vc4-fkms-v3d"; # # remove '#include "cma-overlay.dts"' # dtsFile = ./vc4-fkms-v3d-overlay.dts; #} { # https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.6.y/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts name = "vc4-kms-v3d"; # remove '#include "cma-overlay.dts"' dtsFile = ./vc4-kms-v3d-overlay.dts; } { # https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.6.y/arch/arm/boot/dts/overlays/disable-bt-overlay.dts name = "disable-bt"; dtsFile = ./disable-bt-overlay.dts; } ]; }; system.stateVersion = "25.05"; }