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

    shellAliases = let
      flakeDir = "~/dots";
    in {
      rb = "sudo nixos-rebuild switch --flake ${flakeDir}"; # Применить новый конфиг

      # Можно назвать аналогом "sudo pacman -Su", не "Syu", репу не обновляет
      upg = "sudo nixos-rebuild switch --upgrade --flake ${flakeDir}"; # Обновить пакеты, но не репозиторий во fleke.lock

      # Возможно это аналог "sudo pacman -Sy". Обновить репозиторий, чтоб потом на него обновиться? Пакеты не обновляет
      upd = "nix flake update ${flakeDir}"; # Обновляет flake.lock на последние коммиты с гитхаба?

      pkgs = "nvim ${flakeDir}/nixos/packages.nix";

      v = "nvim";
      t = "timer";
      r = "ranger";
      ff = "fastfetch";
      yt = "cd /mnt/backups/Media/yt-dlp"; # Бекапить YouTube
      qb = "cd /mnt/backups/Media/Music/Qobux/qdl"; # Бекапить музыку с Qobuz
    };

    # Всё, что в комментах ниже, лишнее. Я нашёл норм способ. Пишем "nix-prefetch-git link" и получаем всю инфу
    # Узнать rev - git ls-remote https://github.com/{owner}/{repo}.git HEAD
    # На гитхабе вроде можно просто на странице коммитов нажать ... и copy full SHA
    # Узнать sha256 - sudo nix-prefetch-url --unpack https://github.com/{owner}/{repo}/archive/{rev}.tar.gz
    # Ссылку проще получить, открыв страницу релизов и оттуда скопировать ссылку на архив
    # Если нет релизов - sudo nix-prefetch-url --unpack https://github.com/{owner}/{repo}/archive/refs/heads/{branch}.zip
    plugin = [
      { # The Node.js version manager you'll adore, crafted just for Fish 
        name = "nvm.fish"; # https://github.com/jorgebucaran/nvm.fish
        src = pkgs.fetchFromGitHub {
          owner = "jorgebucaran";
          repo = "nvm.fish";
          rev = "b8edb1ee24cbbf7259196b0cb3c6c4ab65b07929";
          sha256 = "17vk608mbmb9mwvvm18hs63iy7vzdrd1ymia94szy1hy5d0li77c";
        };
      }
      { # Utility functions to start your ssh agent when using fish shell
        name = "fish-ssh-agent"; # https://github.com/danhper/fish-ssh-agent
        src = pkgs.fetchFromGitHub {
          owner = "danhper";
          repo = "fish-ssh-agent";
          rev = "fd70a2afdd03caf9bf609746bf6b993b9e83be57";
          sha256 = "1fvl23y9lylj4nz6k7yfja6v9jlsg8jffs2m5mq0ql4ja5vi5pkv";
        };
      }
    ];
  };

  home = {
    packages = with pkgs.fishPlugins; [ # Плагины для Fish из репы никса
      z # Частые директории https://github.com/jethrokuan/z/blob/master/man/man1/z.md
      plugin-git # Алиасы для гита https://github.com/jhillyerd/plugin-git
      fzf-fish # https://github.com/PatrickF1/fzf.fish
      done # Оповещения для длительных процессов https://github.com/franciscolourenco/done
      bass # Позволяет юзать bash в fish https://github.com/edc/bass
    ];

    # Чтоб при выходе из ranger я всегда cd в каталог, из которого вышел
    file.".config/fish/functions/ranger.fish".text = ''
      function ranger
        set tempfile (mktemp -t tmp.XXXXXX)
        command ranger --choosedir=$tempfile $argv
        set return_value $status

        if test -s $tempfile
          set ranger_pwd (cat $tempfile)
          if test -n $ranger_pwd -a -d $ranger_pwd
            builtin cd -- $ranger_pwd
          end
        end

        command rm -f -- $tempfile
        return $return_value
      end
    '';
  };
}