Add docker module

This commit is contained in:
Fern Garden 2025-09-15 12:37:51 +08:00
parent 7cbf708ecf
commit a8f637704a
9 changed files with 68 additions and 34 deletions

View file

@ -65,7 +65,6 @@
# Raspberry Pi 4B. # Raspberry Pi 4B.
(mkHost "weebill" { (mkHost "weebill" {
suite = "server"; suite = "server";
docker = true;
platform = "aarch64-linux"; platform = "aarch64-linux";
hostModules = [ hostModules = [
nixos-hardware.nixosModules.raspberry-pi-4 nixos-hardware.nixosModules.raspberry-pi-4
@ -75,19 +74,16 @@
# VM running docker containers. # VM running docker containers.
(mkHost "docker" { (mkHost "docker" {
suite = "server/vm"; suite = "server/vm";
docker = true;
}) })
# VM running a Minecraft server. # VM running a Minecraft server.
(mkHost "minecraft" { (mkHost "minecraft" {
suite = "server/vm"; suite = "server/vm";
docker = true;
}) })
# VM running a Musicbrainz mirror + lidarr metadata server. # VM running a Musicbrainz mirror + lidarr metadata server.
(mkHost "musicbrainz" { (mkHost "musicbrainz" {
suite = "server/vm"; suite = "server/vm";
docker = true;
}) })
# VM for managing flock. # VM for managing flock.

View file

@ -10,7 +10,6 @@ with inputs.nixpkgs.lib; {
mkHost = hostname: { mkHost = hostname: {
platform ? "x86_64-linux", platform ? "x86_64-linux",
suite ? "", suite ? "",
docker ? false,
hostModules ? [], hostModules ? [],
}: let }: let
# Secrets directory. # Secrets directory.
@ -97,7 +96,6 @@ with inputs.nixpkgs.lib; {
} }
] ]
++ hostModules # Host-specific modules. ++ hostModules # Host-specific modules.
++ optionals (docker == true) [./suites/server/docker] # Enable docker if required.
++ (filesystem.listFilesRecursive ./modules); # Custom modules. ++ (filesystem.listFilesRecursive ./modules); # Custom modules.
}; };
} }

View file

@ -34,4 +34,9 @@
}; };
users.users.fern.extraGroups = ["media"]; users.users.fern.extraGroups = ["media"];
flock.docker = {
enable = true;
dockerMount = true;
};
} }

View file

@ -1,2 +1,6 @@
{ {
flock.docker = {
enable = true;
dockerMount = true;
};
} }

View file

@ -20,4 +20,9 @@
User = "fern"; User = "fern";
}; };
}; };
flock.docker = {
enable = true;
dockerMount = true;
};
} }

View file

@ -66,4 +66,8 @@ with lib; {
enable = true; enable = true;
openFirewall = true; openFirewall = true;
}; };
flock.docker = {
enable = true;
};
} }

View file

@ -118,4 +118,8 @@
allowedUDPPorts = [53 67]; # DHCP server. allowedUDPPorts = [53 67]; # DHCP server.
allowedTCPPorts = [8080 548 80 7125]; # WebOne, Netatalk, nginx, moonraker. allowedTCPPorts = [8080 548 80 7125]; # WebOne, Netatalk, nginx, moonraker.
}; };
flock.docker = {
enable = true;
};
} }

View file

@ -0,0 +1,46 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.flock.docker;
in {
options = {
flock.docker = {
enable = mkEnableOption "Enable Docker";
dockerMount = mkEnableOption "Mount disk as Docker directory";
};
};
config =
mkIf cfg.enable
{
# Add user to docker group.
users.users.fern = {
extraGroups = ["docker"];
};
# Enable docker.
virtualisation.docker = {
enable = true;
autoPrune.enable = true;
liveRestore = true;
daemon.settings = {
data-root = "/home/fern/docker/daemon";
default-address-pools = [
{
base = "172.20.0.0/12";
size = 24;
}
];
};
};
# Docker data directory
fileSystems."/home/fern/docker" = mkIf (cfg.dockerMount) {
device = "/dev/disk/by-label/docker";
fsType = "ext4";
};
};
}

View file

@ -1,28 +0,0 @@
{
# Docker data directory
fileSystems."/home/fern/docker" = {
device = "/dev/disk/by-label/docker";
fsType = "ext4";
};
# Add user to docker group.
users.users.fern = {
extraGroups = ["docker"];
};
# Enable docker.
virtualisation.docker = {
enable = true;
autoPrune.enable = true;
liveRestore = true;
daemon.settings = {
data-root = "/home/fern/docker/daemon";
default-address-pools = [
{
base = "172.20.0.0/12";
size = 24;
}
];
};
};
}