{
  options,
  config,
  lib,
  ...
}:
with lib;
with lib.frajul; let
  cfg = config.services.arion.terraria.vanilla;
in {
  options.services.arion.terraria.vanilla = with types; {
    enable = mkBoolOpt false "";
  };

  config = mkIf cfg.enable {
    virtualisation.arion.enable = true;
    virtualisation.arion.projects.terraria-vanilla.settings = {
      project.name = "vanilla";
      services.terraria.service = {
        image = "ryshe/terraria:latest";
        environment = {
          WORLD_FILENAME = "world.wld";
          CONFIGPATH = "config.json";
        };
        ports = [
          "7777:7777"
        ];
        volumes = [
          "/home/${config.user.name}/.local/share/terraria/vanilla/worlds:/root/.local/share/Terraria/Worlds"
        ];
        # For the first run you will need to generate a new world with a size where: 1 = Small, 2=Medium, 3=Large
        command = [
          "-autocreate"
          "2"
        ];
      };
      services.ngrok.service = {
        image = "ngrok/ngrok";
        env_file = ["${config.sops.secrets."ngrok/terraria".path}"];
        command = ["tcp" "terraria:7777"];
      };
    };

    home.persist.directories = [
      ".local/share/terraria/vanilla/worlds"
    ];
  };
}
