{
  lib,
  pkgs,
  inputs,
  getFlakePkg',
  ...
}:
let
  inherit (pkgs) fish;
in
{
  imports = [
    inputs.culr.nixosModules.culr
  ];
  programs.culr = {
    enable = true;
    pattern = "rainbow-split";
  };
  programs.fish = {
    enable = true;
    shellAbbrs = {
      "gco" = "git checkout";
      "gcb" = "git checkout -b";
      "gp" = "git push";
      "gpf" = "git push --force";
      "gap" = "git commit -a --amend --no-edit && git push --force";
      "gl" = "git pull";
      "ga" = "git add";
      "gcam" = "git commit -am";
      "gcl" = "git clone";
      "gcd" = "git clone --depth 1";
      ":q" = "exit";
    };
    shellAliases = {
      "l" = "eza -lg --icons=always --colour=always $argv | culr";
      "la" = "eza -lg --icons=always --colour=always $argv | culr";
      "p" = "ps $argv | culr";
      "mnt" = "mount | culr";
    };
    interactiveShellInit =
      let
        comma = lib.getExe' (getFlakePkg' inputs.nix-index-database "comma-with-db") "comma";
      in
      ''
        function fish_greeting
          ${./rice/header.sh}
          echo ""
        end
        function fish_title
          set -q argv[1]; or set argv fish
          echo (fish_prompt_pwd_dir_length=100 prompt_pwd): $argv;
        end
        function fish_command_not_found
            ${comma} $argv
        end
      '';
  };
  programs.command-not-found.enable = false;
  programs.zoxide = {
    enable = true;
    enableFishIntegration = true;
  };
  environment.systemPackages = [
    fish
  ];
  environment.shells = [ fish ];
  users.defaultUserShell = fish;
  console.font = "Lat2-Terminus16";

  environment.sessionVariables = {
    EDITOR = "hx";
  };

}
