{
  lib,
  config,
  namespace,
  pkgs,
  inputs,
  ...
}:
let
  inherit (lib) mkIf;
  inherit (lib.${namespace}) mkEnableModule;

  cfg = config.${namespace}.programs.amfora;
  inherit (config.${namespace}) theme;

  themeFiles = {
    rose-pine = "${inputs.rose-pine-amfora}/themes/rose-pine.toml";
  };

  themeFile = themeFiles.${theme.colors.base};
in
{
  options = mkEnableModule "programs.amfora";

  config = mkIf cfg.enable {
    home.packages = with pkgs; [
      amfora
    ];

    xdg.configFile."amfora/theme.toml".source = "${themeFile}";

    # https://github.com/makeworld-the-better-one/amfora/blob/master/default-config.toml
    # Amfora requires a number of options to run - omitting everything I didn't
    # care to customize resulted in go panic errors.
    xdg.configFile."amfora/config.toml".text = # toml
      ''
        include = "./theme.toml"

        [a-general]
        # Defaults {{{
        home = "gemini://geminiprotocol.net"
        auto_redirect = false
        http = 'default'
        search = "gemini://geminispace.info/search"
        color = true
        ansi = true
        highlight_code = true
        bullets = true
        show_link = false
        max_width = 80
        downloads = '''
        page_max_size = 2097152 # 2 MiB
        page_max_time = 10
        scrollbar = "auto"
        underline = true
        # }}}

        highlight_style = "${theme.colors.base}"

        # Defaults {{{
        [auth]

        [auth.certs]

        [auth.keys]

        [keybindings]

        [url-handlers]
        other = 'default'

        [url-prompts]

        [cache]
        max_size = 0
        max_pages = 30
        timeout = 1800

        [proxies]

        [subscriptions]
        popup = true
        update_interval = 1800
        workers = 3
        entries_per_page = 20
        header = true

        [theme]
        # }}}
      '';
  };
}