;;; $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) ;; (setq doom-theme 'catppuccin) ;; (setq doom-theme 'doom-palenight) ;; ;; (use-package evangelion-theme ;; :custom ;; ;; `nil' to disable background for comments ;; (evangelion-comment-background-enabled . t) ;; :config (load-theme 'evangelion t)) (setq doom-theme 'doom-dracula) (add-hook 'pdf-view-mode-hook (lambda () (pdf-view-themed-minor-mode t))) ;; 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! ;; either system-name or doom-system (if (eq 'linux (car doom-system)) (if (eq 'wsl (cadr doom-system)) (progn (setq org-directory "/mnt/c/Users/q669019/Bachelor/org/") (setq default-directory "/mnt/c/Users/q669019/Bachelor/")) (progn (setq org-directory "~/org/") (setq default-directory "~/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. ;; 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) (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 ;; :ensure t ;; :config ;; (add-hook 'after-init-hook #'global-flycheck-mode)) ;; (after! lsp-mode ;; (setq lsp-diagnostics-provider :flycheck)) (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))) ;; typst export: ;; (use-package ox-typst ;; :after org) ;; (use-package! ox-typst ;; :after ox) ;; (require 'ox-typst) (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)) ;; (evil-insert-state) (defun org-insert-c-helper () (interactive) (progn (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\")\ncat <$filename\n<>\nEOF\n\n# output=${filename%.*}.o\ngcc $filename -o $output\n./$output\n# ./$output < // / \/ ;; //_________| / |/ |/ \__// / / /_/ \/ ;; | / | : | / /__/ ;; |/ |/ E V A N G E L I O N ;; (defun evangelion-splash () (let* ((banner '(" _ ____ " " : \\ | \\ . " " | \\ . | : |\\ /\\ " " . | :|\\__ | | | \\ / \\ " " |\\ | |! \\ \\ | | | |\\ / / " " \\\"-.______ | \\: ||\\ \\ \\ | | | | \\ / / " " \\_ \"-_| |\\ || \\ \\/ | |___| ! |\\____/ _/-. /\\ " " \"-_ ____: |_\\ || \\/ ___\\ __ _// | | ___ \\---\" / " " \\ \\ | _____, /___\\___\\/ / / \\_! | // _/ / / " " ___\\_ \\__| | | __. _/____ / / / > // / \\/ " " //_________| / |/ |/ \\__// / / /_/ \\/ " " | / | : | / /__/ " " |/ |/ " " 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) ;; .doom.d/config.el ;; (let ((alternatives '("nameoffirstfile.svg" ;; "nameofanotherfile.png" ;; "nameofathirdfile.svg"))) ;; (setq fancy-splash-image ;; (concat doom-private-dir "splash/" ;; (nth (random (length alternatives)) alternatives)))) ;; (setq vterm-shell "/usr/bin/env zsh") ;; for installing c and cpp tree sitter languages ;; probably only need this once and run ;; M-x treesit-install-language-grammar RET c RET ;; M-x treesit-install-language-grammar RET cpp RET ;; can comment out after ;; (after! treesit ;; (setq treesit-language-source-alist ;; '((c "https://github.com/tree-sitter/tree-sitter-c") ;; (cpp "https://github.com/tree-sitter/tree-sitter-cpp")))) ;; from https://pragmaticemacs.wordpress.com/2017/11/08/more-pdf-tools-tweaks/ ;; automatically annotate highlights (setq pdf-annot-activate-created-annotations t) ;; more fine-grained zooming (setq pdf-view-resize-factor 1.1) ;; keyboard shortcuts ;; ;;(define-key pdf-view-mode-map (kbd "h") 'pdf-annot-add-highlight-markup-annotation) ;;;;(define-key pdf-view-mode-map (kbd "t") 'pdf-annot-add-text-annotation) ;;;;(define-key pdf-view-mode-map (kbd "D") 'pdf-annot-delete) ;; (map! :map evil-normal-state-map "SPC i t" #'insert-current-date-time) ;; (map! :after pdf-view ;; :map pdf-view-mode-map ;; :prefix "a" ;; "h" #'pdf-annot-add-highlight-markup-annotation ;; "t" #'pdf-annot-add-text-annotation ;; "m" #'pdf-annot-add-markup-annotation ;; "l" #'pdf-annot-list-annotations ;; "D" #'pdf-annot-delete ;; "a" #'pdf-annot-attachment-dired ;; ) (map! :map pdf-view-mode-map :n "a h" #'pdf-annot-add-highlight-markup-annotation) (map! :map pdf-view-mode-map :n "a t" #'pdf-annot-add-text-annotation) (map! :map pdf-view-mode-map :n "a D" #'pdf-annot-delete) (map! :map pdf-view-mode-map :n "a l" #'pdf-annot-list-annotations) (map! :map pdf-view-mode-map :n "a a" #'pdf-annot-attachment-dired) (map! :map pdf-view-mode-map :n "a m" #'pdf-annot-add-markup-annotation) ;; ==================== ;; insert date and time ;; maybe also snippet? (defvar current-date-time-format "%Y-%m-%dT%H:%M:%S" "Format of date to insert with `insert-current-date-time' func See help of `format-time-string' for possible replacements") (defvar current-time-format "%H:%M:%S" "Format of date to insert with `insert-current-time' func. Note the weekly scope of the command's precision.") (defun insert-current-date-time () "insert the current date and time into current buffer. Uses `current-date-time-format' for the formatting the date/time." (interactive) (insert (format-time-string current-date-time-format (current-time))) ) (defun insert-current-time () "insert the current time (1-week scope) into the current buffer." (interactive) (insert (format-time-string current-time-format (current-time))) (insert "\n") ) ;;(map! "SPC i t" #'insert-current-date-time) ;; (global-set-key "SPC i t" 'insert-current-date-time) ;; (global-set-key "\C-c\C-t" 'insert-current-time) (map! :map evil-normal-state-map "SPC i t" #'insert-current-date-time) (use-package! csv-mode) (setq +latex-viewers '(pdf-tools)) (setq lsp-tex-server 'texlab) ;; (add-hook LaTeX-mode-hook #'xenops-mode) (when (eq window-system 'w32) (setq tramp-use-ssh-controlmaster-options nil) (add-to-list 'tramp-connection-properties (list (regexp-quote "/ssh:") "login-args" '(("-tt") ("-l" "%u") ("-p" "%p") ("%c") ("-e" "none") ("%h")))) ) ;;(load "./typing-speed.el") (after! tramp (setq tramp-default-method "ssh" tramp-use-ssh-controlmaster-options nil ; sometimes fixes Windows hangs tramp-verbose 6 tramp-inline-compress-start-size 1000 tramp-use-sh-file-name nil)) ; avoid weird /bin/sh resolution on Windows ;; If your remote prompt is fancy, tighten prompt regexp: ;;(setq tramp-shell-prompt-pattern "^[^#$%>\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 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 < 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) (map! :map evil-normal-state-map "SPC j '" #'point-to-register) ;; pdf view ;;(define-key map (kbd "'") 'pdf-view-jump-to-register) ;; (map! :after pdf-view :map pdf-view-mode-map "SPC j m" #'pdf-view-jump-to-register) ;; (map! :after pdf-view :map pdf-view-mode-map "SPC j M" #'pdf-view-point-to-register) (map! :map pdf-view-mode-map :n "m" #'pdf-view-jump-to-register) (map! :map pdf-view-mode-map :n "M" #'pdf-view-position-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) (map! :after citar :map LaTeX-mode-map :n "SPC i c" #'citar-insert-citation)