Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

brainstem: init at 2.10.5 #302833

Merged
merged 1 commit into from
Apr 10, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
90 changes: 90 additions & 0 deletions pkgs/by-name/br/brainstem/package.nix
Original file line number Diff line number Diff line change
@@ -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/
flokli marked this conversation as resolved.
Show resolved Hide resolved
'';

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";
};
}