nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix
2024-08-18 06:31:12 -07:00

149 lines
3.9 KiB
Nix

{ mkDerivation
, lib
, autoreconfHook
, curl
, fetchFromGitHub
, git
, libevent
, libtool
, qrencode
, udev
, libusb1
, makeWrapper
, pkg-config
, qtbase
, qttools
, qtwebsockets
, qtmultimedia
, udevRule51 ? ''
, SUBSYSTEM=="usb", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbb%n", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402"
, ''
, udevRule52 ? ''
, KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbbf%n"
, ''
, writeText
}:
# Enabling the digitalbitbox program
#
# programs.digitalbitbox.enable = true;
#
# will install the digitalbitbox package and enable the corresponding hardware
# module and is by far the easiest way to get started with the Digital Bitbox on
# NixOS.
# In case you install the package only, please be aware that you may need to
# apply some udev rules to allow the application to identify and access your
# wallet. In a nixos-configuration, one may accomplish this by enabling the
# digitalbitbox hardware module
#
# hardware.digitalbitbox.enable = true;
#
# or by adding the digitalbitbox package to system.udev.packages
#
# system.udev.packages = [ pkgs.digitalbitbox ];
# See https://digitalbitbox.com/start_linux for more information.
let
copyUdevRuleToOutput = name: rule:
"cp ${writeText name rule} $out/etc/udev/rules.d/${name}";
in mkDerivation rec {
pname = "digitalbitbox";
version = "3.0.0";
src = fetchFromGitHub {
owner = "digitalbitbox";
repo = "dbb-app";
rev = "v${version}";
sha256 = "ig3+TdYv277D9GVnkRSX6nc6D6qruUOw/IQdQCK6FoA=";
};
nativeBuildInputs = [
autoreconfHook
curl
git
makeWrapper
pkg-config
qttools
];
buildInputs = [
libevent
libtool
udev
libusb1
qrencode
qtbase
qtwebsockets
qtmultimedia
];
LUPDATE="${qttools.dev}/bin/lupdate";
LRELEASE="${qttools.dev}/bin/lrelease";
MOC="${qtbase.dev}/bin/moc";
QTDIR=qtbase.dev;
RCC="${qtbase.dev}/bin/rcc";
UIC="${qtbase.dev}/bin/uic";
configureFlags = [
"--enable-libusb"
];
hardeningDisable = [
"format"
];
qtWrapperArgs = [ "--prefix LD_LIBRARY_PATH : $out/lib" ];
postInstall = ''
mkdir -p "$out/lib"
cp src/libbtc/.libs/*.so* $out/lib
cp src/libbtc/src/secp256k1/.libs/*.so* $out/lib
cp src/hidapi/libusb/.libs/*.so* $out/lib
cp src/univalue/.libs/*.so* $out/lib
# Provide udev rules as documented in https://digitalbitbox.com/start_linux
mkdir -p "$out/etc/udev/rules.d"
${copyUdevRuleToOutput "51-hid-digitalbox.rules" udevRule51}
${copyUdevRuleToOutput "52-hid-digitalbox.rules" udevRule52}
'';
# remove forbidden references to $TMPDIR
preFixup = ''
for f in "$out"/{bin,lib}/*; do
if [ -f "$f" ] && isELF "$f"; then
patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$f"
fi
done
'';
enableParallelBuilding = true;
meta = with lib; {
description = "QT based application for the Digital Bitbox hardware wallet";
longDescription = ''
Digital Bitbox provides dbb-app, a GUI tool, and dbb-cli, a CLI tool, to manage Digital Bitbox devices.
This package will only install the dbb-app and dbb-cli, however; in order for these applications to identify and access Digital Bitbox devices, one may want to enable the digitalbitbox hardware module by adding
hardware.digitalbitbox.enable = true;
to the configuration which is equivalent to adding this package to the udev.packages list.
The easiest way to use the digitalbitbox package in NixOS is by adding
programs.digitalbitbox.enable = true;
to the configuration which installs the package and enables the hardware module.
'';
homepage = "https://digitalbitbox.com/";
license = licenses.mit;
maintainers = with maintainers; [
vidbina
];
platforms = platforms.linux;
};
}