Running nixpkgs-update (https://nix-community.org/update-bot/) with UPDATE_INFO: davinci-resolve-studio 20.3.2 -> 20.3.3 https://repology.org/project/davinci-resolve-studio/versions attrpath: davinci-resolve-studio Checking auto update branch... No auto update branch exists Old version 20.3.2" not present in master derivation file with contents: { stdenv, lib, cacert, curl, runCommandLocal, unzip, appimageTools, addDriverRunpath, dbus, libGLU, xkeyboard-config, libxcb-util, libxcb-wm, libxcb-render-util, libxcb-keysyms, libxcb-image, libxxf86vm, libxt, libxtst, libxrender, libxrandr, libxi, libxinerama, libxfixes, libxext, libxdamage, libxcursor, libxcomposite, libx11, libsm, libice, libxcb, buildFHSEnv, bash, writeText, writeShellScript, ocl-icd, xkeyboard_config, glib, libarchive, libxcrypt, python3, aprutil, makeDesktopItem, copyDesktopItems, jq, studioVariant ? false, common-updater-scripts, writeShellApplication, }: let davinci = ( stdenv.mkDerivation rec { pname = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; version = "20.3.3"; nativeBuildInputs = [ appimageTools.appimage-exec addDriverRunpath copyDesktopItems unzip ]; # Pretty sure, there are missing dependencies ... buildInputs = [ libGLU libxxf86vm ]; src = runCommandLocal "${pname}-src.zip" rec { outputHashMode = "recursive"; outputHashAlgo = "sha256"; outputHash = if studioVariant then "sha256-q5VGp0kkno//nYtT82QDZDJG92uumAtomUK4B55795g=" else "sha256-2pfJz71fS/oEmK3n4cESKb9EDYCeDBhbzGLgFpb+OLI="; impureEnvVars = lib.fetchers.proxyImpureEnvVars; nativeBuildInputs = [ curl jq ]; # ENV VARS SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; # Get linux.downloadId from HTTP response on https://www.blackmagicdesign.com/products/davinciresolve REFERID = "263d62f31cbb49e0868005059abcb0c9"; DOWNLOADSURL = "https://www.blackmagicdesign.com/api/support/us/downloads.json"; SITEURL = "https://www.blackmagicdesign.com/api/register/us/download"; PRODUCT = "DaVinci Resolve${lib.optionalString studioVariant " Studio"}"; VERSION = version; 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 { "firstname" = "NixOS"; "lastname" = "Linux"; "email" = "someone@nixos.org"; "phone" = "+31 71 452 5670"; "country" = "nl"; "street" = "-"; "state" = "Province of Utrecht"; "city" = "Utrecht"; "product" = PRODUCT; }; } '' DOWNLOADID=$( curl --silent --compressed "$DOWNLOADSURL" \ | jq --raw-output '.downloads[] | .urls.Linux?[]? | select(.downloadTitle | test("^'"$PRODUCT $VERSION"'( Update)?$")) | .downloadId' ) echo "downloadid is $DOWNLOADID" test -n "$DOWNLOADID" RESOLVEURL=$(curl \ --silent \ --header 'Host: www.blackmagicdesign.com' \ --header 'Accept: application/json, text/plain, */*' \ --header 'Origin: https://www.blackmagicdesign.com' \ --header "$USERAGENT" \ --header 'Content-Type: application/json;charset=UTF-8' \ --header "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \ --header 'Accept-Encoding: gzip, deflate, br' \ --header 'Accept-Language: en-US,en;q=0.9' \ --header 'Authority: www.blackmagicdesign.com' \ --header 'Cookie: _ga=GA1.2.1849503966.1518103294; _gid=GA1.2.953840595.1518103294' \ --data-ascii "$REQJSON" \ --compressed \ "$SITEURL/$DOWNLOADID") echo "resolveurl is $RESOLVEURL" curl \ --retry 3 --retry-delay 3 \ --header "Upgrade-Insecure-Requests: 1" \ --header "$USERAGENT" \ --header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" \ --header "Accept-Language: en-US,en;q=0.9" \ --compressed \ "$RESOLVEURL" \ > $out ''; # The unpack phase won't generate a directory sourceRoot = "."; installPhase = let appimageName = "DaVinci_Resolve_${lib.optionalString studioVariant "Studio_"}${version}_Linux.run"; in '' runHook preInstall export HOME=$PWD/home mkdir -p $HOME mkdir -p $out test -e ${lib.escapeShellArg appimageName} 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 ''; dontStrip = true; postFixup = '' for program in $out/bin/*; do isELF "$program" || continue addDriverRunpath "$program" done for program in $out/libs/*; do isELF "$program" || continue if [[ "$program" != *"libcudnn_cnn_infer"* ]];then echo $program addDriverRunpath "$program" fi done ln -s $out/libs/libcrypto.so.1.1 $out/libs/libcrypt.so.1 ''; desktopItems = [ (makeDesktopItem { name = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; desktopName = "Davinci Resolve${lib.optionalString studioVariant " Studio"}"; genericName = "Video Editor"; exec = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; icon = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; comment = "Professional video editing, color, effects and audio post-processing"; categories = [ "AudioVideo" "AudioVideoEditing" "Video" "Graphics" ]; 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 buildFHSEnv { inherit (davinci) pname version; targetPkgs = pkgs: with pkgs; [ alsa-lib aprutil bzip2 davinci dbus expat fontconfig freetype glib libGL libGLU libarchive libcap librsvg libtool libuuid libxcrypt # provides libcrypt.so.1 libxkbcommon nspr ocl-icd 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 libsm libx11 libxcomposite libxcursor libxdamage libxext libxfixes libxi libxinerama libxrandr libxrender libxt libxtst libxxf86vm libxcb libxcb-util libxcb-image libxcb-keysyms libxcb-render-util libxcb-wm xkeyboard-config zlib ]; extraPreBwrapCmds = lib.optionalString studioVariant '' mkdir -p ~/.local/share/DaVinciResolve/license || exit 1 mkdir -p ~/.local/share/DaVinciResolve/Extras || exit 1 ''; extraBwrapArgs = lib.optionals studioVariant [ ''--bind "$HOME"/.local/share/DaVinciResolve/license ${davinci}/.license'' ''--bind "$HOME"/.local/share/DaVinciResolve/Extras ${davinci}/Extras'' ]; runScript = "${bash}/bin/bash ${writeText "davinci-wrapper" '' 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 if [ $# -gt 0 ]; then exec "$@" else exec ${davinci}/bin/resolve fi ''}"; 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; } // lib.optionalAttrs (!studioVariant) { updateScript = lib.getExe (writeShellApplication { name = "update-davinci-resolve"; runtimeInputs = [ curl jq common-updater-scripts ]; text = '' set -o errexit drv=pkgs/by-name/da/davinci-resolve/package.nix currentVersion=${lib.escapeShellArg davinci.version} downloadsJSON="$(curl --fail --silent https://www.blackmagicdesign.com/api/support/us/downloads.json)" latestLinuxVersion="$(echo "$downloadsJSON" | jq '[.downloads[] | select(.urls.Linux) | .urls.Linux[] | select(.downloadTitle | test("DaVinci Resolve")) | .downloadTitle]' | grep -oP 'DaVinci Resolve \K\d+\.\d+(\.\d+)?' | sort | tail -n 1)" update-source-version davinci-resolve "$latestLinuxVersion" --source-key=davinci.src # Since the standard and studio both use the same version we need to reset it before updating studio sed -i -e "s/""$latestLinuxVersion""/""$currentVersion""/" "$drv" latestStudioLinuxVersion="$(echo "$downloadsJSON" | jq '[.downloads[] | select(.urls.Linux) | .urls.Linux[] | select(.downloadTitle | test("DaVinci Resolve")) | .downloadTitle]' | grep -oP 'DaVinci Resolve Studio \K\d+\.\d+(\.\d+)?' | sort | tail -n 1)" update-source-version davinci-resolve-studio "$latestStudioLinuxVersion" --source-key=davinci.src ''; }); }; meta = { description = "Professional video editing, color, effects and audio post-processing"; homepage = "https://www.blackmagicdesign.com/products/davinciresolve"; license = lib.licenses.unfree; maintainers = with lib.maintainers; [ amarshall XBagon toXel cafkafk ]; platforms = [ "x86_64-linux" ]; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; mainProgram = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; }; }