forestui 0.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- forestui/__init__.py +3 -0
- forestui/__main__.py +6 -0
- forestui/app.py +1012 -0
- forestui/cli.py +169 -0
- forestui/components/__init__.py +21 -0
- forestui/components/messages.py +76 -0
- forestui/components/modals.py +668 -0
- forestui/components/repository_detail.py +377 -0
- forestui/components/sidebar.py +256 -0
- forestui/components/worktree_detail.py +326 -0
- forestui/models.py +221 -0
- forestui/services/__init__.py +16 -0
- forestui/services/claude_session.py +179 -0
- forestui/services/git.py +254 -0
- forestui/services/github.py +242 -0
- forestui/services/settings.py +84 -0
- forestui/services/tmux.py +320 -0
- forestui/state.py +248 -0
- forestui/theme.py +657 -0
- forestui-0.9.0.dist-info/METADATA +152 -0
- forestui-0.9.0.dist-info/RECORD +23 -0
- forestui-0.9.0.dist-info/WHEEL +4 -0
- forestui-0.9.0.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: forestui
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: A Terminal UI for managing Git worktrees
|
|
5
|
+
Author: cadu
|
|
6
|
+
Keywords: git,terminal,textual,tui,worktree
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
14
|
+
Requires-Python: >=3.14
|
|
15
|
+
Requires-Dist: click>=8.1.0
|
|
16
|
+
Requires-Dist: humanize>=4.9.0
|
|
17
|
+
Requires-Dist: libtmux>=0.37.0
|
|
18
|
+
Requires-Dist: pydantic>=2.12.5
|
|
19
|
+
Requires-Dist: textual>=7.2.0
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# forestui
|
|
23
|
+
|
|
24
|
+
> A terminal UI for managing Git worktrees, inspired by [forest](https://github.com/ricwo/forest) for macOS by [@ricwo](https://github.com/ricwo).
|
|
25
|
+
|
|
26
|
+
forestui brings the power of Git worktree management to the terminal with a beautiful TUI interface built on [Textual](https://textual.textualize.io/), featuring deep integration with [Claude Code](https://claude.ai/code).
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- **Repository Management**: Add and track multiple Git repositories
|
|
33
|
+
- **Worktree Operations**: Create, rename, archive, and delete worktrees
|
|
34
|
+
- **TUI Editor Integration**: Opens TUI editors (vim, nvim, helix, etc.) in tmux windows
|
|
35
|
+
- **Claude Code Integration**: Track and resume Claude Code sessions per worktree
|
|
36
|
+
- **Multi-Forest Support**: Manage multiple forest directories via CLI argument
|
|
37
|
+
- **tmux Native**: Runs inside tmux for a cohesive terminal experience
|
|
38
|
+
|
|
39
|
+
## Requirements
|
|
40
|
+
|
|
41
|
+
- Python 3.14+
|
|
42
|
+
- tmux
|
|
43
|
+
- uv (for installation)
|
|
44
|
+
|
|
45
|
+
## Installing
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
curl -fsSL https://raw.githubusercontent.com/flipbit03/forestui/main/install.sh | bash
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Usage
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Start with default forest directory (~/forest)
|
|
55
|
+
forestui
|
|
56
|
+
|
|
57
|
+
# Start with a custom forest directory
|
|
58
|
+
forestui ~/my-projects
|
|
59
|
+
|
|
60
|
+
# Update to latest version
|
|
61
|
+
forestui --self-update
|
|
62
|
+
|
|
63
|
+
# Show help
|
|
64
|
+
forestui --help
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Keyboard Shortcuts
|
|
68
|
+
|
|
69
|
+
| Key | Action |
|
|
70
|
+
|-----|--------|
|
|
71
|
+
| `a` | Add repository |
|
|
72
|
+
| `w` | Add worktree |
|
|
73
|
+
| `e` | Open in editor |
|
|
74
|
+
| `t` | Open in terminal |
|
|
75
|
+
| `o` | Open in file manager |
|
|
76
|
+
| `n` | Start Claude session |
|
|
77
|
+
| `y` | Start Claude session (YOLO mode) |
|
|
78
|
+
| `h` | Toggle archive |
|
|
79
|
+
| `d` | Delete |
|
|
80
|
+
| `s` | Settings |
|
|
81
|
+
| `r` | Refresh |
|
|
82
|
+
| `?` | Show help |
|
|
83
|
+
| `q` | Quit |
|
|
84
|
+
|
|
85
|
+
### TUI Editor Integration
|
|
86
|
+
|
|
87
|
+
When your default editor is a TUI editor (vim, nvim, helix, nano, etc.), forestui opens it in a new tmux window named `edit:<worktree>`. This keeps your editing session organized alongside forestui and any Claude sessions.
|
|
88
|
+
|
|
89
|
+
Supported TUI editors: `vim`, `nvim`, `vi`, `emacs`, `nano`, `helix`, `hx`, `micro`, `kakoune`, `kak`
|
|
90
|
+
|
|
91
|
+
### Multi-Forest Support
|
|
92
|
+
|
|
93
|
+
forestui stores its state (`.forestui-config.json`) in the forest directory itself, allowing you to manage multiple independent forests:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
forestui ~/work # Uses ~/work/.forestui-config.json
|
|
97
|
+
forestui ~/personal # Uses ~/personal/.forestui-config.json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
User preferences (editor, theme, branch prefix) are stored globally in `~/.config/forestui/settings.json`.
|
|
101
|
+
|
|
102
|
+
## Configuration
|
|
103
|
+
|
|
104
|
+
Settings are stored in `~/.config/forestui/settings.json`:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"default_editor": "nvim",
|
|
109
|
+
"branch_prefix": "feat/",
|
|
110
|
+
"theme": "system"
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Press `s` in the app to open the settings modal.
|
|
115
|
+
|
|
116
|
+
## Development
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Clone and enter the repo
|
|
120
|
+
git clone https://github.com/flipbit03/forestui.git
|
|
121
|
+
cd forestui
|
|
122
|
+
|
|
123
|
+
# Install dev dependencies
|
|
124
|
+
make dev
|
|
125
|
+
|
|
126
|
+
# Run checks
|
|
127
|
+
make check
|
|
128
|
+
|
|
129
|
+
# Format code
|
|
130
|
+
make format
|
|
131
|
+
|
|
132
|
+
# Run the app
|
|
133
|
+
make run
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
See [CLAUDE.md](CLAUDE.md) for AI-assisted development guidelines.
|
|
137
|
+
|
|
138
|
+
## Compatibility with forest (macOS)
|
|
139
|
+
|
|
140
|
+
forestui is designed to coexist with [forest](https://github.com/ricwo/forest) for macOS:
|
|
141
|
+
|
|
142
|
+
- Both apps can share the same `~/forest` directory for worktrees
|
|
143
|
+
- Each app maintains its own state file:
|
|
144
|
+
- forest: `.forest-config.json` (stored in `~/.config/forest/`)
|
|
145
|
+
- forestui: `.forestui-config.json` (stored in the forest folder itself)
|
|
146
|
+
- Worktrees created by either app work seamlessly with both
|
|
147
|
+
|
|
148
|
+
**Key difference:** forestui stores its state inside the forest folder (`~/forest/.forestui-config.json`) rather than in a global config directory. This design enables multi-forest support - you can run `forestui ~/work` and `forestui ~/personal` with completely independent state for each.
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
forestui/__init__.py,sha256=5XV7YExNshXcR27WcUWlQNu3eBmtNFt_IikkFCwhLb4,82
|
|
2
|
+
forestui/__main__.py,sha256=nDdStXHt-5rnJh-nihdYReIx0MlTOvtNVwu4HhNbPNM,102
|
|
3
|
+
forestui/app.py,sha256=Yt4C6cHAao0Y4WRia6-pBCMvT3AXh5BZMoNCjSAZ6-Q,39779
|
|
4
|
+
forestui/cli.py,sha256=j0tUXDK58_tPqgwTPaHsB496KlDsnNdOcC0pU5Xq6Uo,4802
|
|
5
|
+
forestui/models.py,sha256=vSeGOis6kdxJDV7720U-X0tACTJQkDnMY9WXYUAJsuA,6167
|
|
6
|
+
forestui/state.py,sha256=x54bDbYZYuQa8Yv00v6AzUBiDKeP1N55sNEPcRQh6tM,8854
|
|
7
|
+
forestui/theme.py,sha256=EaK-nX5H6qU34SEauS2EfDAYjk_QtgTEyf6cw1Yhl2E,9199
|
|
8
|
+
forestui/components/__init__.py,sha256=di1gcQvhn_g1PasCZM_Wddl5pDOSJ51PvLI8SGfV1hY,518
|
|
9
|
+
forestui/components/messages.py,sha256=aXivaa5oY3Cp5pWduuBfZWe-Ff6wjaWY_KUEJV4CcGs,1860
|
|
10
|
+
forestui/components/modals.py,sha256=-f6w1farHIy5vPEKImwp3SSRITnp5GxOZFNEYUchH1A,23494
|
|
11
|
+
forestui/components/repository_detail.py,sha256=4tORX6U_MuBj-tsv1FK1C-K5gvAAKbHalErcg5ad6HI,14819
|
|
12
|
+
forestui/components/sidebar.py,sha256=OwjC3pyKPqPe3_DTMk2H7QOV-hKJdyr-8N35N2twI18,8899
|
|
13
|
+
forestui/components/worktree_detail.py,sha256=edcC-R43ZsVIFc2VPxtWwVJr4cCaCXVMfpg0rMEwSiQ,12473
|
|
14
|
+
forestui/services/__init__.py,sha256=gNs1XGnyy277xOQNV-rc5tVejRZyjJRcWQ8h3WdPc4k,464
|
|
15
|
+
forestui/services/claude_session.py,sha256=jUM6ng39cUlWIfyvoglsYaqAMmT6NEfiROehIMd3kXg,6618
|
|
16
|
+
forestui/services/git.py,sha256=9Gu_yawmAckhBkepkNID80I_r4bFMqqs9IbTjT6VY4Q,9165
|
|
17
|
+
forestui/services/github.py,sha256=jZF0iYDL4iZHarXC5zYfqLhuyUDiP_VsUwP63Z7cSt8,8156
|
|
18
|
+
forestui/services/settings.py,sha256=j7PgYMoCaTv4moakNU2Uo75gMvezyYsmPpBV71-4Uec,2608
|
|
19
|
+
forestui/services/tmux.py,sha256=WPTm0JUV9wGbXo70iwW1l3gcjqlZUnwWO_W7whtC_Jg,9715
|
|
20
|
+
forestui-0.9.0.dist-info/METADATA,sha256=CMa6ghedA9sxFDtJNaZmlQMjgBxLATl1ch1mR59bN44,4434
|
|
21
|
+
forestui-0.9.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
22
|
+
forestui-0.9.0.dist-info/entry_points.txt,sha256=ifci7XODOi-Wmgal3AP-wCbNmsU7a2sHI-xe-def8CM,47
|
|
23
|
+
forestui-0.9.0.dist-info/RECORD,,
|