{
  pkgs,
  config,
  ...
}: {
  programs.fish = {
    enable = true;

    functions = {
      _fetch = ''
        bunnyfetch
        printf "\n"
      '';

      filesize = ''
        for file in $argv
            if [ -f "$file" ]
                echo "$file: $(stat -c %s "$file" | numfmt --to=iec)"
            else
                echo "$file: not found"
            end
        end
      '';

      y = ''
        set tmp (mktemp -t "yazi-cwd.XXXXXX")
        yazi $argv --cwd-file="$tmp"
        if set cwd (command cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
        	builtin cd -- "$cwd"
        end
        rm -f -- "$tmp"
      '';

      arm64cc-env = ''
        set -gx ARCH arm64
        set -gx hardeningDisable all
        set -gx CROSS_COMPILE aarch64-linux-gnu-
      '';
    };

    shellAliases = {
      ls = "eza";
      cat = "bat";
      v = "nvim";
      V = "sudoedit";
      ":q" = "exit";
      cdt = "cd (mktemp -d)";
    };

    interactiveShellInit = ''
      ${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
      bind \cl 'clear; _fetch; commandline -f repaint'
      bind \cb ${pkgs.btop}/bin/btop
      bind \cf 'fzf; commandline -f repaint'
      bind \cs 'cdi; commandline -f repaint'

      _fetch
    '';
  };
}