{ user ? throw "user argument is required", home ? throw "home argument is required", rootless ? true, }: { config, lib, pkgs, ... }: lib.mkMerge ( [ { virtualisation.docker.rootless = { enable = rootless; setSocketVariable = true; enableOnBoot = false; storageDriver = "btrfs"; daemon.settings = { experimental = true; ipv6 = true; fixed-cidr-v6 = "fd00::/80"; }; autoPrune = { enable = true; flags = [ "--all" ]; }; }; home-manager.users.${user}.home = { packages = with pkgs; [ docker-compose ]; sessionVariables = { DOCKER_CONFIG = "${home}/.config/docker"; }; }; } ] ++ (lib.lists.optional rootless { environment.persistence."/persist"."${home}/.local/share/docker" = { }; systemd.user = { services.docker.after = [ config.environment.persistence."/persist"."${home}/.local/share/docker".mount ]; sockets.docker.after = [ config.environment.persistence."/persist"."${home}/.local/share/docker".mount ]; }; }) ++ (lib.lists.optional (!rootless) { users.users.${user}.extraGroups = [ "docker" ]; }) )