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

      shellAbbrs = {
        l = "less";
        gco = "git checkout";
        "-C" = {
          position = "anywhere";
          expansion = "--color";
        };
        L = {
          position = "anywhere";
          setCursor = true;
          expansion = "% | less";
        };
        "!!" = {
          position = "anywhere";
          function = "last_history_item";
        };
        vim_edit_texts = {
          position = "command";
          regex = ".+\\.txt";
          function = "vim_edit";
        };
        "4DIRS" = {
          setCursor = "!";
          expansion = ''
            for dir in */
              cd $dir
              !
              cd ..
            end
          '';
        };
        co = {
          command = "git";
          expansion = "checkout";
        };
        status = {
          name = "s";
          command = [
            "git"
            "hg"
          ];
          expansion = "status";
        };
        show = {
          name = "s";
          command = "systemctl";
          expansion = "show";
        };
        dotdot = {
          regex = "^\\.\\.+$";
          function = "multicd";
        };
      };
    };

    nmt = {
      description = "if fish.shellAbbrs is set, check fish.config contains valid abbreviations";
      script = ''
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add -- l less"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add -- gco 'git checkout'"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --position anywhere -- -C --color"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --position anywhere --set-cursor -- L '% | less'"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --function last_history_item --position anywhere -- !!"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --function vim_edit --position command --regex '.+\.txt' -- vim_edit_texts"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add '--set-cursor=!' -- 4DIRS 'for dir in */
          cd \$dir
          !
          cd ..
        end
        '"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --command git -- co checkout"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --command git --command hg -- s status"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --command systemctl -- s show"
        assertFileContains home-files/.config/fish/config.fish \
          "abbr --add --function multicd --regex '^\.\.+$' -- dotdot"
      '';
    };
  };
}
