modularized all the things

part one (?)
This commit is contained in:
2024-12-15 18:22:36 -05:00
parent d8a9e92dff
commit adabefd821
15 changed files with 848 additions and 45 deletions

View File

@ -0,0 +1,51 @@
# Virtualization modules
This directory houses all virtualization and container related enablement. Cloud native anyone??
## Hardware virtualization
This is for running virtual machines on the bare metal.
All that's needed to get this working to import the `./hardware.nix` into your machine's configuration.
## Docker (OCI containers)
This is for running the Docker runtime (rootful or rootless, rootful by default) to run OCI containers.
All that's needed to get this working to import the `./docker.nix` into your machine's configuration.
Note: I don't use Docker too much as I use Podman for development. I'd check the Podman documentation.
## Podman/Buildah (OCI containers)
This is for running the Podman runtime (rootless) to run OCI containers.
You will need to import `./podman.nix` into your machine configuration. Additionally, there's some added configuration to suit your needs.
Example:
```nix
podman = {
podman = {
enable = true;
extraPackages = with pkgs; [
docker-credential-helpers
toolbox
cosign
crane
podman-tui
podman-desktop
];
};
};
```
To get a full, comprehensive list of what you can do with the podman module, please check out (podman.nix)[./podman.nix]!
## Kubernetes
Coming soon!
## LXC/LXD
I don't have anything in the way of a nix configuration for LXC/LXD as I don't have a use-case for them. Come back later!

View File

@ -2,5 +2,6 @@
virtualisation.docker = {
enable = true;
enableOnBoot = true;
rootless = false;
};
}

View File

@ -1,7 +1,39 @@
{...}: {
virtualisation.podman = {
enable = true;
dockerSocket.enable = true;
defaultNetwork.settings.dns_enabled = true;
{
config,
lib,
pkgs,
...
}: let
cfg = config.containers;
in {
options.containers = {
podman = {
enable = lib.mkEnableOption "Podman container runtime";
dockerCompat = lib.mkEnableOption "Enable Docker compatibility";
extraPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = "Additional packages to install when Podman is enabled";
};
};
};
config = lib.mkIf cfg.podman.enable {
virtualisation.podman = {
enable = true;
dockerCompat = cfg.podman.dockerCompat;
enableOnBoot = true;
defaultNetwork.settings.dns_enabled = true;
};
environment.systemPackages =
[
pkgs.podman-compose
pkgs.buildah
pkgs.skopeo
pkgs.dive
pkgs.container-diff
]
++ cfg.podman.extraPackages;
};
}