;;; ycp-time.el -- My config for time related -*- lexical-binding: t -*-

;; Copyright (C) 2023 Free Software Foundation.

;; Author: Yuchen Pei <id@ypei.org>
;; Package-Requires: ((emacs "28.2"))

;; This file is part of dotfiles.

;; dotfiles is free software: you can redistribute it and/or modify it under
;; the terms of the GNU Affero General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; dotfiles is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General
;; Public License for more details.

;; You should have received a copy of the GNU Affero General Public
;; License along with dotfiles.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; My config for time related. Covers date, time, calendar, holidays etc.

;;; Code:



(my-configure
  (my-setq-from-local calendar-latitude calendar-longitude calendar-location-name)
  (setq calendar-mark-holidays-flag t)

;;;;; World clock (M-x world-clock)
  (setq display-time-world-list t)
  (setq zoneinfo-style-world-list ; timedatectl list-timezones
        '(("Pacific/Honolulu" "Honolulu")
          ("America/Los_Angeles" "Los Angeles")
          ("America/Chicago" "Chicago")
          ("America/New_York" "Boston")
          ("UTC" "UTC")
          ("Europe/London" "Coventry")
          ("Europe/Berlin" "Berlin")
          ("Africa/Khartoum" "Khartoum")
          ("Europe/Helsinki" "Helsinki")
          ("Asia/Dubai" "Dubai")
          ("Asia/Yekaterinburg" "Yekaterinburg")
          ("Asia/Calcutta" "Delhi")
          ("Asia/Shanghai" "Shanghai")
          ("Pacific/Auckland" "Auckland")))

  ;; All of the following variables are for Emacs 28
  (require 'time)
  (setq world-clock-list t)
  (setq world-clock-time-format "%R %z  %A %d %B")
  (setq world-clock-buffer-name "*world-clock*") ; Placement handled by `display-buffer-alist'
  (setq world-clock-timer-enable t)
  (setq world-clock-timer-second 60)

  ;; Holidays
  (setq holiday-other-holidays
        '(
	        (holiday-float 4 1 3 "Sechseläuten (Burning of Böögg)")
	        (holiday-fixed 3 8 "Women's Day")
          (holiday-chinese 4 8 "Buddha's birthday (East Asia)")
	        (holiday-fixed 4 26 "World Intellectual Pooperty Day")
	        (holiday-fixed 4 30 "Walpurgis Night")
	        (holiday-fixed 5 1  "May Day")
	        (holiday-fixed 5 12 "International Nurses Day")
	        (holiday-fixed 6 4 "International Nothing Happened On This Day")
	        (holiday-float 6 6 1 "Midsommar" 20)
	        (holiday-float 9 6 3 "Software Freedom Day")
	        (holiday-islamic 10 1 "Hari Raya Puasa")
	        (holiday-fixed 12 13 "St Lucia Day")
          (holiday-easter-etc -47 "Fat Tuesday / Fettisdagen / Pancake Tuesday / Mardi Gras")
          (holiday-easter-etc 39 "Ascension Day")
          (holiday-easter-etc 60 "Corpus Christi")
	        )
        calendar-chinese-all-holidays-flag t
        holiday-local-holidays
        '(
	        (holiday-fixed 1 26 "Australia Day (Vic holiday)")
	        (holiday-float 3 1 2 "Labour Day (Vic holiday)")
	        (holiday-fixed 4 25 "Anzac Day (Vic holiday)")
	        (holiday-float 6 1 2 "Monarch's Birthday (Vic oliday)")
	        (holiday-fixed 6 30 "End of financial year")
	        (holiday-float 9 5 -1 "(Possibly) Friday before the AFL Grand Final (Vic holiday)")
	        (holiday-float 10 5 1 "(Possibly) Friday before the AFL Grand Final (Vic holiday)")
	        (holiday-float 11 2 1 "Melbourne Cup (Vic holiday)")
	        )
        holiday-general-holidays
        '(
	        (holiday-fixed 1 1 "New Year's Day")
	        (holiday-fixed 2 14 "Valentine's Day")
	        (holiday-fixed 3 17 "St. Patrick's Day")
	        (holiday-fixed 4 1 "April Fools' Day")
	        (holiday-float 5 0 2 "Mother's Day")
	        (holiday-float 6 0 3 "Father's Day")
	        (holiday-fixed 7 4 "US Independence Day")
	        (holiday-fixed 10 31 "Halloween")
	        (holiday-float 11 4 4 "Thanksgiving")
	        )
        holiday-bahai-holidays
        '()
        holiday-hebrew-holidays
        '()
        )
  (setq calendar-holidays
        (append holiday-general-holidays holiday-local-holidays
                holiday-other-holidays holiday-christian-holidays
                holiday-hebrew-holidays holiday-islamic-holidays
                holiday-bahai-holidays holiday-oriental-holidays
                holiday-solar-holidays
                (my-get-from-local my-holiday-personal-holidays)))
  (put 'list-timers 'disabled nil)
  )

(my-package appt
  (:delay 20)
  (setq appt-message-warning-time 5)
  (setq appt-display-duration 30)
  (setq appt-display-interval 5)
  ;; dbus notification of appt
  (require 'my-time)
  (setq appt-disp-window-function #'my-app-display-window)
  ;; with org-agenda-to-appt
  (require 'org-clock)
  (require 'my-utils)
  (when (boundp 'appt-to-agenda-timer)
    (cancel-timer appt-to-agenda-timer))
  (when (my-server-p)
    (setq appt-to-agenda-timer
	        (run-at-time
	         "07:00am"
	         86400 #'org-agenda-to-appt))))

(provide 'ycp-time)
;;; ycp-time.el ends here