;; -*- 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")))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; os specific config (when (eq system-type 'windows-nt) ; 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-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/") ; Better fonts (setq org-src-fontify-natively t) ; 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") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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-src-fontify-natively t) (setq org-log-into-drawer t) (setq org-log-done t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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 (diminish 'projectile-mode) (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")) (with-eval-after-load "persp-mode-autoload" (with-eval-after-load "org" (persp-def-auto-persp "kmn" :mode-name ".*org-mode.*" :noauto :dyn-env '(after-switch-to-buffer-functions ;; prevent recursion (persp-add-buffer-on-find-file nil) persp-add-buffer-on-after-change-major-mode) :hooks '(after-switch-to-buffer-functions) :switch 'window))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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 "") #'origami-toggle-node) (define-key org-agenda-mode-map (kbd "") #'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)) )