diff --git a/pkgs/applications/misc/streamdeck-ui/default.nix b/pkgs/applications/misc/streamdeck-ui/default.nix new file mode 100644 index 000000000000..141652e63d69 --- /dev/null +++ b/pkgs/applications/misc/streamdeck-ui/default.nix @@ -0,0 +1,95 @@ +{ lib +, python3Packages +, fetchFromGitHub +, poetry +, copyDesktopItems +, wrapQtAppsHook +, writeText +, makeDesktopItem +, xvfb-run +}: + +python3Packages.buildPythonApplication rec { + pname = "streamdeck-ui"; + version = "2.0.4"; + + src = fetchFromGitHub { + repo = pname; + owner = "timothycrosley"; + rev = "v${version}"; + hash = "sha256-NV4BkHEgfxIOuLfmn0vcPNqivmHLD6v7jLdLZgnrb0Q="; + }; + + desktopItems = [ (makeDesktopItem { + name = "streamdeck-ui"; + desktopName = "Stream Deck UI"; + icon = "streamdeck-ui"; + exec = "streamdeck --no-ui"; + comment = "UI for the Elgato Stream Deck"; + categories = [ "Utility" ]; + noDisplay = true; + }) ]; + + postInstall = + let + udevRules = '' + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", TAG+="uaccess" + ''; + in + '' + mkdir -p "$out/etc/udev/rules.d" + cp ${writeText "70-streamdeck.rules" udevRules} $out/etc/udev/rules.d/70-streamdeck.rules + + mkdir -p "$out/share/pixmaps" + cp streamdeck_ui/logo.png $out/share/pixmaps/streamdeck-ui.png + ''; + + dontWrapQtApps = true; + makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ]; + + format = "pyproject"; + + nativeBuildInputs = [ + poetry + copyDesktopItems + wrapQtAppsHook + ]; + + propagatedBuildInputs = with python3Packages; [ + setuptools + filetype + cairosvg + pillow + pynput + pyside2 + streamdeck + xlib + ]; + + checkInputs = [ + xvfb-run + python3Packages.pytest + python3Packages.hypothesis-auto + ]; + + # Ignored tests are not in a running or passing state. + # Fixes have been merged upstream but not yet released. + # Revisit these ignored tests on each update. + checkPhase = '' + xvfb-run pytest tests \ + --ignore=tests/test_api.py \ + --ignore=tests/test_filter.py \ + --ignore=tests/test_stream_deck_monitor.py + ''; + + meta = with lib; { + description = "Linux compatible UI for the Elgato Stream Deck"; + homepage = "https://timothycrosley.github.io/streamdeck-ui/"; + license = licenses.mit; + maintainers = with maintainers; [ majiir ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 44f895c0e448..626c5d9f1df6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -27679,6 +27679,8 @@ with pkgs; srain = callPackage ../applications/networking/irc/srain { }; + streamdeck-ui = libsForQt5.callPackage ../applications/misc/streamdeck-ui { }; + super-productivity = callPackage ../applications/office/super-productivity { electron = electron_17; };