|
|
- ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
-
- ;; __ _______ _____ _____
- ;; \ \ / / ____| ____|_ _|
- ;; \ V /| _| | _| | |
- ;; | | | |___| |___ | |
- ;; |_| |_____|_____| |_|
- ;; Yeet's Doom Emacs configuration
-
-
- ;; Global Configuration
- (setq user-full-name "Yigit Colakoglu"
- user-mail-address "yigit@yigitcolakoglu.com")
-
- (setq org-directory "~/Documents/org/")
- (setq org-journal-dir "~/Documents/org/journal/")
- (setq display-line-numbers-type 'relative)
- (setq twittering-allow-insecure-server-cert t)
- (setq org-hugo-base-dir "~/Projects/fr1nge.xyz")
- (setq org-hugo-default-section-directory "~/Projects/fr1nge.xyz")
-
- (setq +ivy-buffer-preview t)
- (global-auto-revert-mode t)
- (global-subword-mode 1) ; Iterate through CamelCase words
-
- (setq-default
- delete-by-moving-to-trash t ; Delete files to trash
- window-combination-resize t ; take new window space from all other windows (not just current)
- x-stretch-cursor t) ; Stretch cursor to the glyph width
-
- (setq undo-limit 80000000 ; Raise undo-limit to 80Mb
- evil-want-fine-undo t ; By default while in insert all changes are one big blob. Be more granular
- auto-save-default t ; Nobody likes to loose work, I certainly don't
- truncate-string-ellipsis "…") ; Unicode ellispis are nicer than "...", and also save /precious/ space
-
-
- ;; Experimental, delete if you don't like it
- (setq evil-vsplit-window-right t
- evil-split-window-below t)
-
- (require 'gas-mode)
- (add-to-list 'auto-mode-alist '("\\.S\\'" . gas-mode))
-
- (require 'bison-mode)
- (after! bison-mode-hook
- (setq imenu-create-index-function
- (lambda ()
- (let ((end))
- (beginning-of-buffer)
- (re-search-forward "^%%")
- (forward-line 1)
- (setq end (save-excursion (re-search-forward "^%%") (point)))
- (loop while (re-search-forward "^\\([a-z].*?\\)\\s-*\n?\\s-*:" end t)
- collect (cons (match-string 1) (point)))))))
-
- (defadvice! prompt-for-buffer (&rest _)
- :after '(evil-window-split evil-window-vsplit)
- (+ivy/switch-buffer))
-
- (use-package! ox-hugo
- :after ox
- )
-
- (use-package! elfeed-org
- :after elfeed
- :config
- (elfeed-org)
- (setq rmh-elfeed-org-files (list "~/.doom.d/elfeed.org"))
- )
-
- (use-package! deft
- :hook deft-mode-hook :init (setq deft-directory org-directory) (setq deft-recursive t)
- )
-
- (use-package! hl-todo
- :hook (prog-mode . hl-todo-mode)
- :config
- (setq hl-todo-keyword-faces
- `(
- ("PROJ" . ,(face-foreground 'error))
- ("SOMEDAY" . ,(face-foreground 'warning))
- ("TODO" . ,(face-foreground 'warning))
- ("PROG" . ,(face-foreground 'error))
- ("NEXT" . ,(face-foreground 'error))
- ("WAIT" . ,(face-foreground 'warning))
- ("CANCEL" . ,(face-foreground 'error))
- ("DELEGATED" . ,(face-foreground 'error))
- ("IDEA" . ,(face-foreground 'warning))
- ("GOAL" . ,(face-foreground 'warning))
- ("DUD" . ,(face-foreground 'error))
- ("RD" . ,(face-foreground 'warning))
- ("RDING" . ,(face-foreground 'warning))
- ("RDNOTE" . ,(face-foreground 'warning))
- ("TMPDROP" . ,(face-foreground 'warning))
- ("DROP" . ,(face-foreground 'error))
- ("FNSHED" . ,(face-foreground 'success))
- ("DONE" . ,(face-foreground 'success)))))
-
- (use-package! engrave-faces-latex
- :after ox-latex)
-
- (use-package! org-ol-tree
- :commands org-ol-tree)
-
- (use-package! org-chef
- :commands (org-chef-insert-recipe org-chef-get-recipe-from-url))
-
- (use-package! org-pretty-table
- :commands (org-pretty-table-mode global-org-pretty-table-mode))
-
- (use-package! aas :commands aas-mode)
-
- (use-package! laas
- :hook (LaTeX-mode . laas-mode)
- :config
- (defun laas-tex-fold-maybe ()
- (unless (equal "/" aas-transient-snippet-key)
- (+latex-fold-last-macro-a)))
- (add-hook 'aas-post-snippet-expand-hook #'laas-tex-fold-maybe))
-
- (use-package! calfw-org
- :after calfw)
-
- (use-package! org-download
- :defer
- :init
- ;; Org download
- (setq-default org-download-image-dir "~/Pictures/org/")
- (setq-default org-download-method 'directory)
- (setq-default org-download-screenshot-method "scrot")
- :config
- (org-download-enable)
- )
-
- (add-hook! 'dired-mode-hook 'org-download-enable)
-
- (use-package! org-agenda
- :defer
- :init
- (setq org-agenda-files (list
- (concat org-directory "projects.org")
- (concat org-directory "monthly_habits.org")
- (concat org-directory "quarterly_habits.org")
- (concat org-directory "personal.org")
- (concat org-directory "taxes.org")
- (concat org-directory "birthdays_and_important_days.org")
- (concat org-directory "reading_list.org")
- (concat org-directory "school.org")
- (concat org-directory "daily_habits.org")
- (concat org-directory "weekly_habits.org")
- (concat org-directory "reflections/2021_refl.org")
- (concat org-directory "someday.org")
- (concat org-directory "projects/2021/")
- org-journal-dir))
-
- :config
- (setq org-habit-show-habits-only-for-today t)
- ;; Org Agenda Files
-
- ;; org agenda
- (setq org-agenda-time-grid
- (quote
- ((daily today remove-match)
- (700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300)
- "......" "----------------")))
- )
-
- (use-package! org-super-agenda
- :after org-agenda
- :init
- ;; for some reason org-agenda evil bindings were being weird with j and k
- (map! :map org-agenda-keymap "j" #'org-agenda-next-line)
- (map! :map org-agenda-mode-map "j" #'org-agenda-next-line)
- (map! :map org-super-agenda-header-map "j" #'org-agenda-next-line)
- (map! :map org-agenda-keymap "k" #'org-agenda-previous-line)
- (map! :map org-agenda-mode-map "k" #'org-agenda-previous-line)
- (map! :map org-super-agenda-header-map "k" #'org-agenda-previous-line)
- (map! :map org-super-agenda-header-map "k" #'org-agenda-previous-line)
- (map! :map org-super-agenda-header-map "k" #'org-agenda-previous-line)
-
- (setq org-agenda-custom-commands '(
- ("r" "Main View"
- ((agenda "" ((org-agenda-span 'day)
- (org-agenda-start-day "+0d")
- (org-agenda-overriding-header "")
- (org-super-agenda-groups
- '((:name "Today"
- :time-grid t
- :date today
- :order 1
- :scheduled today
- :todo "TODAY")))))
- (alltodo "" ((org-agenda-overriding-header "")
- (org-super-agenda-groups
- '(
- (:discard (:habit))
- (:todo "PROJ")
- (:todo "PROG")
- (:todo "NEXT")
- (:todo "WAIT")
- (:todo "RD")
- (:todo "RDING")
- (:todo "RDNOTE")
- (:name "Important" :priority "A")
- (:todo "TODO")
- (:todo "GOAL")
- (:discard (:todo "IDEA"))
- (:discard (:todo "RD"))
- (:discard (:todo "TMPDROP"))
- (:discard (:todo "SOMEDAY"))
- ))))))
-
- ("w" "Someday and Idea"
- ((alltodo "" ((org-agenda-overriding-header "")
- (org-super-agenda-groups
- '(
- (:todo "IDEA")
- (:todo "SOMEDAY")
- (:discard (:todo "PROJ"))
- (:discard (:todo "PROG"))
- (:discard (:todo "NEXT"))
- (:discard (:todo "WAIT"))
- (:discard (:todo "RDNOTE"))
- (:discard (:todo "RD"))
- (:discard (:todo "RDING"))
- (:discard (:todo "TODO"))
- (:discard (:todo "GOAL"))
- )
- )))))))
-
-
- :config
- (org-super-agenda-mode))
-
- ;; Org Roam
- (use-package! org-roam
- :commands (org-roam-insert org-roam-find-file org-roam)
- :init
- (setq org-roam-directory (concat org-directory "roam"))
- (setq org-roam-buffer-width 0.2)
- (map! :leader
- :prefix "n"
- :desc "Org-Roam-Insert" "i" #'org-roam-insert
- :desc "Org-Roam-Find" "/" #'org-roam-find-file
- :desc "Org-Roam-Buffer" "r" #'org-roam)
- )
-
-
- ;; Attempt to remove lag
- (setq key-chord-two-keys-delay 0.7)
-
- (after! org (load! "org-conf.el"))
-
- ;; Better window management
- (map! :map evil-window-map
- "SPC" #'rotate-layout
- ;; Navigation
- "<left>" #'evil-window-left
- "<down>" #'evil-window-down
- "<up>" #'evil-window-up
- "<right>" #'evil-window-right
- ;; Swapping windows
- "C-<left>" #'+evil/window-move-left
- "C-<down>" #'+evil/window-move-down
- "C-<up>" #'+evil/window-move-up
- "C-<right>" #'+evil/window-move-right)
-
- (after! company
- (setq company-idle-delay 0.2
- company-minimum-prefix-length 2))
-
- (after! evil-escape (evil-escape-mode -1))
- (after! evil (setq evil-ex-substitute-global t)) ; I like my s/../.. to by global by default
-
- (setq emojify-emoji-set "twemoji-v2")
-
- (setq-default history-length 1000)
- (setq-default prescient-history-length 1000)
-
- (set-company-backend!
- '(text-mode
- markdown-mode
- gfm-mode)
- '(:seperate
- company-ispell
- company-files
- company-yasnippet))
-
- (setq
- default-directory "~"
- web-mode-markup-indent-offset 4
- ispell-dictionary "en-custom"
- web-mode-code-indent-offset 4
- web-mode-css-indent-offset 4
- js-indent-level 4
- json-reformat:indent-width 4
- prettier-js-args '("--single-quote")
- projectile-project-search-path '("~/Projects/")
- dired-dwim-target t
- nand-hdl-directory "~/Projects/nand2tetris"
- css-indent-offset 2)
-
- (org-babel-do-load-languages
- 'org-babel-load-languages
- '((dot . t))) ;
-
- (setq auth-sources
- '((:source "~/.config/emacs/.authinfo.gpg")))
-
- (defun insert-current-date () (interactive)
- (insert (shell-command-to-string "echo -n $(date +%Y-%m-%d)")))
-
- (defun org-insert-clipboard-image () (interactive)
- (setq name (read-from-minibuffer "Enter image description: "))
- (setq file (concat "./static/" (subst-char-in-string ? ?_ (nth 0 (org-get-outline-path t))) "/" (format-time-string "%Y-%m-%dT%T") "_" (subst-char-in-string ? ?_ name) ".png"))
- (setq return (shell-command-to-string (concat "saveclipimg " file)))
- (insert (concat "[[file:" return"][" name "]]"))
- (org-display-inline-images))
-
- ;; We expect the encoding to be LF UTF-8, so only show the modeline when this is not the case
- (defun doom-modeline-conditional-buffer-encoding ()
- (setq-local doom-modeline-buffer-encoding
- (unless (and (memq (plist-get (coding-system-plist buffer-file-coding-system) :category)
- '(coding-category-undecided coding-category-utf-8))
- (not (memq (coding-system-eol-type buffer-file-coding-system) '(1 2))))
- t)))
-
- (add-hook 'after-change-major-mode-hook #'doom-modeline-conditional-buffer-encoding)
-
-
-
- (map! :ne "M-/" #'comment-or-uncomment-region)
- (map! :ne "SPC / r" #'deadgrep)
- (map! :ne "SPC n b" #'org-brain-visualize)
- (map! :ne "SPC i d" #'insert-current-date)
-
- ;; zoom in/out like we do everywhere else.
- (global-set-key (kbd "C-=") 'text-scale-increase)
- (global-set-key (kbd "C--") 'text-scale-decrease)
- (global-set-key (kbd "<C-wheel-down>") 'text-scale-decrease)
- (global-set-key (kbd "<C-wheel-up>") 'text-scale-increase)
-
- (setq +magit-hub-features t)
-
- (setq calc-angle-mode 'rad ; radians are rad
- calc-symbolic-mode t) ; keeps expressions like \sqrt{2} irrational for as long as possible
-
- (use-package! calctex
- :commands calctex-mode
- :init
- (add-hook 'calc-mode-hook #'calctex-mode)
- :config
- (setq calctex-additional-latex-packages "
- \\usepackage[usenames]{xcolor}
- \\usepackage{soul}
- \\usepackage{adjustbox}
- \\usepackage{amsmath}
- \\usepackage{amssymb}
- \\usepackage{siunitx}
- \\usepackage{cancel}
- \\usepackage{mathtools}
- \\usepackage{mathalpha}
- \\usepackage{xparse}
- \\usepackage{arevmath}"
- calctex-additional-latex-macros
- (concat calctex-additional-latex-macros
- "\n\\let\\evalto\\Rightarrow"))
- (defadvice! no-messaging-a (orig-fn &rest args)
- :around #'calctex-default-dispatching-render-process
- (let ((inhibit-message t) message-log-max)
- (apply orig-fn args)))
- ;; Fix hardcoded dvichop path (whyyyyyyy)
- (let ((vendor-folder (concat (file-truename doom-local-dir)
- "straight/"
- (format "build-%s" emacs-version)
- "/calctex/vendor/")))
- (setq calctex-dvichop-sty (concat vendor-folder "texd/dvichop")
- calctex-dvichop-bin (concat vendor-folder "texd/dvichop")))
- (unless (file-exists-p calctex-dvichop-bin)
- (message "CalcTeX: Building dvichop binary")
- (let ((default-directory (file-name-directory calctex-dvichop-bin)))
- (call-process "make" nil nil nil))))
-
- (defun greedily-do-daemon-setup ()
- (require 'org)
- (when (require 'elfeed nil t)
- (run-at-time nil (* 8 60 60) #'elfeed-update)))
-
- ;; Open new clients in the dashboard
- (when (daemonp)
- (add-hook 'emacs-startup-hook #'greedily-do-daemon-setup)
- (add-hook! 'server-after-make-frame-hook (switch-to-buffer +doom-dashboard-name)))
-
- (set-popup-rule! "^\\*Org Agenda" :side 'bottom :size 0.90 :select t :ttl nil)
- (set-popup-rule! "^\\*org-brain" :side 'right :size 1.00 :select t :ttl nil)
-
- (sp-local-pair
- '(org-mode)
- "<<" ">>"
- :actions '(insert))
-
- (setq +zen-text-scale 0.8)
-
-
- (use-package! lexic
- :commands lexic-search lexic-list-dictionary
- :config
- (map! :map lexic-mode-map
- :n "q" #'lexic-return-from-lexic
- :nv "RET" #'lexic-search-word-at-point
- :n "a" #'outline-show-all
- :n "h" (cmd! (outline-hide-sublevels 3))
- :n "o" #'lexic-toggle-entry
- :n "n" #'lexic-next-entry
- :n "N" (cmd! (lexic-next-entry t))
- :n "p" #'lexic-previous-entry
- :n "P" (cmd! (lexic-previous-entry t))
- :n "E" (cmd! (lexic-return-from-lexic) ; expand
- (switch-to-buffer (lexic-get-buffer)))
- :n "M" (cmd! (lexic-return-from-lexic) ; minimise
- (lexic-goto-lexic))
- :n "C-p" #'lexic-search-history-backwards
- :n "C-n" #'lexic-search-history-forwards
- :n "/" (cmd! (call-interactively #'lexic-search))))
-
- (defadvice! +lookup/dictionary-definition-lexic (identifier &optional arg)
- :override #'+lookup/dictionary-definition
- (interactive
- (list (or (doom-thing-at-point-or-region 'word)
- (read-string "Look up in dictionary: "))
- current-prefix-arg))
- (lexic-search identifier nil nil t))
-
- ;; Hooks
- (add-hook 'nand-hdl-mode-hook 'yas-minor-mode)
-
- (defun after-org-mode-load ()
- (interactive)
- (setq olivetti-body-width 0.8)
- (olivetti-mode)
- )
- (add-hook! 'org-mode-hook 'after-org-mode-load)
-
- ;; Auto-Insert
- (autoload 'yas-expand-snippet "yasnippet")
- (defun my-autoinsert-yas-expand()
- "Replace text in yasnippet template."
- (yas-expand-snippet (buffer-string) (point-min) (point-max)))
-
- (setq-default auto-insert-directory "~/.config/doom/templates")
- (auto-insert-mode 1) ;;; Adds hook to find-files-hook
- (setq-default auto-insert-query nil) ;;; If you don't want to be prompted before insertion
- (define-auto-insert "\\.el$" ["template.el" my-autoinsert-yas-expand])
- (define-auto-insert "\\.c$" ["template.c" my-autoinsert-yas-expand])
- (define-auto-insert "\\.cpp$" ["template.cpp" my-autoinsert-yas-expand])
- (define-auto-insert "\\.h$" ["template.h" my-autoinsert-yas-expand])
- (define-auto-insert "\\.cc$" ["template.cpp" my-autoinsert-yas-expand])
- (define-auto-insert "\\.tex$" ["template.tex" my-autoinsert-yas-expand])
- (define-auto-insert "\\.org$" ["template.org" my-autoinsert-yas-expand])
- (define-auto-insert "\\.py$" ["template.py" my-autoinsert-yas-expand])
- (define-auto-insert "\\.java$" ["template.java" my-autoinsert-yas-expand])
- (define-auto-insert "\\.sh$" ["template.sh" my-autoinsert-yas-expand])
- (define-auto-insert "\\.html$" ["template.html" my-autoinsert-yas-expand])
-
- (setq yas-snippet-dirs
- '("~/.config/doom/snippets"))
-
- ;; Appearance
- (delq! t custom-theme-load-path) ;; Don't prompt on startup
- (setq doom-theme 'doom-material-ocean)
- (setq
- doom-big-font (font-spec :family "CasaydiaCove Nerd Font" :size 22)
- doom-font (font-spec :family "CaskaydiaCove Nerd Font" :size 16)
- doom-variable-pitch-font (font-spec :family "Overpass" :size 16)
- doom-unicode-font (font-spec :family "JuliaMono")
- doom-serif-font (font-spec :family "IBM Plex Mono" :weight 'light))
-
- (setq +doom-dashboard-banner-file (expand-file-name "logo.png" doom-private-dir))
-
- ;; Use xclip globally
- (xclip-mode)
|