{ config, lib, pkgs, ... }:

let
  exaPackage = pkgs.unstable.eza.override { gitSupport = true; };
in
{
  programs.eza = {
    enable = true;
    package = exaPackage;
  };
  programs.zsh.shellAliases =
    let
      defaultArgs = "--icons --classify --group-directories-first --all";
      bin = "${exaPackage}/bin/exa ${defaultArgs}";
    in
    lib.mkIf config.programs.zsh.enable {
      ls = "${bin} --oneline";
      lt = "${bin} --tree --level=3";
      ll = "${bin} --long --header";
    };

  programs.direnv = {
    enable = true;
    nix-direnv.enable = true;
  };

  programs.zoxide = {
    enable = true;
    enableZshIntegration = config.programs.zsh.enable;
  };

  home.packages = with pkgs; [
    # tools
    xh # friendly and fast tool for sending HTTP requests
    fd # a simple, fast and user-friendly alternative to find
    bat # a cat clone with syntax highlighting and git integration
    ripgrep # a fuzzy finder
    vnetod # a tool to change env sections
    gnumake
    libnotify # tool to send notifications via cli

    deno
    unstable.nickel

    nixpkgs-fmt # nix formatter
    unstable.nil # nix lsp server

    docker-compose
  ];
}
