# Garmin Activity Loader Downloads all Garmin Connect activities (original files, full history on the first run, then new ones every 5 minutes) and hands the FIT files of selected activity types to fit-monitor. Uses the unofficial Garmin Connect login via [garminconnect](https://github.com/cyberjunky/python-garminconnect); Garmin changes its login now and then, so a library update may be needed when it stops working. ## Data layout (`/srv/garmin-activity-loader/data`) | Path | Content | |-----------------------|------------------------------------------------------| | `archive//` | every activity, `__.fit` | | `import//` | hard links to the FIT files of the selected types; mounted into fit-monitor as `/data/garmin` | | `garmin-state.json` | downloaded activities, failed downloads, import progress | | `.garminconnect/` | login tokens | ## Activity type switch `GARMIN_IMPORT_TYPES` in `.env` is a comma-separated list of Garmin type keys. A parent key includes its sub types (`cycling` covers `road_biking`, `virtual_ride`, …). Empty means archive only. List the keys, with `*` marking the currently selected ones: ```sh docker compose run --rm garmin-activity-loader types ``` After changing the switch, restart the container; `import/` is updated on the next cycle. Removing a type only removes its links, activities fit-monitor has already imported stay in the database. ## Setup ```sh cp .env.example .env # fill in credentials and GARMIN_IMPORT_TYPES docker compose run --rm garmin-activity-loader login # asks for the MFA code if needed docker compose up -d ```