nixos/preload: init
[NixPkgs.git] / nixos / modules / services / development / rstudio-server / default.nix
blobbf4c7727bf74887b1947ac02bf2fd89659f8ad85
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
7   cfg = config.services.rstudio-server;
9   rserver-conf = builtins.toFile "rserver.conf" ''
10     server-working-dir=${cfg.serverWorkingDir}
11     www-address=${cfg.listenAddr}
12     ${cfg.rserverExtraConfig}
13   '';
15   rsession-conf = builtins.toFile "rsession.conf" ''
16     ${cfg.rsessionExtraConfig}
17   '';
21   meta.maintainers = with maintainers; [ jbedo cfhammill ];
23   options.services.rstudio-server = {
24     enable = mkEnableOption (lib.mdDoc "RStudio server");
26     serverWorkingDir = mkOption {
27       type = types.str;
28       default = "/var/lib/rstudio-server";
29       description = lib.mdDoc ''
30         Default working directory for server (server-working-dir in rserver.conf).
31       '';
32     };
34     listenAddr = mkOption {
35       type = types.str;
36       default = "127.0.0.1";
37       description = lib.mdDoc ''
38         Address to listen on (www-address in rserver.conf).
39       '';
40     };
42     package = mkOption {
43       type = types.package;
44       default = pkgs.rstudio-server;
45       defaultText = literalExpression "pkgs.rstudio-server";
46       example = literalExpression "pkgs.rstudioServerWrapper.override { packages = [ pkgs.rPackages.ggplot2 ]; }";
47       description = lib.mdDoc ''
48         Rstudio server package to use. Can be set to rstudioServerWrapper to provide packages.
49       '';
50     };
52     rserverExtraConfig = mkOption {
53       type = types.str;
54       default = "";
55       description = lib.mdDoc ''
56         Extra contents for rserver.conf.
57       '';
58     };
60     rsessionExtraConfig = mkOption {
61       type = types.str;
62       default = "";
63       description = lib.mdDoc ''
64         Extra contents for resssion.conf.
65       '';
66     };
68   };
70   config = mkIf cfg.enable
71     {
72       systemd.services.rstudio-server = {
73         description = "Rstudio server";
75         after = [ "network.target" ];
76         wantedBy = [ "multi-user.target" ];
77         restartTriggers = [ rserver-conf rsession-conf ];
79         serviceConfig = {
80           Restart = "on-failure";
81           Type = "forking";
82           ExecStart = "${cfg.package}/bin/rserver";
83           StateDirectory = "rstudio-server";
84           RuntimeDirectory = "rstudio-server";
85         };
86       };
88       environment.etc = {
89         "rstudio/rserver.conf".source = rserver-conf;
90         "rstudio/rsession.conf".source = rsession-conf;
91         "pam.d/rstudio".source = "/etc/pam.d/login";
92       };
93       environment.systemPackages = [ cfg.package ];
95       users = {
96         users.rstudio-server = {
97           uid = config.ids.uids.rstudio-server;
98           description = "rstudio-server";
99           group = "rstudio-server";
100         };
101         groups.rstudio-server = {
102           gid = config.ids.gids.rstudio-server;
103         };
104       };
106     };