https://github.com/alexchao26/oneterminal
Like tmux, but configured via yaml. Run multiple commands from one.
https://github.com/alexchao26/oneterminal
bash cli devtool go golang oneterminal sh yaml zsh
Last synced: 6 months ago
JSON representation
Like tmux, but configured via yaml. Run multiple commands from one.
- Host: GitHub
- URL: https://github.com/alexchao26/oneterminal
- Owner: alexchao26
- License: apache-2.0
- Created: 2020-11-04T06:21:38.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-07-02T15:51:40.000Z (over 4 years ago)
- Last Synced: 2025-03-24T04:42:37.787Z (7 months ago)
- Topics: bash, cli, devtool, go, golang, oneterminal, sh, yaml, zsh
- Language: Go
- Homepage:
- Size: 293 KB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# oneterminal to rule them all!
A configurable CLI to run multiple terminal windows from a single command.
# Overview
oneterminal is a CLI written in [Go](https://golang.org/). Each command is configured in a YAML file stored in the ~/.config/oneterminal directory. For more details on how to configure a command, refer to [example configurations](#example-configurations).
# How to Install
If you have a local [Go 1.16+ installation](https://golang.org/doc/install) use [`go install`](https://golang.org/doc/go1.16#go-command):
```go
go install github.com/alexchao26/oneterminal@latest
```### From Github releases
Alternatively, you can download the binary directly from the [Github releases](https://github.com/alexchao26/oneterminal/releases).Note that development was mostly on a Mac with `go version go1.16.2 darwin/amd64` and some standard library packages (like [os/exec](https://golang.org/pkg/os/exec/)) do not have full support on Windows.
# Example Configurations
## Utilizing the example config generator
`oneterminal example` will create a config at ~/.config/oneterminal/example.yml containing helpful comments about each yaml field
```yaml
# The name of the command. Alphanumeric, dash and hyphens are accepted
name: somename# shell to use (zsh|bash|sh), defaults to zsh
shell: zsh# a short description of what this command does
short: an example command that says hello twice
# OPTIONAL: longer description of what this command does
long: Optional longer description# An array of commands, each command consists of:
# 1. command {string}: the command to run directly in a shell
# 2. name {string default: ""}: used to prefix each line of this command's
# output AND for other commands to list dependencies
# NOTE: an empty string is a valid name and is useful for things like
# vault which write to stdout in small chunks
# 3. directory {string, default: $HOME}: what directory to run the command in
# NOTE: use $HOME, not ~. This strings gets passed through os.ExpandEnv
# 4. silence {boolean, default: false}, silence this command's output?
# 5. depends-on {[]string, optional}: which (names of) commands to wait for
# 6. ready-regexp {string, optional}: a regular expression that the outputs
# must match for this command to be considered "ready" and for its
# dependants to begin running
# 7. environment {map[string]string, optional} to set environment variables
commands:
- name: greeter-1
command: echo hello from window 1
directory: $HOME/go
ready-regexp: "window [0-9]"
silence: false
- name: greeter-2
command: echo hello from window 2
silence: false
depends-on:
- greeter-1
- name: ""
command: echo "they silenced me :'("
silence: true
```This is an example of a slightly more complex configuration that calls a ticker program (in the [examples folder](./examples/ticker/main.go))
```yml
name: tick
short: a few tickers that rely on each other
commands:
- name: ticker-UNO
command: go run main.go
ready-regexp: "tick [5-9]"
directory: $HOME/go/src/github.com/alexchao26/oneterminal/examples/ticker
- name: ticker-two
command: SECONDS=3 go run main.go
directory: $HOME/go/src/github.com/alexchao26/oneterminal/examples/ticker
depends-on:
- ticker-UNO
- name: ticker-3
command: go run main.go
directory: $HOME/go/src/github.com/alexchao26/oneterminal/examples/ticker
depends-on:
- silent-ticker
- ticker-two
environment:
SECONDS: 8
- name: silent-ticker
command: go run main.go
directory: $HOME/go/src/github.com/alexchao26/oneterminal/examples/ticker
silence: true
```Run `oneterminal help` to see this command show up under available commands. Note that this command's name is set by the name field in example.yml.
# oneterminal Commands
Command | Description
-----------------------------------------|--------------------------------------
`oneterminal example` | Makes a demo oneterminal config in ~/.config/oneterminal
`oneterminal completion --help` | Get helper text to setup shell completion for zsh or bash shells
`oneterminal version` | Print the version number of oneterminal
`oneterminal list` | List only configured commands
`oneterminal help` | Help about any command
`oneterminal update` | Updates oneterminal to latest release
`oneterminal ` | Your commands configured via ~/.config/oneterminal/*.yml# Contributing to oneterminal
This project is still in its infancy and its future path is undetermined.
I welcome contributions but ask that you open an issue to discuss bugs and desired features!