grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / virtualisation / proxmox-lxc.nix
blobb2f9d0635fd165467ef6d5c91862ccd33f9e3fa6
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
8 with lib;
11   options.proxmoxLXC = {
12     enable = mkOption {
13       default = true;
14       type = types.bool;
15       description = "Whether to enable the Proxmox VE LXC module.";
16     };
17     privileged = mkOption {
18       type = types.bool;
19       default = false;
20       description = ''
21         Whether to enable privileged mounts
22       '';
23     };
24     manageNetwork = mkOption {
25       type = types.bool;
26       default = false;
27       description = ''
28         Whether to manage network interfaces through nix options
29         When false, systemd-networkd is enabled to accept network
30         configuration from proxmox.
31       '';
32     };
33     manageHostName = mkOption {
34       type = types.bool;
35       default = false;
36       description = ''
37         Whether to manage hostname through nix options
38         When false, the hostname is picked up from /etc/hostname
39         populated by proxmox.
40       '';
41     };
42   };
44   config =
45     let
46       cfg = config.proxmoxLXC;
47     in
48     mkIf cfg.enable {
49       system.build.tarball = pkgs.callPackage ../../lib/make-system-tarball.nix {
50         storeContents = [
51           {
52             object = config.system.build.toplevel;
53             symlink = "none";
54           }
55         ];
57         contents = [
58           {
59             source = config.system.build.toplevel + "/init";
60             target = "/sbin/init";
61           }
62         ];
64         extraCommands = "mkdir -p root etc/systemd/network";
65       };
67       boot.postBootCommands = ''
68         # After booting, register the contents of the Nix store in the Nix
69         # database.
70         if [ -f /nix-path-registration ]; then
71           ${config.nix.package.out}/bin/nix-store --load-db < /nix-path-registration &&
72           rm /nix-path-registration
73         fi
75         # nixos-rebuild also requires a "system" profile
76         ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system
77       '';
79       boot = {
80         isContainer = true;
81         loader.initScript.enable = true;
82       };
84       console.enable = true;
86       networking = mkIf (!cfg.manageNetwork) {
87         useDHCP = false;
88         useHostResolvConf = false;
89         useNetworkd = true;
90         # pick up hostname from /etc/hostname generated by proxmox
91         hostName = mkIf (!cfg.manageHostName) (mkForce "");
92       };
94       # unprivileged LXCs can't set net.ipv4.ping_group_range
95       security.wrappers.ping = mkIf (!cfg.privileged) {
96         owner = "root";
97         group = "root";
98         capabilities = "cap_net_raw+p";
99         source = "${pkgs.iputils.out}/bin/ping";
100       };
102       services.openssh = {
103         enable = mkDefault true;
104         startWhenNeeded = mkDefault true;
105       };
107       systemd = {
108         mounts = mkIf (!cfg.privileged) [
109           {
110             enable = false;
111             where = "/sys/kernel/debug";
112           }
113         ];
115         # By default only starts getty on tty0 but first on LXC is tty1
116         services."autovt@".unitConfig.ConditionPathExists = [
117           ""
118           "/dev/%I"
119         ];
121         # These are disabled by `console.enable` but console via tty is the default in Proxmox
122         services."getty@tty1".enable = lib.mkForce true;
123         services."autovt@".enable = lib.mkForce true;
124       };
126     };