diff --git a/SwarselSystems.org b/SwarselSystems.org index 6f24ecd..92cb070 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -8751,91 +8751,124 @@ zsh is the most convenient shell for me and it happens to be super neat to confi Here we set some aliases (some of them should be shellApplications instead) as well as some zsh plugins like =fzf-tab=. #+begin_src nix :tangle profiles/common/home/zsh.nix - { config, pkgs, lib, ... }: - { - programs.zsh = { - enable = true; - shellAliases = lib.recursiveUpdate { - hg = "history | grep"; - hmswitch = "cd ~/.dotfiles; home-manager --flake .#$(whoami)@$(hostname) switch; cd -;"; - nswitch = "cd ~/.dotfiles; sudo nixos-rebuild --flake .#$(hostname) switch; cd -;"; - nswitch-stay = "cd ~/.dotfiles; git restore flake.lock; sudo nixos-rebuild --flake .#$(hostname) switch; cd -;"; - edithome = "e -w ~/.dotfiles/SwarselSystems.org"; - magit = "emacsclient -nc -e \"(magit-status)\""; - config = "git --git-dir=$HOME/.cfg/ --work-tree=$HOME"; - g = "git"; - c = "git --git-dir=$HOME/.dotfiles/.git --work-tree=$HOME/.dotfiles/"; - passpush = "cd ~/.local/share/password-store; git add .; git commit -m 'pass file changes'; git push; cd -;"; - passpull = "cd ~/.local/share/password-store; git pull; cd -;"; - hotspot = "nmcli connection up local; nmcli device wifi hotspot;"; - cd = "z"; - cdr = "cd \"$( (find /home/swarsel/Documents/GitHub -maxdepth 1 && echo /home/swarsel/.dotfiles) | fzf )\""; - nix-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd"; - fs-diff = "sudo mount -o subvol=/ /dev/mapper/cryptroot /mnt ; fs-diff"; - lt = "ls -lath"; - oldshell = "nix shell github:nixos/nixpkgs/\"$1\" \"$2\""; - } - config.swarselsystems.shellAliases; - autosuggestion.enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - autocd = false; - cdpath = [ - "~/.dotfiles" - # "~/Documents/GitHub" - ]; - defaultKeymap = "emacs"; - dirHashes = { - dl = "$HOME/Downloads"; - gh = "$HOME/Documents/GitHub"; - }; - history = { - expireDuplicatesFirst = true; - path = "$HOME/.histfile"; - save = 10000; - size = 10000; - }; - historySubstringSearch.enable = true; - plugins = [ - { - name = "fzf-tab"; - src = pkgs.zsh-fzf-tab; - } - ]; - initExtra = '' - bindkey "^[[1;5D" backward-word - bindkey "^[[1;5C" forward-word +{ config, pkgs, lib, ... }: +{ + programs.zsh = { + enable = true; + shellAliases = lib.recursiveUpdate + { + hg = "history | grep"; + hmswitch = "cd ~/.dotfiles; home-manager --flake .#$(whoami)@$(hostname) switch; cd -;"; + nswitch = "cd ~/.dotfiles; sudo nixos-rebuild --flake .#$(hostname) switch; cd -;"; + nswitch-stay = "cd ~/.dotfiles; git restore flake.lock; sudo nixos-rebuild --flake .#$(hostname) switch; cd -;"; + edithome = "e -w ~/.dotfiles/SwarselSystems.org"; + magit = "emacsclient -nc -e \"(magit-status)\""; + config = "git --git-dir=$HOME/.cfg/ --work-tree=$HOME"; + g = "git"; + c = "git --git-dir=$HOME/.dotfiles/.git --work-tree=$HOME/.dotfiles/"; + passpush = "cd ~/.local/share/password-store; git add .; git commit -m 'pass file changes'; git push; cd -;"; + passpull = "cd ~/.local/share/password-store; git pull; cd -;"; + hotspot = "nmcli connection up local; nmcli device wifi hotspot;"; + cd = "z"; + cdr = "cd \"$( (find /home/swarsel/Documents/GitHub -maxdepth 1 && echo /home/swarsel/.dotfiles) | fzf )\""; + nix-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd"; + fs-diff = "sudo mount -o subvol=/ /dev/mapper/cryptroot /mnt ; fs-diff"; + lt = "ls -lath"; + oldshell = "nix shell github:nixos/nixpkgs/\"$1\" \"$2\""; + } + config.swarselsystems.shellAliases; + autosuggestion.enable = true; + enableCompletion = true; + syntaxHighlighting.enable = true; + autocd = false; + cdpath = [ + "~/.dotfiles" + # "~/Documents/GitHub" + ]; + defaultKeymap = "emacs"; + dirHashes = { + dl = "$HOME/Downloads"; + gh = "$HOME/Documents/GitHub"; + }; + history = { + expireDuplicatesFirst = true; + path = "$HOME/.histfile"; + save = 10000; + size = 10000; + }; + historySubstringSearch.enable = true; + plugins = [ + { + name = "fzf-tab"; + src = pkgs.zsh-fzf-tab; + } + ]; + initExtra = '' + bindkey "^[[1;5D" backward-word + bindkey "^[[1;5C" forward-word - vterm_printf() { - if [ -n "$TMUX" ] && ([ "''${TERM%%-*}" = "tmux" ] || [ "''${TERM%%-*}" = "screen" ]); then - # Tell tmux to pass the escape sequences through - printf "\ePtmux;\e\e]%s\007\e\\" "$1" - elif [ "''${TERM%%-*}" = "screen" ]; then - # GNU screen (screen, screen-256color, screen-256color-bce) - printf "\eP\e]%s\007\e\\" "$1" - else - printf "\e]%s\e\\" "$1" - fi - } - vterm_prompt_end() { - vterm_printf "51;A$(whoami)@$(hostname):$(pwd)" - } - setopt PROMPT_SUBST - PROMPT=$PROMPT'%{$(vterm_prompt_end)%}' + my-backward-delete-word() { + # Copy the global WORDCHARS variable to a local variable. That way any + # modifications are scoped to this function only + local WORDCHARS=$WORDCHARS + # Use bash string manipulation to remove `:` so our delete will stop at it + WORDCHARS="''${WORDCHARS//:}" + # Use bash string manipulation to remove `/` so our delete will stop at it + WORDCHARS="''${WORDCHARS//\/}" + # Use bash string manipulation to remove `.` so our delete will stop at it + WORDCHARS="''${WORDCHARS//.}" + # zle will run an existing widget. + zle backward-delete-word + } + zle -N my-backward-delete-word + bindkey '^H' my-backward-delete-word - vterm_cmd() { - local vterm_elisp - vterm_elisp="" - while [ $# -gt 0 ]; do - vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")" - shift - done - vterm_printf "51;E$vterm_elisp" + # This will be our `ctrl+alt+w` command + my-backward-delete-whole-word() { + # Copy the global WORDCHARS variable to a local variable. That way any + # modifications are scoped to this function only + local WORDCHARS=$WORDCHARS + # Use bash string manipulation to add `:` to WORDCHARS if it's not present + # already. + [[ ! $WORDCHARS == *":"* ]] && WORDCHARS="$WORDCHARS"":" + # zle will run that widget. + zle backward-delete-word + } + # `zle -N` will create a new widget that we can use on the command line + zle -N my-backward-delete-whole-word + # bind this new widget to `ctrl+alt+w` + bindkey '^W' my-backward-delete-whole-word + + vterm_printf() { + if [ -n "$TMUX" ] && ([ "''${TERM%%-*}" = "tmux" ] || [ "''${TERM%%-*}" = "screen" ]); then + # Tell tmux to pass the escape sequences through + printf "\ePtmux;\e\e]%s\007\e\\" "$1" + elif [ "''${TERM%%-*}" = "screen" ]; then + # GNU screen (screen, screen-256color, screen-256color-bce) + printf "\eP\e]%s\007\e\\" "$1" + else + printf "\e]%s\e\\" "$1" + fi + } + vterm_prompt_end() { + vterm_printf "51;A$(whoami)@$(hostname):$(pwd)" + } + setopt PROMPT_SUBST + PROMPT=$PROMPT'%{$(vterm_prompt_end)%}' + + vterm_cmd() { + local vterm_elisp + vterm_elisp="" + while [ $# -gt 0 ]; do + vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")" + shift + done + vterm_printf "51;E$vterm_elisp" + } + + ''; + }; } - - ''; - }; - } #+end_src **** zellij diff --git a/profiles/common/home/zsh.nix b/profiles/common/home/zsh.nix index 9abb358..0189c0c 100644 --- a/profiles/common/home/zsh.nix +++ b/profiles/common/home/zsh.nix @@ -51,10 +51,42 @@ } ]; initExtra = '' - bindkey "^[[1;5D" backward-word - bindkey "^[[1;5C" forward-word + bindkey "^[[1;5D" backward-word + bindkey "^[[1;5C" forward-word - vterm_printf() { + my-backward-delete-word() { + # Copy the global WORDCHARS variable to a local variable. That way any + # modifications are scoped to this function only + local WORDCHARS=$WORDCHARS + # Use bash string manipulation to remove `:` so our delete will stop at it + WORDCHARS="''${WORDCHARS//:}" + # Use bash string manipulation to remove `/` so our delete will stop at it + WORDCHARS="''${WORDCHARS//\/}" + # Use bash string manipulation to remove `.` so our delete will stop at it + WORDCHARS="''${WORDCHARS//.}" + # zle will run an existing widget. + zle backward-delete-word + } + zle -N my-backward-delete-word + bindkey '^H' my-backward-delete-word + + # This will be our `ctrl+alt+w` command + my-backward-delete-whole-word() { + # Copy the global WORDCHARS variable to a local variable. That way any + # modifications are scoped to this function only + local WORDCHARS=$WORDCHARS + # Use bash string manipulation to add `:` to WORDCHARS if it's not present + # already. + [[ ! $WORDCHARS == *":"* ]] && WORDCHARS="$WORDCHARS"":" + # zle will run that widget. + zle backward-delete-word + } + # `zle -N` will create a new widget that we can use on the command line + zle -N my-backward-delete-whole-word + # bind this new widget to `ctrl+alt+w` + bindkey '^W' my-backward-delete-whole-word + + vterm_printf() { if [ -n "$TMUX" ] && ([ "''${TERM%%-*}" = "tmux" ] || [ "''${TERM%%-*}" = "screen" ]); then # Tell tmux to pass the escape sequences through printf "\ePtmux;\e\e]%s\007\e\\" "$1" @@ -65,13 +97,13 @@ printf "\e]%s\e\\" "$1" fi } - vterm_prompt_end() { + vterm_prompt_end() { vterm_printf "51;A$(whoami)@$(hostname):$(pwd)" - } - setopt PROMPT_SUBST - PROMPT=$PROMPT'%{$(vterm_prompt_end)%}' + } + setopt PROMPT_SUBST + PROMPT=$PROMPT'%{$(vterm_prompt_end)%}' - vterm_cmd() { + vterm_cmd() { local vterm_elisp vterm_elisp="" while [ $# -gt 0 ]; do