davinci-resolve: add auxiliary apps, udev rules, and desktop entries
- Copy Blackmagic's official udev rules (99-BlackmagicDevices.rules, 99-ResolveKeyboardHID.rules) from the installer into $out/lib/udev/rules.d/ so NixOS picks them up automatically via services.udev.packages - Generate 99-DavinciPanel.rules with catch-all rules for Blackmagic vendor ID 096e covering both usb and hidraw subsystems, fixing hardware panels, Speed Editor jog wheel, and Editor Keyboard - Add desktop entries and FHS wrapper scripts for the five bundled tools: Blackmagic RAW Player, Blackmagic RAW Speed Test, DaVinci Control Panels Setup, DaVinci Remote Monitor, and Fairlight Studio Utility - Install icons and MIME type definitions (.drp, .braw, .sidecar) - Add missing FHS deps for bundled Qt6: libdrm, libxkbfile, krb5, nss, libxcb-cursor Fixes: #167389 #420744 #366384 #364646
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
buildFHSEnv,
|
||||
bash,
|
||||
writeText,
|
||||
writeShellScript,
|
||||
ocl-icd,
|
||||
xkeyboard_config,
|
||||
glib,
|
||||
@@ -171,6 +172,23 @@ let
|
||||
appimage-exec.sh -x $out ${lib.escapeShellArg appimageName}
|
||||
|
||||
mkdir -p $out/{"Apple Immersive/Calibration",configs,DolbyVision,easyDCP,Extras,Fairlight,GPUCache,logs,Media,"Resolve Disk Database",.crashreport,.license,.LUT}
|
||||
|
||||
# Install udev rules for Blackmagic hardware (color panels, Speed Editor, Editor Keyboard)
|
||||
mkdir -p $out/lib/udev/rules.d
|
||||
cp $out/share/etc/udev/rules.d/99-BlackmagicDevices.rules $out/lib/udev/rules.d/
|
||||
cp $out/share/etc/udev/rules.d/99-ResolveKeyboardHID.rules $out/lib/udev/rules.d/
|
||||
# Generate catch-all rules for Blackmagic Design vendor ID (096e)
|
||||
# USB device access (color panels, general hardware)
|
||||
echo 'SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="096e", MODE="0666"' \
|
||||
> $out/lib/udev/rules.d/99-DavinciPanel.rules
|
||||
# hidraw access (Speed Editor jog wheel, Editor Keyboard, future HID devices)
|
||||
echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", MODE="0666"' \
|
||||
>> $out/lib/udev/rules.d/99-DavinciPanel.rules
|
||||
|
||||
# Verify all three rules files are present
|
||||
test -f $out/lib/udev/rules.d/99-BlackmagicDevices.rules
|
||||
test -f $out/lib/udev/rules.d/99-ResolveKeyboardHID.rules
|
||||
test -f $out/lib/udev/rules.d/99-DavinciPanel.rules
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
@@ -208,7 +226,59 @@ let
|
||||
];
|
||||
startupWMClass = "resolve";
|
||||
})
|
||||
];
|
||||
(makeDesktopItem {
|
||||
name = "blackmagicraw-player";
|
||||
desktopName = "Blackmagic RAW Player";
|
||||
exec = "blackmagicraw-player %f";
|
||||
icon = "blackmagicraw-player";
|
||||
mimeTypes = [
|
||||
"application/x-braw-clip"
|
||||
"application/x-braw-sidecar"
|
||||
];
|
||||
categories = [
|
||||
"Video"
|
||||
"AudioVideo"
|
||||
];
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "blackmagicraw-speedtest";
|
||||
desktopName = "Blackmagic RAW Speed Test";
|
||||
exec = "blackmagicraw-speedtest";
|
||||
icon = "blackmagicraw-speedtest";
|
||||
categories = [
|
||||
"Video"
|
||||
"AudioVideo"
|
||||
];
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "davinci-control-panels-setup";
|
||||
desktopName = "DaVinci Control Panels Setup";
|
||||
exec = "davinci-control-panels-setup";
|
||||
icon = "davinci-control-panels-setup";
|
||||
categories = [ "Settings" ];
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "davinci-fairlight-studio-utility";
|
||||
desktopName = "Fairlight Studio Utility";
|
||||
exec = "davinci-fairlight-studio-utility";
|
||||
icon = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
|
||||
categories = [
|
||||
"AudioVideo"
|
||||
"Audio"
|
||||
];
|
||||
})
|
||||
]
|
||||
++ lib.optional studioVariant (makeDesktopItem {
|
||||
name = "davinci-remote-monitor";
|
||||
desktopName = "DaVinci Remote Monitor";
|
||||
exec = "davinci-remote-monitor";
|
||||
icon = "davinci-remote-monitor";
|
||||
comment = "DaVinci Remote Monitor";
|
||||
categories = [
|
||||
"AudioVideo"
|
||||
"Video"
|
||||
];
|
||||
});
|
||||
}
|
||||
);
|
||||
in
|
||||
@@ -240,6 +310,11 @@ buildFHSEnv {
|
||||
opencl-headers
|
||||
python3
|
||||
python3.pkgs.numpy
|
||||
libdrm # libdrm.so.2 needed by bundled Qt6 WebEngine (Control Panels Setup)
|
||||
libxkbfile # libxkbfile.so.1 needed by bundled Qt6 WebEngine (Control Panels Setup)
|
||||
krb5 # libgssapi_krb5.so.2 needed by bundled Qt6 (Control Panels Setup, Fairlight Studio Utility)
|
||||
nss # libsmime3.so needed by bundled Qt6 (Control Panels Setup)
|
||||
libxcb-cursor # libxcb-cursor.so needed by Qt6 xcb platform plugin (Fairlight Studio Utility)
|
||||
udev
|
||||
xdg-utils # xdg-open needed to open URLs
|
||||
libice
|
||||
@@ -281,14 +356,67 @@ buildFHSEnv {
|
||||
export QT_XKB_CONFIG_ROOT="${xkeyboard_config}/share/X11/xkb"
|
||||
export QT_PLUGIN_PATH="${davinci}/libs/plugins:$QT_PLUGIN_PATH"
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32:${davinci}/libs
|
||||
${davinci}/bin/resolve
|
||||
if [ $# -gt 0 ]; then
|
||||
exec "$@"
|
||||
else
|
||||
exec ${davinci}/bin/resolve
|
||||
fi
|
||||
''}";
|
||||
|
||||
extraInstallCommands = ''
|
||||
mkdir -p $out/share/applications $out/share/icons/hicolor/128x128/apps
|
||||
ln -s ${davinci}/share/applications/*.desktop $out/share/applications/
|
||||
ln -s ${davinci}/graphics/DV_Resolve.png $out/share/icons/hicolor/128x128/apps/davinci-resolve${lib.optionalString studioVariant "-studio"}.png
|
||||
'';
|
||||
extraInstallCommands =
|
||||
let
|
||||
execName = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
|
||||
# Each wrapper re-enters the FHS environment and execs a different binary
|
||||
mkWrapper =
|
||||
name: bin:
|
||||
writeShellScript name ''
|
||||
exec "$(dirname "$0")/${execName}" ${bin} "$@"
|
||||
'';
|
||||
wrappers = {
|
||||
"blackmagicraw-player" = "${davinci}/BlackmagicRAWPlayer/BlackmagicRAWPlayer";
|
||||
"blackmagicraw-speedtest" = "${davinci}/BlackmagicRAWSpeedTest/BlackmagicRAWSpeedTest";
|
||||
"davinci-control-panels-setup" =
|
||||
''"${davinci}/DaVinci Control Panels Setup/DaVinci Control Panels Setup"'';
|
||||
"davinci-fairlight-studio-utility" =
|
||||
''"${davinci}/Fairlight Studio Utility/Fairlight Studio Utility"'';
|
||||
}
|
||||
// lib.optionalAttrs studioVariant {
|
||||
"davinci-remote-monitor" = ''"${davinci}/bin/DaVinci Remote Monitor"'';
|
||||
};
|
||||
in
|
||||
''
|
||||
# Desktop files
|
||||
mkdir -p $out/share/applications
|
||||
ln -s ${davinci}/share/applications/*.desktop $out/share/applications/
|
||||
|
||||
# Icons
|
||||
mkdir -p $out/share/icons/hicolor/{128x128,256x256}/apps
|
||||
ln -s ${davinci}/graphics/DV_Resolve.png $out/share/icons/hicolor/128x128/apps/davinci-resolve${lib.optionalString studioVariant "-studio"}.png
|
||||
ln -s ${davinci}/graphics/DV_Panels.png $out/share/icons/hicolor/128x128/apps/davinci-control-panels-setup.png
|
||||
${lib.optionalString studioVariant ''
|
||||
ln -s ${davinci}/graphics/Remote_Monitoring.png $out/share/icons/hicolor/128x128/apps/davinci-remote-monitor.png
|
||||
''}
|
||||
ln -s ${davinci}/graphics/blackmagicraw-player_256x256_apps.png $out/share/icons/hicolor/256x256/apps/blackmagicraw-player.png
|
||||
ln -s ${davinci}/graphics/blackmagicraw-speedtest_256x256_apps.png $out/share/icons/hicolor/256x256/apps/blackmagicraw-speedtest.png
|
||||
|
||||
# Wrapper scripts for additional programs
|
||||
${lib.concatStringsSep "\n" (
|
||||
lib.mapAttrsToList (name: bin: ''
|
||||
ln -s ${mkWrapper name bin} $out/bin/${name}
|
||||
'') wrappers
|
||||
)}
|
||||
|
||||
# MIME type definitions for .drp, .braw, etc.
|
||||
mkdir -p $out/share/mime/packages
|
||||
ln -s ${davinci}/share/resolve.xml $out/share/mime/packages/
|
||||
ln -s ${davinci}/share/blackmagicraw.xml $out/share/mime/packages/
|
||||
|
||||
# Expose udev rules so NixOS can aggregate them from environment.systemPackages
|
||||
mkdir -p $out/lib/udev/rules.d
|
||||
ln -s ${davinci}/lib/udev/rules.d/99-BlackmagicDevices.rules $out/lib/udev/rules.d/
|
||||
ln -s ${davinci}/lib/udev/rules.d/99-ResolveKeyboardHID.rules $out/lib/udev/rules.d/
|
||||
ln -s ${davinci}/lib/udev/rules.d/99-DavinciPanel.rules $out/lib/udev/rules.d/
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit davinci;
|
||||
|
||||
Reference in New Issue
Block a user