1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.rstudio-server;
8
9 rserver-conf = builtins.toFile "rserver.conf" ''
10 server-working-dir=${cfg.serverWorkingDir}
11 www-address=${cfg.listenAddr}
12 ${cfg.rserverExtraConfig}
13 '';
14
15 rsession-conf = builtins.toFile "rsession.conf" ''
16 ${cfg.rsessionExtraConfig}
17 '';
18
19in
20{
21 meta.maintainers = with maintainers; [ jbedo cfhammill ];
22
23 options.services.rstudio-server = {
24 enable = mkEnableOption (lib.mdDoc "RStudio server");
25
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 };
33
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 };
41
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 };
51
52 rserverExtraConfig = mkOption {
53 type = types.str;
54 default = "";
55 description = lib.mdDoc ''
56 Extra contents for rserver.conf.
57 '';
58 };
59
60 rsessionExtraConfig = mkOption {
61 type = types.str;
62 default = "";
63 description = lib.mdDoc ''
64 Extra contents for resssion.conf.
65 '';
66 };
67
68 };
69
70 config = mkIf cfg.enable
71 {
72 systemd.services.rstudio-server = {
73 description = "Rstudio server";
74
75 after = [ "network.target" ];
76 wantedBy = [ "multi-user.target" ];
77 restartTriggers = [ rserver-conf rsession-conf ];
78
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 };
87
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 ];
94
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 };
105
106 };
107}