summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/network-filesystems/u9fs.nix
blob: 4d568599275a013638484605d4748b527df97b29 (plain)
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
{
  config,
  lib,
  pkgs,
  ...
}:
let
  cfg = config.services.u9fs;
in
{

  options = {

    services.u9fs = {

      enable = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = "Whether to run the u9fs 9P server for Unix.";
      };

      listenStreams = lib.mkOption {
        type = lib.types.listOf lib.types.str;
        default = [ "564" ];
        example = [ "192.168.16.1:564" ];
        description = ''
          Sockets to listen for clients on.
          See {command}`man 5 systemd.socket` for socket syntax.
        '';
      };

      user = lib.mkOption {
        type = lib.types.str;
        default = "nobody";
        description = "User to run u9fs under.";
      };

      extraArgs = lib.mkOption {
        type = lib.types.str;
        default = "";
        example = "-a none";
        description = ''
          Extra arguments to pass on invocation,
          see {command}`man 4 u9fs`
        '';
      };

    };

  };

  config = lib.mkIf cfg.enable {

    systemd = {
      sockets.u9fs = {
        description = "U9fs Listening Socket";
        wantedBy = [ "sockets.target" ];
        after = [ "network.target" ];
        inherit (cfg) listenStreams;
        socketConfig.Accept = "yes";
      };
      services."u9fs@" = {
        description = "9P Protocol Server";
        reloadIfChanged = true;
        requires = [ "u9fs.socket" ];
        serviceConfig = {
          ExecStart = "-${pkgs.u9fs}/bin/u9fs ${cfg.extraArgs}";
          StandardInput = "socket";
          StandardError = "journal";
          User = cfg.user;
          AmbientCapabilities = "cap_setuid cap_setgid";
        };
      };
    };

  };

}