zsh-bench | nushell | |
---|---|---|
24 | 213 | |
494 | 29,963 | |
- | 1.3% | |
4.1 | 9.9 | |
6 months ago | 6 days ago | |
Shell | Rust | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
zsh-bench
-
Oh My Zsh
Someone's made a benchmarking system for zsh: https://github.com/romkatv/zsh-bench#premade-configs
Of course, their config is the best according to the benchmark (and ohmyzsh is the slowest option), but DIY configs are also covered, particularly possible performance optimizations.
-
Faster Shell Startup with Shell Switching
Unfortunately, running exit is not a great strategy for running benchmarks. For zsh specifically, plugin managers are optimized for fast exit.
romkatv did a great write-up and benchmark within the context of zsh[0]. It's a great read.
[0] https://github.com/romkatv/zsh-bench#how-not-to-benchmark
- Dynamic Aliases and Functions in Zsh
- Benchmark for interactive zsh โ plugins, frameworks and plugin managers
- zsh-smartcache: another evalcache but can update the cache
-
Announcing Spaceship v4.0 โ a customizable Zsh prompt with asynchronous rendering
Given the addition of async rendering in the latest release of spaceship, I wasn't sure whether I should include performance in the list of features found in powerlevel10kbut but not in spaceship. I used zsh-bench to benchmark powerlevel10k on my laptop running on battery (I'm writing this on a train) with a config that makes powerlevel10k looks similar to spaceship. I simply ran p10k configure and chose what looked most similar: Lean Style, UNICODE, 256 colors, two lines, etc. Here are the benchmark results:
-
7x slowdown when modify $fpath and add completion script
Obligatory link since you are engaging in profiling interactive zsh: https://github.com/romkatv/zsh-bench.
-
What is the best plugin manager in your opinion?
1.) It's fast. Like, really fast. 1.) It supports deferred loading via zsh-defer 1.) It supports local plugins as well as ones hosted via a git provider (aka: GitHub, GitLab, BitBucket, etc) 1.) The codebase is simple and easy to understand and contribute to 1.) It supports git branches (with tag/shas on the roadmap) 1.) It supports partial plugin loading such as loading Oh-My-Zsh plugins and Prezto modules without loading the whole framework. 1.) There's an easy migration path from legacy plugin managers like Antigen/Antibody. 1.) Plugins are managed via a simple plugins file that makes it easy to share your config with others. 1.) And lots more
-
Zsh significantly faster when sourced from bash with bash as default shell
In any case, slow zsh startup is always caused by whatever you put in zsh startup files and it's always possible to reduce zsh startup to imperceptible levels without sacrificing any functionality by editing said startup files. There is a bit of info on interactive zsh performance at https://github.com/romkatv/zsh-bench.
-
Zpy is a simple zsh plugin manager written in python that don't add to the shell startup time.what to y'all think?
Why is this a good thing? Is this a proxy for performance? If so, you can measure performance directly with zsh-bench. This way you can describe the advantage in terms that have real value to end users. For example, you can say that the first prompt appears N milliseconds faster when using Zpy than if you were using something-else.
nushell
-
PowerShell: The object-oriented shell you didn't know you needed
I rather nushell for this purpose, it's more fun to write and easier to read.
https://www.nushell.sh/
-
NuShell - Ceci n'est pas une |
These are just three small examples of what this shell written in Rust allows. The features are many and many more, but I'll leave it up to you to discover and enjoy them; I'm currently playing around with it and it's giving me a lot of satisfaction and immediacy, now it has a fixed place among the tools I use when working! The project is Open Source, so if you want to contribute, I invite you, as always, to do so, I leave you the link to the repo here!
- Xonsh: Python-powered, cross-platform, Unix-gazing shell
-
Fish shell 3.7.0: last release branch before the full Rust rewrite
Any thoughts on fish as compared to nushell [0]? It's similar to PowerShell in its philosophy and is also written in Rust.
[0] https://github.com/nushell/nushell
-
jc: Converts the output of popular command-line tools to JSON
> In PowerShell, structured output is the default and it seems to work very well.
PowerShell goes a step beyond JSON, by supporting actual mutable objects. So instead of just passing through structured data, you effectively pass around opaque objects that allow you to go back to earlier pipeline stages, and invoke methods, if I understand correctly: https://learn.microsoft.com/en-us/powershell/module/microsof....
I'm rather fond of wrappers like jc and libxo, and experimental shells like https://www.nushell.sh/. These still focus on passing data, not objects with executable methods. On some level, I find this comfortable: Structured data still feels pretty Unix-like, if that makes sense? If I want actual objects, then it's probably time to fire up Python or Ruby.
Knowing when to switch from a shell script to a full-fledged programming language is important, even if your shell is basically awesome and has good programming features.
-
Ripgrep is faster than {grep, ag, Git grep, ucg, pt, sift}
Maybe if the "popular" shells, but http://www.nushell.sh/ is looking better and better
- "<ESC>[31M"? ANSI Terminal security in 2023 and finding 10 CVEs
-
jq 1.7 Released
Yeah agreed, especially now that PowerShell is available cross-platform.
Nushell[1] also seems like a promising alternative, but I havenโt had a chance to play with it yet.
[1]: https://www.nushell.sh/
-
The Case for Nushell
I also discovered an existing discussion[1] related to this topic which includes a link[2] to a "helper to call nushell nuon/json/yaml commands from bash/fish/zsh" and a comment[3] that the current nushell dev focus is "on getting the experience inside nushell right and [we] probably won't be able to dedicate design time to get the interface of native Nu commands with an outside POSIX shell right and stable.".
[0] https://gitlab.com/RancidBacon/notes_public/-/blob/main/note...
[1] "Expose some commands to external world #6554": https://github.com/nushell/nushell/issues/6554
[2] https://github.com/cruel-intentions/devshell-files/blob/mast...
[3] https://github.com/nushell/nushell/issues/6554#issuecomment-...
I appreciate what projects like Nushell and Murex are trying to address, but having a saner scripting language and passing structured data in pipelines is not worth the drawbacks for me.
For one, Bash scripting is not so bad if you set some sane defaults and use ShellCheck. Sure, it has its quirks, but all languages do. Even so, the same golden rule applies: use a "real" programming language if your problem exceeds a certain level of complexity. This is relative and will depend on your discomfort threshold, but using the right tool for the job is always a good practice. No matter how good the shell language is, I would hesitate to write and maintain a complex project in it.
And for general QoL improvements with interactive use, Zsh is a fine shell, while still being POSIX compatible.
[1]: https://github.com/nushell/nushell/blob/main/crates/nu-comma...
[2]: https://github.com/nushell/nushell/issues/5027
[3]: https://github.com/nushell/nushell/issues/9310
What are some alternatives?
fisher - A plugin manager for Fish
fish-shell - The user-friendly command line shell.
zinit - ๐ป Flexible and fast ZSH plugin manager
elvish - Powerful scripting language & Versatile interactive shell
sheldon - :bowtie: Fast, configurable, shell plugin manager
starship - โ๐๏ธ The minimal, blazing-fast, and infinitely customizable prompt for any shell!
powerlevel10k - A Zsh theme
PowerShell - PowerShell for every system!
zsh4humans - A turnkey configuration for Zsh
alacritty - A cross-platform, OpenGL terminal emulator.
oh-my-fish - The Fish Shell Framework
xonsh - :shell: Python-powered, cross-platform, Unix-gazing shell.