[![tests](https://github.com/MalteT/mensa/actions/workflows/rust.yml/badge.svg)](https://github.com/MalteT/mensa/actions/workflows/rust.yml)
# mensa
CLI tool to query the menu of canteens contained in the
[OpenMensa](https://openmensa.org) database.
## Features
- [X] Runs on Linux, macOS and Windows.
- [X] Custom filters and favourites using CLI flags or the
optional configuration file.
- [X] List canteens close to you based on GeoIP.
- [X] All request are cached locally.
- [X] Fuzzy date parsing based on
[date_time_parser](https://lib.rs/crates/date_time_parser).
- [X] List your favourite meals in canteens close to your location.
- [X] JSON Output
![example](https://raw.githubusercontent.com/MalteT/mensa/main/static/example-collection.png)
## Installation
### Cargo
**Only nightly Rust supported at the moment**.
```console
$ cargo install --git https://github.com/MalteT/mensa
```
### Nix
This is a [Nix Flake](https://nixos.wiki/wiki/Flakes), add it
to your configuration or just test the application with:
```console
$ nix run github:MalteT/mensa
```
## Usage
See `mensa --help`.
- `mensa meals` will show meals served today for the default canteen
mentioned in the configuration.
If no such configuration exists, try `mensa meals --id 63`.
You can find the id for your canteen using
- `mensa canteens` lists canteens near you based on your current
IP in a default radius of 10km.
- `mensa tags` will list the currently known meal tags like "**12** Nuts".
### Examples
####
Meals on monday (Click me!)
You can omit the `-i/--id` if you've configured a default id in the config.toml.
```console
$ mensa meals -d mon -i 63
Leipzig, Mensa am Park
┊
┊ ╭───╴Bohnengemüse
┊ ├─╴Gemüsebeilage 🌱
┊ ╰╴( 0.55€ )
...
```
Canteens near your location (Click me!)
```console
$ mensa canteens
70 Leipzig, Cafeteria Dittrichring
Dittrichring 21, 04109 Leipzig
63 Leipzig, Mensa am Park
Universitätsstraße 5, 04109 Leipzig
...
```
All currently known tags (Click me!)
```console
$ mensa tags
0 Acidifier
Contains artificial acidifier
1 Alcohol
Contains alcohol
2 Antioxidant
Contains an antioxidant
...
```
Meals of canteens close to your location next sunday (Click me!)
```console
$ mensa meals close --date sun
Leipzig, Cafeteria Dittrichring
┊
┊ ╭───╴Vegetarisch gefüllte Zucchini
┊ ├─╴Vegetarisches Gericht 🧀
┊ ├╴Rucola-Kartoffelpüree
┊ ├╴Tomaten-Ratatouille-Soße
┊ ╰╴( 2.65€ ) 2 11 12 19
Leipzig, Mensa am Park
┊
┊ ╭───╴Apfelrotkohl
┊ ├─╴Gemüsebeilage 🌱
┊ ╰╴( 0.55€ ) 2
...
```
Count OpenMensa's canteens (Click me!)
```console
$ mensa canteens --all --json | jq '.[].id' | wc -l
704
```
## Configuration *(Optional)*
See [config.toml](config.toml) for an example. Copy the file to:
- `$XDG_CONFIG_DIR/mensa/config.toml` on **Linux**,
- `$HOME/Library/Application Support/mensa/config.toml` on **macOS**,
- `{FOLDERID_RoamingAppData}\mensa\config.toml` on **Windows**
License: MIT