Add virtualisation lib
This commit is contained in:
@ -7,4 +7,5 @@
|
|||||||
nixos = import ./nixos.nix {inherit inputs pkgs lib;};
|
nixos = import ./nixos.nix {inherit inputs pkgs lib;};
|
||||||
modules = import ./modules.nix {inherit inputs pkgs lib;};
|
modules = import ./modules.nix {inherit inputs pkgs lib;};
|
||||||
networking = import ./networking.nix {inherit inputs pkgs lib;};
|
networking = import ./networking.nix {inherit inputs pkgs lib;};
|
||||||
|
virtualisation = import ./virtualisation.nix {inherit inputs pkgs lib;};
|
||||||
}
|
}
|
||||||
|
52
lib/virtualisation.nix
Normal file
52
lib/virtualisation.nix
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: rec {
|
||||||
|
mkOciContainer = {
|
||||||
|
image,
|
||||||
|
autoStart ? false,
|
||||||
|
id-ports ? [],
|
||||||
|
ports ? [],
|
||||||
|
vols ? [],
|
||||||
|
env ? {},
|
||||||
|
opts ? [],
|
||||||
|
netns ? "",
|
||||||
|
netdns ? "",
|
||||||
|
}: let
|
||||||
|
expanded-id-ports = map (port: "${toString port}:${toString port}") id-ports;
|
||||||
|
additional-opts =
|
||||||
|
[]
|
||||||
|
++ (lib.optionals (netns != "") [
|
||||||
|
"--network=ns:/var/run/netns/${netns}"
|
||||||
|
])
|
||||||
|
++ (lib.optionals (netdns != "") [
|
||||||
|
"--dns=${netdns}"
|
||||||
|
]);
|
||||||
|
in {
|
||||||
|
image = image;
|
||||||
|
autoStart = autoStart;
|
||||||
|
ports = ports ++ expanded-id-ports;
|
||||||
|
volumes = vols;
|
||||||
|
environment = lib.mergeAttrs env {
|
||||||
|
PUID = "1000";
|
||||||
|
PGID = "1000";
|
||||||
|
TZ = "Europe/Berlin";
|
||||||
|
};
|
||||||
|
extraOptions = opts ++ additional-opts;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Filter all system service attributes that the user units don't have and add some required attributes
|
||||||
|
# Example: podman-stablediffusion = mkOciUserService config.systemd.services.podman-stablediffusion;
|
||||||
|
# NOTE: This doesn't work, since the cidfile is located in /run, which is not writable for regular users...
|
||||||
|
mkOciUserService = attrs:
|
||||||
|
lib.mergeAttrs (lib.attrsets.filterAttrs (n: v:
|
||||||
|
!((n == "confinement")
|
||||||
|
|| (n == "runner")
|
||||||
|
|| (n == "environment")))
|
||||||
|
attrs) {
|
||||||
|
startLimitIntervalSec = 1;
|
||||||
|
startLimitBurst = 5;
|
||||||
|
};
|
||||||
|
}
|
Reference in New Issue
Block a user