Contents of ~/.config/doom directory. I hope that you will find them useful.
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
(setq user-full-name "Daniel Krajnik"
user-mail-address "<REDACTED>")
(setq doom-theme 'doom-city-lights)
(setq doom-font (font-spec :family "JetBrains Mono" :size 12)
doom-variable-pitch-font (font-spec :family "JetBrains Mono" :height 1.3)
doom-unicode-font (font-spec :family "JetBrains Mono")
doom-big-font (font-spec :family "JetBrains Mono" :size 22))
;; change theme background
;; https://www.reddit.com/r/DoomEmacs/comments/ig6ubw/how_to_properly_change_backgroundcolor_other_than/
;; enlarge org mode title font size - if it doesn't work run doom-docs-mode instead
;; https://www.reddit.com/r/DoomEmacs/comments/13wkam9/how_to_toggle_size_of_headers_font_in_org_mode/?sort=new
;; https://stackoverflow.com/questions/21525436/orgmode-title-levels-height/76374044
(custom-theme-set-faces! 'doom-city-lights
'(default :background "#10151a")
'(default :foreground "#ffffff")
'(org-level-1 :inherit outline-1 :height 1.2)
'(org-level-2 :inherit outline-2 :height 1.0)
'(org-level-3 :inherit outline-3 :height 1.0)
)
;; For relative line numbers, set to `relative'.
(setq display-line-numbers-type nil)
;; personal preference
(centered-window-mode)
;; search across buffers - I don't use it that often, but maybe one day...
(defun my-multi-occur-in-matching-buffers (regexp &optional allbufs)
"https://stackoverflow.com/questions/2641211/emacs-interactively-search-open-buffers"
(interactive (occur-read-primary-args))
(multi-occur-in-matching-buffers "." regexp allbufs))
(defun my-multi-occur-in-all-matching-buffers (regexp &optional allbufs)
"search only notmuch messages"
(interactive (occur-read-primary-args))
(multi-occur-in-matching-buffers "." regexp (not allbufs)))
(defun my-multi-occur-in-notmuch-message-matching-buffers (regexp &optional allbufs)
"search only in notmuch messages"
(interactive (occur-read-primary-args))
(multi-occur-in-matching-buffers "notmuch" regexp (not allbufs)))
(map! :leader "s q" 'my-multi-occur-in-matching-buffers)
(map! :leader "s Q" 'my-multi-occur-in-all-matching-buffers)
;; add TAB to jump to occurances
(map! :map occur-mode-map "<tab>" 'occur-mode-display-occurrence)
;; email
(defun notmuch-tree-show-all-messages ()
"open all notmuch emails and run multi-occur
https://emacs.stackexchange.com/questions/77535/open-all-emails-in-notmuch-tree-search-buffer"
(interactive)
(goto-char (point-min))
(while (and (not (eobp)) (not (get-buffer (notmuch-tree-get-message-id))))
(notmuch-tree-show-message-out)
(previous-buffer)
(forward-line 1)))
;; use zathura or whatever is default when clicking on attachment
;; modified also in ~/.mailcap
(setq notmuch-show-part-button-default-action 'notmuch-show-view-part)
;; preview messages with TAB key (ENTER by default)
(map! :map notmuch-search-mode-map "<tab>" 'notmuch-search-show-thread)
;; preview messages with TAB key (ENTER by default)
(map! :map notmuch-tree-mode-map "<tab>" 'notmuch-tree-show-message)
(map! :map notmuch-tree-mode-map "<tab>" 'notmuch-tree-show-message-in)
;; "push button" with TAB - helps in some windows
(map! :map button-map "<tab>" 'push-button)
;; debugging
;;
;; disabled it after all - cursor needed to be in backtrace to show local variables
;; (defun edebug-pop-to-backtrace-and-return ()
;; (interactive)
;; (edebug-pop-to-backtrace)
;; (windmove-up))
;; (map! :map edebug-mode-map "d" 'edebug-pop-to-backtrace-and-return)
;; oh boy this took ages
(map! :map backtrace-mode-map :after backtrace :n "d" 'backtrace-toggle-locals)
(map! :map backtrace-mode-map :after backtrace :n "n" 'edebug-next-mode)
;; org-mode
;; set the directory variables before org-mode loads
(setq org-directory "<REDACTED>")
(setq org-roam-directory "<REDACTED>")
;; quickly add timestamps to new headings - hack
;; it may be useful for taking minutes during meetings
;; add timestamp to new list items: C-RET or M-RET
;; https://www.reddit.com/r/orgmode/comments/14br2xi/automatic_timestamps_in_listsheaders/
(defun org-insert-heading-with-timestamp (&rest r)
(insert (format-time-string "~%H:%M:%S~ ")))
(defun org-insert-heading-with-timestamp-enable ()
(interactive)
(advice-add 'org-insert-item :after #'org-insert-heading-with-timestamp))
(defun org-insert-heading-with-timestamp-disable ()
(interactive)
(advice-remove 'org-insert-item 'org-insert-heading-with-timestamp))
;; prettify org mode (hide title headers and =formatting= characters)
;; it may cause problems with inline images...
;; (add-hook! 'org-mode-hook 'doom-docs-mode)
(advice-add #'org-mode-hook :after '+word-wrap-mode)
;; by default it's 8 ?!
;; add indentation by pressing the ">" key twice
(setq evil-shift-width 2)
(after! org
;; I've had to give up on this - org-yt package seems to break loading order
;; https://github.com/TobiasZawada/org-yt/issues/6#issue-1826702028
;; pinning org-mode version: https://github.com/org-roam/org-roam/issues/2361#issuecomment-1650957932
(advice-remove 'org-display-inline-images 'org-display-user-inline-images)
(add-to-list 'org-capture-templates
'("T" "Custom todo" entry
(file+headline +org-capture-todo-file "inbox")
"* TODO %?\n%i%u\n%a" :prepend t))
(add-to-list 'org-capture-templates
'("J" "Custom Journal" entry
(file+olp+datetree +org-capture-journal-file)
"* =%<%H:%M>= %?\n%i\n%a" :kill-buffer t))
;; oh why why why was it so hard (10 hours+)
(org-wild-notifier-mode)
(setq alert-default-style 'libnotify
org-wild-notifier-alert-time '(0 15 60)
org-wild-notifier-keyword-whitelist nil
;; good for testing
org-wild-notifier--alert-severity 'high
alert-fade-time 50
)
;; https://www.reddit.com/r/orgmode/comments/14bx0v4/open_orgcapture_frame_maximized_to_the_window/
;; needs to be inside after! org block
(defun stag-misanthropic-capture (&rest r)
(delete-other-windows))
(advice-add #'org-capture-place-template :after 'stag-misanthropic-capture)
(setq org-emphasis-alist
'(("*" (bold))
;; ("/" italic)
("_" underline)
("=" (:foreground "#8bd49c"))
("~" (:foreground "#5ec4ff"))
("+" (:strike-through t))))
;; https://stackoverflow.com/questions/26204223/display-formatted-text-in-org-mode-without-formatting-characters
(setq org-hide-emphasis-markers t)
(setq org-agenda-files '("/home/user1/notes"))
;; graphical line between org-agenda sections (blocks)
;; couldn't decide on the right look, 32 is still a bit too big, ideally it would be a single line
;; (setq org-agenda-block-separator 9472)
(setq org-agenda-block-separator 32)
;; (setq org-agenda-block-separator nil)
(setq org-tag-alist '(("priority")
("ongoing")
("idea")
("")
))
;; https://github.com/zyrohex/.doom.d#agenda
(setq org-agenda-custom-commands
'(("o" "overview"
((agenda "" (
(org-agenda-overriding-header "")
(org-agenda-files '("<REDACTED>"))
(org-agenda-span '15)
))
(tags-todo "priority"
((org-agenda-overriding-header "⚛ priority")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
;; i swear you just can't make up this shit:
;; https://emacs.stackexchange.com/questions/18179/org-agenda-command-with-org-agenda-filter-by-tag-not-working
(alltodo "" (
(org-agenda-overriding-header " inbox")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-agenda-skip-function '(org-agenda-skip-entry-if 'regexp ":priority:\\|:ongoing:\\|:idea:"))
))
(tags-todo "ongoing"
((org-agenda-overriding-header "📌 ongoing")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
(tags-todo "idea"
((org-agenda-overriding-header "🔍 idea")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
))
("p1" "project-1"
((agenda "" (
(org-agenda-overriding-header "")
(org-agenda-files '("<REDACTED>"))
(org-agenda-span '8)
))
(tags-todo "priority"
((org-agenda-overriding-header "⚛ priority")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
;; i swear you just can't make up this shit:
;; https://emacs.stackexchange.com/questions/18179/org-agenda-command-with-org-agenda-filter-by-tag-not-working
(alltodo "" (
(org-agenda-overriding-header " inbox")
(org-agenda-skip-function '(org-agenda-skip-entry-if 'regexp ":priority:\\|:ongoing:\\|:idea:"))
(org-agenda-files '("<REDACTED>"))
))
(tags-todo "ongoing"
((org-agenda-overriding-header "📌 ongoing")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
(tags-todo "idea"
((org-agenda-overriding-header "🔍 idea")
(org-agenda-files '("<REDACTED>"))
(org-agenda-todo-ignore-scheduled t)
(org-agenda-todo-ignore-deadlines t)
(org-agenda-todo-ignore-with-date t)
(org-tags-match-list-sublevels 'indented)
(org-agenda-sorting-strategy
'(category-up))))
))
;; trying to list all scheduled tasks for notifications service, but doesn't work
;; ("sc" "overview" (
;; (alltodo "" (
;; (org-agenda-todo-ignore-deadlines t)
;; (org-agenda-todo-ignore-with-date t)
;; ))))
))
(setq org-confirm-babel-evaluate t)
(setq org-icalendar-combined-agenda-file "<REDACTED>")
(setq org-icalendar-include-todo t)
;; start calendar on monday instead of sunday
(setq calendar-week-start-day 1)
;; shorthand for adding code source blocks
;; nowadays I just type "src" press enter and specify the language
(add-to-list 'org-structure-template-alist '("py" . "src python"))
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
(setq org-startup-with-inline-images t)
;; https://github.com/tefkah/doom-emacs-config/blob/main/config.org
(custom-set-faces!
'((org-block) :background "#182027")
)
;; (set-face-font 'org-quote (font-spec :family "noto serif"))
(custom-set-faces!
'(org-document-title :height 1.75 :weight extrabold)
;; '(org-level-1 :inherit outline-1 :height 1.2 :weight bold :slant normal)
;; '(org-level-2 :inherit outline-2 :height 1.1 :weight bold :slant normal)
;; '(org-level-3 :inherit outline-3 :height 1.1 :weight regular :slant normal)
;; '(org-document-info :inherit 'nano-face-faded)
)
;; https://stackoverflow.com/questions/11718401/how-to-use-todo-tags-in-org-mode-without-defining-headings
;; https://www.reddit.com/r/orgmode/comments/14w45bt/how_to_use_orginline_task/
;; (require 'org-inlinetask)
)
;; couldn't add this directly to org-mode-map
(map! :leader "d d" 'org-cut-subtree)
(map! :leader "e h" 'org-pandoc-export-to-html5-and-open)
;; for org-structure-template-alist
;; https://www.youtube.com/live/kkqVTDbfYp4?feature=share&t=723
(use-package! org-tempo
:after org)
(use-package! org-ql
:after org)
;; https://github.com/doomemacs/doomemacs/issues/7414#issuecomment-1732461759
(use-package! htmlz :commands (htmlz-mode))
;; https://baty.net/2022/configuring-the-org-download-save-directory
;; https://github.com/abo-abo/org-download/issues/46
;; https://github.com/abo-abo/org-download/issues/151#issuecomment-1425096926
(after! org-download
(setq org-download-method 'directory)
(setq org-download-image-dir (concat (file-name-sans-extension (buffer-file-name)) "-images"))
(setq org-download-image-org-width 600)
(setq org-download-link-format "[[file:%s]]\n"
org-download-abbreviate-filename-function #'file-relative-name)
(setq org-download-link-format-function #'org-download-link-format-function-default))
;; https://discourse.doomemacs.org/t/org-time-stamp-only-gives-date-no-time-hoursseconds/3269/3
;; (after! org
;; (setq org-time-stamp-formats '("<%Y-%m-%d %a %H:%M>" . "<%Y-%m-%d %a %H:%M>")))
(setq deft-directory "/home/user1/notes"
deft-recursive t)
(after! dap-mode
(setq dap-python-debugger 'debugpy))
;; clipboard
;; these settings should come as a defualt in my opinion
;;
;; don't put deleted strings to X11 clipboard
(setq select-enable-clipboard nil)
;; copies and pastes selected text to and from X11 clipboard
;; this was my first tweak on doom emacs
;; I took me sooo much time to figure out
(map! "S-C-c" 'clipboard-kill-ring-save)
(map! "S-C-v" 'clipboard-yank)
;; to copy the visible portion of the selection
;; useful when copying commands that are often in ~this format~
;; https://www.reddit.com/r/orgmode/comments/14cm6j0/comment/jomihz4/?utm_source=share&utm_medium=web2x&context=3
(defun org-copy-visible-X11-clipboard (beg end)
(interactive "r")
(let ((select-enable-clipboard t))
(org-copy-visible beg end)))
;; ein
;;
;; Here be dragons...
;;
;; https://github.com/doomemacs/doomemacs/issues/7257#issuecomment-1648522478
;; https://github.com/millejoh/emacs-ipython-notebook/issues/873
;; https://emacs.stackexchange.com/questions/14432/initialize-ipython-notebook-server-from-ipynb-file/77386
;; (add-hook 'ein:ipynb-mode-hook
;; (lambda ()
;; (cl-letf (((symbol-function 'read-directory-name)
;; (lambda (_prompt dir &rest _args) dir)))
;; (ein:process-open-notebook nil (lambda (&rest _args)
;; (mapc 'switch-to-buffer
;; (cl-remove-if-not (lambda (b)
;; (and
;; (string-match-p "ein" (buffer-name b))
;; (string-match-p "ipynb" (buffer-name b))))
;; (buffer-list)))
;; (delete-other-windows)))
;; )))
;; henrik tried to solve it
;; https://github.com/doomemacs/doomemacs/issues/7257#issuecomment-1648522478
;; (add-hook! 'ein:ipynb-mode-hook
;; ;; By adding it to this hook, we can be sure that the server
;; ;; won't be started until the buffer is visible (prevents a
;; ;; cascade of new processes when opening multiple *.ipynb files
;; ;; all at once.
;; (add-hook 'doom-switch-buffer-hook #'ein:process-open-notebook nil 'local))
;; https://emacs.stackexchange.com/questions/58339/async-shell-command-run-command-without-displaying-the-output
;; open an external shell
(defun open-terminal-alacritty ()
(interactive)
(add-to-list 'display-buffer-alist '("*Async Shell Command*" display-buffer-no-window (nil)))
(async-shell-command "alacritty -e tmux" nil nil))
;; ...replace doom's default keybinding to open a shell
(map! :leader "o t" 'open-terminal-alacritty)
;; centaur tabs activate
;; I like them, but YMMV
(setq centaur-tabs-set-bar t)
;; Switch centaur tabs with ctrl+tab and ctrl+shift+tab
;; turns out :nvi and other states are the way to do that
;; to prevent evil keybindings from taking over
;; https://discourse.doomemacs.org/t/how-to-bind-keys-with-higher-precedence-than-evil-keybindings/3743/3
(map! :nvi "C-<tab>" 'centaur-tabs-forward)
(map! :nvi "C-<iso-lefttab>" 'centaur-tabs-backward)
;; I can't remember what this was
;; use once groked
;; (map! :nvi "C-t" #'centaur-tabs--create-new-tab)
;; speed up which-key's buffer prompt
(setq which-key-idle-delay 0.25)
;; allow which-key to expand side-window to half the frame's height
(setq which-key-side-window-max-height 0.5)
;; RSS
(setq elfeed-feeds (quote (
("https://lwn.net/headlines/rss" linux)
("https://archlinux.org/feeds/news/" linux)
("https://rss.slashdot.org/Slashdot/slashdotMain" linux)
("https://www.phoronix.com/rss.php" linux)
("https://architectsjournal.co.uk/feed" architecture)
("https://osarch.org/feed/" architecture)
("https://feeds.feedburner.com/Archdaily" architecture)
("https://www.dezeen.com/rss" architecture)
)))
;; copied from distrotube
(setq elfeed-goodies/entry-pane-size 0.7)
(evil-define-key 'normal elfeed-show-mode-map
(kbd "J") 'elfeed-goodies/split-show-next
(kbd "K") 'elfeed-goodies/split-show-prev)
(evil-define-key 'normal elfeed-search-mode-map
(kbd "J") 'elfeed-goodies/split-show-next
(kbd "K") 'elfeed-goodies/split-show-prev)
;; Forked it and tried to add desktop notifications
;; Originally it only provides modeline notifications
;; Ended up using the elfeed-new-entry-hook instead (below)
(use-package! elfeed-system-notifier
:defer t
:commands elfeed-notifier-mode)
(elfeed-notifier-mode)
(defun elfeed-desktop-notifications (entry)
"Parse and display new feeds as desktop notifications."
(alert (elfeed-deref (elfeed-entry-content entry))
:title (concat
(elfeed-feed-title (elfeed-deref (elfeed-entry-feed entry))) "\n"
(elfeed-deref (elfeed-entry-title entry))
)
;; :severity 'high
))
(add-hook! 'elfeed-new-entry-hook #'elfeed-desktop-notifications)
;; hmm, not sure what this is...
(advice-add 'kill-current-buffer :after #'+workspace/close-window-or-workspace)
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a "Module Index" link where you'll find
;; a comprehensive list of Doom's modules and what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;chinese
;; ;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
(helm
;;+childframe
+fuzzy
+icons) ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
;;vertico ; the search engine of the future
:ui
deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
doom-quit ; DOOM quit-message prompts when you quit Emacs
(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
indent-guides ; highlighted indent columns
;;ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
tabs ; a tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
(dired +icons) ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
(undo +tree) ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
;;(spell +flyspell) ; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
:tools
;;ansible
biblio ; Writes a PhD for you (citation needed)
(debugger +lsp) ; FIXME stepping through code, to help you add bugs
;;direnv
docker
editorconfig ; let someone else argue about tabs vs spaces
ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
gist ; interacting with github gists
lookup ; navigate your code and its documentation
(lsp +peek) ; M-x vscode
magit ; a git porcelain for Emacs
make ; run make tasks from Emacs
pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
;;rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;terraform ; infrastructure as code
tmux ; an API for interacting with tmux
;;upload ; map local to remote projects via ssh/ftp
:os
(:if IS-MAC macos) ; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp) ; C > C++ == 1
;; clojure ; java with a lisp
common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
csharp ; unity, .NET, and mono shenanigans
data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;; fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;go +lsp) ; the hipster dialect
(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
json ; At least it ain't XML
;;java +meghanada) ; the poster child for carpal tunnel syndrome
(javascript +lsp) ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
(markdown
+grip
) ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org ; organize your plain life in plain text
+brain
+dragndrop
+gnuplot
+ipython
+jupyter
+journal
+roam2
+hugo
+noter
+pandoc
+present
+pretty)
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
(python
+lsp
;; +conda
+cython
+poetry
+pyright) ; beautiful is better than ugly
(qt +lsp) ; the 'cutest' gui framework ever
racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;scheme +guile) ; a fully conniving family of lisps
(sh +lsp) ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
(web +lsp) ; the tubes
(yaml +lsp) ; JSON, but readable
;;zig ; C, but simpler
:email
(mu4e
+org
+gmail)
notmuch
(wanderlust
+gmail)
:app
calendar
;;emms
everywhere ; *leave* Emacs!? You must be joking
irc ; how neckbeards socialize
rss ; emacs as an RSS reader
twitter ; twitter client https://twitter.com/vnought
:config
;;literate
(default +bindings +smartparens))
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; https://discourse.doomemacs.org/t/how-to-upgrade-emacs-properly/2559/4
;; https://github.com/radian-software/straight.el/issues/1107#issuecomment-1662711415
;; (package! org :pin "ca873f7")
(package! org-wild-notifier)
(package! nhexl-mode)
(package! org-ql)
(package! org-preview-html)
(package! org-gtd)
(package! calfw)
(package! lorg-calendar
:recipe (:host github :repo "lawlist/lorg-calendar"))
;; Forked and tried to modify the original package to add desktop notifications in addition to the modeline notifications
;; However, I never got to finish it and ended up using elfeed-new-entry-hook instead (config.el)
(package! elfeed-system-notifier
:recipe (:host github :repo "danielkrajnik/elfeed-system-notifier"))
;; this took sooo damn long to setup and the first thing that turned out
;; working was adding and ;;;autoloads header over the minor mode following the packaging conventions
;; However doom emacs later started to override any local changes, so following an advise I added
;; a :command to tge use-package! macro that does it on emacs boot instead (config.el)
;; https://www.reddit.com/r/emacs/comments/13pp502/help_install_simple_package_htmlzmode/
;; https://github.com/0xekez/htmlz-mode/issues/1
;; https://github.com/doomemacs/doomemacs/issues/7414#issuecomment-1732461759
(package! htmlz
:recipe (:host github :repo "0xekez/htmlz-mode"))
(package! exec-path-from-shell)
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
(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.
'(auth-source-save-behavior nil)
'(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'")
'(package-selected-packages '(websocket)))
(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.
'(fringe ((t (:background "#10151a"))))
'(org-block ((t (:background "#182027"))))
'(org-document-title ((t (:height 1.75 :weight extrabold)))))