# Rusmux - tmux automation The main purpose of this project is to serve as a substitute for [tmuxinator](https://github.com/tmuxinator/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](https://github.com/MeirKriheli/rusmux) was created. It served as a chance for me to: * Utilize the existing `.yml` project files from `tmuxinator`. * Generate a standalone binary that can be easily distributed. * Enhance my skills and comprehension of [Rust](https://www.rust-lang.org/) and its associated tools. ## Example ```sh cat ~/.config/rusmux/demo.yml ``` ```yaml 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](https://aur.archlinux.org/packages/rusmux), e.g. (using `paru`): ```sh paru -S rusmux ``` * Get a compiled binary from the [Releases](https://github.com/MeirKriheli/rusmux/releases) page and place it in your `$PATH`. * With `cargo`: ```sh cargo install rusmux ``` * With shell script, for the specific version, see the [release page](https://github.com/MeirKriheli/rusmux/releases/latest/), e.g: ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/MeirKriheli/rusmux/releases/download/v0.x.y/rusmux-installer.sh | sh ``` ## Commands * Run a project ```sh rusmux run [project] rusmux start [project] ``` * List all existing projects ```sh rusmux list ``` * Output shell commands for a project ```sh rusmux debug [project] ``` * Edit an existing project (`$EDITOR` should be set) ```sh rusmux edit [project] ``` * Stop project's session ```sh rusmux stop [project] rusmux kill [project] ``` * Delete an existing project (after confirmation) ```sh rusmux delete [project] ``` * Create a new project, and open it in an editor (`$EDITOR` should be set) ```sh rusmux new [project] ``` This creates the project from default template. To create one with just the project name: ```sh rusmux new [project] --blank ``` * Copy an existing project to a new one and edit it (`$EDITOR` should be set) ```sh rusmux copy [existing] [new] ``` * Check your environment for potential issues ```sh rusmux doctor ``` Checks for `tmux` in `$PATH` and `$SHELL` & `$EDITOR` are set. > **NOTE** In the commands above, `project`, `existing` and `new` can be: > > * A simple name, like `my_project`, `awesome_server`, which will be created with a `yaml` extension in the config directory. > * A path to a file (determined by an extension and/or path separator), e.g. `~/projects/my_project/session.yaml`.