diff --git a/home/zsh/default.nix b/home/zsh/default.nix new file mode 100644 index 00000000..abbf4813 --- /dev/null +++ b/home/zsh/default.nix @@ -0,0 +1,17 @@ +{...}: { + programs.zsh = { + enable = true; + enableAutosuggestions = true; + enableCompletion = true; + syntaxHighlighting.enable = true; + enableVteIntegration = true; + autocd = true; + historySubstringSearch.enable = true; + oh-my-zsh = { + enable = true; + plugins = ["colored-man-pages" "lol" "rand-quote"]; + theme = ""; + }; + extraInit = "source ${./transient.zsh}\n"; + }; +} diff --git a/home/zsh/transient.zsh b/home/zsh/transient.zsh new file mode 100755 index 00000000..0037b446 --- /dev/null +++ b/home/zsh/transient.zsh @@ -0,0 +1,31 @@ +#!/usr/bin/env zsh + +zle-line-init() { + emulate -L zsh + + [[ $CONTEXT == start ]] || return 0 + + while true; do + zle .recursive-edit + local -i ret=$? + [[ $ret == 0 && $KEYS == $'\4' ]] || break + [[ -o ignore_eof ]] || exit 0 + done + + local saved_prompt=$PROMPT + local saved_rprompt=$RPROMPT + PROMPT='%# ' + RPROMPT='' + zle .reset-prompt + PROMPT=$saved_prompt + RPROMPT=$saved_rprompt + + if ((ret)); then + zle .send-break + else + zle .accept-line + fi + return ret +} + +zle -N zle-line-init