From a7d51fbc4077f6d41a1efa1e6ef55dbd3f327297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Podgor=C5=A1ek?= Date: Wed, 27 Dec 2023 19:44:27 +0100 Subject: [PATCH] Premikanje emacs konfiguracije v ORG --- .emacs.d/config.org | 990 ++++++++++++++++++++++++++++++++++++++++++-- .emacs.d/init.el | 662 ++--------------------------- 2 files changed, 991 insertions(+), 661 deletions(-) diff --git a/.emacs.d/config.org b/.emacs.d/config.org index c8ad588..8da3e11 100644 --- a/.emacs.d/config.org +++ b/.emacs.d/config.org @@ -1,13 +1,12 @@ #+TITLE: EMACS konfiguracija -* Splošno - -Tukaj se nahaja celotna konfiguracija za emacs urejevalnik, ki jo uporabljam, v ORGMODE obliki. Na ta - "literate programming" oz. pismeni način - podana konfiguracija daje v ospredje opis posameznih sekcij in s tem poveča preglednost, olajša pa tudi navigacijo po konfiguraciji. +Tukaj se nahaja celotna konfiguracija za emacs urejevalnik, ki jo uporabljam, v ORG obliki. Na ta - "literate programming" oz. pismeni način - podana konfiguracija daje v ospredje opis posameznih sekcij in s tem poveča preglednost, olajša pa tudi navigacijo po konfiguraciji. Razdeljena je na poglavja ohlapno glede na vlogo oz področje. Področja so nekoliko raznosvrstna (evil način - tipkovnične bližnjice v slogu VIM so ena sekcija, programiranje druga...), bi pa moralo biti iz naslovov precej jasno, za kaj gre. -* Sekcije +V primeru napak pri nalaganju ne pozabimo na uporaben ukaz ~emacs --debug-init~. +* Sekcije ** Zagon ~debug-on-error~ uresničimo, če bi radi sprožili razhroščevalnik, kadar pride do napake (zelo priročno pri reševanju težav). @@ -22,7 +21,24 @@ Pospešimo zagon z zmanjšanjem frekvence zbiranja smeti (garbage collection). (setq gc-cons-threshold (* 50 1024 1024)) #+end_src -** Paketi +Vedno sledi simboličnim linkom. To potrebujem, ker se konfiguracijski fajli +ponavadi nahajajo v ločenem direktoriju zbirke konfiguracij in je tečno +vsakič potrjevati sledenje v dialogu. + +#+begin_src emacs-lisp + (setq vc-follow-symlinks t) +#+end_src + +Po zagunu izpiši čas nalaganja. + +#+begin_src emacs-lisp + (add-to-list 'after-init-hook + (lambda () + (message (concat "emacs (" (number-to-string (emacs-pid)) ") started in " + (emacs-init-time))))) +#+end_src + +** Nalaganje paketov Vklopi prikazovanje statistik naloženih paketov (prikažemo jih z ~M-x use-package-report~). @@ -75,11 +91,46 @@ Paket ~evil-collection~ pa vsebuje še dodatne evil bližnjice (recimo za ~help- (evil-collection-init)) #+end_src +Evil v ~orgmode~ načinu (pa tudi v ~org-agenda~). + +#+begin_src emacs-lisp +(use-package evil-org + :after org + :hook ((org-mode . evil-org-mode)) + :config + (require 'evil-org-agenda) + (evil-org-set-key-theme '(navigation insert textobjects additional calendar)) + (evil-org-agenda-set-keys) +#+end_src + +V evil mode lahko linke znotraj ORG dokumentov odpiramo kar z ~RET~. + +#+begin_src emacs-lisp + (defun odpri-org-link () + "Odpri link v ORG fajlu pod kurzorjem" + (interactive) + (if (org-in-regexp org-link-any-re nil t) + (org-open-at-point) + nil)) + + (general-evil-define-key + 'normal + org-mode-map + "RET" 'odpri-org-link)) +#+end_src + +Evil v ~treemacs~ drevesu datotečnega sistema. + +#+begin_src emacs-lisp + (use-package treemacs-evil :after treemacs) +#+end_src + ** Vezane tipke S paketom ~general~ je definiranih več kategorij tipkovničnih bližnjic, ki so združene po svoji funkciji, podobno kot poglavja tega dokumenta. Če v ukaznem načinu kliknemo ~SPC~ (ali pa v tekstovnem načinu ~C-SPC~), se nam prikažejo tipke kategorij, po kliku na posamezno pa ukazi, ki jih sprožimo (ali pa podkategorije). -V sledečim podpoglavjih so navedene kategorije posameznih bližnjic. + +V sledečim podpoglavjih so navedene kategorije posameznih bližnjic. Imajo dokaj samoopisna imena. Paket ~which key~ sproti izpisuje, kaj kateri gumb počne oz. kam nas pelje dalje. #+begin_src emacs-lisp (setq kategorije-bliznjic '()) @@ -101,12 +152,17 @@ V sledečim podpoglavjih so navedene kategorije posameznih bližnjic. *** Splošne bližnice Tukaj se nahajate samo bližnjici za preklop med bufferji (kako bi to lepo prevedli?). +In pa ukaz za ponovno naložit konfiguracijo emacsa. #+begin_src emacs-lisp + (defun ponovno-nalozi-config () (load-file "~/.emacs.d/init.el")) + (start/leader-keys ;; Osnovne bliznjice "[" 'previous-buffer - "]" 'next-buffer) + "]" 'next-buffer + "r" 'ponovno-nalozi-config + ) #+end_src *** Upravljanje z okni @@ -127,10 +183,10 @@ Navigacijo med okni izvajamo s klasičnimi HJKL UNIX smernimi tipkami, recimo ok *** Upravljanje z bufferji -TODO napiši navodila +Bližnjice za delo z bufferji se začnejo z ~b~. Ne pozabimo na splošni +bližnjici (~[~ in ~]~ za prejšnji / naslednji buffer). #+begin_src emacs-lisp - (defun nalozi-konfiguracijo () (interactive) (find-file "~/.emacs.d/config.org")) (start/leader-keys "b" '(:ignore t :wk "buffer") "b b" 'switch-to-buffer @@ -138,7 +194,6 @@ TODO napiši navodila "b n" 'next-buffer "b e" 'eval-buffer "b s" (defun scratch-buffer () "Show scratch buffer" (interactive) (switch-to-buffer "*scratch*")) - "b c" 'load-config "b d" 'kill-current-buffer "b k" 'kill-buffer) #+end_src @@ -149,25 +204,27 @@ TODO napiši navodila TODO napiši navodila #+begin_src emacs-lisp - (add-to-list 'kategorije-bliznjic (lambda () - (start/leader-keys - ;; EVAL ukazi - "e" '(:ignore t :wk "eval") - "e b" 'eval-buffer - "e e" 'eval-expression - "e r" 'eval-region))) + (start/leader-keys + ;; EVAL ukazi + "e" '(:ignore t :wk "eval") + "e b" 'eval-buffer + "e e" 'eval-expression + "e r" 'eval-region) #+end_src *** Datoteke -TODO napiši navodila +Bližnjice za delo z datotekami se začnejo s ~f~. #+begin_src emacs-lisp - (add-to-list 'kategorije-bliznjic (lambda () - (start/leader-keys + (defun odpri-konfiguracijo () (interactive) (find-file "~/.emacs.d/config.org")) + (defun odpri-init () (interactive) (find-file "~/.emacs.d/init.el")) + + (start/leader-keys "f" '(:ignore t :wk "file") "f f" 'counsel-find-file - "f c" 'load-config))) + "f c" 'odpri-konfiguracijo :wk "odpri konfiguracijo (config.org)" + "f i" 'odpri-init :wk "odpri init.el") #+end_src *** Vplogled / introspekcija @@ -175,13 +232,12 @@ TODO napiši navodila Emacs nudi kup uporabnih funkcij, ki so nepogrešljive na poti učenja o funkcionalnosti. Zaenkrat sem definiral bližnjice do štirih od njih; opis funkcije, tipke, simbola (to so recimo rezervirana imena spremenljivk), načina (~mode~). #+begin_src emacs-lisp - (add-to-list 'kategorije-bliznjic (lambda () - (start/leader-keys - "d" '(:ignore :t :wk "describe") - "d f" 'describe-function - "d k" 'describe-key - "d s" 'describe-symbol - "d m" 'describe-mode))) + (start/leader-keys + "d" '(:ignore :t :wk "describe") + "d f" 'describe-function + "d k" 'describe-key + "d s" 'describe-symbol + "d m" 'describe-mode) #+end_src *** Konec @@ -193,4 +249,880 @@ To pa je malo grdo pri pismenem programiranju. ) #+end_src -** Zaključek +** Emacs splošno +*** Ivy dopolnjevanje/iskanje +~ivy~ je sistem za avtomatsko dopolnjevanje, uporaben preko celotnega emacsa. +Nudi tudi prijaznejši način menjave bufferja, kar nastavimo na ~SPC ,~ ter ~SPC b b~. + +#+begin_src emacs-lisp + (use-package ivy + :general + (start/leader-keys + "," 'ivy-switch-buffer + "b b" 'ivy-switch-buffer) + :config + (ivy-mode) +#+end_src + +Nastavimo uporabo rekurzivnih minibufferjev za dopolnjevanje ter nastavimo še nekaj tipkovničnih bližnjic za malo lažje delo z ~ivy~. + +#+begin_src emacs-lisp + (setq ivy-use-virtual-buffers t) + (setq enable-recursive-minibuffers t) + (local-set-key (kbd "C-j") 'ivy-next-line) + (local-set-key (kbd "C-k") 'ivy-prevous-line) + (local-set-key [remap scroll-up-command] 'ivy-scroll-up-command) + (local-set-key [remap scroll-down-command] 'ivy-scroll-down-command) + (global-set-key (kbd "C-c C-r") 'ivy-resume) + (global-set-key (kbd "") 'ivy-resume)) +#+end_src + +~swiper~ je ivy-jev iskalnik po bufferjih, ki nudi lep vmesnik s predogledom rezultatov, nastavimo ga na ~C-S~. + +#+begin_src emacs-lisp + (use-package swiper + :defer t + :config + (global-set-key "\C-s" 'swiper)) +#+end_src + +~counsel~ pa nudi kup zamenjav privzetih emacs ukazov/operacij za prijetnejša opravila. Nastavimo nekaj bližnjic za njih. Recimo ~M-x~ menjava ki kaže predoglede v minibuferju, ~SPC RET~ za shranjevanje in menjavo med zaznamki, ~SPC /~ za ripgrep rekurzivno iskanje po vsebini datotek (potrebuje nameščen ~ripgrep~!). + +#+begin_src emacs-lisp + (use-package counsel + :config + (global-set-key (kbd "M-x") 'counsel-M-x) + (global-set-key (kbd "C-x C-f") 'counsel-find-file) + (global-set-key (kbd " f") 'counsel-describe-function) + (global-set-key (kbd " v") 'counsel-describe-variable) + (global-set-key (kbd " o") 'counsel-describe-symbol) + (global-set-key (kbd " l") 'counsel-find-library) + (global-set-key (kbd " i") 'counsel-info-lookup-symbol) + (global-set-key (kbd " u") 'counsel-unicode-char) + (global-set-key (kbd "C-c g") 'counsel-git) + (global-set-key (kbd "C-c j") 'counsel-git-grep) + (global-set-key (kbd "C-c k") 'counsel-ag) + (global-set-key (kbd "C-x l") 'counsel-locate) + (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) + (start/leader-keys + "RET" 'counsel-bookmark + "/" 'counsel-projectile-rg) +#+end_src + +~counsel-M-x~ poganjalnik ukazov doplnimo s paketom ~smex~ za prikazovanje nedavno uporabljenih ukazov pri vrhu. + +#+begin_src emacs-lisp + (use-package smex) +#+end_src + +Šum pri iskalnih rezultatih ripgrep-a zmanjšamo z ignoriranjem ~node_modules~ direktorija javascript odvisnih paketov. + +#+begin_src emacs-lisp + (defvar my-rg-excludes '("node_modules") + "List of directories to exclude from `counsel-rg' results.") + (define-advice counsel-rg + (:around (fn &optional in dir opts &rest args) my-glob) + "Exclude `my-rg-excludes' from `counsel-rg' results." + (let ((dir (or dir default-directory))) + (dolist (x my-rg-excludes) + (let ((glob (and (file-in-directory-p x dir) + (file-relative-name (expand-file-name "**" x) dir)))) + (when glob (setq opts (concat "-g !" glob (and opts " ") opts)))))) + (apply fn in dir opts args))) +#+end_src + +** ORG + +Orgmode je način, v katerem je spisan tale dokument. Orgmode je marsikaj, lahko bi ga pa strnili v razširitev navadnega (plain) teksta. + +#+begin_src emacs-lisp + (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) + (use-package org +#+end_src + +Dodamo tudi bližnjice za ~org-capture~ ter ~org-agenda~. +TODO dodaj več! + +#+begin_src emacs-lisp + :general + (start/leader-keys + "o" '(:ignore t :wk "orgmode") + "o c" 'org-capture + "o a" 'org-agenda + "o w" 'writeroom-mode + "o t" 'org-time-stamp) +#+end_src + +V org dokumente lahko vnašamo bloke vsebin, kot so programska koda, citati in podobno. Privzeto to dosežemo s ~C-c C-,~ in izbiro vrste željenega bloka, s sledečo konfiguracijo pa vklopimo bližnjico; na prazni vrstici samo "~ in ~S-~. + +#+begin_src emacs-lisp + (setq org-todo-keywords + '((sequence "TODO" "V DELU" "TESTIRANJE" "DOKUMENTIRANJE" "KONČANO")))) +#+end_src + +*** Nemoteno pisanje + +Način ~writeroom-mode~ omogoča nemoteno pisanje; trenutni buffer raztegne čez cel zaslon in v sredino centrira širinsko-omejen tekst. Tako buffer izgleda bolj kot popisan list papirja. + +#+begin_src emacs-lisp + (use-package writeroom-mode + :defer t + :config + :hook ((org-mode . (lambda () (display-line-numbers-mode -1))))) +#+end_src + +*** Sinhronizacija koledarjev + +Paket ~org-caldav~ omogoča sinhronizacijo koledarskih dogodkov v org dokumente. +TODO popravi/preveri delovanje? + +#+begin_src emacs-lisp + (use-package org-caldav + :defer t + :init + (setq org-caldav-url "https://goba.rhiz0.me/remote.php/dav/calendars/g1smo" + org-caldav-files '("~/org/todo.org") + org-icalendar-timezone "Europe/Ljubljana" + org-caldav-calendars '((:calendar-id "org" + ;:files '("~/org/todo.org") + :inbox "~/org/koledarji/org-in.org") + (:calendar-id "personal" + :inbox "~/org/koledarji/osebno-in.org") + (:calendar-id "megla" + :inbox "~/org/koledarji/megla-in.org")))) +#+end_src + +*** Izgled + +Za šminko olepšamo predpone (pod)poglavij v simbole namesto vrst zvezdic. + +#+begin_src emacs-lisp + (use-package org-bullets + :after org + :hook ((org-mode . (lambda () (org-bullets-mode 1))))) +#+end_src + +Pri seznamih prikaži pike namesto vezajev. + +#+begin_src emacs-lisp + (font-lock-add-keywords + 'org-mode + '(("^ *\\([-]\\) " + (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) +#+end_src + +Za lepšo preglednost osvetlimo ozadje org blokov (recimo primere izvorne kode). + +#+begin_src emacs-lisp + (require 'color) + (set-face-attribute 'org-block nil :background + (color-darken-name + (face-attribute 'default :background) 3)) +#+end_src + +Lepše pisave v blokih izvorne kode. + +#+begin_src emacs-lisp + (setq org-src-fontify-natively t) +#+end_src + +Naslov dokumenta ter naslove in podnaslove prikaži z drugimi pisavami in velikostmi. + +#+begin_src emacs-lisp + ;; Drugačne pisave za naslove, svoje velikosti + ;; Vir: https://zzamboni.org/post/beautifying-org-mode-in-emacs/ + (let* ((variable-tuple + (cond ((x-list-fonts "ETBembo") '(:font "ETBembo")) + ((x-list-fonts "Lucida Grande") '(:font "Lucida Grande")) + ((x-list-fonts "Verdana") '(:font "Verdana")) + ((x-family-fonts "Sans Serif") '(:family "Sans Serif")) + (nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro.")))) + (headline `(:inherit default :weight bold))) + + (custom-theme-set-faces + 'user + `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1)))) + `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25)))) + `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.45)))) + `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75)))) + `(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil)))))) +#+end_src + +*** Izvoz + +V HTML org izvozu obarvaj bloke kode. + +#+begin_src emacs-lisp + (use-package htmlize :after org-mode :defer t) +#+end_src + +** Grafični vmesnik + +Barvna tema je [[https://github.com/greduan/emacs-theme-gruvbox][gruvbox]], v varjanti ~gruvbox-dark-soft~. + +#+begin_src emacs-lisp + (use-package gruvbox-theme + :config + (load-theme 'gruvbox-dark-soft t)) +#+end_src + +Modeline vrstica (v bufferjih spodaj) je iz doom emacsa. + +#+begin_src emacs-lisp + (use-package doom-modeline + :defer t + :init (doom-modeline-mode 1)) +#+end_src + +Uporabimo nerd ikone. ~POZOR~ pisavo naložimo z ukazom ~M-x nerd-icons-install-fonts~. + +#+begin_src emacs-lisp + (use-package nerd-icons) + + ; Rabimo tudi all the icons? + ;(use-package all-the-icons) +#+end_src + +*** Drsenje (skrolanje) + +Omogočimo gladko piksel skrolanje, v emacsu od verzije 29 dalje in nastavimo dve opciji, ki sta skopirani od drugje in za njih nevem kaj počneta. Mislim da vpivata na to, kako je, ko pridrsaš do dna okna. + +#+begin_src emacs-lisp + (pixel-scroll-precision-mode) + ;; Nevem kaj to dela + (setq scroll-conservatively 10) + (setq scroll-margin 8) +#+end_src + +*** Prihranimo prostor + +Nekaj prostora prihranimo z umikom menija in orodne vrstice, iz katere tudi umaknemo ikone. + +#+begin_src emacs-lisp + (menu-bar-mode -1) + (tool-bar-mode -1) + (setq ns-use-proxy-icon nil) +#+end_src + +Onemogočimo grafične dialoge. Namesto tega tekstovno odgovorimo y/n (skrajšana oblika). + +#+begin_src emacs-lisp + (setq use-dialog-box nil) + (fset 'yes-or-no-p 'y-or-n-p) +#+end_src + +Umaknemo tudi naslove okvirjev. + +#+begin_src emacs-lisp + (setq frame-title-format nil) +#+end_src + +Ob strani piksle pridobimo s skrivanjem drsnega traka. + +#+begin_src emacs-lisp + (scroll-bar-mode -1) +#+end_src + +Zmanjšamo razmike med okni. + +#+begin_src emacs-lisp + (setq window-divider-default-bottom-width 3) + (window-divider-mode t) +#+end_src + +** Tekst + +V široko paleto funkcionalnosti emacsa spada tudi urejanje navadnega teksta. + +Za začetek nastavimo uporabo dveh navadnih presledkov za tab zamik. + +#+begin_src emacs-lisp + (setq-default tab-width 2) + (setq-default indent-tabs-mode nil) +#+end_src + +Vklopimo avtomatsko zapiranje oklepajev ter emacsovo avtomatsko zamikanje. + +#+begin_src emacs-lisp + (electric-indent-mode 1) + (electric-pair-mode 1) +#+end_src + +Tekst naj se prelamlja ob robu okna! Skrolanje na stran je naporno... + +#+begin_src emacs-lisp + (global-visual-line-mode) +#+end_src + +Ponavadi nas tudi zanimajo številke vrstic. Predvsem zaradi urejanje kode, morda bi to bolj pasalo v odsek programiranja TODO. + +#+begin_src emacs-lisp + (global-display-line-numbers-mode) +#+end_src + +Namesto navadnega undo/redo lahko uporabimo drevesne razveljavitve. Teh dreves nisem zares nikoli neposredno uporabljal, je pa praktično shranjevanje zgodovine undoja v emacsov nastavitveni direktorij. + +#+begin_src emacs-lisp + (use-package undo-tree + :config + (global-undo-tree-mode) + (evil-set-undo-system 'undo-tree) + ;; Drevo razveljavitev shrani v emacsov folder + (setq undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo")))) +#+end_src + +In pa nenazadnje, čeravno je ORGMODE superioren, naložimo še podporo za [[https://www.markdownguide.org/][markdown]]. + +#+begin_src emacs-lisp + (use-package markdown-mode :mode "\\.(md|markdown)\\'") +#+end_src + +** Splošne emacs razširitve + +** Delo s projekti + +Knjižnica za projektne interakcije. Vsak projekt je svoja git zbirka. Lajša menjavo med projekti, iskanje datotek v posameznem projektu in tako dalje. + +#+begin_src emacs-lisp + (use-package projectile +#+end_src + +~SPC p~ odpre preddefinirano drevo bližnjic za delo s ~projectile~. + +#+begin_src emacs-lisp + :general + (start/leader-keys "p" 'projectile-command-map) +#+end_src + +Vlopimo projectile način, prezrimo direktorij z javascript paketi in priklopimo na ~ivy~ mehanizem za avtomatsko dopolnjevanje. + +#+begin_src emacs-lisp + :config + (projectile-mode t) + (setq projectile-globally-ignored-directories '("node_modules")) + (setq projectile-completion-system 'ivy) +#+end_src + +Zaradi težav pri uporabi =projectile= preko SSH povezav spremenimo način indeksiranja datotečnega drevesa. Dodajanje večjega projekta zato traja nekoliko dlje + +#+begin_src emacs-lisp + (setq projectile-indexing-method 'native) + (setq projectile-enable-caching t) + ;(add-to-list 'tramp-remote-path 'tramp-own-remote-path) + ;(setq-default projectile-indexing-method 'alien) +#+end_src + +Datoteke sortiraj glede na nedavno uporabljene bufferje in nato nedavno odprte. + +#+begin_src emacs-lisp + (setq projectile-sort-order 'recently-active)) +#+end_src + +~counsel-projectile~ nudi dodatne integracije z ~ivy~ sistemom dopolnjevanja. +#+begin_src emacs-lisp + (use-package counsel-projectile :after projectile) +#+end_src + +*** Oblikovanje teksta + +[[https://editorconfig.org/][Editorconfig]] omogoča nastavljanje oblikovanje tekstovnih fajlov na ravni posameznega projekta. + +#+begin_src emacs-lisp + (use-package editorconfig + :config + (editorconfig-mode 1)) +#+end_src + +*** Datotečno drevo + +~treemacs~ nudi vizualni drevesni pregled nad datotekami in direktoriji za posamezni projekt. +Vklop je nastavljen na ~SPC t~. Številke vrstic nas v drevesnem bufferju ne zanima. Pridodamo še paket za ~projectile~ podporo. + +#+begin_src emacs-lisp + (use-package treemacs + :defer t + :general + (start/leader-keys + "t" 'treemacs) + :hook ((treemacs-mode . (lambda () ;; Brez stevilk vrstic v file drevesu! + (display-line-numbers-mode -1))))) + (use-package treemacs-projectile :after treemacs) +#+end_src + +** Programiranje + +*** Splošno + +Samodejno zapiranje oklepajev. + +#+begin_src emacs-lisp + (use-package smartparens-mode + :ensure smartparens + :hook (prog-mode text-mode markdown-mode) + :config + (require 'smartparens-config)) +#+end_src + +Avtomatsko dopolnjevanje izrazov. + +#+begin_src emacs-lisp + (use-package company + :config + (setq lsp-completion-provider :capf) + :init (global-company-mode)) +#+end_src + +~flycheck~ sproti preverja sintakso kode in opozarja na morebitne nečednosti. + +#+begin_src emacs-lisp + (use-package flycheck + :defer t + :init (global-flycheck-mode)) +#+end_src + +Avtomatsko oblikovanje kode za razne programske jezike. Kličemo ga ročno. TODO dodamo kakšno bližnjico? + +#+begin_src emacs-lisp + (use-package format-all :defer t) +#+end_src + +*** GIT + +~magit~ paket je super za delo z git sistemom za deljeno verzioniranje kode ali drugih podatkov. + +#+begin_src emacs-lisp + (use-package magit + :defer t + :general + (start/leader-keys + "g" '(:ignore t :wk "magit") + "g s" 'magit-status)) +#+end_src + +Z ~magit-todos~ si malo olajšamo spremlajnje TODO-jev v drevesu kode. + +#+begin_src emacs-lisp +(use-package magit-todos + :after magit + :config (magit-todos-mode 1)) +#+end_src + +*** Tree-sitter + +Tree-sitter je knjižnica za inkrementalno razčlenjevanje (parsing) programske kode. Na podlagi definicij slovnic za različne programske jezike (namestimo jih z ~M-x treesit-install-language-grammar~) omogoča obarvanja kode, priporočila in podobno. To počne nekoliko hitreje kot klasični načini. Tukaj so definicije nadomestnih treesit načinov za določene programske jezike. + +S ~treesit-auto~ paketom se avtomatsko naredijo asociacije za treesit načine, vedno ko odpremo fajl s podporo ze treesitter pa nas obvesti o tem, da ga lahko namestimo. Tako ni treba ročno nastavljat za vsak programski jezik posebej. + +#+begin_src emacs-lisp + (use-package treesit-auto + :defer t + :custom + (treesit-auto-install 'prompt) + :config + (treesit-auto-add-to-auto-mode-alist 'all) + (global-treesit-auto-mode)) +#+end_src + +Spodaj pa je primer nastavitev ročnih asociacij s fajli, za menjavo z klasičnimi major načini. + +#+begin_src emacs-lisp +; (dolist +; (item (list '("\\.css\\'" . css-ts-mode) +; '("\\.json\\'" . json-ts-mode) +; '("\\.php\\'" . php-ts-mode) +; '("\\.py\\'" . python-ts-mode) +; '("\\.js\\'" . js-ts-mode))) +; (add-to-list 'auto-mode-alist item)) +#+end_src + +*** LISP + +To poglavje zajema nastavitve raznih LISP dialektov. + +Vsi LISPi, tudi vgrajeni emacs-lisp, so bolj berljivi z mavričnim obarvanjem oklepajev. + +#+begin_src emacs-lisp + (use-package rainbow-delimiters + :hook ((prog-mode . rainbow-delimiters-mode))) +#+end_src + +~Geiser~ lajša delo s scheme jeziki, nastavljeno za [[https://www.gnu.org/software/guile/][GNU Guile]]. Omogoča recimo povezovanje v REPL (read-eval-print-loope). + +#+begin_src emacs-lisp + (use-package geiser-guile + :mode "\\.scm\\'" + :general + (start/leader-keys + :infix "s" + "" '(:ignore t :wk "geiser") + "b" 'geiser-eval-buffer + "e" 'geiser-eval-expression + "s" (defun geiser-start-and-eval-buffer () + (interactive) + (geiser-guile) + (previous-buffer) + (geiser-eval-buffer)) + "s" 'geiser-start-and-eval-buffer + "g" 'geiser + "c" 'geiser-connect + "k" 'geiser-exit-repl + "r" (defun geiser-restart () + ;(interactive) + (geiser-exit-repl) + (geiser-start-and-eval-buffer))) + :init (setq scheme-program-name "guile")) +#+end_src + +Kdaj delam tudi z [[https://racket-lang.org/][racket]]. + +#+begin_src emacs-lisp + (use-package racket-mode :mode "\\.rkt\\'") +#+end_src + +*** Spletno + +Način za obarvanje html, twig in podobne kode (jinja?) se imenuje ~web-mode~. +Dodamo še pripadajoč paket za olepševanje kode (avtomatsko prilagoditev zamikov kode). + +#+begin_src emacs-lisp + (use-package web-mode :mode "\\.(html|twig)\\'") + (use-package web-beautify :after web-mode) +#+end_src + +Ozadja pri ~vue-mode~ se z gruvbox temo rada grdo pomešajo, kar lahko rešimo s sledečim hookom: + +#+begin_src emacs-lisp + (add-hook 'mmm-mode-hook + (lambda () + (set-face-background 'mmm-default-submode-face nil))) +#+end_src + +CSS zamike nastavimo na 2 presledka, kot je drugje. + +#+begin_src emacs-lisp + (setq css-indent-level 2) + (setq css-indent-offset 2) +#+end_src + +Pri spletnem programiranju zelo prav pride tudi [[https://github.com/pashky/restclient.el][restclient]] odjemalec za pošiljanje HTTP poizvedb in pregled odzivov. + +#+begin_src emacs-lisp + (use-package restclient :defer t) +#+end_src + +**** PHP + +Podpora za programiranje s PHP domačo spletno stranjo oz. hipertekstualnim predprocesorjem. + +#+begin_src emacs-lisp + (use-package php-mode + :mode "\\.(php|module)\\'" +#+end_src + +Bližnjica za cache rebuild na drupalu (dela tudi preko SSH!). + +#+begin_src emacs-lisp + :general + (start/leader-keys + "d d" (defun drupal-cache-rebuild () + (interactive) + (shell-command "drush cr")))) +#+end_src + +Sicer obstaja tudi način ki lajša delanje z drupalom. + +#+begin_src emacs-lisp + (use-package drupal-mode :after php-mode) +#+end_src + +**** Javascript + +Najprej nastavimo zamike. + +#+begin_src emacs-lisp + (setq js2-strict-missing-semi-warning nil + js2-missing-semi-one-line-override nil + js2-basic-offset 2 + js-indent-level 2 + indent-tabs-mode nil + tab-width 2) +#+end_src + +~js2~ je en fajn način za javascriptanje. + +#+begin_src emacs-lisp + (use-package js2-mode + :mode "\\.js\\'") +#+end_src + +Vue način lajša razvoj z [[https://vuejs.org/][vue javascript ogrodjem]]. Integriran je z LSP, moramo pa za integracijo globalno namestiti npm paket: ~sudo npm i -g vue-language-server~ + +#+begin_src emacs-lisp +(use-package vue-mode + :mode "\\.vue\\'" + :config (add-hook 'vue-mode-hook #'lsp)) +#+end_src + +~rjsx~ pride prav pri recimo ogrodju [[https://react.dev/][react]]. + +#+begin_src emacs-lisp + (use-package rjsx-mode :after js2-mode) +#+end_src + +*** Python + +Zamik na 2 presledka. + +#+begin_src emacs-lisp + (setq python-indent-offset 2) +#+end_src + +Podpora za delo z [[https://docs.python.org/3/library/venv.html][venv]] okolji. + +#+begin_src emacs-lisp + (use-package pyvenv + :mode "\\.py\\'" + :config + (pyvenv-mode t) +#+end_src + +Nastavljen naj bo na ~python3~. + +#+begin_src emacs-lisp + (setq pyvenv-post-activate-hooks + (list (lambda () + (setq python-shell-interpreter (concat pyvenv-virtual-env "bin/python3"))))) + (setq pyvenv-post-deactivate-hooks + (list (lambda () + (setq python-shell-interpreter "python3"))))) +#+end_src + +*** Živo kodiranje + +[[https://supercollider.github.io/][supercollider]] je platforma za zvočno sintezo in algoritmično kompozicijo. Uporabna tudi za živo kodiranje. Vključuje svoje integrirano razvijalsko okolje, integrira se pa tudi z emacsom. + +Najprej moramo vključit direktorij, v katerem se nahajajo emacs paketi zanj (pridejo z namestitvijo supercolliderja), pot pa je odvisna od linux distribucije ali nastavitev pri prevajanju iz izvorne kode: + +#+begin_src emacs-lisp + (add-to-list 'load-path "/usr/share/emacs/site-lisp/SuperCollider/") +#+end_src + +Nato vključimo emacs modul in nastavimo dve bližnjici; ~S-RET~ za evalviranje trenutne regije ali vrstice ter ~C-.~ za utišanje (kot v IDE-ju). + +#+begin_src emacs-lisp + (use-package sclang + :ensure f + :mode "\\.scd\\'" + :config + (global-set-key (kbd "S-RET") 'sclang-eval-region-or-line) + (global-set-key (kbd "C-.") 'sclang-server-free-all)) +#+end_src + +[[http://www.pawfal.org/Software/fluxus_/][fluxus]] je programsko okolje za hitro prototipiranje ter igranje z oz. učenje 3d grafike. Pisam je v schemu. + +#+begin_src emacs-lisp + (use-package fluxus-mode :defer t) +#+end_src + +[[https://extemporelang.github.io/][Extempore]] je programski jezik za kiberfizično programiranje. + +#+begin_src emacs-lisp + (use-package extempore-mode :mode "\\.xtm\\'") +#+end_src + +[[http://tidalcycles.org/][Tidal cycles]] omogoča kodiranje glasbe z algoritmičnimi vzorci. Pred uporabo moramo namestiti še supercollider. + +#+begin_src emacs-lisp + (use-package tidal + :defer t +#+end_src + +Nastaviti mu moramo lokacijo ~BootTidal.hs~ datoteke, ki jo lahko namestimo s [[https://www.haskell.org/cabal/][cabal]]-om ali kako drugače. + +#+begin_src emacs-lisp + :init + ;; Tidal cycles lokacija + (setq tidal-boot-script-path "~/.cabal/store/ghc-9.0.2/tidal-1.9.2-8e9cf9a217d87a6950880512f51893a6434970cd0690e831c563fc64ebd5de8f/share/BootTidal.hs")) +#+end_src + +[[https://sardine.raphaelforment.fr/presentation/what_is_sardine.html][sardine]] je glasbeni inštrument v pythonu. Gre za pythonovski vmesnik v supercollider, namenjen živemu kodiranju. Supercollider in sardine najprej namestimo, pri uporabi pa nam pomagajo sledeče emacs funkcije. + +#+begin_src emacs-lisp + (setq python-shell-interpreter "python3" + python-shell-interpreter-args "") + + (defun sardine/start-sardine () + "Start a new interactive Sardine Session" + (interactive) + (run-python)) + + (defun sardine/eval-block () + "Evaluate a sardine code block" + (interactive) + (mark-paragraph) + (if (and transient-mark-mode mark-active) + (python-shell-send-region (point) (mark)) + (python-shell-send-region (point-at-bol) (point-at-eol))) + (forward-paragraph)) + + (defun sardine/stop-code () + "Stop all the Sardine code currently running" + (interactive) + (python-shell-send-string "panic()")) + + ; Unmapping keys from the Python mode + ;(add-hook 'python-mode-hook + ; (lambda() (local-unset-key (kbd "C-c C-c")))) + ;(add-hook 'python-mode-hook + ; (lambda() (local-unset-key (kbd "C-c C-s")))) + + ; Remapping keys + (global-set-key (kbd "C-M-x") #'sardine/eval-block) + (global-set-key (kbd "C-M-.") #'sardine/stop-code) +#+end_src + +*** Konfiguracijski jeziki + +YAML in TOML sta dva primera konfiguracijskih jezikov, s katerima kdaj delam. + +#+begin_src emacs-lisp + (use-package yaml-mode :mode "\\.yaml\\'") + (use-package toml-mode :mode "\\.toml\\'") +#+end_src + +*** Arduino + +#+begin_src emacs-lisp + (use-package arduino-mode :mode "\\.ino\\'") +#+end_src + +*** Jezikovni strežnik + +Podpora za protokol jezikovnega strežnika (LSP - Language Server Protocol) precej izboljša izkušnjo programiranja s priporočevanjem in dopolnjevanjem. Emacs spremeni v IDE (integrirano razvojno okolje). + +#+begin_src emacs-lisp +(use-package lsp-mode + :defer t +#+end_src + +S sledečimi nastavitvami pospešimo delovanje. + +#+begin_src emacs-lisp + :config + ;; Make gc pauses faster by decreasing the threshold. + (setq gc-cons-threshold (* 100 1000 1000)) + ;; Increase the amount of data which Emacs reads from the process + (setq read-process-output-max (* 1024 1024))) ;; 1mb +#+end_src + +** E-pošta + +Emacs že vključuje ~mu4e~ ([[https://www.djcbsoftware.nl/code/mu/][mu]] za emacs), modul ki omogoča brskanje po prejeti e-pošti. +Pred uporabo je treba konfigurirati nekaj več stvari, potrebujemo recimo ~isync~ za pridobivanje pošte (tudi starejši ~mbsync~ je vredu), program ~mu~ za indeksiranje prejetih mejlov, oba pa tudi primerno nastavljena. + +*** isync + +TODO + +*** mu + +TODO + +*** mu4e + +Vključimo paket in nastavimo ukaz za pridobivanje mejlov, ki ga sproži ~mu4e~. + +#+begin_src emacs-lisp + (use-package mu4e + :ensure f + :defer t + :config + (setq mu4e-get-mail-command "mbsync -a")) +#+end_src + +Preglednost lahko izboljšamo s paketom za ikone. + +#+begin_src emacs-lisp + (use-package mu4e-marker-icons + :after mu4e + :config + (mu4e-marker-icons-mode 1)) +#+end_src + +~mu4e-dashboard~ omogoča pripravo "nadzorne plošče", torej domačega zaslona pregleda mejlov, ki je pravzaprav ORG dokument z ~mu4e~ poizvedbami. Recimo, da prikaže koliko imamo skupno neprebranih sporočil in pa da skočimo na skupek vseh z zastavico označenih sporočil. + +#+begin_src emacs-lisp + (use-package mu4e-dashboard + :after mu4e + :vc "https://github.com/rougier/mu4e-dashboard") +#+end_src + +TODO spisat dodatne konfiguracije, tega še ne uporabljam res. + +*** Primeri za (i)zgled + +Zanimivi paketi: +- dashboard: https://github.com/rougier/mu4e-dashboard +- thread folding: https://github.com/rougier/mu4e-thread-folding +- svg tag mode: https://github.com/rougier/svg-tag-mode +- views: https://github.com/lordpretzel/mu4e-views + +Pedenanje izgleda: +- mu4e look & feel: https://www.reddit.com/r/emacs/comments/mzgsm0/mu4e_look_and_feel/ +- nano-mu4e: https://github.com/rougier/nano-emacs/blob/master/nano-mu4e.el +- system crafters o emacs emailu: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 815922a..a52de6c 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -1,622 +1,21 @@ ;; Naloži konfiguracije iz ORG datoteke (org-babel-load-file "~/.emacs.d/config.org") -;;;;;;;;; -;; GUI ;; -;;;;;;;;; - -;; Menu bar off -(menu-bar-mode -1) -(tool-bar-mode -1) - -;; Brez ikon zgoraj -(setq ns-use-proxy-icon nil) -(setq frame-title-format nil) -; Skrij scrollbar -(scroll-bar-mode -1) -;; Razmiki med okni -(setq window-divider-default-bottom-width 3) -(window-divider-mode t) -;; No dialog box plx -(setq use-dialog-box nil) - -;; Barvna tema -(use-package gruvbox-theme - :config - (load-theme 'gruvbox-dark-soft t) - (window-divider-mode 0)) -;(load-theme 'hemisu-light t) ;; hemisu-theme paket -;(require 'doom-themes) -;(setq doom-themes-enable-bold t ; if nil, bold is universally disabled -; doom-themes-enable-italic t) ; if nil, italics is universally disabled -;(load-theme 'doom-gruvbox t) -;(doom-themes-org-config) - -;; Doom modeline - lepsi status bar spodaj -(use-package doom-modeline - :defer t - :init (doom-modeline-mode 1)) - -;; Lepse ikone! -(use-package nerd-icons) - -;; !!! ;; -;; !!! Pognat je treba (1x) nerd-icons-install-fonts !!! ;; -;; !!! ;; -(use-package all-the-icons) - -;; y/n namesto yes / no -(fset 'yes-or-no-p 'y-or-n-p) - -;; Oooo gladko skrolanje! (Emacs 29+) -(pixel-scroll-precision-mode) -;; Nisem cist ziher kaj to dela -(setq scroll-conservatively 10) -(setq scroll-margin 8) - - - - -;;;;;;;;;;; -;; TEKST ;; -;;;;;;;;;;; - -;; Sirina taba ter spejsi kot distancniki -(setq-default tab-width 2) -(setq-default indent-tabs-mode nil) - -;; Turn on the weird indenting that Emacs does by default. -(electric-indent-mode 1) -;; Turns on automatic parens pairing -(electric-pair-mode 1) - -;; Editorconfig formatiranje fajlov -(use-package editorconfig - :config - (editorconfig-mode 1)) - -;; Text wrap na sirino oken -(global-visual-line-mode) - -;; Stevilke vrstic -(global-display-line-numbers-mode) - -;; Lepse file drevo -(use-package treemacs - :defer t - :general - (start/leader-keys - "t" 'treemacs) - :hook ((treemacs-mode . (lambda () ;; Brez stevilk vrstic v file drevesu! - (display-line-numbers-mode -1))))) -(use-package treemacs-projectile :after treemacs) -(use-package treemacs-evil :after treemacs) - -;; Uporabi drevesne razveljavitve, undo tree -(use-package undo-tree - :config - (global-undo-tree-mode) - (evil-set-undo-system 'undo-tree) - ;; Drevo razveljavitev shrani v emacsov folder - (setq undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo")))) - -;; Markdown podpora -(use-package markdown-mode :mode "\\.(md|markdown)\\'") - - - -;;;;;;;;;;;;;;;;;;; -;; PROGRAMIRANJE ;; -;;;;;;;;;;;;;;;;;;; - -;; Projektni mgmt -(use-package projectile -; :defer t - :general - (start/leader-keys - "p" 'projectile-command-map) - :config - (setq projectile-globally-ignored-directories '("node_modules")) - (setq projectile-completion-system 'ivy) - - ;; Popravek za projectile prek ssh! - ;(add-to-list 'tramp-remote-path 'tramp-own-remote-path) - ;(setq-default projectile-indexing-method 'alien) - (setq projectile-indexing-method 'native) - (setq projectile-enable-caching t) - - (projectile-mode t)) -(use-package counsel-projectile :after projectile) - -;; Zapiraj zaklepaje -(use-package smartparens - :defer t - :config - (smartparens-global-mode 1)) - -;; Pametni tabi -(use-package smart-tabs-mode - :disabled t - :after js2-mode - :config - ;(smart-tabs-insinuate javascript scheme) - ;; Pametni tabi za js2-mode - (smart-tabs-advice js2-indent-line js2-basic-offset)) - -;; Twig nacin (in drug web) -(use-package web-mode :mode "\\.(html|twig)\\'") - -;; Lepšanje web kode -(use-package web-beautify :defer t :after web-mode) - -;; Kompletiranje ukazov -(use-package company - :config - (setq lsp-completion-provider :capf) - (company-mode)) - -;; LSP potrebuje dependency iz npm: "sudo npm install -g vue-language-server -(use-package lsp-mode - :defer t - :config - ;; Pospešimo - ;; Make gc pauses faster by decreasing the threshold. - (setq gc-cons-threshold (* 100 1000 1000)) - ;; Increase the amount of data which Emacs reads from the process - (setq read-process-output-max (* 1024 1024)) ;; 1mb -) - -;; Vuejs moud -(use-package vue-mode - :mode "\\.vue\\'" - :config (add-hook 'vue-mode-hook #'lsp)) -;; Popravek za grdo ozadje -(add-hook 'mmm-mode-hook - (lambda () - (set-face-background 'mmm-default-submode-face nil))) - -;; PHP ko je treba -(use-package php-mode - :mode "\\.(php|module)\\'" - :general - (start/leader-keys - :infix "d" - "" '(:ignore t :wk "drupal") - "d" (defun drupal-cache-rebuild () - (interactive) - (shell-command "drush cr")))) - -;; Guile scheme -(use-package geiser-guile - :mode "\\.scm\\'" - :general - (start/leader-keys - :infix "s" - "" '(:ignore t :wk "geiser") - "b" 'geiser-eval-buffer - "e" 'geiser-eval-expression - "s" (defun geiser-start-and-eval-buffer () - (interactive) - (geiser-guile) - (previous-buffer) - (geiser-eval-buffer)) - "s" 'geiser-start-and-eval-buffer - "g" 'geiser - "c" 'geiser-connect - "k" 'geiser-exit-repl - "r" (defun geiser-restart () - ;(interactive) - (geiser-exit-repl) - (geiser-start-and-eval-buffer))) - :init (setq scheme-program-name "guile")) - -;; Racket podpora -(use-package racket-mode :mode "\\.rkt\\'") - -;; Rainbowz -(use-package rainbow-delimiters - :hook ((prog-mode . rainbow-delimiters-mode))) - -;; Config fajli -(use-package yaml-mode :mode "\\.yaml\\'") -(use-package toml-mode :mode "\\.toml\\'") - -;; Extempore lajv kodiranje! -(use-package extempore-mode :mode "\\.xtm\\'") - -;; Syntax checker -(use-package flycheck :defer t) - -;; Vmesnik za GIT -(use-package magit - :defer t - :general - (start/leader-keys - "g" '(:ignore t :wk "magit") - "g s" 'magit-status)) - -(use-package magit-todos - :after magit - :config (magit-todos-mode 1)) - -;; Drupal pomocnik -(use-package drupal-mode :after php-mode) - -;; Oblikovanje kode za razne jezike -(use-package format-all :defer t) - -;; Tidal cycles live coding -(use-package tidal - :defer t - :init - ;; Tidal cycles lokacija - (setq tidal-boot-script-path "~/.cabal/store/ghc-9.0.2/tidal-1.9.2-8e9cf9a217d87a6950880512f51893a6434970cd0690e831c563fc64ebd5de8f/share/BootTidal.hs")) - -;; JS indentacije -(setq js2-strict-missing-semi-warning nil - js2-missing-semi-one-line-override nil - js2-basic-offset 2 - js-indent-level 2 - indent-tabs-mode nil - tab-width 2) - -;; js2 za javascript -(use-package js2-mode - :mode "\\.js\\'" - :config - ;(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)) - ) - -;; Še en mode za JS, bolj react -(use-package rjsx-mode :after js2-mode) - -;; css indent -(setq css-indent-level 2) -(setq css-indent-offset 2) - -;; Python indent -(setq python-indent-offset 2) - -;; Arduino -(use-package arduino-mode :mode "\\.ino\\'") - -;; Supercollider -(add-to-list 'load-path "/usr/share/emacs/site-lisp/SuperCollider/") ;; path will depend on your compilation settings -(use-package sclang - :ensure f - :defer t - :config - (global-set-key (kbd "S-RET") 'sclang-eval-region-or-line) - (global-set-key (kbd "C-.") 'sclang-server-free-all)) - -;; FLUXUS! -(use-package fluxus-mode :defer t) - -;; Python virtualenv podpora -(use-package pyvenv - :mode "\\.py\\'" - :config - (pyvenv-mode t) - - ;; Set correct Python interpreter - (setq pyvenv-post-activate-hooks - (list (lambda () - (setq python-shell-interpreter (concat pyvenv-virtual-env "bin/python3"))))) - (setq pyvenv-post-deactivate-hooks - (list (lambda () - (setq python-shell-interpreter "python3"))))) - -;; REST web client -(use-package restclient - :defer t) - - - - -;; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -;; SARDINE MODE -;; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -;; Customize the python-mode to run Sardine code using the terminal. - -(setq -; python-shell-interpreter "fishery" -; python-shell-interpreter-args "") - python-shell-interpreter "python3" - python-shell-interpreter-args "") - -(defun sardine/start-sardine () - "Start a new interactive Sardine Session" - (interactive) - (run-python)) - -(defun sardine/eval-block () - "Evaluate a sardine code block" - (interactive) - (mark-paragraph) - (if (and transient-mark-mode mark-active) - (python-shell-send-region (point) (mark)) - (python-shell-send-region (point-at-bol) (point-at-eol))) - (forward-paragraph)) - -(defun sardine/stop-code () - "Stop all the Sardine code currently running" - (interactive) - (python-shell-send-string "panic()")) - -; Unmapping keys from the Python mode -;(add-hook 'python-mode-hook -; (lambda() (local-unset-key (kbd "C-c C-c")))) -;(add-hook 'python-mode-hook -; (lambda() (local-unset-key (kbd "C-c C-s")))) - -; Remapping keys -(global-set-key (kbd "C-M-x") #'sardine/eval-block) -(global-set-key (kbd "C-M-.") #'sardine/stop-code) - -; Avtomatski tree sitter loader! -(use-package treesit-auto :defer t) - -;; Tree sitter asociacije za programske jezike -(dolist - (item (list '("\\.css\\'" . css-ts-mode) - '("\\.json\\'" . json-ts-mode) - '("\\.php\\'" . php-ts-mode) - '("\\.py\\'" . python-ts-mode) - '("\\.js\\'" . js-ts-mode))) - (add-to-list 'auto-mode-alist item)) - - - -;;;;;;;;;;;;; -;; ORGMODE ;; -;;;;;;;;;;;;; - -(use-package org - :mode "\\.org\\'" - :config - ;; Skrij znake za oblikovanje (* za bold, / za podcrtanje...) - (setq org-hide-emphasis-markers t) - ;; pikice v sredini za sezname - (font-lock-add-keywords - 'org-mode - '(("^ *\\([-]\\) " - (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) - ;; Drugačne pisave za naslove, svoje velikosti - ;; Vir: https://zzamboni.org/post/beautifying-org-mode-in-emacs/ - (let* ((variable-tuple - (cond ((x-list-fonts "ETBembo") '(:font "ETBembo")) - ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro")) - ((x-list-fonts "Lucida Grande") '(:font "Lucida Grande")) - ((x-list-fonts "Verdana") '(:font "Verdana")) - ((x-family-fonts "Sans Serif") '(:family "Sans Serif")) - (nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro.")))) - (base-font-color (face-foreground 'default nil 'default)) - (headline `(:inherit default :weight bold :foreground ,base-font-color))) - - (custom-theme-set-faces - 'user - `(org-level-8 ((t (,@headline ,@variable-tuple)))) - `(org-level-7 ((t (,@headline ,@variable-tuple)))) - `(org-level-6 ((t (,@headline ,@variable-tuple)))) - `(org-level-5 ((t (,@headline ,@variable-tuple)))) - `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1)))) - `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25)))) - `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5)))) - `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75)))) - `(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil)))))) - - ;; DOT diagrami - (org-babel-do-load-languages - 'org-babel-load-languages - '((dot . t))) - - ;; ditaa diagrami - (org-babel-do-load-languages - 'org-babel-load-languages - '((ditaa . t)))) - -;; Evil orgmode -(use-package evil-org - :after org - :hook (org-mode . (lambda () (evil-org-mode))) - :general - (start/leader-keys - ;; ORGmode ukazi - "o" '(:ignore t :wk "orgmode") - "o c" 'org-capture - "o a" 'org-agenda) - :config - (require 'evil-org-agenda) - (evil-org-set-key-theme '(navigation insert textobjects additional calendar)) - (evil-org-agenda-set-keys) - - ;; Odpiranje linkov kar z enter v ORG dokumentih - (defun odpri-org-link () - "Odpri link v ORG fajlu pod kurzorjem" - (interactive) - (if (org-in-regexp org-link-any-re nil t) - (org-open-at-point) - nil)) - - (general-evil-define-key - 'normal - org-mode-map - "RET" 'odpri-org-link)) - -;; Šminka za naslove -(use-package org-bullets - :after org - :hook ((org-mode . (lambda () (org-bullets-mode 1))))) - -;; Lepsi fonti -(setq org-src-fontify-natively t) - -;; Stanja taskov -(setq org-todo-keywords - '((sequence "TODO" "V DELU" "TESTIRANJE" "DOKUMENTIRANJE" "KONČANO"))) - -;; Aktiviraj ob .org fajlih -(add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) - -;; CalDav v orgmode! -(use-package org-caldav - :defer t - :init - (setq org-caldav-url "https://goba.rhiz0.me/remote.php/dav/calendars/g1smo" - org-caldav-files '("~/org/todo.org") - org-icalendar-timezone "Europe/Ljubljana" - org-caldav-calendars '((:calendar-id "org" - ;:files '("~/org/todo.org") - :inbox "~/org/koledarji/org-in.org") - (:calendar-id "personal" - :inbox "~/org/koledarji/osebno-in.org") - (:calendar-id "megla" - :inbox "~/org/koledarji/megla-in.org")))) - -;; Nacin za pisanje brez distrakcij -(use-package writeroom-mode - :defer t - :config - :hook ((org-mode . (lambda () - (display-line-numbers-mode -1))))) - -;; HTMLize za barvanje kode v org izvozu v HTML -(use-package htmlize :after org-mode :defer t) - -;; Lokacije ORG agenda vnosov -(setq org-agenda-files (list "~/rs/org" "~/org")) - -;; Zapiski -(setq org-default-notes-file "~/org/zapiski.org") - -;; Zacnimo na ponedeljek, kot se spodobi -(setq calendar-week-start-day 1) - -;; Mermaid v orgmode (diagrami) -(use-package ob-mermaid - :defer t - :config - ;; sudo npm install -g @mermaid-js/mermaid-cli - (setq ob-mermaid-cli-path "/usr/local/bin/mmdc") - (org-babel-do-load-languages - 'org-babel-load-languages - '((mermaid . t) - (scheme . t)))) - - - -;;;;;;;;;;;;; -;; E-pošta ;; -;;;;;;;;;;;;; -(setq mu4e-get-mail-command "mbsync -a") - -;; Ikonice -(use-package mu4e-marker-icons - :defer t - :config - (mu4e-marker-icons-mode 1)) - -;; Email paketi iz githuba -;(use-package quelpa-use-package) - -(use-package mu4e-dashboard - :defer t - :after mu4e - :vc "https://github.com/rougier/mu4e-dashboard") - ;:quelpa (mu4e-dashboard - ; :fetcher github - ; :repo "rougier/mu4e-dashboard")) - -;; @TODO konfiguracija! -;; - dashboard: https://github.com/rougier/mu4e-dashboard -;; - thread folding: https://github.com/rougier/mu4e-thread-folding -;; - svg tag mode: https://github.com/rougier/svg-tag-mode -;; - views: https://github.com/lordpretzel/mu4e-views -;; -;; Za zgled: -;; mu4e look & feel: https://www.reddit.com/r/emacs/comments/mzgsm0/mu4e_look_and_feel/ -;; nano-mu4e: https://github.com/rougier/nano-emacs/blob/master/nano-mu4e.el -;; system crafters o emacs emailu: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ - - - ;;;;;;;;;;; ;; Razno ;; ;;;;;;;;;;; -;; IVY autocomplete! <3 -(use-package ivy - :general - (start/leader-keys - "," 'ivy-switch-buffer - "b b" 'ivy-switch-buffer) - :config - (ivy-mode) - (setq ivy-use-virtual-buffers t) - (setq enable-recursive-minibuffers t) - (local-set-key (kbd "C-j") 'ivy-next-line) - (local-set-key (kbd "C-k") 'ivy-prevous-line) - (local-set-key [remap scroll-up-command] 'ivy-scroll-up-command) - (local-set-key [remap scroll-down-command] 'ivy-scroll-down-command) - (global-set-key (kbd "C-c C-r") 'ivy-resume) - (global-set-key (kbd "") 'ivy-resume)) - -;; Vedno sledi symlinkom v git -(setq vc-follow-symlinks t) - -;; Swiper search -(use-package swiper - :defer t - :config - (global-set-key "\C-s" 'swiper)) - ;; Izboljsani default ukazi bolj prijazni -(use-package counsel - :config - (global-set-key (kbd "M-x") 'counsel-M-x) - (global-set-key (kbd "C-x C-f") 'counsel-find-file) - (global-set-key (kbd " f") 'counsel-describe-function) - (global-set-key (kbd " v") 'counsel-describe-variable) - (global-set-key (kbd " o") 'counsel-describe-symbol) - (global-set-key (kbd " l") 'counsel-find-library) - (global-set-key (kbd " i") 'counsel-info-lookup-symbol) - (global-set-key (kbd " u") 'counsel-unicode-char) - (global-set-key (kbd "C-c g") 'counsel-git) - (global-set-key (kbd "C-c j") 'counsel-git-grep) - (global-set-key (kbd "C-c k") 'counsel-ag) - (global-set-key (kbd "C-x l") 'counsel-locate) - (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) - - (start/leader-keys - "RET" 'counsel-bookmark - "/" 'counsel-projectile-rg) - - ;; Ripgrep ignore - (defvar my-rg-excludes '("node_modules") - "List of directories to exclude from `counsel-rg' results.") - (define-advice counsel-rg - (:around (fn &optional in dir opts &rest args) my-glob) - "Exclude `my-rg-excludes' from `counsel-rg' results." - (let ((dir (or dir default-directory))) - (dolist (x my-rg-excludes) - (let ((glob (and (file-in-directory-p x dir) - (file-relative-name (expand-file-name "**" x) dir)))) - (when glob (setq opts (concat "-g !" glob (and opts " ") opts)))))) - (apply fn in dir opts args))) - ;; Iskanje po fajlih (fulltext) -(use-package rg - :defer t - :config - (rg-enable-default-bindings)) +;(use-package rg +; :defer t +; :config +; (rg-enable-default-bindings)) ;; Pomoc (use-package helpful :defer t) -;; Prikazi nedavne ukaze pri vrhu v M-x -(use-package smex :defer t) - ;; Pomoc za keybinde (use-package which-key :defer t @@ -631,11 +30,6 @@ (use-package zone-nyan :defer t) -;; Prikazi startup time -(add-to-list 'after-init-hook - (lambda () - (message (concat "emacs (" (number-to-string (emacs-pid)) ") started in " (emacs-init-time))))) - ;; Backup fajli emacsa (setq backup-by-copying t ; don't clobber symlinks @@ -777,22 +171,23 @@ "/home/g1smo/rs/org/irs_old.org" "/home/g1smo/rs/org/kaki.org" "/home/g1smo/rs/org/prepoznava-komadov.org")) '(package-selected-packages - '(restclient php-ts-mode org-bullets magit-todos treesit-auto eat - zone-nyan yaml-mode writeroom-mode which-key web-mode - web-beautify vue-mode undo-tree treemacs-projectile - treemacs-evil toml-mode tidal subed smex smartparens - sclang-extensions rjsx-mode rg rainbow-delimiters - racket-mode quelpa-use-package pyvenv org-caldav - openwith ob-mermaid mu4e-marker-icons mu4e-dashboard - magit lsp-mode htmlize helpful guix gruvbox-theme - general geiser-guile format-all flycheck fluxus-mode - extempore-mode evil-org evil-collection editorconfig - drupal-mode doom-modeline dashboard crdt - counsel-projectile company benchmark-init arduino-mode - all-the-icons 2bit)) + '(mu4e org-mode restclient php-ts-mode org-bullets magit-todos + treesit-auto eat zone-nyan yaml-mode writeroom-mode + which-key web-mode web-beautify vue-mode undo-tree + treemacs-projectile treemacs-evil toml-mode tidal subed smex + smartparens sclang-extensions rjsx-mode rg + rainbow-delimiters racket-mode quelpa-use-package pyvenv + org-caldav openwith ob-mermaid mu4e-marker-icons + mu4e-dashboard magit lsp-mode htmlize helpful guix + gruvbox-theme general geiser-guile format-all flycheck + fluxus-mode extempore-mode evil-org evil-collection + editorconfig drupal-mode doom-modeline dashboard crdt + counsel-projectile company benchmark-init arduino-mode + all-the-icons 2bit)) '(tool-bar-mode nil) '(warning-minimum-level :error) '(which-key-mode 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. @@ -801,15 +196,18 @@ '(default ((t (:family "Iosevka SS01" :foundry "BE5N" :slant normal :weight semi-bold :height 120 :width normal)))) '(line-number ((t (:background "#32302f" :foreground "#7c6f64")))) '(line-number-current-line ((t (:background "#32302f" :foreground "#fe8019")))) - '(org-document-title ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif" :height 2.0 :underline nil)))) - '(org-level-1 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif" :height 1.75)))) - '(org-level-2 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif" :height 1.5)))) - '(org-level-3 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif" :height 1.25)))) - '(org-level-4 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif" :height 1.1)))) - '(org-level-5 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif")))) - '(org-level-6 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif")))) - '(org-level-7 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif")))) - '(org-level-8 ((t (:inherit default :weight bold :foreground "#ebdbb2" :family "Sans Serif"))))) + '(org-block ((t (:extend t :background "#3c3836")))) + '(org-code ((t (:foreground "#dd6f48")))) + '(org-document-title ((t (:underline nil :weight bold :height 2.0 :family "Sans Serif")))) + '(org-level-1 ((t (:extend nil :weight bold :height 1.75 :family "Sans Serif")))) + '(org-level-2 ((t (:extend nil :weight bold :height 1.45 :family "Sans Serif")))) + '(org-level-3 ((t (:extend nil :weight bold :height 1.25 :family "Sans Serif")))) + '(org-level-4 ((t (:extend nil :weight bold :height 1.1 :family "Sans Serif")))) + '(org-level-5 ((t (:extend nil :weight bold :family "Sans Serif")))) + '(org-level-6 ((t (:inherit default :weight bold :foreground "#DCDCCC" :family "Sans Serif")))) + '(org-level-7 ((t (:inherit default :weight bold :foreground "#DCDCCC" :family "Sans Serif")))) + '(org-level-8 ((t (:inherit default :weight bold :foreground "#DCDCCC" :family "Sans Serif")))) + '(org-verbatim ((t (:foreground "#fb4933"))))) ;; supercollider mode load