about summary refs log tree commit diff
path: root/nixos/modules/services/networking/notbit.nix
blob: b97435042395783b53a9c9572ae01e04362642f9 (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
93
{ config, lib, pkgs, ... }:

let
  cfg = config.services.notbit;
  varDir = "/var/lib/notbit";
  
  sendmail = pkgs.stdenv.mkDerivation {
    name = "notbit-wrapper";
    buildInputs = [ pkgs.makeWrapper ];
    propagatedBuildInputs = [ pkgs.notbit ];
    buildCommand = ''
      mkdir -p $out/bin
      makeWrapper ${pkgs.notbit}/bin/notbit-sendmail $out/bin/notbit-system-sendmail \
        --set XDG_RUNTIME_DIR ${varDir}
    '';
  };
in

with lib;
{

  ### configuration

  options = {

    services.notbit = {

      enable = mkOption {
        type = types.uniq types.bool;
        default = false;
        description = ''
          Enables the notbit daemon and provides a sendmail binary named `notbit-system-sendmail` for sending mail over the system instance of notbit. Users must be in the notbit group in order to send mail over the system notbit instance. Currently mail recipt is not supported.
        '';
      };

      port = mkOption {
        type = types.uniq types.int;
        default = 8443;
        description = "The port which the daemon listens for other bitmessage clients";
      };

      nice = mkOption {
        type = types.uniq types.int;
        default = 10;
        description = "Set the nice level for the notbit daemon";
      };

    };

  };

  ### implementation

  config = mkIf cfg.enable {

    environment.systemPackages = [ pkgs.notbit sendmail ];

    systemd.services.notbit = {
      description = "Notbit daemon";
      after = [ "network.target" ];
      wantedBy = [ "multi-user.target" ];
      path = [ pkgs.notbit ];
      environment = { XDG_RUNTIME_DIR = varDir; };

      postStart = ''
        [ ! -f "${varDir}/addr" ] && notbit-keygen > ${varDir}/addr
        chmod 0640 ${varDir}/{addr,notbit/notbit-ipc.lock}
        chmod 0750 ${varDir}/notbit/{,notbit-ipc}
      '';

      serviceConfig = {
        Type = "forking";
        ExecStart = "${pkgs.notbit}/bin/notbit -d -p ${toString cfg.port}";
        User = "notbit";
        Group = "notbit";
        UMask = "0077";
        WorkingDirectory = varDir;
        Nice = cfg.nice;
      };
    };

    users.extraUsers.notbit = {
      group = "notbit";
      description = "Notbit daemon user";
      home = varDir;
      createHome = true;
      uid = config.ids.uids.notbit;
    };

    users.extraGroups.notbit.gid = config.ids.gids.notbit;
  };

}