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

let cfg = config.jade.zsh;
in with lib; {
  options.jade.zsh = {
    enable = mkEnableOption "Enable zsh";
  };
  config = mkIf cfg.enable {
    home-manager.users.jade = { pkgs,... } : {
      home.packages = with pkgs; [
        thefuck
      ];
      home.sessionVariables = {
        "NEOVIDE_MULTIGRID" = "true";
      };
      programs.direnv = {
        enable = true;
        enableZshIntegration = true;
      };
      programs.zsh = {
        enable = true;
        enableAutosuggestions = true;
        enableSyntaxHighlighting = true;
        autocd = true;
        defaultKeymap = "viins";
        dotDir = ".config/zsh";
        history = {
          extended = true;
          save = 100000;
          size = 100000;
        };
        shellAliases = {
          sudo = "sudo ";
          v = "nvim";

          s = "kitty +kitten ssh";

          termsize = "echo \"width: $(tput cols)\nheight: $(tput lines)\"";
          batstate = "echo \"Charge state: $(cat /sys/class/power_supply/BAT0/capacity)%\"";
          clear = "clear;neofetch";
          bdin = "betterdiscordctl install && killall Discord && Discord & disown";
          upg = "paru -Syu --skipreview --noconfirm && flatpak upgrade && rustup upgrade";

          grepo = "cd $HOME/Documents/repos && ls";
          gnix = "cd $HOME/nix-configs";

          slol = "while true;do \\clear;sl --help | lolcat;done;";

          # localhost.run
          lhr = "ssh -R 80:localhost:8080 nokey@localhost.run";
          sshrpi = "ssh jade@192.168.178.111";

          # cargo
          cr = "cargo run";
          cb = "cargo build";
          cf = "cargo fmt";
          cfx = "cargo fix";
          cl = "cargo clippy";
          cbr = "cargo build --release";

          # fucking around
          "" = "nvim";
          "grammar" = "polymc";
          "minecraft" = "polymc";
        };
        oh-my-zsh = {
          enable = true;
          plugins = [ 
            "git" "sudo" "colored-man-pages" "zsh-interactive-cd" "branch"
            "colorize" "command-not-found" "common-aliases" "rsync" "rust"
            "thefuck"
          ];
          theme = "fox";
        };
        initExtra = ''
          # file endings
          alias -s {pdf,PDF}="evince"
          alias -s {jpg,JPG,png,PNG}="kitty +kitten icat"
          alias -s {ods,ODS,odt,ODT,odp,ODP,doc,DOC,docx,DOCX,xls,XLS,xlsx,XLSX,xlsm,XLSM,ppt,PPT,pptx,PPTX,csv,CSV}='libreoffice'
          alias -s {html,HTML}="librewolf"
          alias -s {mp4,MP4,mov,MOV,mkv,MKV}='vlc'
          alias -s {zip,ZIP,war,WAR}="unzip -l"
          alias -s {jar,JAR}="java -jar"
          alias -s gz="tar -tf"
          alias -s {tgz,TGZ}="tar -tf"
        '';
      };
    };
  };
}
