From e07d5b61ecd52b110b473925be36ec91f7c09196 Mon Sep 17 00:00:00 2001 From: Magdalena Szweda Date: Mon, 5 Oct 2026 22:04:33 +0200 Subject: Emacs: move emacs into its own seperate repository. --- doom/.config/doom/config.el | 716 --------- doom/.config/doom/config.org | 1604 -------------------- doom/.config/doom/config.org.bak | 1219 --------------- doom/.config/doom/custom.el | 47 - .../2026-09-18-213348_1916x1052_scrot.png | Bin 166487 -> 0 bytes .../.config/doom/extra-themes/evergarden-common.el | 315 ---- .../doom/extra-themes/evergarden-fall-theme.el | 176 --- .../doom/extra-themes/evergarden-spring-theme.el | 176 --- .../doom/extra-themes/evergarden-summer-theme.el | 176 --- doom/.config/doom/extra-themes/evergarden-theme.el | 445 ------ .../doom/extra-themes/evergarden-winter-theme.el | 176 --- .../doom/extra-themes/fortune-gold-theme.el | 499 ------ doom/.config/doom/init.el | 202 --- doom/.config/doom/packages.el | 40 - doom/.config/doom/splash.el | 55 - 15 files changed, 5846 deletions(-) delete mode 100644 doom/.config/doom/config.el delete mode 100644 doom/.config/doom/config.org delete mode 100644 doom/.config/doom/config.org.bak delete mode 100644 doom/.config/doom/custom.el delete mode 100644 doom/.config/doom/extra-themes/2026-09-18-213348_1916x1052_scrot.png delete mode 100644 doom/.config/doom/extra-themes/evergarden-common.el delete mode 100644 doom/.config/doom/extra-themes/evergarden-fall-theme.el delete mode 100644 doom/.config/doom/extra-themes/evergarden-spring-theme.el delete mode 100644 doom/.config/doom/extra-themes/evergarden-summer-theme.el delete mode 100644 doom/.config/doom/extra-themes/evergarden-theme.el delete mode 100644 doom/.config/doom/extra-themes/evergarden-winter-theme.el delete mode 100644 doom/.config/doom/extra-themes/fortune-gold-theme.el delete mode 100644 doom/.config/doom/init.el delete mode 100644 doom/.config/doom/packages.el delete mode 100644 doom/.config/doom/splash.el (limited to 'doom') diff --git a/doom/.config/doom/config.el b/doom/.config/doom/config.el deleted file mode 100644 index 6554431..0000000 --- a/doom/.config/doom/config.el +++ /dev/null @@ -1,716 +0,0 @@ -(load! "splash") -(defun +splash-initial-buffer () - (splash-screen) - (get-buffer "*splash*")) - -(setq doom-fallback-buffer-name "*splash*" ; make the splash screen be un-killable - initial-buffer-choice #'+splash-initial-buffer) ; appear on emacs startup - -(defadvice! +splash-regenerate-if-missing-a (&rest _) - :before #'doom-fallback-buffer - (unless (get-buffer "*splash*") - (splash-screen))) - -(add-to-list 'custom-theme-load-path - "~/.config/doom/extra-themes/") -;; (setq doom-theme 'modus-vivendi) -;; (setq doom-theme 'doric-oak) -(setq doom-theme 'doric-obsidian) -;; (setq doom-theme 'tango) - -(setq custom-safe-themes t) - -(setq doom-font (font-spec :family "Berkeley Mono" :size 13.0)) - -(setq display-line-numbers-type t) - -;; (use-package! mood-line -;; :config -;; (mood-line-mode) -;; :custom -;; (mood-line-glyph-alist mood-line-glyphs-fira-code)) - -(use-package! minions - :config - (minions-mode 1)) - -(defun my/split-window-dynamically () - "Split the selected window, choosing orientation by its shape." - (interactive) - (select-window - (if (> (window-total-width) (* 2 (window-total-height))) - (split-window-right) - (split-window-below)))) - -(map! :leader "w s" #'my/split-window-dynamically) - -(setq scroll-margin 3) - -(use-package! breadcrumb - :defer t - :hook - (prog-mode . breadcrumb-mode) ;; make sure its in programming modes - :config - (breadcrumb-mode 1)) - -(setq +zen-mixed-pitch-modes '()) - -(use-package! vertico-carousel - :config - (vertico-carousel-mode 1)) - -(defun my/hs-eval () - (interactive) - (let* ((src (buffer-file-name)) - (out (file-name-sans-extension src))) - (when (zerop (call-process-shell-command - (format "runghc %s" src) nil "*runghc-output*")) - (let ((buf (make-comint "hs-run" out))) - (display-buffer buf))))) - -(add-hook 'haskell-mode-hook - (lambda () - (local-set-key (kbd "") #'my/hs-eval))) - -(add-to-list 'major-mode-remap-alist '(html-mode . mhtml-ts-mode)) -(add-to-list 'major-mode-remap-alist '(mhtml-mode . mhtml-ts-mode)) - -(add-to-list 'auto-mode-alist '("\\.html?\\'" . mhtml-ts-mode)) -(add-to-list 'major-mode-remap-alist '(html-mode . mhtml-ts-mode)) -(add-to-list 'major-mode-remap-alist '(mhtml-mode . mhtml-ts-mode)) - -(advice-add 'web-mode :around - (lambda (orig &rest args) - (if (or (null buffer-file-name) - (string-match-p "\\.html?\\'" buffer-file-name)) - (mhtml-ts-mode) - (apply orig args)))) - -(use-package! eglot - :hook - (prog-mode . eglot-ensure)) - -(use-package! eglot-booster - :after eglot - :config (eglot-booster-mode)) - -(after! eglot - (cl-defmethod eglot-register-capability - ((_server eglot-lsp-server) - (method (eql workspace/didChangeWatchedFiles)) - _id - &key _watchers) - nil) - -(add-to-list 'eglot-server-programs - '((typescript-ts-mode javascript-mode) - . ("emacs-lsp-booster" "--" "oxlint" "--lsp")))) - -(setq eglot-sync-connect nil - eglot-connect-timeout 60) - -(after! flycheck - (flycheck-define-checker htmlhint - "htmlhint for flycheck" - :command ("htmlhint" "--format" "unix" source) - :error-patterns - ((error - line-start - (file-name) ":" line ":" column ": " - (message) line-end)) - :modes (mhtml-ts-mode)) - -(add-to-list 'flycheck-checkers 'htmlhint) - -(flycheck-add-next-checker - 'javascript-eslint - 'javascript-oxlint) -(flycheck-add-next-checker - 'html-tidy - 'htmlhint) - -(setq flycheck-check-syntax-automatically - '(save mode-enabled))) - -(use-package! apheleia - :hook - (prog-mode . apheleia-mode) - -:config -(setf (alist-get 'oxfmt apheleia-formatters) - '("oxfmt" "--config=.oxfmtrc.json" "--stdin-filepath" filepath)) - -(dolist (mode '(mhtml-ts-mode html-mode mhtml-mode web-mode css-mode)) - (setf (alist-get mode apheleia-mode-alist) 'oxfmt))) - -(add-hook 'mhtml-ts-mode-hook #'apheleia-mode) - -(use-package! pinentry - :config - (pinentry-start)) -(setq epg-pinentry-mode 'loopback) - -(setq auth-sources '("~/.authinfo.gpg")) - -(setq auth-source-cache-expiry nil) - -(setq gnus-permanently-visible-groups ".") - -(evil-set-initial-state 'gnus-browse-mode 'emacs) - -(setq user-mail-address "hi@roughlynamed.net" ; my email - user-full-name "Magdalena Szweda") ; my name - -(setq mml-secure-openpgp-signers - '("B9CF59FE57835F89ECB33FD417CA809770F85511") - mml-secure-openpgp-sign-with-sender t) - -(setq message-signature-file "~/.signature") ; note no trailing slash - -(setq gnus-select-method - '(nnimap "migadu" - (nnimap-address "imap.migadu.com") - (nnimap-server-port 993) - (nnimap-stream ssl))) - -(setq smtpmail-smtp-server "smtp.migadu.com" - smtpmail-smtp-service 465 ; port 465 - smtpmail-stream-type 'ssl - message-send-mail-function #'smtpmail-send-it - ) - -(setq gnus-message-archive-method '(nnimap "migadu") ; use migadu for archiving email - gnus-message-archive-group "Sent") ; where to put sent mail - -(setq gnus-large-newsgroup nil - gnus-fetch-old-headers t - nnmail-expiry-target "Trash") - -(setq gnus-thread-sort-functions - '((not gnus-thread-sort-by-date))) - -(setq gnus-subthread-sort-functions - '((not gnus-thread-sort-by-date))) -(setq gnus-thread-sort-most-recent-first t) - -(setq gnus-always-read-dribble-file nil) - -(add-hook 'message-send-hook #'mml-secure-message-sign-pgpmime) - -(with-eval-after-load "mm-decode" - (add-to-list 'mm-discouraged-alternatives "text/html") - (add-to-list 'mm-discouraged-alternatives "text/richtext")) - -(map! - :leader - :prefix "o" - :desc "Mail" "m" #'gnus) - -(use-package! jabber - :config - -(setq jabber-account-list - '( - ;; ("roughlynamed@yax.im") - ("wildebeest@yax.im"))) - -(jabber-modeline-mode 1) - -:hook -(kill-emacs . jabber-disconnect)) - -(map! :leader - :prefix "j" - :desc "Connect" "c" #'jabber-connect-all - :desc "Disconnect" "q" #'jabber-disconnect - :desc "Dash" "f" #'jabber-roster - :desc "Reply" "r" #'jabber-chat-reply - :desc "New chat" "n" #'jabber-chat-with - :desc "Set status" "s" #'jabber-send-presence) - -(add-to-list 'load-path "/home/hi/.config/doom/") -(use-package! emms -:commands (emms emms-browser emms-player-mpd-update-all emms-cache-set-from-mpd-all emms emms-pause emms-next emms-previous emms-stop - emms-random emms-add-directory-tree emms-play-playlist) - -:init -(map! :leader - (:prefix ("e" . "emms") - :desc "Browser" "b" #'emms-browser - :desc "Emms" "e" #'emms - :desc "Play/pause" "SPC" #'emms-pause - :desc "Next" "n" #'emms-next - :desc "Previous" "p" #'emms-previous - :desc "Stop" "s" #'emms-stop - :desc "Add" "a" #'emms-add-playlist - :desc "Clear" "c" #'emms-playlist-clear)) - -:config -(require 'emms-setup) - -(emms-all) - -(require 'emms-player-xmms2) -(setq - emms-player-list '(emms-player-xmms2) - -emms-lyrics-scroll-p nil -emms-lyrics-display-on-minibuffer t -emms-lyrics-display-on-modeline nil - -emms-player-mpd-music-directory "~/Music" -emms-source-file-default-directory (expand-file-name "~/Music/playlists/") - -emms-repeat-playlist t - -emms-cache-file (concat doom-cache-dir "emms-cache")) - -(emms-mode-line-mode 1) - -(emms-playing-time-mode 1) - -(map! :map emms-browser-mode-map - :n "RET" #'emms-browser-add-tracks-and-play)) - -(map! - :leader - :prefix "v" - :desc "vc-edit-next-command" "!" #'vc-edit-next-command - :desc "diff-hl-show-hunk" "*" #'diff-hl-show-hunk - :desc "vc-update" "+" #'vc-update - :desc "diff-hl-goto-hunk" "=" #'diff-hl-diff-goto-hunk - :desc "vc-revert" "@" #'vc-revert - :desc "vc-update-change-log" "a" #'vc-update-change-log - ;; ADD b BINDINGS (branch) - :desc "vc-dir" "d" #'vc-dir - :desc "vc-root-diff" "D" #'vc-root-diff - ;; ADD E BINDINGS - :desc "annotate" "g" #'vc-annotate - :desc "ignore" "G" #'vc-ignore - :desc "region history" "h" #'vc-region-history - :desc "register" "i" #'vc-register - :desc "root log incoming" "I" #'vc-root-log-incoming - :desc "print log" "l" #'vc-print-log - :desc "print root log" "L" #'vc-print-root-log - :desc "merge" "m" #'vc-merge - ;; ADD M BINDINGS - :desc "diff revert hunk" "n" #'diff-hl-revert-hunk - :desc "root log outgoing" "O" #'vc-root-log-outgoing - :desc "push" "p" #'vc-push ; originally P - :desc "retrieve tag" "r" #'vc-retrieve-tag - :desc "rename file" "R" #'vc-rename-file - :desc "create tag" "s" #'vc-create-tag - :desc "stage dwim (diff hl)" "S" #'diff-hl-stage-dwim - ;; ADD T BINDINGS - :desc "vc revert" "u" #'vc-revert ; carried over from the original bindings (repeated by @) - :desc "vc next action" "v" #'vc-next-action ; run the next logical action - ;; ADD w BINDINGS - :desc "revision other window" "~" #'vc-revision-other-window) - -(use-package! vc-jj) - -(after! vc-jj - (defvar my/vc-jj-advance-to nil) - - (defun my/vc-jj-bookmark-advance (&optional names) - "Advance the closest bookmarks (or just NAMES) forward." - (interactive - (when current-prefix-arg - (list (completing-read-multiple - "Advance bookmarks: " - (vc-jj--process-lines - nil "bookmark" "list" - "-T" "if(!self.remote(), self.name() ++ '\n')"))))) - (with-temp-buffer - (let ((status (apply #'vc-jj--call nil t "bookmark" "advance" - (append (when my/vc-jj-advance-to - (list "--to" my/vc-jj-advance-to)) - names)))) - (message "vc-jj: %s" (string-trim (buffer-string))) - status))) - - (defun my/vc-jj--advance-before-push (&rest _) - (my/vc-jj-bookmark-advance)) - (advice-add 'vc-jj-push :before #'my/vc-jj--advance-before-push) - (setq my/vc-jj-advance-to "@-") - - (defun my/vc-jj-checkin (files comment &optional _rev) - "Describe @ and start a fresh change." - (let ((default-directory (vc-jj-root (car files)))) - (vc-jj-modify-change-comment nil "@" comment) - (vc-jj--command-dispatched nil 0 nil "new" "--quiet"))) - (advice-add 'vc-jj-checkin :override #'my/vc-jj-checkin)) - -(after! vc-jj - (add-to-list 'display-buffer-alist - '("\\`\\*vc-jj : " - (display-buffer-no-window) - (allow-no-window . t))) - - (defun my/vc-jj--report-push (&rest _) - (when-let* ((root (vc-jj-root default-directory)) - (buf (get-buffer (format "*vc-jj : %s*" (expand-file-name root)))) - (proc (get-buffer-process buf))) - (add-function - :around (process-sentinel proc) - (lambda (orig p event) - (unwind-protect (funcall orig p event) - (when (memq (process-status p) '(exit signal)) - (if (zerop (process-exit-status p)) - (message "vc-jj: push done") - (message "vc-jj: push FAILED, output below") - (let ((display-buffer-alist nil)) - (pop-to-buffer buf))))))))) - (defvar vc--inhibit-async-window) - - (defun my/vc-jj--push-no-window (orig &rest args) - (let ((vc--inhibit-async-window t)) - (apply orig args))) - - (advice-add 'vc-jj-push :around #'my/vc-jj--push-no-window) - (advice-add 'vc-jj-push :after #'my/vc-jj--report-push) - (define-advice ansi-color-filter-region (:around (fn &rest args) my/vc-jj-writable) - (let ((inhibit-read-only (or inhibit-read-only - (string-prefix-p "*vc-jj" (buffer-name))))) - (apply fn args)))) - -(setq org-directory "~/org/") -(setq org-agenda-files "~/org/todo.org") - -(after! org - (setq - org-startup-folded t ; fold headers on startup - org-pretty-entities t - org-hide-emphasis-markers t - org-auto-align-tags nil - org-tags-column 0 - org-catch-invisible-edits 'show-and-error - org-agenda-tags-column 0 - org-capture-templates-contexts nil - org-insert-heading-respect-content t - org-special-ctrl-a/e t - org-return-follows-link t - -org-confirm-babel-evaluate nil) -(org-babel-do-load-languages - 'org-babel-load-languages - '((emacs-lisp . t) - (python . t) - (C . t) - (lisp . t)))) - -(use-package! poly-org - :hook (org-mode . poly-org-mode)) - -(add-hook 'org-src-mode-hook #'eglot-ensure) - -(setq org-element-use-cache nil) - -(add-hook 'org-capture-mode-hook #'delete-other-windows) -(add-hook 'org-capture-mode-hook - (lambda () (set-window-dedicated-p (selected-window) nil))) - -(after! org-roam - (setq org-roam-directory (file-truename "~/org/")) - -(org-roam-db-autosync-mode) - -(defun my/org-roam-short-id () - (let ((chars "abcdefghijklmnopqrstuvwxyz0123456789")) - (apply #'string - (cl-loop repeat 4 - collect (aref chars (random (length chars))))))) - -(setq org-roam-capture-templates - '(("d" "default" plain - "* %?" - :if-new - -(file+head - (lambda () (concat (my/org-roam-short-id) ".org")) - "#+TITLE: %^{title|Untitled}\n#+FILETAGS: :%^{tags}:\n\n") ; title&tags - :unnarrowed t))) - -(cl-defmethod org-roam-node-file-stem ((node org-roam-node)) - (file-name-base (org-roam-node-file node))) - -(setq org-roam-node-display-template - (concat "${title:*} " (propertize "${file-stem}" 'face 'org-tag))) - -(setq org-roam-mode-sections - '(org-roam-backlinks-section - org-roam-reflinks-section - org-roam-unlinked-references-section)) - -(defun my/org-roam-check-self-link () - (when-let* ((node (org-roam-node-at-point)) - (id (org-roam-node-id node))) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward org-link-any-re nil t) - (when (string-match-p (regexp-quote id) (match-string 0)) - (message "Warning: self-link detected")))))) - -(defun my/org-roam-check-dead-links () - (dolist (link (org-roam-db-query - [:select [dest] :from links - :where (= source $s1)] (org-roam-id-at-point))) - (unless (org-roam-db-query [:select id :from nodes :where (= id $s1)] (car link)) - (message "Error: dead link to %s" (car link))))) - -(add-hook 'before-save-hook - (lambda () - (when (org-roam-file-p) - (my/org-roam-check-self-link) - (my/org-roam-check-dead-links))) - nil t) - -(map! - :leader - :prefix ("n r" . "roam") - :desc "Find node" "f" #'org-roam-node-find ; 'zk edit -i' equivalent - :desc "Insert node" "i" #'org-roam-node-insert ; link a note - :desc "Backlinks" "b" #'org-roam-buffer-toggle - :desc "Capture" "c" #'org-roam-capture ; make a new note - -:desc "Graph" "g" #'org-roam-graph ; graph of every note - -:desc "Random node" "r" #'org-roam-node-random ; random node -:desc "Open link" "o" #'org-open-at-point ; open linked note under cursor -:desc "Jump back" "O" #'org-mark-ring-goto)) ; jump back to previous note after SPC n r o - -(with-eval-after-load 'ox-html - (setq org-html-xml-declaration nil - org-html-doctype "html5" - org-html-html5-fancy t - -org-html-head-include-default-style nil - -org-html-postamble nil)) - -(use-package! websocket :after org-roam) - -(use-package! org-roam-ui - :after org-roam - :config - (setq org-roam-ui-sync-theme t ; use emacs theme - org-roam-ui-follow t - org-roam-ui-update-on-save t ; update when a org roam file is saved - )) - -(use-package! org-appear - :hook (org-mode . org-appear-mode) - :config - (setq org-appear-autoemphasis t - org-appear-autolinks t - org-appear-autosubmarkers t - org-appear-autoentities t)) - -(use-package! org-modern-indent - :defer t - :hook (org-mode . org-modern-indent-mode)) - -(setq eww-search-prefix "https://ecosia.org/search?q=") - -(setq eww-download-directory (expand-file-name "~/Downloads/")) - -(defun my-browse-url-mpv (url &rest _args) - "Open URL in mpv." - (start-process "mpv" nil "mpv" url)) - -(defun my-browse-url-pdf (url &rest _args) - "Fetch remote PDF and open in pdf-tools within Emacs." - (let ((tmp (make-temp-file "emacs-pdf-" nil ".pdf"))) - (url-copy-file url tmp t) - (find-file-other-window tmp) - (pdf-view-mode))) - -(defun my/eww-download-image-at-point () - (interactive) - (let ((url (or (get-text-property (point) 'image-url) - (get-text-property (point) 'shr-url)))) - (if (not url) - (message "No image at point") - (let* ((filename (file-name-nondirectory (url-filename (url-generic-parse-url url)))) - (dest (expand-file-name filename eww-download-directory))) - (url-copy-file url dest t) - (message "Saved: %s" dest))))) - -(setq browse-url-handlers - '(("\\(youtube\\.com\\|youtu\\.be\\|vimeo\\.com\\|twitch\\.tv\\)" . my-browse-url-mpv) - ("\\.mp4$" . my-browse-url-mpv) - ("\\.pdf$" . my-browse-url-pdf) - ("^gemini://" . elpher-browse-url-elpher) - ("^gopher://" . elpher-browse-url-elpher) - ("." . eww-browse-url))) - -(setq browse-url-secondary-browser-function 'browse-url-generic - browse-url-generic-program "vivaldi") - -(setq shr-width 100) -(setq shr-max-width 120) -(setq shr-indentation 4) -(setq shr-use-fonts nil) -(setq shr-max-image-size '(800 . 600)) -(setq shr-image-animate t) - -(add-hook 'eww-after-render-hook #'eww-readable) - -(with-eval-after-load 'eww - (define-key eww-mode-map (kbd "=") #'text-scale-increase) - (define-key eww-mode-map (kbd "-") #'text-scale-decrease) - (define-key eww-mode-map (kbd "0") #'text-scale-adjust) - (define-key eww-mode-map (kbd "b") #'eww-back-url) - (define-key eww-mode-map (kbd "a") #'eww-add-bookmark) - (define-key eww-mode-map (kbd "U") #'shr-copy-url) - (define-key eww-mode-map (kbd "D") #'my/eww-download-image-at-point) - (evil-define-key 'normal eww-mode-map - "b" #'eww-back-url - "a" #'eww-add-bookmark - "U" #'shr-copy-url - "D" #'my/eww-download-image-at-point)) - -(provide 'browser) - -(use-package! elpher) - -(map! - :leader - :prefix "o g" - :desc "Elpher" "e" #'elpher - :desc "Browse Elpher" "b" #'elpher-browse-url-elpher) - -(map! - :leader - :prefix "o" - :desc "Woman" "w" #'woman) - -(map! - :leader - :prefix ("d" . "dired") - :desc "Dired" "d" #'dired - :desc "Dired here" "h" #'dired-jump) - -(use-package! eat - :defer t) - -(map! - :leader - :prefix "o" - :desc "Open Eat" "e" #'eat-other-window) ; dont steal the current window - -(use-package! nov - :mode ("\\.epub\\'" . nov-mode) - :config - (setq nov-text-width 80 - nov-variable-pitch t) - (add-hook 'nov-mode-hook - (lambda () - (face-remap-add-relative 'variable-pitch - :family "Georgia" :height 1.3))) ; different font for reading - (add-hook 'nov-mode-hook #'writeroom-mode) ; center text & stuff - -(map! :map nov-mode-map - :n "i" #'nov-scroll-up ; scroll roughly a page up - :n "e" #'nov-scroll-down ; scroll roughly a page down - :n "]" #'nov-next-document - :n "[" #'nov-previous-document - :n "t" #'nov-goto-toc)) - -(with-eval-after-load 'tramp - (add-to-list 'tramp-methods - '("doas" - (tramp-login-program "doas") - (tramp-login-args (("-u" "%u") ("-s"))) - (tramp-remote-shell "/bin/sh") - (tramp-remote-shell-args ("-c")) - (tramp-connection-timeout 10)))) - -(remove-hook 'doom-first-input-hook #'evil-snipe-mode) - -(use-package lispyville - :init - (general-add-hook '(emacs-lisp-mode-hook lisp-mode-hook) #'lispyville-mode) ;; lispy lisps - :config - (lispyville-set-key-theme '(operators c-w additional))) - -(after! evil-org - (evil-define-key 'normal evil-org-mode-map - "o" #'evil-forward-char)) - -(evil-define-key '(normal visual operator) 'global - "n" 'evil-backward-char - "e" 'evil-next-line - "i" 'evil-previous-line - "o" 'evil-forward-char) - -(evil-define-key '(normal visual operator) 'global - "l" 'evil-backward-word-begin - "L" 'evil-backward-WORD-begin - "u" 'evil-forward-word-end - "U" 'evil-forward-WORD-end - "y" 'evil-forward-word-begin - "Y" 'evil-forward-WORD-begin) - -(with-eval-after-load 'evil-ex - (define-key evil-ex-completion-map (kbd "C-l") 'left-word) - (define-key evil-ex-completion-map (kbd "C-y") 'right-word)) - -(evil-define-key 'normal 'global - "s" 'evil-insert - "S" 'evil-insert-line - "t" 'evil-append - "T" 'evil-append-line - "h" 'evil-open-below - "H" 'evil-open-above) - -(evil-define-key '(normal visual) 'global - "w" 'evil-change - "W" 'evil-change-line) - -(evil-define-key 'normal 'global - "x" 'evil-delete-char - "c" 'evil-yank - "v" 'evil-paste-after - "X" 'evil-delete-line - "C" 'evil-yank-line - "V" 'evil-paste-before) - -(evil-define-key 'visual 'global - "x" 'evil-delete - "c" 'evil-yank - "v" 'evil-paste-after) - -(evil-define-key 'normal 'global - "z" 'evil-undo - "Z" 'evil-redo) - -(evil-define-key 'normal 'global - "a" 'evil-visual-char - "A" 'evil-visual-line - "ga" 'evil-visual-restore) - -(evil-define-key '(normal visual operator) 'global - "p" 'evil-find-char-to - "P" 'evil-find-char-to-backward - "b" 'evil-repeat-find-char - "B" 'evil-repeat-find-char-reverse - "k" 'evil-search-next - "K" 'evil-search-previous) - -(with-eval-after-load 'evil - (evil-define-key '(operator visual) 'global "r" evil-inner-text-objects-map)) - -(define-prefix-command 'my-colemak-fold-map) -(evil-define-key '(normal visual) 'global "j" 'my-colemak-fold-map) -(define-key my-colemak-fold-map "j" 'evil-scroll-line-to-center) -(define-key my-colemak-fold-map "n" 'evil-scroll-line-to-top) -(define-key my-colemak-fold-map "e" 'evil-scroll-line-to-bottom) - -(evil-define-key 'normal 'global - "gK" 'evil-lookup) - -(map! :n "SPC w n" #'evil-window-left - :n "SPC w e" #'evil-window-down - :n "SPC w i" #'evil-window-up - :n "SPC w o" #'evil-window-right) diff --git a/doom/.config/doom/config.org b/doom/.config/doom/config.org deleted file mode 100644 index 28d95bb..0000000 --- a/doom/.config/doom/config.org +++ /dev/null @@ -1,1604 +0,0 @@ -#+TITLE: Literate DOOM Emacs configuration -#+begin_src emacs-lisp :tangle ~/.config/doom/emms-player-xmms2.el -;;; emms-player-xmms2.el --- XMMS2 player for EMMS -*- lexical-binding: t; -*- - -Emacs is a great operating system. -But every operating system has 1 essential line of code. -For us, this line of code is... (drumroll please) -#+begin_src emacs-lisp - ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- -#+end_src - -Almost every ~(use-package!)~ block in this literate configuration has a ~(package!)~ block before it, which is tangled into ~$DOOMDIR/packages.el~. This is how Doom Emacs installs it's packages. - - -* TODO Splash screen - -Here we load a custom splash screen. -I still have to put the splash screen source in this org file, but that'll come later -#+begin_src emacs-lisp -(load! "splash") -(defun +splash-initial-buffer () - (splash-screen) - (get-buffer "*splash*")) - -(setq doom-fallback-buffer-name "*splash*" ; make the splash screen be un-killable - initial-buffer-choice #'+splash-initial-buffer) ; appear on emacs startup - -(defadvice! +splash-regenerate-if-missing-a (&rest _) - :before #'doom-fallback-buffer - (unless (get-buffer "*splash*") - (splash-screen))) -#+end_src -The splash screen doesnt do much, it prints the emacs version and a warranty notice and whatnot. i like it tho! - -* UI -~How Emacs looks!~ -** Theme -Load the directory with additional, local themes -This currently mostly loads the emacs port of the Evergarden theme (made by me!) -at [[https://git.roughlynamed.net/evergarden.git][git.roughlynamed/net/evergarden.git]], also the fortune-gold theme. -The reason i use modus-vivendi instead of my evergarden port is because i dont like evergarden (dont tell the devs though!), seeing it not have an emacs port just made me sad. - -For this to work, we need modus & ef themes installed. -Doric themes are also nice. -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -(package! modus-themes) -(package! ef-themes) -(package! doric-themes) -#+end_src - -#+begin_src emacs-lisp -(add-to-list 'custom-theme-load-path - "~/.config/doom/extra-themes/") -;; (setq doom-theme 'modus-vivendi) -;; (setq doom-theme 'doric-oak) -(setq doom-theme 'doric-obsidian) -;; (setq doom-theme 'tango) -#+end_src - -By default, Emacs prompts 2 times when loading a theme, this is annoying so im getting rid of it. -#+begin_src emacs-lisp -(setq custom-safe-themes t) -#+end_src -** Font -I use the completely not pirated ~Berkeley Mono~ font. I really like it. -Sometimes i will use the Commit mono or Cozette! (sometimes!) -#+begin_src emacs-lisp -(setq doom-font (font-spec :family "Berkeley Mono" :size 13.0)) -#+end_src - -Line numbers! And not relative! -I dont like rln, i just dont -#+begin_src emacs-lisp -(setq display-line-numbers-type t) -#+end_src -** Modeline - -mood-line is a nice & simple modeline for emacs! -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -;; (package! mood-line) -#+end_src - -#+begin_src emacs-lisp -;; (use-package! mood-line -;; :config -;; (mood-line-mode) -;; :custom -;; (mood-line-glyph-alist mood-line-glyphs-fira-code)) -#+end_src -The above is commented if the below is in action. -I might try out the default Emacs modeline for a bit sometime, or maybe spacemacs' ~spaceline~ - -** Minions -The default Emacs modeline, by default, spills out EVERY minor & major mode into the modeline. -That's kind of yucky, so the ~minions~ package fixes it by hiding most of them & having a menu for which to show. -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -(package! minions) -#+end_src - -Now, let's configure it! -#+begin_src emacs-lisp -(use-package! minions - :config - (minions-mode 1)) -#+end_src - -...Yea that's 'bout it. -** Custom window management -I didnt like how in emacs, split windows under ~SPC w s~ just stack, so i made this function to make it dynamic in a fibonnaci-like layout. -#+begin_src emacs-lisp -(defun my/split-window-dynamically () - "Split the selected window, choosing orientation by its shape." - (interactive) - (select-window - (if (> (window-total-width) (* 2 (window-total-height))) - (split-window-right) - (split-window-below)))) -#+end_src - -Map the function to override ~SPC w s~ -#+begin_src emacs-lisp -(map! :leader "w s" #'my/split-window-dynamically) -#+end_src - -** UX ~ UI -Scroll margin - when the cursor reaches 3 lines above/below the window bottom/top, the window goes down (this happens in helix automatically, but the margin is 5) -#+begin_src emacs-lisp -(setq scroll-margin 3) -#+end_src - -** Breadcrumb -Breadcrumb is a package that shows you where you are in a file at the very top of the window. Editing this section of this file, the breadcrumb shows: -~stow/d/.config/doom/config.org : UI~, -this is because we are in the UI section of the file. - -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -(package! breadcrumb) -#+end_src - -#+begin_src emacs-lisp -(use-package! breadcrumb - :defer t - :hook - (prog-mode . breadcrumb-mode) ;; make sure its in programming modes - :config - (breadcrumb-mode 1)) -#+end_src - -** Zen -the ~zen~ option in Doom Emacs enables ~writeroom~ mode on toggle. -~writeroom~ centers the buffer, makes it bigger and lets you type away without distractions, or read via ~nov.el~ easier. -By default, entering ~writeroom~ mode changes the typeface in the buffer. -I don't like that, especially when im editing source blocks (e.g here). Let's turn it off. -#+begin_src emacs-lisp -(setq +zen-mixed-pitch-modes '()) -#+end_src -** vertico-carousel -~vertico~ is the equivalent of nvim's ~telescope~ in Emacs. -#+begin_quote -~vertico-carousel~ is a display extension for Vertico. It always shows -the currently selected candidate on the first line of the candidate list, -then displays the following candidates below it, cycling from the end back -to the beginning. --- vertico-carousel README -#+end_quote - -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -(package! vertico-carousel - :recipe (:host github :repo "kn66/vertico-carousel")) -#+end_src -#+begin_src emacs-lisp -(use-package! vertico-carousel - :config - (vertico-carousel-mode 1)) -#+end_src -* LSP -~M-x vscode~ -** Haskell -A custom function that runs the current Haskell file with runghc (interpreter instead of a compiler). -#+begin_src emacs-lisp -(defun my/hs-eval () - (interactive) - (let* ((src (buffer-file-name)) - (out (file-name-sans-extension src))) - (when (zerop (call-process-shell-command - (format "runghc %s" src) nil "*runghc-output*")) - (let ((buf (make-comint "hs-run" out))) - (display-buffer buf))))) -#+end_src - -Hook the function up up to f5 -#+begin_src emacs-lisp -(add-hook 'haskell-mode-hook - (lambda () - (local-set-key (kbd "") #'my/hs-eval))) -#+end_src - -** HTML -HTML is a big part of my programming life. -There are, however, alot of modes for HTML (html-mode, web-mode, mhtml-mode). -These are all good, but the BEST one by far is ~mhtml-ts-mode~, it outcompetes almost all of the above. -#+begin_src emacs-lisp - (add-to-list 'major-mode-remap-alist '(html-mode . mhtml-ts-mode)) - (add-to-list 'major-mode-remap-alist '(mhtml-mode . mhtml-ts-mode)) -#+end_src - -web-mode rescans the whole altered block on every edit, which gets slow on HTML with big inline ~