{
  config,
  pkgs,
  ...
}: let
  gpgConfigFile = "gnupg/gpg.conf";
  agentConfigFile = "gnupg/gpg-agent.conf";
in {
  users.users.someone.packages = with pkgs; [
    gnupg
    pinentry-gnome3
  ];

  xdg.configFile = {
    "${gpgConfigFile}".text = ''
      cert-digest-algo SHA512
      charset utf-8
      default-key 0F8835ED078FDBF2
      default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
      fixed-list-mode
      keyid-format 0xlong
      list-options show-uid-validity
      no-comments
      no-emit-version
      no-symkey-cache
      personal-cipher-preferences AES256 AES192 AES
      personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed
      personal-digest-preferences SHA512 SHA384 SHA256
      require-cross-certification
      s2k-cipher-algo AES256
      s2k-digest-algo SHA512
      use-agent
      verify-options show-uid-validity
      with-fingerprint
    '';
    "${agentConfigFile}".text = ''
      enable-ssh-support
      grab
      pinentry-program ${pkgs.pinentry-gnome3}/bin/pinentry-curses
    '';
    "fish/conf.d/gpg.fish".source = pkgs.writeText "gpg.fish" ''
      set -gx GPG_TTY (tty)
      ${pkgs.gnupg}/bin/gpg-connect-agent --quiet updatestartuptty /bye >/dev/null
    '';
  };

  environment.sessionVariables = {
    GPG_TTY = "$(tty)";
    SSH_AUTH_SOCK = "${config.xdg.runtimeDir}/gnupg/S.gpg-agent.ssh";
  };
}
