1
0
Fork 0
mirror of https://github.com/Horhik/dotfiles.git synced 2024-12-04 20:36:36 +00:00
Dotfiles/home/emacs/.emacs.d/config.org
2024-03-10 21:04:30 +03:00

1519 lines
54 KiB
Org Mode
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+title: Emacs config
#+AUTHOR: Horhik
#+BABEL: :cache no
#+PROPERTY: header-args:emacs-lisp :tangle init.el
#+begin_src
█ █ █▀█ █▀▄ █ █ ▀█▀ █ █ ▀ █▀▀
█▀█ █ █ █▀▄ █▀█ █ █▀▄ ▀▀█
▀ ▀ ▀▀▀ ▀ ▀ ▀ ▀ ▀▀▀ ▀ ▀ ▀▀▀
█▀▄ █▀█ ▀█▀ █▀▀ ▀█▀ █ █▀▀ █▀▀
█ █ █ █ █ █▀▀ █ █ █▀▀ ▀▀█
▀▀ ▀▀▀ ▀ ▀ ▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀
#+end_src
* Help info ~C-z~ to toggle vim/emacs mode
~M-p~ in Counsel to get previos seach
~C-x RET C-\~ - set input method (Tex for *LaTex*)
~C-x n s~ - Open subtree
~org-tree-to-indirect-buffer~ Open subtree in separate buffer
* Initial
** Initial packages
#+begin_src emacs-lisp
(setq max-lisp-eval-depth 10000)
(print "Adding melpa")
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/") t)
(print "Initializing...")
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
(setq package-enable-at-startup nil)
(setq use-package-always-ensure t)
#+end_src
** Straight.el
#+begin_src emacs-lis
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
#+end_src
** Basic Theiming
#+begin_src emacs-lisp
(menu-bar-mode -1)
(setq inhibit-startup-message t)
(setq visible-bell t)
(toggle-scroll-bar -1)
(tool-bar-mode -1)
(tooltip-mode -1)
(set-fringe-mode 10)
(visual-line-mode t)
(global-visual-line-mode 1)
(global-visual-line-mode)
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;(straight-use-package 'use-package)
(use-package which-key)
(use-package gruvbox-theme
)
(load-theme 'gruvbox-dark-medium t nil)
;(loadtheme 'timu-spacegrey t nil)
#+end_src
** UI
*** Disbling line numbers
#+begin_src emacs-lisp
;(column-number-mode)
(global-display-line-numbers-mode 1)
(menu-bar--display-line-numbers-mode-relative)
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
telega-root-mode-hook
telega-chat-mode-hook
doc-view-mode-hook
pdf-mode-hook
eww-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
(add-hook 'shell-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'telega-root-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'help-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'telega-chat-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'telega-image-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'telega-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'doc-view-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'pdf-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'eww-mode-hook #'(lambda()(display-line-numbers-mode -1)))
(add-hook 'treemacs-mode-hook #'(lambda()(display-line-numbers-mode -1)))
#+end_src
*** Rainbow Brakets
#+begin_src emacs-lisp
(use-package rainbow-delimiters
:ensure t
:hook (prog-mode . rainbow-delimiters-mode))
#+end_src
*** Rainbow Brakets
#+begin_src emacs-lisp
(use-package which-key
:init (which-key-mode)
:diminish which-key-mode
:config
(setq which-key-idle-delay 0.3))
#+end_src
*** All-the icons
#+begin_src emacs-lisp
(use-package all-the-icons
:ensure t)
#+end_src
** Evil mode
#+begin_src emacs-lisp
(use-package evil
:ensure t
:init
(setq evil-want-keybinding nil)
(setq evil-want-integration t)
(setq evil-want-C-u-scroll t)
(setq evil-want-C-i-jump nil)
(setq evil-search-module 'evil-search)
(setq evil-ex-complete-emacs-commands nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(setq evil-want-fine-undo 'fine)
(setq evil-undo-system 'undo-redo)
(setq evil-set-undo-system 'undo-redo)
:config
(evil-mode 1)
(evil-set-undo-system 'undo-redo)
(define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state)
(define-key evil-insert-state-map (kbd "C-h") 'evil-delete-backward-chair-and-join)
(evil-global-set-key 'motion "j" 'evil-next-visual-line)
(evil-global-set-key 'motion "k" 'evil-previous-visual-line)
(evil-set-initial-state 'messages-buffer-mode 'normal)
(evil-set-initial-state 'dashboard-mode 'normal)
)
(use-package undo-tree
:ensure t
:config
(setq evil-undo-system 'undo-redo)
(setq evil-set-undo-system 'undo-redo)
(use-package evil-collection
:ensure t
:config
(evil-collection-init)
))
#+end_src
** Fonts
#+begin_src emacs-lisp
(variable-pitch-mode 0)
;(add-to-list 'default-frame-alist
; '((font . "mononoki")
; (font . "Mononoki Nerd Font")
; (font . "Liberation Sans")
; ))
(defun my/buffer-face-mode-variable ()
"Set font to a variable width (proportional) fonts in current buffer"
(interactive)
(setq buffer-face-mode-face '(:family "mononoki" :height 100 :width semi-condensed))
(buffer-face-mode))
(add-hook 'erc-mode-hook 'my/buffer-face-mode-variable)
(add-hook 'Info-mode-hook 'my/buffer-face-mode-variable)
(add-hook 'org-mode-hook 'my/buffer-face-mode-variable)
(add-hook 'eww-mode-hook 'my/buffer-face-mode-variable)
;(add-hook 'org-mode-hook (lambda () (set-frame-font "mononoki" t)))
;(set-face-attribute 'default nil :font "mononoki")
;; Default fonts
;(add-to-list 'default-frame-alist '(font . "mononoki" ))
;(set-face-attribute 'default t :font "mononoki" )
(set-frame-font "mononoki")
;(set-fontset-font "fontset-startup" 'unicode
; (font-spec :name "mononoki" :size 14))
;(when (member "Twemoji" (font-family-list))
; (set-fontset-font t 'unicode "Twemoji" nil 'prepend))
;; ☺️ ☻ 😃 😄 😅 😆 😊 😎 😇 😈 😏 🤣 🤩 🤪 🥳 😁 😀 😂 🤠 🤡 🤑 🤓 🤖 😗 😚 😘 😙 😉 🤗 😍 🥰 🤤 😋 🤔 🤨 🧐 🤭 🤫 😯 🤐 😌 😖 😕 😳 😔 🤥 🥴 😮 😲 🤯 😩 😫 🥱 😪 😴 😵 ☹️ 😦 😞 😥 😟 😢 😭 🤢 🤮 😷 🤒 🤕 🥵 🥶 🥺 😬 😓 😰 😨 ;;😱 😒 😠 😡 😤 😣 😧 🤬 😸 😹 😺 😻 😼 😽 😾 😿 🙀 🙈 🙉 🙊 🤦 🤷 🙅 🙆 🙋 🙌 🙍 🙎 🙇 🙏 👯 💃 🕺 🤳 💇 💈 💆 🧖 🧘 🧍 🧎 👰 🤰 🤱 👶 🧒 👦 👧 👩 👨 🧑 🧔 🧓 👴 👵 👤 👥 👪 👫 👬 👭 👱 👳 👲 🧕 👸 🤴 🎅 🤶 🧏 🦻 🦮 🦯 🦺 🦼 🦽 🦾 🦿 🤵 👮 ;;👷 💁 💂 🕴 🕵️ 🦸 🦹 🧙 🧚 🧜 🧝 🧞 🧛 🧟 👼 👿 👻 👹 👺 👽 👾 🛸 💀 ☠️ 🕱 🧠 🦴 👁 👀 👂 👃 👄 🗢 👅 🦷 🦵 🦶 💭 🗬 🗭 💬 🗨 🗩 💦 💧 💢 💫 💤 💨 💥 💪 🗲 🔥 💡 💩 💯
;; Fallback for emojies
;(set-frame-font "-UKWN-Mononoki-normal-normal-normal-*-16-*-*-*-m-0-iso10646-1")
#+end_src
*** Font for text-mode
#+begin_src emacs-lisp
;; (use-package mixed-pitch
;; :ensure t
;; :hook
;; (text-mode . mixed-pitch-mode)
;; :config
;; (set-face-attribute 'default nil :font "mononoki" :height 130)
;; (set-face-attribute 'fixed-pitch nil :font "mononoki")
;; (set-face-attribute 'variable-pitch nil :font "mononoki"))
#+end_src
* Keybindigs
** Defining smth
#+begin_src emacs-lisp
(defun opt ()
"open tasks"
(interactive)
(find-file "~/GTD/tasks.org"))
(defun opi ()
"open inbox"
(interactive)
(find-file "~/GTD/inbox.org"))
(defun opd ()
"open daily"
(interactive)
(find-file "~/GTD/daily.org"))
(defun opr ()
"open readlist"
(interactive)
(find-file "~/GTD/readlist.org"))
(defun opc ()
"open readlist"
(interactive)
(find-file "~/.emacs.d/config.org"))
(defun ops ()
"open readlist"
(interactive)
(find-file "~/.config/sway/config"))
(defun oph ()
"open readlist"
(interactive)
(find-file "~/.config/home-manager/home.nix"))
(defun open-shoplist ()
"open shoplist"
(interactive)
(find-file "~/GTD/shoplist.org"))
(defun open-projects ()
"open projects"
(interactive)
(find-file "~/GTD/projects.org"))
#+end_src
** Basic
#+begin_src emacs-lisp
(use-package general
:ensure t
:config
(general-evil-setup t)
(general-define-key
:keymaps '(normal insert emacs)
:prefix "SPC"
:global-prefix "C-SPC"
:non-normal-prefix "M-SPC"
"/" 'swiper
"b" 'counsel-switch-buffer
"f r" '(counsel-recentf :which-key "recent files")
"f f" '(counsel-find-file :which-key "find files")
"f c" '(opc :which-key "open config")
"f s" '(ops :which-key "open sway")
"f h" '(oph :which-key "open home-manager")
"t t" '(opt :which-key "✅Tasks")
"t i" '(opi :which-key "📥Inbox")
"t d" '(opd :which-key "🌄Daily")
"t r" '(opr :which-key "📚Readlist")
"t s" '(open-shoplist :which-key "🛒Shoplist")
"t p" '(open-projects :which-key "📁Projects")
"SPC" 'counsel-M-x
"TAB" '(treemacs-select-window :which-key "focus on treemacs")
"a" 'org-agenda
))
(general-create-definer my-leader-def
:states 'motion
:prefix "SPC")
#+end_src
* Org mode setup
** Basic
*** Margin setup
#+begin_src emacs-lisp
(defun my/setup-org-margins()
(setq visual-fill-column-center-text t)
;(visual-fill-column-mode t)
(visual-line-mode t)
)
#+end_src
*** Other
#+begin_src emacs-lisp
(defun my/org-mode-setup()
(auto-fill-mode 0)
(visual-line-mode 1)
(setq evil-auto-indent 1)
(variable-pitch-mode 0)
(prettify-symbols-mode +1)
(display-line-numbers-mode 1)
)
(use-package org
:ensure t
:hook ((org-mode . my/org-mode-setup)
(org-mode . variable-pitch-mode)
(org-mode . org-indent-mode)
(org-mode . prettify-symbols-mode)
(org-mode . my/setup-org-margins)
)
:config
(require 'org-habit)
(add-to-list 'org-modules 'org-habit)
(setq org-habit-graph-column 60)
(setq org-treat-insert-todo-heading-as-state-change t)
(setq org-agenda-start-with-log-mode t)
(setq org-log-done 'time)
(setq org-log-into-drawer t)
(setq org-hide-emphasis-markers t)
;; Make sure org-indent face is available
;; Increase the size of various headings
(add-hook 'org-agenda-finalize-hook #'hl-line-mode)
;(set-face-attribute 'org-document-title nil :font "Liberation Sans" :weight 'bold :height 1.3)
(dolist (face '((org-level-1 . 1.0)
(org-level-2 . 1.0)
(org-level-3 . 1.0)
(org-level-4 . 1.0)
(org-level-5 . 1.0)
(org-level-6 . 1.0)
(org-level-7 . 1.0)
(org-level-8 . 1.0)))
(set-face-attribute (car face) nil :font "Liberation Sans" :weight 'bold :height (cdr face)))
; ;; Ensure that anything that should be fixed-pitch in Org files appears that way
; (set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch)
; (set-face-attribute 'org-table nil :inherit 'fixed-pitch)
; (set-face-attribute 'org-formula nil :inherit 'fixed-pitch)
; (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
; (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch))
; (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
; (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
; (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
; (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
(setq org-agenda-files
'(
"~/GTD/daily.org"
"~/GTD/tasks.org"
"~/GTD/inbox.org"
"~/GTD/done.org"
"~/GTD/projects.org"
"~/GTD/backlog.org"
"~/GTD/calendar.org"
"~/GTD/watchlist.org"
"~/GTD/readlist.org"
))
(setq org-image-actual-width (list 550))
;; Get rid of the background on column views
; (set-face-attribute 'org-column nil :background nil)
; (set-face-attribute 'org-column-title nil :background nil)
;(setq org-src-fontify-natively t)
(setq org-agenda-start-with-log-mode t)
(setq org-log-done 'time)
(setq org-log-into-drawer t)
(setq org-todo-keyword-faces '(("TODO" . org-warning)
("STARTED" . "yellow")
("DREAM" . "pink")
("PJ" . "pink")
("IDEA" . "gold")
("MUSIC" . "violet")
("READ" . "violet")
("NEXT" . "red")
("ARTICLE" . "lightblue")
("CANCELED" .
(:foreground "blue"
:weight bold))))
(setq org-todo-keywords '((sequence "INBOX(i)" "PJ(p)" "TODO(t)" "NEXT(n)" "CAL(c)" "WAIT(w@/!)" "|" "DONE(d!)" "CANC(k@)")
(sequence "IDEA(I)" "DREAM(D)" "READ(R)" "MUSIC(M)" "|" "DONE(d!)" "CANC(k@)")
))
(setq org-agenda-custom-commands org-agenda-settings)
(setq org-refile-targets
'((("~/GTD/tasks.org") :maxlevel . 2)
(("~/GTD/projects.org") :maxlevel . 2)
(("~/GTD/backlog.org") :maxlevel . 1)
(("~/GTD/done.org") :maxlevel . 1)
))
)
(defun org-habit-streak-count ()
(point-min)
(while (not (eobp))
(when (get-text-property (point) 'org-habit-p)
(let ((count (count-matches
(char-to-string org-habit-completed-glyph)
(line-beginning-position) (line-end-position))))
(end-of-line)
(insert (number-to-string count))))
(forward-line 1)))
(add-hook 'org-agenda-finalize-hook 'org-habit-streak-count)
(use-package org-bullets
:after (org)
:hook (
(org-mode . org-bullets-mode )
(org-mode . org-indent-mode )
)
)
(require 'general)
(evil-define-key 'normal org-mode-map (kbd "<tab>") #'org-cycle)
(general-def org-mode-map
"TAB" 'org-cycle
)
#+end_src
** Org Download
#+begin_src emacs-lisp
(use-package org-download
:ensure t
:after org
:bind
(:map org-mode-map
(("s-Y" . org-download-screenshot)
("s-y" . org-download-yank)))
:config
(setq-default org-download-image-dir ".")
)
(general-define-key
:keymaps '(normal insert emacs)
:prefix "SPC"
:global-prefix "C-SPC"
:non-normal-prefix "M-SPC"
"n s Y" '(org-download-screenshot :which-key "Download screenshot")
"n s y" '(org-download-yank :which-key "Download yank")
)
#+end_src
** Org agenda commands
#+begin_src emacs-lisp
(defun air-org-skip-subtree-if-priority (priority)
"Skip an agenda subtree if it has a priority of PRIORITY.
PRIORITY may be one of the characters ?A, ?B, or ?C."
(let ((subtree-end (save-excursion (org-end-of-subtree t)))
(pri-value (* 1000 (- org-lowest-priority priority)))
(pri-current (org-get-priority (thing-at-point 'line t))))
(if (= pri-value pri-current)
subtree-end
nil)))
(defun air-org-skip-subtree-if-habit ()
"Skip an agenda entry if it has a STYLE property equal to \"habit\"."
(let ((subtree-end (save-excursion (org-end-of-subtree t))))
(if (string= (org-entry-get nil "STYLE") "habit")
subtree-end
nil)))
(setq org-agenda-settings '(
("D" "Daily agenda and all TODOs"
((tags "PRIORITY=\"A\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "High-priority unfinished tasks:")))
(agenda "" ((org-agenda-ndays 1)))
(alltodo ""
((org-agenda-skip-function '(or (air-org-skip-subtree-if-habit)
(air-org-skip-subtree-if-priority ?A)
(org-agenda-skip-if nil '(scheduled deadline))))
(org-agenda-overriding-header "ALL normal priority tasks:"))))
((org-agenda-compact-blocks t)))
("d" "Dashboard 📜"
(
(agenda "" ((org-deadline-warning-days 14)))
(tags "@morning" ((org-agenda-overriding-header "Eat the Frog 🐸")))
(tags "today/NEXT" ((org-agenda-overriding-header "Today Tasks 🌅")))
(todo "NEXT" ((org-agenda-overriding-header "Next Tasks ⏩")))
(todo "WAIT" ((org-agenda-overriding-header "Waiting tasks ⏰")))
(todo "PJ" ((org-agenda-overriding-header "Active Projects ")))
(todo "MUSIC" ((org-agenda-overriding-header "Music 🎹")))
(todo "INBOX" ((org-agenda-overriding-header "Inbox 📥")))
))
("w" "Wait Tasks ⏰"
(todo "WAIT" ((org-agenda-overriding-header "Wait Tasks")))
(todo "NEXT" ((org-agenda-overriding-header "Wait Tasks")))
)
("c" "Dated Tasks 📅" ((todo "CAL" ((org-agenda-overriding-header "Dated Tasks")))))
("S" "Somewhen ⌛" ((todo "TODO" ((org-agenda-overriding-header "Somewhen ")))))
("R" "Read list 📚" tags-todo "+readlist")
("W" "Watch list 🎦" tags-todo "+watchlist")
("I" "Ideas 💡" tags-todo "+idea")
("M" "Music 🎹" tags-todo "+music")
("P" "petprojects 🐕" tags-todo "+petproject")
("B" "Things to buy 🛍" tags-todo "+shoplist")
("sd" "Do Today 🌄" tags-todo "+today/NEXT" ((org-agenda-overriding-header "Today 🌄")))
;; My state/contexts
("s" . "My State and contexts")
("st" "Tired 🥱" tags-todo "+@tired/NEXT" ((org-agenda-overriding-header "Tired 🥱")))
("sh" "At home🏠" tags-todo "+@home/NEXT" ((org-agenda-overriding-header "At home🏠")))
("sc" "By a computer 💻" tags-todo "+@computer/NEXT" ((org-agenda-overriding-header "By a computer 💻")))
("ss" "On studies 🏫" tags-todo "+@uni/NEXT" ((org-agenda-overriding-header "On studies 🏫")))
("sK" "In Kwork 🧑 🛋️ " tags-todo "+@kwork/NEXT" ((org-agenda-overriding-header "In Kwork 🧑‍💻 🛋️ ")))
("so" "Online 🌐" tags-todo "+@online/NEXT" ((org-agenda-overriding-header "Online 🌐")))
("sO" "Outdoors🚶" tags-todo "+@outdoors/NEXT" ((org-agenda-overriding-header "Outdoors🚶")))
("sT" "To takeaway 👝 " tags-todo "+takeaway" ((org-agenda-overriding-header "To takeaway 👝 ")))
("F" "FROGS!" tags-todo "quack" ((org-agenda-overriding-header "🐸🐸🐸🐸🐸🐸")))
("h" "💪 Daily habits 💪"
((agenda ""))
((org-agenda-show-log t)
(org-agenda-ndays 3)
(org-agenda-log-mode-items '(state))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp "Habit")))
)
("H" "💪Habits!💪🏻 " tags-todo "+Habit" ((org-agenda-overriding-header "Habits 💪")))
)
;; other commands here
)
#+end_src
#+RESULTS:
: ((D Daily agenda and all TODOs ((tags PRIORITY="A" ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) (org-agenda-overriding-header High-priority unfinished tasks:))) (agenda ((org-agenda-ndays 1))) (alltodo ((org-agenda-skip-function '(or (air-org-skip-subtree-if-habit) (air-org-skip-subtree-if-priority 65) (org-agenda-skip-if nil '(scheduled deadline)))) (org-agenda-overriding-header ALL normal priority tasks:)))) ((org-agenda-compact-blocks t))) (d Dashboard 📜 ((agenda ((org-deadline-warning-days 14))) (tags @morning ((org-agenda-overriding-header Eat the Frog 🐸))) (tags today/NEXT ((org-agenda-overriding-header Today Tasks 🌅))) (todo NEXT ((org-agenda-overriding-header Next Tasks ⏩))) (todo WAIT ((org-agenda-overriding-header Waiting tasks ⏰))) (todo PJ ((org-agenda-overriding-header Active Projects ))) (todo INBOX ((org-agenda-overriding-header Inbox 📥))))) (w Wait Tasks ⏰ (todo WAIT ((org-agenda-overriding-header Wait Tasks))) (todo NEXT ((org-agenda-overriding-header Wait Tasks)))) (c Dated Tasks 📅 ((todo CAL ((org-agenda-overriding-header Dated Tasks))))) (S Somewhen ⌛ ((todo TODO ((org-agenda-overriding-header Somewhen ))))) (R Read list 📚 tags-todo +readlist) (W Watch list 🎦 tags-todo +watchlist) (I Ideas 💡 tags-todo +idea) (P petprojects 🐕 tags-todo +petproject) (B Things to buy 🛍 tags-todo +shoplist) (sd Do Today 🌄 tags-todo +today/NEXT ((org-agenda-overriding-header Today 🌄))) (s . My State and contexts) (st Tired 🥱 tags-todo +@tired/NEXT ((org-agenda-overriding-header Tired 🥱))) (sh At home🏠 tags-todo +@home/NEXT ((org-agenda-overriding-header At home🏠))) (sc By a computer 💻 tags-todo +@computer/NEXT ((org-agenda-overriding-header By a computer 💻))) (ss On studies 🏫 tags-todo +@uni/NEXT ((org-agenda-overriding-header On studies 🏫))) (sK In Kwork 🧑 🛋️ tags-todo +@kwork/NEXT ((org-agenda-overriding-header In Kwork 🧑‍💻 🛋️ ))) (so Online 🌐 tags-todo +@online/NEXT ((org-agenda-overriding-header Online 🌐))) (sO Outdoors🚶 tags-todo +@outdoors/NEXT ((org-agenda-overriding-header Outdoors🚶))) (sT To takeaway 👝 tags-todo +takeaway ((org-agenda-overriding-header To takeaway 👝 ))) (F FROGS! tags-todo quack ((org-agenda-overriding-header 🐸🐸🐸🐸🐸🐸))) (h 💪 Daily habits 💪 ((agenda )) ((org-agenda-show-log t) (org-agenda-ndays 3) (org-agenda-log-mode-items '(state)) (org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp Habit)))) (H 💪Habits!💪🏻 tags-todo +Habit ((org-agenda-overriding-header Habits 💪))))
** Org Fonts
*** fonts mazafaka
#+begin_src emacs-lisp
(set-face-attribute 'default nil
:family "mononoki"
:height 110
:weight 'normal
:width 'normal)
#+end_src
* PDF Tools
#+begin_src emacs-lisp
(use-package pdf-tools
:ensure t
:defer t
)
;;(:host github :repo "https://git.savannah.gnu.org/cgit/emacs/elpa.git" :branch "main" :files ("*.el" "out"))
;:demand t
;:load-path "~/.emacs.d/elpa/org-9.5.4/"
;(org-bullets-mode t)
;(org-indent-mode t)
;(setq org-ellipsis " ▸" org-hide-emphasis-markers t org-src-ontify-natively t
; org-src-tab-acts-natively t org-edit-src-content-indentation 2 org-hide-block-startup nil
; org-src-preserve-indentation nil org-startup-folded 'content org-cycle-separator-lines 2)
#+end_src
#+RESULTS:
* Image tools
#+begin_src emacs-lisp
;; Enable converting external formats (ie. webp) to internal ones
(setq image-use-external-converter t)
(use-package swiper)
#+end_src
#+RESULTS:
: t
** Org Tempo
#+begin_src emacs-lisp
(use-package tempo
:ensure t)
#+end_src
** Keybindings
#+begin_src emacs-lisp
(general-define-key
:keymaps '(normal insert emacs)
:prefix "SPC"
:global-prefix "C-SPC"
:non-normal-prefix "M-SPC"
"o t" '(counsel-org-tag :which-key "insert tag")
"o l" '(counsel-org-link :which-key "insert tag")
)
#+end_src
** Modeline
#+begin_src emacs-lisp
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1)
:custom ((doom-modeline-height 15)))
#+end_src
** Org-ref
#+begin_src emacs-lisp
(use-package org-ref
:ensure t
)
#+end_src
* Ivy
#+begin_src emacs-lisp
(use-package ivy
:ensure t
:bind (("C-s" . swiper)
:map ivy-minibuffer-map
("TAB" . ivy-alt-done)
("C-l" . ivy-alt-done)
("C-j" . ivy-next-line)
("C-k" . ivy-previous-line)
:map ivy-switch-buffer-map
("C-k" . ivy-previous-line)
("C-l" . ivy-done)
("C-d" . ivy-switch-buffer-kill)
:map ivy-reverse-i-search-map
("C-k" . ivy-previous-line)
("C-d" . ivy-reverse-i-search-kill))
:config
(ivy-mode 1)
)
(use-package amx
:ensure t
:init (amx-mode 1))
#+end_src
** Ivy Frame and Counsel
#+begin_src emacs-lisp
(use-package ivy-posframe)
(use-package counsel
:ensure t
:bind (
("M-x" . counsel-M-x)
("C-x b" . counsel-buffer-or-recentf)
("C-x C-b" . counsel-switch-buffer)
("C-x C-f" . counsel-find-file)
:map minibuffer-local-map
("C-x r" . 'counsel-minibuffer-history)))
(setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-center)))
;; (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-window-center)))
;; (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-bottom-left)))
;; (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-window-bottom-left)))
;; (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-top-center)))
;;:after (ivy)
;;:config
(require 'ivy-posframe)
;; Different command can use different display function.
(setq ivy-posframe-display-functions-alist
'((swiper . ivy-posframe-display-at-point)
(complete-symbol . ivy-posframe-display-at-point)
(counsel-M-x . ivy-posframe-display)
(org-roam-node-find . ivy-posframe-display)
(org-roam-tag-add . ivy-posframe-display)
(org-roam-tag-remove . ivy-posframe-display)
(org-roam-node-insert . ivy-posframe-display)
(org-roam-node-insert . ivy-posframe-display)
(org-roam-tag-add . ivy-posframe-display)
(org-roam-tag-remove . ivy-posframe-display)
(t . ivy-posframe-display)))
(ivy-posframe-mode 1)
#+end_src
** Ivy Rich
#+begin_src emacs-lisp
(use-package all-the-icons-ivy-rich
:ensure t
:init (all-the-icons-ivy-rich-mode 1)
:config
(setq all-the-icons-ivy-rich-icon t)
(setq all-the-icons-ivy-rich-color-icon t)
(setq all-the-icons-ivy-rich-project t)
(setq all-the-icons-ivy-rich-field-width 80)
;(setq inhibit-compacting-font-caches t)
)
(use-package ivy-rich
:ensure t
:init (ivy-rich-mode 1)
:config
(defun ivy-rich-counsel-find-file-truename (candidate)
(let ((type (car (file-attributes (directory-file-name (expand-file-name candidate ivy--directory))))))
(if (stringp type)
(concat "-> " (expand-file-name type ivy--directory))
"")))
(setq ivy-rich-display-transformers-list
'(ivy-switch-buffer
(:columns
((ivy-rich-switch-buffer-icon (:width 2))
(ivy-rich-candidate (:width 30))
(ivy-rich-switch-buffer-size (:width 7))
(ivy-rich-switch-buffer-indicators (:width 4 :face error :align right))
(ivy-rich-switch-buffer-major-mode (:width 12 :face warning))
(ivy-rich-switch-buffer-project (:width 15 :face success))
(ivy-rich-switch-buffer-path (:width (lambda (x) (ivy-rich-switch-buffer-shorten-path x (ivy-rich-minibuffer-width 0.3))))))
:predicate
(lambda (cand) (get-buffer cand)))))
)
#+end_src
** Company
#+begin_src emacs-lisp
(use-package company
:ensure t
:config
(company-mode 1)
(add-hook 'after-init-hook 'global-company-mode)
(setq company-backends '((company-capf :with company-yasnippet)))
)
#+end_src
* Snippets
#+begin_src emacs-lisp
(use-package yasnippet
:ensure t
:config
(yas-reload-all)
(add-hook 'prog-mode-hook 'yas-minor-mode)
(add-hook 'text-mode-hook 'yas-minor-mode)
(add-hook 'org-mode-hook 'yas-minor-mode)
)
(setq yas-snippet-dirs
'("~/.emacs.d/snippets" ;; personal snippets
))
#+end_src
* Org Roam
** Basic
#+begin_src
(use-package org-roam
;(org-roam-directory (file-truename default-folder))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-graph)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
;; Dailies
("C-c n j" . org-roam-dailies-capture-today)
;; Tags
("C-c t a" . org-roam-tag-add)
("C-c t r" . org-roam-tag-remove)
)
:config
;; If you're using a vertical completion framework, you might want a more informative completion interface
(setq org-roam-completion-everywhere t)
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
;; If using org-roam-protocol
(require 'org-roam-protocol)
(require 'org-roam-export)
;(setq org-roam-db-location "~/Notes/org-roam.db")
(org-roam-directory "~/Notes")
(org-roam-dailies-directory "~/Notes/journals/")
(org-roam-capture-templates
'(("d" "default" plain
"%?" :target
(file+head "pages/${slug}.org" "#+title: ${title}\n")
:unnarrowed t)))
)
#+end_src
** Org-roam UI
#+begin_src emacs-lisp
(use-package org-roam-ui
:after org-roam
;; 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))
#+end_src
** ORG roam keybindings
#+begin_src emacs-lisp
(general-define-key
:keymaps '(normal insert emacs)
:prefix "SPC"
:global-prefix "C-SPC"
:non-normal-prefix "M-SPC"
"n f" '(org-roam-node-find :which-key "Find Node")
"n i" '(org-roam-node-insert :which-key "Insert Node")
"n b" '(org-roam-buffer-toggle :which-key "Toggle buffer")
"n c" '(org-roam-capture :which-key "Capture")
"n d t" '(org-roam-dailies-goto-today :which-key "Today")
"n d T" '(org-roam-dailies-goto-tomorrow :which-key "Tomorrow")
"n d y" '(org-roam-dailies-goto-yesterday :which-key "Yesterday")
"l b" '(list-bookmarks :which-key "List bookmarks")
"n t a" '(org-roam-tag-add :which-key "Add tag")
"n t r" '(org-roam-tag-remove :which-key "Remove tag")
"n s Y" '(org-download-screenshot :which-key "Download screenshot")
"n s y" '(org-download-yank :which-key "Download yank")
"n s c" '(org-download-clipboard :which-key "Past from clipboard")
)
#+end_src
** Bibtex
#+begin_src exports: no
(use-package org-roam-bibtex
:ensure t
:after org-roam
:config
(require 'org-ref)) ; optional: if using Org-ref v2 or v3 citation links
#+end_src
* Treemacs (File tree)
** Icons
#+begin_src emacs-lisp
(use-package all-the-icons
:ensure t
)
(use-package treemacs-all-the-icons
:ensure t
)
(use-package treemacs-nerd-icons
:config
(treemacs-load-theme "nerd-icons"))
#+end_src
** tree
#+begin_src emacs-lisp
(use-package treemacs
:config
(treemacs-load-all-the-icons-with-workaround-font "Hermit")
(general-define-key
:keymaps 'treemacs-mode-map
"C-c C-d" '(treemacs-delete-file :which-key "delete file")
"C-c C-c" '(treemacs-create-dir :which-key "create dir")
"C-c C-f" '(treemacs-create-file :which-key "create file")
"C-c SPC" '(treemacs-select-window :which-key "focus on treemacs")
;; Add more keybindings as needed
)
)
#+end_src
** keybindings
#+begin_src emacs-lisp
(general-define-key
:keymaps '(treemacs)
:prefix "t"
:global-prefix "C-SPC"
:non-normal-prefix "M-SPC"
"d" '(treemacs-delete-file :which-key "delete file")
"c" '(treemacs-create-dir :which-key "create dir")
)
#+end_src
* Projectile
** Basic
#+begin_src emacs-lisp
(use-package projectile
:ensure t
:diminish projectile-mode
:config (projectile-mode)
:custom ((projectile-completion-system 'ivy))
:bind-keymap
("C-c p" . projectile-command-map)
:init
;; NOTE: Set this to the folder where you keep your Git repos!
(when (file-directory-p "~/Projects/Code")
(setq projectile-project-search-path '("~/Projects/Code")))
(setq projectile-switch-project-action #'projectile-dired))
(use-package counsel-projectile
:ensure t
:config (counsel-projectile-mode))
#+end_src
* Magit
** Basic
#+begin_src emacs-lisp
;(use-package magit
; :custom
; (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
; )
#+end_src
* LaTeX Ninja 🥷
** Basic
#+begin_src emacs-lisp
(use-package cdlatex
:ensure t
:after org
:config
(add-hook 'org-mode-hook 'org-cdlatex-mode)
(setq org-format-latex-options (plist-put org-format-latex-options :scale 1.0))
(setq org-preview-latex-default-process 'dvisvgm) ;No blur when scaling
(defun my/text-scale-adjust-latex-previews ()
"Adjust the size of latex preview fragments when changing the
buffer's text scale."
(pcase major-mode
('latex-mode
(dolist (ov (overlays-in (point-min) (point-max)))
(if (eq (overlay-get ov 'category)
'preview-overlay)
(my/text-scale--resize-fragment ov))))
('org-mode
(dolist (ov (overlays-in (point-min) (point-max)))
(if (eq (overlay-get ov 'org-overlay-type)
'org-latex-overlay)
(my/text-scale--resize-fragment ov))))))
(defun my/text-scale--resize-fragment (ov)
(overlay-put
ov 'display
(cons 'image
(plist-put
(cdr (overlay-get ov 'display))
:scale (+ 1.2 (* 0.25 text-scale-mode-amount))))))
(add-hook 'text-scale-mode-hook #'my/text-scale-adjust-latex-previews)
)
#+end_src
** Live Preview
#+begin_src emacs-lisp
(use-package org-fragtog
:ensure t
:config
(add-hook 'org-mode-hook 'org-fragtog-mode)
)
#+end_src
** Exporting to latex
#+begin_src emacs-lisp
(with-eval-after-load 'ox-latex
(add-to-list 'org-latex-classes
'("org-plain-latex"
"\\documentclass{article}
[NO-DEFAULT-PACKAGES]
[PACKAGES]
[EXTRA]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
#+end_src
** TItle
*Format strings elements:*
- =%a= for AUTHOR keyword
- =%t= for TITLE keyword
- =%s= for SUBTITLE keyword
- =%k= for KEYWORDS line
- =%d= for DESCRIPTION line
- =%c= for CREATOR line
- =%l= for Language keyword
- =%L= for capitalized language keyword
- =%D= for DATE keyword
#+begin_src emacs-lisp
(setq org-latex-title-command "\\begin{titlepage}
\\begin{center}
\\vspace*{1cm}
\\textbf{%t}
\\vspace{0.5cm}
%s
\\vspace{1.5cm}
\\textbf{%a}
\\vfill
Преподователь: Токтамысов Сакен Жаугаштович
\\vspace{0.8cm}
Российский Университет Дружбы народов
Факультет физико-математических и естественных наук
Москва,Россия, 2023
\\end{center}
\\end{titlepage}
")
#+end_src
* Org-roam
#+begin_src emacs-lisp
(setq org-roam-directory "~/Notes/pages")
(setq org-roam-db-location "~/Notes/notes.org")
(setq org-roam-dailies-directory "~/Notes/journals/")
(setq org-roam-mode-sections
(list #'org-roam-backlinks-section
#'org-roam-reflinks-section
#'org-roam-unlinked-references-section
))
(add-to-list 'display-buffer-alist
'("\\*org-roam\\*"
(display-buffer-in-side-window)
(side . right)
(window-width . 0.33)
(window-parameters . (
(no-delete-other-windows . t)))))
#+end_src
* Programming
** LSP
#+begin_src emacs-lisp
(use-package lsp-mode
:ensure t
:commands lsp
:custom
;; what to use when checking on-save. "check" is default, I prefer clippy
(lsp-rust-analyzer-cargo-watch-command "clippy")
(lsp-eldoc-render-all t)
(lsp-idle-delay 1.6)
;; enable / disable the hints as you prefer:
(lsp-rust-analyzer-server-display-inlay-hints t)
(lsp-rust-analyzer-display-lifetime-elision-hints-enable "skip_trivial")
(lsp-rust-analyzer-display-chaining-hints t)
(lsp-rust-analyzer-display-lifetime-elision-hints-use-parameter-names nil)
(lsp-rust-analyzer-display-closure-return-type-hints t)
(lsp-rust-analyzer-display-parameter-hints nil)
(lsp-rust-analyzer-display-reborrow-hints nil)
:config
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
(use-package lsp-ui
:ensure t
:commands lsp-ui-mode
:custom
;(lsp-ui-peek-always-show t)
;(lsp-ui-sideline-show-hover t)
(lsp-ui-doc-enable nil)
:config
(setq lsp-ui-sideline-enable nil)
(setq lsp-ui-doc-enable t)
)
#+end_src
** Rust
#+begin_src emacs-lisp
(defun rk/rustic-mode-hook ()
;; so that run C-c C-c C-r works without having to confirm, but don't try to/
;; save rust buffers that are not file visiting. Once
;; https://github.com/brotzeit/rustic/issues/253 has been resolved this should
;; no longer be necessary.
(when buffer-file-name
(setq-local buffer-save-without-query t)))
(use-package rustic
:ensure t
:bind (:map rustic-mode-map
("M-j" . lsp-ui-imenu)
("M-?" . lsp-find-references)
("C-c C-c l" . flycheck-list-errors)
("C-c C-c a" . lsp-execute-code-action)
("C-c C-c r" . lsp-rename)
("C-c C-c q" . lsp-workspace-restart)
("C-c C-c Q" . lsp-workspace-shutdown)
("C-c C-c s" . lsp-rust-analyzer-status))
:config
;; uncomment for less flashiness
;; (setq lsp-eldoc-hook nil)
;; (setq lsp-enable-symbol-highlighting nil)
;; (setq lsp-signature-auto-activate nil)
;; comment to disable rustfmt on save
(setq rustic-format-on-save t)
;(setq lsp-rust-analyzer-server-display-inlay-hints t)
(add-hook 'rustic-mode-hook 'rk/rustic-mode-hook))
#+end_src
** Flycheck
#+begin_src emacs-lisp
(use-package flycheck :ensure t)
#+end_src
** TypeScript
#+begin_src emacs-lisp
(require 'lsp-mode)
(add-hook 'typescript-mode-hook 'lsp-deferred)
(add-hook 'javascript-mode-hook 'lsp-deferred)
(use-package typescript-mode
:ensure t
)
#+end_src
** Rust
** C++
#+begin_src emacs-lisp
(which-key-mode)
(add-hook 'c-mode-hook 'lsp)
(add-hook 'c++-mode-hook 'lsp)
#+end_src
** Haskell
#+begin_src emacs-lisp
(use-package haskell-mode
:ensure t
)
#+end_src
#+begin_src emacs-lisp
(setq telega-server-libs-prefix "/nix/store/pxgbyi8a3ngxnvn2xpkirrvf41645n58-tdlib-1.8.10")
(eval-after-load "company"
'(add-to-list 'company-backends '(company-capf)))
(setq debug-on-error t)
#+end_src
* Orb Publish
*** Setting up variables
#+begin_src emacs-lisp
(setq blog-path "~/Code/Blog/")
(setq blog-static-path "~/Code/Blog/html/")
(setq blog-content-path "~/Code/Blog/pages/")
(setq kb-static-path "~/Notes/html")
(setq kb-content-path "~/Notes/pages/")
(setq kb-static-path "~/Notes/html/daily")
(setq kb-content-path "~/Notes/journals/")
(setq blog-templates "~/Code/Blog/assets/templates/")
(setq org-publish-sitemap-sort-files 'anti-chronologically)
(setq org-export-with-section-numbers nil)
#+end_src
*** Custom sections
#+begin_src emacs-lisp
(defvar this-date-format "%b %d, %Y")
(defun blog/html-postamble (plist)
"PLIST."
(concat (format
(with-temp-buffer
(insert-file-contents (concat blog-templates "postamble.html")) (buffer-string))
(format-time-string this-date-format (plist-get plist :time)) (plist-get plist :creator))))
(defun blog/html-preamble (plist)
"PLIST: An entry."
(if (org-export-get-date plist this-date-format)
(plist-put plist
:subtitle (format "Published on %s by %s."
(org-export-get-date plist this-date-format)
(car (plist-get plist :author)))))
;; Preamble
(with-temp-buffer
(insert-file-contents (concat blog-templates "preamble.html")) (buffer-string)))
(defun blog/html-index-preamble (plist)
"PLIST: An entry."
(if (org-export-get-date plist this-date-format)
(plist-put plist
:subtitle (format "Published on %s by %s."
(org-export-get-date plist this-date-format)
(car (plist-get plist :author)))))
;; Preamble
(with-temp-buffer
(insert-file-contents (concat blog-templates "index-preamble.html")) (buffer-string)))
#+end_src
*** Sitemap
**** Sitemap format entry
#+begin_src emacs-lisp
(defun me/org-sitemap-format-entry (entry style project)
"Format posts with author and published data in the index page.
ENTRY: file-name
STYLE:
PROJECT: `posts in this case."
(cond ((not (directory-name-p entry))
(format "*[[file:%s][%s]]*
#+HTML: <p class='pubdate'>by %s on %s.</p>"
entry
(org-publish-find-title entry project)
(car (org-publish-find-property entry :author project))
(format-time-string this-date-format
(org-publish-find-date entry project))))
((eq style 'tree) (file-name-nondirectory (directory-file-name entry)))
(t entry)))
#+end_src
**** Sitemap function Music
#+begin_src emacs-lisp
(setq me/music-preamble-path "./.music-preamble.org")
(defun me/org-sitemap-music-function (title list)
"Takes path of other file to include into index.org before an index"
"Generate the sitemap (Blog Music Page)"
(concat "#+TITLE: " title "\n"
"#+INCLUDE:" me/music-preamble-path "\n"
(string-join (mapcar #'car (cdr list)) "\n\n"))
)
#+end_src
*** Preambles and postambles
#+begin_center emacs-lisp
(setq index-preamble "<section>
<div> <h3> Segmentation Fail. Horhik's blog </h3></div>
<div><ul>
<li><a href='./posts/index.html'>Posts</a></li>
<li><a href='./portfolio/index.html'>Portfolio</a></li>
<li><a href='./about/index.html'>About</a></li>
<li><a href='./donate/index.html'>Donate</a></li>
<li><a href='./projects/index.html'>Projects</a></li>
</ul></div>
</section>")
(setq inner-preamble "<header>
<div> <h3> <a href='../index.html'>Horhik's blog </a></h3></div>
<div><ul>
<li><a href='../posts/index.html'>Posts</a></li>
<li><a href='../portfolio/index.html'>Portfolio</a></li>
<li><a href='../about/index.html'>About</a></li>
<li><a href='../donate/index.html'>Donate</a></li>
<li><a href='../projects/index.html'>Projects</a></li>
</ul></div>
</header>")
(setq site-postamble "<footer><p>
<b> This site is made by Horhik and all contens are under CC I forgot full license name </b>
</p></footer>")
(setq org-html-preamble-format `(("en", inner-preamble)))
(setq org-html-postamble-format `(("en", site-postamble)))
#+end_center
*** list
#+begin_src emacs-lisp
(require 'ox-publish)
(setq org-publish-project-alist
`(
("blogposts"
:base-directory ,(concat blog-content-path "posts")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "posts")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:auto-sitemap t
:sitemap-format-entry me/org-sitemap-format-entry
:sitemap-filename "index.org"
:sitemap-title "Blog Index"
:with-tags t
:with-toc t
:section-numbers: nil
:table-of-contents t
:html-head-include-default-style nil
)
("portfolio"
:base-directory ,(concat blog-content-path "portfolio")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "portfolio")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:auto-sitemap t
:sitemap-format-entry me/org-sitemap-format-entry
:sitemap-filename "index.org"
:sitemap-title "Portfolio"
:sitemap-style list
:with-tags t
:with-toc t
:section-numbers: nil
:table-of-contents nil
:html-head-include-default-style nil
)
("about"
:base-directory ,(concat blog-content-path "about")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "about")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:validation-link nil
:section-numbers: nil
:table-of-contents nil
:with-toc nil
:html-head-include-default-style nil
)
("donate"
:base-directory ,(concat blog-content-path "donate")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "donate")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:validation-link nil
:with-toc nil
:table-of-contents nil
:html-head-include-default-style nil
:section-numbers: nil
)
("projects"
:base-directory ,(concat blog-content-path "projects")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "projects")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:validation-link nil
:table-of-contents nil
:html-head-include-default-style nil
:section-numbers: nil
)
("blogstatic"
:base-directory "~/Blog/pages/"
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "/home/horhik/Code/Blog/html/"
:recursive t
:publishing-function org-publish-attachment
:section-numbers: nil
)
("index"
:base-directory ,(concat blog-content-path "")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "")
:publishing-function org-html-publish-to-html
:site-toc nil
:section-numbers: nil
:table-of-contents: nil
:auto-sitemap: t
:sitemap-format-entry me/org-sitemap-format-entry
:headline-levels 8
:html-preamble blog/html-index-preamble
:html-postamble blog/html-postamble
)
("music"
:base-directory ,(concat blog-content-path "music")
:base-extension "org"
:publishing-directory ,(concat blog-static-path "music")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:auto-sitemap t
:sitemap-format-entry me/org-sitemap-format-entry
:sitemap-filename "index.org"
:sitemap-function me/org-sitemap-music-function
:sitemap-title "Music"
:sitemap-style list
:with-tags t
:with-toc t
:section-numbers: nil
:table-of-contents nil
:with-toc nil
:html-head-include-default-style nil
)
("Blog" :components ("blogposts" "blogstatic" "about" "index" "donate" "projects" "portfolio"))
("kb"
:base-directory ,(concat kb-content-path "")
:base-extension "org"
:publishing-directory ,(concat kb-static-path "")
:publishing-function org-html-publish-to-html
:recursive t
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:validation-link nil
:table-of-contents nil
:html-head-include-default-style nil
)
("kb-static"
:base-directory "~/Notes/pages/"
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "~/Notes/html/"
:recursive t
:publishing-function org-publish-attachment
)
("KB" :components ("kb" "kb-static"))
;; ("daily"
;; :base-directory ,(concat daily-content-path "")
;; :base-extension "org"
;; :publishing-directory ,(concat daily-static-path "")
;; :publishing-function org-html-publish-to-html
;; :recursive t
;; :headline-levels 8
;; :html-preamble blog/html-preamble
;; :html-postamble blog/html-postamble
;; :validation-link nil
;; :table-of-contents nil
;; :html-head-include-default-style nil
;; )
("daily-static"
:base-directory "~/Notes/journals/"
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
:publishing-directory "~/Notes/html/daily/"
:recursive t
:publishing-function org-publish-attachment
)
("DAILY" :components ("daily" "daily-static"))
)
)
#+end_src
*** Org-roam
#+begin_src emacs-lisp
(defun roam-sitemap (title list)
(concat "#+OPTIONS: ^:nil author:nil html-postamble:nil\n"
"#+SETUPFILE: ./simple_inline.theme\n"
"#+TITLE: " title "\n\n"
(org-list-to-org list) "\nfile:sitemap.svg"))
(setq my-publish-time 0) ; see the next section for context
(defun roam-publication-wrapper (plist filename pubdir)
(org-roam-graph)
(org-html-publish-to-html plist filename pubdir)
(setq my-publish-time (cadr (current-time))))
(add-to-list 'org-publish-project-alist
'("diary"
:base-directory "~/Notes/journals"
:auto-sitemap t
:sitemap-title "Diary"
:publishing-directory "~/Notes/html/journals"
:validation-link nil
:with-toc nil
:table-of-contents nil
:html-head-include-default-style nil
:style "<link rel=\"stylesheet\" href=\"/home/horhik/Blog/assets/site.css\" type=\"text/css\">"))
#+end_src
* Direnv
#+begin_src emacs-lisp
(use-package direnv)
(use-package ox-reveal)
(use-package nerd-icons)
#+end_src