grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / web-apps / ifm.nix
blob747a7469cd92af3e02176cd55222c6b01cc368f1
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.ifm;
9 in
11   options.services.ifm = {
12     enable = lib.mkEnableOption ''
13       Improved file manager, a single-file web-based filemanager
15       Lightweight and minimal, served using PHP's built-in server
16     '';
18     dataDir = lib.mkOption {
19       type = lib.types.str;
20       description = "Directory to serve throught the file managing service";
21     };
23     listenAddress = lib.mkOption {
24       type = lib.types.str;
25       default = "127.0.0.1";
26       description = "Address on which the service is listening";
27       example = "0.0.0.0";
28     };
30     port = lib.mkOption {
31       type = lib.types.port;
32       default = 9090;
33       description = "Port on which to serve the IFM service";
34     };
36     settings = lib.mkOption {
37       type = with lib.types; attrsOf anything;
38       default = { };
39       description = ''
40         Configuration of the IFM service.
42         See [the documentation](https://github.com/misterunknown/ifm/wiki/Configuration)
43         for available options and default values.
44       '';
45       example = {
46         IFM_GUI_SHOWPATH = 0;
47       };
48     };
49   };
51   config = lib.mkIf cfg.enable {
52     systemd.services.ifm = {
53       description = "Improved file manager, a single-file web based filemanager";
55       after = [ "network-online.target" ];
56       wantedBy = [ "multi-user.target" ];
58       environment = {
59       } // (builtins.mapAttrs (_: val: toString val) cfg.settings);
61       serviceConfig = {
62         DynamicUser = true;
63         User = "ifm";
64         StandardOutput = "journal";
65         BindPaths = "${cfg.dataDir}:/data";
66         PrivateTmp = true;
67         ExecStart = "${lib.getExe pkgs.ifm-web} ${lib.escapeShellArg cfg.listenAddress} ${builtins.toString cfg.port} /data";
68       };
69     };
70   };
72   meta.maintainers = with lib.maintainers; [ litchipi ];