OS Update Hygiene with Tmuxinator# 26 Mar 2019 by Sean
In the last year-ish since I switched to exclusively using Vim and Tmux for my dev environment instead of GUI apps like Sublime, I’ve noticed that I’ve developed a very bad habit of almost never rebooting my machine. The reason is that my usual Tmux/Vim setup involves several Tmux windows with several panes in specific configurations for running Vim, the Rails console, the Rails server, a search engine server, Webpack… a lot. And it’s a pain in the butt to set up manually every time.
Like I said, this means I almost never restart the machine, which is bad, for two big reasons (along with the usual cruft of the machine just starting to get ‘weird’ sometimes):
- I delay installing OS updates, including security patches
- I rarely take advantage of full-disk encryption because the machine gets left hot and unlocked
Neither of these are good. In fact, I’d call them both bad. It’s the kind of stuff that I’d give my parents flack for doing tbh, so… I should probably be dogfooding.
And it really is just my terminal setup that stands in the way of things for me. Browsers, the other tool that I’m dependent on, have had pretty solid resume behavior for a while now.
I recently put a little time into getting a good
Tmuxinator config set up for myself.
Tmuxinator is a Ruby gem for managing Tmux sessions. You define a session in a
YAML file, and instead of manually spawning all the windows and panes you need,
and the processes or tools that run in each pane (like Vim or the Rails
console), you just run
mux [project-name] and away it goes.
It’s nice because I no longer have to remember to
- be in the right directory when I start a Tmux session–you can define a global session root in the YAML config, and then further define per-window roots if you want different windows to behave differently. This is nice because I can spawn my main working windows in a project folder, an then spawn Vim in my Dropbox notes folder
- start a search engine before I start the Rails server–I have these set to start together
- remember to run
bundle && yarnbefore booting the app. This happens when the Tmuxinator project starts (which means it’s done once for all windows rather than once per window)
- resize my panes to get Vim to the right size
There’s some invisible config behind this that I already have set up. I use
Thoughtbot’s dotfiles with my own
customizations, which, so long
as I have
rbenv installed1, means I can
rcup and then whenever I want
mux [project-name] because I have
Tmuxinator as a default gem.
The nice thing is that I’m far less resistant to rebooting my machine–Tmuxinator takes care of the pita of getting things ready for work again. And I’m actually starting to reboot more. Having Tmuxinator prep my workspace before I start is one less thing I have to trip over when there’s a DB migration or dependency change. Big 👍.
If you want to see my Tmuxinator config, it’s in my dotfiles.
There is a slight frustrating order dependency–because I have Tmuxinator defined as a default gem for
rbenv, and carry that definition in my dotfiles extensions, I need to make sure that
rbenvis installed before I run the dotfiles setup, otherwise
rbenvand git will complain that there’s already an
~/.rbenvdirectory when it’s just the default gems config. At least it’s only an issue when first setting up a computer. ↩