diff --git a/flake.nix b/flake.nix index bac3657..a00c41b 100755 --- a/flake.nix +++ b/flake.nix @@ -65,7 +65,6 @@ # Raspberry Pi 4B. (mkHost "weebill" { suite = "server"; - docker = true; platform = "aarch64-linux"; hostModules = [ nixos-hardware.nixosModules.raspberry-pi-4 @@ -75,19 +74,16 @@ # VM running docker containers. (mkHost "docker" { suite = "server/vm"; - docker = true; }) # VM running a Minecraft server. (mkHost "minecraft" { suite = "server/vm"; - docker = true; }) # VM running a Musicbrainz mirror + lidarr metadata server. (mkHost "musicbrainz" { suite = "server/vm"; - docker = true; }) # VM for managing flock. diff --git a/helpers.nix b/helpers.nix index 65206b9..3e7d152 100644 --- a/helpers.nix +++ b/helpers.nix @@ -10,7 +10,6 @@ with inputs.nixpkgs.lib; { mkHost = hostname: { platform ? "x86_64-linux", suite ? "", - docker ? false, hostModules ? [], }: let # Secrets directory. @@ -97,7 +96,6 @@ with inputs.nixpkgs.lib; { } ] ++ hostModules # Host-specific modules. - ++ optionals (docker == true) [./suites/server/docker] # Enable docker if required. ++ (filesystem.listFilesRecursive ./modules); # Custom modules. }; } diff --git a/hosts/docker/default.nix b/hosts/docker/default.nix index c1ebcdd..fd5b3d4 100644 --- a/hosts/docker/default.nix +++ b/hosts/docker/default.nix @@ -34,4 +34,9 @@ }; users.users.fern.extraGroups = ["media"]; + + flock.docker = { + enable = true; + dockerMount = true; + }; } diff --git a/hosts/minecraft/default.nix b/hosts/minecraft/default.nix index 2c63c08..965fea0 100644 --- a/hosts/minecraft/default.nix +++ b/hosts/minecraft/default.nix @@ -1,2 +1,6 @@ { + flock.docker = { + enable = true; + dockerMount = true; + }; } diff --git a/hosts/musicbrainz/default.nix b/hosts/musicbrainz/default.nix index a5d8ab9..a78b952 100644 --- a/hosts/musicbrainz/default.nix +++ b/hosts/musicbrainz/default.nix @@ -20,4 +20,9 @@ User = "fern"; }; }; + + flock.docker = { + enable = true; + dockerMount = true; + }; } diff --git a/hosts/muskduck/default.nix b/hosts/muskduck/default.nix index aef03cb..f1aef9f 100644 --- a/hosts/muskduck/default.nix +++ b/hosts/muskduck/default.nix @@ -66,4 +66,8 @@ with lib; { enable = true; openFirewall = true; }; + + flock.docker = { + enable = true; + }; } diff --git a/hosts/weebill/default.nix b/hosts/weebill/default.nix index c9b0c74..aa481bf 100644 --- a/hosts/weebill/default.nix +++ b/hosts/weebill/default.nix @@ -118,4 +118,8 @@ allowedUDPPorts = [53 67]; # DHCP server. allowedTCPPorts = [8080 548 80 7125]; # WebOne, Netatalk, nginx, moonraker. }; + + flock.docker = { + enable = true; + }; } diff --git a/modules/docker/default.nix b/modules/docker/default.nix new file mode 100644 index 0000000..795bc6f --- /dev/null +++ b/modules/docker/default.nix @@ -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"; + }; + }; +} diff --git a/suites/server/docker/default.nix b/suites/server/docker/default.nix deleted file mode 100644 index 90d3675..0000000 --- a/suites/server/docker/default.nix +++ /dev/null @@ -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; - } - ]; - }; - }; -}