Skip to content

MeirKriheli/rusmux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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
      options:  # per window options
        main-pane-width: 60%
      panes:
        - #
        - grunt serve
        - remote-log: # name is meaningless, for multi commands
          - ssh [email protected]
          - 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.6.0/rusmux-installer.sh | sh

Commands

  • Run a project

    rusmux run [project]
    rusmux start [project]

    or

    rusmux [project]

    Note This form is deprecated and will be removed in the next version, see #14.

  • 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.