1
0
Fork 0
mirror of https://github.com/Horhik/dotfiles.git synced 2024-11-23 08:31:31 +00:00
Dotfiles/home/emacs/.emacs.d/config.org
2023-04-17 22:21:11 +03:00

1374 lines
46 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
** Straight.el
#+begin_src emacs-lisp
(setq max-lisp-eval-depth 10000)
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/") t)
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
(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))
(setq straight-use-package-by-default t)
(setq package-enable-at-startup nil)
#+end_src
** Basic Theiming
#+begin_src emacs-lisp
; (add-to-list 'custom-theme-load-path "~/.emacs.d/everforest-theme")
; (load "~/.emacs.d/everforest-theme/everforest-hard-dark-theme.el")
; (load-theme 'everforest-hard-dark t)
(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.
)
(setq inhibit-startup-message t)
(setq visible-bell t)
(menu-bar-mode -1)
(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
:straight t)
(use-package solarized-theme
:straight t
)
(load-theme 'solarized-dark t nil)
#+end_src
** UI
*** Disbling line numbers
#+begin_src emacs-lisp
;(column-number-mode)
(global-display-line-numbers-mode 1)
(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)))
#+end_src
*** Rainbow Brakets
#+begin_src emacs-lisp
(use-package rainbow-delimiters
:straight 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
:straight t)
#+end_src
** Evil mode
#+begin_src emacs-lisp
(use-package evil
:straight 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
:straight t
:config
(setq evil-undo-system 'undo-redo)
(setq evil-set-undo-system 'undo-redo)
(use-package evil-collection
:straight t
:config
(evil-collection-init)
))
#+end_src
** Fonts
#+begin_src emacs-lisp
(add-to-list 'default-frame-alist
'(font . "Liberation Serif"))
;; Default fonts
;(add-to-list 'default-frame-alist '(font . "mononoki" ))
;(set-face-attribute 'default t :font "mononoki" )
;(set-frame-font "mononoki" nil t)
;;(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")
;(add-to-list 'default-frame-alist '(font . "Liberation Sans" ))
#+end_src emacs-lisp
*** Font for text-mode
#+begin_src emacs-lisp
;; (use-package mixed-pitch
;; :straight 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 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
:straight 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")
"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
"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 t)
(prettify-symbols-mode +1)
(display-line-numbers-mode 0)
)
(use-package org
:straight 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 "Mononoki Nerd Font" :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 "mononoki" :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")
("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)" "|" "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 Fonts
#+begin_src emacs-lisp
#+end_src emacs-lisp
*** 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 "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 🌄")))
;; 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
*** PDF Tools
#+begin_src emacs-lisp
(use-package pdf-tools
:straight 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-fontify-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
*** Image tools
#+begin_src emacs-lisp
;; Enable converting external formats (ie. webp) to internal ones
(setq image-use-external-converter t)
#+end_src
** Org Tempo
#+begin_src emacs-lisp
(use-package tempo
:straight 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
:straight t
:init (doom-modeline-mode 1)
:custom ((doom-modeline-height 15)))
#+end_src
** Calendar
#+begin_src emacs-lisp
;; https://github.com/emacsfodder/emacs-theme-darktooth
(use-package darktooth-theme
:straight (:host github :repo "emacsfodder/emacs-theme-darktooth" :branch "master" :files ("*.el" "out"))
)
;; (use-package emacs-calfw
;; :straight (:host github :repo "kiwanami/emacs-calfw" :branch "master" :files ("*.el" "out"))
;; :config
;; (require 'calfw)
;; (require 'calfw-org)
;; )
#+end_src
** Org-ref
#+begin_src emacs-lisp
(use-package org-ref
:straight t
)
#+end_src
* Org Download
#+begin_src emacs-lisp
(use-package org-download
:straight 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
* Ivy
#+begin_src emacs-lisp
(use-package ivy
:straight t
:diminish
: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
:straight t
:init (amx-mode 1))
#+end_src
** Ivy Frame and Counsel
#+begin_src emacs-lisp
(straight-use-package 'ivy-posframe)
(use-package counsel
:straight 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
:straight 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
:straight 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
:straight t
:config
(company-mode 1)
(add-hook 'after-init-hook 'global-company-mode)
(setq company-backends '((company-capf :with company-yasnippet)))
)
(use-package company-org-roam
:straight t
:hook (org-roam-mode . company-org-roam)
)
#+end_src
* Snippets
#+begin_src emacs-lisp
(use-package yasnippet
:straight 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 emacs-lisp
(let ((default-directory "~/Notes/"))
(use-package org-roam
:straight (:host github :repo "org-roam/org-roam"
:files (:defaults "extensions/*"))
:custom
(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)))
(org-roam-db-autosync-mode)
;; If using org-roam-protocol
(require 'org-roam-protocol)
(require 'org-roam-export)
:custom
(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
:straight
(:host github :repo "org-roam/org-roam-ui" :branch "main" :files ("*.el" "out"))
: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 emacs-lisp
(use-package org-roam-bibtex
:straight t
:after org-roam
:config
(require 'org-ref)) ; optional: if using Org-ref v2 or v3 citation links
#+end_src
* Projectile
** Basic
#+begin_src emacs-lisp
(use-package projectile
:straight 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
:straight t
:config (counsel-projectile-mode))
#+end_src
* Magit
** Basic
#+begin_src emacs-lisp
(use-package magit
:straight t
: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
:straight 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.5))
(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
:straight 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
* Starting with inline images
#+begin_src emacs-lisp
(setq org-startup-with-inline-images t)
#+end_src
* inkscape integratio
#+begin_src emacs-lisp
(use-package inkscape
:straight (:host github
:repo "ymarco/inkscape.el"
:files ("*.el" "*.svg"))
:config
(setq inkscape-fig-dir "../assets/")
)
#+end_src
* Encoding
#+begin_src emacs-lisp
(modify-coding-system-alist 'file "\\.tex\\'" 'cp1252)
#+end_src
* Telega
#+begin_src emacs-lisp
(use-package telega
:straight t
:config
(setq telega-use-docker nil))
#+end_src
* Music player
#+begin_src emacs-lisp
(use-package emms
:straight t
:config
(require 'emms-player-mplayer)
(require 'emms-player-simple)
(require 'emms-source-file)
(require 'emms-source-playlist)
(require 'emms-player-mplayer)
(setq emms-player-list '(emms-player-mpg321 emms-player-ogg123 emms-player-mplayer))
(setq exec-path (append exec-path '("/usr/local/bin")))
(add-to-list 'load-path "~/.emacs.d/site-lisp/emms/lisp")
(require 'emms-setup)
(require 'emms-player-mplayer)
(emms-standard)
(emms-default-players)
(define-emms-simple-player mplayer '(file url)
(regexp-opt '(".ogg" ".mp3" ".wav" ".mpg" ".mpeg" ".wmv" ".wma"
".mov" ".avi" ".divx" ".ogm" ".asf" ".mkv" "http://" "mms://"
".rm" ".rmvb" ".mp4" ".flac" ".vob" ".m4a" ".flv" ".ogv" ".pls"))
"mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen")
)
#+end_src
* Line NUmbers
* EAF
https://github.com/emacs-eaf/emacs-application-framework
#+begin_src emacs-lisp
; (add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/")
(use-package eaf
:straight (eaf
:type git
:host github
:repo "emacs-eaf/emacs-application-framework"
:files ("*.el" "*.py" "core" "app" "*.json")
:includes ( eaf-browser ) ; Straight won't try to search for these packages when we make further use-package invocations for them
:pre-build (("python" "install-eaf.py" "--install" "pdf-viewer" "browser" "evil" "--ignore-sys-deps"))
)
:init (evil-set-initial-state 'eaf-mode 'emacs)) ; Evil mode doesn't work well with eaf keybindings.
:config
;(eaf-wm-focus-fix-wms "i3")
;; unbind, see more in the Wiki
(use-package eaf-browser
:custom
(eaf-browser-continue-where-left-off t)
(eaf-browser-enable-adblocker t))
;(setq spacemacs-cmds)
(require 'eaf)
(eaf-bind-key insert_or_select_left_tab "nil" eaf-browser-keybinding)
#+end_src
* Krita
#+begin_src emacs-lisp
(use-package org-krita
:straight (org-krita
:type git
:host github
:repo "lepisma/org-krita"
:files ("*.el" "*.py" "core" "app" "*.json"))
:config
(add-hook 'org-mode-hook 'org-krita-mode))
#+end_src
* Habitica
#+begin_src emacs-lisp
(use-package habitica
:straight t
:config
(setq habitica-uid "0027ca78-392a-43ba-8450-d51f6be57b09")
(setq habitica-token "b3b28a7e-3ee8-4c21-8222-c8f8060c6d66")
)
#+end_src
* Programming
** LSP
#+begin_src emacs-lisp
(use-package lsp-mode
:straight 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
:straight 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
:straight 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 :straight 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
:straight 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
:straight t
)
#+end_src
* Music
** Tidal Cycles
#+begin_src emacs-lisp
(add-to-list 'load-path "~/.emacs.d/tidal")
(require 'haskell-mode)
(require 'tidal)
#+end_src
* Scripts
#+begin_src emacs-lisp
(defun increment-number-at-point ()
(interactive)
(skip-chars-backward "0-9")
(or (looking-at "[0-9]+")
(error "No number at point"))
(replace-match (number-to-string (1+ (string-to-number (match-string 0))))))
(global-set-key (kbd "C-c +") 'increment-number-at-point)
#+end_src
* HOWM
#+begin_src emacs-lisp
(use-package howm
:straight t
)
(global-set-key (kbd "C-x *") 'zoom)
#+end_src
* Orb Publish
** Setting up variables
#+begin_src emacs-lisp
(setq blog-path "~/Space/Code/Blog/")
(setq blog-static-path "~/Space/Code/Blog/html/")
(setq blog-content-path "~/Space/Code/Blog/html/")
(setq blog-templates "~/Space/Code/Blog/assets/templates/")
#+end_src
** Custom sections
#+begin_src emacs-lisp
(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
** 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
:sitemap-filename "posts.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 "/home/horhik/Code/Blog/pages/portfolio/"
:base-extension "org"
:publishing-directory "/home/horhik/Code/Blog/html/"
:publishing-function org-html-publish-to-html
:headline-levels 8
:html-preamble blog/html-preamble
:html-postamble blog/html-postamble
:sitemap-filename: "portfolio.org"
:sitemap-title: "Portfolio"
:validation-link nil
:table-of-contents nil
:html-head-include-default-style nil
)
("about"
:base-directory "/home/horhik/Code/Blog/pages/about/"
:base-extension "org"
:publishing-directory "/home/horhik/Code/Blog/html/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
:table-of-contents nil
:html-head-include-default-style nil
)
("donate"
:base-directory "/home/horhik/Code/Blog/pages/donate"
:base-extension "org"
:publishing-directory "/home/horhik/Code/Blog/html/"
: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
)
("projects"
:base-directory "/home/horhik/Code/Blog/pages/projects/"
:base-extension "org"
:publishing-directory "/home/horhik/Code/Blog/html/"
: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
:sitemap-filename "projects.org"
:sitemap-title "Projects"
:table-of-contents nil
:html-head-include-default-style 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
)
("index"
:base-directory "/home/horhik/Code/Blog/"
:base-extension "org"
:publishing-directory "/home/horhik/Code/Blog/html/"
:publishing-function org-html-publish-to-html
:auto-sitemap: t
:sitemap-filename "sitemap.org"
:sitemap-title "Sitemap"
:headline-levels 8
:html-preamble blog/html-index-preamble
:html-postamble blog/html-postamble
)
("Blog" :components ("blogposts" "blogstatic" "projects" "portfolio" "about" "donate" "index"))
)
)
#+end_src