A ZSH theme optimized for people who use:
- Solarized
- Git
- Unicode-compatible fonts and terminals (I use iTerm2 + Menlo)
For Mac users, I highly recommend iTerm 2 + Solarized Dark
NOTE: In all likelihood, you will need to install a Powerline-patched font for this theme to render correctly.
To test if your terminal and font support it, check that all the necessary characters are supported by copying the following command to your terminal: echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"
. The result should look like this:
- If the previous command failed (✘)
- User @ Hostname (if user is not DEFAULT_USER, which can then be set in your profile)
- Git status
- Branch () or detached head (➦)
- Current branch / SHA1 in detached head state
- Dirty working directory (±, color change)
- Working directory
- Elevated (root) privileges (⚡)
I don't want to clutter it up too much, but I am toying with the idea of adding RVM (ruby version) and n (node.js version) display.
It's currently hideously slow, especially inside a git repo. I guess it's not overly so for comparable themes, but it bugs me, and I'd love to hear ideas about how to improve the performance.
Would be nice for the code to be a bit more sane and re-usable. Something to easily append a section with a given FG/BG, and add the correct opening and closing.
Also the dependency on a powerline-patched font is regrettable, but there's really no way to get that effect without it. Ideally there would be a way to check for compatibility, or maybe even fall back to one of the similar unicode glyphs.
It's unfortunate that gist's don't have issue reporting features. Anyhow I wanted to make note of something I discovered and subsequently fixed after the agnoster theme was initially borked for me. When you are using a distro that does not name its ifconfig interfaces according to the standard naming convention (I'm looking at you, Ubuntu >-<), it causes an error to appear below every carriage return you feed into the terminal.
To fix this, I recommend introducing a loop that checks for connected and configured interfaces by calling ifconfig -a and doing some parsing to pull a list of the configured interfaces. Here is how I did it using standard bash commands:
You can further narrow it down by pulling the ethernet interface which, even though it's not convention, universally starts with 'e' in the interface name, and the same is true for 'w' on wireless interfaces. If you introduce a new function in your agnoster theme that checks for this, it can save a lot of people some headache and confusion when first running the script. 👍