{ config, lib, ... }: let tailscale_data_directory = "/var/lib/tailscale"; in { options = { services.tailscale.impermanence.enable = lib.mkOption { type = lib.types.bool; default = config.services.tailscale.enable && config.storage.impermanence.enable; }; }; config = lib.mkIf config.services.tailscale.enable ( lib.mkMerge [ (lib.mkIf config.storage.zfs.enable (lib.mkMerge [ { # Tailscale needs persistent storage for keys and configuration } (lib.mkIf (!config.services.tailscale.impermanence.enable) { # TODO: placeholder to configure a unique dataset for this service }) (lib.mkIf config.services.tailscale.impermanence.enable { storage.impermanence.datasets."persist/system/root" = { directories."${tailscale_data_directory}" = { enable = true; owner.name = "root"; group.name = "root"; }; }; }) ])) ] ); }