summary refs log tree commit diff
path: root/nixos/modules/services/development/rstudio-server/default.nix
blob: cd903c7e55bfc4b3e636634da949976b1559782b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{ config, lib, pkgs, ... }:

with lib;

let

  cfg = config.services.rstudio-server;

  rserver-conf = builtins.toFile "rserver.conf" ''
    server-working-dir=${cfg.serverWorkingDir}
    www-address=${cfg.listenAddr}
    ${cfg.rserverExtraConfig}
  '';

  rsession-conf = builtins.toFile "rsession.conf" ''
    ${cfg.rsessionExtraConfig}
  '';

in
{
  meta.maintainers = with maintainers; [ jbedo cfhammill ];

  options.services.rstudio-server = {
    enable = mkEnableOption "RStudio server";

    serverWorkingDir = mkOption {
      type = types.str;
      default = "/var/lib/rstudio-server";
      description = ''
        Default working directory for server (server-working-dir in rserver.conf).
      '';
    };

    listenAddr = mkOption {
      type = types.str;
      default = "127.0.0.1";
      description = ''
        Address to listen on (www-address in rserver.conf).
      '';
    };

    package = mkOption {
      type = types.package;
      default = pkgs.rstudio-server;
      defaultText = literalExpression "pkgs.rstudio-server";
      example = literalExpression "pkgs.rstudioServerWrapper.override { packages = [ pkgs.rPackages.ggplot2 ]; }";
      description = ''
        Rstudio server package to use. Can be set to rstudioServerWrapper to provide packages.
      '';
    };

    rserverExtraConfig = mkOption {
      type = types.str;
      default = "";
      description = ''
        Extra contents for rserver.conf.
      '';
    };

    rsessionExtraConfig = mkOption {
      type = types.str;
      default = "";
      description = ''
        Extra contents for resssion.conf.
      '';
    };

  };

  config = mkIf cfg.enable
    {
      systemd.services.rstudio-server = {
        description = "Rstudio server";

        after = [ "network.target" ];
        wantedBy = [ "multi-user.target" ];
        restartTriggers = [ rserver-conf rsession-conf ];

        serviceConfig = {
          Restart = "on-failure";
          Type = "forking";
          ExecStart = "${cfg.package}/bin/rserver";
          StateDirectory = "rstudio-server";
          RuntimeDirectory = "rstudio-server";
        };
      };

      environment.etc = {
        "rstudio/rserver.conf".source = rserver-conf;
        "rstudio/rsession.conf".source = rsession-conf;
        "pam.d/rstudio".source = "/etc/pam.d/login";
      };
      environment.systemPackages = [ cfg.package ];

      users = {
        users.rstudio-server = {
          uid = config.ids.uids.rstudio-server;
          description = "rstudio-server";
          group = "rstudio-server";
        };
        groups.rstudio-server = {
          gid = config.ids.gids.rstudio-server;
        };
      };

    };
}