nixos/preload: init
[NixPkgs.git] / nixos / modules / services / hardware / trezord.nix
blobb2217fc9712412541424b8cbdb714529f6ca0d6b
1 { config, lib, pkgs, ... }:
3 with lib;
4 let
5   cfg = config.services.trezord;
6 in {
8   ### docs
10   meta = {
11     doc = ./trezord.md;
12   };
14   ### interface
16   options = {
17     services.trezord = {
18       enable = mkOption {
19         type = types.bool;
20         default = false;
21         description = lib.mdDoc ''
22           Enable Trezor bridge daemon, for use with Trezor hardware bitcoin wallets.
23         '';
24       };
26       emulator.enable = mkOption {
27         type = types.bool;
28         default = false;
29         description = lib.mdDoc ''
30           Enable Trezor emulator support.
31           '';
32        };
34       emulator.port = mkOption {
35         type = types.port;
36         default = 21324;
37         description = lib.mdDoc ''
38           Listening port for the Trezor emulator.
39           '';
40       };
41     };
42   };
44   ### implementation
46   config = mkIf cfg.enable {
47     services.udev.packages = [ pkgs.trezor-udev-rules ];
49     systemd.services.trezord = {
50       description = "Trezor Bridge";
51       after = [ "network.target" ];
52       wantedBy = [ "multi-user.target" ];
53       path = [];
54       serviceConfig = {
55         Type = "simple";
56         ExecStart = "${pkgs.trezord}/bin/trezord-go ${optionalString cfg.emulator.enable "-e ${builtins.toString cfg.emulator.port}"}";
57         User = "trezord";
58       };
59     };
61     users.users.trezord = {
62       group = "trezord";
63       description = "Trezor bridge daemon user";
64       isSystemUser = true;
65     };
67     users.groups.trezord = {};
68   };