nix-config/hosts/skycam/default.nix
Jordan Holt 6dcd2b0139
All checks were successful
Check flake / build-amd64-linux (push) Successful in 2m36s
Add device tree overlay for skycam
2024-08-03 22:49:29 +01:00

103 lines
2.4 KiB
Nix

{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
../server.nix
];
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
wireless-regdb
];
};
services.udev.extraRules = ''
SUBSYSTEM="dma_heap", GROUP="video", MODE="0600"
'';
networking = {
hostId = "731d1660";
firewall = {
enable = true;
allowedTCPPorts = [ 8080 ];
allowedUDPPorts = [ 8080 ];
};
};
systemd.services.ustreamer = {
enable = true;
description = "uStreamer service";
unitConfig = {
Type = "simple";
};
serviceConfig = {
ExecStartPre = ''${pkgs.v4l-utils}/bin/v4l2-ctl \
--device=/dev/video0 \
--fix-edid-checksums \
--info-edid
'';
ExecStart = ''${pkgs.unstable.ustreamer}/bin/ustreamer \
--device=/dev/video0 \
--resolution=1280x720 \
--format=uyvy \
--encoder=m2m-image \
--workers=3 \
--persistent \
--dv-timings \
--drop-same-frames=30 \
--host=0.0.0.0 \
--port=8080
'';
};
wantedBy = [ "network-online.target" ];
confinement.mode = "chroot-only";
};
environment.systemPackages = with pkgs; [
git
neovim
libcamera
libraspberrypi
raspberrypi-eeprom
v4l-utils
unstable.ustreamer
];
system.stateVersion = "24.05";
}