grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / network-filesystems / netatalk.nix
blobe8c97df3151b241a1c7796424f20734d1e589484
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.netatalk;
4   settingsFormat = pkgs.formats.ini { };
5   afpConfFile = settingsFormat.generate "afp.conf" cfg.settings;
6 in {
7   options = {
8     services.netatalk = {
10       enable = lib.mkEnableOption "the Netatalk AFP fileserver";
12       port = lib.mkOption {
13         type = lib.types.port;
14         default = 548;
15         description = "TCP port to be used for AFP.";
16       };
18       settings = lib.mkOption {
19         inherit (settingsFormat) type;
20         default = { };
21         example = {
22           Global = { "uam list" = "uams_guest.so"; };
23           Homes = {
24             path = "afp-data";
25             "basedir regex" = "/home";
26           };
27           example-volume = {
28             path = "/srv/volume";
29             "read only" = true;
30           };
31         };
32         description = ''
33           Configuration for Netatalk. See
34           {manpage}`afp.conf(5)`.
35         '';
36       };
38       extmap = lib.mkOption {
39         type = lib.types.lines;
40         default = "";
41         description = ''
42           File name extension mappings.
43           See {manpage}`extmap.conf(5)`. for more information.
44         '';
45       };
47     };
48   };
50   imports = (map (option:
51     lib.mkRemovedOptionModule [ "services" "netatalk" option ]
52     "This option was removed in favor of `services.netatalk.settings`.") [
53       "extraConfig"
54       "homes"
55       "volumes"
56     ]);
58   config = lib.mkIf cfg.enable {
60     services.netatalk.settings.Global = {
61       "afp port" = toString cfg.port;
62       "extmap file" = "${pkgs.writeText "extmap.conf" cfg.extmap}";
63     };
65     systemd.services.netatalk = {
66       description = "Netatalk AFP fileserver for Macintosh clients";
67       unitConfig.Documentation =
68         "man:afp.conf(5) man:netatalk(8) man:afpd(8) man:cnid_metad(8) man:cnid_dbd(8)";
69       after = [ "network.target" "avahi-daemon.service" ];
70       wantedBy = [ "multi-user.target" ];
72       path = [ pkgs.netatalk ];
74       serviceConfig = {
75         Type = "forking";
76         GuessMainPID = "no";
77         PIDFile = "/run/lock/netatalk";
78         ExecStart = "${pkgs.netatalk}/sbin/netatalk -F ${afpConfFile}";
79         ExecReload = "${pkgs.coreutils}/bin/kill -HUP  $MAINPID";
80         ExecStop = "${pkgs.coreutils}/bin/kill -TERM $MAINPID";
81         Restart = "always";
82         RestartSec = 1;
83         StateDirectory = [ "netatalk/CNID" ];
84       };
86     };
88     security.pam.services.netatalk.unixAuth = true;
90   };