# lazygitclj

A lazygit-inspired TUI for Git written in Clojure, targeting Babashka for fast startup.

![Files Panel](screenshots/files-panel.png)

## Features

- **Elm Architecture**: Clean Model-Update-View pattern for predictable state management
- **Fast startup**: Runs on Babashka for sub-second launch times
- **Familiar keybindings**: Vim-style navigation (j/k, h/l) matching lazygit
- **Full Git workflow**: Stage, commit, branch, merge, stash, and more

## Panels

### Files Panel (2)
View and manage staged/unstaged files with inline diffs.

![Files Panel](screenshots/files-panel.png)

### Branches Panel (3)
Switch branches, create new branches, merge, and fast-forward.

![Branches Panel](screenshots/branches-panel.png)

### Commits Panel (4)
Browse commit history, checkout commits, cherry-pick, and revert.

![Commits Panel](screenshots/commits-panel.png)

### Stash Panel (5)
Manage stashes - apply, pop, drop, or create branches from stash.

![Stash Panel](screenshots/stash-panel.png)

### Help Menu (?)
Press `?` to see all available keybindings.

![Help Menu](screenshots/help-menu.png)

## Installation

Requires [Babashka](https://github.com/babashka/babashka).

```bash
git clone https://github.com/yourusername/lazygitclj.git
cd lazygitclj
bb start
```

## Keybindings

| Key | Action |
|-----|--------|
| `q` | Quit |
| `?` | Help |
| `r` | Refresh |
| `h/l` | Previous/Next panel |
| `j/k` | Move down/up |
| `2-5` | Jump to panel |
| `space` | Stage/unstage (Files), Checkout (Commits/Branches), Apply (Stash) |
| `c` | Commit |
| `p/P` | Pull/Push |
| `z/Z` | Undo/Redo |

## Development

```bash
bb start      # Run the TUI
bb test       # Run unit tests
bb test:e2e   # Run VHS tape tests
```

## License

MIT
