summary refs log tree commit diff
path: root/pkgs/applications/misc/bitcoinarmory/default.nix
blob: 090cb2f519e151a48340b4632429dd38ae00eee6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{ stdenv, fetchFromGitHub, pythonPackages
, pkgconfig, autoreconfHook, rsync
, swig, qt48Full, fcgi
, bitcoin, procps, utillinux
}:
let

  version = "0.96.1";
  inherit (pythonPackages) buildPythonApplication pyqt4 psutil twisted;

in buildPythonApplication {

  pname = "bitcoinarmory";
  inherit version;

  src = fetchFromGitHub {
    owner = "goatpig";
    repo = "BitcoinArmory";
    rev = "v${version}";
    sha256 = "0pjk5qx16n3kvs9py62666qkwp2awkgd87by4karbj7vk6p1l14h"; fetchSubmodules = true;
  };

  format = "other";

  # FIXME bitcoind doesn't die on shutdown. Need some sort of patch to fix that.
  #patches = [ ./shutdown-fix.patch ];

  nativeBuildInputs = [
    autoreconfHook
    pkgconfig
    swig
    pyqt4
    qt48Full
    rsync # used by silly install script (TODO patch upstream)
  ];
  buildInputs = [
    qt48Full
    fcgi
  ];

  propagatedBuildInputs = [
    pyqt4
    psutil
    twisted
  ];

  makeFlags = [ "PREFIX=$(out)" ];

  makeWrapperArgs = [
    "--prefix            PATH : ${bitcoin}/bin"   # for `bitcoind`
    "--prefix            PATH : ${procps}/bin"    # for `free`
    "--prefix            PATH : ${utillinux}/bin" # for `whereis`
    "--suffix LD_LIBRARY_PATH : $out/lib"         # for python bindings built as .so files
    "--run    cd\\ $out/lib/armory"               # so that GUI resources can be loaded
  ];

  # auditTmpdir runs during fixupPhase, so patchelf before that
  preFixup = ''
    newRpath=$(patchelf --print-rpath $out/bin/ArmoryDB | sed -r 's|(.*)(/tmp/nix-build-.*libfcgi/.libs:?)(.*)|\1\3|')
    patchelf --set-rpath $out/lib:$newRpath $out/bin/ArmoryDB
  '';

  # fixupPhase of mkPythonDerivation wraps $out/bin/*, so this needs to come after
  postFixup = ''
    wrapPythonProgramsIn $out/lib/armory "$out $pythonPath"
    ln -sf $out/lib/armory/ArmoryQt.py $out/bin/armory
  '';

  meta = {
    description = "Bitcoin wallet with cold storage and multi-signature support";
    longDescription = ''
      Armory is the most secure and full featured solution available for users
      and institutions to generate and store Bitcoin private keys. This means
      users never have to trust the Armory team and can use it with the Glacier
      Protocol. Satoshi would be proud!

      Users are empowered with multiple encrypted Bitcoin wallets and permanent
      one-time ‘paper backups’. Armory pioneered cold storage and distributed
      multi-signature. Bitcoin cold storage is a system for securely storing
      Bitcoins on a completely air-gapped offline computer.

      Maintainer's note: The original authors at https://bitcoinarmory.com/
      discontinued development. I elected instead to package GitHub user
      @goatpig's fork, as it's the most active, at time of this writing.
    '';
    homepage = https://github.com/goatpig/BitcoinArmory;
    license = stdenv.lib.licenses.agpl3Plus;
    maintainers = with stdenv.lib.maintainers; [ elitak ];
    platforms = [ "i686-linux" "x86_64-linux" ];
  };

}