From 96ecdb6cf22e85a36d48907670267967b4b528e3 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Wed, 17 Feb 2021 06:57:57 -0600 Subject: [PATCH] Adding performance tweaks through use-package and gcs --- README.org | 259 ++++++++++++++++++++++++++++++++++------------------- init.el | 203 +++++++++++++++++++++++------------------ 2 files changed, 281 insertions(+), 181 deletions(-) diff --git a/README.org b/README.org index 1c382869..e798e734 100644 --- a/README.org +++ b/README.org @@ -2,73 +2,63 @@ #+AUTHOR: Chris Cochrun * Table of Contents :toc: -- [[#early-init][Early Init]] - [[#init][Init]] - - [[#set-basic-ui-config][Set basic UI config]] - [[#startup-performance][Startup Performance]] + - [[#keep-folders-clean][Keep Folders Clean]] + - [[#set-basic-ui-config][Set basic UI config]] - [[#lets-bootstrap-straightel][Let's bootstrap straight.el]] - [[#keybindings][Keybindings]] + - [[#undo-tree][Undo-Tree]] - [[#better-ui][Better UI]] - [[#completion][Completion]] - [[#help][Help]] - [[#format][Format]] - [[#org-mode][Org Mode]] - [[#magit][Magit]] + - [[#garbage-collection][Garbage Collection]] +- [[#early-init][Early Init]] -* Early Init -#+PROPERTY: header-args:emacs-lisp :tangle early-init.el -As of right now I haven't fully setup my early-init file, this does not export into the early-init.el file currently as it's just a copy from Doom's early-init. -#+begin_src emacs-lisp :tangle no -;;; early-init.el -*- lexical-binding: t; -*- - -;; Emacs 27.1 introduced early-init.el, which is run before init.el, before -;; package and UI initialization happens, and before site files are loaded. - -;; A big contributor to startup times is garbage collection. We up the gc -;; threshold to temporarily prevent it from running, then reset it later by -;; enabling `gcmh-mode'. Not resetting it will cause stuttering/freezes. -(setq gc-cons-threshold most-positive-fixnum) - -;; In noninteractive sessions, prioritize non-byte-compiled source files to -;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time -;; to skip the mtime checks on every *.elc file. -(setq load-prefer-newer noninteractive) - -;; In Emacs 27+, package initialization occurs before `user-init-file' is -;; loaded, but after `early-init-file'. Doom handles package initialization, so -;; we must prevent Emacs from doing it early! -(setq package-enable-at-startup nil) -(fset #'package--ensure-init-file #'ignore) ; DEPRECATED Removed in 28 - -;; `file-name-handler-alist' is consulted on every `require', `load' and various -;; path/io functions. You get a minor speed up by nooping this. However, this -;; may cause problems on builds of Emacs where its site lisp files aren't -;; byte-compiled and we're forced to load the *.el.gz files (e.g. on Alpine) -(unless (daemonp) - (defvar doom--initial-file-name-handler-alist file-name-handler-alist) - (setq file-name-handler-alist nil) - ;; Restore `file-name-handler-alist' later, because it is needed for handling - ;; encrypted or compressed files, among other things. - (defun doom-reset-file-handler-alist-h () - ;; Re-add rather than `setq', because changes to `file-name-handler-alist' - ;; since startup ought to be preserved. - (dolist (handler file-name-handler-alist) - (add-to-list 'doom--initial-file-name-handler-alist handler)) - (setq file-name-handler-alist doom--initial-file-name-handler-alist)) - (add-hook 'emacs-startup-hook #'doom-reset-file-handler-alist-h)) - -;; Ensure Doom is running out of this file's directory -(setq user-emacs-directory (file-name-directory load-file-name)) - -;; Load the heart of Doom Emacs -(load (concat user-emacs-directory "core/core") nil 'nomessage) -#+end_src * Init -#+PROPERTY: header-args:emacs-lisp :tangle init.el +:PROPERTIES: +:header-args: emacs-lisp :tangle init.el +:END: + +This init section tangles out to =init.el=. We'll do most of our configuring here. +** Startup Performance + +Let's create a message that will tell us how long it takes emacs to load in order to keep an eye on performance. +#+begin_src emacs-lisp +;;; init.el -*- lexical-binding: t; -*- +(defun chris/display-startup-time () + (message "Emacs loaded in %s with %d garbage collections." + (format "%.2f seconds" + (float-time + (time-subtract after-init-time before-init-time))) + gcs-done)) +(add-hook 'emacs-startup-hook #'chris/display-startup-time) +#+end_src + +Let's also set the =gc-cons-threshold= variable to a high setting for the remainder of our setup process to speed things up. +#+begin_src emacs-lisp +(setq gc-cons-threshold 50000000) +#+end_src +** Keep Folders Clean + +Let's setup a backup and auto-save location to keep our main directory clean. The autosave directory needs to be created first. +#+begin_src emacs-lisp :tangle no + + (setq backup-directory-alist '(("." . "/home/chris/.dotemacs/tmp/backups/"))) + + (make-directory (expand-file-name "tmp/autosaves/" user-emacs-directory) t) + + (setq auto-save-list-file-prefix (expand-file-name "tmp/autosaves/sessions/" user-emacs-directory) + auto-save-file-name-transforms '((".*" (expand-file-name "tmp/autosaves/" user-emacs-directory) t))) + +#+end_src + ** Set basic UI config Let's start by making some basic ui changes like turning off the scrollbar, toolbar, menu, tooltips, and setting our font and some things. #+begin_src emacs-lisp - ;;; init.el -*- lexical-binding: t; -*- (setq inhibit-startup-message t) (scroll-bar-mode -1) @@ -103,16 +93,6 @@ Also, real quick let's make sure that ~~ works as the same as ~~ #+begin_src emacs-lisp (global-set-key (kbd "") 'keyboard-escape-quit) #+end_src -** Startup Performance -#+begin_src emacs-lisp - (defun chris/display-startup-time () - (message "Emacs loaded in %s with %d garbage collections." - (format "%.2f seconds" - (float-time - (time-subtract after-init-time before-init-time))) - gcs-done)) - (add-hook 'emacs-startup-hook #'chris/display-startup-time) -#+end_src ** Let's bootstrap straight.el #+begin_src emacs-lisp @@ -132,10 +112,12 @@ Also, real quick let's make sure that ~~ works as the same as ~~ (setq straight-use-package-by-default t) (straight-use-package 'use-package) +(setq use-package-verbose t) #+end_src #+begin_src emacs-lisp -(use-package command-log-mode) + (use-package command-log-mode + :commands command-log-mode) #+end_src #+begin_src emacs-lisp @@ -164,14 +146,16 @@ Also, real quick let's make sure that ~~ works as the same as ~~ #+end_src #+begin_src emacs-lisp -(use-package adaptive-wrap) + (use-package adaptive-wrap + :defer t) #+end_src #+begin_src emacs-lisp -(use-package which-key - :init (which-key-mode) - :config - (setq which-key-idle-delay 0.3)) + (use-package which-key + :config + (setq which-key-idle-delay 0.3) + (which-key-mode) + :defer 1) #+end_src ** Keybindings @@ -186,7 +170,8 @@ There are two major packages we need to get the functionality I desire. Evil and evil-respect-visual-line-mode t evil-want-C-u-delete t) :config - (evil-mode +1)) + (evil-mode +1) + (setq evil-undo-system 'undo-tree)) #+end_src This evil-collection package includes a lot of other evil based things. @@ -236,10 +221,20 @@ This evil-collection package includes a lot of other evil based things. :config (setq evil-escape-key-sequence "fd")) #+end_src +** Undo-Tree +#+begin_src emacs-lisp +(use-package undo-tree + :defer 1) +#+end_src + ** Better UI *** Olivetti #+begin_src emacs-lisp -(use-package olivetti) +(use-package olivetti + :after org + :config + (setq olivetti-body-width 0.6 + olivetti-minimum-body-width 100)) #+end_src *** TOC-ORG #+begin_src emacs-lisp @@ -263,7 +258,7 @@ I prefer selectrum over Ivy or Helm for completions. It is using the basic compl "C-S-j" 'selectrum-goto-end "C-S-k" 'selectrum-goto-beginning "TAB" 'selectrum-insert-current-candidate) - :commands (completing-read)) + :commands completing-read) #+END_SRC @@ -345,7 +340,8 @@ This is similar but using mini-frame. Mini-frame works well, but not if using ex *** CONSULT Consult has a lot of nice functions like Ivy's Counsel functions (enhanced searching functions), lets set some of them in the keymap so they are easily used. #+begin_src emacs-lisp -(use-package consult) + (use-package consult + :after selectrum) #+end_src #+begin_src emacs-lisp :tangle no @@ -383,27 +379,34 @@ Marginalia makes for some great decoration to our minibuffer completion items. W #+RESULTS: ** Help #+begin_src emacs-lisp -(use-package helpful) + (use-package helpful + :commands (helpful-callable helpful-variable helpful-command helpful-key)) #+end_src ** Format #+begin_src emacs-lisp - (use-package format-all - :config - (format-all-mode +1)) + (use-package format-all + :config + (format-all-mode +1) + :defer 1) #+end_src ** Org Mode -Need to setup auto tangle and make sure I have some structure templates for org-mode. -#+begin_src emacs-lisp - (use-package org - :config - (setq org-startup-indented t) - (defun chris/org-babel-tangle-config () - (when (string-equal (buffer-file-name) - (expand-file-name "~/.personal-emacs/init.org")) - (let ((org-confirm-babel-evaluate nil)) - (org-babel-tangle)))) - (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'chris/org-babel-tangle-config))) +Let's start by creating a self contained function of what I'd like started on every org buffer. +#+begin_src emacs-lisp +(defun chris/org-mode-setup () + (org-indent-mode +1) + (toc-org-mode +1) + (olivetti-mode +1)) +#+end_src + +This is the use-package definition with a lot of customization. Need to setup auto tangle and make sure I have some structure templates for org-mode. +#+begin_src emacs-lisp +(use-package org + :config + (setq org-startup-indented t + org-edit-src-content-indentation 0) + + (add-hook 'org-mode-hook 'chris/org-mode-setup) (org-babel-do-load-languages 'org-babel-load-languages @@ -453,8 +456,6 @@ Need to setup auto tangle and make sure I have some structure templates for org- org-capture-use-agenda-date t) ;;(setq org-superstar-headline-bullets-list '("◉" "◈" "▸" "✬" "◎" "◇" "❉" "✙" "❖")) - (setq olivetti-body-width 0.6) - (setq olivetti-minimum-body-width 100) (setq org-imenu-depth 4) (setq org-odt-styles-file "/home/chris/org/style.odt") @@ -463,10 +464,6 @@ Need to setup auto tangle and make sure I have some structure templates for org- (sequence "[ ](T)" "[-](S)" "[?](W)" "|" "[X](D)"))) - (add-hook 'org-mode-hook - (toc-org-mode +1) - (olivetti-mode +1)) - (setq org-agenda-files '("/home/chris/org/DMPREADME.org" "/home/chris/org/DMPTODO.org" "/home/chris/org/inbox.org" "/home/chris/org/notes.org" "/home/chris/org/repetition.org" "/home/chris/org/tasks.org" "/home/chris/org/tfc_plans.org" "/home/chris/org/ministry_team.org" "/home/chris/org/todo.org" "/home/chris/org/newsletter.org")) (setq org-id-method 'ts) @@ -490,6 +487,17 @@ We need to create a lesson capture function to find our lesson files differently (search-forward "PLAN"))) #+end_src +We are also going to make our config auto-tangle. This is so helpful on saving the .org file tangles out the config automatically. +#+begin_src emacs-lisp +(defun chris/org-babel-tangle-config () + (when (string-equal (buffer-file-name) + (expand-file-name "~/.dotemacs/README.org")) + (let ((org-confirm-babel-evaluate nil)) + (org-babel-tangle)))) + +(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'chris/org-babel-tangle-config + :append :local))) +#+end_src *** Org-Roam Here we are going to add org-roam. This is a note-takers paradise by adding an automatic backlinking function. @@ -555,6 +563,71 @@ Use magit, because why wouldn't you? duh! #+begin_src emacs-lisp (use-package magit :commands (magit-status magit-get-current-branch) + :general + (chris/leader-keys "g g" 'magit-status) :custom (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) #+end_src + +** Garbage Collection + +We set the =gc-cons-threshold= variable to really high, now lets set it back low to make sure emacs performs properly. +#+begin_src emacs-lisp +(setq gc-cons-threshold 2000000) +#+end_src + +#+begin_src emacs-lisp + +#+end_src +* Early Init +:PROPERTIES: +:header-args: emacs-lisp :tangle early-init.el +:END: + +As of right now I haven't fully setup my early-init file, this does not export into the early-init.el file currently as it's just a copy from Doom's early-init. +#+begin_src emacs-lisp :tangle early-init.el +;;; early-init.el -*- lexical-binding: t; -*- + +;; Emacs 27.1 introduced early-init.el, which is run before init.el, before +;; package and UI initialization happens, and before site files are loaded. + +;; A big contributor to startup times is garbage collection. We up the gc +;; threshold to temporarily prevent it from running, then reset it later by +;; enabling `gcmh-mode'. Not resetting it will cause stuttering/freezes. +(setq gc-cons-threshold 50000000) + +;; ;; In noninteractive sessions, prioritize non-byte-compiled source files to +;; ;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time +;; ;; to skip the mtime checks on every *.elc file. +;; (setq load-prefer-newer noninteractive) + +;; ;; In Emacs 27+, package initialization occurs before `user-init-file' is +;; ;; loaded, but after `early-init-file'. Doom handles package initialization, so +;; ;; we must prevent Emacs from doing it early! +;; (setq package-enable-at-startup nil) +;; (fset #'package--ensure-init-file #'ignore) ; DEPRECATED Removed in 28 + +;; ;; `file-name-handler-alist' is consulted on every `require', `load' and various +;; ;; path/io functions. You get a minor speed up by nooping this. However, this +;; ;; may cause problems on builds of Emacs where its site lisp files aren't +;; ;; byte-compiled and we're forced to load the *.el.gz files (e.g. on Alpine) +;; (unless (daemonp) +;; (defvar doom--initial-file-name-handler-alist file-name-handler-alist) +;; (setq file-name-handler-alist nil) +;; ;; Restore `file-name-handler-alist' later, because it is needed for handling +;; ;; encrypted or compressed files, among other things. +;; (defun doom-reset-file-handler-alist-h () +;; ;; Re-add rather than `setq', because changes to `file-name-handler-alist' +;; ;; since startup ought to be preserved. +;; (dolist (handler file-name-handler-alist) +;; (add-to-list 'doom--initial-file-name-handler-alist handler)) +;; (setq file-name-handler-alist doom--initial-file-name-handler-alist)) +;; (add-hook 'emacs-startup-hook #'doom-reset-file-handler-alist-h)) + +;; ;; Ensure Doom is running out of this file's directory +;; (setq user-emacs-directory (file-name-directory load-file-name)) + +;; ;; Load the heart of Doom Emacs +;; (load (concat user-emacs-directory "core/core") nil 'nomessage) +#+end_src + diff --git a/init.el b/init.el index 464348c0..945ba13b 100644 --- a/init.el +++ b/init.el @@ -1,4 +1,14 @@ ;;; init.el -*- lexical-binding: t; -*- +(defun chris/display-startup-time () + (message "Emacs loaded in %s with %d garbage collections." + (format "%.2f seconds" + (float-time + (time-subtract after-init-time before-init-time))) + gcs-done)) +(add-hook 'emacs-startup-hook #'chris/display-startup-time) + +(setq gc-cons-threshold 50000000) + (setq inhibit-startup-message t) (scroll-bar-mode -1) @@ -24,14 +34,6 @@ (global-set-key (kbd "") 'keyboard-escape-quit) -(defun chris/display-startup-time () - (message "Emacs loaded in %s with %d garbage collections." - (format "%.2f seconds" - (float-time - (time-subtract after-init-time before-init-time))) - gcs-done)) -(add-hook 'emacs-startup-hook #'chris/display-startup-time) - (defvar bootstrap-version) (let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) @@ -48,8 +50,10 @@ (setq straight-use-package-by-default t) (straight-use-package 'use-package) +(setq use-package-verbose t) -(use-package command-log-mode) +(use-package command-log-mode + :commands command-log-mode) (use-package all-the-icons) @@ -68,12 +72,14 @@ (use-package rainbow-delimiters :hook (prog-mode . rainbow-delimiters-mode)) -(use-package adaptive-wrap) +(use-package adaptive-wrap + :defer t) (use-package which-key - :init (which-key-mode) :config - (setq which-key-idle-delay 0.3)) + (setq which-key-idle-delay 0.3) + (which-key-mode) + :defer 1) (use-package evil :init @@ -84,7 +90,8 @@ evil-respect-visual-line-mode t evil-want-C-u-delete t) :config - (evil-mode +1)) + (evil-mode +1) + (setq evil-undo-system 'undo-tree)) (use-package evil-collection :after evil @@ -126,7 +133,14 @@ :init (evil-escape-mode +1) :config (setq evil-escape-key-sequence "fd")) -(use-package olivetti) +(use-package undo-tree + :defer 1) + +(use-package olivetti + :after org + :config + (setq olivetti-body-width 0.6 + olivetti-minimum-body-width 100)) (use-package toc-org :after org) @@ -142,7 +156,7 @@ "C-S-j" 'selectrum-goto-end "C-S-k" 'selectrum-goto-beginning "TAB" 'selectrum-insert-current-candidate) - :commands (completing-read)) + :commands completing-read) (use-package prescient :config @@ -154,7 +168,8 @@ (selectrum-prescient-mode +1) :after selectrum) -(use-package consult) +(use-package consult + :after selectrum) ;; Enable richer annotations using the Marginalia package (use-package marginalia @@ -179,91 +194,88 @@ (setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) :after selectrum) -(use-package helpful) +(use-package helpful + :commands (helpful-callable helpful-variable helpful-command helpful-key)) (use-package format-all :config - (format-all-mode +1)) + (format-all-mode +1) + :defer 1) + +(defun chris/org-mode-setup () + (org-indent-mode +1) + (toc-org-mode +1) + (olivetti-mode +1)) (use-package org - :config - (setq org-startup-indented t) - (defun chris/org-babel-tangle-config () - (when (string-equal (buffer-file-name) - (expand-file-name "~/.personal-emacs/init.org")) - (let ((org-confirm-babel-evaluate nil)) - (org-babel-tangle)))) + :config + (setq org-startup-indented t + org-edit-src-content-indentation 0) - (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'chris/org-babel-tangle-config))) + (add-hook 'org-mode-hook 'chris/org-mode-setup) - (org-babel-do-load-languages - 'org-babel-load-languages - '((emacs-lisp . t) - (python . t) - (shell . t))) + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (python . t) + (shell . t))) - (require 'org-tempo) - (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) - (add-to-list 'org-structure-template-alist '("py" . "src python")) - (add-to-list 'org-structure-template-alist '("sh" . "src shell")) - (add-to-list 'org-structure-template-alist '("q" . "quote")) + (require 'org-tempo) + (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) + (add-to-list 'org-structure-template-alist '("py" . "src python")) + (add-to-list 'org-structure-template-alist '("sh" . "src shell")) + (add-to-list 'org-structure-template-alist '("q" . "quote")) - (setq org-capture-templates - '(("t" "Personal todo" entry - (file+headline +org-capture-todo-file "Inbox") - "* TODO %^{TODO name}\nSCHEDULED: %T\n%a\n%i%?" :prepend t) - ("n" "Personal notes" entry - (file+headline +org-capture-notes-file "Inbox") - "* %u %?\n%i\n%a" :prepend t) - ("j" "Journal" entry - (file+olp+datetree +org-capture-journal-file) - "* %U %?\n%i\n%a" :prepend t) - ("p" "TFC Plan" entry - (function chris/org-roam-capture-lesson-file) - (file ".templates/tfcplantemplate.org") - :prepend nil - :jump-to-captured t - :empty-lines 1) - ("r" "Templates for projects") - ("rt" "Project-local todo" entry - (file+headline +org-capture-project-todo-file "Inbox") - "* TODO %?\n%i\n%a" :prepend t) - ("rn" "Project-local notes" entry - (file+headline +org-capture-project-notes-file "Inbox") - "* %U %?\n%i\n%a" :prepend t) - ("rc" "Project-local changelog" entry - (file+headline +org-capture-project-changelog-file "Unreleased") - "* %U %?\n%i\n%a" :prepend t) - ("o" "Centralized templates for projects") - ("ot" "Project todo" entry #'+org-capture-central-project-todo-file - "* TODO %?\n %i\n %a" :heading "Tasks" :prepend nil) - ("on" "Project notes" entry #'+org-capture-central-project-notes-file - "* %U %?\n %i\n %a" :heading "Notes" :prepend t) - ("oc" "Project changelog" entry #'+org-capture-central-project-changelog-file - "* %U %?\n %i\n %a" :heading "Changelog" :prepend t)) - org-capture-use-agenda-date t) + (setq org-capture-templates + '(("t" "Personal todo" entry + (file+headline +org-capture-todo-file "Inbox") + "* TODO %^{TODO name}\nSCHEDULED: %T\n%a\n%i%?" :prepend t) + ("n" "Personal notes" entry + (file+headline +org-capture-notes-file "Inbox") + "* %u %?\n%i\n%a" :prepend t) + ("j" "Journal" entry + (file+olp+datetree +org-capture-journal-file) + "* %U %?\n%i\n%a" :prepend t) + ("p" "TFC Plan" entry + (function chris/org-roam-capture-lesson-file) + (file ".templates/tfcplantemplate.org") + :prepend nil + :jump-to-captured t + :empty-lines 1) + ("r" "Templates for projects") + ("rt" "Project-local todo" entry + (file+headline +org-capture-project-todo-file "Inbox") + "* TODO %?\n%i\n%a" :prepend t) + ("rn" "Project-local notes" entry + (file+headline +org-capture-project-notes-file "Inbox") + "* %U %?\n%i\n%a" :prepend t) + ("rc" "Project-local changelog" entry + (file+headline +org-capture-project-changelog-file "Unreleased") + "* %U %?\n%i\n%a" :prepend t) + ("o" "Centralized templates for projects") + ("ot" "Project todo" entry #'+org-capture-central-project-todo-file + "* TODO %?\n %i\n %a" :heading "Tasks" :prepend nil) + ("on" "Project notes" entry #'+org-capture-central-project-notes-file + "* %U %?\n %i\n %a" :heading "Notes" :prepend t) + ("oc" "Project changelog" entry #'+org-capture-central-project-changelog-file + "* %U %?\n %i\n %a" :heading "Changelog" :prepend t)) + org-capture-use-agenda-date t) - ;;(setq org-superstar-headline-bullets-list '("◉" "◈" "▸" "✬" "◎" "◇" "❉" "✙" "❖")) - (setq olivetti-body-width 0.6) - (setq olivetti-minimum-body-width 100) - (setq org-imenu-depth 4) - (setq org-odt-styles-file "/home/chris/org/style.odt") + ;;(setq org-superstar-headline-bullets-list '("◉" "◈" "▸" "✬" "◎" "◇" "❉" "✙" "❖")) + (setq org-imenu-depth 4) + (setq org-odt-styles-file "/home/chris/org/style.odt") - (setq org-todo-keywords - '((sequence "TODO(t)" "PROJ(p)" "STRT(s)" "WAIT(w)" "HOLD(h)" "|" "DONE(d)" "CNCL(c)") - (sequence "[ ](T)" "[-](S)" "[?](W)" "|" "[X](D)"))) + (setq org-todo-keywords + '((sequence "TODO(t)" "PROJ(p)" "STRT(s)" "WAIT(w)" "HOLD(h)" "|" "DONE(d)" "CNCL(c)") + (sequence "[ ](T)" "[-](S)" "[?](W)" "|" "[X](D)"))) - (add-hook 'org-mode-hook - (toc-org-mode +1) - (olivetti-mode +1)) - - (setq org-agenda-files - '("/home/chris/org/DMPREADME.org" "/home/chris/org/DMPTODO.org" "/home/chris/org/inbox.org" "/home/chris/org/notes.org" "/home/chris/org/repetition.org" "/home/chris/org/tasks.org" "/home/chris/org/tfc_plans.org" "/home/chris/org/ministry_team.org" "/home/chris/org/todo.org" "/home/chris/org/newsletter.org")) - (setq org-id-method 'ts) - :general - (chris/leader-keys "o a" 'org-agenda) - (chris/leader-keys "c" 'org-capture)) + (setq org-agenda-files + '("/home/chris/org/DMPREADME.org" "/home/chris/org/DMPTODO.org" "/home/chris/org/inbox.org" "/home/chris/org/notes.org" "/home/chris/org/repetition.org" "/home/chris/org/tasks.org" "/home/chris/org/tfc_plans.org" "/home/chris/org/ministry_team.org" "/home/chris/org/todo.org" "/home/chris/org/newsletter.org")) + (setq org-id-method 'ts) + :general + (chris/leader-keys "o a" 'org-agenda) + (chris/leader-keys "c" 'org-capture)) (defun chris/org-roam-capture-lesson-file () "Function to return the lesson file that is needed for TFC plan capture and move to correct position for plan insertion" @@ -277,6 +289,15 @@ (goto-char (point-min)) (search-forward "PLAN"))) +(defun chris/org-babel-tangle-config () + (when (string-equal (buffer-file-name) + (expand-file-name "~/.dotemacs/README.org")) + (let ((org-confirm-babel-evaluate nil)) + (org-babel-tangle)))) + +(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'chris/org-babel-tangle-config + :append :local))) + (use-package org-roam :after org :config @@ -324,5 +345,11 @@ (use-package magit :commands (magit-status magit-get-current-branch) + :general + (chris/leader-keys "g g" 'magit-status) :custom (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) + +(setq gc-cons-threshold 2000000) + +