{"id":29087826,"url":"https://github.com/oschrenk/plan.swift","last_synced_at":"2025-12-15T01:00:47.561Z","repository":{"id":252315810,"uuid":"835730764","full_name":"oschrenk/plan.swift","owner":"oschrenk","description":"Companion cli for macOS Calendar.app","archived":false,"fork":false,"pushed_at":"2025-04-27T09:30:05.000Z","size":275,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-27T10:24:34.582Z","etag":null,"topics":["calendar","ical","macos"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/oschrenk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2024-07-30T12:22:38.000Z","updated_at":"2025-04-27T09:30:09.000Z","dependencies_parsed_at":"2025-02-17T03:25:07.952Z","dependency_job_id":"1e522cc4-7f16-4de4-b277-9f9c46d5bbc1","html_url":"https://github.com/oschrenk/plan.swift","commit_stats":null,"previous_names":["oschrenk/plan.swift"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/oschrenk/plan.swift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oschrenk%2Fplan.swift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oschrenk%2Fplan.swift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oschrenk%2Fplan.swift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oschrenk%2Fplan.swift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oschrenk","download_url":"https://codeload.github.com/oschrenk/plan.swift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oschrenk%2Fplan.swift/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262362105,"owners_count":23299127,"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","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":["calendar","ical","macos"],"created_at":"2025-06-28T02:07:00.444Z","updated_at":"2025-12-15T01:00:42.467Z","avatar_url":"https://github.com/oschrenk.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\" width=\"100%\"\u003e\n  \u003cimg alt=\"Plan Icon\" width=\"128px\" src=\"./Assets/icon.png\"\u003e\n  \u003cbr\u003e\n  \u003cp\u003emacOS terminal tool to fetch calendar events from `Calendar.app`\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Features\n\n- JSON by default\n- integrated templating engine\n- for emoji lovers ❤️\n  - separate leading emojis from event title\n  - add emojis based on title\n- start and end time in relative and absolute terms\n- `ical` URL that can be used to show the event in Calendar.app\n- parse meeting URLs from notes (Google, Zoom, Teams)\n- natural language parser\n\n## Examples\n\n### JSON\n\nExample output in JSON\n\n`plan next`\n\n```json\n[\n  {\n    \"id\": \"9675DF46-4040-4762-A70B-6CD65DC01C36:CC525CBD-F5A3-4EBB-970E-7A0EC2D2370D\",\n    \"calendar\": {\n      \"id\": \"C5AE5024-78BD-4965-BB0D-0E43E1024368\",\n      \"color\": \"#E195DA\",\n      \"label\": \"Some calendar\",\n      \"type\": \"caldav\",\n      \"source\": \"Personal\"\n    },\n    \"title\": {\n      \"full\": \"🏆 Release plan\",\n      \"label\": \"Release plan\",\n      \"icon\": \"🏆\"\n    },\n    \"schedule\": {\n      \"start\": {\n        \"at\": \"2024-09-02T18:00:00+02:00\",\n        \"in\": 30\n      },\n      \"end\": {\n        \"at\": \"2024-09-02T19:00:00+02:00\",\n        \"in\": 90\n      },\n      \"all_day\": false,\n      \"duration\": 60\n    },\n    \"services\": [\n      { \"ical\": \"ical://ekevent/9675DF46-4040-4762-A70B-6CD65DC01C36?method=show\u0026options=more\" }\n    ],\n    \"tags\": [ \"timeblock\" ]\n  }\n]\n```\n\n### markdown\n\n`plan today --template-path path/to/template.md`\n\nWith `template.md`:\n\n```markdown\n{% for e in events %}- {{ e.schedule.start.at|format:\"HH:mm\"}} - {{ e.schedule.end.at|format:\"HH:mm\"}} [{{ e.title.full }}]({{e.services[\"ical\"]}}) #{{ e.calendar.label|lowercase }}\n{% endfor %}\n```\n\nYou get\n\n```markdown\n- 12:15 - 12:45 [🥗 Lunch](ical://ekevent/CC23ADF2-9303-42C4-A854-BE12F2081E16?method=show\u0026options=more) #private\n- 13:00 - 14:00 [🕐 Meeting](ical://ekevent/59856934-5D89-45A2-9C11-0E3877F1B082?method=show\u0026options=more) #work\n```\n\nFor more details, see [Docs/Templating](Docs/Templating.md).\n\n## Usage\n\n### Commands\n\nExample commands (use `plan --help` for full usage)\n\n- `plan calendars` List available calendars\n- `plan next` Returns the current or next event within the next hour\n- `plan today` Returns all events for today\n- `plan on [expression]` Return all events on the given days e.g. `plan on \"next monday\"`\n\n## Use cases\n\n`plan` can help with your productivity setup.\n\nIt plays very well with Sketchybar and Obsidian and with the default output format being JSON, and the templating engine, you can easily make `plan` fit your individual needs.\n\n### Sketchybar\n\nYou can use it with [Sketchybar](https://felixkratz.github.io/SketchyBar/) to show the next event. For more details, read [Docs/Sketchybar](./Docs/External/Sketchybar.md)\n\n\n### Obsidian\n\nYou can use it with [Obsidian](https://obsidian.md/) to inject today's schedule into your notes. For more details, consult [Docs/Obsidian](./Docs/External/Obsidian.md) and [Docs/Templating](./Docs/Templating.md).\n\n## Templating\n\nFor more details, consult [Docs/Templating](Docs/Templating.md).\n\n## Installation\n\n**Via GitHub**\n\n- installs to `$HOME/.local/bin/plan` (make sure it's in `$PATH`)\n\n```\ngit clone git@github.com:oschrenk/plan.swift.git\ncd plan.swift\ntask install\n```\n\n**Via Homebrew**\n\n```\nbrew tap oschrenk/made git@github.com:oschrenk/homebrew-made\nbrew install oschrenk/made/plan\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foschrenk%2Fplan.swift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foschrenk%2Fplan.swift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foschrenk%2Fplan.swift/lists"}