{ inputs, config, lib, pkgs, ... }:
{
  options.chimera.users.minion.enable = lib.mkEnableOption "Enable Chimera options for minion";

  config = lib.mkIf config.chimera.users.minion.enable (let
    git_emails = {
      personal = "sky@a.starrysky.fyi";
      collabora = "skyler.grey@collabora.com";
      transplace = "minion@trans.gg";
      clicks = "minion@clicks.codes";
    };

    git_email_to_include_option = name: email: {
      condition = "gitdir:~/Code/${name}/";
      contents.user.email = email;
    };

    git_email_to_alias_value = email: "config user.email ${email}";
  in {
    chimera.shell.rebuildFlakePath = "/home/${config.home.username}/Code/chimera/config";

    home.packages = [
    ];

    programs.git.includes =
      lib.mapAttrsToList
        git_email_to_include_option
        git_emails;

    programs.git.extraConfig.alias = {
      recommit = "!git commit --verbose -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG";
      graph = "log --graph --oneline --decorate";
      hash = "rev-parse HEAD";

      stg-clean = ''!for PATCH in $(stg series -PU); do CHANGE_ID=$(git show -s --format="%(trailers:key=Change-Id,valueonly,separator=%x2C )" $(stg id $PATCH)); git log --format="%(trailers:key=Change-Id,valueonly,separator=%x2C )" | grep -qFx "$CHANGE_ID" && stg delete $PATCH; done'';
    } // (builtins.mapAttrs (_name: email: git_email_to_alias_value email) git_emails);

    home.shellAliases = {
      gpg-card-switch = ''for keygrip in $(gpg --with-keygrip --list-secret-keys 76E0B09A741C4089522111E5F27E3E5922772E7A | grep Keygrip | sed "1d" | sed "s/ *Keygrip = //"); do gpg-connect-agent "delete_key $keygrip" /bye > /dev/null; done; gpg --card-status;'';
    };

    programs.git.extraConfig.user = {
      name = "Skyler Grey";
      signingkey = "7C868112B5390C5C";
    };

    chimera.git = {
      delta.enable = true;
      stgit.enable = true;
      jj.enable = true;
      radicle.enable = true;
      gitReview.enable = true;
      auth.clicksUsername = "minion";
      gpg.enable = true;
    };

    chimera.theme = {
      font.nerdFontGlyphs.enable = true;
      catppuccin = {
        enable = true;
        style = "Latte";
        color = "Maroon";
      };
    };

    chimera.browser.chromium = {
      enable = true;
      extensions = {
        ublockOrigin.enable = true;
        bitwarden.enable = true;
      };
    };

    chimera.browser.firefox = {
      enable = true;
      extensions = {
        bitwarden.enable = true;
        youtube = {
          sponsorBlock.enable = true;
          returnDislike.enable = true;
          deArrow.enable = true;
        };
        reactDevTools.enable = true;
        adnauseam.enable = true;
      };
      search = {
        enable = true;
        extensions.enable = true;
        bookmarks.enable = true;
        engines = [
          "Kagi"
          "MDN"
          "NixOS Options"
          "NixOS Packages"
          "Home-Manager Options"
          "Noogle"
          "GitHub"
          "Docs.rs"
          "Crates.io"
          "Arch Wiki"
          "Gentoo Wiki"
        ];
      };
      extraExtensions = [
        config.nur.repos.rycee.firefox-addons.sidebery
        config.nur.repos.rycee.firefox-addons.gitpod
        config.nur.repos.rycee.firefox-addons.refined-github
      ];
    };
    programs.firefox.profiles.chimera.userChrome = ''
      @import "${inputs.firefox-sidebery-gnome}/userChrome.css";

      #TabsToolbar {
        display: none;
      }
      #sidebar-header {
        display: none;
      }

      /* Hide "Sign in to sync" */
      #PanelUI-fxa-status {
        display: none !important;
      }
      #appMenu-fxa-status2, #appMenu-fxa-separator {
        display: none !important;
      }
    '';
    programs.firefox.profiles.chimera.userContent = ''
      @import "${inputs.firefox-sidebery-gnome}/userContent.css";

      @-moz-document url("about:preferences") {
        #category-sync { display:none!important; }
        #category-more-from-mozilla { display:none!important; }
      }
    '';
    programs.firefox.profiles.chimera.settings = {
      "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
      "svg.context-properties.content.enabled" = true;
      "browser.uidensity" = 0;
      "browser.theme.dark-private-windows" = false;
      "widget.gtk.rounded-bottom-corners.enabled" = true;
    };

    chimera.shell = {
      tsStatus.enable = true;
      bash.enable = true;
      defaultAliases.enable = true;
      replacements.defaultEnable = true;
      replacements.bat.enable = false;
      replacements.glow.enable = false;
      usefulPackages.enable = true;
    };

    chimera.editor = {
      ed = {
        enable = true;
        prompt = ":";
        defaultEditor = false;
      };

      neovim = {
        enable = true;
        defaultEditor = false;
      };

      emacs.enable = true;

      editorconfig.enable = true;
    };

    chimera.yubikey.enable = true;

    chimera.input = {
      keyboard = {
        layout = "us";
        variant = "dvorak";
      };
      mouse.scrolling.natural = true;
    };

    chimera.nextcloud.enable = true;

    programs.bash.bashrcExtra = ''
      export PS1="\[\e]133;k;start_kitty\a\]\[\e]133;A\a\]\[\e]133;k;end_kitty\a\]\n\[\e]133;k;start_secondary_kitty\a\]\[\e]133;A;k=s\a\]\[\e]133;k;end_secondary_kitty\a\]\[\033[1;35m\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\$\[\033[0m\] \[\e]133;k;start_suffix_kitty\a\]\[\e[5 q\]\[\e]2;\w\a\]\[\e]133;k;end_suffix_kitty\a\]"
    '';

    programs.kitty.extraConfig = ''
      map kitty_mod+enter launch --cwd=current --type=window
      map kitty_mod+t     launch --cwd=current --type=tab
    '';
  });
}
