feat(zsh): Finished reorganise zsh with a same entry point for all platforms

This commit is contained in:
js0ny 2024-11-30 01:29:47 +00:00
parent bd5ca49c3e
commit 2b21b63a13
22 changed files with 503 additions and 369 deletions

89
tools/zsh/mod/alias.zsh Normal file
View file

@ -0,0 +1,89 @@
# $DOTFILES/tools/zsh/mod/alias.zsh
# Sourced by user's zshrc 在用户的 zshrc 中被引用
# PowerShell Equivalent, for cross-platform compatibility
alias ni=touch
alias cls=clear
alias ii=open
# Dev #
alias gpp='g++ -std=c++2b' # Set the default C++ standard to C++20
alias gcc='gcc -std=c99' # Set the default C standard to C99
alias cl='clang -std=c99'
alias clpp='clang++ -std=c++2b'
alias python=python3 # Set the default Python version to Python 3
alias py=python # Alias for Python
alias pip=pip3 # Alias for pip
# alias bashcfg="nvim ~/.bashrc"
alias zshcfg="nvim $ZDOTDIR/.zshrc"
alias shcfg=zshcfg
alias reload="source $ZDOTDIR/.zshrc"
alias nvimrc="nvim $XDG_CONFIG_HOME/nvim/"
alias pulldots="cd $DOTFILES && git pull"
# Editors #
alias v=nvim
alias c=code
alias sv="sudo vim"
alias sn="sudo nvim"
# lsd - modern ls
if command -v lsd > /dev/null; then
alias ls='lsd -A'
alias l='lsd -lah'
alias ll='lsd -l'
alias tree='lsd --tree'
fi
# Functions #
mkcd() {
mkdir -p $1 && cd $1
}
cdls(){
cd $1 && ls
}
tc(){
touch $1 && code $1
}
tv(){
touch $1 && nvim $1
}
# Use neovide as gVim
gvi() {
local target=$1
if command -v neovide.exe > /dev/null; then
neovide.exe "$target"
else
if command -v neovide > /dev/null; then
neovide "$target"
else
echo "neovide is not installed"
fi
fi
}
alias update="source $DOTFILES/scripts/update.zsh"
if command -v pacman > /dev/null; then
alias pac="sudo pacman"
alias paci="sudo pacman -S"
alias pacr="sudo pacman -R"
alias pacu="sudo pacman -Syu"
fi
if command -v apt > /dev/null; then
alias apt="sudo apt"
alias apti="sudo apt install"
alias aptu="sudo apt update && sudo apt upgrade"
alias aptr="sudo apt autoremove && sudo apt remove"
fi
if command -v brew > /dev/null; then
alias brewi="brew install"
alias brewu="brew update && brew upgrade"
alias brewc="brew cleanup"
alias brewr="brew uninstall"
fi

41
tools/zsh/mod/config.zsh Normal file
View file

@ -0,0 +1,41 @@
# $DOTFILES/tools/zsh/mod/config.zsh
# Sourced by user's zshrc 在用户的 zshrc 中被引用
# ZSH Config, no need to `export` these variables
HISTFILE="$XDG_STATE_HOME"/zsh/history
HIST_STAMPS="yyyy-mm-dd"
HISTSIZE=10000
SAVEHIST=10000
# Manually manage plugins 手动管理插件
# Load zsh-syntax-highlighting before zsh-history-substring-search
# Reference: https://github.com/zsh-users/zsh-history-substring-search?tab=readme-ov-file#usage
plugins=(
"zsh-autosuggestions"
"zsh-syntax-highlighting"
"zsh-history-substring-search"
)
plugin_dir="$ZDOTDIR/plugins"
for plugin in "${plugins[@]}"; do
plugin_path="$plugin_dir/$plugin/$plugin.zsh"
if [[ -f $plugin_path ]]; then
source "$plugin_path"
else
echo "Warning: Plugin not found: $plugin_path"
fi
done
# https://unix.stackexchange.com/questions/33994/
# Use `set -k` to mark leading `#` as a comment character
set -k
# TODO: Below should be reorganized
export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
export PATH=$HOME/.local/share/gem/ruby/3.3.0/bin:$PATH # Ruby Executables
export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

