{"id":30672781,"url":"https://github.com/developerpaul123/agenda","last_synced_at":"2025-10-06T07:20:54.482Z","repository":{"id":311449246,"uuid":"1038242907","full_name":"DeveloperPaul123/agenda","owner":"DeveloperPaul123","description":"See your day at a glance from the terminal.","archived":false,"fork":false,"pushed_at":"2025-08-24T14:12:41.000Z","size":48,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-24T19:31:18.785Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DeveloperPaul123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-14T21:19:48.000Z","updated_at":"2025-08-24T18:16:38.000Z","dependencies_parsed_at":"2025-08-24T19:41:51.003Z","dependency_job_id":null,"html_url":"https://github.com/DeveloperPaul123/agenda","commit_stats":null,"previous_names":["developerpaul123/agenda"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/DeveloperPaul123/agenda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeveloperPaul123%2Fagenda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeveloperPaul123%2Fagenda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeveloperPaul123%2Fagenda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeveloperPaul123%2Fagenda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DeveloperPaul123","download_url":"https://codeload.github.com/DeveloperPaul123/agenda/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeveloperPaul123%2Fagenda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273077227,"owners_count":25041358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-01T05:38:44.251Z","updated_at":"2025-10-06T07:20:49.452Z","avatar_url":"https://github.com/DeveloperPaul123.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Agenda CLI\n\nA command-line tool that pulls calendar events from various calendar providers and formats them for easy copy-pasting into markdown documents.\n\n## Why?\n\nI currently use [Obsidian](https://obsidian.md) to take notes. Obsidian uses markdown files, and part of the notes I take include a section for my meetings each day. In a [blog post](https://jnsgr.uk/2024/07/how-i-computer-in-2024/) by Jon Seager, he mentions:\n\n\u003e The agenda and the links are automatically generated using a small Go application I wrote - this application scrapes my Google Calendar, and according to some rules and the knowledge it has of my vault, generates the Markdown for the agenda and copies it to the clipboard. Each day, I sit down and type agenda at the command line, then paste into Obsidian.\n\nI really liked this idea, so I decided to create my own version of this tool. It is written in Go and can be extended to support multiple calendar providers.\n\n## Features\n\n- Support for multiple calendar providers (currently Morgen.so, extensible for others)\n- Configurable time formatting\n- Customizable event templates using Go templates\n- Configuration via YAML file\n- Environment variable support for API keys\n- Clean markdown output\n\n## Installation\n\n### Build from Source\n\n1. Clone or download the source code\n2. Install [Go](https://golang.org/dl/) if you haven't already\n\n- You can also optionally install [just](https://github.com/casey/just)\n\n3. Build the application: `just build` or `go build`\n4. Install using `go install`\n\n## Quick Start\n\n1. Initialize a default configuration:\n\n   ```bash\n   ./agenda init\n   ```\n\n2. Set your API key in the environment:\n\n   ```bash\n   export MORGEN_API_KEY=\"your-morgen-api-key\"\n   ```\n\n3. Run the agenda:\n   ```bash\n   ./agenda\n   ```\n\n## Configuration\n\nThe configuration file is located at `~/.config/agenda/config.yaml` by default.\n\n### Example Configuration\n\n```yaml\nprovider: morgen\ntime_format: \"15:04\"\nevent_template: \"- {{.StartTimeFormatted}}-{{.EndTimeFormatted}}: {{.Title}}\"\n\nproviders:\n  morgen:\n    base_url: \"https://api.morgen.so/v1\"\n    headers:\n      Authorization: \"Bearer {API_KEY}\"\n      Content-Type: \"application/json\"\n    env_api_key: \"MORGEN_API_KEY\"\n    calendars_to_ignore:\n      - \"Work\"\n      - \"Extra Calendar\"\n```\n\n### Configuration Options\n\n| Option           | Type   | Description                                | Example                                                       |\n| ---------------- | ------ | ------------------------------------------ | ------------------------------------------------------------- |\n| `provider`       | string | Which calendar provider to use             | \"morgen\"                                                      |\n| `time_format`    | string | Go time format string for displaying times | \"15:04\", \"3:04 PM\"                                            |\n| `event_template` | string | Go template string for formatting events   | \"- {{.StartTimeFormatted}}-{{.EndTimeFormatted}}: {{.Title}}\" |\n\n#### Event Template Fields\n\n| Field                     | Description                       |\n| ------------------------- | --------------------------------- |\n| `{{.StartTimeFormatted}}` | Formatted start time of the event |\n| `{{.EndTimeFormatted}}`   | Formatted end time of the event   |\n| `{{.Title}}`              | Title of the event                |\n| `{{.Duration}}`           | Duration of the event             |\n| `{{.Description}}`        | Description of the event          |\n\n##### Example Templates\n\n```yaml\n# Simple format\nevent_template: \"- {{.StartTimeFormatted}}: {{.Title}}\"\n\n# Detailed format with location\nevent_template: \"- {{.StartTimeFormatted}}-{{.EndTimeFormatted}}: **{{.Title}}**\"\n\n# With duration\nevent_template: \"- {{.StartTimeFormatted}} ({{.Duration}}): {{.Title}}\"\n```\n\n### Provider Configuration Options\n\n| Field                 | Type              | Description                                                                  |\n| --------------------- | ----------------- | ---------------------------------------------------------------------------- |\n| `base_url`            | string            | Base URL for the API                                                         |\n| `headers`             | map[string]string | HTTP headers to include in requests (e.g., for authentication with API keys) |\n| `env_api_key`         | string            | Environment variable name for the API key                                    |\n| `calendars_to_ignore` | list              | List of calendar names to ignore when fetching events                        |\n\n## Command Line Options\n\n| Option                     | Description                                                    |\n| -------------------------- | -------------------------------------------------------------- |\n| `-config PATH`             | Specify a custom configuration file path                       |\n| `-provider NAME`           | Override the provider from config                              |\n| `-time-format FORMAT`      | Override the time format from config                           |\n| `-event-template TEMPLATE` | Override the event template from config                        |\n| `-verbose`                 | Enable verbose logging                                         |\n| `-date DATE`               | Specify a date to fetch events for. Use the format YYYY-MM-DD. |\n\n## Environment Variables\n\n- `MORGEN_API_KEY` - Your Morgen.so API key\n\n## Adding New Providers\n\nTo add support for a new calendar provider:\n\n1. Implement the `CalendarProvider` interface:\n\n   ```go\n   type CalendarProvider interface {\n       GetTodaysEvents() ([]CalendarEvent, error)\n       GetName() string\n   }\n   ```\n\n2. Add the provider to the `CreateProvider` function in the `ProviderFactory`\n3. Add the provider configuration to the default config\n\n## Output Example\n\n```markdown\n- 09:00-10:00 Team Standup\n- 10:30-11:30 Project Review\n- 14:00-15:00 Client Call\n- 16:00-16:30 1:1 with Manager\n```\n\n## Provider Specific Setup\n\n### Morgen.so\n\n1. Sign up for an API key at [https://platform.morgen.so](https://platform.morgen.so/)\n2. Go to `Developers API`\n3. Generate and copy your API key\n4. Set it as the value for the `MORGEN_API_KEY` environment variable\n\n## License\n\nThe project is licensed under the MIT license. See [LICENSE](LICENSE) for more details.\n\n## Author\n\n| [\u003cimg src=\"https://avatars0.githubusercontent.com/u/6591180?s=460\u0026v=4\" width=\"100\"\u003e\u003cbr\u003e\u003csub\u003e@DeveloperPaul123\u003c/sub\u003e](https://github.com/DeveloperPaul123) |\n| :-------------------------------------------------------------------------------------------------------------------------------------------------------: |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloperpaul123%2Fagenda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeveloperpaul123%2Fagenda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloperpaul123%2Fagenda/lists"}