# Prompt
fpath+=($XDG_DATA_HOME/zsh/themes/pure)
autoload -U promptinit; promptinit
prompt pure

# History in cache directory:
HISTSIZE=10000000
SAVEHIST=10000000
HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history"

setopt HIST_IGNORE_ALL_DUPS  # do not put duplicated command into history list
#setopt HIST_SAVE_NO_DUPS  # do not save duplicated command
setopt HIST_REDUCE_BLANKS  # remove unnecessary blanks
setopt INC_APPEND_HISTORY_TIME  # append command to history file immediately after execution
#setopt EXTENDED_HISTORY  # record command start time
alias history="fc -l 1" # display more than 15 items

# Aliases
alias ip="ip -c"
alias ls="ls --color=auto"
alias grep="grep --color"
alias neofetch="fastfetch"
alias yt-mp3="yt-dlp -x --audio-format mp3"
alias c="clipboard-copy"
alias src="source $HOME/.zshrc"
alias e="nvim"
alias sc="lfcd $HOME/.local/bin/scripts"
alias mnt="dmenu_mounter"
#alias wcc='x86_64-w64-mingw32-gcc'
alias newsboat="newsboat -C $XDG_CONFIG_HOME/newsboat/config -u $XDG_CONFIG_HOME/newsboat/urls -c $XDG_DATA_HOME/newsboat/cache.db"

# Basic auto/tab complete:
autoload -Uz compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z} r:|=*'
zmodload zsh/complist
compinit -d "$XDG_CACHE_HOME/zsh/zcompcache"
_comp_options+=(globdots) # Include hidden files.

# Vi mode
bindkey -v
export KEYTIMEOUT=1

# Change cursor shape for different vi modes.
function zle-keymap-select () {
case $KEYMAP in
	vicmd) echo -ne '\e[1 q';;      # block
	viins|main) echo -ne '\e[5 q';; # beam
esac
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.

source <(fzf --zsh)

# Use vim keys in tab complete menu:
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 -v '^?' backward-delete-char

# Use lf to switch directories and bind it to ctrl-o
# Define the lfcd function to use lfub (lf with ueberzug)
lfcd () {
	tmp="$(mktemp -uq)"
	lfub -last-dir-path="$tmp" "$@"
	if [ -f "$tmp" ]; then
		dir="$(cat "$tmp")"
		[ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"
    rm -f "$tmp"
	fi
}

stty -ixon

bindkey -s '^o' '^ulfcd\n'
bindkey -s '^f' '^ucd "$(dirname "$(fzf)")"\n'
bindkey -s '^t' '^utmux\n'
bindkey -s '^s' '^ufzf_ssh\n'
bindkey '^[[P' delete-char

# Colors
eval "$(dircolors -b "$XDG_CONFIG_HOME/dircolors/dircolors")"

# Plugins
source $XDG_DATA_HOME/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh
source $XDG_DATA_HOME/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
