grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / network-filesystems / u9fs.nix
blob346705f5e3d00d92ba35c295a2f49136d354cfd0
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.u9fs;
4 in
7   options = {
9     services.u9fs = {
11       enable = lib.mkOption {
12         type = lib.types.bool;
13         default = false;
14         description = "Whether to run the u9fs 9P server for Unix.";
15       };
17       listenStreams = lib.mkOption {
18         type = lib.types.listOf lib.types.str;
19         default = [ "564" ];
20         example = [ "192.168.16.1:564" ];
21         description = ''
22           Sockets to listen for clients on.
23           See {command}`man 5 systemd.socket` for socket syntax.
24         '';
25       };
27       user = lib.mkOption {
28         type = lib.types.str;
29         default = "nobody";
30         description = "User to run u9fs under.";
31       };
33       extraArgs = lib.mkOption {
34         type = lib.types.str;
35         default = "";
36         example = "-a none";
37         description = ''
38             Extra arguments to pass on invocation,
39             see {command}`man 4 u9fs`
40           '';
41       };
43     };
45   };
47   config = lib.mkIf cfg.enable {
49     systemd = {
50       sockets.u9fs = {
51         description = "U9fs Listening Socket";
52         wantedBy = [ "sockets.target" ];
53         after = [ "network.target" ];
54         inherit (cfg) listenStreams;
55         socketConfig.Accept = "yes";
56       };
57       services."u9fs@" = {
58         description = "9P Protocol Server";
59         reloadIfChanged = true;
60         requires = [ "u9fs.socket" ];
61         serviceConfig =
62           { ExecStart = "-${pkgs.u9fs}/bin/u9fs ${cfg.extraArgs}";
63             StandardInput = "socket";
64             StandardError = "journal";
65             User = cfg.user;
66             AmbientCapabilities = "cap_setuid cap_setgid";
67           };
68       };
69     };
71   };