215 lines
7.9 KiB
EmacsLisp
215 lines
7.9 KiB
EmacsLisp
(setq fancy-splash-image "~/.config/doom/splash.png")
|
|
|
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)
|
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer)
|
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded)
|
|
(add-hook! '+doom-dashboard-mode-hook (hide-mode-line-mode 1) (hl-line-mode -1))
|
|
(setq-hook! '+doom-dashboard-mode-hook evil-normal-state-cursor (list nil))
|
|
|
|
(setq user-full-name "opal"
|
|
user-mail-address "ry.orlando@proton.me")
|
|
|
|
(load-theme 'doom-gruvbox t)
|
|
;;(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
|
|
|
|
(dolist (mode '(org-mode-hook
|
|
term-mode-hook
|
|
shell-mode-hook
|
|
eshell-mode-hook))
|
|
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
|
|
|
(setq browse-url-browser-function 'eww-browse-url)
|
|
|
|
(set-face-attribute 'default nil :font "Terminus" :height 130 :weight 'regular)
|
|
(set-face-attribute 'fixed-pitch nil :font "Terminus" :height 1.0 :weight 'regular)
|
|
(set-face-attribute 'variable-pitch nil :font "Terminus" :height 1.0 :weight 'bold)
|
|
|
|
(defun opal/org-font-setup ()
|
|
;; Replace list hyphen with dot
|
|
(font-lock-add-keywords 'org-mode
|
|
'(("^ *\\([-]\\) "
|
|
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1)
|
|
"•"))))))
|
|
|
|
;; Set faces for heading levels
|
|
(dolist (face '((org-level-1 . 1.2)
|
|
(org-level-2 . 1.1)
|
|
(org-level-3 . 1.05)
|
|
(org-level-4 . 1.0)
|
|
(org-level-5 . 1.1)
|
|
(org-level-6 . 1.1)
|
|
(org-level-7 . 1.1)
|
|
(org-level-8 . 1.1)))
|
|
(set-face-attribute (car face) nil :font "Terminus" :weight 'regular :height (cdr face)))
|
|
|
|
;; Ensure that anything that should be fixed-pitch in Org files appears that way
|
|
(set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch)
|
|
(set-face-attribute 'org-table nil :inherit 'fixed-pitch)
|
|
(set-face-attribute 'org-formula nil :inherit 'fixed-pitch)
|
|
(set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
|
|
(set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch))
|
|
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
|
|
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
|
|
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
|
|
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
|
|
(set-face-attribute 'line-number nil :inherit 'fixed-pitch)
|
|
(set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch))
|
|
|
|
|
|
(defun opal/org-mode-setup ()
|
|
(org-indent-mode)
|
|
(variable-pitch-mode 1)
|
|
(visual-line-mode 1))
|
|
|
|
(use-package org
|
|
:commands (org-capture org-agenda)
|
|
:hook (org-mode . opal/org-mode-setup)
|
|
:config
|
|
(setq org-ellipsis " ▾")
|
|
(setq org-agenda-start-with-log-mode t)
|
|
(setq org-log-done 'time)
|
|
(setq org-log-into-drawer t)
|
|
(setq org-startup-folded t)
|
|
(setq org-agenda-files
|
|
'("~/work/work.org"))
|
|
|
|
(require 'org-habit)
|
|
(add-to-list 'org-modules 'org-habit)
|
|
(setq org-habit-graph-column 60)
|
|
|
|
(setq org-todo-keywords
|
|
'((sequence "NEXT(n)" "TODO(t)" "|" "DONE(d!)")
|
|
(sequence "ACTIVE(a)" "PROJ(p)" "READY(r)" "WAIT(w@/!)" "HOLD(h)" "BACKLOG(b)" "DOC(u)" "|" "COMPLETED(c)" "CANC(k@)")))
|
|
|
|
(setq org-todo-keyword-faces
|
|
'(("NEXT" . "red") ("TODO" . "orange") ("WAIT" . "yellow") ("DONE" . "green")))
|
|
|
|
(setq org-refile-targets
|
|
'(("archive.org" :maxlevel . 1)
|
|
("planner.org" :maxlevel . 1)))
|
|
|
|
;; Save Org buffers after refiling!
|
|
(advice-add 'org-refile :after 'org-save-all-org-buffers)
|
|
|
|
(add-hook 'org-mode-hook #'org-make-toc-mode)
|
|
|
|
;; Configure custom agenda views
|
|
(setq org-agenda-custom-commands
|
|
'(("d" "Dashboard"
|
|
((agenda "" ((org-deadline-warning-days 7)))
|
|
(todo "NEXT"
|
|
((org-agenda-overriding-header "Next Tasks")))
|
|
(tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects")))))
|
|
|
|
("n" "Next Tasks"
|
|
((todo "NEXT"
|
|
((org-agenda-overriding-header "Next Tasks")))))
|
|
|
|
;; Low-effort next actions
|
|
("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0"
|
|
((org-agenda-overriding-header "Low Effort Tasks")
|
|
(org-agenda-max-todos 20)
|
|
(org-agenda-files org-agenda-files)))))
|
|
|
|
;; Create capture templates
|
|
(setq org-capture-templates
|
|
`(("t" "Tasks")
|
|
("tt" "Task" entry (file+olp "~/work/work.org" "Inbox")
|
|
"* TODO %?\n %U\n %a\n %i" :empty-lines 1)))
|
|
|
|
;; Tell Org to stop indenting inside of org source blocks.
|
|
(setq org-edit-src-content-indentation 0)
|
|
|
|
;; Set org agenda dir
|
|
(setq org-directory "~/org/")
|
|
|
|
|
|
;; Init org font setup
|
|
(opal/org-font-setup))
|
|
|
|
(use-package org-bullets
|
|
:after org
|
|
:hook (org-mode . org-bullets-mode)
|
|
:custom
|
|
(org-bullets-bullet-list '("◉" "○" "●" "○" "●" "○" "●")))
|
|
|
|
(defun opal/org-mode-visual-fill ()
|
|
(setq visual-fill-column-width 150
|
|
visual-fill-column-center-text t)
|
|
(visual-fill-column-mode 1))
|
|
|
|
(use-package visual-fill-column
|
|
:hook (org-mode . opal/org-mode-visual-fill))
|
|
|
|
;; Load languages for babel code blocks.
|
|
(with-eval-after-load 'org
|
|
(org-babel-do-load-languages
|
|
'org-babel-load-languages
|
|
'((emacs-lisp . t)
|
|
(lisp . t)
|
|
(python . t)
|
|
(sql . t)))
|
|
|
|
(push '("conf-unix" . conf-unix) org-src-lang-modes))
|
|
|
|
(with-eval-after-load 'org
|
|
(require 'org-tempo)
|
|
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
|
|
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
|
(add-to-list 'org-structure-template-alist '("cl" . "src lisp"))
|
|
(add-to-list 'org-structure-template-alist '("sql" . "src sql"))
|
|
(add-to-list 'org-structure-template-alist '("py" . "src python"))
|
|
(add-to-list 'org-structure-template-alist '("clj" . "src clojure")))
|
|
|
|
|
|
(use-package elfeed
|
|
:ensure t
|
|
:bind
|
|
("C-c f" . elfeed) ;; Open Elfeed
|
|
:config
|
|
;; Set your feeds
|
|
(setq elfeed-feeds
|
|
'(
|
|
;; Emacs
|
|
("https://sachachua.com/blog/feed/index.xml" tech emacs)
|
|
("https://protesilaos.com/master.xml" tech emacs philosophy)
|
|
("https://systemcrafters.net/rss/news.xml" tech emacs)
|
|
|
|
;; Reddit
|
|
("https://www.reddit.com/r/stupidpol/.rss" reddit politics)
|
|
|
|
;; News
|
|
("https://thegrayzone.com/rss" news politics)
|
|
("https://multipolarista.com/rss" news politics)
|
|
("https://www.telesurenglish.net/feed/" news politics)
|
|
("https://theintercept.com/feed/" news politics)
|
|
|
|
;; Tech
|
|
("https://landchad.net/rss.xml" tech)
|
|
("https://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2" tech linux)
|
|
("https://pluralistic.net/feed/" tech privacy)
|
|
("https://blog.privacyguides.org/feed_rss_created.xml" tech privacy)
|
|
|
|
;; Podcasts
|
|
("https://feeds.simplecast.com/dCXMIpJz" podcast history)
|
|
("http://feeds.soundcloud.com/users/soundcloud:users:572119410/sounds.rss" podcast music)
|
|
("https://feeds.feedburner.com/dancarlin/history?format=xml" podcast history)
|
|
|
|
;; YouTube
|
|
("https://www.youtube.com/channel/UC_bOcLgDdfE1whPDIwx3M_g" youtube travel)
|
|
("https://www.youtube.com/feeds/videos.xml?channel_id=UC8uT9cgJorJPWu7ITLGo9Ww" youtube tech retro)
|
|
("https://www.youtube.com/feeds/videos.xml?channel_id=UC0aanx5rpr7D1M7KCFYzrLQ" youtube commentary politics)
|
|
))
|
|
|
|
;; Set default search filter
|
|
(setq elfeed-search-filter "@1-month-ago +unread")
|
|
|
|
;; Update feeds automatically when entering Elfeed search mode
|
|
(add-hook 'elfeed-search-mode-hook 'elfeed-update))
|
|
|
|
(setq create-lockfiles nil)
|
|
|
|
;; Make sure eww opens in it's own buffer
|
|
(after! eww
|
|
(set-popup-rule! "^\\*eww\\*" :ignore t))
|