# Rollover Plus Keep unfinished tasks moving without copying and pasting them between daily notes. Rollover Plus gives you four rollover commands: - **Rollover to today:** Bring unfinished tasks from your most recent earlier daily note into today's note, or choose the last seven daily notes in settings. - **Rollover to-dos from the past week:** Bring unfinished tasks from the seven most recent earlier daily notes into today. - **Rollover to tomorrow:** Send every unfinished task in today's note to tomorrow's note. - **Send selection to tomorrow:** Send the selected task or tasks from any Markdown note to tomorrow's note, from the command palette, a hotkey, or the editor's right-click menu. The plugin uses the folder, filename format, and template from Obsidian's Daily Notes plugin or the daily-note settings in Periodic Notes. An optional folder override is available in Rollover Plus settings. ## Automatic rollover Enable **Automatic rollover on daily note open** in settings to bring unfinished tasks into today's note when you open it, including when Obsidian starts with that note already open. The toggle is off by default unless an existing automatic-rollover preference was saved. Automatic rollover checks **yesterday's calendar date only**, even when **Rollover to today source** is set to **Past week**. It looks up that note directly without scanning the daily-note folder. If yesterday's note is missing or has no matching unfinished tasks, nothing happens. It never falls back to an older note or creates today's note. It uses your heading, status, task-child, cleanup, and move/copy settings, and supports **Undo last rollover**. After finding tasks and completing a rollover, it saves that day's result so reopening the note or restarting Obsidian will not copy tasks again. A partial move is also remembered if today's note was already saved. Undo does not re-enable the automatic run for that day; use a manual command if you want to roll over again. ## Rollover commands ### Rollover to tomorrow Moves or copies every unfinished task from today's daily note into tomorrow's daily note. Tomorrow's note is created through the existing Daily Notes or Periodic Notes pathway only after tasks have been found. Leading `tomorrow` and `tmrw` labels are removed from the rolled task text. If a **Roll over from heading** is selected, only unfinished tasks inside that section are included. ### Rollover to today Moves or copies every unfinished task from the closest earlier daily note into today's existing daily note by default. The source can be yesterday or an older note if there are gaps. Use the **Rollover to today source** dropdown to choose **Yesterday** (the default) or **Past week**. Past week makes this command collect from the seven most recent earlier daily notes and disables the separate past-week command. Switching back to Yesterday makes the separate command available again. Create today's daily note before running this command. This matches the manual rollover behavior from the original Rollover Daily Todos plugin. If a **Roll over from heading** is selected, only unfinished tasks inside that section of the earlier note are included. ### Rollover to-dos from the past week Collects unfinished tasks from the **seven most recent daily notes before today**, ordered newest first. Missing dates do not count toward the seven: notes from earlier weeks are included when needed. If fewer than seven earlier notes exist, it uses those available. Notes with no matching unfinished tasks still count toward the seven. Today and future notes are excluded. This uses the same source heading, destination heading, status markers, child-task handling, empty-task cleanup, and move/copy settings as regular rollover to today. Identical task text remains separate, just as it does in regular rollover. Today's note must already exist. All collected tasks are saved to today in one write before any source tasks are removed. **Undo last rollover** restores the whole operation, including completed writes if a later source write fails. A source edited during the rollover is kept, and a notice explains why. The separate command is available when **Rollover to today source** is set to **Yesterday**. Choose **Past week** to use the same behavior through your usual Rollover to today command and hotkey instead. ### Send selection to tomorrow Put the cursor anywhere on one unfinished task, or select any part of one or more task lines, then run **Send selection to tomorrow** from the command palette, a hotkey, or the editor's right-click menu. This was previously named **Rollover current selection to tomorrow**; its command ID is unchanged, so existing Rollover Plus hotkeys still work. Rollover Plus moves each complete task line into tomorrow's daily note, so it never leaves an empty checkbox shell behind. Every task line the selection touches is moved, including lines that are only partly selected. A selection that starts or ends in the middle of a line still includes that whole task. This command: - works from any Markdown note; - moves only the exact selected tasks when identical task text appears elsewhere; - includes indented child lines when **Roll over task children** is enabled, even when you select the parent and its children together; - always removes the selected source tasks after the destination is saved, even when bulk rollover is set to copy; - keeps the source tasks if the editor changes while tomorrow's note is being saved. It also works inside Journal View, including from the command palette. Pending Journal View edits are saved before anything moves, and **Undo last rollover** restores the whole note, including frontmatter and a hidden daily-note title. ## A quick safety net ### Undo last rollover Restores every file changed by the last rollover. One undo is kept in memory for two minutes. Undo history is cleared when Obsidian closes. ## Placement and cleanup Rollover Plus scans the daily note template configured in Daily Notes or Periodic Notes and offers its Markdown headings in the settings dropdowns. For bulk rollover commands, **Roll over from heading** limits collection to that heading's full section, including child headings. If it is set to **All headings**, unfinished tasks are collected from the whole source note. A selected heading that is missing from a source note does not fall back to tasks elsewhere. The current-selection command is never limited by this setting. For placement, Rollover Plus prefers **Roll over to heading**. If it is missing, the first Markdown heading containing `task` or `tasks` is used, regardless of heading level, capitalization, emoji, or punctuation. If no task heading exists, tasks are added to the end of the destination note. An empty task placeholder at the insertion point is replaced. When moving tasks empties a matching source section, Rollover Plus removes that affected heading and its blank scaffold. Completed tasks, prose, child headings, and other real content keep the heading in place. Task and heading detection ignores fenced code blocks and frontmatter. The destination is always saved before source text is removed. If the source write fails or the editor changes during a selection rollover, the source stays intact. ## Settings - **Automatic rollover on daily note open:** Automatically roll over from yesterday when opening today's daily note. Always checks only yesterday, independently of the manual source dropdown. Off by default. - **Rollover to today source:** Choose Yesterday (the most recent earlier note) or Past week (the seven most recent earlier notes). Past week disables the separate past-week command. - **Daily note folder:** Optional folder override. Leave it blank to use Daily Notes or Periodic Notes. - **Roll over from heading:** Optional source section for bulk rollover commands. Choose **All headings** to collect unfinished tasks from the whole note. - **Roll over to heading:** Preferred destination heading, with automatic Task heading detection as fallback. - **Delete tasks from source note:** Move tasks for bulk rollover commands. Disable it to copy instead. - **Remove empty tasks in rollover:** Skip empty task boxes and clean them from a source being moved. - **Roll over task children:** Include indented Markdown beneath each unfinished task. - **Done status markers:** Checkbox characters treated as complete. The default is `xX-`. ## Requirements Enable either Obsidian's core Daily Notes plugin or Periodic Notes with daily notes enabled. ## Installation note Rollover Plus uses the plugin ID `rollover-plus`, matching its Community Directory URL. Obsidian treats a new plugin ID as a new installation, so settings and hotkeys from an earlier installation need to be set again. ## Development checks Run `npm ci`, then `npm run check` to run syntax validation, the official Obsidian ESLint rules (including manifest validation), and the regression tests. Testing uses a simulated vault and editor; it does not control the Obsidian app. The plugin runs directly from `main.js` without a build step or bundled runtime dependencies. GitHub releases include `main.js` and `manifest.json` as separate assets. No stylesheet is needed. ## Attribution Rollover Plus is based on [Rollover Daily Todos by Lukas Mölschl](https://github.com/lumoe/obsidian-rollover-daily-todos), originally created by Matthew Sessions. The upstream project is available under the MIT License. See [LICENSE](LICENSE).