{
  config,
  lib,
  pkgs,
  ...
}: {
  programs.nushell = {
    enable = true;
    configFile.source = ./nushell/config.nu;
    envFile.source = ./nushell/env.nu;
  };

  programs.starship = {
    enable = true;
    enableNushellIntegration = true;
    settings = {
      directory = {
        truncation_length = 3;
        fish_style_pwd_dir_length = 1;
      };
      git_commit = {
        commit_hash_length = 6;
        only_detached = false;
      };
      package = {
        symbol = "";
      };
      time = {
        disabled = false;
        format = "[$time]($style)";
        time_format = "%I:%M %p";
      };
    };
  };

  programs.bat = {
    enable = true;
    config = {
      theme = "OneHalfDark";
      style = "header,rule,snip,changes";
    };
  };

  programs.readline = {
    enable = true;
    extraConfig = ''
      set editing-mode vi
      set show-all-if-ambiguous on
      set editing-mode vi

      set keymap vi-command
      # these are for vi-command mode
      "\e[A": history-search-backward
      "\e[B": history-search-forward
      j: history-search-forward
      k: history-search-backward
      set keymap vi-insert
      # these are for vi-insert mode
      "\e[A": history-search-backward
      "\e[B": history-search-forward
    '';
  };

  programs.fzf.enable = true;
}