9 unstable releases (3 breaking)

0.6.0 Aug 27, 2024
0.5.0 Apr 2, 2024
0.4.0 Feb 20, 2024
0.3.12 Feb 20, 2024
0.3.6 Mar 28, 2023

#165 in Command line utilities

MIT license

78KB
1.5K SLoC

Rusmux - tmux automation

Built primarily to replace tmuxinator while using it's yaml files.

tmuxinator is written in Ruby, and various packages/gem upgrades broke it occasionally, having me scrambling for a fix.

On top of that, installing it on various servers missing Ruby installation was a chore.

Thus rusmux was born. I've used it as an opportunity to:

  • Work with the existing .yml project files of tmuxinator.
  • Provide a single binary I can copy around.
  • Further my knowledge and understanding of Rust and the tooling around it.

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

Commands

  • Run a project

      rusmux [project]
    

    or

      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.

Dependencies

~8–19MB
~283K SLoC