Terminal dashboard for live FX, crypto, and commodity prices
Project description
terminex
A terminal dashboard for live prices across three asset classes:
- FX — top 25 most-traded currencies (BIS triennial survey)
- Crypto — top 25 coins by market cap
- Commodities — metals, energy, and agriculturals futures
Install
Requires Python 3.11+.
pipx install terminex
# or, from a local checkout:
pipx install .
# or editable for development:
pip install -e .
Run
terminex
# or without installing:
python3 -m terminex
Keys
| Key | Action |
|---|---|
1/2/3/4 |
Switch to FX / Crypto / Commodities / Watchlist tab |
j / k |
Move highlighted row down / up |
g / G |
Jump to first / last row |
s |
Cycle sort key: default → 24h → price |
S |
Toggle sort direction |
/ |
Filter by symbol or name substring (live) |
Esc |
Clear filter / close help / close converter |
w |
Toggle watchlist pin for the highlighted row |
~ |
Toggle sparkline column |
c |
Open cross-rate calculator |
a |
Create alert on highlighted row |
A |
List / delete alerts |
? |
Toggle help overlay |
r |
Force refresh the current tab |
q |
Quit |
CLI options
--base USD— FX base currency (default:USD)--tab fx|crypto|commodity|watchlist— tab to start on--interval 10— refresh interval in seconds
Filter
Press / to enter live-filter mode and start typing. The table filters
as you type against both symbol and name. Enter exits filter mode
(keeping the filter active); Esc cancels and clears.
Sparklines
Press ~ to toggle a 20-point sparkline column showing recent price
movement. Series are built up from live polls — newly-started series
start empty and fill in over time. Green means net up, red means net
down. The column hides the natural units but makes trend-shape obvious
at a glance.
Cross-rate calculator
Press c to open an interactive conversion prompt that resolves across
all three asset classes via USD pivot. Type expressions like:
1 BTC in EUR
500 EUR in JPY
1 GC.F in EUR
1,000 USD in GBP
Press Enter to compute, Esc to close. The last 5 results stay
visible above the prompt. Symbols are whatever is loaded in the
fx / crypto / commodity tabs (commodity symbols use Stooq notation like
GC.F, CL.F).
Price alerts
Highlight any row and press a to open the alert-creation modal. The
threshold field pre-fills with the current price. While the modal is
open:
0-9/.— edit threshold</>— toggle the comparison operatorr— toggle recurring (one-shot by default)Enter— create alertEsc— cancel
Alerts fire when the price crosses the threshold, not every tick
while above/below it. On fire: terminal bell, toast in the status
line, and a desktop notification via notify-send (Linux; silently
skipped if unavailable). Non-recurring alerts auto-deactivate on first
fire.
Press A for the list view — browse all alerts, type an ID and press
Enter to delete. The status bar shows the active-alert count.
Alerts are stored in SQLite at
~/.local/share/terminex/terminex.db (or $XDG_DATA_HOME/terminex/)
and survive across runs.
Watchlist
Highlight any row on the FX / Crypto / Commodities tabs and press w to
pin it. Press 4 to see all pins across asset classes in a single
unified view, sortable the same way as any other tab. Pins persist to
~/.config/terminex/watchlist.toml and survive across runs.
Tests
python3 -m unittest discover -s tests -t .
Stdlib unittest only, no extra dependencies. Covers the pure-logic
modules (converter, alerts DAO & engine, watchlist, filter/sort
helpers, age formatter).
Data sources
| Asset | Provider | Key required? | Notes |
|---|---|---|---|
| FX | open.er-api.com |
no | updates ~hourly |
| Crypto | coingecko.com (default) |
no | top 25 by mcap, ~1 min cache |
| Crypto | rest.coincap.io (if key set) |
yes (free) | top 25 by mcap, sub-minute data |
| Commodities | stooq.com (CSV) |
no | 14 futures, ~15-min delayed |
Crypto tab works out of the box via CoinGecko's public API. For faster / higher-rate data, grab a free CoinCap API key and export it — terminex will automatically prefer it:
export TERMINEX_COINCAP_KEY=your-key-here
Or put it in the config file (see below).
Config file
terminex looks for ~/.config/terminex/config.toml (or
$XDG_CONFIG_HOME/terminex/config.toml). All keys optional:
base_currency = "USD"
refresh_interval = 10
active_tab = "fx"
[providers.crypto]
api_key = "your-coincap-key"
Environment variables win over config file values.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file terminex-0.4.0.tar.gz.
File metadata
- Download URL: terminex-0.4.0.tar.gz
- Upload date:
- Size: 36.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3ccc1dcb43db1332bb9da75f6fc9744e937042c2873000293cbd4e6f3005813
|
|
| MD5 |
759d1f3d5dec78688d2c46ee1a0740d9
|
|
| BLAKE2b-256 |
e1a94a22fd17678bd4c12a4422e5012b0eefa61222300b3bf5dcfb9f401e7384
|
Provenance
The following attestation bundles were made for terminex-0.4.0.tar.gz:
Publisher:
publish.yml on Bij4n/terminex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terminex-0.4.0.tar.gz -
Subject digest:
e3ccc1dcb43db1332bb9da75f6fc9744e937042c2873000293cbd4e6f3005813 - Sigstore transparency entry: 1504058775
- Sigstore integration time:
-
Permalink:
Bij4n/terminex@06f15e22bd981847535b6749eba683fd6429b28e -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/Bij4n
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@06f15e22bd981847535b6749eba683fd6429b28e -
Trigger Event:
push
-
Statement type:
File details
Details for the file terminex-0.4.0-py3-none-any.whl.
File metadata
- Download URL: terminex-0.4.0-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24b44014cf3e65f9e0da62ea7f9645f21f1c32e2056af315a3aae732ccc6b6c7
|
|
| MD5 |
b8c1395fb36f3169d79218a0ef4c065c
|
|
| BLAKE2b-256 |
af622384fc5c733778aa341a8452d231ac0d4676db2848e83883f57dcf712e20
|
Provenance
The following attestation bundles were made for terminex-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on Bij4n/terminex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terminex-0.4.0-py3-none-any.whl -
Subject digest:
24b44014cf3e65f9e0da62ea7f9645f21f1c32e2056af315a3aae732ccc6b6c7 - Sigstore transparency entry: 1504058836
- Sigstore integration time:
-
Permalink:
Bij4n/terminex@06f15e22bd981847535b6749eba683fd6429b28e -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/Bij4n
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@06f15e22bd981847535b6749eba683fd6429b28e -
Trigger Event:
push
-
Statement type: