Orchestrate the creation of tmux sessions with dependencies between commands in windows and panes.
This project is like a mash-up of docker-compose and teamocil/tmuxinator for tmux, hence the name "tmux-compose".
You create YAML config files that detail what windows and panes should be created and any commands that should be run in them. Then, you can setup dependencies between panes and windows to orchestrate the order in which the commands are run.
dir: ~/project
sessions:
- name: example
windows:
# Start a database
- name: database
panes:
- cmd: service postgresql start
readycheck:
test: pg_isready -h localhost -p 5432 -U postgres
interval: 3s
retries: 3
# Run a program that must start after the database is ready
- panes:
- cmd: ./myprogram
depends_on: ["database"]
Bring up a tmux session:
tmux-compose -f example.yml up
Teardown a tmux session:
tmux-compose -f example.yml down
Prebuilt binaries for multiple platforms can be downloaded from the releases page.
tmux-compose was built with Go. If you already have Go setup, you go get
the utility:
go get github.com/kevinms/tmux-compose
git clone https://github.com/kevinms/tmux-compose.git
cd tmux-compose
go install
Go code can easily compile for other OSes, but this has only been tested on Linux.
Example showing all options for the root node of the config file
dir: /path/to/project
up_pre_cmd: (date; echo start) > run.log
up_post_cmd: (date; echo done) >> run.log
down_pre_cmd: touch example.tmp
down_post_cmd: rm example.tmp
sessions:
- name: example
windows:
- name: code
panes:
- cmd: vim
- panes:
- cmd: top
Example showing all options being used for a window:
sessions:
- name: example
dir: ~/project
readycheck:
test: ping -c1 domain.net
interval: 3s
retries: 10
depends_on: ["thing1", "thing2"]
windows:
- name: code
panes:
- cmd: vim
- panes:
- cmd: top
Example showing all options being used for a window:
sessions:
- name: example
windows:
- name: My Window
dir: ~/project
focus: true
layout: main-vertical
depends_on: ["thing1", "thing2"]
panes:
- cmd: vim
- cmd: sleep 5
Example showing all options being used for a pane:
sessions:
- name: example
windows:
- panes:
- name: My Pane
dir: ~/project
cmd: python -m SimpleHTTPServer 8000
focus: true
readycheck:
test: ping -c1 domain.net
interval: 3s
retries: 10
depends_on: ["thing1", "thing2"]
- docker-compose
- teamocil
- tmuxinator
- tmuxstart