{
  config,
  lib,
  pkgs,
  ...
}: let
  cfg = config.hive.zsh;
  omz_custom = "${config.home.homeDirectory}/.config/omz_custom";
in {
  options.hive.zsh = {
    enable = lib.mkEnableOption "Enable Zsh";
  };

  config = lib.mkIf cfg.enable {
    home.file."${omz_custom}" = {
      source = ./static/omz_custom;
      recursive = true;
    };

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

    # fancy ls command
    programs.lsd = {
      enable = true;
    };

    # Zsh
    programs.zsh = {
      enable = true;
      enableCompletion = true;
      syntaxHighlighting.enable = true;

      history.size = 10000;
      history.path = "${config.xdg.dataHome}/zsh/history";
      oh-my-zsh = {
        enable = true;
        plugins = [
          "docker"
          "docker-compose"
          "fzf"
          "git"
          "pass"
          "poetry"
          "python"
          "rust"
          "thefuck"
        ];
        theme = "my_bureau";
        custom = omz_custom;
      };
    };

    home.packages = with pkgs; [
      bat
      fzf
      git
      htop
      killall
      nh
      nix-output-monitor
      nix-search-cli
      nix-tree
      nixpkgs-fmt
      pass
      ranger
      thefuck
      unstable.mmtui
      unzip
      vim
      w3m
      wget
      yt-dlp
      zip
    ];
  };
}
