Archived
1
0
Fork 0
This repository has been archived on 2024-10-19. You can view files and clone it, but cannot push or open issues or pull requests.
emacs/org/init.el

247 lines
10 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;; -*- lexical-binding: t; -*-
;; TURN ON IN INIT FILE!!!!!
;; Make gc pauses faster by decreasing the threshold.
(setq gc-cons-threshold (* 2 1000 1000))
;; disable warnings from popping up, they are still logged
(setq warning-suppress-types '((comp)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; helper functions
;; Figure out if inside Termux
(require 'subr-x)
(setq kmn/is-termux
(string-suffix-p "Android" (string-trim (shell-command-to-string "uname -a"))))
;; day job env?
(setq kmn/is-dayjob
(string= "PCE" (getenv "USERDOMAIN"))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; os specific config
(when (and (eq system-type 'windows-nt)
(not kmn/is-termux))
; Fix resolution of ~ to match other client paths
(setenv "HOME" "C:/Users/mcros/Nextcloud")
(setq default-directory "C:/Users/mcros/Nextcloud")
; add executables to path ahead of them being used by extensions / emacs stuff
(add-to-list 'exec-path "C:/Users/mcros/OneDrive/Programs/PortableApps/sqlite3")
(add-to-list 'exec-path "C:/msys64/usr/bin/unzip.exe")
(setenv "PATH" (concat "C:\\msys64\\mingw64\\bin;" (getenv "PATH")))
)
(when kmn/is-dayjob
(setenv "HOME" "I:/")
(setq default-directory "I:/")
)
(when kmn/is-termux
; setup storage locations -- cheat so mobile/desktop look alike for file urls
;(setq user-init-file "/data/data/com.termux/files/home/storage/shared/.emacs")
;(setq user-emacs-directory "/data/data/com.termux/files/home/storage/shared/.emacs.d/")
;(setenv "HOME" "/data/data/com.termux/files/home/storage/shared/")
;(load user-init-file)
; Fix resolution of ~ to match other client paths
(setenv "HOME" "/data/data/com.termux/files/home/")
(setq default-directory "/data/data/com.termux/files/home/")
; Setup xdg-open as the default for opening files (except for the few we want emacs to open native)
; xdg-open is linked to termux-open by default ; if you need 'more' look into tmux-open and adjust accordingly
; (add-to-list 'org-file-apps '("\\.doc.*" . "open %s"))
(setq org-file-apps
'(;; default
(auto-mode . emacs)
("\\.org" . emacs)
("\\.txt" . emacs)
(".*" . "termux-open --chooser --view %s")))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; global config
(load "~/.emacs.d.profiles/common/_global.el")
(load "~/.emacs.d.profiles/common/generic_functions.el")
(load "~/.emacs.d.profiles/common/workspaces.el")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; compile bytecode for this profile
(unless (was-compiled-p "~/.emacs.d.profiles/org")
(byte-recompile-directory "~/.emacs.d.profiles/org" 0))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; additional packages
(add-to-list 'package-selected-packages
'(ox-hugo org-super-agenda org-alert alert-toast alert)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Load misc extensions
(require 'org)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-alert - windows only
(when (eq system-type 'windows-nt)
(use-package org-alert)
(use-package alert-toast :after alert)
(alert-define-style 'toast-kmn :title "Windows 10 toast notification"
:severity (assq 'normal alert-toast-priorities)
:persistent t
:notifier #'alert-toast-notify)
(setq alert-default-style 'toast-kmn)
(setq org-alert-interval 300
org-alert-notify-cutoff 15
org-alert-notify-after-event-cutoff 86400)
(org-alert-enable)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Update/add auto file handling
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; keyboard shortcuts
(load "~/.emacs.d.profiles/org/config-org-keyboard.el")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Set some orgmode config
(defun my/org_timestamp ()
(interactive)
(org-insert-time-stamp (current-time) (current-time) "t")
)
(org-defkey org-mode-map (kbd "C-c !") #'my/org_timestamp)
(setq org-startup-folded t)
(setq org-return-follows-link t)
(setq org-startup-folded t)
(setq org-support-shift-select t)
(setq org-log-into-drawer t)
(setq org-log-done t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; automatic ids for everything
; From https://web.archive.org/web/20220512120917/https://stackoverflow.com/questions/13340616/assign-ids-to-every-entry-in-org-mode
; This hunk of lisp automatically adds IDs to every header in an org file when you hit save. it usese org-id which can generated IDs of various types including timestamps. Im using the default UUIDs
(defun stackoverflow/org-add-ids-to-headlines-in-file ()
"cargo cult from stackoverflow to add ids"
(interactive)
(save-excursion
(goto-char (point-max))
(while (outline-previous-heading)
(org-id-get-create)))
)
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'before-save-hook 'stackoverflow/org-add-ids-to-headlines-in-file nil 'local)))
(add-hook 'org-capture-prepare-finalize-hook 'org-id-get-create)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ox-hugo for blog
(with-eval-after-load 'ox (require 'ox-hugo))
(with-eval-after-load 'ox-hugo
(setq org-hugo-link-desc-insert-type t)
(setq org-hugo-default-static-subdirectory-for-externals "ox-hugo" )
(setq org-hugo-external-file-extensions-allowed-for-copying '(
"jpg" "jpeg" "tiff" "png" "svg" "gif" "psd" "psb" "kra" "gpl"
"mp4"
"pdf" "odt"
"doc" "ppt" "xls"
"docx" "pptx" "xlsx"
"zip"))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; tags
(load "~/.emacs.d.profiles/org/config-org-tags")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; files
(setq org-default-notes-file "~/org/_index.org")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; agendas
(load "~/.emacs.d.profiles/org/config-org-agendas.el")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; capture templates
(load "~/.emacs.d.profiles/org/config-org-capture.el")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; org-habit
(add-to-list 'org-modules 'org-habit)
(setq org-habit-preceding-days 14)
(setq org-habit-following-days 7)
(setq org-agenda-span 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; helm specific org adjustments
(load "~/.emacs.d.profiles/common/helm-org.el")
(require 'helm-org)
(helm-mode 1)
(add-to-list 'helm-completing-read-handlers-alist '(org-capture . helm-org-completing-read-tags))
(add-to-list 'helm-completing-read-handlers-alist '(org-set-tags . helm-org-completing-read-tags))
(add-to-list 'helm-completing-read-handlers-alist '(org-set-tags-command . helm-org-completing-read-tags))
; fix helm multi-tag select (needs custom seprator. default is comma
;(setq helm-crm-default-separator ":"
(define-advice helm--completion-in-region (:around (helm-fun origfun start end collection &optional predicate) temporary-helm-crm-separator-for-tags)
(setq tcrmds helm-crm-default-separator)
;; If the last command was any of these values, we're looking at tags most likely
(when (or (member last-command '(org-capture org-ctrl-c-ctrl-c org-set-tags org-set-tags-command))
;;This is a workaround for completions when you've already started typing.
(and (eq this-command 'crm-complete)
(eq major-mode 'org-mode))
;; This is probably the only thing we really need, but it doesn't handle custom "Tags" prompts
(and (active-minibuffer-window)
(eq "Tags: " (minibuffer-prompt))))
(setq helm-crm-default-separator ":"))
;; Call the original Helm Completion function with all the original arguments
(funcall helm-fun origfun start end collection predicate)
(setq helm-crm-default-separator tcrmds))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ui tuning
(when (eq system-type 'windows-nt)
(load "~/.emacs.d.profiles/org/config-org-desktop.el"))
(when kmn/is-termux
(load "~/.emacs.d.profiles/org/config-org-mobile.el"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; origami + super agenda config
(defvar ap/org-super-agenda-auto-hide-groups
'("Low Priority"))
(defun ap/org-super-agenda-origami-fold-default ()
"Fold certain groups by default in Org Super Agenda buffer."
(--each ap/org-super-agenda-auto-hide-groups
(goto-char (point-min))
(cl-loop
while (re-search-forward (rx-to-string `(seq bol " " ,it)) nil t)
do (origami-close-node (current-buffer) (point))
)
)
)
(add-hook 'org-agenda-mode-hook #'origami-mode)
(add-hook 'org-agenda-finalize-hook #'ap/org-super-agenda-origami-fold-default)
(define-key org-super-agenda-header-map (kbd "<tab>") #'origami-toggle-node)
(define-key org-agenda-mode-map (kbd "<tab>") #'origami-toggle-node)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "MonoLisa Variable" :height 100))))
'(fixed-pitch ((t (:family "MonoLisa Variable" :height 120))))
'(variable-pitch ((t (:family "Atkinson Hyperlegible" :height 120)))))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("dde643b0efb339c0de5645a2bc2e8b4176976d5298065b8e6ca45bc4ddf188b7" "bfc0b9c3de0382e452a878a1fb4726e1302bf9da20e69d6ec1cd1d5d82f61e3d" default))
)