1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.virtualisation.multipass;
10in
11{
12 options = {
13 virtualisation.multipass = {
14 enable = lib.mkEnableOption "Multipass, a simple manager for virtualised Ubuntu instances";
15
16 logLevel = lib.mkOption {
17 type = lib.types.enum [
18 "error"
19 "warning"
20 "info"
21 "debug"
22 "trace"
23 ];
24 default = "debug";
25 description = ''
26 The logging verbosity of the multipassd binary.
27 '';
28 };
29
30 package = lib.mkPackageOption pkgs "multipass" { };
31 };
32 };
33
34 config = lib.mkIf cfg.enable {
35 environment.systemPackages = [ cfg.package ];
36
37 systemd.services.multipass = {
38 description = "Multipass orchestrates virtual Ubuntu instances.";
39
40 wantedBy = [ "multi-user.target" ];
41 wants = [ "network-online.target" ];
42 after = [ "network-online.target" ];
43
44 environment = {
45 "XDG_DATA_HOME" = "/var/lib/multipass/data";
46 "XDG_CACHE_HOME" = "/var/lib/multipass/cache";
47 "XDG_CONFIG_HOME" = "/var/lib/multipass/config";
48 };
49
50 serviceConfig = {
51 ExecStart = "${cfg.package}/bin/multipassd --logger platform --verbosity ${cfg.logLevel}";
52 SyslogIdentifier = "multipassd";
53 Restart = "on-failure";
54 TimeoutStopSec = 300;
55 Type = "simple";
56
57 WorkingDirectory = "/var/lib/multipass";
58
59 StateDirectory = "multipass";
60 StateDirectoryMode = "0750";
61 CacheDirectory = "multipass";
62 CacheDirectoryMode = "0750";
63 };
64 };
65 };
66}