;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-

;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!

;; UTF-8 support
(prefer-coding-system       'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

(setq user-full-name "Evie Litherland-Smith"
      user-mail-address "e.litherlandsmith@proton.me"
      doom-font "FiraCode Nerd Font-12"
      doom-symbol-fallback-font-families '("Material Icons" "FontAwesome" "Weather Icons")
      doom-emoji-fallback-font-families '("Noto Color Emoji" "Noto Emoji")
      nerd-icons-font-family "FiraCode Nerd Font"
      doom-theme 'doom-tokyo-night
      doom-modeline-gnus t
      doom-modeline-persp-icon t
      doom-modeline-persp-name t
      display-line-numbers-type 'relative
      org-directory "~/Org/"
      +latex-viewers '(pdf-tools)
      +format-with-lsp nil)
(+global-word-wrap-mode +1)
(setq-default left-margin-width 1 right-margin-width 1)
(set-window-buffer nil (current-buffer))
(set-frame-parameter nil 'alpha-background 80)
(add-to-list 'default-frame-alist '(alpha-background . 80))

;; DOOM Dashboard customisation
(setq +doom-dashboard-menu-sections
      '(("Recently opened files"
         :icon (nerd-icons-mdicon "nf-md-file_document" :face 'doom-dashboard-menu-title)
         :action recentf-open-files)
        ("Reload last session"
         :icon (nerd-icons-mdicon "nf-md-history" :face 'doom-dashboard-menu-title)
         :when (cond ((modulep! :ui workspaces)
                      (file-exists-p (expand-file-name persp-auto-save-fname persp-save-dir)))
                     ((require 'desktop nil t)
                      (file-exists-p (desktop-full-file-name))))
         :action doom/quickload-session)
        ("Open org-agenda"
         :icon (nerd-icons-mdicon "nf-md-calendar" :face 'doom-dashboard-menu-title)
         :when (fboundp 'org-agenda)
         :action org-agenda)
        ("Open project"
         :icon (nerd-icons-mdicon "nf-md-briefcase" :face 'doom-dashboard-menu-title)
         :action projectile-switch-project)
        ("Jump to bookmark"
         :icon (nerd-icons-mdicon "nf-md-bookmark" :face 'doom-dashboard-menu-title)
         :action bookmark-jump)
        ("Open documentation"
         :icon (nerd-icons-mdicon "nf-md-book" :face 'doom-dashboard-menu-title)
         :action doom/help)))

;; elfeed update on open
(after! elfeed
  (setq elfeed-db-directory "~/.elfeed/db/"
        elfeed-enclosure-default-dir "~/.elfeed/enclosures/")
  (after! elfeed-goodies
    (setq elfeed-goodies/entry-pane-position 'bottom
          elfeed-goodies/powerline-default-separator 'utf-8))
  (require 'elfeed-tube)
  (elfeed-tube-setup)
  (add-hook! 'elfeed-search-mode-hook #'elfeed-update))

;; ntfy server config
(after! ntfy
  (setq ntfy-server "https://ntfy.xenia.me.uk"
	ntfy-topic "UhrNGphnSKCpCnk8"
	ntfy-header "Notification from emacs"
	ntfy-tags "purple_circle,loudspeaker"))
(require 'ntfy)

;; projectile auto-discover projects
(after! projectile
  (setq projectile-auto-discover t
        projectile-project-search-path '("~/Projects/")
        doom-projectile-cache-purge-non-projects t
        +workspaces-switch-project-function 'doom-project-browse
        +workspaces-on-switch-project-behavior t))

(after! magit (setq magit-clone-default-directory "~/Projects/"))

;; mail settings
(after! mu4e
  (setq mu4e-get-mail-command "mbsync --pull-new inboxes"
        mu4e-update-interval 300
        mu4e-sent-messages-behavior 'sent
        mu4e-attachment-dir "~/Downloads"
        mu4e-change-filenames-when-moving t
        mu4e-alert-modeline-formatter 'mu4e-alert-default-mode-line-formatter
        sendmail-program (executable-find "msmtp")
        send-mail-function #'smtpmail-send-it
        message-sendmail-f-is-evil t
        message-sendmail-extra-arguments '("--read-envelope-from")
        message-send-mail-function #'message-send-mail-with-sendmail
        mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p)
                                 (:maildir "/iCloud/Inbox/" :key ?i)
                                 (:maildir "/Outlook/Inbox/" :key ?o)))

  (setq mu4e-modeline-all-read '("R:" . "󰑇 ")
        mu4e-modeline-all-clear '("C:" . "󰚭 ")
        mu4e-modeline-new-items '("N:" . "󰎔 ")
        mu4e-modeline-unread-items '("U:" . "󰮒 ")
        mu4e-search-full-label '("F" . "󱊖 ")
        mu4e-search-hide-label '("H" . "󰘓 ")
        mu4e-search-related-label '("R" . "󰌹 ")
        mu4e-search-skip-duplicates-label '("D" . "󰆑 ")
        mu4e-search-threaded-label'("T" . "󱇫 "))

  ;; Add accounts with contexts
  (set-email-account! "Proton"
                      '((user-mail-address . "e.litherlandsmith@proton.me")
                        (mu4e-sent-folder . "/Proton/Sent")
                        (mu4e-drafts-folder . "/Proton/Drafts")
                        (mu4e-trash-folder . "/Proton/Trash")
                        (mu4e-refile-folder . "/Proton/Archive"))
                      t)
  (set-email-account! "iCloud"
                      '((user-mail-address . "e.litherlandsmith@icloud.com")
                        (mu4e-sent-folder . "/iCloud/Sent")
                        (mu4e-drafts-folder . "/iCloud/Drafts")
                        (mu4e-trash-folder . "/iCloud/Trash")
                        (mu4e-refile-folder . "/iCloud/Archive"))
                      nil)
  (set-email-account! "Outlook"
                      '((user-mail-address . "evie.litherland-smith@ukaea.uk")
                        (mu4e-sent-folder . "/Outlook/Sent")
                        (mu4e-drafts-folder . "/Outlook/Drafts")
                        (mu4e-trash-folder . "/Outlook/Trash")
                        (mu4e-refile-folder . "/Outlook/Archive"))
                      nil)
  )

;; Calendar settings
(defun open-calendar-all ()
  (interactive)
  (cfw:open-calendar-buffer
   :contents-sources
   (list
    (cfw:org-create-source "Green")  ; org-agenda source
    (cfw:ical-create-source "Personal" "~/.calendar/nextcloud/personal.ics" "Red")
    (cfw:ical-create-source "Birthdays" "~/.calendar/nextcloud/contact_birthdays.ics" "Grey")
    )))

;; Org-mode settings
(after! org
  (setq org-agenda-sticky t)
  (setq org-agenda-files '("~/Org/"))
  (setq org-agenda-prefix-format
        '((agenda . " %i %t %s")
          (todo . " %i")
          (tags . " %i")
          (search . " %i"))))

;; Set org-roam capture templates
(after! org-roam
  (setq org-roam-capture-templates
        '(("d" "default" plain "%?"
           :target (file+head "${slug}.org" "#+title: ${title}\n")))))

;; VTERM settings
(after! vterm
  (setq vterm-tramp-shells
        '(("ssh" "/usr/bin/env bash")
          ("sshx" "/usr/bin/env bash"))))

;; Apheleia settings
(after! apheleia
  (setq apheleia-remote-algorithm 'local))

;; TRAMP host specific configs
(after! tramp
  (setq tramp-default-method "sshx"
        tramp-default-remote-shell "/bin/sh"
        tramp-remote-path '(tramp-own-remote-path tramp-default-remote-path)))