;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- ;; Place your private configuration here! Remember, you do not need to run 'doom ;; sync' after modifying this file! ;; Some functionality uses this to identify you, e.g. GPG configuration, email ;; clients, file templates and snippets. It is optional. ;; (setq user-full-name "John Doe" ;; user-mail-address "john@doe.com") ;; Doom exposes five (optional) variables for controlling fonts in Doom: ;; ;; - `doom-font' -- the primary font to use ;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) ;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for ;; presentations or streaming. ;; - `doom-symbol-font' -- for symbols ;; - `doom-serif-font' -- for the `fixed-pitch-serif' face ;; ;; See 'C-h v doom-font' for documentation and more examples of what they ;; accept. For example: ;; ;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light) ;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13)) ;; ;; If you or Emacs can't find your font, use 'M-x describe-font' to look them ;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to ;; refresh your font settings. If Emacs still can't find your font, it likely ;; wasn't installed correctly. Font issues are rarely Doom issues! ;; There are two ways to load a theme. Both assume the theme is installed and ;; available. You can either set `doom-theme' or manually load a theme with the ;; `load-theme' function. This is the default: ;; (setq doom-theme 'doom-one) ;; This determines the style of line numbers in effect. If set to `nil', line ;; numbers are disabled. For relative line numbers, set this to `relative'. (setq display-line-numbers-type t) ;; If you use `org' and don't want your org files in the default location below, ;; change `org-directory'. It must be set before org loads! (setq org-directory "/mnt/c/Users/q669019/Bachelor/org/") ;; Whenever you reconfigure a package, make sure to wrap your config in an ;; `after!' block, otherwise Doom's defaults may override your settings. E.g. ;; ;; (after! PACKAGE ;; (setq x y)) ;; ;; The exceptions to this rule: ;; ;; - Setting file/directory variables (like `org-directory') ;; - Setting variables which explicitly tell you to set them before their ;; package is loaded (see 'C-h v VARIABLE' to look up their documentation). ;; - Setting doom variables (which start with 'doom-' or '+'). ;; ;; Here are some additional functions/macros that will help you configure Doom. ;; ;; - `load!' for loading external *.el files relative to this one ;; - `use-package!' for configuring packages ;; - `after!' for running code after a package has loaded ;; - `add-load-path!' for adding directories to the `load-path', relative to ;; this file. Emacs searches the `load-path' when you load packages with ;; `require' or `use-package'. ;; - `map!' for binding new keys ;; ;; To get information about any of these functions/macros, move the cursor over ;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). ;; This will open documentation for it, including demos of how they are used. ;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, ;; etc). ;; ;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how ;; they are implemented. ;; (setq doom-theme 'catppuccin) ;; (setq doom-theme 'doom-palenight) ;;(setq org-startup-with-inline-images t) ;; for inline images in org mode (setq org-display-inline-images t) (setq org-redisplay-inline-images t) (setq org-startup-with-inline-images "inlineimages") ;; (defun my/org-insert-latest-screenshot () ;; "Copy the latest screenshot into the current directory and insert it as [[filename]]." ;; (interactive) ;; (let* ((src (car (sort (directory-files "~/Bilder/Bildschirmfotos/" t ".*\\.png$") ;; (lambda (a b) ;; (time-less-p (file-attribute-modification-time (file-attributes b)) ;; (file-attribute-modification-time (file-attributes a)))))) ;; (filename (format "Pasted image %s.png" ;; (format-time-string "%Y%m%dT%H%M%S"))) ;; (dst (expand-file-name filename default-directory))) ;; (copy-file src dst) ;; (insert (format "[[%s]]" filename)))) ;; ;; (map! :after org ;; :map org-mode-map ;; :leader ;; "i l" #'my/org-insert-latest-screenshot) ;; (with-eval-after-load "ispell" ;; ;; Configure `LANG`, otherwise ispell.el cannot find a 'default ;; ;; dictionary' even though multiple dictionaries will be configured ;; ;; in next line. ;; (setenv "LANG" "en_US.UTF-8") ;; (setq ispell-program-name "hunspell") ;; ;; Configure German, Swiss German, and two variants of English. ;; (setq ispell-dictionary "de_DE,en_US") ;; ;; ispell-set-spellchecker-params has to be called ;; ;; before ispell-hunspell-add-multi-dic will work ;; (ispell-set-spellchecker-params) ;; (ispell-hunspell-add-multi-dic "de_DE,en_US") ;; ;; For saving words to the personal dictionary, don't infer it from ;; ;; the locale, otherwise it would save to ~/.hunspell_de_DE. ;; (setq ispell-personal-dictionary "~/.hunspell_personal")) ;; ;; ;; The personal dictionary file has to exist, otherwise hunspell will ;; ;; silently not use it. ;; (unless (file-exists-p ispell-personal-dictionary) ;; (write-region "" nil ispell-personal-dictionary nil 0)) ;; ;; (use-package flycheck ;; :ensure t ;; :config ;; (add-hook 'after-init-hook #'global-flycheck-mode)) ;; (after! lsp-mode ;; (setq lsp-diagnostics-provider :flycheck)) ;; ;; ;; (add-hook 'spell-fu-mode-hook ;; (lambda () ;; (spell-fu-dictionary-add (spell-fu-get-ispell-dictionary "de_DE")) ;; (spell-fu-dictionary-add (spell-fu-get-ispell-dictionary "en_US")) ;; )) ;; ;; ;; (setq ispell-program-name "aspell" ;; aspell-dictionary "de_DE" ;; aspell-dictionary "en_US" ;; aspell-program-name "aspell" ;; ispell-dictionary "de_DE" ;; ispell-dictionary "en_US" ;; ispell-program-name "aspell") (after! ispell (setq ispell-really-hunspell t ispell-program-name "hunspell" ispell-dictionary "en_US,de_DE") (ispell-set-spellchecker-params) (ispell-hunspell-add-multi-dic "en_US,de_DE")) (use-package! flycheck) (use-package flycheck-languagetool :ensure t :hook (text-mode . flycheck-languagetool-setup) :init (setq flycheck-languagetool-server-jar "~/.languagetool-server.jar")) (require 'ansi-color) (defun display-ansi-colors () (interactive) (ansi-color-apply-on-region (point-min) (point-max))) (remove-hook 'org-mode-hook #'ws-butler-mode) (add-hook 'org-mode-hook (lambda () (ws-butler-mode -1))) ;;(use-package! org-fragtog ;; :after org ;; :hook (org-mode . org-fragtog) ; this auto-enables it when you enter an org-buffer, remove if you do not want this ;; :config ;; ;; whatever you want ;; ) (defun toggle-org-latex-preview-on-save () "adds or removes after save hook to org-latex-preview" (interactive) (if (memq 'org-latex-preview after-save-hook) (progn (remove-hook 'after-save-hook 'org-latex-preview) ;; (remove-hook 'after-save-hook 'org-latex-preview t) (message "Disabled org latex preview on save for current buffer...")) (add-hook 'after-save-hook 'org-latex-preview) ;; (add-hook 'after-save-hook 'org-latex-preview nil t) (message "Enabled org latex preview on save for current buffer..."))) ;; (add-to-list 'org-latex-packages-alist '("" "tikz" t)) ;; ;; (eval-after-load "preview" ;; '(add-to-list 'preview-default-preamble ;; "\\PreviewEnvironment{tikzpicture}" t)) (org-babel-do-load-languages 'org-babel-load-languages '((latex . t))) (after! org (setq org-startup-with-latex-preview t) (setq font-lock-maximum-decoration t)) (add-hook 'org-mode-hook #'turn-on-font-lock) (menu-bar--display-line-numbers-mode-relative) ;; (setq org-preview-latex-default-process :imagemagick) ;; ;; (setq org-babel-latex-htlatex "htlatex") ;; (defmacro by-backend (&rest body) ;; `(case org-export-current-backend ,@body)) ;; #+REVEAL_ROOT: https://cdn.jsdelivr.net/npm/reveal.js ;; Reveal.js + Org mode (use-package ox-reveal :after org) (use-package! ox-reveal :after ox) (require 'ox-reveal) (setq Org-Reveal-title-slide nil) ;; Wrong number of arguments?!?! ;;(setq org-export-backends md ascii html icalendar latex odt typst reveal) ;; (defun org-insert-src-block (src-code-type) ;; "Insert a `SRC-CODE-TYPE' type source code block in org-mode." ;; (interactive ;; (let ((src-code-types ;; '("emacs-lisp" "python" "C" "sh" "java" "js" "clojure" "C++" "css" ;; "calc" "asymptote" "dot" "gnuplot" "ledger" "lilypond" "mscgen" ;; "octave" "oz" "plantuml" "R" "sass" "screen" "sql" "awk" "ditaa" ;; "haskell" "latex" "lisp" "matlab" "ocaml" "org" "perl" "ruby" ;; "scheme" "sqlite"))) ;; (list (ido-completing-read "Source code type: " src-code-types)))) ;; (progn ;; (newline-and-indent) ;; (insert (format "#+BEGIN_SRC %s\n" src-code-type)) ;; (newline-and-indent) ;; (insert "#+END_SRC\n") ;; (previous-line 2) ;; (org-edit-src-code) ;; ) ;; ) (defun org-insert-c-src() "Insert a C src block with a helper function to run it." (interactive) (progn (newline-and-indent) (insert "#+NAME: cprog\n#+BEGIN_SRC C :tangle (concat (org-get-heading t t t t) \".c\") :results output") (newline-and-indent) (insert "#+END_SRC\n") (newline-and-indent) ;;(insert "#+BEGIN_SRC sh :dir . :results output :exports both :var filename=(concat (org-get-heading t t t t) \".c\") output=(concat (org-get-heading t t t t) \".o\")\n# output=${filename%.*}.o\ngcc $filename -o $output\n./$output\n# ./$output <$filename\n<>\nEOF\n\n# output=${filename%.*}.o\ngcc $filename -o $output\n./$output\n# ./$output <\n]*[#$%>] *")) ;; (let ((msys "C:/Users/q669019/Programs/msys2")) ;; ;; Ensure MSYS2 userland tools (bash, ssh, etc.) are found ;; (add-to-list 'exec-path (concat msys "/usr/bin")) ;; (setenv "PATH" (concat msys "/usr/bin;" (getenv "PATH"))) ;; ;; Use bash, NOT ucrt64.exe ;; (setq explicit-shell-file-name (concat msys "/usr/bin/bash.exe") ;; shell-file-name explicit-shell-file-name) ;; (setenv "SHELL" shell-file-name) ;; ;; Make TRAMP use ssh (default, but force just in case) ;; (setq tramp-default-method "ssh") ;; ;; Hide flashing helper consoles ;; (setq w32-start-process-show-window nil) ;; ) (use-package! cypher-mode) (use-package! n4js) (setq n4js-cli-arguments '("-port" "7474")) (use-package! n4js) ;;(use-package evangelion-theme ;; :custom ;; ;; `nil' to disable background for comments ;; (evangelion-comment-background-enabled . t) ;; :config (load-theme 'evangelion t)) ;;(setq doom-theme 'evangelion) (use-package ob-cypher :ensure t :config (add-to-list 'org-babel-load-languages '(cypher . t)) (org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages) (add-to-list 'org-babel-tangle-lang-exts '("cypher" . "cypher"))) (defun org-insert-cypher-block() "Insert a cypher/ neo4j src block." (interactive) (progn (newline-and-indent) (insert "#+BEGIN_SRC cypher :port 7687 :file ./.png\n") (insert "#+END_SRC\n") (newline-and-indent) ;;(insert "#+BEGIN_SRC sh :dir . :results output :exports both :var filename=(concat (org-get-heading t t t t) \".c\") output=(concat (org-get-heading t t t t) \".o\")\n# output=${filename%.*}.o\ngcc $filename -o $output\n./$output\n# ./$output < // / \\/ " " //_________| / |/ |/ \\__// / / /_/ \\/ " " | / | : | / /__/ " " |/ |/ " " E M A C S ")) (longest-line (apply #'max (mapcar #'length banner)))) (put-text-property (point) (dolist (line banner (point)) (insert (+doom-dashboard--center +doom-dashboard--width (concat line (make-string (max 0 (- longest-line (length line))) 50))) "\n")) 'face 'doom-dashboard-banner))) (setq +doom-dashboard-ascii-banner-fn #'evangelion-splash) ;; (use-package! company-org-block) (use-package company-org-block ;; :ensure t ;; :custom ;; (company-org-block-edit-style 'auto) ;; 'auto, 'prompt, or 'inline :hook ((org-mode . (lambda () (setq-local company-backends '(company-org-block)) (company-mode +1))))) (setq company-org-block-edit-style 'auto) ;; 'auto, 'prompt, or 'inline (add-hook 'org-mode-hook (lambda () (add-to-list (make-local-variable 'company-backends) 'company-org-block))) ;; (use-package evangelion-theme ;; :config (load-theme 'evangelion t)) ;; (evangelion-comment-background-enabled . t) ;; (setq doom-theme 'evangelion) (setq doom-theme 'doom-palenight) (defun org-insert-cite-eol () (interactive) (progn (evil-org-end-of-line) (insert " ") (call-interactively 'org-cite-insert) )) ;; (map! :map evil-normal-state-map "SPC m $" #'org-cite-insert-eol) ;; (add-hook 'csv-mode-hook ;; (lambda () ;; (visual-line-mode -1) ;; (toggle-truncate-lines 1))) ;; disable line wrap (defun disable-linewrap () "csv line wrap setup" (visual-line-mode -1) (toggle-truncate-lines 1)) (add-hook 'csv-mode-hook #'disable-linewrap) ;; später entfernen: ;; (remove-hook 'csv-mode-hook #'disable-linewrap) ;; auto detect separator (add-hook 'csv-mode-hook #'csv-guess-set-separator) ;; turn on field alignment (add-hook 'csv-mode-hook #'csv-align-mode) ;; add csv header line (add-hook 'csv-mode-hook #'csv-header-line) (defun toggle-csv-mode-hooks () "Toggle my CSV mode hooks (add/remove)." (interactive) (if (memq #'disable-linewrap csv-mode-hook) (progn (remove-hook 'csv-mode-hook #'disable-linewrap) (visual-line-mode t) (toggle-truncate-lines) (remove-hook 'csv-mode-hook #'csv-guess-set-separator) (csv-guess-set-separator) (remove-hook 'csv-mode-hook #'csv-align-mode) (csv-align-mode) (remove-hook 'csv-mode-hook #'csv-header-line) (csv-header-line) (normal-mode) (message "CSV hooks removed")) (progn (add-hook 'csv-mode-hook #'disable-linewrap) (add-hook 'csv-mode-hook #'csv-guess-set-separator) (add-hook 'csv-mode-hook #'csv-align-mode) (add-hook 'csv-mode-hook #'csv-header-line) (normal-mode) (message "CSV hooks added")))) ;; (map! :map csv-mode-map "SPC t ;" #'toggle-csv-mode-hooks) (map! :after csv-mode :map csv-mode-map :desc "Toggle CSV hooks" :n "SPC t ;" #'toggle-csv-mode-hooks) ;; :leader ;; "t;" #'toggle-csv-mode-hooks) ;; make invisible characters more visible (setq! glyphless-char-display-control '((format-control . empty-box) (variation-selectors . thin-space) (no-font . hex-code))) (with-eval-after-load 'ob-cypher ;; Eigene Variante von org-babel-execute:cypher (defun my/org-babel-execute:cypher (body params) "Erweiterte Version von `org-babel-execute:cypher`. Verhalten: - Mit :file und :result-type graph -> wie bisher: Graphviz/DOT. - Mit :file und :result-type json -> rohes JSON in Datei. (with-eval-after-load 'ob-cypher ;; Erweiterte/ersetzte Variante von org-babel-execute:cypher (defun my/org-babel-execute:cypher (body params) Erweiterte Version von `org-babel-execute:cypher`. Verhalten: - :result-type graph -> wie bisher: Graphviz/DOT, Datei wird von `dot` erzeugt. - :result-type json -> rohes JSON als String (Org schreibt es bei :file selber weg). - sonst (Standard) -> Tabelle per REST; mit :file als CSV-Text zurückgeben, den Org bei :results ... file in die Datei schreibt." (let* ((host (or (cdr (assoc :host params)) "127.0.0.1")) (port (or (cdr (assoc :port params)) 1337)) (username (or (cdr (assoc :username params)) "neo4j")) (password (or (cdr (assoc :password params)) "neo4j")) (authstring (base64-encode-string (concat username ":" password))) (http-port (or (cdr (assoc :http-port params)) 7474)) ;; optionaler Header :result-type (eigene Erweiterung) (rt-raw (cdr (assoc :result-type params))) (result-type (cond ((symbolp rt-raw) rt-raw) ((stringp rt-raw) (intern (downcase rt-raw))) (t nil))) (file (cdr (assoc :file params))) (body (if (s-ends-with? ";" body) body (s-append ";" body)))) (cond ;; 1. Graphviz wie im Original (für Bilder/DOT-Ausgabe) ((eq result-type 'graph) (unless file (user-error "Für :result-type graph musst du auch :file angeben")) ;; erzeugt die Datei als Seiteneffekt, gibt nil zurück (ob-cypher/dot body host http-port file authstring)) ;; 2. Rohes JSON (z.B. für Debug oder eigene Weiterverarbeitung) ;; Bei :results ... file und :file schreibt Org den String in die Datei. ((eq result-type 'json) (ob-cypher/query body host http-port authstring)) ;; 3. Standard: REST -> Tabelle; mit :file als CSV-Text (t (let ((tbl (ob-cypher/rest body host http-port authstring))) (if file (progn (require 'org-table) ;; Wir liefern nur den CSV-String zurück. ;; Org schreibt ihn bei :results ... file in `file`. (orgtbl-to-csv tbl nil)) ;; Kein :file -> Tabelle als normales Babel-Ergebnis tbl)))))) ;; Originalfunktion vollständig übersteuern (advice-add 'org-babel-execute:cypher :override #'my/org-babel-execute:cypher)) (use-package org-mind-map :init (require 'ox-org) :ensure t ;; Uncomment the below if 'ensure-system-packages` is installed ;;:ensure-system-package (gvgen . graphviz) :config (setq org-mind-map-engine "dot") ; Default. Directed Graph ;; (setq org-mind-map-engine "neato") ; Undirected Spring Graph ;; (setq org-mind-map-engine "twopi") ; Radial Layout ;; (setq org-mind-map-engine "fdp") ; Undirected Spring Force-Directed ;; (setq org-mind-map-engine "sfdp") ; Multiscale version of fdp for the layout of large graphs ;; (setq org-mind-map-engine "twopi") ; Radial layouts ;; (setq org-mind-map-engine "circo") ; Circular Layout ) (defalias 'first #'cl-first) (add-hook 'pdf-view-mode-hook (lambda () (pdf-view-themed-minor-mode t))) (setq doom-snippets-dir (expand-file-name "doom-snippets/" doom-user-dir)) (setq +snippets-dir (expand-file-name "private-snippets/" doom-user-dir)) (use-package org-noter) ;; just like in pdf-view (map! :map evil-normal-state-map "SPC j m" #'jump-to-register) (map! :map evil-normal-state-map "SPC j M" #'point-to-register) ;;(define-key map (kbd "'") 'pdf-view-jump-to-register) (map! :map pdf-view-mode-map "M" #'pdf-view-jump-to-register) (map! :map evil-normal-state-map "SPC j n" #'evil-jump-forward) (map! :map evil-normal-state-map "SPC j N" #'evil-jump-backward)