mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-01 03:12:51 +00:00
134 lines
4.0 KiB
Nix
134 lines
4.0 KiB
Nix
{
|
|
lib,
|
|
python3Packages,
|
|
fetchFromGitHub,
|
|
glibc,
|
|
SDL2,
|
|
libjpeg_turbo,
|
|
alsa-lib,
|
|
libspnav,
|
|
desktop-file-utils,
|
|
gobject-introspection,
|
|
wrapGAppsHook3,
|
|
wrapGAppsHook4,
|
|
cameractrls-gtk3,
|
|
cameractrls-gtk4,
|
|
withGtk ? null,
|
|
}:
|
|
|
|
assert lib.assertOneOf "'withGtk' in cameractrls" withGtk [
|
|
3
|
|
4
|
|
null
|
|
];
|
|
|
|
let
|
|
mainExecutable =
|
|
"cameractrls" + lib.optionalString (withGtk != null) "gtk" + lib.optionalString (withGtk == 4) "4";
|
|
|
|
modulePath = "${placeholder "out"}/${python3Packages.python.sitePackages}/CameraCtrls";
|
|
|
|
installExecutables = [
|
|
"cameractrls"
|
|
"cameractrlsd"
|
|
"cameraptzgame"
|
|
"cameraptzmidi"
|
|
"cameraptzspnav"
|
|
"cameraview"
|
|
] ++ lib.optionals (withGtk != null) [ mainExecutable ];
|
|
in
|
|
python3Packages.buildPythonApplication rec {
|
|
pname = "cameractrls";
|
|
version = "0.6.7";
|
|
pyproject = false;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "soyersoyer";
|
|
repo = "cameractrls";
|
|
rev = "v${version}";
|
|
hash = "sha256-MM+Py8tHtqJWIGmGg3RaIhJa0E1zM3hXOnTOqXPuejw=";
|
|
};
|
|
|
|
postPatch = ''
|
|
substituteInPlace cameractrlsd.py \
|
|
--replace-fail "ctypes.util.find_library('c')" '"${lib.getLib glibc}/lib/libc.so.6"'
|
|
substituteInPlace cameraptzgame.py cameraview.py \
|
|
--replace-fail "ctypes.util.find_library('SDL2-2.0')" '"${lib.getLib SDL2}/lib/libSDL2-2.0.so.0"'
|
|
substituteInPlace cameraview.py \
|
|
--replace-fail "ctypes.util.find_library('turbojpeg')" '"${lib.getLib libjpeg_turbo}/lib/libturbojpeg.so"'
|
|
substituteInPlace cameraptzmidi.py \
|
|
--replace-fail "ctypes.util.find_library('asound')" '"${lib.getLib alsa-lib}/lib/libasound.so"'
|
|
substituteInPlace cameraptzspnav.py \
|
|
--replace-fail "ctypes.util.find_library('spnav')" '"${lib.getLib libspnav}/lib/libspnav.so"'
|
|
'';
|
|
|
|
nativeBuildInputs =
|
|
lib.optionals (withGtk != null) [
|
|
desktop-file-utils
|
|
gobject-introspection
|
|
]
|
|
++ lib.optionals (withGtk == 3) [ wrapGAppsHook3 ]
|
|
++ lib.optionals (withGtk == 4) [ wrapGAppsHook4 ];
|
|
|
|
# Only used when withGtk != null
|
|
dependencies = with python3Packages; [ pygobject3 ];
|
|
|
|
installPhase =
|
|
''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/bin
|
|
|
|
for file in ${lib.concatStringsSep " " installExecutables}; do
|
|
install -Dm755 $file.py -t ${modulePath}
|
|
ln -s ${modulePath}/$file.py $out/bin/$file
|
|
done
|
|
''
|
|
+ lib.optionalString (withGtk != null) ''
|
|
install -Dm644 pkg/hu.irl.cameractrls.svg -t $out/share/icons/hicolor/scalable/apps
|
|
install -Dm644 pkg/hu.irl.cameractrls.metainfo.xml -t $out/share/metainfo
|
|
mkdir -p $out/share/applications
|
|
desktop-file-install \
|
|
--dir="$out/share/applications" \
|
|
--set-key=Exec --set-value="${mainExecutable}" \
|
|
pkg/hu.irl.cameractrls.desktop
|
|
''
|
|
+ ''
|
|
runHook postInstall
|
|
'';
|
|
|
|
dontWrapGApps = true;
|
|
dontWrapPythonPrograms = true;
|
|
|
|
postFixup = lib.optionalString (withGtk != null) ''
|
|
wrapPythonPrograms
|
|
patchPythonScript ${modulePath}/${mainExecutable}.py
|
|
wrapProgram $out/bin/${mainExecutable} ''${makeWrapperArgs[@]} ''${gappsWrapperArgs[@]}
|
|
'';
|
|
|
|
passthru.tests = {
|
|
# Also build these packages in ofBorg (defined in top-level/all-packages.nix)
|
|
inherit cameractrls-gtk3 cameractrls-gtk4;
|
|
};
|
|
|
|
meta = {
|
|
description = "Camera controls for Linux";
|
|
longDescription = ''
|
|
It's a standalone Python CLI and GUI (GTK3, GTK4) and
|
|
camera Viewer (SDL) to set the camera controls in Linux.
|
|
It can set the V4L2 controls and it is extendable with
|
|
the non standard controls. Currently it has a Logitech
|
|
extension (LED mode, LED frequency, BRIO FoV, Relative
|
|
Pan/Tilt, PTZ presets), Kiyo Pro extension (HDR, HDR
|
|
mode, FoV, AF mode, Save), Preset extension (Save and
|
|
restore controls), Control Restore Daemon (to restore
|
|
presets at device connection).
|
|
'';
|
|
homepage = "https://github.com/soyersoyer/cameractrls";
|
|
license = lib.licenses.lgpl3Plus;
|
|
mainProgram = mainExecutable;
|
|
maintainers = with lib.maintainers; [ aleksana ];
|
|
platforms = lib.platforms.linux;
|
|
};
|
|
}
|