silx: 2.1.1 -> 2.1.2 (#361612)
[NixPkgs.git] / nixos / modules / services / misc / felix.nix
blob3def12e3adef973380e4e65a8e4d558936b16c9b
1 # Felix server
2 { config, lib, pkgs, ... }:
3 let
5   cfg = config.services.felix;
7 in
11   ###### interface
13   options = {
15     services.felix = {
17       enable = lib.mkEnableOption "the Apache Felix OSGi service";
19       bundles = lib.mkOption {
20         type = lib.types.listOf lib.types.package;
21         default = [ pkgs.felix_remoteshell ];
22         defaultText = lib.literalExpression "[ pkgs.felix_remoteshell ]";
23         description = "List of bundles that should be activated on startup";
24       };
26       user = lib.mkOption {
27         type = lib.types.str;
28         default = "osgi";
29         description = "User account under which Apache Felix runs.";
30       };
32       group = lib.mkOption {
33         type = lib.types.str;
34         default = "osgi";
35         description = "Group account under which Apache Felix runs.";
36       };
38     };
40   };
43   ###### implementation
45   config = lib.mkIf cfg.enable {
46     users.groups.osgi.gid = config.ids.gids.osgi;
48     users.users.osgi =
49       { uid = config.ids.uids.osgi;
50         description = "OSGi user";
51         home = "/homeless-shelter";
52       };
54     systemd.services.felix = {
55       description = "Felix server";
56       wantedBy = [ "multi-user.target" ];
58       preStart = ''
59         # Initialise felix instance on first startup
60         if [ ! -d /var/felix ]
61         then
62           # Symlink system files
64           mkdir -p /var/felix
65           chown ${cfg.user}:${cfg.group} /var/felix
67           for i in ${pkgs.felix}/*
68           do
69               if [ "$i" != "${pkgs.felix}/bundle" ]
70               then
71                   ln -sfn $i /var/felix/$(basename $i)
72               fi
73           done
75           # Symlink bundles
76           mkdir -p /var/felix/bundle
77           chown ${cfg.user}:${cfg.group} /var/felix/bundle
79           for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles}
80           do
81               if [ -f $i ]
82               then
83                   ln -sfn $i /var/felix/bundle/$(basename $i)
84               elif [ -d $i ]
85               then
86                   for j in $i/bundle/*
87               do
88                   ln -sfn $j /var/felix/bundle/$(basename $j)
89               done
90               fi
91           done
92         fi
93       '';
95       script = ''
96         cd /var/felix
97         ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar'
98       '';
99     };
100   };