Teamocil is a simple tool used to automatically create sessions, windows and splits in tmux with YAML files.
$ gem install teamocil
$ mkdir ~/.teamocil
$ teamocil --edit sample
$ tmux
$ teamocil sample
--here
opens the session in the current window, it doesn’t create an empty first window.--layout
takes a custom file path to a YAML layout file.--edit
opens the layout file (whether or not--layout
is used) with$EDITOR
.--list
lists all available layouts.
A layout file is a single YAML file located in ~/.teamocil
(eg. ~/.teamocil/my-project.yml
).
You can wrap your entire layout file in a session
and Teamocil will rename the current session (so that you can find it more easily when running tmux list-sessions
) before creating your windows.
name
(the name of the session)
session:
name: "my-awesome-session"
windows:
[windows list]
If you are not using a top-level session
key, then the first key of your layout file will be windows
, an array of window items.
name
(the name that will appear intmux
statusbar)root
(the directory in which every split will be created)filters
(a hash ofbefore
andafter
commands to run for each split)splits
(an array of split items)options
(a hash of tmux options, seeman tmux
for a list)
windows:
- name: "my-first-window"
options:
synchronize-panes: true
root: "~/Projects/foo-www"
filters:
before:
- "echo 'Let’s use ruby-1.9.2 for each split in this window.'"
- "rvm use 1.9.2"
splits:
[splits list]
- name: "my-second-window"
root: "~/Projects/foo-api"
splits:
[splits list]
- name: "my-third-window"
root: "~/Projects/foo-daemons"
splits:
[splits list]
Every window must define an array of splits that will be created within it. A vertical or horizontal split will be created, depending on whether the width
or height
parameter is used.
cmd
(the commands to initially execute in the split)width
(the split width, in percentage)height
(the split width, in percentage)target
(the split to set focus on, before creating the current one)
windows:
- name: "my-first-window"
root: "~/Projects/foo-www"
filters:
before: "rvm use 1.9.2"
after: "echo 'I am done initializing this split.'"
splits:
- cmd: "git status"
- cmd: "bundle exec rails server --port 4000"
width: 50
- cmd:
- "sudo service memcached start"
- "sudo service mongodb start"
height: 50
See more example files in the examples
directory.
windows:
- name: "sample-two-splits"
root: "~/Code/sample/www"
splits:
- cmd: ["pwd", "ls -la"]
- cmd: "rails server --port 3000"
width: 50
.------------------.------------------.
| (0) | (1) |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
'------------------'------------------'
windows:
- name: "sample-four-splits"
root: "~/Code/sample/www"
splits:
- cmd: "pwd"
- cmd: "pwd"
width: 50
- cmd: "pwd"
height: 50
target: "bottom-right"
- cmd: "pwd"
height: 50
target: "bottom-left"
.------------------.------------------.
| (0) | (1) |
| | |
| | |
| | |
|------------------|------------------|
| (3) | (2) |
| | |
| | |
| | |
'------------------'------------------'
To get autocompletion when typing teamocil <Tab>
in a zsh session, add this line to your ~/.zshrc
file:
compctl -g '~/.teamocil/*(:t:r)' teamocil
- Making sure the layout is valid before executing it (ie. throw exceptions).
- Add more specs.
Feel free to contribute and submit issues/pull requests on GitHub, just like these fine folks did:
Take a look at the spec
folder before you do, and make sure bundle exec rake spec
passes after your modifications :)
Teamocil is © 2011-2012 Rémi Prévost and may be freely distributed under the LITL license. See the LICENSE
file.