about summary refs log tree commit diff
path: root/pkgs/by-name/br
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-03-13 14:59:41 +0200
committerFlorian Klink <flokli@flokli.de>2024-04-09 17:01:05 +0300
commitea9ad6758f165f0076e50b666dd1279eac853bb8 (patch)
treec8751f66c95b38e03bce18bd1972920165668fa9 /pkgs/by-name/br
parentf1e4c7a12aba0223e1f19757e1483d848f578ebe (diff)
brainstem: init at 2.10.5
This provides a library and CLI tools to control Acroname USB Smart
switches, as well as a firmware updater.
Diffstat (limited to 'pkgs/by-name/br')
-rw-r--r--pkgs/by-name/br/brainstem/package.nix90
1 files changed, 90 insertions, 0 deletions
diff --git a/pkgs/by-name/br/brainstem/package.nix b/pkgs/by-name/br/brainstem/package.nix
new file mode 100644
index 0000000000000..dcfe3d523dc8e
--- /dev/null
+++ b/pkgs/by-name/br/brainstem/package.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, lib
+, autoPatchelfHook
+, fetchzip
+, curl
+, systemd
+, zlib
+, writeText
+, withUpdater ? true
+, ...
+}:
+
+let
+  version = "2.10.5";
+  # Upstream has a udev.sh script asking for mode and group, but with uaccess we
+  # don't need any of that and can make it entirely static.
+  # For any rule adding the uaccess tag to be effective, the name of the file it
+  # is defined in has to lexically precede 73-seat-late.rules.
+  udevRule = writeText "60-brainstem.rules" ''
+    # Acroname Brainstem control devices
+    SUBSYSTEM=="usb", ATTRS{idVendor}=="24ff", TAG+="uaccess"
+
+    # Acroname recovery devices (pb82, pb242, pb167)
+    SUBSYSTEM=="tty", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="274e", TAG+="uaccess"
+    SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", TAG+="uaccess"
+    KERNEL=="hidraw*", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0130", TAG+="uaccess"
+  '';
+
+  src = fetchzip {
+    url = "https://acroname.com/sites/default/files/software/brainstem_sdk/${version}/brainstem_sdk_${version}_Ubuntu_LTS_22.04_x86_64.tgz";
+    hash = "sha256-S6u9goxTMCI12sffP/WKUF7bv0pLeNmNog7Hle+vpR4=";
+    # There's no "brainstem" parent directory in the archive.
+    stripRoot = false;
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "brainstem";
+  inherit version src;
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+  buildInputs = [
+    # libudev
+    (lib.getLib systemd)
+    # libstdc++.so libgcc_s.so
+    stdenv.cc.cc.lib
+  ] ++ lib.optionals withUpdater [
+    # libcurl.so.4
+    curl
+    # libz.so.1
+    zlib
+  ];
+
+  # Unpack the CLI tools, documentation, library and C headers.
+  # There's also a python .whl, containing more libraries, which might be used
+  # to support more architectures, too, but let's only do that if we need it.
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m744 cli/AcronameHubCLI $out/bin
+    install -m744 cli/Updater $out/bin/AcronameHubUpdater
+
+    mkdir -p $out/lib/udev/rules.d
+    cp ${udevRule} $out/lib/udev/rules.d/60-brainstem.rules
+
+    mkdir -p $doc
+    cp docs/* $doc/
+    cp {license,version}.txt $doc/
+
+    mkdir -p $lib/lib
+    cp api/lib/libBrainStem2.* $lib/lib
+
+    mkdir -p $dev/include
+    cp -R api/lib/BrainStem2 $dev/include/
+  '';
+
+  outputs = [ "out" "lib" "dev" "doc" ];
+
+  meta = with lib; {
+    description = "BrainStem Software Development Kit";
+    longDescription = ''
+      The BrainStem SDK provides a library to access and control Acroname smart
+      USB switches, as well as a CLI interface, and a firmware updater.
+    '';
+    homepage = "https://acroname.com/software/brainstem-development-kit";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ flokli ];
+    mainProgram = "AcronameHubCLI";
+  };
+}