They way most people work with development environments varies a lot depending on tools they use and goals they have. Numerous times I saw people spending precious minutes on switching between IDE and console and back to run few lines of code. Moreover, have you ever heard about the guy that accidently run a migration on production because he got lost between tabs? These are things we want to avoid by using Tmux with preconfigured sessions provided by Tmuxp.
Tmuxp uses regular YAML files for configuration. One can run it with
tmuxp load -2 $HOME/.tmuxp/scratchpad.yaml
For convenience, I recommend defining few aliases that once remembered make things easier. For me it’s
alias tns='tmuxp load -2 $HOME/.tmuxp/sratchpad.yaml' alias tas='tmux -2 a -t scratchpad' alias tks='tmux kill-session -t scratchpad' alias tls='tmux ls'
Respectively, they are used to start, attach, kill and list sessions. Similar aliases should be defined for all of the sessions you have ex. dev, production, scratchpad etc. Yes, that’s a lot of aliases. And yes, it’s overwhelming at the beginning but you will get used to them faster than you think.
Every session is represented by a separate file located by default in ~/.tmuxp. The name is up to you, although use things that make sense to you. Let’s break down one of mine dev config files.
Three most important things at the top of the file are:
session_name: growthhacker start_directory: $HOME/workspace/growthhacker shell_command_before: workon growthhacker
Thanks to them session has a name, windows start in proper directory and Virtualenv is loaded automatically. Really useful stuff to avoid duplications later on.
Windows and panes
For those of you who are not familiar with window vs pane concept. The window is opened in a separate tab while pane is opened in the same window in a vertical or horizontal split. Personally, I use only windows as they allow me to focus on single thing at the point in time, which is crucial from the standpoint of productivity.
Example of window with single pane:
windows: - window_name: vim focus: true panes: - shell_command: - clear - vim .
All it does is to launch Vim in a directory specified in
start_directory with loaded Virtualenv
shell_command_before and sets focus on it. Typical development environment consists of few windows, usually for Vim, Shell, PostgreSQL (if used), Mongodb (if used) etc.
Full config file
Looks like this:
session_name: growthhacker start_directory: $HOME/workspace/growthhacker shell_command_before: workon growthhacker windows: - window_name: vim focus: true panes: - shell_command: - clear - vim . - window_name: shell panes: - shell_command: - clear - window_name: postgresql panes: - shell_command: - export PGHOST=localhost - export PGPORT=5432 - export PGUSER=test - export PGPASSWORD=test - psql -d growthhacker - window_name: mongo panes: - shell_command: - mongo - use growthhacker
If you are curious about other configuration options, don’t be afraid to visit the official page.
Tmuxp is a really simple tool that magnifies your productivity up high. Configuration is easy, usage is even easier. I must say, this thing is legendary. Absolute must have. Next post in the series will talk about building reproducible development environments with Docker and Docker-compose. Don’t forget to check it out!