commit 649a096110d94dea4e5b85816c6d5ca8e5610474
parent ba8307a0830c4753067c6f1275352e24956fd86a
Author: Michael Neuper <73108749+michaelneuper@users.noreply.github.com>
Date: Sun, 11 Jun 2023 15:34:04 +0200
Change to literate config
Diffstat:
5 files changed, 734 insertions(+), 205 deletions(-)
diff --git a/.config/doom/config.el b/.config/doom/config.el
@@ -1,44 +1,3 @@
-;; __ __ _ _
-;; | \/ | \ | |
-;; | \ / | \| | Michael Neuper
-;; | |\/| | . ` | https://michaelneuper.com
-;; | | | | |\ | https://github.com/michaelneuper
-;; |_| |_|_| \_|
-;;
-;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
-;; Whenever you reconfigure a package, make sure to wrap your config in an
-;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
-;;
-;; (after! PACKAGE
-;; (setq x y))
-;;
-;; The exceptions to this rule:
-;;
-;; - Setting file/directory variables (like `org-directory')
-;; - Setting variables which explicitly tell you to set them before their
-;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
-;; - Setting doom variables (which start with 'doom-' or '+').
-;;
-;; Here are some additional functions/macros that will help you configure Doom.
-;;
-;; - `load!' for loading external *.el files relative to this one
-;; - `use-package!' for configuring packages
-;; - `after!' for running code after a package has loaded
-;; - `add-load-path!' for adding directories to the `load-path', relative to
-;; this file. Emacs searches the `load-path' when you load packages with
-;; `require' or `use-package'.
-;; - `map!' for binding new keys
-;;
-;; To get information about any of these functions/macros, move the cursor over
-;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
-;; This will open documentation for it, including demos of how they are used.
-;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
-;; etc).
-;;
-;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
-;; they are implemented.
-
-;; CONFIGURATION
(setq doom-theme 'doom-one)
(setq doom-localleader-key "SPC l"
@@ -63,18 +22,14 @@
(when (version< "29.0.50" emacs-version)
(pixel-scroll-precision-mode))
+
;; (unless (eq system-type 'darwin)
;; (require 'good-scroll)
;; (good-scroll-mode 1))
-(setq-default spell-checking-enable-by-default nil)
-
-;; CREDENTIALS
(setq user-full-name "Michael Neuper"
user-mail-address "michael@michaelneuper.com")
-;;FONTS
- ; SPC h v doom-font
(setq doom-font (font-spec :family "Fira Code" :size 12.5)
doom-variable-pitch-font (font-spec :family "Noto Sans" :size 15))
@@ -86,7 +41,6 @@
'(font-lock-comment-face :slant italic)
'(font-lock-keyword-face :slant italic))
- ; disable certain ligatures
(plist-put! +ligatures-extra-symbols
:and nil
:or nil
@@ -100,28 +54,15 @@
:list nil
)
-;; WINDOW MANAGEMENT
(setq evil-split-window-below t
evil-vsplit-window-right t)
-;; Ask what buffer to switch to when doing a split
(defadvice! prompt-for-buffers (&rest _)
:after '(evil-window-split evil-window-vsplit)
(consult-buffer))
-;; EVIL MODE
-(setq undo-limit 80000000 ; Raise undo limit to 80mb
- evil-want-fine-undo t) ; Grandular changes when in insert mode
-
-;; INFO-COLORS
-(use-package! info-colors
- :commands (info-colors-fontify-node))
-
-(add-hook 'Info-selection-hook
- 'info-colors-fontify-node)
-
-;; DASHBOARD
(setq doom-fallback-buffer-name "*dashboard*")
+
(use-package! dashboard
:ensure t
:init
@@ -156,7 +97,12 @@
:config
(dashboard-setup-startup-hook))
-;; MODELINE
+(use-package! info-colors
+ :commands (info-colors-fontify-node))
+
+(add-hook 'Info-selection-hook
+ 'info-colors-fontify-node)
+
(nyan-mode)
(setq nyan-animate-nyancat t
nyan-wavy-trail t)
@@ -166,7 +112,6 @@
doom-modeline-persp-icon t
doom-modeline-major-mode-icon t)
-;; TABS
(after! centaur-tabs
:ensure t
:config
@@ -179,69 +124,97 @@
(centaur-tabs-mode t)
(centaur-tabs-group-by-projectile-project))
-;; LATEX
-(require 'org)
-(add-to-list 'org-latex-packages-alist '("" "amsmath" t))
-(add-to-list 'org-latex-packages-alist '("" "amssymb" t))
-(setq org-preview-latex-default-process 'dvipng)
+(require 'svg-tag-mode)
-;; ORG MODE
-(setq org-directory "~/Org"
- org-use-property-inheritance t ; fix weird issue with src blocks
- org-startup-with-inline-images t
- org-startup-with-latex-preview t)
+(defconst date-re "[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}")
+(defconst time-re "[0-9]\\{2\\}:[0-9]\\{2\\}")
+(defconst day-re "[A-Za-z]\\{3\\}")
+(defconst day-time-re (format "\\(%s\\)? ?\\(%s\\)?" day-re time-re))
-(after! org
- (setq org-agenda-files
- '("~/Org/" "~/Documents/Org/agenda.org")))
+(defun svg-progress-percent (value)
+ (svg-image (svg-lib-concat
+ (svg-lib-progress-bar (/ (string-to-number value) 100.0)
+ nil :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
+ (svg-lib-tag (concat value "%")
+ nil :stroke 0 :margin 0)) :ascent 'center))
-;; Show ansi-color codes in org results
-(defun my/babel-ansi ()
- (when-let ((beg (org-babel-where-is-src-block-result nil nil)))
- (save-excursion
- (goto-char beg)
- (when (looking-at org-babel-result-regexp)
- (let ((end (org-babel-result-end))
- (ansi-color-context-region nil))
- (ansi-color-apply-on-region beg end))))))
-(add-hook 'org-babel-after-execute-hook 'my/babel-ansi)
+(defun svg-progress-count (value)
+ (let* ((seq (mapcar #'string-to-number (split-string value "/")))
+ (count (float (car seq)))
+ (total (float (cadr seq))))
+ (svg-image (svg-lib-concat
+ (svg-lib-progress-bar (/ count total) nil
+ :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
+ (svg-lib-tag value nil
+ :stroke 0 :margin 0)) :ascent 'center)))
-;; ORG ROAM
-(setq org-roam-directory "~/RoamNotes"
- org-attach-id-dir "attachments/")
+(setq svg-tag-tags
+ `(
+ ;; Org tags :TAG1:TAG2:TAG3:
+ (":\\([A-Za-z0-9]+\\)" . ((lambda (tag) (svg-tag-make tag))))
+ (":\\([A-Za-z0-9]+[ \-]\\)" . ((lambda (tag) tag)))
-(use-package! websocket
- :after org-roam)
+ ;; Task priority [#A] [#B] [#C]
+ ("\\[#[A-Z]\\]" . ( (lambda (tag)
+ (svg-tag-make tag :face 'org-priority
+ :beg 2 :end -1 :margin 0))))
-(use-package! org-roam-ui
- :after org-roam ;; or :after org
- ;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
- ;; a hookable mode anymore, you're advised to pick something yourself
- ;; if you don't care about startup time, use
- ;; :hook (after-init . org-roam-ui-mode)
- :config
- (setq org-roam-ui-sync-theme t
- org-roam-ui-follow t
- org-roam-ui-update-on-save t
- org-roam-ui-open-on-start t))
+ ;; Progress [1/3]
+ ("\\(\\[[0-9]\\{1,3\\}%\\]\\)" . ((lambda (tag)
+ (svg-progress-percent (substring tag 1 -2)))))
+ ("\\(\\[[0-9]+/[0-9]+\\]\\)" . ((lambda (tag)
+ (svg-progress-count (substring tag 1 -1)))))
-(setq org-roam-database-connector 'sqlite3)
+ ;; TODO / DONE
+ ("TODO" . ((lambda (tag) (svg-tag-make "TODO" :face 'org-todo :inverse t :margin 0))))
+ ("DONE" . ((lambda (tag) (svg-tag-make "DONE" :face 'org-done :margin 0))))
-;; ELISP
-(map! :leader
- (:prefix ("e" . "evaluate")
- :desc "Evaluate elisp in buffer"
- "b" #'eval-buffer
- :desc "Evaluate defun"
- "d" #'eval-defun
- :desc "Evaluate elisp expression"
- "e" #'eval-expression
- :desc "Evaluate last sexpression"
- "l" #'eval-last-sexp
- :desc "Evaluate elisp in region"
- "r" #'eval-region))
+ ;; Citation of the form [cite:@Knuth:1984]
+ ("\\(\\[cite:@[A-Za-z]+:\\)" . ((lambda (tag)
+ (svg-tag-make tag
+ :inverse t
+ :beg 7 :end -1
+ :crop-right t))))
+ ("\\[cite:@[A-Za-z]+:\\([0-9]+\\]\\)" . ((lambda (tag)
+ (svg-tag-make tag
+ :end -1
+ :crop-left t))))
+
+
+ ;; Active date (with or without day name, with or without time) <2021-12-24 Fri 14:00>
+ (,(format "\\(<%s>\\)" date-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :end -1 :margin 0))))
+ (,(format "\\(<%s \\)%s>" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0))))
+ (,(format "<%s \\(%s>\\)" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0))))
+
+ ;; Inactive date (with or without day name, with or without time) [2021-12-24 Fri 14:00]
+ (,(format "\\(\\[%s\\]\\)" date-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :end -1 :margin 0 :face 'org-date))))
+ (,(format "\\(\\[%s \\)%s\\]" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0 :face 'org-date))))
+ (,(format "\\[%s \\(%s\\]\\)" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0 :face 'org-date))))))
+
+(add-hook! 'org-mode-hook '(svg-tag-mode t))
+
+(setq lsp-enable-symbol-highlighting t
+ lsp-ui-doc-enable t
+ lsp-lens-enable t
+ lsp-headerline-breadcrumb-enable t
+ lsp-modeline-code-actions-enable t
+ lsp-diagnostics-provider :flycheck
+ lsp-ui-sideline-enable t
+ lsp-completion-show-detail t
+ lsp-completion-show-kind t)
-;; COMPANY MODE
(add-hook 'after-init-hook 'global-company-mode)
;; from modules/completion/company/config.el
(use-package! company
@@ -254,21 +227,26 @@
company-dabbrev-ignore-case nil)
[...])
-;; LSP MODE
-(setq lsp-enable-symbol-highlighting t
- lsp-ui-doc-enable t
- lsp-lens-enable t
- lsp-headerline-breadcrumb-enable t
- lsp-modeline-code-actions-enable t
- lsp-diagnostics-provider :flycheck
- lsp-ui-sideline-enable t
- lsp-completion-show-detail t
- lsp-completion-show-kind t)
+(require 'org)
+(add-to-list 'org-latex-packages-alist '("" "amsmath" t))
+(add-to-list 'org-latex-packages-alist '("" "amssymb" t))
+(setq org-preview-latex-default-process 'dvipng)
+
+(map! :leader
+ (:prefix ("e" . "evaluate")
+ :desc "Evaluate elisp in buffer"
+ "b" #'eval-buffer
+ :desc "Evaluate defun"
+ "d" #'eval-defun
+ :desc "Evaluate elisp expression"
+ "e" #'eval-expression
+ :desc "Evaluate last sexpression"
+ "l" #'eval-last-sexp
+ :desc "Evaluate elisp in region"
+ "r" #'eval-region))
-;; JAVA
(after! lsp-mode (require 'lsp-java))
-;; Configure LSP Java
(after! lsp-java
(add-hook 'java-mode-hook #'lsp)
(add-hook 'java-mode-hook
@@ -284,14 +262,12 @@
;; (setq lsp-java-server-install-dir "/bin/jdtls")
;; (setq lsp-java-workspace-dir "~/Projects/java")
-;; Display ansi colour codes
(after! text-mode
(add-hook! 'text-mode-hook
(unless (derived-mode-p 'org-mode)
(with-silent-modifications
(ansi-color-apply-on-region (point-min) (point-max) t)))))
-;; SPOTIFY
(require 'smudge)
(load! "spotify-credentials.el")
(setq smudge-status-location 'modeline)
@@ -340,84 +316,45 @@
:desc "Toggle mute"
"m" #'smudge-controller-voume-mute-unmute))
-;; SVG TAGS
-(require 'svg-tag-mode)
+(setq undo-limit 80000000)
-(defconst date-re "[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}")
-(defconst time-re "[0-9]\\{2\\}:[0-9]\\{2\\}")
-(defconst day-re "[A-Za-z]\\{3\\}")
-(defconst day-time-re (format "\\(%s\\)? ?\\(%s\\)?" day-re time-re))
-
-(defun svg-progress-percent (value)
- (svg-image (svg-lib-concat
- (svg-lib-progress-bar (/ (string-to-number value) 100.0)
- nil :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
- (svg-lib-tag (concat value "%")
- nil :stroke 0 :margin 0)) :ascent 'center))
-
-(defun svg-progress-count (value)
- (let* ((seq (mapcar #'string-to-number (split-string value "/")))
- (count (float (car seq)))
- (total (float (cadr seq))))
- (svg-image (svg-lib-concat
- (svg-lib-progress-bar (/ count total) nil
- :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
- (svg-lib-tag value nil
- :stroke 0 :margin 0)) :ascent 'center)))
+(setq evil-want-fine-undo t)
-(setq svg-tag-tags
- `(
- ;; Org tags :TAG1:TAG2:TAG3:
- (":\\([A-Za-z0-9]+\\)" . ((lambda (tag) (svg-tag-make tag))))
- (":\\([A-Za-z0-9]+[ \-]\\)" . ((lambda (tag) tag)))
-
- ;; Task priority [#A] [#B] [#C]
- ("\\[#[A-Z]\\]" . ( (lambda (tag)
- (svg-tag-make tag :face 'org-priority
- :beg 2 :end -1 :margin 0))))
-
- ;; Progress [1/3]
- ("\\(\\[[0-9]\\{1,3\\}%\\]\\)" . ((lambda (tag)
- (svg-progress-percent (substring tag 1 -2)))))
- ("\\(\\[[0-9]+/[0-9]+\\]\\)" . ((lambda (tag)
- (svg-progress-count (substring tag 1 -1)))))
+(setq org-directory "~/Org"
+ org-use-property-inheritance t ; fix weird issue with src blocks
+ org-startup-with-inline-images t
+ org-startup-with-latex-preview t)
- ;; TODO / DONE
- ("TODO" . ((lambda (tag) (svg-tag-make "TODO" :face 'org-todo :inverse t :margin 0))))
- ("DONE" . ((lambda (tag) (svg-tag-make "DONE" :face 'org-done :margin 0))))
+(after! org
+ (setq org-agenda-files
+ '("~/Org/" "~/Documents/Org/agenda.org")))
- ;; Citation of the form [cite:@Knuth:1984]
- ("\\(\\[cite:@[A-Za-z]+:\\)" . ((lambda (tag)
- (svg-tag-make tag
- :inverse t
- :beg 7 :end -1
- :crop-right t))))
- ("\\[cite:@[A-Za-z]+:\\([0-9]+\\]\\)" . ((lambda (tag)
- (svg-tag-make tag
- :end -1
- :crop-left t))))
+(defun my/babel-ansi ()
+ (when-let ((beg (org-babel-where-is-src-block-result nil nil)))
+ (save-excursion
+ (goto-char beg)
+ (when (looking-at org-babel-result-regexp)
+ (let ((end (org-babel-result-end))
+ (ansi-color-context-region nil))
+ (ansi-color-apply-on-region beg end))))))
+(add-hook 'org-babel-after-execute-hook 'my/babel-ansi)
+(setq org-roam-directory "~/RoamNotes"
+ org-attach-id-dir "attachments/")
- ;; Active date (with or without day name, with or without time) <2021-12-24 Fri 14:00>
- (,(format "\\(<%s>\\)" date-re) .
- ((lambda (tag)
- (svg-tag-make tag :beg 1 :end -1 :margin 0))))
- (,(format "\\(<%s \\)%s>" date-re day-time-re) .
- ((lambda (tag)
- (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0))))
- (,(format "<%s \\(%s>\\)" date-re day-time-re) .
- ((lambda (tag)
- (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0))))
+(use-package! websocket
+ :after org-roam)
- ;; Inactive date (with or without day name, with or without time) [2021-12-24 Fri 14:00]
- (,(format "\\(\\[%s\\]\\)" date-re) .
- ((lambda (tag)
- (svg-tag-make tag :beg 1 :end -1 :margin 0 :face 'org-date))))
- (,(format "\\(\\[%s \\)%s\\]" date-re day-time-re) .
- ((lambda (tag)
- (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0 :face 'org-date))))
- (,(format "\\[%s \\(%s\\]\\)" date-re day-time-re) .
- ((lambda (tag)
- (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0 :face 'org-date))))))
+(use-package! org-roam-ui
+ :after org-roam ;; or :after org
+ ;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
+ ;; a hookable mode anymore, you're advised to pick something yourself
+ ;; if you don't care about startup time, use
+ ;; :hook (after-init . org-roam-ui-mode)
+ :config
+ (setq org-roam-ui-sync-theme t
+ org-roam-ui-follow t
+ org-roam-ui-update-on-save t
+ org-roam-ui-open-on-start t))
-(add-hook! 'org-mode-hook '(svg-tag-mode t))
+(setq org-roam-database-connector 'sqlite3)
diff --git a/.config/doom/config.org b/.config/doom/config.org
@@ -0,0 +1,576 @@
+#+title: Doom Emacs Config
+#+author: Michael Neuper
+ __ __ _ _
+| \/ | \ | |
+| \ / | \| | Michael Neuper
+| |\/| | . ` | https://michaelneuper.com
+| | | | |\ | https://github.com/michaelneuper
+|_| |_|_| \_|
+
+* Doom
+Whenever you reconfigure a package, make sure to wrap your config in an
+`after!' block, otherwise Doom's defaults may override your settings. E.g.
+
+ (after! PACKAGE
+ (setq x y))
+
+The exceptions to this rule:
+ - Setting file/directory variables (like `org-directory')
+ - Setting variables which explicitly tell you to set them before their
+ package is loaded (see 'C-h v VARIABLE' to look up their documentation).
+ - Setting doom variables (which start with 'doom-' or '+').
+
+Here are some additional functions/macros that will help you configure Doom.
+
+- `load!' for loading external *.el files relative to this one
+- `use-package!' for configuring packages
+- `after!' for running code after a package has loaded
+- `add-load-path!' for adding directories to the `load-path', relative to
+ this file. Emacs searches the `load-path' when you load packages with
+ `require' or `use-package'.
+- `map!' for binding new keys
+
+To get information about any of these functions/macros, move the cursor over
+the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
+This will open documentation for it, including demos of how they are used.
+Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
+etc).
+
+You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
+they are implemented.
+
+* Configuration
+** Theme
+Use doom-one theme.
+
+#+begin_src emacs-lisp
+(setq doom-theme 'doom-one)
+#+end_src
+
+** Local Leader Key
+Remap <localleader> from m to l to avoid conflict with spotify bindings.
+
+#+begin_src emacs-lisp
+(setq doom-localleader-key "SPC l"
+ doom-localleader-alt-key "M-SPC l")
+#+end_src
+
+** Faces
+#+begin_src emacs-lisp
+(custom-set-faces!
+ '(doom-dashboard-banner :inherit default)
+ '(doom-dashboard-loaded :inherit default))
+
+(custom-set-faces!
+ '(dashboard-startup-banner :inherit default))
+#+end_src
+
+** Line Numbers
+Use visual line numbers to avoid wrong line numbers in folded content.
+
+#+begin_src emacs-lisp
+(setq display-line-numbers-type 'visual)
+#+end_src
+
+** Column Indicator
+Display column indicator after 80 characters in programming mode.
+
+#+begin_src emacs-lisp
+(setq display-fill-column-indicator-column 80)
+(add-hook 'prog-mode-hook #'display-fill-column-indicator-mode)
+#+end_src
+
+** Auto-Save and Backup
+#+begin_src emacs-lisp
+;; (setq auto-save-default t
+;; make-backup-files t)
+#+end_src
+
+** Confirm Kill Emacs
+Kill emacs without confirming.
+
+#+begin_src emacs-lisp
+(setq confirm-kill-emacs nil)
+#+end_src
+
+** Pixel Scroll
+Enable pixel precision scrolling.
+
+#+begin_src emacs-lisp
+(when (version< "29.0.50" emacs-version)
+ (pixel-scroll-precision-mode))
+#+end_src
+
+Enable smooth scrolling
+
+#+begin_src emacs-lisp
+;; (unless (eq system-type 'darwin)
+;; (require 'good-scroll)
+;; (good-scroll-mode 1))
+#+end_src
+
+** Credentials
+#+begin_src emacs-lisp
+(setq user-full-name "Michael Neuper"
+ user-mail-address "michael@michaelneuper.com")
+#+end_src
+
+** Fonts
+Set doom fonts.
+
+#+begin_src emacs-lisp
+(setq doom-font (font-spec :family "Fira Code" :size 12.5)
+ doom-variable-pitch-font (font-spec :family "Noto Sans" :size 15))
+#+end_src
+
+Italicize comments.
+
+#+begin_src emacs-lisp
+(after! doom-themes
+ (setq doom-themes-enable-bold t
+ doom-themes-enable-italic t))
+
+(custom-set-faces!
+ '(font-lock-comment-face :slant italic)
+ '(font-lock-keyword-face :slant italic))
+#+end_src
+
+Disable certain ligatures.
+
+#+begin_src emacs-lisp
+(plist-put! +ligatures-extra-symbols
+ :and nil
+ :or nil
+ :not nil
+ :true nil
+ :false nil
+ :int nil
+ :float nil
+ :str nil
+ :bool nil
+ :list nil
+ )
+#+end_src
+
+* Window Management
+** Split Window Behaviour
+Window split behaviour.
+
+#+begin_src emacs-lisp
+(setq evil-split-window-below t
+ evil-vsplit-window-right t)
+#+end_src
+
+** Prompt for Buffers
+Ask what buffer to switch to when doing a split.
+
+#+begin_src emacs-lisp
+(defadvice! prompt-for-buffers (&rest _)
+ :after '(evil-window-split evil-window-vsplit)
+ (consult-buffer))
+#+end_src
+
+* Interface
+** Dashboard
+Switch to dashboard from doom-dashboard.
+
+#+begin_src emacs-lisp
+(setq doom-fallback-buffer-name "*dashboard*")
+#+end_src
+
+Configure dashboard
+
+#+begin_src emacs-lisp
+(use-package! dashboard
+ :ensure t
+ :init
+ (setq dashboard-items '((recents . 3)
+ (projects . 3)
+ (bookmarks . 5))
+ dashboard-show-shortcuts t
+ dashboard-center-content t
+ dashboard-startup-banner (concat doom-user-dir
+ "doom-banners/splashes/emacs/M-x_butterfly.png")
+ dashboard-banner-logo-title "Welcome back to Emacs!"
+ dashboard-display-icons-p t
+ dashboard-set-file-icons t
+ dashboard-set-heading-icons t
+ dashboard-set-navigator t)
+ ;; Format: "(icon title help action face prefix suffix)"
+ (setq dashboard-navigator-buttons
+ `(;; line 1
+ ((,(all-the-icons-octicon "mark-github" :height 1.0 :v-adjust 0.0)
+ "GitHub"
+ "Browse GitHub"
+ (lambda (&rest _) (browse-url "https://github.com/michaelneuper"))))
+ (;; line 2
+ (,(all-the-icons-faicon "calendar" :height 1.0 :v-adjust 0.0)
+ "Agenda"
+ "View org-agenda"
+ (lambda (&rest _) (org-agenda)) warning)
+ (,(all-the-icons-octicon "book" :height 1.0 :v-adjust 0.0)
+ "Docs"
+ "Show documentation"
+ (lambda (&rest _) (doom/help)) warning))))
+ :config
+ (dashboard-setup-startup-hook))
+#+end_src
+
+** Info-Colors
+#+begin_src emacs-lisp
+(use-package! info-colors
+ :commands (info-colors-fontify-node))
+
+(add-hook 'Info-selection-hook
+ 'info-colors-fontify-node)
+#+end_src
+
+** Modeline
+Enable nyan-cat in modeline.
+
+#+begin_src emacs-lisp
+(nyan-mode)
+(setq nyan-animate-nyancat t
+ nyan-wavy-trail t)
+#+end_src
+
+Enable extra icons in doom-modeline.
+
+#+begin_src emacs-lisp
+(setq doom-modeline-enable-word-count t
+ doom-modeline-persp-name t
+ doom-modeline-persp-icon t
+ doom-modeline-major-mode-icon t)
+#+end_src
+
+** Tabs
+#+begin_src emacs-lisp
+(after! centaur-tabs
+ :ensure t
+ :config
+ (setq centaur-tabs-style "bar"
+ centaur-tabs-set-bar 'left
+ centaur-tabs-height 32
+ centaur-tabs-set-icons t
+ centaur-tabs-gray-out-icons 'buffer)
+ (centaur-tabs-headline-match)
+ (centaur-tabs-mode t)
+ (centaur-tabs-group-by-projectile-project))
+#+end_src
+** SVG Tags
+Enable SVG tags in org mode.
+
+#+begin_src emacs-lisp
+(require 'svg-tag-mode)
+
+(defconst date-re "[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}")
+(defconst time-re "[0-9]\\{2\\}:[0-9]\\{2\\}")
+(defconst day-re "[A-Za-z]\\{3\\}")
+(defconst day-time-re (format "\\(%s\\)? ?\\(%s\\)?" day-re time-re))
+
+(defun svg-progress-percent (value)
+ (svg-image (svg-lib-concat
+ (svg-lib-progress-bar (/ (string-to-number value) 100.0)
+ nil :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
+ (svg-lib-tag (concat value "%")
+ nil :stroke 0 :margin 0)) :ascent 'center))
+
+(defun svg-progress-count (value)
+ (let* ((seq (mapcar #'string-to-number (split-string value "/")))
+ (count (float (car seq)))
+ (total (float (cadr seq))))
+ (svg-image (svg-lib-concat
+ (svg-lib-progress-bar (/ count total) nil
+ :margin 0 :stroke 2 :radius 3 :padding 2 :width 11)
+ (svg-lib-tag value nil
+ :stroke 0 :margin 0)) :ascent 'center)))
+
+(setq svg-tag-tags
+ `(
+ ;; Org tags :TAG1:TAG2:TAG3:
+ (":\\([A-Za-z0-9]+\\)" . ((lambda (tag) (svg-tag-make tag))))
+ (":\\([A-Za-z0-9]+[ \-]\\)" . ((lambda (tag) tag)))
+
+ ;; Task priority [#A] [#B] [#C]
+ ("\\[#[A-Z]\\]" . ( (lambda (tag)
+ (svg-tag-make tag :face 'org-priority
+ :beg 2 :end -1 :margin 0))))
+
+ ;; Progress [1/3]
+ ("\\(\\[[0-9]\\{1,3\\}%\\]\\)" . ((lambda (tag)
+ (svg-progress-percent (substring tag 1 -2)))))
+ ("\\(\\[[0-9]+/[0-9]+\\]\\)" . ((lambda (tag)
+ (svg-progress-count (substring tag 1 -1)))))
+
+ ;; TODO / DONE
+ ("TODO" . ((lambda (tag) (svg-tag-make "TODO" :face 'org-todo :inverse t :margin 0))))
+ ("DONE" . ((lambda (tag) (svg-tag-make "DONE" :face 'org-done :margin 0))))
+
+ ;; Citation of the form [cite:@Knuth:1984]
+ ("\\(\\[cite:@[A-Za-z]+:\\)" . ((lambda (tag)
+ (svg-tag-make tag
+ :inverse t
+ :beg 7 :end -1
+ :crop-right t))))
+ ("\\[cite:@[A-Za-z]+:\\([0-9]+\\]\\)" . ((lambda (tag)
+ (svg-tag-make tag
+ :end -1
+ :crop-left t))))
+
+
+ ;; Active date (with or without day name, with or without time) <2021-12-24 Fri 14:00>
+ (,(format "\\(<%s>\\)" date-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :end -1 :margin 0))))
+ (,(format "\\(<%s \\)%s>" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0))))
+ (,(format "<%s \\(%s>\\)" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0))))
+
+ ;; Inactive date (with or without day name, with or without time) [2021-12-24 Fri 14:00]
+ (,(format "\\(\\[%s\\]\\)" date-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :end -1 :margin 0 :face 'org-date))))
+ (,(format "\\(\\[%s \\)%s\\]" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :beg 1 :inverse nil :crop-right t :margin 0 :face 'org-date))))
+ (,(format "\\[%s \\(%s\\]\\)" date-re day-time-re) .
+ ((lambda (tag)
+ (svg-tag-make tag :end -1 :inverse t :crop-left t :margin 0 :face 'org-date))))))
+
+(add-hook! 'org-mode-hook '(svg-tag-mode t))
+#+end_src
+
+* Programming
+** LSP
+#+begin_src emacs-lisp
+(setq lsp-enable-symbol-highlighting t
+ lsp-ui-doc-enable t
+ lsp-lens-enable t
+ lsp-headerline-breadcrumb-enable t
+ lsp-modeline-code-actions-enable t
+ lsp-diagnostics-provider :flycheck
+ lsp-ui-sideline-enable t
+ lsp-completion-show-detail t
+ lsp-completion-show-kind t)
+#+end_src
+
+** Company
+#+begin_src emacs-lisp
+(add-hook 'after-init-hook 'global-company-mode)
+;; from modules/completion/company/config.el
+(use-package! company
+ :commands (company-mode global-company-mode company-complete
+ company-complete-common company-manual-begin company-grab-line)
+ :config
+ (setq company-idle-delay 0.3
+ company-tooltip-limit 10
+ company-dabbrev-downcase nil
+ company-dabbrev-ignore-case nil)
+ [...])
+#+end_src
+
+** Languages
+*** LaTeX
+#+begin_src emacs-lisp
+(require 'org)
+(add-to-list 'org-latex-packages-alist '("" "amsmath" t))
+(add-to-list 'org-latex-packages-alist '("" "amssymb" t))
+(setq org-preview-latex-default-process 'dvipng)
+#+end_src
+
+*** Emacs Lisp
+Set elisp evaluate keybindings.
+
+#+begin_src emacs-lisp
+(map! :leader
+ (:prefix ("e" . "evaluate")
+ :desc "Evaluate elisp in buffer"
+ "b" #'eval-buffer
+ :desc "Evaluate defun"
+ "d" #'eval-defun
+ :desc "Evaluate elisp expression"
+ "e" #'eval-expression
+ :desc "Evaluate last sexpression"
+ "l" #'eval-last-sexp
+ :desc "Evaluate elisp in region"
+ "r" #'eval-region))
+#+end_src
+
+*** Java
+Enable LSP mode for java.
+
+#+begin_src emacs-lisp
+(after! lsp-mode (require 'lsp-java))
+#+end_src
+
+Configure LSP java.
+
+#+begin_src emacs-lisp
+(after! lsp-java
+ (add-hook 'java-mode-hook #'lsp)
+ (add-hook 'java-mode-hook
+ (lambda ()
+ (setq c-basic-offset 4
+ tab-width 4
+ indent-tabs-mode nil))))
+
+(setq lsp-java-format-on-type-enabled nil
+ lsp-java-format-enabled nil)
+;; Set path to the language server executable
+;; (set-lsp-priority! 'eclipse-jdt .80)
+;; (setq lsp-java-server-install-dir "/bin/jdtls")
+;; (setq lsp-java-workspace-dir "~/Projects/java")
+#+end_src
+
+Display ansi colour codes in java output.
+
+#+begin_src emacs-lisp
+(after! text-mode
+ (add-hook! 'text-mode-hook
+ (unless (derived-mode-p 'org-mode)
+ (with-silent-modifications
+ (ansi-color-apply-on-region (point-min) (point-max) t)))))
+#+end_src
+* Spotify
+Enable smudge.
+
+#+begin_src emacs-lisp
+(require 'smudge)
+(load! "spotify-credentials.el")
+(setq smudge-status-location 'modeline)
+#+end_src
+
+Keybindings
+
+#+begin_src emacs-lisp
+(map! :leader
+ (:prefix ("m" . "music")
+ :desc "Toggle shuffle"
+ "s" #'smudge-controller-toggle-shuffle
+ :desc "Toggle repeat"
+ "r" #'smudge-controller-toggle-repeat
+ :desc "Play/pause"
+ "SPC" #'smudge-controller-toggle-play
+ :desc "Next track"
+ "f" #'smudge-controller-next-track
+ :desc "Previous track"
+ "b" #'smudge-controller-previous-track
+ :desc "My playlists"
+ "m" #'smudge-my-playlists
+ :desc "Select playback device"
+ "d" #'smudge-select-device))
+#+end_src
+
+Playlist keybindings.
+
+#+begin_src emacs-lisp
+(map! :leader
+ (:prefix ("m p" . "playlists")
+ :desc "Featured playlists"
+ "f" #'smudge-featured-playlists
+ :desc "Search playlists"
+ "s" #'smudge-playlist-search
+ :desc "Show user's playlists"
+ "u" #'smudge-user-playlists
+ :desc "Create new playlist"
+ "c" #'smudge-create-playlist))
+#+end_src
+
+Track keybindings.
+
+#+begin_src emacs-lisp
+(map! :leader
+ (:prefix ("m t" . "tracks")
+ :desc "List recently played tracks"
+ "r" #'smudge-recently-played
+ :desc "Search for trakcs"
+ "s" #'smudge-track-search))
+#+end_src
+
+Volume keybindings.
+
+#+begin_src emacs-lisp
+(map! :leader
+ (:prefix ("m v" . "volume")
+ :desc "Increase volume"
+ "u" #'smudge-controller-volume-up
+ :desc "Decrease volume"
+ "d" #'smudge-controller-volume-down
+ :desc "Toggle mute"
+ "m" #'smudge-controller-voume-mute-unmute))
+#+end_src
+
+* Evil Mode
+Raise undo limit to 80mb.
+
+#+begin_src emacs-lisp
+(setq undo-limit 80000000)
+#+end_src
+
+Grandular changes when in insert mode
+
+#+begin_src emacs-lisp
+(setq evil-want-fine-undo t)
+#+end_src
+
+* Org
+** Org Mode
+*** View
+#+begin_src emacs-lisp
+(setq org-directory "~/Org"
+ org-use-property-inheritance t ; fix weird issue with src blocks
+ org-startup-with-inline-images t
+ org-startup-with-latex-preview t)
+#+end_src
+
+*** Org Agenda
+#+begin_src emacs-lisp
+(after! org
+ (setq org-agenda-files
+ '("~/Org/" "~/Documents/Org/agenda.org")))
+#+end_src
+
+*** Ansi Colour Codes
+Display ansi colour codes in org babel results.
+
+#+begin_src emacs-lisp
+(defun my/babel-ansi ()
+ (when-let ((beg (org-babel-where-is-src-block-result nil nil)))
+ (save-excursion
+ (goto-char beg)
+ (when (looking-at org-babel-result-regexp)
+ (let ((end (org-babel-result-end))
+ (ansi-color-context-region nil))
+ (ansi-color-apply-on-region beg end))))))
+(add-hook 'org-babel-after-execute-hook 'my/babel-ansi)
+#+end_src
+
+** Org Roam
+*** Roam Directories
+#+begin_src emacs-lisp
+(setq org-roam-directory "~/RoamNotes"
+ org-attach-id-dir "attachments/")
+#+end_src
+
+*** Roam UI
+#+begin_src emacs-lisp
+(use-package! websocket
+ :after org-roam)
+
+(use-package! org-roam-ui
+ :after org-roam ;; or :after org
+ ;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
+ ;; a hookable mode anymore, you're advised to pick something yourself
+ ;; if you don't care about startup time, use
+ ;; :hook (after-init . org-roam-ui-mode)
+ :config
+ (setq org-roam-ui-sync-theme t
+ org-roam-ui-follow t
+ org-roam-ui-update-on-save t
+ org-roam-ui-open-on-start t))
+
+(setq org-roam-database-connector 'sqlite3)
+#+end_src
diff --git a/.config/doom/custom.el b/.config/doom/custom.el
@@ -0,0 +1,15 @@
+(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
+ '("7a424478cb77a96af2c0f50cfb4e2a88647b3ccca225f8c650ed45b7f50d9525" "0c860c4fe9df8cff6484c54d2ae263f19d935e4ff57019999edbda9c7eda50b8" default))
+ '(package-selected-packages '(emacsql-sqlite)))
+(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.
+ '(font-lock-comment-face ((t (:slant italic))))
+ '(font-lock-keyword-face ((t (:slant italic)))))
diff --git a/.config/doom/init.el b/.config/doom/init.el
@@ -226,7 +226,7 @@
;;twitter ; twitter client https://twitter.com/vnought
:config
- ;;literate
+ literate
(default
+bindings
+smartparens))
diff --git a/.config/doom/packages.el b/.config/doom/packages.el
@@ -64,6 +64,7 @@
;; (package! good-scroll)
(package! svg-lib)
(package! svg-tag-mode)
+(package! info-colors)
;; CODE
(package! company-lsp)