11 ms·
D'Oh My Zsh – How I unexpectedly built a monster of an open source project
- cies 11y ago"I like Prezto[1] nowadays" -- an `Oh my zsh` refugee 1: https://github.com/sorin-ionescu/prezto https://github.com/sorin-ionescu/prezto
- michaelsbradley 11y agoThere's also bash-it, for those who want a similar framework but don't want to move away from bash for whatever reason/s: https://github.com/Bash-it/bash-it https://github.com/Bash-it/bash-it
- elliotec 11y agoI used bash-it for a long time early on. I was intimidated by switching to the unfamiliar territory of zsh, but it's a no-brainer now and I'd struggle to live without its features that I have since taken for granted.
- wldcordeiro 11y agoI moved from OMZ to Antigen, how does Prezto compare to Antigen if you've tried both?
- gjvc 11y ago"oh my zsh" is too slow to be life-enhancing
- agumonkey 11y agoIt did teach me how to understand a terminal / prompt. A few bits of information here and there and you suddenly feel happier because that part of the system also work for you.
- mirceal 11y agodepends a lot on what you're baseline is
- navlelo 11y agoHow is it slow? I'm using it with a few plugins and speed has never been a problem.
- ignoramous 11y agoReminds me of Nathan Marz's great piece about lessons learnt from creating, and maintaining Storm as OSS: http://nathanmarz.com/blog/history-of-apache-storm-and-lessons-learned.html http://nathanmarz.com/blog/history-of-apache-storm-and-lesso...
- _vya7 11y agoI heard of zsh back around 2012, lots of colleagues who I respected very highly were using it. But I just never could get behind the idea of using someone else's defaults. Even when I switched to Emacs, I hand-picked every line in my configs from looking at a bunch of people's configs and with a lot of random googling to solve things. Even though it took like 2 weeks of constant tweaking to get just right, I haven't touched it much in like the past 3 years or so, and I've been super productive ever since. So meh, seems to have worked out for me. But YMMV. Also, I use eshell (with some tweaks) almost exclusively now, as opposed to a "real" terminal with bash or fish or zsh (etc.)
- Twirrim 11y agoI've tried it a few times given it weeks or month long trials, and never really found a strong enough benefit over bash, especially when I'm always going to find bash on servers I deal with. I actually find it valuable to nuke my bashrc customisations every few years and reevaluate. Assumptions and practices entrenched in those customisations can be anti-patterns or counterproductive.
- cyphar 11y agoThere's a lot of shortcomings in bash. I wrote my zshrc by hand, and I didn't like the fact that most people use oh-my-zsh. For me, writing my own zshrc from scratch taught me the differences between bash and zsh (I ended up writing my own .git and .hg parsers because running the commands is too slow).
- jandrese 11y agoMany years ago when I switched to zsh I went through the manual and made the decision on every single option. I also went and made a semi-complex prompt that worked well for me. I've been using basically that config ever since. When I first started using zsh I went down the road of writing custom completion functions, but pretty quickly discovered that they just didn't pay off in the long run and stopped doing it. My shell absolutely doesn't take 5s+ to open up either, it's pretty much instantaneous. In bad news, it appears Ubuntu no longer ships the manpages for zsh and instead ships info pages. Barf.
- sethrin 11y ago910 contributors, 191 issues, 516 pull requests, and his response is that "reviewing and approving pull requests is a nice-to-happen versus a need-to-happen." While I'm glad I am not in the position of maintaining that (or anything else important), that doesn't really speak well to the long-term prospects for the project. Clearly this is something that I and many others find very useful; It would be a shame to let it stagnate. The glib part of me would suggest either 'stepping up, or stepping down', but I can't really credibly offer solutions, I just am trying to point out a problem.
- fweespee_ch 11y agoYou could always fork it. It is MIT licensed after all. Personally, I just built my own zsh config that solves my problems without all the framework mess. Its less than 150 lines + some related dot files for aliases, vim, etc.
- sethrin 11y agoFrankly, I'm not sure I'm up to that. I don't have much in-depth experience with this project, with the finer points of zsh, or with maintaining projects in general. I'm not entirely sure I could do a better job than nothing at all. However, even if I were more capable, I still don't think it's right to try to take over someone's project without some more clear sign that they are uninterested in continuing it.
- tvon 11y agoFWIW, prezto is an oh-my-zsh fork and a lot of effort and discussion went into it before it was decided that there should be a fork: https://github.com/sorin-ionescu/prezto/issues/197 https://github.com/sorin-ionescu/prezto/issues/197 The linked oh-my-zsh issue is an interesting read (or skim).
- simcop2387 11y agoSounds like he needs some help. Maybe a linux kernel model is more apt? Have a few people helping and looking at PRs and approving them in just the areas that they are experts in.
- smitherfield 11y agoA personal pet peeve is when people refer to having lots of features as "bloat." It's generally very nice to have lots of features all in one place without having to do things manually, or find somebody's potentially-sketchy plugin/app. My test for "bloat" – 1. Has the project grown so large that it's starting to run into real-world performance issues? (I can't imagine this could be the case with even the largest of shell configurations except on very low-end embedded devices). 2. Has the project grown so large that bugs are popping up faster than the developers can do maintenance? Is there no or only one person who can read and understand the entire codebase? (AFAIK, no and no). 3. Are there many undocumented/poorly-documented features? Are there features that are both undocumented/poorly-documented and dangerous? Are there many deprecated or outdated features that have yet to be removed? (AFAIK, no, no, no). 4. Are there many features that both duplicate and do not improve on functionality found elsewhere? (Debatable and mostly subjective).
- mbell 11y ago> Has the project grown so large that it's starting to run into real-world performance issues? oh-my-zsh is noticeably slower than prezto on multiple 'high end' machines I have with the same 'capabilities', i.e. plugins that provide the same feature set on both.
- smitherfield 11y agoNoticeably slower at doing what? I haven't noticed any issue, but I'm maybe a bit naive; I rarely use the shell for anything that isn't near-instantaneous and isn't just waiting for some other process to complete (e.g. curl, compilers). For more complicated stuff I usually write something in a scripting language.
- soohyung 11y agoOccasionally just opening the shell can be slow with oh-my-zsh. It can be a bit annoying (especially if you need a few more plugins). However I have not really noticed as much of a slowdown lately so perhaps it has been improved - I haven't really tested it, this is just my own perception.
- kbd 11y agoCould someone please explain to me the attraction in using Oh My Zsh (and similar)? It seems strange to me to use others' configs. Over time I've customized my bash config and have all the information I want in my prompt. If I ever switched to zsh I'd just learn how to translate what I have in bash. Why would I want to start with someone's big framework for configuration?
- davis 11y agoYou answered your own question when you said "over time I've customized". The appeal of oh-my-zsh and others is that it removes the "over time" part of the equation. It's meant to give you a lot of sensible (think like vim-sensible) defaults as well as the settings that make it feel more like bash yet show the awesome features of zsh. A lot of people don't like to configure shells. omz gives them a head start and a source of inspiration into features they might not know.
- enjo 11y agoTo piggy-back onto this: I've never been much of a tools guy. I generally use what the default configuration is for whatever tool I use. It's just never been particularly important to me (and I don't feel like it's made even a small difference in my productivity as a programmer). Projects like oh-my-zsh are nice because they provide a much richer default that lazy folks like me can use without ever having to know or care about how to actually configure a shell because the alternative is that I just won't do it. I'm not going to take the time to learn about the universe of configuration options. When I'm exposed to a feature it has to be really useful before I'm going to bother to learn about how to configure it. So plugins and the like are huge, they allow me to tailor my environment to the actual work I do with rich functionality that I otherwise wouldn't have. So for me projects like this are awesome.
- kbd 11y ago> Projects like oh-my-zsh are nice because they provide a much richer default that lazy folks like me can use without ever having to know or care about how to actually configure a shell because the alternative is that I just won't do it. Thanks for giving me a different perspective. For me, it bugs me to not know what's built-in vs what's configuration. For example, I recently discovered that option+arrow key to skip back/forward words was an OSX Terminal feature when it didn't work in iTerm2. So I configured it to work how I wanted in my .inputrc and now it should work everywhere. Starting with the defaults and changing things as you get an itch to scratch seems like a better way to learn long-term, but I can see just wanting use someone's template and be done with it. I guess it's the difference between frameworks and libraries, and between people who use someone's addon pack in World of Warcraft vs just using a few addons and designing their own UI.
- fvargas 11y ago> It’s March 22, 2016 and the top trending repository on Github is ? Not oh-my-zsh. It was top trending for the Shell category, not for all of GitHub.
- scosman 11y ago"I’d become dependent on these shortcuts." The intro to this article is as much a caution of becoming dependant on non-standard tools, as it is a pitch for omzsh. If you can't sit down at a normal bash window and get shit done, your shortcuts are hurting you.
- jandrese 11y agoI always get caught up in bash's syntax quirks when trying to write loops on the commandline. I've gotten so used to zsh's easy loop syntax that I always have to stop and think before writing the bash one.
- mirceal 11y agothere are 2 parts here: know how to do basic things with what you normally have on a machine _and_ turbocharge your development machine to optimize your productivity. I don't see a problem with any of those as long as you have a mental model of how the 'shortcuts' you've configured work.
- wocram 11y agoEh, your shortcuts should only be a git clone away.
- harry8 11y agogit clone your customizations into an account that's not yours. There's a special hell for people who do that. I don't care if it's a shared account or you're a guest in their personal terminal. Special hell. ;-)
- jarjoura 11y agoI adore Oh My Zsh, way better than bash and the completion plugins are extremely helpful!
- deleted 11y ago[deleted]
- shpx 11y agoIf you like oh-my-zsh you'll love https://fishshell.com/ https://fishshell.com/. The main difference I use is better command completion as you're typing, and you can complete by word with alt-f. And ruby like syntax. for example (| is the cursor and everything after it is grey text) >echo hello world hello world >echo |hello world # alt-f >echo hello| world Fish and oh-my-zsh both take about 5 seconds to init though. If you don't like that you should be using prezto (which is the fork he mentions in the article)
- forgotpwtomain 11y ago> Fish and oh-my-zsh both take about 5 seconds to init though. If you don't like that you should be using prezto (which is the fork he mentions in the article) You must have a lot of expensive stuff crammed into your config.fish file, for me fish takes < 1 second to init.
- domoritz 11y agohttp://fisherman.sh/ http://fisherman.sh/ is the prezto of fish shell. Works great and is blazingly fast.
- Dharmakirti 11y agoAs a Fish user since it's inception, I humbly disagree. Oh-My-Fish[0] is the preferred and popular plugin framework for Fish. The guy behind Fisherman abused DMCA to discredit OMF, which was a pretty shady tactic for an open-source project. [0]https://github.com/oh-my-fish/oh-my-fish https://github.com/oh-my-fish/oh-my-fish
- OJFord 11y ago> This wouldn’t my first foray into open source software; > nor my last. I know that I'm annoyed perhaps too easily by poor grammar - but the opening sentence, really?!
- vidoc 11y agoReminds me how lame those geek t-shirts are, and how vulgar it is to put stickers on laptops!
- beefsack 11y agoI absolutely love bash + powerline. You might know powerline if you're a Vim user. http://i.imgur.com/3FKaEIy.png http://i.imgur.com/3FKaEIy.png It's incredibly easy to set up, I have a script to do it[1] but doing it by hand is trivial. [1]: https://github.com/beefsack/bash-powerline-installer/blob/master/install.sh https://github.com/beefsack/bash-powerline-installer/blob/ma...
- wsha 11y agoI like learning from other people sharing their config files, but my attitude towards oh-my-zsh is similar to that of the author's co-workers in that I don't want to install a bunch of customizations that I don't understand. I couldn't find a summary of what all oh-my-zsh is supposed to do and the source has grown too large for me to read it quickly. I guess I trust code I haven't read most the time I am using a computer but it feels wrong to me to allow my shell to auto-update customizations that I don't understand.
- voltagex_ 11y agoI've tried a number of times to switch to zsh, ostensibly for oh-my-zsh. My main issue is that bash is the default almost everywhere so it's more work to change it than it is to just be "happy enough" with Bash. I used to work on a fairly underpowered ARM5 and I could feel the impact of most prompt customisations on the speed of the system, especially on initial login. That feeling is still there - mainly because I haven't found the right SD card for my Raspberry Pi. To avoid this becoming a complete ramble - are there any advantages to switching to zsh as someone who's reasonably comfortable with bash? Hell, even OS X switched (and boy, t/csh was a shock when using FreeBSD).
- lake99 11y agoThis is a difficult question to answer. I switched a long time ago, when bash did not provide the kind of completions that zsh does. Nowadays bash is catching up. Try these things in bash (with completions installed): 1. cd to a git repository and type "git [TAB]". Do you see a list of git-specific completions? 2. cd to a directory that has a makefile and type "make [TAB]" do you see a bunch of make targets? 3. cd to a directory that has some PDF files and some other files. Type "okular [TAB]" (or whatever you use to view PDF's. Do you see just the PDF files as completions? 4. Same as 3, but try other programs like python, perl, etc. How well do bash completions keep up with zsh completions? I'd be very surprised if bash supports completions for programs that zsh has missed. In general, switching from bash is very easy. Your muscle-memory from bash transfers very well to zsh. You may want to change the prompt to look similar to your bash prompt, so you'll feel at home. Translating my bashrc and bashprofile took just a few minutes. I tried oh-my-zsh and it did not feel right for me. If this is the reason you're switching, all I can say is that zsh offers benefits even without it.
- deleted 11y ago[deleted]
- julie1 11y agoHumm ... I looked for the fun if no one spotted in any comment that there was a creepy feature the author likes. Periodic automated arbitrary code execution from a remote source. Here is a list of the stupid ideas that old coders warned from - abritrary remote code execution [X] this, curl|bash - too much dependencies [X] npm - lack of specifications, staging [X] Agile - non deterministic HW [X] Intel - non deterministic software [X] llvm/gcc/AI - Single point of failure [X] github/CA - attack by majority on P2P [X] blockchain, bitcoin - bigger sloc is more bugs [X] heavy frameworks - using immature technologies [X] haskell - bloatwares [X] angular - private corp standardizing [X] QUIC & al, browser wars - beware of information entropy [X] big data - moving parts [X] the Cloud - higher surface of vulnerability [X] IoT - monopolies [X] google - using private cie for infra [X] github is the new sourceforge - putting half backed std in prod [X] IPv6 - lack of consistency [X] most nosql tech - legal risk due to IP law [X] coding by copy/pasting If I was an old coder still coding I would say we are very close to a singularity : the total lack of trust that could result in all this is simply customers reverting to fax, teletypes, snail mail... or going to court to ask for financial compensations. If you need an expert to help you on this, I can help.
- draw_down 11y agoI understand the author's viewpoint but I would probably get rid of it the first time it asked to auto update. Customization is nice but I guess I mostly prefer to spend as little time thinking about shells as possible.
- spystath 11y agoA light but featureful alternative to omz is also the grml zsh configuration [0]. I've been using it since 2011 or so and I've probably touched my .zshrc once or twice. If you fancy some colors you can also add some syntax highlighting [1]. Or just use fish which is great for interactive use! [0]: https://github.com/grml/grml-etc-core/tree/master/etc/zsh https://github.com/grml/grml-etc-core/tree/master/etc/zsh [1]: https://github.com/zsh-users/zsh-syntax-highlighting https://github.com/zsh-users/zsh-syntax-highlighting
- onetimePete 11y agoThe irony is that after all those years, we still dont find a optimal way to find out - when it is a good time to annoy a user about update decisions. Do it during the system start up phase? Do it before they go into a break? Do it upon return to the system, when work was already interrupted? Do it shortly before shutdown? No, annoyia be praised. It must be when the user has focused for longer then 5 Mins on something.
- marssaxman 11y agoMy answer would be more like "fucking never, my god!" I thought this was one of the reasons to use free software: none of this paternalistic phone-home bullshit.