diff --git a/AGENTS.md b/AGENTS.md index ae57b3d..e5917ae 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -367,7 +367,9 @@ modules/profiles/ │ ├── desktop/ │ └── vm/ ├── workload/ +│ ├── camera/ │ ├── development/ +│ ├── game/ │ ├── personal/ │ ├── server/ │ └── remote-access/ @@ -602,6 +604,7 @@ A host registry may use a specification like this: "security.secrets" "security.secure-boot" "security.tpm-storage" + "workload.camera" "workload.development" "workload.personal" ]; diff --git a/hosts/default.nix b/hosts/default.nix index 0a4e294..4d482d6 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -85,6 +85,7 @@ "workload.development" "workload.game" "workload.personal" + "workload.camera" ]; }; diff --git a/modules/profiles/README.md b/modules/profiles/README.md index 62fedb2..91140a3 100644 --- a/modules/profiles/README.md +++ b/modules/profiles/README.md @@ -40,6 +40,7 @@ required on every supported host. | `workload.game` | NixOS, macOS | | `workload.personal` | NixOS, macOS with Home Manager | | `workload.remote-access` | NixOS, macOS | +| `workload.camera` | NixOS | | `workload.server` | NixOS, macOS with Home Manager | | `networking.tailscale-client` | NixOS, macOS | | `networking.tailscale-subnet-router` | NixOS | diff --git a/modules/profiles/workload/camera/meta.nix b/modules/profiles/workload/camera/meta.nix new file mode 100644 index 0000000..62a3f98 --- /dev/null +++ b/modules/profiles/workload/camera/meta.nix @@ -0,0 +1,5 @@ +{ + description = "Camera capture and virtual camera tools"; + + includes = [ "systems.boot.v4l2loopback" ]; +} diff --git a/modules/profiles/workload/camera/nixos.nix b/modules/profiles/workload/camera/nixos.nix new file mode 100644 index 0000000..e8f3005 --- /dev/null +++ b/modules/profiles/workload/camera/nixos.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + gphoto2 + ffmpeg + v4l-utils + ]; +} diff --git a/modules/systems/boot/v4l2loopback/nixos.nix b/modules/systems/boot/v4l2loopback/nixos.nix new file mode 100644 index 0000000..ecfc601 --- /dev/null +++ b/modules/systems/boot/v4l2loopback/nixos.nix @@ -0,0 +1,10 @@ +{ config, ... }: +{ + boot = { + extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; + kernelModules = [ "v4l2loopback" ]; + extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=42 card_label="LUMIX S9" exclusive_caps=1 + ''; + }; +} diff --git a/modules/systems/nix/common.nix b/modules/systems/nix/common.nix index e030c26..885b83a 100644 --- a/modules/systems/nix/common.nix +++ b/modules/systems/nix/common.nix @@ -18,6 +18,7 @@ "https://ghostty.cachix.org" "https://cache.numtide.com" "https://codex-desktop-linux.cachix.org" + "https://cuda-maintainers.cachix.org" ]; extra-trusted-public-keys = [ @@ -29,6 +30,7 @@ "ghostty.cachix.org-1:QB389yTa6gTyneehvqG58y0WnHjQOqgnA+wBnpWWxns=" "niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g=" "codex-desktop-linux.cachix.org-1:nX/xy6AdK9hQE24A8ALGjkCKj2ObFmcnemiL5Cid4nk=" + "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" ]; }; }