diff options
author | Sandro <sandro.jaeckel@gmail.com> | 2022-07-17 23:27:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-17 23:27:43 +0200 |
commit | 24aefd2c8278f4f825f760bf3b5726dfcb019d30 (patch) | |
tree | b71292275ce85648809fbfcbc5eb7f4934666d72 | |
parent | d6c4d7b6cb076436ae2bf6ef084517bbf7f9610f (diff) | |
parent | 3ba735cce2cbb0d8b32a3888d71c9ecdf14ff77c (diff) | |
download | nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar.gz nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar.bz2 nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar.lz nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar.xz nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.tar.zst nixlib-24aefd2c8278f4f825f760bf3b5726dfcb019d30.zip |
Merge pull request #177240 from Majiir/streamdeck-ui
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/programs/streamdeck-ui.nix | 28 | ||||
-rw-r--r-- | pkgs/applications/misc/streamdeck-ui/default.nix | 95 | ||||
-rw-r--r-- | pkgs/development/python-modules/pyside2/default.nix | 10 | ||||
-rw-r--r-- | pkgs/development/python-modules/shiboken2/default.nix | 5 | ||||
-rw-r--r-- | pkgs/development/python-modules/streamdeck/default.nix | 36 | ||||
-rw-r--r-- | pkgs/development/python-modules/streamdeck/hardcode-libusb.patch | 13 | ||||
-rw-r--r-- | pkgs/development/python-modules/xlib/default.nix | 4 | ||||
-rw-r--r-- | pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch | 13 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 2 | ||||
-rw-r--r-- | pkgs/top-level/python-packages.nix | 2 |
11 files changed, 207 insertions, 2 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 5f454a61acef..82c0b5d74de3 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -215,6 +215,7 @@ ./programs/systemtap.nix ./programs/starship.nix ./programs/steam.nix + ./programs/streamdeck-ui.nix ./programs/sway.nix ./programs/system-config-printer.nix ./programs/thefuck.nix diff --git a/nixos/modules/programs/streamdeck-ui.nix b/nixos/modules/programs/streamdeck-ui.nix new file mode 100644 index 000000000000..1434f82660de --- /dev/null +++ b/nixos/modules/programs/streamdeck-ui.nix @@ -0,0 +1,28 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.programs.streamdeck-ui; +in { + options.programs.streamdeck-ui = { + enable = mkEnableOption "streamdeck-ui"; + + autoStart = mkOption { + default = true; + type = types.bool; + description = "Whether streamdeck-ui should be started automatically."; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + streamdeck-ui + (mkIf cfg.autoStart (makeAutostartItem { name = "streamdeck-ui"; package = streamdeck-ui; })) + ]; + + services.udev.packages = with pkgs; [ streamdeck-ui ]; + }; + + meta.maintainers = with maintainers; [ majiir ]; +} 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/development/python-modules/pyside2/default.nix b/pkgs/development/python-modules/pyside2/default.nix index 3be201d3c913..81df3cbe94c6 100644 --- a/pkgs/development/python-modules/pyside2/default.nix +++ b/pkgs/development/python-modules/pyside2/default.nix @@ -24,14 +24,22 @@ stdenv.mkDerivation rec { ]; nativeBuildInputs = [ cmake ninja qt5.qmake python ]; - buildInputs = with qt5; [ + buildInputs = (with qt5; [ qtbase qtxmlpatterns qtmultimedia qttools qtx11extras qtlocation qtscript qtwebsockets qtwebengine qtwebchannel qtcharts qtsensors qtsvg + ]) ++ [ + python.pkgs.setuptools ]; propagatedBuildInputs = [ shiboken2 ]; dontWrapQtApps = true; + postInstall = '' + cd ../../.. + ${python.interpreter} setup.py egg_info --build-type=pyside2 + cp -r PySide2.egg-info $out/${python.sitePackages}/ + ''; + meta = with lib; { description = "LGPL-licensed Python bindings for Qt"; license = licenses.lgpl21; diff --git a/pkgs/development/python-modules/shiboken2/default.nix b/pkgs/development/python-modules/shiboken2/default.nix index 11461a9545cd..c4210cfeda2e 100644 --- a/pkgs/development/python-modules/shiboken2/default.nix +++ b/pkgs/development/python-modules/shiboken2/default.nix @@ -17,7 +17,7 @@ stdenv.mkDerivation { CLANG_INSTALL_DIR = llvmPackages.libclang.out; nativeBuildInputs = [ cmake ]; - buildInputs = [ llvmPackages.libclang python qt5.qtbase qt5.qtxmlpatterns ]; + buildInputs = [ llvmPackages.libclang python python.pkgs.setuptools qt5.qtbase qt5.qtxmlpatterns ]; cmakeFlags = [ "-DBUILD_TESTS=OFF" @@ -26,6 +26,9 @@ stdenv.mkDerivation { dontWrapQtApps = true; postInstall = '' + cd ../../.. + ${python.interpreter} setup.py egg_info --build-type=shiboken2 + cp -r shiboken2.egg-info $out/${python.sitePackages}/ rm $out/bin/shiboken_tool.py ''; diff --git a/pkgs/development/python-modules/streamdeck/default.nix b/pkgs/development/python-modules/streamdeck/default.nix new file mode 100644 index 000000000000..7d7f00710377 --- /dev/null +++ b/pkgs/development/python-modules/streamdeck/default.nix @@ -0,0 +1,36 @@ +{ lib +, stdenv +, buildPythonPackage +, fetchPypi +, substituteAll +, pkgs +}: + +buildPythonPackage rec { + pname = "streamdeck"; + version = "0.9.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "0116a376afc18f3abbf79cc1a4409f81472e19197d5641b9e97e697d105cbdc0"; + }; + + patches = [ + # substitute libusb path + (substituteAll { + src = ./hardcode-libusb.patch; + libusb = "${pkgs.hidapi}/lib/libhidapi-libusb${stdenv.hostPlatform.extensions.sharedLibrary}"; + }) + ]; + + pythonImportsCheck = [ "StreamDeck" ]; + doCheck = false; + + meta = with lib; { + description = "Python library to control the Elgato Stream Deck"; + homepage = "https://github.com/abcminiuser/python-elgato-streamdeck"; + license = licenses.mit; + maintainers = with maintainers; [ majiir ]; + broken = stdenv.isDarwin; + }; +} diff --git a/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch b/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch new file mode 100644 index 000000000000..acef15b54052 --- /dev/null +++ b/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch @@ -0,0 +1,13 @@ +diff --git a/src/StreamDeck/Transport/LibUSBHIDAPI.py b/src/StreamDeck/Transport/LibUSBHIDAPI.py +index 824c59c..f13754e 100644 +--- a/src/StreamDeck/Transport/LibUSBHIDAPI.py ++++ b/src/StreamDeck/Transport/LibUSBHIDAPI.py +@@ -110,7 +110,7 @@ class LibUSBHIDAPI(Transport): + + search_library_names = { + "Windows": ["hidapi.dll", "libhidapi-0.dll"], +- "Linux": ["libhidapi-libusb.so", "libhidapi-libusb.so.0"], ++ "Linux": ["@libusb@"], + "Darwin": ["libhidapi.dylib"], + } + diff --git a/pkgs/development/python-modules/xlib/default.nix b/pkgs/development/python-modules/xlib/default.nix index edb4761af3a8..05d5e095a163 100644 --- a/pkgs/development/python-modules/xlib/default.nix +++ b/pkgs/development/python-modules/xlib/default.nix @@ -22,6 +22,10 @@ buildPythonPackage rec { sha256 = "155p9xhsk01z9vdml74h07svlqy6gljnx9c6qbydcr14lwghwn06"; }; + patches = [ + ./fix-no-protocol-specified.patch + ]; + nativeBuildInputs = [ setuptools-scm ]; buildInputs = [ xorg.libX11 ]; propagatedBuildInputs = [ six ]; diff --git a/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch b/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch new file mode 100644 index 000000000000..1f3ab927f840 --- /dev/null +++ b/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch @@ -0,0 +1,13 @@ +diff --git a/Xlib/xauth.py b/Xlib/xauth.py +index 2ed7dd5..303bd49 100644 +--- a/Xlib/xauth.py ++++ b/Xlib/xauth.py +@@ -120,6 +120,8 @@ class Xauthority(object): + matches = {} + + for efam, eaddr, enum, ename, edata in self.entries: ++ if enum == b'' and ename not in matches: ++ enum = num + if efam == family and eaddr == address and num == enum: + matches[ename] = edata + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a459d27f1cc1..158ce4757e74 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; }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e4162f94f4df..223b190b43e8 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -10252,6 +10252,8 @@ in { stravalib = callPackage ../development/python-modules/stravalib { }; + streamdeck = callPackage ../development/python-modules/streamdeck { }; + streaming-form-data = callPackage ../development/python-modules/streaming-form-data { }; streamlabswater = callPackage ../development/python-modules/streamlabswater { }; |