diff --git a/modules/shell.nix b/modules/shell.nix index d406798..62409c9 100644 --- a/modules/shell.nix +++ b/modules/shell.nix @@ -35,107 +35,56 @@ interactiveShellInit = "fetch-rs"; }; - #zsh stuff - users.defaultUserShell = pkgs.zsh; - programs = { - zsh = { - enable = true; - autosuggestions.enable = true; - syntaxHighlighting.enable = true; - histSize = 10000; - histFile = "$HOME/.cache/zsh_history"; - interactiveShellInit = '' - ### zsh-history-substring-search ### - setopt HIST_IGNORE_ALL_DUPS - source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh - bindkey '^[[A' history-substring-search-up - bindkey '^[[B' history-substring-search-down - ### fzf-tab ### - source ${pkgs.zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh - ### transient shell prompt ### - 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 - ''; - }; - #starship - starship = { - enable = true; - settings = { - add_newline = false; + programs.starship = { + enable = true; + settings = { + add_newline = false; + format = '' + $cmd_duration$git_metrics$git_state$git_branch + $status$directory$character''; + right_format = "$sudo$nix_shell\${custom.direnv} $time"; + continuation_prompt = "▶▶ "; + character = { + success_symbol = "[\\$](#9ece6a bold)"; + error_symbol = "[\\$](#db4b4b bold)"; + }; + status = { + disabled = false; + format = "[$status]($style) "; + }; + nix_shell = { + format = "[󱄅 ](#74b2ff)"; + heuristic = true; + }; + directory = { + read_only = " "; + }; + git_metrics = { + disabled = false; + }; + git_branch = { + format = "[$symbol$branch(:$remote_branch)]($style)"; + style = "bold red"; + }; + cmd_duration = { + min_time = 5000; + style = "bold #9ece6a"; + }; + custom.direnv = { + format = "[\\[direnv\\]]($style)"; + style = "#36c692"; + when = "printenv DIRENV_FILE"; + }; + time = { format = '' - $cmd_duration$git_metrics$git_state$git_branch - $status$directory$character''; - right_format = "$sudo$nix_shell\${custom.direnv} $time"; - continuation_prompt = "▶▶ "; - character = { - success_symbol = "[\\$](#9ece6a bold)"; - error_symbol = "[\\$](#db4b4b bold)"; - }; - status = { - disabled = false; - format = "[$status]($style) "; - }; - nix_shell = { - format = "[󱄅 ](#74b2ff)"; - heuristic = true; - }; - directory = { - read_only = " "; - }; - git_metrics = { - disabled = false; - }; - git_branch = { - format = "[$symbol$branch(:$remote_branch)]($style)"; - style = "bold red"; - }; - cmd_duration = { - min_time = 5000; - style = "bold #9ece6a"; - }; - custom.direnv = { - format = "[\\[direnv\\]]($style)"; - style = "#36c692"; - when = "printenv DIRENV_FILE"; - }; - time = { - format = '' - [$time]($style) - ''; - time_format = "%I:%M %p"; - disabled = false; - }; - sudo = { - format = "[ ](#7aa2f7)"; - disabled = false; - }; + [$time]($style) + ''; + time_format = "%I:%M %p"; + disabled = false; + }; + sudo = { + format = "[ ](#7aa2f7)"; + disabled = false; }; }; }; diff --git a/modules/zsh.nix b/modules/zsh.nix new file mode 100644 index 0000000..dc1239a --- /dev/null +++ b/modules/zsh.nix @@ -0,0 +1,53 @@ +{ pkgs }: +{ + users.defaultUserShell = pkgs.zsh; + programs = { + zsh = { + enable = true; + autosuggestions.enable = true; + syntaxHighlighting.enable = true; + histSize = 20000; + histFile = "$HOME/.cache/zsh_history"; + interactiveShellInit = '' + ### zsh-history-substring-search ### + setopt HIST_IGNORE_ALL_DUPS + source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh + bindkey '^[[A' history-substring-search-up + bindkey '^[[B' history-substring-search-down + ### fzf-tab ### + source ${pkgs.zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh + ### transient shell prompt ### + 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 + ''; + }; + + }; +}