> Coin tracking for hackers
[![License](http://img.shields.io/badge/license-Apache-blue.svg)](https://raw.githubusercontent.com/miguelmota/cointop/master/LICENSE.md) [![Build Status](https://travis-ci.org/miguelmota/cointop.svg?branch=master)](https://travis-ci.org/miguelmota/cointop) [![Go Report Card](https://goreportcard.com/badge/github.com/miguelmota/cointop?)](https://goreportcard.com/report/github.com/miguelmota/cointop) [![GoDoc](https://godoc.org/github.com/miguelmota/cointop?status.svg)](https://godoc.org/github.com/miguelmota/cointop) [![Mentioned in Awesome Terminals](https://awesome.re/mentioned-badge.svg)](https://github.com/k4m4/terminals-are-sexy)
[`cointop`](https://github.com/miguelmota/cointop) is a fast and lightweight interactive terminal based UI application for tracking and monitoring cryptocurrency coin stats in real-time.
The interface is inspired by [`htop`](https://en.wikipedia.org/wiki/Htop) and shortcut keys are inspired by [`vim`](https://en.wikipedia.org/wiki/Vim_(text_editor)).
In action
## Table of Contents
- [Features](#features)
- [Installing](#install)
- [Updating](#updating)
- [Usage](#usage)
- [Shortcuts](#shortcuts)
- [Config](#config)
- [FAQ](#faq)
- [Development](#development)
- [License](#license)
## Features
- Quick sort shortcuts
- Custom key bindings config
- Vim inspired shortcut keys
- Fast pagination
- Charts for coins and global market graphs
- Quick chart date range change
- Fuzzy searching for finding coins
- Currency conversion
- Save and view favorite coins
- Color support
- Help menu
- Offline cache
- Works on macOS, Linux, and Windows
- It's very lightweight; can be left running for weeks
## Installing
There are multiple ways you can install cointop depending on the platform you're on.
### From source (always latest)
Make sure to have [go](https://golang.org/) (1.9+) installed, then do:
```bash
go get -u github.com/miguelmota/cointop
```
Make sure `$GOPATH/bin` is added to the `$PATH` variable.
Now you can run cointop:
```bash
cointop
```
### Homebrew (macOS)
cointop is available via [Homebrew](https://formulae.brew.sh/formula/cointop) for macOS:
```bash
brew install cointop
```
Run
```bash
cointop
```
### Flatpak (Linux)
cointop is available as a [Flatpak](https://flatpak.org/) package via the [Flathub](https://flathub.org/apps/details/com.github.miguelmota.Cointop) registry.
Add the flathub repository (if not done so already)
```bash
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```
Install cointop flatpak
```bash
sudo flatpak install flathub com.github.miguelmota.Cointop
```
Run cointop flatpak
```bash
flatpak run com.github.miguelmota.Cointop
```
cointop flathub [project page](https://flathub.org/apps/details/com.github.miguelmota.Cointop)
### Copr (Fedora)
cointop is available as a [copr](https://copr.fedorainfracloud.org/) package.
First, enable the respository
```bash
sudo dnf copr enable miguelmota/cointop
```
Install cointop
````bash
sudo dnf install cointop
````
Run
```bash
cointop
```
cointop copr [project page](https://copr.fedorainfracloud.org/coprs/miguelmota/cointop/).
### Snap (Ubuntu)
cointop is available as a [snap](https://snapcraft.io/cointop) for Linux users.
```bash
sudo snap install cointop --stable
```
Running snap:
```bash
sudo snap run cointop
```
cointop snapcraft [project page](https://snapcraft.io/cointop).
Note: snaps don't work in Windows WSL. See this [issue thread](https://forum.snapcraft.io/t/windows-subsystem-for-linux/216).
### Windows WSL (Windows)
Recommended to install using Go (instructions above).
You'll need additional font support for Windows WSL. Please see the [wiki](https://github.com/miguelmota/cointop/wiki/Windows-Command-Prompt-and-WSL-Font-Support) for instructions.
### Binaries
You can find pre-built binaries on the [releases](https://github.com/miguelmota/cointop/releases) page.
## Updating
To update make sure to use the `-u` flag if installed via Go.
```bash
go get -u github.com/miguelmota/cointop
```
### Homebrew (macOS)
```bash
brew uninstall cointop && brew install cointop
```
### Flatpak (Linux)
```bash
sudo flatpak uninstall com.github.miguelmota.Cointop
sudo flatpak install flathub com.github.miguelmota.Cointop
```
### Copr (Fedora)
```bash
sudo dnf update cointop
```
### Snap (Ubuntu)
Use the `refresh` command to update snap.
```bash
sudo snap refresh cointop --stable
```
## Usage
Just run the `cointop` command to get started:
```bash
$ cointop
```
## Shortcuts
List of default shortcut keys:
Key|Action
----|------|
↑|Move up
↓|Move down
→|Go to next page
←|Go to previous page
Page Up|Jump page up
Page Down|Jump page down
Home|Go to first line of page
End|Go to last line of page
Enter|Toggle chart for highlighted coin
Esc|Quit view
Space|Toggle coin as favorite
Ctrl+c|Quit application
Ctrl+d|Jump page down (vim inspired)
Ctrl+f|Search
Ctrl+n|Go to next page
Ctrl+p|Go to previous page
Ctrl+r|Force refresh data
Ctrl+s|Save config
Ctrl+u|Jump page up (vim inspired)
Alt+↑|Sort current column in ascending order
Alt+↓|Sort current column in descending order
Alt+←|Sort column to the left
Alt+→|Sort column to the right
F1|Show help|
F5|Force refresh data|
0|Go to first page (vim inspired)
1|Sort table by *[1] hour change*
2|Sort table by *[2]4 hour change*
7|Sort table by *[7] day change*
a|Sort table by *[a]vailable supply*
c|Show currency convert menu
f|Toggle coin as favorite
F|Toggle show favorites
g|Go to first line of page (vim inspired)
G|Go to last line of page (vim inspired)
h|Go to previous page (vim inspired)
H|Go to top of table window (vim inspired)
j|Move down (vim inspired)
k|Move up (vim inspired)
l|Go to next page (vim inspired)
L|Go to last line of visible table window (vim inspired)
m|Sort table by *[m]arket cap*
M|Go to middle of visible table window (vim inspired)
n|Sort table by *[n]ame*
o|[o]pen link to highlighted coin on [CoinMarketCap](https://coinmarketcap.com/)
p|Sort table by *[p]rice*
r|Sort table by *[r]ank*
s|Sort table by *[s]ymbol*
t|Sort table by *[t]otal supply*
u|Sort table by *last [u]pdated*
v|Sort table by *24 hour [v]olume*
q|Quit view
$|Go to last page (vim inspired)
?|Show help|
/|Search (vim inspired)|
]|Next chart date range|
[|Previous chart date range|
}|Last chart date range|
{|First chart date range|
## Config
The first time you run cointop, it'll create a config file in:
```
~/.cointop/config
```
You can then configure the actions you want for each key:
(default `~/.cointop/config`)
```toml
[shortcuts]
"$" = "last_page"
0 = "first_page"
1 = "sort_column_1h_change"
2 = "sort_column_24h_change"
7 = "sort_column_7d_change"
"?" = "help"
"/" = "open_search"
"[" = "previous_chart_range"
"]" = "next_chart_range"
"{" = "first_chart_range"
"}" = "last_chart_range"
G = "move_to_page_last_row"
H = "move_to_page_visible_first_row"
L = "move_to_page_visible_last_row"
M = "move_to_page_visible_middle_row"
a = "sort_column_available_supply"
"alt+down" = "sort_column_desc"
"alt+left" = "sort_left_column"
"alt+right" = "sort_right_column"
"alt+up" = "sort_column_asc"
down = "move_down"
left = "previous_page"
right = "next_page"
up = "move_up"
c = "show_currency_convert_menu"
"ctrl+c" = "quit"
"ctrl+d" = "page_down"
"ctrl+f" = "open_search"
"ctrl+n" = "next_page"
"ctrl+p" = "previous_page"
"ctrl+r" = "refresh"
"ctrl+s" = "save"
"ctrl+u" = "page_up"
end = "move_to_page_last_row"
enter = "toggle_row_chart"
esc = "quit"
f = "toggle_favorite"
F = "toggle_show_favorites"
F1 = "help"
g = "move_to_page_first_row"
h = "previous_page"
home = "move_to_page_first_row"
j = "move_down"
k = "move_up"
l = "next_page"
m = "sort_column_market_cap"
n = "sort_column_name"
o = "open_link"
p = "sort_column_price"
pagedown = "page_down"
pageup = "page_up"
q = "quit_view"
Q = "quit_view"
r = "sort_column_rank"
s = "sort_column_symbol"
space = "toggle_favorite"
t = "sort_column_total_supply"
u = "sort_column_last_updated"
v = "sort_column_24h_volume"
```
## List of actions
This are the action keywords you may use in the config file to change what the shortcut keys do.
Action|Description
----|------|
`first_chart_range`|Select first chart date range (e.g. 1H)
`first_page`|Go to first page
`help`|Show help
`hide_currency_convert_menu`|Hide currency convert menu
`last_chart_range`|Select last chart date range (e.g. All Time)
`last_page`|Go to last page
`move_to_page_first_row`|Move to first row on page
`move_to_page_last_row`|Move to last row on page
`move_to_page_visible_first_row`|Move to first visible row on page
`move_to_page_visible_last_row`|Move to last visible row on page
`move_to_page_visible_middle_row`|Move to middle visible row on page
`move_up`|Move one row up
`move_down`|Move one row down
`next_chart_range`|Select next chart date range (e.g. 3D → 7D)
`next_page`|Go to next page
`open_link`|Open row link
`open_search`|Open search field
`page_down`|Move one row down
`page_up`|Scroll one page up
`previous_chart_range`|Select previous chart date range (e.g. 7D → 3D)
`previous_page`|Go to previous page
`quit`|Quit application
`quit_view`|Quit view
`refresh`|Do a manual refresh on the data
`save`|Save config
`show_currency_convert_menu`|Show currency convert menu
`show_favorites`|Show favorites
`sort_column_1h_change`|Sort table by column *1 hour change*
`sort_column_24h_change`|Sort table by column *24 hour change*
`sort_column_24h_volume`|Sort table by column *24 hour volume*
`sort_column_7d_change`|Sort table by column *7 day change*
`sort_column_asc`|Sort highlighted column by ascending order
`sort_column_available_supply`|Sort table by column *available supply*
`sort_column_desc`|Sort highlighted column by descending order
`sort_column_last_updated`|Sort table by column *last updated*
`sort_column_market_cap`|Sort table by column *market cap*
`sort_column_name`|Sort table by column *name*
`sort_column_price`|Sort table by column *price*
`sort_column_rank`|Sort table by column *rank*
`sort_column_symbol`|Sort table by column *symbol*
`sort_column_total_supply`|Sort table by column *total supply*
`sort_left_column`|Sort the column to the left of the highlighted column
`sort_right_column`|Sort the column to the right of the highlighted column
`toggle_row_chart`|Toggle the chart for the highlighted row
`toggle_favorite`|Toggle coin as favorite
`toggle_show_currency_convert_menu`|Toggle show currency convert menu
`toggle_show_favorites`|Toggle show favorites
## FAQ
- Q: Where is the data from?
- A: The data is from [Coin Market Cap](https://coinmarketcap.com/).
- Q: What coins does this support?
- A: This supports any coin listed on [Coin Market Cap](https://coinmarketcap.com/).
- Q: How often is the data polled?
- A: Data gets polled once every minute by default. You can press Ctrl+r to force refresh.
- Q: I installed cointop without errors but the command is not found.
- A: Make sure your `GOPATH` and `PATH` is set correctly.
```bash
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
```
- Q: What is the size of the binary?
- A: The executable is only ~1.9MB in size.
- Q: How do I search?
- A: The default key to open search is /. Type the search query after the `/` in the field and hit Enter.
- Q: How do I exit search?
- A: Press ESC to exit search.
- Q: Does this work on the Raspberry Pi?
- A: Yes, cointop works on the Rasperry Pi including the RPi Zero.
- Q: How do I add/remove a favorite?
- A: Press the f key to toggle a coin as a favorite.
- Q: How do I view all my favorites?
- A: Press F (shift+f) to toggle view all your favorites.
- Q: How do I save my favorites?
- A: Press ctrl+s to save your favorites.
- Q: I'm getting question marks or weird symbols instead of the correct characters.
- A: Make sure that your terminal has the encoding set to UTF-8 and that your terminal font supports UTF-8.
You can also try running cointop with the following environment variables:
```bash
LANG=en_US.utf8 TERM=xterm-256color cointop
```
If you're on Windows WSL, please see the [wiki](https://github.com/miguelmota/cointop/wiki/Windows-Command-Prompt-and-WSL-Font-Support) for font support instructions.
- Q: How do I install Go on Ubuntu?
- A: There's instructions on installing Go on Ubuntu in the [wiki](https://github.com/miguelmota/cointop/wiki/Installing-Go-on-Ubuntu).
- Q: I'm getting errors installing the snap in Windows WSL.
- A: Unfortunately Windows WSL doesn't support `snapd` which is required for snaps to run. See this [issue thread](https://forum.snapcraft.io/t/windows-subsystem-for-linux/216).
- Q: How do I show the help menu?
- A: Press ? to toggle the help menu. Press q to close help menu.
- Q: I'm getting the error: `new gocui: termbox: error while reading terminfo data: EOF` when trying to run.
- A: Try setting the environment variable `TERM=screen-256color`
- Q: Does cointop work inside an emacs shell?
- A: Yes, but it's slightly buggy.
- Q: My shortcut keys are messed or not correct.
- A: Delete the cointop config directory and rerun cointop.
```bash
rm -rf ~/.cointop
```
- Q: How do I display the chart for the highlighted coin?
- A: Press Enter to toggle the chart for the highlighted coin.
- Q: How do I change the chart date range?
- A: Press ] to cycle to the next date range.
Press [ to cycle to the previous date range.
Press { to select the first date range.
Press } to selected the last date range.
- Q: What chart date ranges are supported?
- A: Supported date ranges are `All Time`, `YTD`, `1Y`, `6M`, `3M`, `1M`, `7D`, `3D`, `24H`, `6H`, `1H`.
YTD = Year-to-date
- Q: How do I change the fiat currency?
- A: Press c to show the currency convert menu, and press the corresponding key to select that as the fiat currency.
- Q: Which currencies can I convert to?
- A: The supported fiat currencies for conversion are `AUD`, `BRL`, `CAD`, `CFH`, `CLP`, `CNY`, `CZK`, `DKK`, `EUR`, `GBP`, `HKD`, `HUF`, `IDR`, `ILS`, `INR`, `JPY`, `KRW`, `MXN`, `MYR`, `NOK`, `NZD`, `PLN`, `PHP`, `PKR`, `RUB`, `SEK`, `SGD`, `THB`, `TRY`, `TWD`, `USD`, and `ZAR`.
The supported crypto currencies for conversion are `BTC` and `ETH`.
- Q: How do I save the selected currency to convert to?
- A: Press ctrl+s to save the selected currency to convert to.
- Q: The data isn't refreshing!
- A: The CoinMarketCap API has rate limits, so make sure to keep manual refreshes to a minimum. If you've hit the rate limit then wait about half an hour to be able to fetch the data again. Keep in mind that CoinMarketCap updates prices every 5 minutes so constant refreshes aren't necessary.
- Q: How do I quit the application?
- A: Press ctrl+c to quit the application.
- Q: How do I quit the open view/window?
- A: Press q to quit the open view/window.
- Q: I'm getting the error `open /dev/tty: no such device or address`.
-A: Usually this error occurs when cointop is running as a daemon or slave which means that there is no terminal allocated, so `/dev/tty` doesn't exist for that process. Try running it with the following environment variables:
```bash
DEV_IN=/dev/stdout DEV_OUT=/dev/stdout cointop
```
## Development
### Go
Running cointop from source
```
make run
```
### Homebrew
Installing from source
```bash
make brew/build
```
### Flatpak
Install the freedesktop runtime (if not done so already)
```bash
sudo flatpak install flathub org.freedesktop.Platform//1.6 org.freedesktop.Sdk//1.6
```
Install golang extension
```bash
sudo flatpak install flathub org.freedesktop.Sdk.Extension.golang
```
Building flatpak package
```bash
make flatpak/build
```
### Copr
Install dependencies
```bash
make copr/install/cli
make rpm/install/deps
make rpm/dirs
```
Build package
```bash
make rpm/cp/specs
make rpm/download
make rpm/build
make copr/build
```
### Snap
Building snap
```bash
make snap/build
```
## Deployment
See this [wiki](https://github.com/miguelmota/cointop/wiki/Deployment).
## License
Released under the [Apache 2.0](./LICENSE.md) license.