A TUI application for archiving abandoned projects to a "graveyard" directory, keeping your workspace clean while preserving code you're not ready to delete.
The name "sexton" comes from Old English, referring to the church official responsible for maintaining the building and grounds—including the cemetery. It's the perfect name for an app that tends to your project graveyard.
- Browse directories and select multiple projects to archive
- One-command archiving with optional git auto-commit before archiving
- Metadata tracking including project size, last modified date, git commit info, and user notes
- Archive browsing with search, sort, and filtering
- Restore projects from the graveyard (to current directory, original location, or custom path)
- Peek inside archives to see file structure without extracting
- Permanent delete with safety confirmation
- Osaka Jade color scheme for a pleasant terminal experience
Requirements:
- Go 1.25.3 or higher
git clone https://github.com/ricardovfreixo/sexton.git
cd sexton
make installOr manually:
go install ./cmd/sextonThe binary will be installed to $GOPATH/bin/sexton (typically ~/go/bin/sexton).
make build
./bin/sextonsextonSexton opens in the Browse mode by default, scanning the current working directory for subdirectories.
Sexton has two main modes:
- Browse (
tabto switch): View directories in current location, select and archive them - Archives (
tabto switch): View all archived projects in the graveyard, search, restore, and delete
| Key | Action |
|---|---|
j / ↓ |
Move cursor down |
k / ↑ |
Move cursor up |
space |
Toggle selection |
enter |
Archive selected items (or highlighted if none selected) |
N |
Sort by name (alphabetical) |
S |
Sort by size (largest first) |
D |
Sort by date (most recent first) |
tab |
Switch to Archives mode |
q / ctrl+c |
Quit |
| Key | Action |
|---|---|
y / enter |
Confirm archive operation |
n / esc |
Cancel |
tab |
Edit notes field |
| Key | Action |
|---|---|
j / ↓ |
Move cursor down |
k / ↑ |
Move cursor up |
/ |
Start fuzzy search |
esc (when searching) |
Cancel search |
enter (when searching) |
Confirm search filter |
i |
Show archive info |
p |
Peek inside archive (show file tree) |
r |
Restore archive to disk |
d |
Delete archive permanently |
N |
Sort by name (alphabetical) |
S |
Sort by size (largest first) |
D |
Sort by date (most recent first) |
tab |
Switch to Browse mode |
q / ctrl+c |
Quit |
| Key | Action |
|---|---|
j / ↓ |
Scroll down |
k / ↑ |
Scroll up |
esc / p / q |
Close modal |
| Key | Action |
|---|---|
c |
Restore to current directory |
o |
Restore to original location |
p |
Restore to custom path |
y / enter |
Confirm restore |
n / esc / q |
Cancel |
| Key | Action |
|---|---|
| Type characters | Enter confirmation text |
backspace |
Delete character |
enter |
Confirm delete (only after typing "DELETE") |
esc |
Cancel |
Sexton creates a configuration file at ~/.config/sexton/config.yaml on first run.
# Path where archived projects are stored
# Default: /extra/graveyard
graveyard_path: /extra/graveyard
# Automatically commit uncommitted changes before archiving git repos
# Default: true
git_auto_commit: true
# Commit message used when auto-committing
# Default: "WIP: archived by sexton"
git_commit_message: "WIP: archived by sexton"Sexton respects the XDG Base Directory specification:
- Config file:
$XDG_CONFIG_HOME/sexton/config.yaml(defaults to~/.config/sexton/config.yaml) - Graveyard: Defaults to
/extra/graveyard(configurable in config.yaml)
Archives are stored in the graveyard organized by year and month:
/extra/graveyard/
.sexton-index.json # Metadata for all archives
2026/
01/
a1b2c3d4-e5f6-....tar.gz
x7y8z9a0-b1c2-....tar.gz
02/
...
Each archive contains:
- The complete project directory structure
- All files and symlinks
- Git history (the
.gitdirectory if it existed)
The .sexton-index.json file stores metadata for each archive:
- Original project name and path
- Archive size (uncompressed)
- Timestamp (when archived and last modified)
- Git information (commit hash, date, dirty status)
- User notes
- Select one or more directories in Browse mode with
space - Press
enterto show confirmation - Review the list, total size, and graveyard destination
- Add optional notes
- Press
yorenterto confirm - If the project is a git repository and has uncommitted changes:
- If
git_auto_commitis enabled, Sexton commits with the configured message - The commit info is recorded in the archive metadata
- If
- Project is compressed to
.tar.gzand moved to graveyard - Metadata entry is added to
.sexton-index.json - Original directory is removed from disk
- Switch to Archives mode with
tab - Find the archive with
/search orj/knavigation - Press
rto show restore dialog - Choose destination: current directory, original location, or custom path
- Press
yto extract and restore - Archive remains in graveyard (use
dto delete if desired)
- Switch to Archives mode with
tab - Find the archive
- Press
dto show delete confirmation - Type "DELETE" exactly (case insensitive) to confirm
- Press
enterto permanently delete
cmd/sexton/ # Entry point
internal/
config/ # Configuration loading (XDG paths)
metadata/ # Archive index management
archive/ # Tar and extraction operations
git/ # Git detection and operations
tui/ # Terminal UI (Bubble Tea)
colors.go # Osaka Jade color palette
styles.go # Lipgloss styling
app.go # Main Bubble Tea model
browser.go # Directory browser component
archivelist.go # Archive list component
modal.go # Reusable modal component
confirm.go # Archive confirmation modal
progress.go # Archive progress display
peek.go # Archive contents viewer
# Build
make build
# Run tests
go test ./...
# Code quality checks
go vet ./...
go fmt ./...
# Clean
make cleanCore UI and utilities:
github.com/charmbracelet/bubbletea- Terminal UI frameworkgithub.com/charmbracelet/lipgloss- Terminal stylinggithub.com/charmbracelet/bubbles- Pre-built componentsgopkg.in/yaml.v3- YAML configuration parsinggithub.com/google/uuid- Archive identifiers
Sexton is licensed under the Fair Source License 1.0.0. This means:
- You can use, modify, and examine the source code
- You can run it for personal use and operate websites with it
- You cannot use it as a commercial offering or to compete with the original
- The prior major version will be released under an OSI-approved open source license
See LICENSE for full details.
This is a source-available project. Contributions are not currently accepted, but you're free to fork and modify for personal use.
- Color scheme inspired by Osaka Jade terminal theme
- Built with Bubble Tea and Lipgloss