{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.uvcvideo;
uvcdynctrl-udev-rules = packages: pkgs.callPackage ./uvcdynctrl-udev-rules.nix {
drivers = packages;
udevDebug = false;
};
in
{
options = {
services.uvcvideo.dynctrl = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable uvcvideo dynamic controls.
Note that enabling this brings the uvcdynctrl tool
into your environment and register all dynamic controls from
specified packages to the uvcvideo driver.
'';
};
packages = mkOption {
type = types.listOf types.path;
example = literalExample "[ pkgs.tiscamera ]";
description = ''
List of packages containing uvcvideo dynamic controls
rules. All files found in
pkg/share/uvcdynctrl/data
will be included.
Note that these will serve as input to the libwebcam
package which through its own udev rule will register
the dynamic controls from specified packages to the uvcvideo
driver.
'';
apply = map getBin;
};
};
};
config = mkIf cfg.dynctrl.enable {
services.udev.packages = [
(uvcdynctrl-udev-rules cfg.dynctrl.packages)
];
environment.systemPackages = [
pkgs.libwebcam
];
};
}