i’m a big nushell
fan.
i was once sitting where you are. when PowerShell was released on Linux i thought about switching and read the manual. i really liked some of the philosophy:
- descriptive names for commands.
cat
andls
have canonical short names to save disk space on the systems they were created for. this is no longer a constraint and aliasing a longer command name is better than “git gud n00b” when it comes to discoverability. - structured data. “everything is a string” is great when programs play nice. it breaks apart when programs prefer human readable output or worse don’t provide structured output, like
—format=json
or whatever. - modern control flow semantics. yes, pipes are great, let’s keep those, but why do i have to rtfm every time i want to bang out a simple script with an if-else control flow?
i looked around at a few solutions. xonsh
uses Python. eshell
is integrated into emacs and uses Elisp. i briefly tried to hack something together using Kotlin Script. and yeah, i tried PowerShell.
i settled on nushell
not just because it fulfilled the above requirements, but also:
- simple data types. string, number, list, record, and table are about the only types you deal with.
- wide support for structured data. JSON, YAML, TOML, CSV, etc have parsers built in.
jq
and other such tools are made irrelevant because you just load it intonushell
query with a unified DSL using common syntax likeselect
andwhere
.
honestly, these are the killer features. there are so many more. context aware autocomplete, modules and overlays, super easy custom completions, extension functions (one of my favorites is git remote open
), cross platform (if you’re forced to use Windows), plugins, and i can contribute since i do Rust development for work.
give PowerShell a shot, but i think nushell
is the happy medium
the thing that finally got me using a terminal multiplexer was
zellij
. you can think of it astmux
with training wheels, but i don’t see a reason to go back.