diff --git a/system/home/desktop.nix b/system/home/desktop.nix index 62b4f03a..7d8d5dde 100644 --- a/system/home/desktop.nix +++ b/system/home/desktop.nix @@ -21,7 +21,7 @@ alacritty = { enable = true; settings = { - shell = "${config.programs.nushell.package}/bin/nu"; + shell = "${config.programs.zsh.package}/bin/zsh"; window = { dynamic_title = true; padding = { diff --git a/system/home/plasma/konsole.nix b/system/home/plasma/konsole.nix index e2c3bfc3..c9fb6a7e 100644 --- a/system/home/plasma/konsole.nix +++ b/system/home/plasma/konsole.nix @@ -8,7 +8,7 @@ profiles.onelight = { name = "One-Light"; colorScheme = "onelight"; - command = "${config.programs.nushell.package}/bin/nu"; + command = "${config.programs.zsh.package}/bin/zsh"; font = { inherit (config.stylix.fonts.monospace) name; size = config.stylix.fonts.sizes.terminal; diff --git a/system/home/shell/default.nix b/system/home/shell/default.nix index 778a2db2..344c4bfe 100644 --- a/system/home/shell/default.nix +++ b/system/home/shell/default.nix @@ -22,7 +22,6 @@ fd.enable = true; jq.enable = true; nix-index.enable = true; - nushell.enable = true; ripgrep.enable = true; bat = { enable = true; @@ -97,5 +96,36 @@ copy_on_select = true; }; }; + zsh = { + enable = true; + enableCompletion = true; + autocd = true; + autosuggestion.enable = true; + defaultKeymap = "emacs"; + syntaxHighlighting = { + enable = true; + highlighters = [ + "brackets" + "cursor" + ]; + }; + historySubstringSearch.enable = true; + history = { + extended = true; + share = true; + ignoreDups = true; + ignoreAllDups = true; + ignoreSpace = true; + expireDuplicatesFirst = true; + }; + initExtra = '' + ## completion config and styling + zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' + zstyle ':completion:*' menu 'select=long-list' + + ## transient prompt + source ${./transient.zsh} + ''; + }; }; } diff --git a/system/home/shell/starship.nix b/system/home/shell/starship.nix index 72d9baec..2d831b24 100644 --- a/system/home/shell/starship.nix +++ b/system/home/shell/starship.nix @@ -143,8 +143,8 @@ disabled = false; format = "using [$indicator]($style)"; bash_indicator = " "; + zsh_indicator = "󰰶 "; fish_indicator = "󰈺 "; - nu_indicator = "ν "; powershell_indicator = " "; cmd_indicator = " "; unknown_indicator = " "; diff --git a/system/home/shell/transient.zsh b/system/home/shell/transient.zsh new file mode 100755 index 00000000..1f7bbd82 --- /dev/null +++ b/system/home/shell/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