aboutsummaryrefslogtreecommitdiff
path: root/bard-emacs-modules/bard-emacs-calendar.el
blob: 679d6272625f2374d2199b94b2b996078295c946 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
(require 'bard-calendar)
(require 'hi-lock)

(setq org-directory "~/Notes/denote/")
;; symlinked file to shorten denote file name in agenda buffers
(setq org-agenda-files (list "~/Notes/denote/todo.org" "~/Notes/denote/study.org"))

;; Calendar
(use-package calendar-mode
  :config
  (setq calendar-holidays (append calendar-holidays russian-holidays))
  :hook
  (calendar-today-visible . calendar-mark-today)
  (calendar-today-visible . calendar-mark-holidays))

;; Org todo keywords - changed to using hl-todo faces fixed by modus/ef themes
(setq org-todo-keywords
      '((sequence "TODO(t)" "EXTRA(e)" "INPROG(i)" "|" "DONE(d)" "KILLED(k)")
        (sequence "MEET(m)" "|" "MET(M)")))

(setq org-todo-keyword-faces
      '(("EXTRA" . (:inherit warning))
        ("INPROG" . (:inherit hi-yellow :weight bold))))

;; Automatically clock in
(add-hook 'org-after-todo-state-change-hook #'bard/auto-clock-in)

;;; Org Agenda

;; clock tables
(setq org-clock-clocktable-default-properties '(:maxlevel 7 :scope agenda)
      org-clock-persist 'history
      org-clock-mode-line-total 'current)
(org-clock-persistence-insinuate)

(use-package org
  :demand t
  :hook
  ((org-clock-out . bard/org-clock-update-mode-line)))

(global-set-key (kbd "M-<f1>") 'bard/choose-agenda)
(global-set-key (kbd "C-c a c") 'bard/choose-agenda)

(global-set-key (kbd "<f1>") 'bard/default-agenda)
(global-set-key (kbd "C-c a a") 'bard/default-agenda)

;; Org Agenda
(setq org-agenda-include-diary t)
(setq org-agenda-custom-commands
      `(("D" "Daily agenda and top priority tasks"
         ((tags-todo "!TODO"
                     ((org-agenda-overriding-header "Unscheduled Tasks \n")
                      (org-agenda-skip-function '(org-agenda-skip-entry-if 'timestamp))))
          (agenda "" ((org-agenda-span 1)
                      (org-agenda-start-day nil)
                      (org-deadline-warning-days 0)
                      ;; (org-scheduled-past-days 0)
                      (org-agenda-day-face-function (lambda (date) 'org-agenda-date))
                      (org-agenda-format-date "%A %-e %B %Y")
                      (org-agenda-overriding-header "Today's agenda \n")))
          (agenda "" ((org-agenda-span 8)
                      (org-calendar-holiday)
                      (org-deadline-warning-days 0)
                      (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
                      (org-agenda-overriding-header "Upcoming this week \n")))))
        ("Y" "Yearly view for all tasks"
         ((agenda "" ((org-agenda-span 365)
                      (org-deadline-warning-days 2)
                      (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
                      (org-agenda-overriding-header "Upcoming this Year\n")))))
        ("M" "Monthly view for all tasks"
         ((agenda "" ((org-agenda-span 31)
                      (org-deadline-warning-days 2)
                      (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
                      (org-agenda-overriding-header "Upcoming this month\n")))))))

(use-package orthodox-christian-new-calendar-holidays
  :ensure t
  :config
  (setq holiday-other-holidays (append holiday-other-holidays orthodox-christian-new-calendar-holidays))

  (setq holiday-bahai-holidays nil
        holiday-christian-holidays nil
        holiday-islamic-holidays nil))

(defun bard/export-agenda-to-file ()
  (interactive)
  (org-eval-in-environment (org-make-parameter-alist
                            '(org-agenda-span
                              'week
                              org-agenda-use-time-grid t
                              org-agenda-remove-tags t
                              org-agenda-window-setup 'nope))
    (let* ((wins (current-window-configuration))
           org-agenda-sticky)
      (save-excursion
        (with-current-buffer
            (get-buffer-create org-agenda-buffer-name)
          (pop-to-buffer (current-buffer))
          (org-agenda nil "a")
          (let ((result (buffer-string)))
            (with-temp-file "~/.cache/agenda" (insert result)))))
      (set-window-configuration wins))))

(provide 'bard-emacs-calendar)