summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--derivations/blackmagic-desktop-video-gui/generic.nix159
-rw-r--r--modules/hosts/optiplex/configuration.nix4
-rw-r--r--modules/root/decklink.nix24
-rw-r--r--modules/root/default.nix2
-rw-r--r--modules/root/software/default.nix1
-rw-r--r--modules/root/software/desktop.nix3
-rw-r--r--modules/root/software/utilities.nix1
7 files changed, 194 insertions, 0 deletions
diff --git a/derivations/blackmagic-desktop-video-gui/generic.nix b/derivations/blackmagic-desktop-video-gui/generic.nix
new file mode 100644
index 0000000..5eb36e9
--- /dev/null
+++ b/derivations/blackmagic-desktop-video-gui/generic.nix
@@ -0,0 +1,159 @@
+{
+ stdenv,
+ cacert,
+ curl,
+ runCommandLocal,
+ lib,
+ autoPatchelfHook,
+ libcxx,
+ libGL,
+ gcc,
+
+ optionals,
+ optionalString,
+
+ desktopVideoFull ? false,
+ desktopVideoUpdater ? desktopVideoFull,
+
+ dbus ? desktopVideoFull,
+ glib ? desktopVideoFull,
+ fontconfig ? desktopVideoFull,
+ freetype ? desktopVideoFull,
+ libXrender ? desktopVideoFull,
+ libICE ? desktopVideoFull,
+ libusb1 ? desktopVideoFull,
+ qt5 ? desktopVideoFull,
+ wrapQtAppsHook ? desktopVideoFull,
+}:
+stdenv.mkDerivation (finalAttrs: {
+ pname = "blackmagic-desktop-video";
+ version = "14.4.1a4";
+
+ buildInputs = [
+ autoPatchelfHook
+ libcxx
+ libGL
+ gcc.cc.lib
+ ] ++ optionals desktopVideoFull [
+ dbus
+ glib
+ fontconfig
+ freetype
+ libXrender
+ libICE
+ libusb1
+ qt5.qtbase
+ ];
+ nativeBuildInputs = lib.mkIf desktopVideoFull [ wrapQtAppsHook ];
+
+ # yes, the below download function is an absolute mess.
+ # blame blackmagicdesign.
+ src =
+ let
+ # from the URL the download page where you click the "only download" button is at
+ REFERID = "5baba0af3eda41ee9cd0ec7349660d74";
+ # from the URL that the POST happens to, see browser console
+ DOWNLOADID = "bc31044728f146859c6d9e0ccef868d8";
+ in
+ runCommandLocal "${finalAttrs.pname}-${lib.versions.majorMinor finalAttrs.version}-src.tar.gz"
+ {
+ outputHashMode = "recursive";
+ outputHashAlgo = "sha256";
+ outputHash = "sha256-qh305s7u1yurv58TZnlONgDmWT4RXG3fXTfun382HAs=";
+
+ impureEnvVars = lib.fetchers.proxyImpureEnvVars;
+
+ nativeBuildInputs = [ curl ];
+
+ # ENV VARS
+ SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+ inherit REFERID;
+ SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}";
+
+ USERAGENT = builtins.concatStringsSep " " [
+ "User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})"
+ "AppleWebKit/537.36 (KHTML, like Gecko)"
+ "Chrome/77.0.3865.75"
+ "Safari/537.36"
+ ];
+
+ REQJSON = builtins.toJSON {
+ "country" = "nl";
+ "downloadOnly" = true;
+ "platform" = "Linux";
+ "policy" = true;
+ };
+ }
+ ''
+ RESOLVEURL=$(curl \
+ -s \
+ -H "$USERAGENT" \
+ -H 'Content-Type: application/json;charset=UTF-8' \
+ -H "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \
+ --data-ascii "$REQJSON" \
+ --compressed \
+ "$SITEURL")
+ curl \
+ --retry 3 --retry-delay 3 \
+ --compressed \
+ "$RESOLVEURL" \
+ > $out
+ '';
+
+ postUnpack =
+ let
+ arch = stdenv.hostPlatform.uname.processor;
+ in
+ ''
+ tar xf Blackmagic_Desktop_Video_Linux_${lib.head (lib.splitString "a" finalAttrs.version)}/other/${arch}/desktopvideo-${finalAttrs.version}-${arch}.tar.gz
+ unpacked=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}-${stdenv.hostPlatform.uname.processor}
+ '';
+
+ installPhase = ''
+ 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/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/
+ 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
+ cp -r $unpacked/usr/lib/blackmagic/DesktopVideo/Firmware $out/lib/blackmagic/DesktopVideo/Firmware
+ cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoUpdateTool $out/bin/
+ ''
+ + optionalString desktopVideoFull ''
+ mkdir -p $out/{share/man,share/icons,share/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 -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/
+ ''
+ + ''
+ runHook postInstall
+ '';
+
+ # need to tell the DesktopVideoHelper where to find its own library
+ appendRunpaths = [ "${placeholder "out"}/lib" ];
+
+ meta = with lib; {
+ homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback";
+ maintainers = [ maintainers.naxdy ];
+ license = licenses.unfree;
+ description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications, only the helper required to make the driver work";
+ platforms = platforms.linux;
+ };
+})
diff --git a/modules/hosts/optiplex/configuration.nix b/modules/hosts/optiplex/configuration.nix
index 16ba475..625d37a 100644
--- a/modules/hosts/optiplex/configuration.nix
+++ b/modules/hosts/optiplex/configuration.nix
@@ -13,6 +13,7 @@
graphics.enable = true;
office.enable = true;
utilities.enable = true;
+ video.enable = true;
};
software.development = {
docker.enable = true;
@@ -31,6 +32,9 @@
# Disable wifi
wifi.enable = false;
+ # Enable decklink
+ decklink.enable = true;
+
# Use nvidia driver
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
diff --git a/modules/root/decklink.nix b/modules/root/decklink.nix
new file mode 100644
index 0000000..6fd6395
--- /dev/null
+++ b/modules/root/decklink.nix
@@ -0,0 +1,24 @@
+{ lib, pkgs, ... }: {
+ options = {
+ decklink.enable = lib.mkEnableOption "enables decklink support";
+ };
+
+ config = {
+ # Kernel modules
+ hardware.decklink.enable = true;
+
+ # DesktopVideoHelper
+ environment.systemPackages = with pkgs; [ pkgs.blackmagic-desktop-video-gui ];
+
+ # 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: {
+ blackmagic-desktop-video-gui = (pkgs.callPackage ./software/derivations/blackmagic-desktop-video-gui/generic.nix {}).override({
+ desktopVideoFull = true;
+ });
+ })
+ ];
+ };
+}
diff --git a/modules/root/default.nix b/modules/root/default.nix
index e24e4b0..1006d7d 100644
--- a/modules/root/default.nix
+++ b/modules/root/default.nix
@@ -4,6 +4,7 @@
./autologin.nix
./bluetooth.nix
./bootloader.nix
+ ./decklink.nix
./doas.nix
./fonts.nix
./home-manager.nix
@@ -28,6 +29,7 @@
autologin.enable = lib.mkDefault true;
avahi.enable = lib.mkDefault true;
bluetooth.enable = lib.mkDefault false;
+ decklink.enable = lib.mkDefault false;
doas.enable = lib.mkDefault true;
fonts.enable = lib.mkDefault true;
nas = {
diff --git a/modules/root/software/default.nix b/modules/root/software/default.nix
index 5f6494d..7696fd6 100644
--- a/modules/root/software/default.nix
+++ b/modules/root/software/default.nix
@@ -20,6 +20,7 @@
graphics.enable = lib.mkDefault false;
office.enable = lib.mkDefault false;
utilities.enable = lib.mkDefault false;
+ video.enable = lib.mkDefault false;
};
software.development = {
diff --git a/modules/root/software/desktop.nix b/modules/root/software/desktop.nix
index b8cd1e7..ddbf784 100644
--- a/modules/root/software/desktop.nix
+++ b/modules/root/software/desktop.nix
@@ -16,6 +16,7 @@
graphics.enable = lib.mkEnableOption "enables graphic design apps";
office.enable = lib.mkEnableOption "enables office apps";
utilities.enable = lib.mkEnableOption "enables miscellaneous utility apps";
+ video.enable = lib.mkEnableOption "enables video apps";
};
};
@@ -63,6 +64,8 @@
qbittorrent
qdirstat
remmina
+ ] ++ pkgs.lib.optionals config.software.desktop.video.enable [
+ obs-studio
];
programs.localsend.enable = config.software.desktop.utilities.enable; # Installs & opens firewall
diff --git a/modules/root/software/utilities.nix b/modules/root/software/utilities.nix
index 79285a1..bbe2539 100644
--- a/modules/root/software/utilities.nix
+++ b/modules/root/software/utilities.nix
@@ -15,6 +15,7 @@
openssl
p7zip
pavolctld
+ pciutils
powertop
pv
rsync