{
  config,
  pkgs,
  lib,
  ...
}:
let
  cfg = config.luj.programs.fish;
in
with lib;
{
  options.luj.programs.fish = {
    enable = mkEnableOption "Enable fish";
  };

  config = mkIf cfg.enable {

    programs.fish = {
      enable = true;
      shellInit = ''
        [ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
          source "$EAT_SHELL_INTEGRATION_DIR/fish"
      '';

      shellAliases = {

        ka = "killall";
        mkd = "mkdir -pv";

        nix-build = "nom-build";

        ca = "khal interactive";
        sync_ca = "vsync sync";

        dnd = "dunstctl set-paused true";
        nodnd = "dunstctl set-paused false";

        lg = "lazygit";
        g = "git";
        gua = "git remote | xargs -L1 git push --all";

        v = "$EDITOR";
        sdn = "shutdown now";

        SU = "systemctl --user";
        SS = "sudo systemctl";

        weather = "curl wttr.in";
        v6 = "curl api6.ipify.org";
        v4 = "curl api.ipify.org";
        clbin = "curl -F'clbin=<-' https://clbin.com";
        _0x0 = "curl -F'file=@-' https://0x0.st";

        phs = "python -m http.server";

        ls = "eza";

        rtmv = "rsync -avP";
        archive = "rsync --remove-source-files -avPzz";

        luks_integrity_check = "gocryptfs -fsck -extpass 'pass Private/LUKS' /boot/luks";

        fetch-emails = "mbsync --all && notmuch new && afew -t -n -v";

        nsp = "nix-shell -p";
        ns = "nix-shell";

        ncg = "sudo nix-collect-garbage --delete-older-than 30d";
        ncga = "sudo nix-collect-garbage -d";
        nso = "sudo nix-store --optimise";

        lln = "NIX_PATH=\"nixpkgs=$LOCAL_NIXPKGS_CHECKOUT\"";
        # Local build
        lnb = "NIX_PATH=\"nixpkgs=$LOCAL_NIXPKGS_CHECKOUT\" nom-build '<nixpkgs>' --no-out-link -A $1";
        # Local shell
        lns = "NIX_PATH=\"nixpkgs=$LOCAL_NIXPKGS_CHECKOUT\" nix-shell -p $1";
        # Local test
        ltt = ''NIX_PATH=\"nixpkgs=$LOCAL_NIXPKGS_CHECKOUT\" nom-build --no-out-link "$LOCAL_NIXPKGS_CHECKOUT/nixos/tests/$1"'';
      };

    };

    # Broot
    programs.broot = {
      enable = true;
      enableFishIntegration = true;
    };

    # Direnv: must have.
    programs.direnv = {
      enable = true;
      nix-direnv.enable = true;
    };

    programs.oh-my-posh = {
      enable = true;
      enableFishIntegration = true;
      useTheme = "catppuccin_mocha";
    };

    # Misc
    programs.lesspipe.enable = true;

    home.packages = with pkgs; [
      eza
      python3
      libnotify
      nix-output-monitor
    ];
  };
}