org-hyperscheduler icon indicating copy to clipboard operation
org-hyperscheduler copied to clipboard

org-hyperscheduler is an Emacs package that helps you organize your day.

[[https://app.circleci.com/pipelines/github/dmitrym0/org-hyperscheduler?branch=main&filter=all][https://img.shields.io/circleci/build/gh/dmitrym0/org-hyperscheduler.svg]] [[https://github.com/dmitrym0/org-hyperscheduler/releases][file:https://www.shields.io/github/v/release/dmitrym0/org-hyperscheduler.svg?display_name=tag]]

  • org-hyperscheduler

** What is Hyperscheduling #+begin_quote Hyperscheduling is the idea of fully planning your day using a calendar. Every minute of the day is assigned to some task using a calendar. #+end_quote

** Table of Contents :TOC:

  • [[#org-hyperscheduler][org-hyperscheduler]]
    • [[#what-is-hyperscheduling][What is Hyperscheduling]]
    • [[#what-does-org-hyperscheduler-do][What does org-hyperscheduler do?]]
    • [[#planning-a-day][Planning A Day]]
    • [[#screen-cast][Screen Cast]]
    • [[#installation][Installation]]
    • [[#configuration][Configuration]]
    • [[#development][Development]]

** What does org-hyperscheduler do?

org-hyperscheduler presents a web UI that allows agenda entries to be visualized and moved around easily.

Here's a typical agenda (~C-c a a~):

[[file:images/org-agenda.png]]

and here is how it's visualized in org-hyperscheduler:

[[file:images/org-hs-ui.png]]

  • blue entries are coming from an external calendar (such as [[https://github.com/kidd/org-gcal.el][org-gcal]]).
  • purple entries are part of standard org-agenda.

The user is free to modify entries or move them around provided =org-hyperschedule-readonly-mode= is disabled.

** Planning A Day

When planning a day, it's easy to start with a list of tasks:

[[file:images/org-agenda-2.png]]

and then visualize them to ensure that capacity is available:

[[file:images/org-hs-ui-2.png]]

** Screen Cast

Real quick demo of what the package does:

[[https://www.youtube.com/watch?v=8vhhIYIS0zY][https://img.youtube.com/vi/8vhhIYIS0zY/0.jpg]]

** Installation

org-hyperschedule is not currently available in MELPA. Once the package matures, it will be added.

For now you can either download the source and install it manually or with ~use-package~ and [[https://github.com/raxod502/straight.el][straight.el]]:

#+begin_src elisp (use-package org-hyperscheduler :straight ( :repo "dmitrym0/org-hyperscheduler" :host github :type git :files ("*"))) #+end_src

You can then invoke ~M-x org-hyperscheduler-open~ to invoke the web view.

** Configuration

Use ~M-x customize-group org-hyperscheduler~ to configure this module.

*** Read only mode

org-hyperscheduler is able to update entries in Emacs when using the web UI. To suppor this functionality, org-hyperscheduler must create IDs for each scheduled entry. If you are not ok with org-hyperscheduler modifying your data, keep ~org-hyperscheduler-readonly-mode~ turned on. In this mode you can visualize your agenda, but cannot make any changes in web UI.

*** Hiding calendar entries from org-roam

org-roam treats all entries with an ~:ID:~ property as roam nodes. This is not what I wanted. org-roam excludes all entries with the G

See ~org-hyperscheduler-exclude-from-org-roam~ through ~M-x customize-group org-hyperscheduler~ or

~(setq org-hyperscheduler-exclude-from-org-roam t)~

Note: Read only mode must be disabled for this to take effect.

** Development

*** Running tests

  1. Install [[https://github.com/cask/cask][cask]] (~brew install cask~).
  2. Run ~cask~ to install dependencies.
  3. Run ~cask exec buttercup -L .~

*** See also **** org-roam-ui

org-hyperscheduler was heavily inspired by [[https://github.com/org-roam/org-roam-ui][org-roam-ui]]. If you're using [[https://github.com/org-roam/org-roam-ui][org-roam]] it's worth adding org-roam-ui.

**** calfw

[[https://github.com/kiwanami/emacs-calfw][calfw]] is a (textmode) calendaring framwork for emacs. I found it somewhat late into the development of org-hyperscheduler. If I found it earlier, I may have skipepd developing this.