# # home-manager podman module v.s. podman shell script
#
# ## home-manager podman module
#
# - Cons:
#   - Need network-online.target, which is not request in nixos module.
#   - It is hard to customize the StartExec as it is generated by podman-user-generator,
#     - E.g. I want to remove the -d (detach) arguments.
#   - Systemd service is hard to debug. I can not directly run it like a script and inspect the output
#     - (which need journalctl, which is unnecessary abstraction)
# 
# In home-manager podman module: how ~/.config/systemd/user/podman-hermes.service is generated
#
# - services.podman.containers.hermes = {}
# - <home-manager>/modules/services/podman-linux/containers.nix: services.podman.internal.quadletDefinitions
# - <home-manager>/modules/services/podman-linux/install-quadlet.nix: builtQuadlets = map buildPodmanQuadlet cfg.internal.quadletDefinitions;
#   - ${cfg.package}/lib/systemd/user-generators/podman-user-generator $out/units
#     Convert *.container (quadlet file) to *.service (systemd service file)
#
# ## podman shell script
#
# - Pros:
#   - Simple and explicit
let
  pkgs = import <nixpkgs> {};
in pkgs.writeShellScript "container.sh" ''
  CONTAINER_HOME=${builtins.getEnv "HOME"}/.local/state/hermes-container
  CONTAINER_USER=hermes-container
  mkdir -p $CONTAINER_HOME/usr
  mkdir -p $CONTAINER_HOME/tmp
  mkdir -p $CONTAINER_HOME/$CONTAINER_USER
  CONTAINER_ROOT=${import ./build-env.nix}

  NIX_PROFILES=${builtins.getEnv "HOME"}/.local/state/hermes-container-nix-profiles
  mkdir -p $NIX_PROFILES

  # Run without -it: this is a systemd-managed service, not an interactive
  # terminal session, so non-interactive stdio/signal behavior is preferred.
  ${pkgs.podman}/bin/podman run \
    --name hermes-container \
    --rm --replace \
    -v $CONTAINER_ROOT/bin/:/bin \
    -v $CONTAINER_ROOT/bin/:/usr/bin \
    -v $CONTAINER_ROOT/lib/:/lib \
    -v $CONTAINER_ROOT/libexec/:/libexec \
    -v $CONTAINER_ROOT/share/:/share \
    -v /nix/:/nix \
    -v $NIX_PROFILES:/nix/var/nix/profiles/ \
    --env HOME=/$CONTAINER_USER \
    --env PATH=/bin:/$CONTAINER_USER/.nix-profile/bin \
    --env NIX_PATH=nixpkgs=${<nixpkgs>}:home-manager=${<home-manager>} \
    --env SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt \
    --env NIX_SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt \
    --env REQUESTS_CA_BUNDLE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt \
    --env HTTPS_PROXY="http://127.0.0.1:8889" \
    --env HTTP_PROXY="http://127.0.0.1:8889" \
    --env FTP_PROXY="http://127.0.0.1:8889" \
    --env http_proxy="http://127.0.0.1:8889" \
    --env https_proxy="http://127.0.0.1:8889" \
    --env ftp_proxy="http://127.0.0.1:8889" \
    --env-file=${builtins.getEnv "HOME"}/.hermes/.env \
    --network=host \
    --rootfs $CONTAINER_HOME start-hermes
''