Your academic dashboard in the terminal.
Manage courses, track grades by categories, and automatically calculate the exact score needed to pass — all without touching the mouse.
| Feature | Description |
|---|---|
| Semesters | Group courses by semester and keep past ones — never delete a course to start fresh |
| Dashboard | Home screen with semester average, pass/fail counts, credits at risk and the most critical course |
| Credits | Optional per-course credits (SCT, ECTS, ...) — averages become credit-weighted when present |
| Hierarchical Grade System | Course → Categories → Evaluations structure with weighted categories |
| Weighted Evaluations | Assign individual weights to evaluations within a category (e.g., 20%/40%/40%) |
| Real-time Calculation | Shows exactly what grade you need in each evaluation to pass |
| Global Exam Support | Configure global exam policies: weighted average with semester, or replace worst category grade |
| Advanced Category Rules | Drop lowest grades, geometric mean, minimum averages, per-evaluation minimums, weighted evaluations, round before weighting |
| Course Templates | Pre-built templates + create your own reusable templates with t |
| Weight Validation | Visual indicators when category weights don't sum to 100% |
| Auto-balance | Automatically distribute weights equally across categories |
| Yank & Paste | Copy evaluations between categories with y/p |
| Bulk-add Evaluations | Add multiple evaluations at once with Ctrl+N |
| Compact View | Toggle compact courses panel with c for more screen space |
| Nerd Font Icons | Beautiful icons with Nerd Fonts (enabled by default), with Unicode fallback |
| Themed UI | Rounded borders, semantic colours, and styled keybindings |
| Settings | Toggle Nerd Font icons, change language — all persisted to disk |
| Bilingual | Full English and Spanish support (L to switch) |
| Automatic Persistence | Data saved locally (XDG_DATA_HOME/kalk) and persists across restarts |
| Keyboard-driven | Fast, lightweight TUI — no mouse needed |
- Scale: 0-100 points
- Default passing grade: 55 (customizable per course)
- Rounding: 0.5+ rounds up (so 54.5 → 55 = pass)
- Per-evaluation hints: Shows "Need X+ in this eval to pass" when editing
Each category supports optional advanced rules (Shift+A while editing):
| Rule | Description |
|---|---|
| Drop Lowest | Discard the N worst grades before averaging (0–5) |
| Averaging Method | Arithmetic (default) or Geometric mean |
| Weighted Evaluations | Assign individual percentage weights to evaluations instead of equal averaging |
| Minimum Average | Require a minimum average in this category to pass |
| Min. Per Eval | Minimum grade required on each individual evaluation |
| Min. One Eval | At least one evaluation must reach a minimum grade |
| If Not Met | When minimum isn't reached: final = category avg, require global exam, or fail course |
| Round Category | Round the category average before applying its weight |
Press ? inside the category editor for a full help overlay.
For detailed platform-specific instructions (macOS, Fedora, Debian/Ubuntu, Arch Linux), see the Installation Guide.
- Rust & Cargo (>= 1.85) or Nix
- A Nerd Font is recommended (icons enabled by default — can be disabled in Settings)
git clone https://github.com/yfloress/Kalk.git
cd Kalk
cargo run --releasesudo ./install.sh # system-wide
./install.sh --user # user-local (~/.local)Installs the binary, desktop entry, and icon (binary only on macOS). See The install script.
nix develop
cargo runThe Nix environment includes cargo-audit for security scanning.
Press ? inside the app for the full keybinding reference.
| Tool | Purpose |
|---|---|
| Ratatui | TUI rendering |
| Crossterm | Terminal backend |
| Serde | JSON serialization |
| color-eyre | Error handling |
# Enter dev environment
nix develop
# Run tests
cargo test
# Lint
cargo clippy
# Security audit
cargo auditGNU Affero General Public License v3.0 (AGPL-3.0)
See LICENSE for details.
Built with ❤️, 🦀 Rust and ❄️ Nix
