1{ lib, pkgs, ... }:
2{
3 name = "livebook-service";
4
5 nodes = {
6 machine =
7 { config, pkgs, ... }:
8 {
9 imports = [
10 ./common/user-account.nix
11 ];
12
13 services.livebook = {
14 enableUserService = true;
15 environment = {
16 LIVEBOOK_PORT = 20123;
17 };
18 environmentFile = pkgs.writeText "livebook.env" ''
19 LIVEBOOK_PASSWORD = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
20 '';
21 };
22 };
23 };
24
25 testScript =
26 { nodes, ... }:
27 let
28 user = nodes.machine.users.users.alice;
29 sudo = lib.concatStringsSep " " [
30 "XDG_RUNTIME_DIR=/run/user/${toString user.uid}"
31 "sudo"
32 "--preserve-env=XDG_RUNTIME_DIR"
33 "-u"
34 "alice"
35 ];
36 in
37 ''
38 machine.wait_for_unit("multi-user.target")
39
40 machine.succeed("loginctl enable-linger alice")
41 machine.wait_until_succeeds("${sudo} systemctl --user is-active livebook.service")
42 machine.wait_for_open_port(20123, timeout=10)
43
44 machine.succeed("curl -L localhost:20123 | grep 'Type password'")
45 '';
46}