Title: Organize your console with tmuxinator | |
Author: Solène | |
Date: 17 May 2024 | |
Tags: unix terminal portoftheweek | |
Description: In this article, you will learn about the program | |
tmuxinator to automate your console sessions | |
# Introduction | |
This article is about the program tmuxinator, a tool to script the | |
generation of tmux sessions from a configuration file. | |
tmuxinator official project website on GitHub | |
This program is particularly useful when you have repeated tasks to | |
achieve in a terminal, or if you want to automate your tmux session to | |
save your fingers from always typing the same commands. | |
tmuxinator is packaged in most distributions and requires tmux to work. | |
# Configuration | |
tmuxinator requires a configuration file for each "session" you want to | |
manage with it. It provides a command line parameter to generate a | |
file from a template: | |
```shell | |
$ tmuxinator new name_here | |
``` | |
By default, it will create the yaml file for this project in | |
`$HOME/.config/tmuxinator/name_here.yml`, if you want the project file | |
to be in a directory (to make it part of a versioned project | |
repository?), you can add the parameter `--local`. | |
# Real world example | |
Here is a tmuxinator configuration file I use to automatically do the | |
following tasks, the commands include a lot of monitoring as I love | |
watching progress and statistics: | |
* update my ports tree using git before any other task | |
* run a script named dpb.sh | |
* open a shell and cd into a directory | |
* run an infinite loop displaying ccache statistics | |
* run an infinite loop displaying a MFS mount point disk usage | |
* display top | |
* display top for user _pbuild | |
I can start all of this using `tmuxinator start dpb`, or stop only | |
these "parts" of tmux with `tmuxinator stop dpb` which is practical | |
when using tmux a lot. | |
Here is my file `dpb.yml`: | |
```yml | |
name: dpb | |
root: ~/ | |
# Runs on project start, always | |
on_project_start: cd /usr/ports && doas -u solene git pull -r | |
windows: | |
- dpb: | |
layout: tiled | |
panes: | |
- dpb: | |
- cd /root/packages/packages | |
- ./dpb.sh -P list.txt -R | |
- watcher: | |
- cd /root/logs | |
- ls -altrh locks | |
- date | |
- while true ; do clear && env CCACHE_DIR=/build/tmp/pobj/.ccache/ ccac… | |
- while true ; do df -h /build/tmp/pobj_mfs/ | grep % ; sleep 10 ; done | |
- top | |
- top -U _pbuild | |
``` | |
# Going further | |
Tmuxinator could be used to ssh into remote servers, connect to IRC, | |
open your email client, clean stuff, there are no limits. | |
This is particularly easy to configure as it does not try to run | |
commands, but only send the keys to each tmux panes, which mean it will | |
send keystrokes like if you typed them. In the example above, you can | |
see how the pane "dpb" can cd into a directory and then run a command, | |
or how the pane "watcher" can run multiple commands and leave the shell | |
as is. | |
# Conclusion | |
I knew about tmuxinator for a while, but I never gave it a try before | |
this week. I really regret not doing it earlier. Not only it allows | |
me to "script" my console usage, but I can also embed some development | |
configuration into my repositories. While you can use it as an | |
automation method, I would not rely too much on it though, it only | |
types blindly on the keyboard. |