Compare commits

..

1 Commits
main ... Hooks

Author SHA1 Message Date
Robert Morrison
376865abdf
Beginning addition of hook functionality 2022-02-20 00:11:11 +00:00
24 changed files with 120 additions and 527 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
.zkbd/
.zcompdump
.zcalc_history

26
.zkbd/st-256color-:0 Normal file
View File

@ -0,0 +1,26 @@
typeset -g -A key
key[F1]='^[OP'
key[F2]='^[OQ'
key[F3]='^[OR'
key[F4]='^[OS'
key[F5]='^[[15~'
key[F6]='^[[17~'
key[F7]='^[[18~'
key[F8]='^[[19~'
key[F9]='^[[20~'
key[F10]='^[[21~'
key[F11]='^[[23~'
key[F12]='^[[24~'
key[Backspace]='^?'
key[Insert]='^[[4h'
key[Home]='^[[H'
key[PageUp]='^[[5~'
key[Delete]='^[[P'
key[End]='^[[4~'
key[PageDown]='^[[6~'
key[Up]='^[[A'
key[Left]='^[[D'
key[Down]='^[[B'
key[Right]='^[[C'
key[Menu]=''''

204
Readme.md
View File

@ -1,202 +1,34 @@
# My ZSH configuration
# My ZSH config.
This repository has a fully loaded configuration for ZSH.
The configuration make opinionated choices based on my own desires for what
a shell should be like.
This is my personal ZSH config that I run on my laptop.
It works for what I want from a configured shell.
It's strongly advised that you write your own configuration instead of
just using this one. That way you can understand what you are doing and
maybe gain a better appreciation for the shell and its features.
I would recommend you actually create your own config before just using
mine since you will gain a proper understanding of how ZSH works and just
what it can do.
The configuration is broken down into modules where possible, this
makes it easier to hack on.
I have attempted to organise my config into a series of files that each
perform a specific task, that way it is easier for me to change small
sections as the need arises.
## Usage
## How to use
Clone this repository to `~/.config/zsh`
If you really really want to just blindly copy me then you will need to
clone this repository to `~/.config/zsh`
Inside of that directory run:
Inside of the cloned repository run:
```sh
git submodule init
git submodule update
```
This will pull my plug-in manager `ZshPlug`.
This will pull in the latest version of my plugin manager.
And then add the following into `~/.zshenv`:
And then add the following into your `~/.profile`:
```sh
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh"
```
This tells ZSH where the ZSH dotfiles are.
You may find that using my other dotfile package `shelly` makes life even
easier for you.
After your next reboot you _should_ be using my config.
### Important note
It is possible that your system might not be happy with this.
I have yet to fully work out the little issues that I have with making a
consistent environment across *all* of my user session.
This might result in a need to create a system of linked environment files
to ensure that everything can access the environment variables that are
meant to be set.
## Issues
This is a personal project and is unlikely to be maintained in a
professional manner.
If you do find any technical issues during your usage of this config then
feel free to open a GitHub issue.
Please remember that GitHub issues are not a forum nor a place for you to
ask questions not related to *technical issues*, and it is completely up to
my own discretion what issues I handle and which ones I close.
## General overview
The main goals for this configuration are look good, work good, and be
quick.
The less things getting in my way the better.
This is why I have made opinionated decisions about what options to enable
and how it works.
### Notable features
- Edit the command line in $EDITOR by pressing `C-x C-e`
- Fully configured completion
- Automatic typo repair
- vi mode enabled
- Automatic use of the directory stack `popd` to go back whence you came
- Smart history
- Plug-ins chosen for greatness
- Extended Globbing enabled.
- 10 second thinking time enforced for big deletes
- Expanded directories automatically have `/` appended
- Allow comments in interactive mode (this may be useful to mark history
items)
- Neaten paths like `../foo/..` to `..` (ChaseDots)
## Breakdown
The following sections break down what is in the repository and what
function it does.
### Modules
#### `./aliases`
This module features aliases that I find useful or ones that improve
existing tools.
Any alias that uses external tools uses the `has` function to disable it
when the tool isn't installed.
##### Current aliases:
- `ls` => `exa --icons --group-directories-first` (see: [Exa Website](https://the.exa.website/) )
- `xopen` => `xdg-open`
- `cls` => `clear; ls`
- `se` => `scriptedit` (wrapper script for fzf and nvim)
- `yt` => `youtube-dl`
- `yta` => `youtube-dl --ignore-config --add-metadata --ignore-errors --extract-audio --format "bestaudio/best"`
- `cp` => `cp --interactive --verbose`
- `mv` => `mv --interactive --verbose`
- `rm` => `rm --interactive=once --verbose`
- `mkd` => `mkdir --parents --verbose`
- `diff` => `diff --color=auto`
- `grep` => `grep --color=auto`
- `ip` => `ip --colour=auto`
- `vw` => `nvim -c VimwikiIndex`
- `ws` => `wineselect` (script to choose and set wine-prefix)
- `zero` => `dirs -c && clear`
##### File associations
This module is also responsible for in terminal file associations. Given a
file with a particular extension ZSH can open it with the appropriate
program.
`tex`, `html`, and `md` files are mapped to either `nvim`, `vim`, or `vi`
in that order of preference.
`pdf` files are mapped to `zathura` when it's installed.
#### `./completion`
This file configures the powerful completion engine of
ZSH.
Documenting this here would be a waste since the file has decent comments.
For more information on ZSH completion see `man zshcompsys`
#### `./dir_aliases`
This file uses `hash` to add entries into the named directory hash table.
(See: `man zshbuiltins`)
This gives the effect of these "aliases" that represent directories.
- `~dx` => `$HOME/Documents`
- `~dl` => `$HOME/Downloads`
- `~cn` => `${XDG_CONFIG_HOME:-$HOME/.config}`
- `~px` => `$HOME/Pictures`
- `~pr` => `$HOME/Projects`
#### `./greet`
This file gets executed at the end of `zshrc` to provide a little message
on startup.
#### `./history`
This file configures the ZSH history system.
This makes a few changes:
- Moves history to `${XDG_STATE_HOME/zsh/history}`
- Ignores duplicate entries
- Ignore entries starting with a space
- Compacts whitespace
- Never saves duplicates
- Ignores duplicates when searching history
- Requires you press enter after expanding `!!`
#### './hooks'
This file loads hook functions found in './hooks.d'
and makes it easier to assign hooks where necessary.
#### `./keyboard`
This file uses `zkbd`(see `man zshcontrib`) to get information about your
keyboard and how your terminal handles it. This can fix issues with keys
not being recognised in programs.
#### `./prompt`
This file configures the prompts, and yes there's two.
ZSH has both a left and right prompt and I use both of them.
##### Left prompt
The left prompt shows user, hostname, current directory, and the status of
the last command.
##### Right prompt
The right prompt shows the status of git repository information while
you're in one.
##### `precmd`
This file also sets the `precmd` hook to set the terminal title (for
terminals which support the escape codes that do this.)
#### `zshrc`
This is the true `zshrc` file with `.zshrc` a symbolic link to this
file.
This makes it a little easier to edit the file since you can actually see
it in `ls` and in editors.
This file draws together the modules and actually makes
settings apply.
### Functions
This configuration defines and loads some functions,
some of which are helper functions used in the configuration.
#### `CleanTmp`
Function called during exit to clean a local tmp directory (`~/tmp`).
#### `has`
Just a wrapper for calling `command -v $COMMAND`.
This function gets used to check for external tools.
#### `setTermTitle`
This function gets used in the prompt to set the terminal title.
It makes use of escape sequences to control the terminal and might have
issues on rare or unusual terminals.
#### `tempPersist`
This function controls if the local tmp directory (`~/tmp`) will persist across sessions or
not.
#### `_dotnet`
This completion function that tells the completion engine how to
complete `dotnet` commands.
If anything goes wrong feel free to open an issue. But this is entirely a
personal project for my own use, so don't expect anything.

@ -1 +1 @@
Subproject commit 592295a85a89a27abe7c8424304c676630e80e58
Subproject commit 3ddf1405d81861f1af4455e3716abd230b531a3f

46
aliases Normal file → Executable file
View File

@ -34,26 +34,21 @@
## Use Exa instead of ls
## REQUIRES NERD FONT
has eza && EXA=eza || EXA=exa
has "$EXA" && alias ls="$EXA --icons --group-directories-first"
has "$EXA" && alias tree="$EXA --icons --group-directories-first --tree"
unset EXA
alias ls='exa --icons --group-directories-first'
## Shorten xdg-open
has xdg-open && alias xopen='xdg-open'
alias xopen='xdg-open'
## cls Clear Screen run ls
alias cls='clear; ls'
## Shorten scriptedit
## REQUIRES scriptedit (Script)
has scriptedit && alias se='scriptedit'
alias se='scriptedit'
## YouTube downloader
if has youtube-dl ; then
alias yt='youtube-dl'
alias yta='youtube-dl --ignore-config --add-metadata --ignore-errors --extract-audio --format "bestaudio/best"'
fi
alias yt='youtube-dl'
alias yta='youtube-dl --ignore-config --add-metadata --ignore-errors --extract-audio --format "bestaudio/best"'
##
alias cp='cp --interactive --verbose'
@ -67,38 +62,17 @@ alias grep='grep --color=auto'
alias ip='ip --color=auto'
## Open Vimwiki
has nvim && alias vw='nvim -c VimwikiIndex'
## Change Wineprefix quick and EZ
has wineselect && alias ws='source wineselect'
## zero a terminal session
alias zero='dirs -c && clear'
has fzf && alias gp='cd `find ${Z_PROJECT_DIR:-$HOME/Projects} -type d -name .git | sed "s/.git//" | fzf --preview="cd {} && git log"`'
alias vw='nvim -c VimwikiIndex'
#########################
# FileType Associations #
# extension=program #
#########################
if has nvim; then
VIM=nvim
elif has vim; then
VIM=vim
elif has vi; then
VIM=vi
else
VIM=''
fi
if [[ -n $VIM ]]; then
alias -s tex=$VIM
alias -s html=$VIM
alias -s md=$VIM
fi
unset $VIM
has zathura && alias -s pdf=zathura
alias -s tex=nvim
alias -s html=nvim
alias -s pdf=zathura
alias -s md=nvim
# vim: set ft=zsh ts=2 sw=2 tw=0 noet :

View File

@ -1,65 +0,0 @@
############
# Completion Config
############
## Disable beeping on completions.
setopt NO_BEEP
## Automatically list ambiguous completions.
setopt AUTO_LIST
## Automatically use menu completion after the second request for completion.
setopt AUTO_MENU
## Always fully insert completions.
setopt MENU_COMPLETE
## Automatically put subscripts directly after parameter expressions.
setopt AUTO_PARAM_KEYS
## Allow completion within words (i.e. always complete at the cursor position).
setopt COMPLETE_IN_WORD
## Always move the cursor to the end of a completion after inserting it.
setopt ALWAYS_TO_END
## Automatically list compleptions when given an unambigous prefix.
setopt LIST_AMBIGUOUS
## Display markers to indicate what type of file a completion item is.
setopt LIST_TYPES
## Print an error when provided patterns that are badly formed.
setopt BAD_PATTERN
zstyle ':completion:*' verbose yes
zstyle ':completion:*' group-name '' ## Simply makes the group-name appear with the group
zstyle ':completion:*' menu select ## use menu to select where possible
zstyle ':completion:*' completer _complete _match _approximate ## fuzzy match
zstyle ':completion:*' squeeze-slashes true ## remove trailing slashes
zstyle ':completion:*:descriptions' format '%B%F{green}┨%d┣%f%b' ## better descriptions format
zstyle ':completion:*:warnings' format '%BSorry, no matches for: %F{yellow}%d%b%f' ## show when no matches
zstyle ':completion:*:corrections' format '%B%F{yellow}┨%d┤├ errors %e┣%f%b'
zstyle ':completion:*:match:*' original only
zstyle -e ':completion:*:approximate:*' \
max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)' ## more errors in longer lines
zstyle ':completion:*:functions' ignored-patterns '_*' ## ignore completions for commands I dont have
zstyle ':completion:*:cd:*' ignore-parents parent pwd ## don't complete parent dir
autoload -Uz +X compinit
zmodload zsh/complist
compinit
# vim: ft=zsh

3
dir_aliases Normal file → Executable file
View File

@ -6,5 +6,4 @@ hash -d dx="$HOME/Documents"
hash -d dl="$HOME/Downloads"
hash -d cn="${XDG_CONFIG_HOME:-$HOME/.config}"
hash -d px="$HOME/Pictures"
hash -d pr="${Z_PROJECT_DIR:-$HOME/Projects}"
# vim: ft=zsh
hash -d pr="$HOME/Projects"

View File

@ -1,15 +0,0 @@
#compdef dotnet
_dotnet()
{
local completions=("$(dotnet complete "$words")")
# If the completion list is empty, just continue with filename selection
if [ -z "$completions" ]
then
_arguments '*::arguments: _normal'
return
fi
# This is not a variable assigment, don't remove spaces!
_values = "${(ps:\n:)completions}"
}

View File

@ -22,4 +22,3 @@ status=$?
echo "cleaned tmp"
} #CleanTmp
# vim: set ft=zsh ts=8 sw=4 tw=0 noet :

View File

@ -1,8 +0,0 @@
## Has function
has() {
Command=$1
[[ -z $Command ]] && return 1
command -v $Command > /dev/null 2>&1
}

12
functions/hooks Executable file
View File

@ -0,0 +1,12 @@
Pre_Greet_Hook() {
[ -z $PRE_GREET ]
for cmd in "$PRE_GREET"; do
"$cmd"
done
}
Post_Greet_Hook() {
[ -z $PRE_GREET ]
for cmd in "$POST_GREET"; do
"$cmd"
done
}

View File

@ -1,9 +0,0 @@
setTermTitle() {
Terminal=$(echo $TERM | cut -d'-' -f1 )
[[ -z $1 ]] && Title="$Terminal" || Title="$Terminal - $1"
echo -e -n '\e]2;'"$Title"'\a'
}
# vim: set ft=zsh ts=8 sw=4 tw=0 noet :

View File

@ -1,25 +0,0 @@
tempPersist() {
ARG=$1
if [ $# -eq 0 ]; then
if [[ -f ~/tmp/KEEPTMP ]]; then
echo "Temp is persistent"
else
echo "Temp will be Deleted"
fi
else
if [[ $ARG = "on" ]]; then
touch ~/tmp/KEEPTMP
echo "Temp is persistent"
elif [[ $ARG = "off" ]]; then
if [[ -f ~/tmp/KEEPTMP ]]; then
rm ~/tmp/KEEPTMP
fi
echo "Temp will be Deleted"
else
echo "on or off only"
fi
fi
}
# vim: set ft=zsh ts=8 sw=4 tw=0 noet :

11
greet Normal file → Executable file
View File

@ -1,11 +1,13 @@
has colours.sh && colours.sh
#!/bin/sh
colours.sh
echo '╭───────────╮'
echo '│ Welcome!! │'
echo '╰───────────╯'
date
if [ -d "$HOME/tmp" ]; then
if [ -f "$HOME/tmp/KEEPTMP" ] || [ -f "$HOME/.cleanupResult" ]; then
printf "\033[31m\e[1m\e[5mYou have files in your tmp directory\e[0m\n"
printf "\033[31m\e[1m\e[5mYou have files in your tmp directory\e[0m"
exa -alhT ~/tmp || tree ~/tmp
if [ -f "$HOME/.cleanupResult" ]; then
echo "ISSUE WAS:"
@ -13,6 +15,5 @@ if [ -d "$HOME/tmp" ]; then
fi
fi
fi
has randomVerse && randomVerse
has colours.sh && colours.sh
has glow && [ -f ~/TODO.md ] && glow ~/TODO.md
randomVerse
colours.sh

33
history
View File

@ -1,33 +0,0 @@
## History Configuration
[ ! -d $XDG_STATE_HOME/zsh ] && mkdir -p $XDG_STATE_HOME/zsh
## Options relating to saving history
export HISTSIZE=10000
export SAVEHIST=6000
export HISTFILE=$XDG_STATE_HOME/zsh/history
setopt extended_history ## Save timestamp in history
setopt inc_append_history_time ## incrementally append to history
## This option means that the history is updated by all shell sessions
## However it doesn't load them in like share_history does
setopt hist_ignore_dups ## Don't log the same thing twice
setopt hist_ignore_space ## Don't log things that start with space
setopt hist_reduce_blanks ## Compact unnecessary white-space
setopt hist_expire_dups_first ## Remove duplicates first (if any exist) when compacting history
setopt hist_save_no_dups ## Remove duplicates from history when writing
## Options relating to history use
setopt hist_find_no_dups ## Don't show duplicates when searching history
setopt hist_verify ## Dont' immediately execute expanded history `eg: sudo !!`
## This stops certain commands saving into the history file
export HISTORY_IGNORE='(cd(| *)|ls(| *)|pushd(| *)|popd(| *))'
## This hook goes even further and stops anything in the $HISTORY_IGNORE list from being
## added to the session local history (it still stays around in the up buffer until you run a new command afterwards)
zshaddhistory() {
emulate -L zsh
[[ ${1%%$'\n'} != ${~HISTORY_IGNORE} ]]
}
# vim: ft=zsh

11
hooks
View File

@ -1,11 +0,0 @@
#This file manages hooks so I can have multiple functions hooked the way I want
for file in $(find $ZDOTDIR/hooks.d -type f); do
source "$file"
done
add-zsh-hook -Uz chpwd _hook_glow
add-zsh-hook -Uz chpwd osc7
add-zsh-hook -Uz precmd termtitle
add-zsh-hook -Uz precmd osc113
# vim: ft=zsh

View File

@ -1,7 +0,0 @@
## Load readme with glow (if available)
_hook_glow() {
has glow || return 0
find $PWD -maxdepth 1 -iname 'readme.md' -exec glow {} \;
}
## vim: ft=zsh

View File

@ -1,7 +0,0 @@
## output OSC-113;A to tell foot how to jump between prompts
osc113() {
print -Pn "\e]133;A\e\\"
}
## vim: ft=zsh

View File

@ -1,13 +0,0 @@
## output the current directory in the correct format for foot.
function osc7 {
local LC_ALL=C
export LC_ALL
setopt localoptions extendedglob
input=( ${(s::)PWD} )
uri=${(j::)input/(#b)([^A-Za-z0-9_.\!~*\'\(\)-\/])/%${(l:2::0:)$(([##16]#match))}}
print -n "\e]7;file://${HOSTNAME}${uri}\e\\"
}
# vim: ft=zsh

View File

@ -1,6 +0,0 @@
## set terminal title
termtitle () {
setTermTitle "($(whoami)@$(hostname) $(pwd))"
}
## vim: ft=zsh

4
keyboard Normal file → Executable file
View File

@ -15,8 +15,6 @@ zle -N history-beginning-search-backward-end \
history-search-end
zle -N history-beginning-search-forward-end \
history-search-end
zle -N bracketed-paste bracketed-paste-magic
zle -N self-insert url-quote-magic
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line
@ -27,4 +25,4 @@ zle -N self-insert url-quote-magic
[[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-search
[[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char
[[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char
## vim: ft=zsh
# vim: set ft=zsh ts=8 sw=4 tw=0 noet :

20
prompt Normal file → Executable file
View File

@ -11,25 +11,23 @@ autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
## Set icons for Staged and Unstaged Changes
zstyle ':vcs_info:git*' stagedstr "%{%F{green%}%}󰄳 %{%f%}"
zstyle ':vcs_info:git*' unstagedstr "%{%F{red%}%}󰅙 %{%f%}"
zstyle ':vcs_info:git*' stagedstr ""
zstyle ':vcs_info:git*' unstagedstr ""
## Enable check for changes (CPU-intensive)
## DISABLE THIS ON LOW POWER SYSTEMS
zstyle ':vcs_info:git*' check-for-changes true
## Set format for Repo Information
zstyle ':vcs_info:git*' formats "-(%{%F{203}%} %{%f%}%s:%{%F{2}%} %{%f%}%b %u%c)"
zstyle ':vcs_info:git*' actionformats "-(%{%F{203}%} %{%f%}%s:%{%F{2}%} %{%f%}%b %u%c)(%a)"
zstyle ':vcs_info:git*' formats "-(%s:שׂ %b %u%c)"
## do precmd stuff
_vcsinfo() {
## set precmd to get vcs_info
## precmd runs before every prompt
precmd() {
vcs_info
}
add-zsh-hook precmd _vcsinfo
PROMPT="$(setTermTitle "(%n@%m %~)")╭╼(%{%F{81}%}%n%{%F{245}%}@%{%F{206}%}%m %{%F{245}%}%~%{%F{259}%})─(%(?.😎.😞 %?))"$'\n'"╰┤"
RPROMPT='${vcs_info_msg_0_}'
PROMPT="╭╼(%{%F{81}%}%n%{%F{245}%}@%{%F{206}%}%m %{%F{245}%}%2~%{%F{259}%})─(%(?.😎.😞 %?))"$'\n'"╰┤"
export RPROMPT='${vcs_info_msg_0_}'
# vim: set ft=zsh:
# vim: set ft=zsh ts=2 sw=2 tw=0 noet :

32
theme
View File

@ -1,32 +0,0 @@
# Attempt to load pywal theme first (unless disabled)
if has 'wal' ; then
if [[ -z $NO_PYWAL ]]; then
if [[ -e $XDG_CACHE_HOME/wal/sequences ]]; then
cat $XDG_CACHE_HOME/wal/sequences && return
fi
wal -qnR && return
fi
fi
# Load theme.sh theme uses theme_history to set
if has 'theme.sh'; then
# Load the last set theme automatically
[ -e ~/.config/.theme_history ] && theme.sh "$(theme.sh -l|tail -n1)"
# Toggle between last set themes
last_theme() {
theme.sh "$(theme.sh -l | tail -n2 | head -n1)"
}
zle -N last_theme
bindkey '^o' last_theme
alias th='theme.sh -i'
alias thl='theme.sh --light -i'
alias thd='theme.sh --dark -i'
fi
# vim: ft=zsh

86
zshrc Normal file → Executable file
View File

@ -10,88 +10,74 @@ unalias run-help
## autoload Modules
autoload -U +X colors && colors
autoload -U calendar
autoload -U run-help
autoload -U run-help
autoload -U +X compinit
autoload -U edit-command-line
autoload -U add-zsh-hook
autoload -U url-quote-magic
autoload -U bracketed-paste-magic
## zmodload Modules
zmodload zsh/complist
## Load my functions
fpath=( $ZDOTDIR/functions $fpath )
autoload CleanTmp
autoload setTermTitle
autoload tempPersist
autoload has
## check for and load .local/share/zsh/site-functions
[ -d "$HOME/.local/share/zsh/site-functions" ] && fpath=("$HOME/.local/share/zsh/site-functions" $fpath)
## Source Other files
source $HOME/.profile
source ${ZDOTDIR}/aliases
source ${ZDOTDIR}/dir_aliases
source ${ZDOTDIR}/prompt
source ${ZDOTDIR}/keyboard
source ${ZDOTDIR}/history
source ${ZDOTDIR}/hooks
source ${ZDOTDIR}/theme
## Source Functions
source ${ZDOTDIR}/functions/*
## Set options
## NOTE: zsh ignores case and underscores
setopt vi ## Use vi style keybinds
setopt autoCd ## Change to directory if given as command
setopt autoPushd ## Automatically use pushd and stack
setopt chaseDots ## Remove contradictory .. from cd path (e.g cd foo/bar/.. -> cd foo)
setopt correct ## Pick up on Spelling errors
setopt extendedGlob ## Allow extended globbing (see man zshexpn)
setopt markDirs ## Add a trailing '/' to directories when globbing
setopt interactiveComments ## allow comments in interactive shells
setopt rmStarWait ## wait 10 seconds when confirming large deletes
## Set option
setopt emacs ## Emacs style keybinds
setopt autocd ## Change to directory if given as command
setopt autopushd ## Automatically use pushd and stack
setopt correct ## Pick up on Spelling errors
setopt SHARE_HISTORY ## Share history across sessions
setopt hist_verify ## Edit Commands after expansion
## Configure History File
export HISTSIZE=10000
export SAVEHIST=$HISTSIZE
export HISTFILE=$HOME/.zhistory
## Configure Completions
zstyle ':completion:*' menu select ## use menu to select where possible
zstyle ':completion:*:descriptions' format '%U%B%d%b%u' ## better descriptions format
zstyle ':completion:*:warnings' format '%BSorry, no matches for: %d%b' ## show when no matches
zstyle ':completion:*' completer _complete _match _approximate ## fuzzy match
zstyle ':completion:*:match:*' original only
zstyle -e ':completion:*:approximate:*' \
max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)' ## more errors in longer lines
zstyle ':completion:*:functions' ignored-patterns '_*' ## ignore completions for commands I dont have
zstyle ':completion:*' squeeze-slashes true ## remove trailing slashes
zstyle ':completion:*:cd:*' ignore-parents parent pwd ## don't complete parent dir
source ${ZDOTDIR}/completion
compinit
_comp_options+=(globdots)
## Configure command line editor
zle -N edit-command-line
bindkey "^X^E" edit-command-line
## Enable gpg-agent support
if [[ "$USE_GPG_AGENT" == "true" ]]; then
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
gpg-connect-agent /bye
export GPG_TTY=$(tty)
fi
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
gpg-connect-agent /bye
export GPG_TTY=$(tty)
## Load external stuff
##Configure for homebrew
if [[ -d "/home/linuxbrew" ]]; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi
if [[ -f ${XDG_DATA_HOME:="$HOME/.local/share"}/ghcup/env ]]; then
source ${XDG_DATA_HOME:="$HOME/.local/share"}/ghcup/env
fi
## support for opam
test -r $HOME/.opam/opam-init/init.zsh && . $HOME/.opam/opam-init/init.zsh > /dev/null 2> /dev/null ||
## Configure Plugins
export ZSH_AUTOSUGGEST_STRATEGY=(completion history) # suggest from completion then history
export ZSH_AUTOSUGGEST_USE_ASYNC=1 # make async for SPEED
export ZSH_AUTOSUGGEST_HISTORY_IGNORE='(cd|cp|tar|mv|ls|nvim|rm|rmdir|git) *'
## Load Plugins with ZshPlug
export ZSH_PLUG_plugins=( "zsh-users/zsh-autosuggestions" \
"zdharma-continuum/fast-syntax-highlighting" \
"jeffreytse/zsh-vi-mode" \
"MichaelAquilina/zsh-you-should-use"\
)
export ZSH_PLUG_plugins=( "zsh-users/zsh-autosuggestions" "zdharma-continuum/fast-syntax-highlighting" "MichaelAquilina/zsh-you-should-use" )
source $ZDOTDIR/ZshPlug/ZshPlug.zsh
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
@ -106,4 +92,4 @@ source $ZDOTDIR/ZshPlug/ZshPlug.zsh
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward
[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward
source $ZDOTDIR/greet
$ZDOTDIR/greet