From 2365f43535c07637b31757fbf7f04869f0bd4573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Fri, 31 May 2024 17:33:30 +0200 Subject: [PATCH] restructure --- NixOS/home.nix | 6 +- NixOS/modules/zsh.nix | 19 -- NixOS/modules/zsh/config.nix | 89 +++++- NixOS/modules/zsh/files/completion.zsh | 9 + NixOS/modules/zsh/files/extra.zsh | 280 ------------------ .../zsh/files/{search.zsh => keys.zsh} | 43 ++- NixOS/modules/zsh/files/term.zsh | 27 ++ NixOS/modules/zsh/files/waypipe.zsh | 18 ++ 8 files changed, 181 insertions(+), 310 deletions(-) delete mode 100644 NixOS/modules/zsh.nix create mode 100644 NixOS/modules/zsh/files/completion.zsh delete mode 100644 NixOS/modules/zsh/files/extra.zsh rename NixOS/modules/zsh/files/{search.zsh => keys.zsh} (55%) create mode 100644 NixOS/modules/zsh/files/term.zsh create mode 100644 NixOS/modules/zsh/files/waypipe.zsh diff --git a/NixOS/home.nix b/NixOS/home.nix index 2f88e6f..8191e37 100644 --- a/NixOS/home.nix +++ b/NixOS/home.nix @@ -2,7 +2,7 @@ { imports = [ - (import ./modules/zsh.nix {inherit config pkgs;}) + (import ./modules/zsh/config.nix {inherit config pkgs;}) ]; home.stateVersion = "24.11"; @@ -26,6 +26,10 @@ enable = true; userName = "Thomas Avé"; userEmail = "email@thomasave.be"; + aliases = { + s = "status"; + a = "add"; + }; }; home.sessionVariables = { diff --git a/NixOS/modules/zsh.nix b/NixOS/modules/zsh.nix deleted file mode 100644 index 6a264f1..0000000 --- a/NixOS/modules/zsh.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.packages = with pkgs; [ - htop - ]; - - programs.zsh = { - enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - shellAliases = { - ll = "ls -lhat"; - }; - history.size = 10000; - history.path = "${config.xdg.dataHome}/zsh/history"; - }; -} diff --git a/NixOS/modules/zsh/config.nix b/NixOS/modules/zsh/config.nix index 7a87b1f..4ab165a 100644 --- a/NixOS/modules/zsh/config.nix +++ b/NixOS/modules/zsh/config.nix @@ -2,29 +2,100 @@ { home.packages = with pkgs; [ - fzf fzy - zoxide + lf curl + fd zsh-powerlevel10k zsh-autocomplete + zsh-vi-mode + ripgrep + rsync + moreutils ]; + home.sessionVariables = { + BROWSER = "firefox"; + GPULAB_CERT = "${config.xdg.dataHome}/gpulab.pem"; + GPULAB_DEV = "False"; + GCC_COLORS = "error = '01;31:warning = '01;35:note = '01;36:caret = '01;32:locus = '01:quote = '01'"; + ARCHFLAGS = "-arch x86_64"; + TERM = "screen-256color"; + PYTHONDONTWRITEBYTECODE = "1"; + GOPATH = "${config.xdg.dataHome}/go"; + }; - home.file = { - ".zshrc".source = ./files/zshrc; - ".config/zsh/.p10k.zsh".source = ./files/p10k.zsh; - } - + programs.command-not-found.enable = true; + programs.zoxide = { + enable = true; + enableZshIntegration = true; + }; + programs.fzf = { + enable = true; + enableZshIntegration = true; + }; programs.zsh = { enable = true; enableCompletion = true; - syntaxHighlighting.enable = true; + syntaxHighlighting.enable = false; autosuggestion.enable = true; shellAliases = { + mallorea = "run_waypipe mallorea"; + vault = "run_waypipe vault"; + riva = "run_waypipe riva"; + kell = "run_waypipe kell"; + aloria = "run_waypipe aloria"; + ll = "ls -lhat"; + ls = "ls --color=auto"; + lf = "cd \"\$(${pkgs.lf}/bin/lf -print-last-dir)\""; + + compress = "tar --use-compress-program = lbzip2 -cvf"; + wget = "wget --hsts-file = \"$XDG_DATA_HOME/wget-hsts\""; + python = "python3"; + v = "nvim -c ':lua require(\"oil\").open()' && cd \"\$(cat /tmp/oil_dir 2> /dev/null || pwd)\""; + cpr = "rsync --archive -hh --partial --info = stats1,progress2 --modify-window = 1"; + mvr = "rsync --archive -hh --partial --info = stats1,progress2 --modify-window = 1 --remove-source-files"; + rg = "rg -i --colors 'match:bg:yellow' --colors 'match:fg:black' --colors 'match:style:nobold' --colors 'path:fg:green' --colors 'path:style:bold' --colors 'line:fg:yellow' --colors 'line:style:bold'"; + ag = "rg -i --colors 'match:bg:yellow' --colors 'match:fg:black' --colors 'match:style:nobold' --colors 'path:fg:green' --colors 'path:style:bold' --colors 'line:fg:yellow' --colors 'line:style:bold'"; + push = "git add -A && git commit -m '`date`' && git push"; + reset = "tput reset"; }; - history.size = 10000; + history.size = 10000000; + history.save = 10000000; history.path = "${config.xdg.dataHome}/zsh/history"; + autocd = true; + plugins = [ + { + name = "powerlevel10k-config"; + src = ./files; + file = "p10k.zsh"; + } + { + name = "term-config"; + src = ./files; + file = "term.zsh"; + } + { + name = "key-config"; + src = ./files; + file = "keys.zsh"; + } + { + name = "waypipe-config"; + src = ./files; + file = "waypipe.zsh"; + } + { + name = "zsh-powerlevel10k"; + src = "${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/"; + file = "powerlevel10k.zsh-theme"; + } + { + name = "vi-mode"; + src = pkgs.zsh-vi-mode; + file = "share/zsh-vi-mode/zsh-vi-mode.plugin.zsh"; + } + ]; }; } diff --git a/NixOS/modules/zsh/files/completion.zsh b/NixOS/modules/zsh/files/completion.zsh new file mode 100644 index 0000000..7201b92 --- /dev/null +++ b/NixOS/modules/zsh/files/completion.zsh @@ -0,0 +1,9 @@ +# Use LS colors for ZSH completion + +export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:' + +zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*' menu select +zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' +zstyle ':completion::complete:*' gain-privileges 1 +zstyle ':completion:*' rehash true diff --git a/NixOS/modules/zsh/files/extra.zsh b/NixOS/modules/zsh/files/extra.zsh deleted file mode 100644 index 85d4f9d..0000000 --- a/NixOS/modules/zsh/files/extra.zsh +++ /dev/null @@ -1,280 +0,0 @@ -# Use LS colors for ZSH completion -zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} -zstyle ':completion:*' menu select - -if [ -n "${commands[fzf-share]}" ]; then - source "$(fzf-share)/key-bindings.zsh" - source "$(fzf-share)/completion.zsh" -fi - -# create a zkbd compatible hash; -# to add other keys to this hash, see: man 5 terminfo -typeset -g -A key - -# We need this here since it's used below -if command -v fdfind &> /dev/null; then - alias fd="fdfind" -fi - -# Use vi-mode -ZVM_VI_INSERT_ESCAPE_BINDKEY=jj - -# Finally, make sure the terminal is in application mode, when zle is -# active. Only then are the values from $terminfo valid. -if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then - autoload -Uz add-zle-hook-widget - function zle_application_mode_start { echoti smkx } - function zle_application_mode_stop { echoti rmkx } - add-zle-hook-widget -Uz zle-line-init zle_application_mode_start - add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop -fi - -function cd_to() { - setopt localoptions pipefail no_aliases 2> /dev/null - local dir=$1 - if [[ -z "$dir" ]]; then - zle redisplay - return 0 - fi - zle push-line # Clear buffer. Auto-restored on next prompt. - cd $dir - zle accept-line - local ret=$? - unset dir # ensure this doesn't end up appearing in prompt expansion - zle reset-prompt -} - -function find_local() { - fd . -t $1 | fzy -l 20 -} - -function find_global() { - file_type=$1 - FZY_CACHE=~/.cache/fzy_paths_$file_type - if [ -f $FZY_CACHE ]; then - if [ $(stat -c %Y $FZY_CACHE) -lt $(date +%s -d '-1 day') ]; then - rm $FZY_CACHE - fi - fi - if [ ! -f $FZY_CACHE ]; then - PATHS="$(/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME ls-files)" - if [ "$file_type" = "d" ]; then - PATHS="$(echo -e $PATHS | xargs -n 1 dirname | uniq | grep -v '^\.$' | parallel echo ~/{})" - else - PATHS="$(echo -e $PATHS | parallel echo ~/{})" - fi - search_dirs=(~/Workspace/ ~/Containers/ /home/server/Storage/Thomas/) - for i in "$search_dirs[@]"; do - if [ -d $i ]; then - PATHS="$PATHS\n$i" - PATHS+="\n$(fd . $i -t $file_type -d 8)" - fi - done - echo -e "$PATHS" > $FZY_CACHE - fi - file="$(cat $FZY_CACHE | fzy -l 20)" - echo "$file" | cat - $FZY_CACHE | awk '!x[$0]++' > /tmp/fzy_paths_$file_type && mv /tmp/fzy_paths_$file_type $FZY_CACHE - echo "$file" -} - -function open_path() { - file_type=$1 - search_fn=$2 - selection="$($search_fn $file_type)" - if [ "$selection" = "" ]; then - zle reset-prompt - return - fi - if [ "$LBUFFER" = "" ]; then - if [ "$file_type" = "d" ]; then - cd_to "$selection" - else - selection=$(realpath "$selection") - cd_to "$(dirname \"$selection\")" - nvim "$selection" - fi - else - emulate -L zsh - zle -I - LBUFFER="${LBUFFER}\"$selection\"" - zle reset-prompt - fi -} - -function zvm_after_init() { - key[Home]="${terminfo[khome]}" - key[End]="${terminfo[kend]}" - key[Insert]="${terminfo[kich1]}" - key[Backspace]="${terminfo[kbs]}" - key[Delete]="${terminfo[kdch1]}" - key[Up]="${terminfo[kcuu1]}" - key[Down]="${terminfo[kcud1]}" - key[Left]="${terminfo[kcub1]}" - key[Right]="${terminfo[kcuf1]}" - key[PageUp]="${terminfo[kpp]}" - key[PageDown]="${terminfo[knp]}" - key[Shift-Tab]="${terminfo[kcbt]}" - - # setup key accordingly - [[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line - [[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line - [[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode - [[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char - [[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char - [[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history - [[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history - [[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char - [[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char - [[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history - [[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history - [[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete - - autoload -Uz up-line-or-beginning-search down-line-or-beginning-search - zle -N up-line-or-beginning-search - zle -N down-line-or-beginning-search - [[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search - [[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search - - - if [ -f "/usr/share/doc/pkgfile/command-not-found.zsh" ]; then - source /usr/share/doc/pkgfile/command-not-found.zsh - fi - - #FZF - if [ -f "/usr/share/doc/fzf/examples/key-bindings.zsh" ]; then - source /usr/share/doc/fzf/examples/key-bindings.zsh - source /usr/share/doc/fzf/examples/completion.zsh - elif [ -f "/usr/share/fzf/key-bindings.zsh" ]; then - source /usr/share/fzf/key-bindings.zsh - source /usr/share/fzf/completion.zsh - fi - - if [ -f "/usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh" ]; then - source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh - fi - - function open_global_path_d() { open_path d find_global } - function open_global_path_f() { open_path f find_global } - function open_local() { open_path f find_local } - - zle -N push_local_files - zle -N find_local_directories - - function register_key() { - zle -N $2 - bindkey "^$1" $2 - bindkey -M emacs "^$1" $2 - bindkey -M vicmd "^$1" $2 - bindkey -M viins "^$1" $2 - } - - register_key "T" open_global_path_d - register_key "E" open_global_path_f - register_key "W" open_local - - if [ "$SSH_SESSION_ID" != "" ]; then - mkdir -p /tmp/ssh_sessions - echo $$ > /tmp/ssh_sessions/"$SSH_SESSION_ID" - fi - if [ "$REMOTE_PATH" != "" ]; then - if [ -d "$REMOTE_PATH" ]; then - cd "$REMOTE_PATH" - fi - elif [ "$PREVIOUS_SESSION_ID" != "" ]; then - cd "$(readlink -e /proc/$(cat /tmp/ssh_sessions/$PREVIOUS_SESSION_ID)/cwd)" - fi -} - -zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' -zstyle ':completion::complete:*' gain-privileges 1 -zstyle ':completion:*' rehash true - - -autoload -Uz compinit -compinit -d "$XDG_CACHE_HOME"/zsh/zcompdump-"$ZSH_VERSION" - - -export HISTFILE="$XDG_STATE_HOME"/zsh/history -export HISTSIZE=10000000 -export SAVEHIST=10000000 - -unsetopt share_history - -BROWSER=/usr/bin/firefox - -# Add bash aliases. -if [ -f ~/.bash_aliases ]; then - source ~/.bash_aliases -fi - -# GPULab -export GPULAB_CERT="$XDG_DATA_HOME/gpulab.pem" -export GPULAB_DEV='False' - -# Smartcd -export SMARTCD_QUIET=1 -if [ -f ~/.smartcd_config ]; then - source ~/.smartcd_config -fi - -export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' -export EDITOR=nvim -export LANG=en_US.UTF-8 -export ARCHFLAGS="-arch x86_64" -export SSH_KEY_PATH="~/.ssh/rsa_id" -export PYTHONDONTWRITEBYTECODE=1 -export TERM="screen-256color" -export PATH=$HOME/.local/bin:$HOME/.cargo/bin:$PATH -export GOPATH=/tmp/go - -if command -v micromamba &> /dev/null; then - eval "$(micromamba shell hook --shell zsh)" - export MAMBA_ROOT_PREFIX="$HOME/.micromamba"; -fi - -autoload -Uz add-zsh-hook - -eval "$(zoxide init zsh --cmd j)" - -function xterm_title_precmd () { - print -Pn -- '\e]2;%n@%m %~\a' -} - -function xterm_title_preexec () { - print -Pn -- '\e]2;' && print -n -- "${(q)1}\a" -} - - -if [[ "$TERM" == (Eterm*|alacritty*|aterm*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then - add-zsh-hook -Uz precmd xterm_title_precmd - add-zsh-hook -Uz preexec xterm_title_preexec -fi - - -########################################### -# Aliases -########################################### - -if [[ "$(hostname)" == "mallorea" ]]; then - alias lf="/usr/bin/lf -last-dir-path /tmp/lf_dir && cd \"\$(cat /tmp/lf_dir 2> /dev/null || pwd)\"" -else - alias lf="cd \"\$(/usr/bin/lf -print-last-dir)\"" -fi - -function o () { - xdg-open "$1" &! -} - -function run_waypipe() { - SSH_SESSION_ID=$RANDOM - REMOTE_PATH=$(echo $(pwd) | sed "s|/home/[a-z]*|\$HOME|g") - SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t $1 env REMOTE_PATH=\"$REMOTE_PATH\" SSH_SESSION_ID=$SSH_SESSION_ID "zsh --login" -} - -function git() { - if [ "$HOME" = "$(pwd)" ]; then - /usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME" "$@" - else - /usr/bin/git "$@" - fi -} diff --git a/NixOS/modules/zsh/files/search.zsh b/NixOS/modules/zsh/files/keys.zsh similarity index 55% rename from NixOS/modules/zsh/files/search.zsh rename to NixOS/modules/zsh/files/keys.zsh index 2c1c6ec..2686b7d 100644 --- a/NixOS/modules/zsh/files/search.zsh +++ b/NixOS/modules/zsh/files/keys.zsh @@ -1,3 +1,6 @@ +# Use vi-mode +ZVM_VI_INSERT_ESCAPE_BINDKEY=jj + function cd_to() { setopt localoptions pipefail no_aliases 2> /dev/null local dir=$1 @@ -26,7 +29,7 @@ function find_global() { fi fi if [ ! -f $FZY_CACHE ]; then - PATHS="$(/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME ls-files)" + PATHS="$(git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME ls-files)" if [ "$file_type" = "d" ]; then PATHS="$(echo -e $PATHS | xargs -n 1 dirname | uniq | grep -v '^\.$' | parallel echo ~/{})" else @@ -77,6 +80,44 @@ function open_local() { open_path f find_local } zle -N push_local_files zle -N find_local_directories +key[Home]="${terminfo[khome]}" +key[End]="${terminfo[kend]}" +key[Insert]="${terminfo[kich1]}" +key[Backspace]="${terminfo[kbs]}" +key[Delete]="${terminfo[kdch1]}" +key[Up]="${terminfo[kcuu1]}" +key[Down]="${terminfo[kcud1]}" +key[Left]="${terminfo[kcub1]}" +key[Right]="${terminfo[kcuf1]}" +key[PageUp]="${terminfo[kpp]}" +key[PageDown]="${terminfo[knp]}" +key[Shift-Tab]="${terminfo[kcbt]}" + +# setup key accordingly +[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line +[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line +[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode +[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char +[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char +[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history +[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history +[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char +[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char +[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history +[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history +[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete + +autoload -Uz up-line-or-beginning-search down-line-or-beginning-search +zle -N up-line-or-beginning-search +zle -N down-line-or-beginning-search +[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search +[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search + +zle -N fzf-history-widget +bindkey -M vicmd "^R" fzf-history-widget +bindkey -M viins "^R" fzf-history-widget +bindkey -M emacs "^R" fzf-history-widget + function register_key() { zle -N $2 bindkey "^$1" $2 diff --git a/NixOS/modules/zsh/files/term.zsh b/NixOS/modules/zsh/files/term.zsh new file mode 100644 index 0000000..168744a --- /dev/null +++ b/NixOS/modules/zsh/files/term.zsh @@ -0,0 +1,27 @@ +# create a zkbd compatible hash; +# to add other keys to this hash, see: man 5 terminfo +typeset -g -A key + +# Finally, make sure the terminal is in application mode, when zle is +# active. Only then are the values from $terminfo valid. +if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then + autoload -Uz add-zle-hook-widget + function zle_application_mode_start { echoti smkx } + function zle_application_mode_stop { echoti rmkx } + add-zle-hook-widget -Uz zle-line-init zle_application_mode_start + add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop +fi + +function xterm_title_precmd () { + print -Pn -- '\e]2;%n@%m %~\a' +} + +function xterm_title_preexec () { + print -Pn -- '\e]2;' && print -n -- "${(q)1}\a" +} + + +if [[ "$TERM" == (Eterm*|alacritty*|aterm*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then + add-zsh-hook -Uz precmd xterm_title_precmd + add-zsh-hook -Uz preexec xterm_title_preexec +fi diff --git a/NixOS/modules/zsh/files/waypipe.zsh b/NixOS/modules/zsh/files/waypipe.zsh new file mode 100644 index 0000000..316579a --- /dev/null +++ b/NixOS/modules/zsh/files/waypipe.zsh @@ -0,0 +1,18 @@ +if [ "$SSH_SESSION_ID" != "" ]; then + mkdir -p /tmp/ssh_sessions + echo $$ > /tmp/ssh_sessions/"$SSH_SESSION_ID" +fi + +if [ "$REMOTE_PATH" != "" ]; then + if [ -d "$REMOTE_PATH" ]; then + cd "$REMOTE_PATH" + fi +elif [ "$PREVIOUS_SESSION_ID" != "" ]; then + cd "$(readlink -e /proc/$(cat /tmp/ssh_sessions/$PREVIOUS_SESSION_ID)/cwd)" +fi + +function run_waypipe() { + SSH_SESSION_ID=$RANDOM + REMOTE_PATH=$(echo $(pwd) | sed "s|/home/[a-z]*|\$HOME|g") + SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t $1 env REMOTE_PATH=\"$REMOTE_PATH\" SSH_SESSION_ID=$SSH_SESSION_ID "zsh --login" +}