46
tools/zsh/mod/keymap.zsh Normal file
View file

@ -0,0 +1,46 @@
# $DOTFILES/tools/zsh/mod/keymap.zsh
# Sourced by user's zshrc 在用户的 zshrc 中被引用
bindkey -v # Vi Keybindings
# Colemak hnei
# ^
# n
# < h i >
# e
# v
# bindkey -M vicmd 'h' vi-backward-char # No change
bindkey -M vicmd 'n' down-line-or-history
bindkey -M vicmd 'e' up-line-or-history
bindkey -M vicmd 'i' vi-forward-char
# Similar position to [i] in QWERTY
bindkey -M vicmd 'l' vi-insert
bindkey -M vicmd 'L' vi-insert-bol
# Ne{[k]s}t
bindkey -M vicmd 'k' vi-repeat-search
bindkey -M vicmd 'K' vi-rev-repeat-search
# [J]ump
bindkey -M vicmd 'j' vi-forward-word-end
bindkey -M vicmd 'J' vi-forward-blank-word-end
# Use N to Join
bindkey -M vicmd 'N' vi-join
# Emacs Hybrid
bindkey '^A' beginning-of-line
bindkey '^E' end-of-line
bindkey '^F' forward-char
bindkey '^B' backward-char
bindkey '^P' up-line-or-history
bindkey '^N' down-line-or-history
bindkey '^R' history-incremental-search-backward
# TODO: did not test
bindkey '^K' kill-line
bindkey '^X^E' edit-command-line
# LEADER CONVENTION
# ^X defines as a prefix key in shell
# ^A defines as a prefix key in tmux
# ^B defines as a prefix key in Terminal Emulators
# SPC defines as a prefix key in nvim

39
tools/zsh/mod/navi.zsh Normal file
View file

@ -0,0 +1,39 @@
# $DOTFILES/tools/zsh/mod/navi.zsh
# Sourced by user's zshrc 在用户的 zshrc 中被引用
# Relative navigation #
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias ......="cd ../../../../.."
# Use `-` to jump to the previous directory
# Oh-My-Zsh defines a similar one
function - { cd - }
# Use `z` to jump to a directory
eval "$(zoxide init zsh)"
# Absolute navigation #
alias dotfiles="cd $DOTFILES && ls"
# TODO: Test on WSL
if [ "$IS_WSL" = true ]; then # IS_WSL is defined in $DOTFILES/platforms/wsl/zshrc
alias dt="cd /mnt/c/Users/$(whoami)/Desktop && ls"
alias doku="cd /mnt/c/Users/$(whoami)/Documents && ls"
alias down="cd /mnt/c/Users/$(whoami)/Downloads && ls"
alias src="cd /mnt/d/Source"
alias one="cd /mnt/c/Users/$(whoami)/OneDrive"
alias gdrive="cd /mnt/g"
else
alias dt="cd $HOME/Desktop && ls"
alias doku="cd $HOME/Documents && ls"
alias down="cd $HOME/Downloads && ls"
alias src="cd $HOME/Documents/Source"
fi
# macOS specific, no OneDrive & Google Drive on Linux
if [ "$(uname)" = "Darwin" ]; then
alias one="cd $HOME/OneDrive"
alias gdrive="cd $HOME/Google\ Drive"
fi

6
tools/zsh/mod/prompt.zsh Normal file
View file

@ -0,0 +1,6 @@
# $DOTFILES/tools/zsh/mod/prompt.zsh
# Sourced by user's zshrc 在用户的 zshrc 中被引用
export STARSHIP_CONFIG=$DOTFILES/tools/starship/starship_zsh.toml
eval "$(starship init zsh)"