Skip to content

Commit 1d6e6c8

Browse files
committed
feat: introduce Tuimorphic styling with active panel borders, updated color palette, and enhanced keybinding hints.
1 parent c502fc0 commit 1d6e6c8

File tree

4 files changed

+297
-267
lines changed

4 files changed

+297
-267
lines changed

README.md

Lines changed: 93 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,188 +1,148 @@
11
# git-scope
22

3-
A **fast TUI dashboard** to view the git status of **all your repositories** in one place — no more `cd``git status` loops.
4-
5-
![demo](docs/git-scope-demo-1.webp)
6-
7-
<p align="left">
8-
<a href="https://github.com/Bharath-code/git-scope">
9-
<img src="https://img.shields.io/github/stars/Bharath-code/git-scope?style=flat-square" />
10-
</a>
11-
<a href="https://github.com/Bharath-code/git-scope/blob/main/LICENSE">
12-
<img src="https://img.shields.io/github/license/Bharath-code/git-scope?style=flat-square" />
13-
</a>
14-
<a href="https://goreportcard.com/report/github.com/Bharath-code/git-scope">
15-
<img src="https://goreportcard.com/badge/github.com/Bharath-code/git-scope?style=flat-square" />
16-
</a>
17-
<a href="https://pkg.go.dev/github.com/Bharath-code/git-scope">
18-
<img src="https://pkg.go.dev/badge/github.com/Bharath-code/git-scope.svg" />
19-
</a>
20-
</p>
3+
> **A fast TUI dashboard to view the git status of *all your repositories* in one place.** > Stop the `cd``git status` loop.
214
22-
---
23-
24-
## 🚀 Overview
25-
26-
`git-scope` helps you manage *many* git repositories from a single terminal UI.
27-
28-
It auto-discovers repos, shows which ones are dirty/ahead/behind, and lets you jump into your editor instantly — ideal for multi-repo workflows, microservices, dotfiles, OSS contributions, and experimentation folders.
5+
[![Go Report Card](https://goreportcard.com/badge/github.com/Bharath-code/git-scope)](https://goreportcard.com/report/github.com/Bharath-code/git-scope)
6+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7+
[![GitHub stars](https://img.shields.io/github/stars/Bharath-code/git-scope)](https://github.com/Bharath-code/git-scope/stargazers)
298

30-
🌐 **Landing Page:** https://bharath-code.github.io/git-scope/
9+
![git-scope Demo](docs/git-scope-demo-1.webp)
3110

3211
---
3312

34-
## ✨ Features
35-
36-
- 🔍 **Fuzzy Search** — find any repo by name, path, or branch (`/`)
37-
- 🛡️ **Dirty Filter** — show only repos with uncommitted changes (`f`)
38-
-**Fast Startup** — JSON caching → ~10ms launch time
39-
- 📊 **Dashboard** — branch, staged/unstaged counts, last commit time
40-
- ⌨️ **Keyboard-Driven** — Vim navigation (`j/k`), sorting (`s`, `1–4`)
41-
- 🚀 **Editor Jump** — open in VSCode, nvim, vim, helix (`Enter`)
42-
- 🌿 **Contribution Graph** — GitHub-style local heatmap (`g`)
43-
- 💾 **Disk Usage View**`.git` + `node_modules` sizes (`d`)
44-
-**Timeline View** — see recent repo activity (`t`)
45-
- 🔄 **Rescan Anytime** (`r`)
13+
## ⚡ Installation
4614

47-
---
15+
Get started in seconds.
4816

49-
## 💡 Why I Built This
50-
51-
I work across many small repositories — experiments, configs, microservices, side projects — and I kept forgetting which repos had uncommitted changes.
52-
53-
Every morning started like this:
17+
### Homebrew (macOS/Linux)
18+
```bash
19+
brew tap Bharath-code/tap
20+
brew install git-scope
21+
````
22+
### Update
23+
```bash
24+
brew upgrade git-scope
25+
````
26+
### From Source (windows)
5427
5528
```bash
56-
cd repo-1 && git status
57-
cd repo-2 && git status
58-
cd repo-3 && git status
59-
# ...repeat for 20+ repos
29+
go install github.com/Bharath-code/git-scope/cmd/git-scope@latest
6030
```
6131

62-
It was slow, repetitive, and easy to miss dirty repos.
32+
*If you find this useful, please consider giving it a ⭐ star to help others find it\!*
6333

64-
I wanted a **single screen** that showed:
34+
-----
6535

66-
- which repos were dirty
67-
- which were ahead/behind
68-
- which had recent changes
69-
- which needed attention
36+
## 🚀 Usage
7037

71-
No existing tool solved this well, especially for *many* repos.
72-
So I built `git-scope` to reduce friction and keep everything visible at a glance.
73-
74-
---
38+
Simply run it in any directory containing your projects:
7539

76-
## 🆚 Comparison: git-scope vs lazygit
77-
78-
| Feature | git-scope | lazygit |
79-
|---------|-----------|---------|
80-
| **Scope** | Many repos at once | One repo at a time |
81-
| **Purpose** | Workspace overview | Deep repo interaction |
82-
| **Dirty status across repos** | ✔ Yes | ❌ No |
83-
| **Fuzzy repo search** | ✔ Yes | ❌ No |
84-
| **Jump to repo/editor** | ✔ Yes | ❌ No |
85-
| **Commit graph / diffs** | ❌ No | ✔ Yes |
86-
| **Disk usage** | ✔ Yes | ❌ No |
87-
| **Activity timeline** | ✔ Yes | ❌ No |
88-
| **Ideal for** | Multi-repo devs, microservices, config folders | Single-repo workflows |
89-
90-
**Summary:**
91-
`git-scope` = overview of all repos
92-
`lazygit` = powerful UI for one repo
93-
Most developers use both.
40+
```bash
41+
git-scope
42+
```
43+
#### Help
44+
```bash
45+
git-scope -h
46+
```
47+
*By default, it recursively scans the current directory. You can configure permanent root paths later.*
9448

95-
---
49+
-----
9650

97-
## 📦 Installation
51+
## 🆚 git-scope vs. lazygit
9852

99-
### **Homebrew (macOS/Linux)**
10053

101-
```sh
102-
brew tap Bharath-code/tap
103-
brew install git-scope
104-
```
54+
* **git-scope** is for your **workspace** (bird's-eye view).
55+
* **lazygit** is for a specific **repository** (deep dive).
10556

106-
**Upgrade:**
57+
| Feature | **git-scope** | **lazygit** |
58+
| :--- | :--- | :--- |
59+
| **Scope** | **All repos at once** | One repo at a time |
60+
| **Primary Goal** | Find what needs attention | Stage/Commit/Diff |
61+
| **Fuzzy Search** | Find repo by name/path ||
62+
| **Integration** | Press `Enter` to open editor | Press `Enter` to stage files |
63+
| **Performance** | \~10ms startup (cached) | Slower on large monorepos |
10764

108-
```sh
109-
brew upgrade git-scope
110-
```
65+
-----
11166

112-
### **From Source**
113-
114-
```sh
115-
go install github.com/Bharath-code/git-scope/cmd/git-scope@latest
116-
```
67+
## ✨ Features
11768

118-
Upgrade by running the install command again.
69+
* **🔍 Fuzzy Search** — Find any repo by name, path, or branch (`/`).
70+
* **🛡️ Dirty Filter** — Instantly show only repos with uncommitted changes (`f`).
71+
* **🚀 Editor Jump** — Open the selected repo in VSCode, Neovim, Vim, or Helix (`Enter`).
72+
* **⚡ Blazing Fast** — JSON caching ensures \~10ms launch time even with 50+ repos.
73+
* **📊 Dashboard Stats** — See branch name, staged/unstaged counts, and last commit time.
74+
* **🌿 Contribution Graph** — GitHub-style local heatmap for your activity (`g`).
75+
* **💾 Disk Usage** — Visualize `.git` vs `node_modules` size (`d`).
76+
* **⏰ Timeline** — View recent activity across all projects (`t`).
11977

120-
---
78+
-----
12179

122-
## 🖥️ Usage
80+
## ⌨️ Keyboard Shortcuts
12381

124-
```sh
125-
git-scope
126-
```
82+
| Key | Action |
83+
| :--- | :--- |
84+
| `/` | **Search** repositories (Fuzzy) |
85+
| `f` | **Filter** (Cycle: All / Dirty / Clean) |
86+
| `s` | Cycle **Sort** Mode |
87+
| `1``4` | Sort by: Dirty / Name / Branch / Recent |
88+
| `Enter` | **Open** repo in Editor |
89+
| `c` | **Clear** search & filters |
90+
| `r` | **Rescan** directories |
91+
| `g` | Toggle **Contribution Graph** |
92+
| `d` | Toggle **Disk Usage** view |
93+
| `t` | Toggle **Timeline** view |
94+
| `q` | Quit |
12795

128-
---
96+
-----
12997

13098
## ⚙️ Configuration
13199

132-
Edit `~/.config/git-scope/config.yml`:
100+
Edit workspace location and code editor of your choice in `~/.config/git-scope/config.yml`:
101+
133102

134103
```yaml
104+
# ~/.config/git-scope/config.yml
135105
roots:
136106
- ~/code
137-
- ~/work
107+
- ~/work/microservices
108+
- ~/personal/experiments
138109

139110
ignore:
140111
- node_modules
141112
- .venv
113+
- dist
142114

143-
editor: code # or nvim, vim, helix
115+
editor: code # options: code,nvim,lazygit,vim,cursor
144116
```
145117
146-
---
147-
148-
## ⌨️ Keyboard Shortcuts
118+
-----
149119
150-
| Key | Action |
151-
|-----|--------|
152-
| `/` | Search repos |
153-
| `f` | Filter (All / Dirty / Clean) |
154-
| `s` | Cycle sort mode |
155-
| `1–4` | Sort by Dirty / Name / Branch / Recent |
156-
| `Enter` | Open repo in editor |
157-
| `c` | Clear search & filters |
158-
| `r` | Rescan directories |
159-
| `g` | Toggle contribution graph |
160-
| `d` | Toggle disk usage view |
161-
| `t` | Toggle timeline |
162-
| `Esc` | Close panel |
163-
| `q` | Quit |
120+
## 💡 Why I Built This
164121
165-
---
122+
I work across dozens of small repositories—microservices, dotfiles, and side projects. I kept forgetting which repos had uncommitted changes or unpushed commits.
166123
167-
## 🗺️ Roadmap
124+
My mornings used to look like this:
168125
169-
- [ ] Background file watcher
170-
- [ ] Quick actions (pull/push)
171-
- [ ] Repo grouping (service/team/workspace)
172-
- [ ] Team dashboards
126+
```bash
127+
cd repo-1 && git status
128+
cd ../repo-2 && git status
129+
# ... repeat for 20 repos
130+
```
173131

174-
---
132+
I built `git-scope` to solve the **"Multi-Repo Blindness"** problem. It gives me a single screen to see what is dirty, what is ahead/behind, and where I left off yesterday.
175133

176-
## 🔎 Related Keywords (SEO)
134+
-----
177135

178-
git workspace manager, git dashboard, git repository monitor, git repo viewer, multi-repo git tool, git status all repos, git TUI, terminal UI git manager, TUI dashboard for git, Bubble Tea TUI example, Go TUI application, Go CLI tool, git productivity tools, developer workflow tools, microservices repo management, local git analytics, contribution graph terminal, disk usage analyzer TUI, git repo activity timeline, fast TUI for git, Go project for beginners, open source Go tools, devops git utilities, multi-folder git scanner, git monorepo alternative
136+
## 🗺️ Roadmap
179137

180-
---
138+
- [ ] Background file watcher (real-time updates)
139+
- [ ] Quick actions (bulk pull/fetch)
140+
- [ ] Repo grouping (Service / Team / Stack)
141+
- [ ] Custom team dashboards
181142

182143
## 📄 License
183144

184-
MIT
145+
MIT © [Bharath-code](https://github.com/Bharath-code)
185146

186-
---
187-
188-
If you find this useful, a ⭐ star means a lot!
147+
```
148+
```

internal/tui/panel.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,28 @@ var (
2727
heatmapLevel3 = lipgloss.NewStyle().Foreground(lipgloss.Color("#26a641")) // Medium-High
2828
heatmapLevel4 = lipgloss.NewStyle().Foreground(lipgloss.Color("#39d353")) // High
2929

30-
// Panel styling
30+
// Panel styling - Tuimorphic borders
3131
panelBorderStyle = lipgloss.NewStyle().
32+
BorderStyle(lipgloss.RoundedBorder()).
33+
BorderForeground(lipgloss.Color("#30363d")).
34+
Padding(0, 1)
35+
36+
// Active panel border (when focused)
37+
panelBorderActiveStyle = lipgloss.NewStyle().
3238
BorderStyle(lipgloss.RoundedBorder()).
3339
BorderForeground(lipgloss.Color("#7C3AED")).
3440
Padding(0, 1)
3541

3642
panelTitleStyle = lipgloss.NewStyle().
3743
Bold(true).
38-
Foreground(lipgloss.Color("#A78BFA")).
44+
Foreground(lipgloss.Color("#f0f6fc")).
3945
MarginBottom(1)
4046

47+
panelSubtitleStyle = lipgloss.NewStyle().
48+
Foreground(lipgloss.Color("#8b949e"))
49+
4150
panelMutedStyle = lipgloss.NewStyle().
42-
Foreground(lipgloss.Color("#6B7280"))
51+
Foreground(lipgloss.Color("#6e7681"))
4352
)
4453

4554
// renderSplitPane renders a split-pane layout with table on left and panel on right
@@ -57,7 +66,8 @@ func renderSplitPane(leftContent, rightContent string, totalWidth int) string {
5766
Width(leftWidth).
5867
Render(leftContent)
5968

60-
rightPane := panelBorderStyle.
69+
// Use active border style for panel (Tuimorphic)
70+
rightPane := panelBorderActiveStyle.
6171
Width(rightWidth).
6272
Render(rightContent)
6373

@@ -72,8 +82,12 @@ func renderGrassPanel(data *stats.ContributionData, width, height int) string {
7282

7383
var b strings.Builder
7484

75-
// Title
85+
// Title with emoji
7686
b.WriteString(panelTitleStyle.Render("🌿 Contribution Graph"))
87+
b.WriteString("\n")
88+
89+
// Subtitle with date range (Tuimorphic style)
90+
b.WriteString(panelSubtitleStyle.Render(fmt.Sprintf("Last %d weeks", data.WeeksCount)))
7791
b.WriteString("\n\n")
7892

7993
// Month labels

0 commit comments

Comments
 (0)