parent
5d960b51c6
commit
3dfc9cd826
@ -0,0 +1,64 @@ |
||||
|
||||
{ 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 <command>uvcvideo</command> dynamic controls. |
||||
|
||||
Note that enabling this brings the <command>uvcdynctrl</command> tool |
||||
into your environement and register all dynamic controls from |
||||
specified <command>packages</command> to the <command>uvcvideo</command> driver. |
||||
''; |
||||
}; |
||||
|
||||
packages = mkOption { |
||||
type = types.listOf types.path; |
||||
example = literalExample "[ pkgs.tiscamera ]"; |
||||
description = '' |
||||
List of packages containing <command>uvcvideo</command> dynamic controls |
||||
rules. All files found in |
||||
<filename><replaceable>pkg</replaceable>/share/uvcdynctrl/data</filename> |
||||
will be included. |
||||
|
||||
Note that these will serve as input to the <command>libwebcam</command> |
||||
package which through its own <command>udev</command> rule will register |
||||
the dynamic controls from specified packages to the <command>uvcvideo</command> |
||||
driver. |
||||
''; |
||||
apply = map getBin; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.dynctrl.enable { |
||||
|
||||
services.udev.packages = [ |
||||
(uvcdynctrl-udev-rules cfg.dynctrl.packages) |
||||
]; |
||||
|
||||
environment.systemPackages = [ |
||||
pkgs.libwebcam |
||||
]; |
||||
|
||||
}; |
||||
} |
@ -0,0 +1,46 @@ |
||||
{ lib |
||||
, stdenv |
||||
, buildEnv |
||||
, libwebcam |
||||
, makeWrapper |
||||
, runCommand |
||||
, drivers ? [] |
||||
, udevDebug ? false |
||||
}: |
||||
|
||||
let |
||||
version = "0.0.0"; |
||||
|
||||
dataPath = buildEnv { |
||||
name = "uvcdynctrl-with-drivers-data-path"; |
||||
paths = drivers ++ [ libwebcam ]; |
||||
pathsToLink = [ "/share/uvcdynctrl/data" ]; |
||||
ignoreCollisions = false; |
||||
}; |
||||
|
||||
dataDir = "${dataPath}/share/uvcdynctrl/data"; |
||||
udevDebugVarValue = if udevDebug then "1" else "0"; |
||||
in |
||||
|
||||
runCommand "uvcdynctrl-udev-rules-${version}" |
||||
{ |
||||
inherit dataPath; |
||||
buildInputs = [ |
||||
makeWrapper |
||||
libwebcam |
||||
]; |
||||
dontPatchELF = true; |
||||
dontStrip = true; |
||||
} |
||||
'' |
||||
mkdir -p "$out/lib/udev" |
||||
makeWrapper "${libwebcam}/lib/udev/uvcdynctrl" "$out/lib/udev/uvcdynctrl" \ |
||||
--set NIX_UVCDYNCTRL_DATA_DIR "${dataDir}" \ |
||||
--set NIX_UVCDYNCTRL_UDEV_DEBUG "${udevDebugVarValue}" |
||||
|
||||
mkdir -p "$out/lib/udev/rules.d" |
||||
cat "${libwebcam}/lib/udev/rules.d/80-uvcdynctrl.rules" | \ |
||||
sed -r "s#RUN\+\=\"([^\"]+)\"#RUN\+\=\"$out/lib/udev/uvcdynctrl\"#g" > \ |
||||
"$out/lib/udev/rules.d/80-uvcdynctrl.rules" |
||||
'' |
||||
|
Loading…
Reference in new issue