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. (HTM) 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/ ccache -s ; sleep 5 ; done - 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.