# Created by newuser for 5.9
HISTFILE=~/.histfile
HISTSIZE=100000000
SAVEHIST=1000000000
HISTDUP=erase

setopt APPEND_HISTORY            # Append to histfile instead of overwriting.
setopt SHARE_HISTORY             # Share history between all sessions.
setopt HIST_IGNORE_SPACE         # Do not record an event starting with a space.
setopt HIST_IGNORE_ALL_DUPS      # Delete an old recorded event if a new event is a duplicate.
setopt HIST_SAVE_NO_DUPS         # Do not write a duplicate event to the history file.
setopt HIST_IGNORE_DUPS          # Do not record an event that was just recorded again.
setopt HIST_FIND_NO_DUPS         # Do not display a previously found event.
setopt EXTENDED_HISTORY          # Write the history file in the ':start:elapsed;command' format.
setopt HIST_EXPIRE_DUPS_FIRST    # Expire a duplicate event first when trimming history.

# Set the directory we want to store zinit (and plugins) in
# The XDG_DATA_HOME:-$HOME... line chooses XDG_DATA_HOME if it exists, otherwise .local/share
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"

# download zinit if it doesn't exist
if [ ! -d "$ZINIT_HOME" ]; then
    mkdir -p "$(dirname $ZINIT_HOME)"
    git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi

# load zinit
source "${ZINIT_HOME}/zinit.zsh"

#region plugins
zinit light zsh-users/zsh-completions
autoload -U compinit && compinit
eval "$(fzf --zsh)"
zinit light Aloxaf/fzf-tab
zinit light zsh-users/zsh-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions

# snippets
zinit snippet OMZP::git
zinit snippet OMZP::sudo
zinit snippet OMZP::debian
zinit snippet OMZP::command-not-found
zinit snippet OMZP::extract

zinit cdreplay -q
eval "$(zoxide init --cmd cd zsh)"
#endregion

#region setopts
while read -r option; do
  setopt $option
done <<-EOF
ALWAYS_TO_END
AUTO_LIST
AUTO_MENU
AUTO_PARAM_SLASH
AUTO_PUSHD
ALWAYS_TO_END
COMPLETE_IN_WORD
EXTENDED_GLOB
INC_APPEND_HISTORY
INTERACTIVE_COMMENTS
MENU_COMPLETE
NO_BEEP
NOTIFY
PATH_DIRS
PUSHD_IGNORE_DUPS
PUSHD_SILENT
EOF
while read -r option; do
  unsetopt $option
done <<-EOF
CASE_GLOB
CORRECT
EQUALS
FLOWCONTROL
NOMATCH
EOF
#endregion

# bindkey -v
# zmodload zsh/complist
# bindkey -M menuselect 'h' vi-backward-char
# bindkey -M menuselect 'k' vi-up-line-or-history
# bindkey -M menuselect 'l' vi-forward-char
# bindkey -M menuselect 'j' vi-down-line-or-history
bindkey "^a" vi-beginning-of-line
bindkey "^e" vi-end-of-line
bindkey '^p' history-search-backward
bindkey '^n' history-search-forward
bindkey '^f' autosuggest-accept
bindkey -M emacs '^[^[' sudo-command-line
bindkey -M vicmd '^[^[' sudo-command-line
bindkey -M viins '^[^[' sudo-command-line

# zstyle ':completion:*' menu select
zstyle ':completion:*' menu no
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*:descriptions' format '[%d]'
zstyle ':completion::complete:*' gain-privileges 1
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath'
zstyle ':fzf-tab:complete:+__zoxide_z:*' fzf-preview 'eza -1 --color=always $realpath'
zstyle ':fzf-tab:*' switch-group '<' '>'
zstyle ':completion:*:git-checkout:*' sort false
# _comp_options+=(globdots)

# prompt init
eval "$(oh-my-posh init zsh --config ~/.config/omp/zen.toml)"

#region dirHashes
hash -d "dl"="$HOME/Downloads"
hash -d "docs"="$HOME/Documents"
hash -d "dev"="$HOME/dev"
hash -d "dots"="$HOME/sysconf"
hash -d "pics"="$HOME/Pictures"
hash -d "vids"="$HOME/Videos"
#endregion

#region env
export DIRENV_LOG_FORMAT=""
export LC_ALL="en_US.UTF-8"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export KEYTIMEOUT=1
export GPG_TTY=$(tty)
export PATH="$PATH:$HOME/bin"
export FLAKE="$HOME/sysconf/nix"
#endregion

#region aliases
alias run="nix-shell --command 'zsh' -p"
alias nsh="nix-shell --command 'zsh'"
alias nd="nix develop"
alias g="git"
alias gs="git st"
alias gst="git st"

alias src="cd $HOME/dev"
alias sv0="ssh -l root proxmox"
alias nmcs="ssh -l kd nmcs"

alias pn="pnpm"

alias rm="rm -rf"
alias cp="cp -ri"
alias mkdir="mkdir -p"
alias free="free -m"
alias j="just"
alias ed="code"
alias n="nvim"
alias cdr="cd \$(git rev-parse --show-toplevel)"

alias l="eza -al --no-time --group-directories-first"
alias ls="eza -al --no-time --group-directories-first"
alias la="eza -a"
alias ll="eza -l --no-time --group-directories-first"
alias lt="eza -aT --no-time --group-directories-first"

alias cat="bat --theme gruvbox-dark --style numbers,changes --color=always --tabs=2 --wrap=never"
alias diff="delta"
alias top="btm"
alias c="clear"
alias glg="git lg"
alias ghr="gh repo"
alias serve="python3 -m http.server"
alias ytmp3="yt-dlp --ignore-errors --format bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --embed-thumbnail --embed-metadata --output '%(title)s.%(ext)s'"
#endregion
