Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/meirkriheli/rusmux

Tmux automation in rust
https://github.com/meirkriheli/rusmux

rust tmux

Last synced: about 5 hours ago
JSON representation

Tmux automation in rust

Awesome Lists containing this project

README

        

# 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 [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](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.6.0/rusmux-installer.sh | sh
```

## Commands

* Run a project

```sh
rusmux run [project]
rusmux start [project]
```

or

```sh
rusmux [project]
```

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

* 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`.