{ pkgs, ... }: let vars = import ./vars.nix; in { virtualisation.docker.daemon.settings."data-root" = "${vars.containers}/docker"; # nixos-container hardcodes its state directory to /var/lib/nixos-containers, # so route it to the shared container dataset with a bind mount. fileSystems."/var/lib/nixos-containers" = { device = "${vars.containers}/nixos-containers"; fsType = "none"; options = [ "bind" ]; }; systemd.services = { prepare-docker-storage = { description = "Create Docker storage directory"; requiredBy = [ "docker.service" ]; before = [ "docker.service" ]; requires = [ "zfs-mount.service" ]; after = [ "zfs-mount.service" ]; path = [ pkgs.coreutils pkgs.util-linux ]; unitConfig = { DefaultDependencies = false; RequiresMountsFor = [ "/nix" ]; }; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' mountpoint -q ${vars.containers} install -d -m 0710 ${vars.containers}/docker ''; }; prepare-nixos-container-storage = { description = "Create NixOS container storage directory"; requiredBy = [ "var-lib-nixos\\x2dcontainers.mount" ]; before = [ "var-lib-nixos\\x2dcontainers.mount" ]; requires = [ "zfs-mount.service" ]; after = [ "zfs-mount.service" ]; path = [ pkgs.coreutils pkgs.util-linux ]; unitConfig = { DefaultDependencies = false; RequiresMountsFor = [ "/nix" ]; }; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' mountpoint -q ${vars.containers} install -d -m 0755 ${vars.containers}/nixos-containers ''; }; }; }