Unverified Commit 84c8d21c authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

nixos/streamcontroller: init, streamcontroller: init at...

nixos/streamcontroller: init, streamcontroller: init at 1.5.0-beta.6-unstable-2024-08-13, pythonPackages.usb-monitor: init at 1.21 (#335545)
parents 5325e931 fc8e8820
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -286,6 +286,7 @@
  ./programs/ssh.nix
  ./programs/starship.nix
  ./programs/steam.nix
  ./programs/streamcontroller.nix
  ./programs/streamdeck-ui.nix
  ./programs/sysdig.nix
  ./programs/system-config-printer.nix
+22 −0
Original line number Diff line number Diff line
{
  config,
  lib,
  pkgs,
  ...
}:
let
  cfg = config.programs.streamcontroller;
in
{
  options.programs.streamcontroller = {
    enable = lib.mkEnableOption "StreamController";
    package = lib.mkPackageOption pkgs "streamcontroller" { default = [ "streamcontroller" ]; };
  };

  config = lib.mkIf cfg.enable {
    environment.systemPackages = [ cfg.package ];
    services.udev.packages = [ cfg.package ];
  };

  meta.maintainers = with lib.maintainers; [ sifmelcara ];
}
+190 −0
Original line number Diff line number Diff line
{
  stdenv,
  lib,
  python3Packages,
  fetchFromGitHub,
  copyDesktopItems,
  makeDesktopItem,
  wrapGAppsHook4,
  gobject-introspection,
  libadwaita,
  libportal,
  libportal-gtk4,
  xdg-desktop-portal,
  xdg-desktop-portal-gtk,
}:
stdenv.mkDerivation rec {
  pname = "streamcontroller";

  # Note that the latest tagged version (1.5.0-beta.6) includes a python dependency
  # that doesn't exist anymore, so we package an unstable version instead.
  version = "1.5.0-beta.6-unstable-2024-08-13";

  src = fetchFromGitHub {
    repo = "StreamController";
    owner = "StreamController";
    rev = "dbb6460a69137af192db09d504224ae9f1127cbd";
    hash = "sha256-+YYzHLRU5MNjF3iaKIDj9k4PVg+vnEZhbc3ZmNI7xyw=";
  };

  # The installation method documented upstream
  # (https://streamcontroller.github.io/docs/latest/installation/) is to clone the repo,
  # run `pip install`, then run `python3 main.py` to launch the program.
  # Due to how the code is structured upstream, it's infeasible to use `buildPythonApplication`.

  dontBuild = true;
  installPhase = ''
    runHook preInstall

    mkdir -p $out/usr/lib/streamcontroller
    cp -r ./* $out/usr/lib/streamcontroller/

    mkdir -p $out/bin/

    # Note that the implementation of main.py assumes
    # working directory to be at the root of the project's source code
    makeWrapper \
      ${python3Packages.python.interpreter} \
      $out/bin/streamcontroller \
      --add-flags main.py \
      --chdir $out/usr/lib/streamcontroller \
      --prefix PYTHONPATH : "$PYTHONPATH"

    mkdir -p "$out/etc/udev/rules.d"
    cp ./udev.rules $out/etc/udev/rules.d/70-streamcontroller.rules

    install -D ./flatpak/icon_256.png $out/share/icons/hicolor/256x256/apps/streamcontroller.png

    runHook postInstall
  '';

  desktopItems = [
    (makeDesktopItem {
      name = "StreamController";
      desktopName = "StreamController";
      exec = "streamcontroller";
      icon = "streamcontroller";
      comment = "Control your Elgato Stream Decks";
      categories = [ "Utility" ];
    })
  ];

  nativeBuildInputs = [
    copyDesktopItems
    wrapGAppsHook4
    gobject-introspection
  ];

  buildInputs =
    [
      libadwaita
      libportal
      libportal-gtk4
      xdg-desktop-portal
      xdg-desktop-portal-gtk
    ]
    ++ (with python3Packages; [
      annotated-types
      async-lru
      cairocffi
      cairosvg
      certifi
      cffi
      charset-normalizer
      click
      colorama
      contourpy
      cssselect2
      cycler
      dbus-python
      decorator
      defusedxml
      distlib
      dnspython
      evdev
      filelock
      fonttools
      fuzzywuzzy
      gcodepy
      get-video-properties
      gitdb
      idna
      imageio
      imageio-ffmpeg
      indexed-bzip2
      jinja2
      joblib
      kiwisolver
      levenshtein
      linkify-it-py
      loguru
      markdown-it-py
      markupsafe
      matplotlib
      mdit-py-plugins
      mdurl
      meson
      meson-python
      natsort
      nltk
      numpy
      opencv4
      packaging
      pillow
      platformdirs
      plumbum
      proglog
      psutil
      pulsectl
      pycairo
      pyclip
      pycparser
      pydantic
      pydantic-core
      pyenchant
      pygments
      pygobject3
      pymongo
      pyparsing
      pyperclip
      pyproject-metadata
      pyro5
      pyspellchecker
      python-dateutil
      pyudev
      pyusb
      pyyaml
      rapidfuzz
      regex
      requests
      requirements-parser
      rich
      rpyc
      serpent
      setproctitle
      six
      smmap
      speedtest-cli
      streamcontroller-plugin-tools
      streamdeck
      textual
      tinycss2
      tqdm
      types-setuptools
      typing-extensions
      uc-micro-py
      urllib3
      usb-monitor
      webencodings
      websocket-client
    ]);

  meta = with lib; {
    description = "Elegant Linux app for the Elgato Stream Deck with support for plugins";
    homepage = "https://core447.com/";
    license = licenses.gpl3;
    mainProgram = "streamcontroller";
    maintainers = with maintainers; [ sifmelcara ];
    platforms = lib.platforms.linux;
  };
}
+33 −0
Original line number Diff line number Diff line
{
  buildPythonPackage,
  fetchFromGitHub,
  lib,
  loguru,
  rpyc,
}:
buildPythonPackage rec {
  pname = "streamcontroller-plugin-tools";
  version = "2.0.0";

  src = fetchFromGitHub {
    owner = "StreamController";
    repo = "streamcontroller-plugin-tools";
    rev = version;
    hash = "sha256-dQZPRSzHhI3X+Pf7miwJlECGFgUfp68PtvwXAmpq5/s=";
  };

  dependencies = [
    loguru
    rpyc
  ];

  pythonImportsCheck = [ "streamcontroller_plugin_tools" ];

  meta = with lib; {
    description = "StreamController plugin tools";
    homepage = "https://github.com/StreamController/streamcontroller-plugin-tools";
    license = licenses.gpl3;
    maintainers = with maintainers; [ sifmelcara ];
    platforms = platforms.linux;
  };
}
+32 −0
Original line number Diff line number Diff line
{
  buildPythonPackage,
  fetchPypi,
  lib,
  pyudev,
}:

buildPythonPackage rec {
  pname = "usb-monitor";
  version = "1.21";

  src = fetchPypi {
    inherit version;
    pname = "usb_monitor";
    hash = "sha256-M+BUmbNxQWcULFECexTnp55EZiJ6y3bYCEtSwqKldAk=";
  };

  dependencies = [ pyudev ];

  # has no tests
  doCheck = false;

  pythonImportsCheck = [ "usbmonitor" ];

  meta = {
    description = "Cross-platform library for USB device monitoring";
    homepage = "https://github.com/Eric-Canas/USBMonitor";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ sifmelcara ];
    platforms = lib.platforms.linux;
  };
}
Loading