Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wintermute-cell/ngrrram
A TUI tool to help you type faster and learn new layouts. Includes a free cat.
https://github.com/wintermute-cell/ngrrram
cat cli colemak dvorak layout ngram rust touchtyping tui typing
Last synced: 7 days ago
JSON representation
A TUI tool to help you type faster and learn new layouts. Includes a free cat.
- Host: GitHub
- URL: https://github.com/wintermute-cell/ngrrram
- Owner: wintermute-cell
- License: gpl-3.0
- Created: 2024-05-21T12:56:45.000Z (7 months ago)
- Default Branch: master
- Last Pushed: 2024-11-22T21:14:41.000Z (30 days ago)
- Last Synced: 2024-12-08T12:52:20.231Z (14 days ago)
- Topics: cat, cli, colemak, dvorak, layout, ngram, rust, touchtyping, tui, typing
- Language: Rust
- Homepage:
- Size: 2.47 MB
- Stars: 635
- Watchers: 2
- Forks: 15
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ngrrram
`ngrrram` is a CLI tool to practice typing ngrams (`n` adjacent symbols in
particular order) to improve your typing speed and/or learn new keyboard
layouts effectively.![a showcase of the ngrrram ui](./.github/showcase.gif)
Certain letter combination occur a lot more often than others, thus practicing
these in particular makes sense. This type of practice is often recommended for
example by [Ben Vallack](https://www.youtube.com/watch?v=sI-a64EVPPU) and Josh
Kaufman, who [learned Colemak in just 20 hours](https://first20hours.com)
making strong use of ngrams.There already exists a good tool for this type of practice called
[ngram-type](https://github.com/ranelpadon/ngram-type). This tool is *heavily*
inspired by `ngram-type` and I want to thank Ranel Padon for creating it.However, ngram-type does not support emulating different keyboard layouts,
which I found important so I would not have to switch my whole system to a
layout I was still learning.Also, some people might prefer local/offline CLI based solutions over web based
ones.## Installation
### Releases
Precompiled [releases](https://github.com/wintermute-cell/ngrrram/releases) for
linux, windows and macos are available.### AUR (maintained by [JinEnMok](https://github.com/JinEnMok))
Use `yay` or any other AUR helper to install for an Archlinux system:
```bash
yay -S ngrrram-git
or
yay -S ngrrram-bin
```### From Source
Make sure you have the rust tooling installed, then simply run:
```bash
cargo build --release
```The executable will then be located at `./target/release/ngrrram`
### Looking for help packaging!
If you'd like to help by packaging for your platform, I'd gladly accept!
## Usage
`ngrrram` is not very complex. It offers a few customization options as command
flags, but starts with the recommended defaults if unconfigured.Options:
```
Usage: ngrrram [OPTIONS]Options:
-n, --n <2|3|4|w|file> use bi-(2), tri-(3), tetragrams(4), (w)ords or comma separated wordlist file. [default: 2]
-t, --top <1-200> use the top X ngrams ordered by usage. [default: 50]
-c, --combi <1-200> how many different ngrams to use in a single lesson. [default: 2]
-r, --rep how often to repeat *each* different ngram in a lesson. [default: 3]
-w, --wpm the wpm threshold at which the lesson is considered a success. [default: 40]
-a, --acc <0-100> the accuracy in percent at which the lesson is considered a success. [default: 94]
--emu-in your current keyboard layout. only needed if you want to emulate a different layout. see docs for supported layouts. [default: ]
--emu-out the layout you want to emulate. only needed if you want to emulate a different layout. see docs for supported layouts. [default: ]
--show-ortho show keyboard in ortholinear format
--nokb pass this flag to disable the keyboard layout display.
--cat the most important flag. don't practice alone.
-h, --help Print help
```If you start `ngrrram` without parameters, it uses these recommended defaults:
```bash
ngrrram --n 2 --top 50 --combi 2 --rep 3 --wpm 40 --acc 100
```## Layout Emulation
To emulate a different keyboard layout in `ngrrram`, you must pass the flags
`--emu-in` and `--emu-out`, the first one describing your current layout, and
the second one being the one you want to emulate.Available layouts are:
- `qwerty` (Qwerty)
- `qwertz` (Qwertz)
- `azerty` (Azerty)
- `dvorak` (Dvorak)
- `colemak` (Colemak)
- `colemakdh` (ColemakDH)> Having to provide an input layout is sub-optimal. I'm not sure how to get
> layout independent scancodes in rust; Could not get `device_query` to work.
> If you know a solution, please tell me.## Random Notes
- The WPM timer for each lesson only starts once you type the first letter of
that lesson; no need to stress.
- Every 5 non-space characters are considered a "word" for the WPM calculation.
Otherwise WPM would unnaturally skyrocket with smaller ngrams.