No description
  • Go 99.5%
  • Nix 0.5%
Find a file
Nimmo ae27b973d2 Add full remote host support via SSH
Introduces [[remote_hosts]] config (name, host, user, stacks_dir) to
discover and manage stacks on remote machines with full feature parity:
compose/env viewing, editing, service detail, and all git operations
(init, stage, commit, push, pull, gitignore) run transparently over SSH.

git.Client{} abstracts local vs remote execution; compose and stacks
packages gain content-based variants to avoid redundant remote reads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 09:51:41 +01:00
compose Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
config Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
git Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
ollama
remotes
stacks Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
ui Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
.envrc
.gitignore
flake.lock
flake.nix
go.mod
go.sum
main.go Add full remote host support via SSH 2026-04-05 09:51:41 +01:00
README.md

stack-browser

A terminal UI for browsing and managing Docker Compose stacks.

Features

  • Stack browser — navigate all stacks in a configured directory
  • Service summary — glanceable overview of each container (image, ports, restart policy, container name)
  • Service detail editor — drill into any service and edit its configuration; changes write back to the compose file
  • Compose file viewer/editor — syntax-highlighted view with inline editing
  • .env file viewer/editor — view and edit environment variables alongside the compose file
  • Git management — per-stack git operations from within the TUI:
    • Initialise a repository, set or change the remote URL
    • Stage individual files and commit with a hand-written or AI-generated message
    • AI commit messages via Ollama (diff is sent to your configured model)
    • .gitignore editor — add/remove entries; .env is automatically ignored on repo init
    • Remote repository creation (GitHub supported; GitLab/Gitea stubbed)
  • Settings UI — configure everything without touching the config file

Requirements

  • Go 1.21+
  • Git (must be on $PATH)
  • Docker Compose stacks in a local directory (default: ~/stacks)
  • Ollama (optional — only needed for AI commit messages)

Installation

git clone https://github.com/nimmo/stack-browser
cd stack-browser
go build -o stack-browser .

For NixOS / Nix with flakes:

nix build

Or drop into a dev shell:

nix develop

Usage

./stack-browser

Navigation

Key Action
/ Move through stack list
/ Switch tabs (Summary / Compose / .env / Git)
tab Toggle focus between stack list and content panel
enter Open service detail (from Summary tab)
, Open settings
q / ctrl+c Quit

Summary tab

Key Action
/ Navigate services
enter Open service detail editor

Git tab

Key Action
i Toggle between staged files and .gitignore (when repo exists) / initialise repo
/ Navigate file list
space Toggle file staged / ignored
A Select all files
r Edit remote URL
a Generate commit message via Ollama
m Focus commit message input
enter Confirm / commit
n Add new .gitignore entry (when in .gitignore section)
d Delete .gitignore entry (when in .gitignore section)
esc Go back / cancel

Configuration

Settings are stored at ~/.config/stack-browser/config.toml and can be edited via the built-in settings screen (,).

Setting Default Description
stacks_dir ~/stacks Directory containing your stacks
ollama.host 192.168.8.124 Ollama host
ollama.port 11434 Ollama port
ollama.model qwen3.5:122b Model used for commit message generation
git.default_base_url Pre-filled base URL for new remotes (e.g. github.com)
git.default_user Pre-filled username for new remotes
git.access_token Token used to create remote repositories
git.default_branch main Default branch name for new repositories
git.auto_ignore_env true Automatically add .env to .gitignore on repo init

Stack directory layout

Each subdirectory of stacks_dir is treated as a stack:

~/stacks/
├── nextcloud/
│   ├── docker-compose.yml
│   └── .env
├── jellyfin/
│   ├── compose.yaml
│   └── .env
└── traefik/
    └── docker-compose.yml

Supported compose filenames (in order of preference): docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml