diff options
author | Tim Keller <tjk@tjkeller.xyz> | 2025-07-11 11:54:39 -0500 |
---|---|---|
committer | Tim Keller <tjk@tjkeller.xyz> | 2025-07-11 11:54:39 -0500 |
commit | 470531af44ebb4b7ca1194df0c0f8cc17794b9f1 (patch) | |
tree | 96f5f590caeb4f3f6c28be19a8a2fde91ecba0ff | |
parent | 635edfc0ce1ae0504f2877f846211a4fdfa6d327 (diff) | |
download | nixos-470531af44ebb4b7ca1194df0c0f8cc17794b9f1.tar.xz nixos-470531af44ebb4b7ca1194df0c0f8cc17794b9f1.zip |
-rw-r--r-- | derivations/blackmagic-desktop-video-gui/generic.nix | 71 | ||||
-rw-r--r-- | modules/root/decklink.nix | 38 |
2 files changed, 69 insertions, 40 deletions
diff --git a/derivations/blackmagic-desktop-video-gui/generic.nix b/derivations/blackmagic-desktop-video-gui/generic.nix index 5eb36e9..b99c550 100644 --- a/derivations/blackmagic-desktop-video-gui/generic.nix +++ b/derivations/blackmagic-desktop-video-gui/generic.nix @@ -9,22 +9,23 @@ libGL, gcc, - optionals, - optionalString, - desktopVideoFull ? false, + + # whether to include firmware update tool desktopVideoUpdater ? desktopVideoFull, + libusb1 ? desktopVideoUpdater, - dbus ? desktopVideoFull, - glib ? desktopVideoFull, - fontconfig ? desktopVideoFull, - freetype ? desktopVideoFull, - libXrender ? desktopVideoFull, - libICE ? desktopVideoFull, - libusb1 ? desktopVideoFull, - qt5 ? desktopVideoFull, - wrapQtAppsHook ? desktopVideoFull, + # whether to include gui applications as well + desktopVideoGUI ? desktopVideoFull, + dbus ? desktopVideoGUI, + fontconfig ? desktopVideoGUI, + freetype ? desktopVideoGUI, + glib ? desktopVideoGUI, + libICE ? desktopVideoGUI, + libXrender ? desktopVideoGUI, + qt5 ? desktopVideoGUI, }: + stdenv.mkDerivation (finalAttrs: { pname = "blackmagic-desktop-video"; version = "14.4.1a4"; @@ -34,17 +35,18 @@ stdenv.mkDerivation (finalAttrs: { libcxx libGL gcc.cc.lib - ] ++ optionals desktopVideoFull [ + ] ++ lib.optionals desktopVideoUpdater [ + libusb1 + ] ++ lib.optionals desktopVideoGUI [ dbus - glib fontconfig freetype - libXrender + glib libICE - libusb1 + libXrender qt5.qtbase ]; - nativeBuildInputs = lib.mkIf desktopVideoFull [ wrapQtAppsHook ]; + nativeBuildInputs = [] ++ lib.optionals desktopVideoGUI [ qt5.wrapQtAppsHook ]; # yes, the below download function is an absolute mess. # blame blackmagicdesign. @@ -114,33 +116,30 @@ stdenv.mkDerivation (finalAttrs: { runHook preInstall mkdir -p $out/{bin,share/doc,share/man/man1,lib/systemd/system} cp -r $unpacked/usr/share/doc/desktopvideo $out/share/doc - cp $unpacked/usr/share/man/man1/DesktopVideoHelper.1 $out/share/man/man1 + cp $unpacked/usr/share/man/man1/DesktopVideoHelper.1 $out/share/man/man1 cp $unpacked/usr/lib/*.so $out/lib cp $unpacked/usr/lib/systemd/system/DesktopVideoHelper.service $out/lib/systemd/system cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper $out/bin/ + cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoNotifier $out/bin/ substituteInPlace $out/lib/systemd/system/DesktopVideoHelper.service \ --replace-fail "/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper" "$out/bin/DesktopVideoHelper" '' - # FIXME TODO patch update tool with correct patj - + optionalString (desktopVideoUpdater || desktopVideoFull) '' - mkdir -p $out/lib/blackmagic/DesktopVideo/Firmware - cp $unpacked/usr/share/man/man1/DesktopVideoUpdateTool.1 $out/share/man/man1 + + lib.optionalString desktopVideoUpdater '' + mkdir -p $out/{lib/blackmagic/DesktopVideo/Firmware,share/icons,share/applications} + cp $unpacked/usr/share/man/man1/DesktopVideo{UpdateTool,Updater}.1 $out/share/man/man1 + cp -r $unpacked/usr/share/icons/* $out/share/icons + cp $unpacked/usr/share/applications/DesktopVideoUpdater.desktop $out/share/applications cp -r $unpacked/usr/lib/blackmagic/DesktopVideo/Firmware $out/lib/blackmagic/DesktopVideo/Firmware - cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoUpdateTool $out/bin/ + cp $unpacked/usr/lib/blackmagic/DesktopVideo/libDVUpdate.so $out/lib + cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideo{UpdateTool,Updater} $out/bin/ '' - + optionalString desktopVideoFull '' - mkdir -p $out/{share/man,share/icons,share/applications} + + lib.optionalString desktopVideoGUI '' + mkdir -p $out/share/{icons,applications} cp -r $unpacked/usr/share/doc/desktopvideo-gui $out/share/doc - # Man - cp -r $unpacked/usr/share/man/man1/{DesktopVideoUpdater,BlackmagicDesktopVideoSetup}.1 $out/share/man/man1 - # Icons + cp $unpacked/usr/share/man/man1/BlackmagicDesktopVideoSetup.1 $out/share/man/man1 cp -r $unpacked/usr/share/icons/* $out/share/icons - # Desktop files - cp $unpacked/usr/share/applications/* $out/share/applications - # Additional libs - cp $unpacked/usr/lib/blackmagic/DesktopVideo/*.so $out/lib - # Bins - #cp $unpacked/usr/lib/blackmagic/DesktopVideo/{DesktopVideo{Notifier,Updater},BlackmagicDesktopVideoSetup} $out/bin/ + cp $unpacked/usr/share/applications/BlackmagicDesktopVideoSetup.desktop $out/share/applications + cp $unpacked/usr/lib/blackmagic/DesktopVideo/BlackmagicDesktopVideoSetup $out/bin/ '' + '' runHook postInstall @@ -151,9 +150,9 @@ stdenv.mkDerivation (finalAttrs: { meta = with lib; { homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback"; - maintainers = [ maintainers.naxdy ]; + maintainers = with maintainers; [ naxdy tjkeller ]; license = licenses.unfree; - description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications, only the helper required to make the driver work"; + description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications or firmware updater by default, only the helper required to make the driver work"; platforms = platforms.linux; }; }) diff --git a/modules/root/decklink.nix b/modules/root/decklink.nix index 6fd6395..d88fbfa 100644 --- a/modules/root/decklink.nix +++ b/modules/root/decklink.nix @@ -8,17 +8,47 @@ hardware.decklink.enable = true; # DesktopVideoHelper - environment.systemPackages = with pkgs; [ pkgs.blackmagic-desktop-video-gui ]; + environment.systemPackages = with pkgs; [ blackmagic-desktop-video ]; # Enable decklinkSupport flag globally for all packages that support it (e.g. obs) nixpkgs.overlays = [ - (final: prev: { decklinkSupport = true; }) - #(import ./software/derivations/blackmagic-desktop-video-gui/default.nix) + #(final: prev: { decklinkSupport = true; }) (final: prev: { - blackmagic-desktop-video-gui = (pkgs.callPackage ./software/derivations/blackmagic-desktop-video-gui/generic.nix {}).override({ + blackmagic-desktop-video = (pkgs.callPackage ./software/derivations/blackmagic-desktop-video-gui/generic.nix {}).override({ desktopVideoFull = true; }); }) ]; + + services.udev.extraRules = '' + ACTION=="add", KERNEL=="blackmagic/dv[0-9]*", MODE="0666", RUN+="${pkgs.blackmagic-desktop-video}/bin/DesktopVideoNotifier add /dev/%k" + ACTION=="remove", KERNEL=="blackmagic/dv[0-9]*", RUN+="${pkgs.blackmagic-desktop-video}/bin/DesktopVideoNotifier del /dev/%k" + ACTION=="add", KERNEL=="blackmagic/ttydv[0-9]*", SYMLINK+="blackmagic/serial%n", MODE="0666" + + + ACTION=="add", KERNEL=="blackmagic/io[0-9]*", MODE="0666", RUN+="${pkgs.blackmagic-desktop-video}/bin/DesktopVideoNotifier add /dev/%k" + ACTION=="remove", KERNEL=="blackmagic/io[0-9]*", RUN+="${pkgs.blackmagic-desktop-video}/bin/DesktopVideoNotifier del /dev/%k" + ACTION=="add", KERNEL=="blackmagic/ttyio[0-9]*", MODE="0666" + + + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bd90", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bd97", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bd98", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bda1", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bda9", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdab", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdaa", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdbf", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdcc", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdd1", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdda", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bddb", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bddc", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdf5", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="bdff", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="be07", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="be13", MODE="0666" + SUBSYSTEM=="usb", ATTRS{idVendor}=="1edb", ATTRS{idProduct}=="be14", MODE="0666" + ''; }; } |