All checks were successful
Check flake / build-amd64-linux (push) Successful in 4m20s
119 lines
2.8 KiB
Nix
119 lines
2.8 KiB
Nix
{
|
|
inputs,
|
|
config,
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
{
|
|
imports = [
|
|
inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
|
./hardware-configuration.nix
|
|
../server.nix
|
|
];
|
|
|
|
nixpkgs.hostPlatform = "aarch64-linux";
|
|
|
|
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=="rpivid-*", GROUP="video", MODE="0660"
|
|
KERNEL=="vcsm-cma", GROUP="video", MODE="0660"
|
|
SUBSYSTEM=="dma_heap", GROUP="video", MODE="0660"
|
|
'';
|
|
|
|
nixpkgs.overlays = [
|
|
(import ./../../overlays/libcamera.nix)
|
|
];
|
|
|
|
networking = {
|
|
hostId = "731d1660";
|
|
firewall = {
|
|
enable = true;
|
|
allowedTCPPorts = [ 8080 ];
|
|
allowedUDPPorts = [ 8080 ];
|
|
};
|
|
};
|
|
|
|
systemd.services.ustreamer = {
|
|
enable = true;
|
|
description = "uStreamer service";
|
|
unitConfig = {
|
|
Type = "simple";
|
|
ConditionPathExists = "/sys/bus/i2c/drivers/imx708/10-001a/video4linux";
|
|
};
|
|
serviceConfig = {
|
|
ExecStart = ''
|
|
${pkgs.libcamera}/bin/libcamerify ${pkgs.unstable.ustreamer}/bin/ustreamer \
|
|
--host=0.0.0.0 \
|
|
--resolution=4608x2592
|
|
'';
|
|
DynamicUser = "yes";
|
|
SupplementaryGroups = [ "video" ];
|
|
Restart = "always";
|
|
RestartSec = 10;
|
|
};
|
|
wantedBy = [ "network-online.target" ];
|
|
confinement.mode = "chroot-only";
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
camera-streamer
|
|
git
|
|
neovim
|
|
libcamera
|
|
libraspberrypi
|
|
raspberrypi-eeprom
|
|
v4l-utils
|
|
unstable.ustreamer
|
|
];
|
|
|
|
system.stateVersion = "24.05";
|
|
}
|