It is useful to have a development setup which is easy to deploy and start using, a fair amount of time is spent in the life of a developer in these configurations and it's a positive step to capture it.
This has been on my mind lately, I am a big fan of spending time customizing my development machines but always end up feeling as though I've wasted time when the job is done (for the 1000th time). I wanted to solve this with a tool that can account for different systems and provide as much consistency as possible, I captured everything using Ansible, this choice was simply because I am familiar and is in no way a required component.
- oh-my-zsh as shell
- powerlevel10k as shell theme
- neovim with vim-plug as editor
- tmux with tmuxinator as multiplexer
- tig as git interface
- kitty as terminal
- yabai macOS window manager
- skhd macOS hotkey daemon
- Brave Browser with Vimium
- Standard Notes for notes
z shell is a Unix shell that can be used as an interactive login shell and as a command line interpreter for shell scripting.
I have always found the built in niceties to be intuitive and comfortable in daily use, such as not needing to use
cd when changing to a directory in your current
Github is full of interesting zsh scripts to provide solutions for many different situations. Consider a need to avoid using
alias to access common directories, I have commonly used aliases to quickly navigate the shell, however with zsh scripting i can now make my own bookmark scripts. These scripts can even add bookmarks based on how often you visit a particular directory. As of MacOS Catalina (2019) zsh is the default shell, so there is good reason to get to know it.
Now that you are a little more aware of zsh, we can get to the point. "oh my zsh" is an open framework to manage your zsh configuration with an active community supporting it.
oh-my-zsh provides use with functions, helpers, plugins and themes.
When considering a development environment I have always felt the shell to be the first and most important step, oh-my-zsh makes that an easy step to take.
Customization is by definition unique to the user, so i will not be sharing much regarding my specific dot files in this post. A nice to know is that
~/.oh-my-zsh/custom/ is a directory which is ignored in
.gitignore and this is an ideal location for you to store any
plugins you are wanting to add.
This theme for zsh is pretty great, I would suggest everyone install it and check it out.
Once installed running
p10k configure in your shell will take you though an install process and will result in a
~/.p10k.zsh being created
Vim is my preferred editor, using mouse navigation on my computers has always been an annoying task. I enjoy the consistent editor experience with my key bindings when on remove servers. Neovim is a middle ground i prefer on my local system, slightly pushing vim towards being an IDE.
I run Neovim's latest versions which is not available via
homebrew for macOS when writing this. You can download the latest for macOS here
I use vim-plug as my plugin manager. It is simple to use and allowed me to store my added plugins here
As much as nothing more than the command line is needed to deal with git, I have always enjoyed having access to a visual git which has a focus on displaying the differences. There is even a gruvbox theme for tig if you don't like the default appearance.
I have been a long user of iTerm on macOS, however without the need for tabs (due to tmux) I find myself more interested in the speed improvements provided by the GPU acceleration of kitty terminal.
Something I love to use on linux are window managers. Sadly to get anything close to that level of window management on macOS you have to disable gatekeeper (at this time). However quite a bit can be done with yabai even without disabling SIP.
It will take some time to understand window managers and customize to your liking, and hearing of this might just be the beginning of a wonderful thing.
Mapping keys is important when using something like a window manager, there will be a lot of options available and to use them all you will need to map them in a way you find intuitive.
Special mention to Amethyst, this might be where you start with window management, installation and key mappings are all far easier to do. I use
skhd because amethyst can have issues keeping windows wrangled at all times.
Chrome for the longest time was my goto, however it's not Googles additions that make it relevant for me, its the chromium roots. Therefore my choice of browser was a logical brave browser. I also use the Vimium extension for navigating using vim keys.
Special Mention to Vieb if you are vim obsessed.
Notes are a struggle, so many options can lead to a never ending search. I have chosen to use Standard Notes for the time being, cross platform, extensible, encrypted and completely offline options. Be sure to check out github for some additional extensions, themes and tools if you are going down this path.
A nice detail is that this very blog post was published using Standard Notes, but also they are quite secure
automations & more to come
I plan on doing a series of posts which cover the configuration of the tools i've mentioned. However In the meantime I will say that as mentioned I have used Ansible to automate these tool installations and configurations. I run it against Ubuntu using multipass during development and testing. The hope was to have a playbook which can be run against ubuntu, or macOS and you will get the above tool set installed and configured to your liking. If you are interested in me producing these posts, as well as opening up my current Ansible repo please let me know.