9 ms·
Zim – The Zsh configuration framework
- kungfufrog 5y agoI used to love zsh and it's endless customisation options, it definitely felt more robust and sophisticated than bash as a shell and was my preferred daily driver. Then I discovered fish and to be honest the sane defaults and out of the box functionality means I haven't looked back in a few years now. If fish didn't exist, I'd absolutely still be using zsh with Zim or presto.
- rusticpenn 5y agoAs far as I know, fish is not compatible with bash scripts ( most legacy stuff) and this makes zsh attractive.
- kungfufrog 5y agoI don't get it. Are you executing extremely convoluted bash one liners at your shell prompt? I still write for bash and use a bash shebang to run it when I need to script. Mostly because the likelihood a colleague or whoever else comes along later happens to be using fish is pretty low. Bash remains the most portable option!
- activitypea 5y agoA lot of CLIs don't ship with fish autocompletion :/
- phero_cnstrcts 5y agoI tried fish and uninstalled it because nothing from stackoverflow worked. Sure, I could spend time learning the fish syntax. But I won’t, since zsh works.
- kungfufrog 5y agoI see. I just dump that kind of stuff in a bash script or bash -c '...' it directly if necessary. Still, to each his own! That's the great thing about having a glut of viable options.
- CJefferson 5y agoI often find I write out a series of commands interactively in the shell, then decide I want to save them as a shell script, which I might then want to share. I enjoyed fish, but found it too annoying to have to translate things into bash when I wanted to share them.
- cies 5y agoexactly, that's why im back too. back to zsh from fish, that is.
- lapser 5y agoGenerally my workflow when developing scripts is running individual commands on the CLI so I can see what it's doing so I can get it right. This is not possible with fish unless I start a bash shell, so at that point, what is the point? With zsh, most of the code I would run in a bash script still runs in a zsh interactive session. Sure there a few edge cases, but they're quite well documented.
- samatman 5y agoGenerally my workflow when developing scripts (in Python) is to run individual functions in the repl so I can get it right. This isn't possible with bash unless I start the python repl, so at that point, what is the point? Hey, it's possible you spend a lot of time writing scripts, and they need to be bash compatible. Zsh is great for that. Just wanted to reflect how made-up this sounds to those of us who treat sh like any other language.
- lapser 5y ago> Generally my workflow when developing scripts (in Python) is to run individual functions in the repl so I can get it right. As a matter of fact, this is exactly what I do when I write Python scripts too. It helps understand exactly what things do quickly and figure certain smaller things. > Just wanted to reflect how made-up this sounds to those of us who treat sh like any other language. What do you think sounds made-up?
- samatman 5y agoI mean that "can't use fish because I have to use bash to write bash" makes about as much sense to me, given how I use the terminal, as "can't use fish because I have to use python to write python". I'm assuming that means you write more shell scripts than I do, or think of the context switch between shells as qualitatively different from the context switch between shell and (some other) repl. All of which is fine.
- inkyoto 5y agoFrom the fush documentation: Special variables Some bash variables and their closest fish equivalent: $*, $@, $1 and so on: $argv $?: $status $$: $fish_pid $#: No variable, instead use count $argv $!: $last_pid $0: status filename $-: Mostly status is-interactive and status is-login Replacing «$$» with «$fish_pid»? A contentious choice at the very least – does it also apply to non-interactive fish scripts? «…use count $argv» instead of «$#» – why? Both, $$ and $#, are non-bashism's and go way, way back into the UNIX prehistoric times – hardly bash-ism's. Fish does not appear to have basic conditional variable expansions, matching affix removals and pattern substitutions, either; i.e. ${_var:-substitute}, ${parameter<# / ##>word}, ${parameter<% / %%>word} and ${parameter/pattern/string}. Or, at least their nearest equivalent are not prominently featured in the documentation.
- Beltalowda 5y agoHow often do you type these things in an interactive shell though? Also things like $status and $argv are reminiscent of csh, which also goes back a long way!
- inkyoto 5y agoWith a varying frequency but I do use them in interactive sessions: $ grep -c '\$\?' ~/.history 137 $ grep -c '\$\$' ~/.history 30 $ grep -c '\$!' ~/.history 6 $ grep -c '\$#' ~/.history 13 Less so when it comes to affix removals… I use them liberally in scripts as well as in data transformation pipelines or more complex one-liners, though. I also semi-frequently quit the shell with «kill -9 $$» when I do not want to pollute the shell history with garbage, which is not refelcted in the count above for obvious reasons. It is quick and efficient. > Also things like $status and $argv are reminiscent of csh, which also goes back a long way! Ah, I thought somebody would mention csh as the prior art! Frankly, the C shell syntax have never really clicked with me precisely because of the more verbose syntax, and, as soon as other shells have borrowed history, job control, aliases and a few other features from (t)csh, I was out of the house!
- Beltalowda 5y ago
- samatman 5y agobash isn't compatible with python either, unless you use #!/usr/bin/python or the like. All my shell scripts start with #!/bin/sh, so the language my user shell runs is irrelevant. Sometimes I do have to preface copypasta with "bash" and end it with "exit", but it ain't the end of the world. There are a bunch of good reasons to prefer one shell over another, this isn't one of them.
- dngray 5y agoIndeed, just use the shebang #!/bin/sh (if it's posix sh), and #!/bin/bash if you must use bash functionality. There is no reason to not use a different interactive shell.
- adrusi 5y agoPlease use #!/usr/bin/env bash if you're using bash. It seems more common to have env in /usr/bin than it is to have bash in /bin. On BSD systems, bash is often in /usr/local/bin, and on macOS the user often has a more modern bash in /opt/homebrew/bin or other package manager directory.
- Ensorceled 5y ago> bash isn't compatible with python either, unless you use #!/usr/bin/python or the like. You're rather aggressively missing the point. If you need to write and maintain bash scripts but use fish as your command line, you now need to know the idiosyncrasies of both shells ...
- adrusi 5y agoIf you want to write portable scripts and use a reasonable interactive shell, you need to know two shells anyway. Scripts should ideally be written to only use shell features defined in POSIX, since bash isn't available on every system. It's available pretty widely, but not on e.g. Alpine Linux by default, and the version on macOS is so ancient it doesn't have features like wait -n. Unless you're going to use rlwrap /bin/dash as your default interactive shell (please don't) you need to know both your interactive shell and standard shell if you're going to write portable scripts.
- ghusto 5y agoHa! Funny, I just switched _back_ to Bash because I found ZSH so flakey and amateur. I tried for years to like it, even tried oh-my-zsh, and fine tuning myself. Finally got fed up with its laggy "smart" crap and went back, and oh man am I happy I did. Everything works, it works fast, and it does exactly what I tell it to and no more.
- jeltz 5y agoMy experience id aldo the zsh is slow compared to bash. I am using the defaults from Apple on an M1 with some minor modifcations.
- opk 5y agoOn raw defaults, I find it hard to see that you can do anything with either bash or zsh where the shell itself does anything where you can even notice a delay. Things like basic file completion or history searching are basically instant. For scripting there are plenty of benchmarks out there and zsh typically beats bash but both are beaten my minimal shells like dash.
- Beltalowda 5y agoYou don't need to use oh-my-zsh and "laggy smart crap" though; it works just fine without it. I don't have most of the advanced features enabled, except that listing completion options doesn't push text up, which I found really useful after I got used to it. As well as being able to navigate it with the arrow keys. I never noticed it's slow, and I used zsh on a Pentium N-something budget laptop that definitely wasn't fast.
- quesera 5y agoI think you're judging zsh based on third party add-ons or non-default config. You can make bash flaky and amateur that way too. Stock zsh is neither though. It's quick and solid. No surprises.
- dmix 5y agoDitto with Vim/Emacs/VSCode/etc. All of them can be slowed to a crawl or be unpredictable with plugins.
- dngray 5y agoI switched from zsh/oh-my-zsh to fish mostly because fish does everything I want for an interactive shell and is simply one package from my package manager. With frameworks like oh-my-zsh I'm always worried about supply chain attacks. I do use https://starship.rs https://starship.rs (which is also a package away), and I think things like fisher https://github.com/jorgebucaran/fisher https://github.com/jorgebucaran/fisher are useful when you need a specific fish script. I also don't really like writing zsh scripts because I always run them through https://www.shellcheck.net https://www.shellcheck.net which works best with posix sh/bash
- firstSpeaker 5y agoWhat do you use as terminal emulator? I Switches from iterm2 to kitty and omz to starship. It is for sure faster now to start the terminal, even running commands has different response time, visible to the eyes. Could I ask How does fisher come into play if you have something like starship already?
- vander_elst 5y agoIs there a section where it's explained why i should choose this over something like omz?
- lordgrenville 5y agoI assumed "blazing speed" was a knock on OMZ.
- coldblues 5y agoThe GitHub page definitely does a better job at pointing that out. https://github.com/zimfw/zimfw https://github.com/zimfw/zimfw
- simonhamp 5y agoAnd doesn't bounce around when you're trying to read on mobile...
- jcelerier 5y agoa bit of a name conflict with https://zim-wiki.org/ https://zim-wiki.org/ :/
- eternityforest 5y agoAnd with the zim file format for Kiwix
- alophawen 5y agoOr Invader Zim.
- virogenesis 5y agoIs it worth sacrificing a small speed increase for the myriad of plugins omz offers ? I am not really sold on the idea of why I should switch.
- noitpmeder 5y agoFor those that aren't aware, ZGEN (https://github.com/tarjoilija/zgen https://github.com/tarjoilija/zgen) is the best of both worlds. Pick and choose from every plugin system out there.
- dmix 5y agozplug is similar but more up to date and has a broader feature set: https://github.com/zplug/zplug https://github.com/zplug/zplug
- noitpmeder 4y agoThanks for the link! Will definitely check it out next time I revisit my config.
- mijoharas 5y agoThis seems interesting, and is likely use it if I hadn't already got a setup that I like with antigen. Nice project.
- agilob 5y agoHow does it compare to ohmyzsh with p10k?
- kkfx 5y agoBeware Zim is a historical and still alive desktop Wiki GTk-based...
- Beltalowda 5y agoZim is also an invader trying to take over the planet. Luckily we have the boy with the large head to stop him.
- kkfx 5y agoActually in a distro package manager you might have issues to name packages if they share the same name.
- bloopernova 5y agoI use zplug, and wrote a quick doc on getting zsh+oh-my-zsh+zplug+powerlevel10k+fzf up and running on MacOS: https://gist.github.com/aclarknexient/0ffcb98aa262c585c49d4b3f3ae24019 https://gist.github.com/aclarknexient/0ffcb98aa262c585c49d4b... I'm sharing that not as blogspam (it's a gist, so I don't get anything for sharing it) but because every time I show someone fzf plus the tools mentioned above, they always ask for a guide on installing it.
- rubyist5eva 5y agoAnyone know how this compares with Prezto which also bundles powerlevel10k by default?
- nickjj 5y agoIs anyone else mostly rolling with the zsh (not oh-my-zsh) defaults? After so many years of using Bash I switched to zsh almost a year ago. I use the vanilla zsh set up with 2 plugins: - https://github.com/zdharma-continuum/fast-syntax-highlighting https://github.com/zdharma-continuum/fast-syntax-highlightin... for very good and fast syntax highlighting - https://github.com/zsh-users/zsh-autosuggestions https://github.com/zsh-users/zsh-autosuggestions for auto-suggestions I don't use a plugin manager, instead I put together a ~20 line shell script[0] which handles either cloning or pulling plugins, then you can load them in your zshrc[1]. I haven't found the need for anything else and my whole dev environment is based on using tmux, terminal Vim, etc.. Basically I spend a lot of time there in my day to day. I started with the idea of "less is more" and planned to add more things over time but the time to add new things hasn't come yet. [0] https://github.com/nickjj/dotfiles/blob/0076e508403c9981e39320299b10b2053576a884/.local/bin/update-zsh-plugins https://github.com/nickjj/dotfiles/blob/0076e508403c9981e393... [1] https://github.com/nickjj/dotfiles/blob/0076e508403c9981e39320299b10b2053576a884/.config/zsh/.zshrc#L111 https://github.com/nickjj/dotfiles/blob/0076e508403c9981e393...
- xoa 5y ago>Is anyone else Yes. Minor thing but I find this sort of passive aggressive framing more irritating as I've gotten older and crustier. You're on a global network of billions. No matter what it is about something with as much uptake and variation as shells or millions of other things, of course there are definitely other people doing the same as you. Rather than a kind of silly/weird seeking of validation just assert what you do and why. It's particularly galling when yes you're probably in the flat out majority overall, defaults are powerful and there are almost certainly a lot more people who just dip into shells once in a long while and never customize a single thing than who go even as far as you do. >mostly rolling with the zsh (not oh-my-zsh) defaults? You could ask the same thing about all sorts of powerful tools and environments, from powerful CLI tools (not just shell but Vim or Emacs) to CAD and graphics programs which are famously adaptable, and the answer is always that it's a matter of an individual finding their comfort place on a spectrum of tradeoffs between ease of moving between environments and meta-work cost vs future efficiency/comfort benefits. The more one customizes to their exact needs, the more fragile the environment in moving across systems (efforts in portable environments can help on the technical side though they're not a panacea, but even that won't help with just plain not being allowed to customize a remote work area). It also means when outside of the heavily customized environment productivity may drop quite a bit, a lot of muscle memory goes to things which aren't there. It also takes meta-effort, time and resources spent on improving tools themselves rather then using the tools to do the desired tasks one reaches for the tools in the first place. Of course, some level of effort is required by any specialist to learn at least standard tooling and knowledge, but rarely is mastery of a tool an end in and of itself vs a means to do something else with said tool. Ideally there should be a positive ROI on time invested vs making that back later, but that won't necessarily be the case with something rarely used or where needs are basic. Conversely though customization, getting really comfortable with the full power of automation computers offer and knowing how to rapidly match that to any new work can have major productivity boosts down the road. And sometimes give new perspectives on the edge cases and other tooling that is useful anyway, as well as just plain make things better fit individual needs and senses. And some people just don't move beyond their own environments much, or are valued specialists who would be allowed to bring their own environments and tool chains with them at any new job (encouraged/expected to even, that's part of the productivity they're being hired for). No right answer to that now anymore than there was 10, 20 or 30 years ago. Personally I'm more towards the customization end of the spectrum when it comes to shell and general CLI environment, I'm not doing a lot on machines I don't at least have user environmental control over vs my own systems, and I've been happy to sink the time into really shaping zsh and other utilities to what I want. But I'm not nearly as far along as a range of other people either and I can certainly see the attraction of just using the standard stuff (and I do do that more in other areas than when I was younger too). Deviation has a cost and it's worth giving a bit of thought as to whether the cost is worth it. So nothing wrong at all with using something pure vanilla or close to it. But on HN in particular shouldn't be surprising if a lot of us do a fair amount of tweaking. And then search for a way to make that reproducible, sharable and clean to work with same as any other "software project", which leads in turn to various frameworks and such to help with that.
- broknbottle 5y agono-zsh
- laurentlbm 5y agoAlthough development has stopped recently, I have found that nothing beats zsh4humans: https://github.com/romkatv/zsh4humans https://github.com/romkatv/zsh4humans It's very fast and includes most if not all the features you might need.
- tough 5y agoI cannot use a new machine without this excellent zsh theme https://github.com/spaceship-prompt/spaceship-prompt https://github.com/spaceship-prompt/spaceship-prompt And I've way too many plugins # Add wisely, as too many plugins slow down shell startup. plugins=(git node npm fnm yarn vscode ag brew aliases alias-finder autojump ) plugins+=(macos battery colored-man-pages command-not-found common-aliases copypath copyfile) plugins+=(zsh-navigation-tools zsh-interactive-cd web-search frontend-search z per-directory-history) plugins+=(postgres gh github git git-auto-fetch git-escape-magic git-extras gatsby gitfast gitignore) plugins+=(zsh-syntax-highlighting k)
- nikolay 5y agoI've been using it for years and it's simple to configure and fast.
- wink 5y agoI've been using https://grml.org/zsh/ https://grml.org/zsh/ for years, with a few changes.