nixos/preload: init
[NixPkgs.git] / nixos / modules / services / development / lorri.nix
blob74f56f5890fce9054b32ffc0d42dd4fc4f323cd5
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.lorri;
5   socketPath = "lorri/daemon.socket";
6 in {
7   options = {
8     services.lorri = {
9       enable = lib.mkOption {
10         default = false;
11         type = lib.types.bool;
12         description = lib.mdDoc ''
13           Enables the daemon for `lorri`, a nix-shell replacement for project
14           development. The socket-activated daemon starts on the first request
15           issued by the `lorri` command.
16         '';
17       };
18       package = lib.mkOption {
19         default = pkgs.lorri;
20         type = lib.types.package;
21         description = lib.mdDoc ''
22           The lorri package to use.
23         '';
24         defaultText = lib.literalExpression "pkgs.lorri";
25       };
26     };
27   };
29   config = lib.mkIf cfg.enable {
30     systemd.user.sockets.lorri = {
31       description = "Socket for Lorri Daemon";
32       wantedBy = [ "sockets.target" ];
33       socketConfig = {
34         ListenStream = "%t/${socketPath}";
35         RuntimeDirectory = "lorri";
36       };
37     };
39     systemd.user.services.lorri = {
40       description = "Lorri Daemon";
41       requires = [ "lorri.socket" ];
42       after = [ "lorri.socket" ];
43       path = with pkgs; [ config.nix.package git gnutar gzip ];
44       serviceConfig = {
45         ExecStart = "${cfg.package}/bin/lorri daemon";
46         PrivateTmp = true;
47         ProtectSystem = "strict";
48         ProtectHome = "read-only";
49         Restart = "on-failure";
50       };
51     };
53     environment.systemPackages = [ cfg.package pkgs.direnv ];
54   };