Rusmux - tmux automation
The main purpose of this project is to serve as a substitute for tmuxinator, while still utilizing its yaml files.
tmuxinator, which is written in Ruby, has had instances of breaking due to updates in packages/gems,
having me scrambling for a solution.
Furthermore, the process of installing it on different servers that lack a Ruby installation proved to be tedious.
Hence, rusmux was created. It served as a chance for me to:
- Utilize the existing
.ymlproject files fromtmuxinator. - Generate a standalone binary that can be easily distributed.
- Enhance my skills and comprehension of Rust and its associated tools.
Example
project_name: demo # can also use name
project_root: ~/src/demo
on_project_start:
- sudo systemctl start postgresql
- sudo systemctl start mysqld
# on_project_stop:
pre_window:
- workon demo
- cd demo
windows:
- editor: vim
- shells:
layout: main-vertical
options: # per window options
main-pane-width: 60%
panes:
- #
- grunt serve
- remote-log: # name is meaningless, for multi commands
- ssh me@example.com
- cd /var/logs
- tail -f project.log
- mail: python -m smtpd -n -c DebuggingServer localhost:1025
Install
-
Arch Linux users can install rusmux from AUR, e.g. (using
paru): -
Get a compiled binary from the Releases page and place it in your
$PATH. -
With
cargo: -
With shell script, for the specific version, see the release page, e.g:
|
Commands
-
Run a project
-
List all existing projects
-
Output shell commands for a project
-
Edit an existing project (
$EDITORshould be set) -
Stop project's session
-
Delete an existing project (after confirmation)
-
Create a new project, and open it in an editor (
$EDITORshould be set)This creates the project from default template. To create one with just the project name:
-
Copy an existing project to a new one and edit it (
$EDITORshould be set) -
Check your environment for potential issues
Checks for
tmuxin$PATHand$SHELL&$EDITORare set.
NOTE In the commands above,
project,existingandnewcan be:
- A simple name, like
my_project,awesome_server, which will be created with ayamlextension in the config directory.- A path to a file (determined by an extension and/or path separator), e.g.
~/projects/my_project/session.yaml.