From afd7732058d948cca0ed300bce244b4faf68f9be Mon Sep 17 00:00:00 2001 From: romkatv Date: Sat, 2 Mar 2019 15:59:43 +0100 Subject: [PATCH] docs --- README.md | 89 +++++++++++++++++++++++++++++++++++++++++------------ prompt.png | Bin 0 -> 12434 bytes 2 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 prompt.png diff --git a/README.md b/README.md index 06cfbca..8d55908 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,32 @@ Powerlevel10k is a theme for ZSH. It's a backward-compatible fork of [Powerlevel9k](https://github.com/bhilburn/powerlevel9k) with lower latency and better prompt responsiveness. -If you like the look and feel of Powerlevel9k but feeling frustrated by the -slow prompt, simply replace your `powerlevel9k` theme with `powerlevel10k` and -enjoy responsive shell like it's 80's again! +If you like the looks of Powerlevel9k but feeling frustrated by its slow prompt, +simply replace your `powerlevel9k` theme with `powerlevel10k` and enjoy responsive +shell like it's 80's again! Powerlevel10k uses the same configuration options as Powerlevel9k and produces the same results. It's simply faster. There is no catch. If you are on Linux or WSL, consider enabling [gitstatus](https://github.com/romkatv/gitstatus) -plugin for massive performance improvement in vcs/prompt segment. It works well with Powerlevel10k. +plugin for massive performance improvement in the vcs/prompt segment. ## Installation & Configuration -For installation and configuration instructions, see +For installation and configuration instructions see [Powerlevel9k](https://github.com/bhilburn/powerlevel9k). Everything in there applies to -Powerlevel10k as well. Follow the installation guide, make sure everything works and you like -the way prompt looks. Then simply replace `powerlevel9k.zsh-theme` with the one from Powerlevel10k -([link](https://github.com/romkatv/powerlevel10k/blob/master/powerlevel9k.zsh-theme)). Or replace -the whole `powerlevel9k` directory to gain the ability to `git pull` updates in the future. Once -you restart zsh, your prompt will be faster. +Powerlevel10k as well. Follow the official installation guide, make sure everything works +and you like the way prompt looks. Then simply replace file `powerlevel9k.zsh-theme` with +the one from Powerlevel10k +([link](https://github.com/romkatv/powerlevel10k/blob/master/powerlevel9k.zsh-theme)). +Or replace the whole `powerlevel9k` directory to gain the ability to `git pull` updates +in the future. Once you restart zsh, your prompt will be faster. + +```zsh +# Assuming oh-my-zsh at the standard location. Adjust to your circumstances. +rm -rf ~/.oh-my-zsh/custom/themes/powerlevel9k +git clone git@github.com:romkatv/powerlevel10k.git ~/.oh-my-zsh/custom/themes/powerlevel9k +``` **Do not load both Powerlevel9k and Powerlevel10k themes at the same time. Variable name clashes will cause mayhem. Source either one or the other. Consider Powerlevel10k @@ -30,15 +37,59 @@ a patched fork of Powerlevel9k, which it is.** ## How fast is it? -Powerlevel10k with [gitstatus](https://github.com/romkatv/gitstatus) renders prompt 5+ times -faster than Powerlevel9k. In some cases it can be over 10 times faster. When using Linux, -you should expect less than 50ms prompt latency in most cases, about 100ms in large git -repos and 200ms in huge repos such as Linux kernel. To get comfortable upper bound on -latency in any repo, set `GITSTATUS_DIRTY_MAX_INDEX_SIZE=4096`. It'll disable dirty file -scanning in repos with over 4k files. This should give you under 100ms prompt latency -everywhere. +Powerlevel10k with [gitstatus](https://github.com/romkatv/gitstatus) renders prompt about +10 times faster than powerlevel9k/master (stable version) and about 4 times faster than +powerlevel9k/next (beta version). Powerlevel10k is faster than Powerlevel9k even without +[gitstatus](https://github.com/romkatv/gitstatus) but the difference isn't as dramatic. + +Here's are benchmark results obtained with +[zsh-prompt-benchmark](https://github.com/romkatv/zsh-prompt-benchmark) on Intel i9-7900X +running Ubuntu 18.04. + +| Theme | / | ~/testrepo | ~/nerd-fonts | ~/linux | +|----------------------------|-------:|-----------:|-------------:|--------:| +| powerlevel9k/master | 135 ms | 207 ms | 234 ms | 326 ms | +| powerlevel9k/next | 47 ms | 101 ms | 122 ms | 213 ms | +| powerlevel10k w/ vcs_info | 24 ms | 82 ms | 104 ms | 197 ms | +| powerlevel10k w/ gitstatus | 11 ms | 14 ms | 31 ms | 76 ms | +| naked zsh | 1 ms | 1 ms | 1 ms | 1 ms | + +Columns define the current directory where the prompt was rendered. + + * `/` -- root directory, not a git repo. + * `~/testrepo` -- a tiny git repo. + * `~/nerd-fonts` -- [nerd-fonts](https://github.com/ryanoasis/nerd-fonts) git repo + with 4k files. + * `~/linux` -- [linux](https://github.com/torvalds/linux) git repo. Huge. + +Here's how the prompt looked like: + +![](https://raw.githubusercontent.com/romkatv/powerlevel10k/master/prompt.png) + +Configuration that was used during benchmarking: + +```zsh +POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir_writable dir vcs) +POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs time custom_rprompt) + +POWERLEVEL9K_MODE=nerdfont-complete +POWERLEVEL9K_PROMPT_ON_NEWLINE=true +POWERLEVEL9K_CUSTOM_RPROMPT=custom_rprompt +POWERLEVEL9K_ROOT_ICON=\\uF09CPOWERLEVEL9K_TIME_ICON=\\uF017 +POWERLEVEL9K_CUSTOM_RPROMPT_ICON=\\uF005 +POWERLEVEL9K_TIME_BACKGROUND=magenta +POWERLEVEL9K_CUSTOM_RPROMPT_BACKGROUND=blue +POWERLEVEL9K_STATUS_OK_BACKGROUND=grey53 +POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=orange1 +POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=black + +# Powerlevel10k extension to enable gitstatus. Has no effect on Powerlevel9k. +POWERLEVEL9K_VCS_STATUS_COMMAND=gitstatus_query_dir + +function custom_rprompt() echo -E "hello world" +``` ## What's the catch? -Really, there is no catch. It's the same prompt with the same flexibility and literally the -same configuration as Powerlevel9k but **much faster**. +Really, there is no catch. It's literally the same prompt with the same flexibility +configuration format as Powerlevel9k. But **much faster**. diff --git a/prompt.png b/prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..0985354aa91fb7143cfbffe0a7bae239bdcb22c3 GIT binary patch literal 12434 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 literal 0 HcmV?d00001