Automating the startup of a dev workflow

benmatselby

Ben Selby

Posted on January 2, 2024

Automating the startup of a dev workflow

Hopefully, this is the first of many small posts showing how I automate my workflow.

Back around 2008, I had a mentor/buddy for my new job. Rys. He was a wonderful, knowledgeable, and supportive buddy who always seemed to be one step ahead.

One day he noticed that I came into the office each day, opened the terminal, and created x amount of tabs, which I then named (So I knew what each terminal was there for, e.g. logs, database, git, and codebases etc).

He asked me:

How much time would you save if you could automate that?

Sitting there, stunned, I wasn't sure how to do what he said, but that question has stuck with me throughout my career. Then over the years, I've started to automate more and more, because I would remember Rys asking me how much time I would save.

So, I now have an alias defined as follows:

start-company() {
  open -a Music
  open -a Slack
  open -a "Google Chrome"
  open -a Obsidian
  open -a Notion
  open -a Miro
  open -a "Visual Studio Code"
}
Enter fullscreen mode Exit fullscreen mode

Where company is the name of the company I work for. This may seem small, and maybe even obvious, but running start-company each time I boot my machine is substantially quicker than opening each application in turn.

Running this command is the first of many stacked habits I have in the morning. For more information on stacking habits, check out Atomic Habits. I'm hopefully going to write up other habits I have for my workflow.

So I have my terminal and other applications open, but how about naming those darn terminal windows Rys asked me about all those years ago?

Well, I now use tmux and tmuxinator. I have had many failed tmux attempts over the years, but I'm firmly bedded in now.

What is tmux?

tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

That nicely brings us to tmuxinator:

Create and manage tmux sessions easily.

Therefore I can start a tmux session, via tmuxinator, which has a defined configuration. So one example would be:

name: dotfiles
root: ~/

windows:
  - bms: cd ~/git/github/benmatselby
  - work: cd ~/git/github/[company-name]
  - dotfiles: cd ~/git/github/benmatselby/dotfiles
  - life: cd ~/git/github/benmatselby/life
Enter fullscreen mode Exit fullscreen mode

When I now run tmuxinator start dotfiles (I have this aliased to txs), I get 4 named windows/tabs in a tmux session, all in the correct working directory. This is a massive time saving for me. I have many tmuxinator configuration files now. Each project generally gets its own configuration.

Hopefully, this setup is useful, or maybe interesting to you. Happy automating folks 😊

Photo by Joshua Sortino on Unsplash


See also

💖 💪 🙅 🚩
benmatselby
Ben Selby

Posted on January 2, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Automating the startup of a dev workflow
automation Automating the startup of a dev workflow

January 2, 2024