██┐ ██┐
└─┘ ██┐ ██│
██████┐ ██┐ ██████┐ ██████┐
██┌─██│ ██│ └─██┌─┘ ██┌─██│
██│ ██│ ██│ ██│ ██│ ██│
██████│ ██│ ████┐ ██│ ██│
└───██│ └─┘ └───┘ └─┘ └─┘
██│ A TUI git helper
██████│ with catppuccin theme,
└─────┘ written in Go
|
|
[!WARNING]
Still in development

Catppuccin flavors preview

More Images

For the terminal customization / starship config, check out my ubuntu customization blog article.
This is the full setup, for only starship scroll down to the starship section.
Table of Contents
Installation
[!NOTE]
If you don't have Go installed, check out the gith project page,
Go installation is included there.
Install directly using Go
go install github.com/a3chron/gith@latest
or using one of the pre-built releases.
After the installation finished, just run:
gith
Customization
You can set your preferred flavor and accent in the Options.
Just run gith and select "Options".
When running gith the first time, a config file storing your settings will be created at
XDG_CONFIG_HOME/gith/config.json if XDG_CONFIG_HOME is set,
otherwise at ~/.config/gith/config.json.
You can also manually edit the config file, although editing with gith ensures that no invalid configurations are used.
If you have anything you'd like to configure in the settings or options, don't hesitate to open an issue.
Usage in scripts
You are able to easily change flavor and accent of gith in scripts:
gith config update --flavor=Latte --accent=Red
Useful for example if you want a script to switch between
light and dark mode in all your catppuccin themed apps.
[!INFO]
Run gith config help for more info
Troubleshooting
I update gith via go install github.com/a3chron/gith@latest, but nothing changes / version stays the same
[!INFO]
If you get any output when running go install github.com/a3chron/gith@latest,
you probably don't have this issue.
Consider opening an issue.
Sometimes it takes some time for the go proxy server to recognize a new release,
so it is possible that the latest release for the proxy server is still the old one.
In that case, just request a lookup for the specific version, for example v0.6.0 if this is the latest release:
go install github.com/a3chron/gith@v0.6.0
You should now see the output:
go: downloading github.com/a3chron/gith v0.6.0
[!NOTE]
You can check for the latest release on github
or by simply running gith version check
What is and what will be
-
Branch
-
Status
- View working tree status (Modified, Added, Deleted, Untracked files)
-
Commit
-
Undo Last Commit
-
Commit staged changes
-
Commit all changes
-
Amend last commit
-
Tag
-
List Tags (shows 10 latest, sorted by semantic versioning)
-
Remove Tag
-
Push Tag (prompts to confirm pusing the latest tag)
-
Add Tag
-
Remote
-
List Remotes
-
Add Remote
-
Remove Remote
-
Update Remote url
-
Push to remote
-
Pull from remote
-
Changes
-
Options
-
Change UI flavor
-
Change UI accent color
Completions
For package installation the completions will be installed automatically.
When installing via go install you can get completions for the few commands there are by running the following command:
fish
gith completion fish > ~/.config/fish/completions/gith.fish
bash
gith completion bash > ~/.local/share/bash-completion/completions/gith
Zsh
gith completion zsh > ~/.local/share/zsh/site-functions/_gith
Contributing
Contributions are welcome, but please remember to use conventional commits (at least when naming the PR).
For features or possible improvements please create an issue.
Build using:
go build -o gith
Then run with:
./gith
Thanks
- BubbleTea for making it possible to build this
- opencode for the design inspiration (I copied their starting dialog 1:1)
TODOs
This is mostly a list for me, but here so you can see what you don't need to create an issue for.
Also good starting point if you'd want to contribute, but please create an issue stating that you started working on it,
so we don't do the same thing twice.
-
add loading states when fetching sth
-
improve remove tag only show n latest tags wiht "pagination" instead of optional show all
-
add confirmation for things like force branch delete
-
adjust version info for small terminals & imprve display / coloring
-
"remove remote" add dimmed remote url in selection -> for all add Label with name & optional description
-
clarify "out, err := git.GetRemotes(); m.Err = out" logic, siwth these two
-
"Push Tag" Load All functionality
-
bug: double space before success end
-
delete tag deletes localy not remote, for remote: git push origin --delete