{ ... }: {
  flake.homeManagerModules.wisdomShellFish =
    { config, lib, pkgs, ... }:
    let
      root = config.chiasson.home;
      cfg = config.chiasson.home.shell.fish;
    in
    {
      options.chiasson.home.shell.fish = {
        enable = lib.mkEnableOption "Fish + grc, quiet greeting, rbw SSH socket defaults.";

        nixYourShell = {
          enable = lib.mkEnableOption ''
            Wrap `nix` / `nix-shell` so ephemeral shells use fish (and keep oh-my-posh) instead of bash.
          '' // {
            default = true;
          };
        };
      };

      config = lib.mkIf (root.enable && cfg.enable) {
        # `fishPlugins.grc` only installs the plugin; the wrapper invokes the `grc` binary.
        home.packages = [ pkgs.grc ];

        programs.fish = {
          enable = true;
          interactiveShellInit = ''
            set fish_greeting ""
            if test -z "$SSH_AUTH_SOCK"
              if test -n "$XDG_RUNTIME_DIR"
                set -gx SSH_AUTH_SOCK "$XDG_RUNTIME_DIR/rbw/ssh-agent-socket"
              else
                set -l _hm_uid (${pkgs.coreutils}/bin/id -u)
                set -gx SSH_AUTH_SOCK "/run/user/$_hm_uid/rbw/ssh-agent-socket"
              end
            end
          '';
          plugins = [
            {
              name = "grc";
              src = pkgs.fishPlugins.grc.src;
            }
          ];
        };

        programs.nix-your-shell = lib.mkIf cfg.nixYourShell.enable {
          enable = true;
          enableFishIntegration = true;
        };
      };
    };
}
