{"id":49575160,"url":"https://github.com/rollecode/obsidian-todoist-day-planner","last_synced_at":"2026-05-12T10:32:00.052Z","repository":{"id":272152829,"uuid":"915677469","full_name":"rollecode/obsidian-todoist-day-planner","owner":"rollecode","description":"Automatically sync Google Calendar events and Todoist tasks as Obsidian daily note with tasks and backlog 🦾","archived":false,"fork":false,"pushed_at":"2025-02-11T12:21:35.000Z","size":271,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-03T16:24:02.380Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rollecode.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-12T14:14:15.000Z","updated_at":"2025-02-11T12:21:39.000Z","dependencies_parsed_at":"2025-01-12T15:26:48.953Z","dependency_job_id":"42d9153a-a36e-44f7-9cee-d30fca0893ca","html_url":"https://github.com/rollecode/obsidian-todoist-day-planner","commit_stats":null,"previous_names":["ronilaukkarinen/obsidian-todoist-day-planner","rollecode/obsidian-todoist-day-planner"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/rollecode/obsidian-todoist-day-planner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fobsidian-todoist-day-planner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fobsidian-todoist-day-planner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fobsidian-todoist-day-planner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fobsidian-todoist-day-planner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rollecode","download_url":"https://codeload.github.com/rollecode/obsidian-todoist-day-planner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollecode%2Fobsidian-todoist-day-planner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32934464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-05-03T16:10:55.153Z","updated_at":"2026-05-12T10:32:00.032Z","avatar_url":"https://github.com/rollecode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Obsidian Todoist Day Planner\n\n![python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) ![Google Cloud](https://img.shields.io/badge/GoogleCloud-%234285F4.svg?style=for-the-badge\u0026logo=google-cloud\u0026logoColor=white) ![Obsidian](https://img.shields.io/badge/Obsidian-%23483699.svg?style=for-the-badge\u0026logo=obsidian\u0026logoColor=white) ![Todoist](https://img.shields.io/badge/todoist-badge?style=for-the-badge\u0026logo=todoist\u0026logoColor=%23ffffff\u0026color=%23E44332)\n\n## Automatically sync Google Calendar events and Todoist tasks as Obsidian daily note with tasks and backlog 🦾\n\n\u003e [!NOTE] \n\u003e **Please note!** This project uses hardcoded Finnish language strings and is 100% meant for my personal use. The prompt is in Finnish, the tasks are in Finnish, and the output is in Finnish. If you want to use this, you need to modify the script to your own language and needs.\n\n## Why does this project exist?\n\nI already have [personal-assistant-cli](https://github.com/ronilaukkarinen/personal-assistant-cli), but its main focus was AI and Todoist, not really Obsidian.\n\n- This project is from Obsidian's point of view\n- I wanted to use Python instead of bash\n\n## Features\n\n- Creates daily notes in Obsidian with proper Finnish date formatting\n- Imports today's tasks from Todoist (both active and completed)\n- Maintains priority tags (p1-p4) from Todoist\n- Shows task completion status with two-way sync:\n  - Tasks completed in Todoist are marked complete in Obsidian\n  - Tasks completed in Obsidian are marked complete in Todoist\n- Preserves task times from Todoist\n- Supports time rescheduling from Obsidian back to Todoist\n- Shows task counts with proper Finnish pluralization\n- Maintains task hierarchy (parent/child relationships)\n- Preserves task durations when syncing times\n- Supports markdown links and wiki-style links\n- Handles HTML tags in task content\n\n## Requirements\n\n- Python 3.12.1 or newer\n- Obsidian\n- Todoist\n- Debian-based Linux\n\n## Installation\n\n### Option 1: Using pyenv (recommended)\n\n1. Install required dependencies first:\n```bash\nsudo apt update\nsudo apt install -y make build-essential libssl-dev zlib1g-dev \\\nlibbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \\\nlibncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \\\nlibffi-dev liblzma-dev\n```\n\n2. Install pyenv:\n```bash\ncurl https://pyenv.run | bash\n```\n\n3. Add these to your shell configuration (~/.bashrc):\n```bash\n# Add these lines at the end of ~/.bashrc:\nexport PYENV_ROOT=\"$HOME/.pyenv\"\n[[ -d $PYENV_ROOT/bin ]] \u0026\u0026 export PATH=\"$PYENV_ROOT/bin:$PATH\"\neval \"$(pyenv init -)\"\n```\n\n4. Restart your shell to apply changes:\n```bash\nexec \"$SHELL\"\n```\n\n5. Install Python 3.12.1 (or newer) with pyenv:\n```bash\npyenv install 3.12.1\n```\n\n6. Set up the project:\n```bash\ncd obsidian-todoist-day-planner\npyenv local 3.12.1\npython -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n```\n\n7. Create and configure your .env file:\n```bash\ncp .env.example .env\nnano .env  # Edit with your settings\n```\n\n### Option 2: System Python with venv\n\n1. Install Python 3.12 and venv:\n```bash\nsudo apt install python3-full python3-pip python3-venv\n```\n\n2. Create a virtual environment:\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\n```\n\n3. Install dependencies:\n```bash\npip install -r requirements.txt\n```\n\n## Usage\n\nActivate the virtual environment and run the script:\n```bash\nsource .venv/bin/activate\npython create-daily-note.py\n```\n\nThis will:\n- Create a daily note in your specified Obsidian folder\n- Import all today's tasks from Todoist\n- Format them with proper checkboxes and priority tags\n- Include task times where available, for [Daily Planner](https://github.com/ivan-lednev/obsidian-day-planner)\n- Include backlog of tasks from previous days\n\n## How to make p1 and p2 tags look like diamonds\n\n- Enable day-planner.css in Custom CSS settings\n- Use Text Snippets plugin, make it use `shift + tab` shortcut and just type `p1 + shift + tab` or `p2 + shift + tab` to get the diamond icon\n\n## Automation\n\n### Recommended sync interval\n\nThe recommended sync interval is 5 minutes. This ensures your Obsidian notes stay up-to-date with your Todoist tasks without making too many API calls.\n\n### Setting up automatic sync with cron\n\n1. Make sure your virtual environment is set up correctly first.\n\n2. Create a shell script to run the Python script (e.g., `sync-tasks.sh`):\n```bash\n#!/bin/bash\ncd /path/to/obsidian-todoist-day-planner\nsource .venv/bin/activate\npython create-daily-note.py \u003e\u003e /tmp/todoist-sync.log 2\u003e\u00261\n```\n\n3. Make the script executable:\n```bash\nchmod +x sync-tasks.sh\n```\n\n4. Open your crontab:\n```bash\ncrontab -e\n```\n\n5. Add this line to run the script every 5 minutes:\n```bash\n*/5 * * * * /path/to/sync-tasks.sh\n```\n\n### Troubleshooting cron\n\nIf your cron job isn't working:\n\n1. Make sure all paths in the shell script are absolute paths\n2. Check the cron logs:\n```bash\ngrep CRON /var/log/syslog\n```\n\n3. Test the script manually:\n```bash\n./sync-tasks.sh\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollecode%2Fobsidian-todoist-day-planner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frollecode%2Fobsidian-todoist-day-planner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollecode%2Fobsidian-todoist-day-planner/lists"}