.github/workflows | ||
.gitignore | ||
.goreleaser.yml | ||
CODE_OF_CONDUCT.md | ||
commander.go | ||
config.go | ||
errors.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
main.go | ||
Makefile | ||
options_test.go | ||
options.go | ||
README.md | ||
smug_test.go | ||
smug.go | ||
tmux.go |
Smug - tmux session manager
Inspired by tmuxinator and tmuxp.
Smug automates your tmux workflow. You can create a single configuration file, and Smug will create all the required windows and panes from it.
The configuration used in this GIF can be found here.
Installation
Download from the releases page
Download the latest version of Smug from the releases page After that, run this command:
mkdir smug && tar -xzf smug_0.1.0_Darwin_x86_64.tar.gz -C ./smug && sudo mv smug/smug /usr/local/bin && rm -rf smug
Don't forget to replace smug_0.1.0_Darwin_x86_64.tar.gz
with the archive that you've downloaded.
Git
Prerequisite Tools
Fetch from GitHub
The easiest way is to clone Smug from GitHub and install it using go-cli
:
cd /tmp
git clone https://github.com/ivaaaan/smug.git
cd smug
go install
Usage
smug <command> <project>[:window name] [-w window name]
.
Examples
To start/stop a project and all windows, run:
xyz@localhost:~$ smug start project
xyz@localhost:~$ smug stop project
When you already have a running session, and you want only to create some windows from the configuration file, you can do something like this:
xyz@localhost:~$ smug start project:window1
xyz@localhost:~$ smug start project:window1,window2
xyz@localhost:~$ smug start project -w window1
xyz@localhost:~$ smug start project -w window1 -w window2
xyz@localhost:~$ smug stop project:window1
xyz@localhost:~$ smug stop project -w window1 -w window2
Configuration
Configuration files stored in the ~/.config/smug
directory in the YAML
format, e.g ~/.config/smug/your_project.yml
.
Examples
Example 1
session: blog
root: ~/Developer/blog
before_start:
- docker-compose -f my-microservices/docker-compose.yml up -d # my-microservices/docker-compose.yml is a relative to `root`
stop:
- docker stop $(docker ps -q)
windows:
- name: code
root: blog # a relative path to root
manual: true # you can start this window only manually, using the -w arg
layout: main-vertical
commands:
- docker-compose start
panes:
- type: horizontal
root: .
commands:
- docker-compose exec php /bin/sh
- clear
- name: infrastructure
root: ~/Developer/blog/my-microservices
layout: tiled
panes:
- type: horizontal
root: .
commands:
- docker-compose up -d
- docker-compose exec php /bin/sh
- clear
Example 2
session: blog
root: ~/Code/blog
before_start:
- docker-compose up -d
stop:
- docker-compose stop
windows:
- name: code
layout: main-horizontal
commands:
- vim app/dependencies.php
panes:
- type: horizontal
commands:
- make run-tests
- name: ssh
commands:
- ssh -i ~/keys/blog.pem ubuntu@127.0.0.1