Skip to content

MeirKriheli/rusmux

Repository files navigation

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 .yml project files from tmuxinator.
  • Generate a standalone binary that can be easily distributed.
  • Enhance my skills and comprehension of Rust and its associated tools.

Example

cat ~/.config/rusmux/demo.yml
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
      root: ~/src/demo/code  # Optional per window root overriding `project_root`
      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):

    paru -S rusmux
  • Get a compiled binary from the Releases page and place it in your $PATH.

  • With cargo:

    cargo install rusmux
  • With shell script, for the specific version, see the release page, e.g:

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/MeirKriheli/rusmux/releases/download/v0.x.y/rusmux-installer.sh | sh

Commands

  • Run a project

    rusmux run [project]
    rusmux start [project]
  • List all existing projects

    rusmux list
  • Output shell commands for a project

    rusmux debug [project]
  • Edit an existing project ($EDITOR should be set)

    rusmux edit [project]
  • Stop project's session

    rusmux stop [project]
    rusmux kill [project]
  • Delete an existing project (after confirmation)

    rusmux delete [project]
  • Create a new project, and open it in an editor ($EDITOR should be set)

    rusmux new [project]

    This creates the project from default template. To create one with just the project name:

    rusmux new [project] --blank
  • Copy an existing project to a new one and edit it ($EDITOR should be set)

    rusmux copy [existing] [new]
  • Check your environment for potential issues

    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.

Shell completion

Under the completions directory you'll find the completion scripts for bash, zsh and fish.

Copy them to the relevant directories for your shell and OS. For system wide completions (Arch Linux in this example):

sudo cp completions/rusmux.bash /usr/share/bash-completion/completions/rusmux
sudo cp completions/rusmux.zsh /usr/share/zsh/site-functions/_rusmux
sudo cp completions/rusmux.fish /usr/share/fish/vendor_completions.d/rusmux.fish

For user directories, see your shell documentation.