TUI for running frequently used commands from markdown files
Find a file
2026-06-15 13:21:33 +02:00
examples Ghostty: run commands directly via base64 to avoid Gatekeeper prompts; translate README; anonymize examples 2026-06-15 12:47:51 +02:00
src Run commands in current terminal by default; 'o' opens in new window 2026-06-15 13:18:42 +02:00
tests Ghostty: run commands directly via base64 to avoid Gatekeeper prompts; translate README; anonymize examples 2026-06-15 12:47:51 +02:00
.gitignore Initial commit 2026-06-15 10:46:15 +02:00
Cargo.lock Ghostty: run commands directly via base64 to avoid Gatekeeper prompts; translate README; anonymize examples 2026-06-15 12:47:51 +02:00
Cargo.toml Ghostty: run commands directly via base64 to avoid Gatekeeper prompts; translate README; anonymize examples 2026-06-15 12:47:51 +02:00
README.md Update controls for same-terminal execution and new-window shortcut 2026-06-15 13:21:33 +02:00

lines

A TUI app for quickly running frequently used commands — ideal for SSH scripts, updates, and anything you run regularly from the terminal.

Installation

brew tap janvete/tools
brew install lines

Usage

lines              # opens the TUI
lines --dir /path  # use a different data directory

Data structure

Data is stored as plain .md files in ~/.lines. Groups are subdirectories.

~/.lines
├── Servers
│   └── web.md
└── Scripts
    └── update.md

.md format

Each section starts with # Command name. Command lines follow the heading.

# Web server
ssh admin@web.example.com

# Database
ssh admin@db.example.com

A section without command lines means "run all commands in this file".

# Run all

# Docker update
ssh admin@host1.example.com /opt/app/update.sh
ssh admin@host2.example.com /opt/app/update.sh

Configuration

Create ~/.lines/config.toml:

terminal = "Ghostty"   # options: Terminal, Ghostty, iTerm
shell = "zsh"          # options: any shell name, default is taken from $SHELL

The default terminal is Terminal (macOS Terminal.app). The default shell is detected from the $SHELL environment variable.

Controls

Key Action
↑/↓ or j/k move
←/→ or h/l switch panel
Enter run selected command / all commands in the current terminal
o open selected command / all commands in a new terminal window
e open current .md file in $EDITOR
r reload data
q / Esc quit

Backup

The entire ~/.lines folder is plain text. Copy it to a disk, Git repo, or iCloud. On a new Mac, move it to the same location and lines works immediately.

License

MIT