init: A "minimal" config for Emacs
This commit is contained in:
commit
fca7618b90
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
*
|
||||||
|
# This one is new to allow directories by default
|
||||||
|
!*/
|
||||||
|
|
||||||
|
# Straight specific
|
||||||
|
/straight/repos
|
||||||
|
/straight/build
|
||||||
|
!/straight/versions/*
|
||||||
|
|
||||||
|
# Allow to WL subdirs
|
||||||
|
!/.gitignore
|
||||||
|
!cnf/
|
||||||
|
!cnf/**
|
||||||
|
!local-pkgs/
|
||||||
|
!local-pkgs/**
|
||||||
|
!snippets/
|
||||||
|
!snippets/**
|
||||||
|
!plugins
|
||||||
|
!init.el
|
||||||
|
!early-init.el
|
||||||
|
!ec.sh
|
||||||
|
!minimal.el
|
||||||
|
!test/
|
||||||
|
!test/**
|
||||||
|
|
||||||
|
# Ignore again
|
||||||
|
# *~undo-tree~
|
136
cnf/additionals.el
Normal file
136
cnf/additionals.el
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
(push (concat user-emacs-directory "cnf/app") load-path)
|
||||||
|
;; DIRED: file browser
|
||||||
|
(require 'a-dired)
|
||||||
|
|
||||||
|
;; ORD-MODE: Basically jupiter notebooks/markdown on steroids
|
||||||
|
(with-eval-after-load 'org (require 'a-orgmode))
|
||||||
|
|
||||||
|
;; MAGIT: A nice git frontend
|
||||||
|
(straight-use-package 'magit)
|
||||||
|
(setq magit-bury-buffer-function #'quit-window
|
||||||
|
magit-display-buffer-function #'display-buffer)
|
||||||
|
|
||||||
|
(with-eval-after-load 'magit
|
||||||
|
(transient-append-suffix 'magit-push "-u"
|
||||||
|
'(1 "=s" "Skip gitlab pipeline" "--push-option=ci.skip"))
|
||||||
|
(transient-append-suffix 'magit-push "=s"
|
||||||
|
'(1 "=D" "DEBUG" "--push-option=ci.variable=DEBUG=1")) ;; no special meaning for gitlab
|
||||||
|
(transient-append-suffix 'magit-push "=D"
|
||||||
|
'(1 "=V" "Set CI variable" "--push-option=ci.variable=")) ;; Will prompt, can only set one extra variable
|
||||||
|
(transient-append-suffix 'magit-push "=V"
|
||||||
|
'(1 "=O" "Set push option" "--push-option="))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; DICTCC: query dict.cc without leaving emacs
|
||||||
|
(straight-use-package 'dictcc)
|
||||||
|
|
||||||
|
;; GIT-GUTTER: Indicators for git status inside the fringe
|
||||||
|
(straight-use-package 'git-gutter)
|
||||||
|
(straight-use-package 'git-gutter-fringe)
|
||||||
|
(require 'git-gutter-fringe)
|
||||||
|
;; 0 means only update on save, otherwise set to 0.02
|
||||||
|
;; otherwise cursor stutters (e.g. at 2 or 8)
|
||||||
|
(setq git-gutter:update-interval 0
|
||||||
|
git-gutter:handled-backends '(git hg))
|
||||||
|
|
||||||
|
;; Indicator style (It's ASCII art - yaayyy)
|
||||||
|
(fringe-helper-define 'git-gutter-fr:added 'center
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX..")
|
||||||
|
|
||||||
|
(fringe-helper-define 'git-gutter-fr:modified 'center
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX..")
|
||||||
|
|
||||||
|
(fringe-helper-define 'git-gutter-fr:deleted 'center
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX.."
|
||||||
|
"..XXX..")
|
||||||
|
|
||||||
|
(add-hook 'prog-mode-hook #'git-gutter-mode)
|
||||||
|
|
||||||
|
;; More sane defaults
|
||||||
|
(defvar emacs-autosave-directory
|
||||||
|
(concat user-emacs-directory "autosaves/"))
|
||||||
|
(unless (file-exists-p emacs-autosave-directory)
|
||||||
|
(mkdir emacs-autosave-directory t))
|
||||||
|
|
||||||
|
(setq backup-directory-alist
|
||||||
|
`((".*" . ,emacs-autosave-directory))
|
||||||
|
auto-save-file-name-transforms
|
||||||
|
`((".*" ,emacs-autosave-directory t)))
|
||||||
|
|
||||||
|
(setq make-backup-files nil
|
||||||
|
create-lockfiles nil)
|
||||||
|
|
||||||
|
;; There is also require-final-newline which is a per mode setting
|
||||||
|
;; This seems to override this global value -> See mode specific configs (e.g. yaml)
|
||||||
|
(setq-default require-final-newline t)
|
||||||
|
(setq mode-require-final-newline t)
|
||||||
|
|
||||||
|
(setq warning-minimum-level :emergency)
|
||||||
|
|
||||||
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
||||||
|
(setq read-answer-short t)
|
||||||
|
;; Advice around the new kill-buffer--possibly-save function
|
||||||
|
;; This never calls the original function which basically replaces it
|
||||||
|
;; defalias is not possible here since this takes different arguments
|
||||||
|
(defun phga/kill-buffer-y-or-n--advice (orig-fun buffer &rest args)
|
||||||
|
"Replace the default behavior of the new `kill-buffer--possibly-save' function.
|
||||||
|
`ORIG-FUN' is the original function that was called and
|
||||||
|
`BUFFER'is the buffer that should be killed whilst beeing
|
||||||
|
modified and not saved. `ARGS' is the rest of the arguments."
|
||||||
|
(y-or-n-p (concat "Kill buffer " (buffer-name buffer) " without saving?")))
|
||||||
|
|
||||||
|
(advice-add 'kill-buffer--possibly-save :around #'phga/kill-buffer-y-or-n--advice)
|
||||||
|
|
||||||
|
(setq auto-revert-interval 1 ; Refresh buffers fast
|
||||||
|
echo-keystrokes 0.1 ; Show keystrokes asap
|
||||||
|
inhibit-startup-message t ; No splash screen please
|
||||||
|
initial-scratch-message nil ; Clean scratch buffer
|
||||||
|
initial-major-mode 'org-mode
|
||||||
|
recentf-max-saved-items 100 ; Show more recent files
|
||||||
|
ring-bell-function 'ignore) ; Quiet
|
||||||
|
|
||||||
|
(setq mouse-yank-at-point t)
|
||||||
|
|
||||||
|
;; Should help with reeeeally long lines e.g. json
|
||||||
|
;; there is also (setq-default bidi-display-reordering nil)
|
||||||
|
;; which is apparently not recommended by dev Eli because
|
||||||
|
;; it was never intended to be nil (could still improve things tho)
|
||||||
|
(setq-default bidi-paragraph-direction 'left-to-right)
|
||||||
|
;; gnupg
|
||||||
|
(require 'epa-file)
|
||||||
|
(setq epg-pinentry-mode 'ask)
|
||||||
|
(push '("\\.gpg\\'" . epa-file-enable) auto-mode-alist)
|
||||||
|
;; only use the encrypted version of .authinfo
|
||||||
|
(setq auth-sources '("~/.authinfo.gpg"))
|
||||||
|
|
||||||
|
;; save unsaved buffers before killing frame
|
||||||
|
(add-hook 'delete-frame-functions 'save-some-buffers)
|
||||||
|
(add-hook 'kill-emacs-hook 'save-some-buffers)
|
||||||
|
|
||||||
|
;; Width used to draw the column indicator + used in fill-paragraph
|
||||||
|
(setq-default fill-column 90)
|
||||||
|
|
||||||
|
(provide 'additionals)
|
83
cnf/app/a-dired.el
Normal file
83
cnf/app/a-dired.el
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
;; DIRED: Filebrowser
|
||||||
|
(straight-use-package 'dired-narrow)
|
||||||
|
;; (require 'dired-async)
|
||||||
|
;; (dired-async-mode 0)
|
||||||
|
(setq dired-listing-switches "-lFahv --group-directories-first"
|
||||||
|
dired-dwim-target t
|
||||||
|
delete-by-moving-to-trash t
|
||||||
|
dired-ls-F-marks-symlinks t
|
||||||
|
dired-compress-files-alist '(("\\.tar\\.gz\\'" . "tar -cf - %i | gzip -c9 > %o")
|
||||||
|
("\\.tar\\.bz2\\'" . "tar -cf - %i | bzip2 -c9 > %o")
|
||||||
|
("\\.tar\\.xz\\'" . "tar -cf - %i | xz -c9 > %o")
|
||||||
|
("\\.tar\\.zst\\'" . "tar -cf - %i | zstd -19 -o %o")
|
||||||
|
("\\.tar\\.lz\\'" . "tar -cf - %i | lzip -c9 > %o")
|
||||||
|
("\\.tar\\.lzo\\'" . "tar -cf - %i | lzop -c9 > %o")
|
||||||
|
("\\.zip\\'" . "zip %o -r --filesync %i")
|
||||||
|
("\\.pax\\'" . "pax -wf %o %i"))
|
||||||
|
dired-compress-file-suffixes '(("\\.tar\\.gz\\'" #1="" "gzip -dc %i | tar -xf -")
|
||||||
|
("\\.tar\\.xz\\'" #1# "xz -dc %i | tar -xf -")
|
||||||
|
("\\.tgz\\'" #1# "gzip -dc %i | tar -xf -")
|
||||||
|
("\\.gz\\'" #1# "gzip -d")
|
||||||
|
("\\.lz\\'" #1# "lzip -d")
|
||||||
|
("\\.Z\\'" #1# "uncompress")
|
||||||
|
("\\.z\\'" #1# "gzip -d")
|
||||||
|
("\\.dz\\'" #1# "dictunzip")
|
||||||
|
("\\.tbz\\'" ".tar" "bunzip2")
|
||||||
|
("\\.bz2\\'" #1# "bunzip2")
|
||||||
|
("\\.xz\\'" #1# "unxz")
|
||||||
|
("\\.zip\\'" #1# "7z x -aoa -o%o %i")
|
||||||
|
("\\.tar\\.zst\\'" #1# "unzstd -c %i | tar -xf -")
|
||||||
|
("\\.tzst\\'" #1# "unzstd -c %i | tar -xf -")
|
||||||
|
("\\.zst\\'" #1# "unzstd --rm")
|
||||||
|
("\\.7z\\'" #1# "7z x -aoa -o%o %i")
|
||||||
|
("\\.tar\\'" ".tgz" nil)))
|
||||||
|
|
||||||
|
(add-hook 'dired-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(dired-hide-details-mode)
|
||||||
|
(when (file-remote-p dired-directory)
|
||||||
|
(setq-local dired-actual-switches "-lFah"))))
|
||||||
|
|
||||||
|
(put 'dired-find-alternate-file 'disabled nil)
|
||||||
|
|
||||||
|
;; ;; PEEP-DIRED: preview files in dired
|
||||||
|
;; (straight-use-package 'peep-dired)
|
||||||
|
;; ;; variables
|
||||||
|
;; (setq peep-dired-cleanup-on-disable t
|
||||||
|
;; peep-dired-cleanup-eagerly nil
|
||||||
|
;; peep-dired-enable-on-directories t)
|
||||||
|
;; ;; hooks
|
||||||
|
;; (add-hook 'peep-dired-hook 'evil-normalize-keymaps)
|
||||||
|
(straight-use-package 'dired-preview)
|
||||||
|
(setq dired-preview-delay 0.2
|
||||||
|
dired-preview-ignored-extensions-regexp (concat "\\."
|
||||||
|
"\\(mkv\\|webm\\|mp4\\|mp3\\|ogg\\|m4a"
|
||||||
|
"\\|gz\\|zst\\|tar\\|xz\\|rar\\|zip"
|
||||||
|
"\\|iso\\|epub\\)"))
|
||||||
|
|
||||||
|
;; Keybindings
|
||||||
|
(general-def
|
||||||
|
:states 'normal
|
||||||
|
:keymaps 'dired-mode-map
|
||||||
|
"f" 'dired-narrow
|
||||||
|
"p" 'dired-preview-mode
|
||||||
|
"h" (lambda() (interactive) (find-alternate-file ".."))
|
||||||
|
"l" (lambda() (interactive) (dired-find-alternate-file)))
|
||||||
|
|
||||||
|
;; DIRED-LAUNCH: Launch apps depending on file extension
|
||||||
|
(straight-use-package 'dired-launch)
|
||||||
|
(setq dired-launch-command '("xdg-open"))
|
||||||
|
(setf dired-launch-extensions-map
|
||||||
|
'(;; xml files with bpmn in it
|
||||||
|
("xopp" ("xournalpp"))
|
||||||
|
("drawio.html" ("drawio"))
|
||||||
|
("drawio" ("drawio"))))
|
||||||
|
|
||||||
|
(add-hook 'dired-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(general-def
|
||||||
|
:states 'normal
|
||||||
|
:keymaps 'dired-mode-map
|
||||||
|
"W" 'dired-launch-command)))
|
||||||
|
|
||||||
|
(provide 'a-dired)
|
274
cnf/app/a-orgmode.el
Normal file
274
cnf/app/a-orgmode.el
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; NOTE: org-mode is required in essentials.el so we use the git instead of the shipped version ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; HTMLIZE: html export for orgmode
|
||||||
|
(straight-use-package 'htmlize)
|
||||||
|
|
||||||
|
;; There was a long discussion on reddit that this package slows
|
||||||
|
;; down the redisplay optimizations of emacs
|
||||||
|
;; https://old.reddit.com/r/emacs/comments/p9yjgq/turn_off_fontlock_under_cursor/ha6zor6/
|
||||||
|
;; ORG-APPEAR: shows emphasis symbols when required
|
||||||
|
(straight-use-package 'org-appear)
|
||||||
|
(setq org-appear-autolinks nil ;;'just-brackets
|
||||||
|
org-appear-autosubmarkers t
|
||||||
|
org-appear-autoentities t
|
||||||
|
org-appear-autokeywords t
|
||||||
|
org-appear-inside-latex t)
|
||||||
|
(add-hook 'org-mode-hook 'org-appear-mode)
|
||||||
|
|
||||||
|
;; ORG-DOWNLOAD: insert screenshots on the fly
|
||||||
|
(straight-use-package 'org-download)
|
||||||
|
(require 'org-download)
|
||||||
|
|
||||||
|
;; OB-GO: Org babel support for go
|
||||||
|
(straight-use-package 'ob-go)
|
||||||
|
;; (with-eval-after-load 'ob-go (require 'l-go)) ;; enable highlighting, etc
|
||||||
|
|
||||||
|
;; EVIL-ORG: more org bindings
|
||||||
|
(straight-use-package 'evil-org)
|
||||||
|
(add-hook 'org-mode-hook 'evil-org-mode)
|
||||||
|
(with-eval-after-load 'org-mode
|
||||||
|
(evil-org-set-key-theme '(navigation insert textobjects additional calendar)))
|
||||||
|
|
||||||
|
;; ORG-SRC: Load language specific configs when fontifying src blocks for languages which
|
||||||
|
;; configs are dynamically loaded and not present at the time of the fontification process
|
||||||
|
;; (defun phga/advice-load-config-for-org-src-block-language (lang start end)
|
||||||
|
;; "Look in `load-path' for a file that provides the feature l-LANG.
|
||||||
|
;; LANG is the language used by `org-src-font-lock-fontify-block'.
|
||||||
|
;; START and END are not used by this advice"
|
||||||
|
;; (ignore-errors (require (intern (concat "l-" lang)))))
|
||||||
|
|
||||||
|
;; (advice-add 'org-src-font-lock-fontify-block
|
||||||
|
;; :before #'phga/advice-load-config-for-org-src-block-language)
|
||||||
|
|
||||||
|
(defvar phga/org-export-directory)
|
||||||
|
(defun phga/advice-create-and-set-org-export-directory (f extension
|
||||||
|
&optional subtreep pub-dir)
|
||||||
|
"Create and set `phga/org-export-directory' which is used as PUB-DIR in F.
|
||||||
|
F is `org-export-output-file-name' SUBTREEP and EXTENSION are not
|
||||||
|
modified here."
|
||||||
|
(let ((pub-dir (or pub-dir (and (boundp 'phga/org-export-directory)
|
||||||
|
phga/org-export-directory))))
|
||||||
|
(unless (file-directory-p pub-dir)
|
||||||
|
(make-directory phga/org-export-directory))
|
||||||
|
(apply f extension subtreep pub-dir '()))) ;; '() is required by apply
|
||||||
|
|
||||||
|
(advice-add 'org-export-output-file-name :around #'phga/advice-create-and-set-org-export-directory)
|
||||||
|
|
||||||
|
(setq phga/org-export-directory "./auto")
|
||||||
|
|
||||||
|
(evil-set-initial-state 'org-agenda-mode 'normal)
|
||||||
|
(add-to-list 'org-export-backends 'md)
|
||||||
|
(setq org-agenda-tags-column org-tags-column
|
||||||
|
org-babel-min-lines-for-block-output 50
|
||||||
|
org-confirm-babel-evaluate nil
|
||||||
|
;; Since ORG-Mode 9.1.9 functions inside of (file "FILENAME") are no longer
|
||||||
|
;; evaluated if the template list is prefixed with '
|
||||||
|
;; Solution: use ` to prefix list and ,(concat) to indicate req. evaluation
|
||||||
|
org-duration-format 'h:mm
|
||||||
|
|
||||||
|
;; TODO: If you want latex support
|
||||||
|
;; Latex
|
||||||
|
;; org-latex-listings 'minted
|
||||||
|
;; org-latex-listings nil
|
||||||
|
;; org-latex-packages-alist '(("outputdir=auto" "minted"))
|
||||||
|
;; org-latex-inputenc-alist '(("utf8" . "utf8x"))
|
||||||
|
;; org-latex-prefer-user-labels t
|
||||||
|
;; org-latex-pdf-process
|
||||||
|
;; '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||||
|
;; "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
|
||||||
|
;; "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")
|
||||||
|
|
||||||
|
;; Export Config
|
||||||
|
org-export-preserve-breaks nil
|
||||||
|
org-export-with-email t
|
||||||
|
org-export-with-sub-superscripts t
|
||||||
|
org-export-in-background nil
|
||||||
|
org-html-htmlize-output-type 'inline-css
|
||||||
|
|
||||||
|
;; REQUIRES: y -S plantuml graphviz
|
||||||
|
;; org-plantuml-jar-path (expand-file-name "/usr/share/java/plantuml/plantuml.jar")
|
||||||
|
|
||||||
|
;; Visuals like nice looking headings, fontification (bold, italic, etc.)
|
||||||
|
org-pretty-entities t
|
||||||
|
org-pretty-entities-include-sub-superscripts t
|
||||||
|
org-edit-src-content-indentation 0
|
||||||
|
org-src-fontify-natively t
|
||||||
|
org-src-tab-acts-natively t
|
||||||
|
org-src-preserve-indentation t
|
||||||
|
org-src-window-setup 'current-window
|
||||||
|
org-use-sub-superscripts '{}
|
||||||
|
org-ellipsis " ↷"
|
||||||
|
org-cycle-separator-lines 0
|
||||||
|
org-hide-emphasis-markers t
|
||||||
|
|
||||||
|
;; Sane defaults when opening new files
|
||||||
|
org-startup-folded nil
|
||||||
|
org-startup-with-inline-images t
|
||||||
|
org-startup-with-latex-preview t
|
||||||
|
org-image-actual-width nil
|
||||||
|
|
||||||
|
org-blank-before-new-entry '((heading . t)
|
||||||
|
(plain-list-item . nil))
|
||||||
|
|
||||||
|
;; Tags
|
||||||
|
org-tags-column 60
|
||||||
|
org-fast-tag-selection-include-todo t
|
||||||
|
org-fast-tag-selection-single-key 'expert
|
||||||
|
|
||||||
|
;; Todos
|
||||||
|
org-todo-keywords
|
||||||
|
'((sequence "TODO(t)" "|" "DONE(d)")
|
||||||
|
(type "NEXT(n)")
|
||||||
|
(type "MEET(m)")
|
||||||
|
(type "IDEA(i)"))
|
||||||
|
;; '((type "TODO")
|
||||||
|
;; ;; (type "DONE")
|
||||||
|
;; (type "NEXT")
|
||||||
|
;; (type "IDEA")
|
||||||
|
;; (type "MEET")
|
||||||
|
;; (sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
|
||||||
|
;; (sequence "IDEA(i)" "|" "TODO(t)")
|
||||||
|
;; )
|
||||||
|
org-todo-keyword-faces
|
||||||
|
'(("TODO" :inherit org-todo :weight bold)
|
||||||
|
("DONE" :inherit org-done :weight bold)
|
||||||
|
("NEXT" :weight bold)
|
||||||
|
("MEET" :weight bold)
|
||||||
|
("IDEA" :foreground "#cea7f0" :weight bold))
|
||||||
|
org-use-fast-todo-selection t
|
||||||
|
org-fontify-todo-headline nil
|
||||||
|
org-fontify-done-headline nil)
|
||||||
|
|
||||||
|
;; leads to unwanted buffer visits on first clock-in
|
||||||
|
;; Probably because it tries to scan for clocks in all agenda files
|
||||||
|
;; org-agenda-files (list org-directory)
|
||||||
|
|
||||||
|
;; org-latex-listings 'listings
|
||||||
|
|
||||||
|
;; Pretty bullet points
|
||||||
|
(font-lock-add-keywords
|
||||||
|
'org-mode
|
||||||
|
'(("^ *\\(-\\) " ; change '-' into a unicode bullet
|
||||||
|
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
|
||||||
|
|
||||||
|
(font-lock-add-keywords
|
||||||
|
'org-mode
|
||||||
|
'(("^ *\\(\\+\\) " ; change '+' into a unicode bullet
|
||||||
|
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "◦"))))))
|
||||||
|
|
||||||
|
;; Get rid of the ,* in code blocks (visually)
|
||||||
|
(font-lock-add-keywords
|
||||||
|
'org-mode
|
||||||
|
'(("^ *\\(,\\*\\).*" ; change ',*' into *
|
||||||
|
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "*"))))))
|
||||||
|
|
||||||
|
(add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images)
|
||||||
|
;; Scale of the latex fragments
|
||||||
|
;; (plist-put org-format-latex-options :scale 1.3) ;; b4 presentation
|
||||||
|
(plist-put org-format-latex-options :scale 2.5)
|
||||||
|
|
||||||
|
;; Run/highlight code using babel in org-mode
|
||||||
|
;; Languages: https://orgmode.org/worg/org-contrib/babel/languages/index.html
|
||||||
|
(setq org-babel-load-languages
|
||||||
|
'((emacs-lisp . t)
|
||||||
|
(lisp . t)
|
||||||
|
(python . t)
|
||||||
|
(js . t)
|
||||||
|
(java . t)
|
||||||
|
(C . t)
|
||||||
|
(sql . t)
|
||||||
|
(calc . t)
|
||||||
|
(perl . t)
|
||||||
|
(shell . t)
|
||||||
|
(plantuml . t)
|
||||||
|
(haskell . t)
|
||||||
|
(go . t)))
|
||||||
|
|
||||||
|
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||||
|
|
||||||
|
;; TODO: If you want custom css in your html exports
|
||||||
|
;; export html with styles
|
||||||
|
;; (defvar org-style-css "~/sync/mvtn/setup/org.css")
|
||||||
|
|
||||||
|
;; (defun my-org-inline-css-hook (exporter)
|
||||||
|
;; "Insert custom inline css"
|
||||||
|
;; (when (eq exporter 'html)
|
||||||
|
;; (let* ((dir (ignore-errors (file-name-directory (buffer-file-name))))
|
||||||
|
;; (path (concat dir "style.css"))
|
||||||
|
;; (homestyle (or (null dir) (null (file-exists-p path))))
|
||||||
|
;; (final (if homestyle org-style-css path))) ;; <- set your own style file path
|
||||||
|
;; (setq org-html-head-include-default-style nil)
|
||||||
|
;; (setq org-html-head (concat
|
||||||
|
;; "<style type=\"text/css\">\n"
|
||||||
|
;; "<!--/*--><![CDATA[/*><!--*/\n"
|
||||||
|
;; (with-temp-buffer
|
||||||
|
;; (insert-file-contents final)
|
||||||
|
;; (buffer-string))
|
||||||
|
;; "/*]]>*/-->\n"
|
||||||
|
;; "</style>\n")))))
|
||||||
|
|
||||||
|
;; (add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)
|
||||||
|
|
||||||
|
;; (setq org-html-htmlize-font-prefix "org-") ; default: "org-"
|
||||||
|
|
||||||
|
;; TODO: If you want to manage your time with org-mode
|
||||||
|
;; ORG-CLOCK
|
||||||
|
;; (setq org-clock-history-length 23
|
||||||
|
;; org-clock-in-resume t
|
||||||
|
;; org-drawers '("PROPERTIES" "LOGBOOK")
|
||||||
|
;; org-clock-into-drawer t
|
||||||
|
;; org-clock-out-remove-zero-time-clocks t
|
||||||
|
;; org-clock-out-when-done t
|
||||||
|
;; org-clock-persist 'history
|
||||||
|
;; org-clock-persist-query-resume nil
|
||||||
|
;; org-clock-auto-clock-resolution 'when-no-clock-is-running
|
||||||
|
;; org-clock-report-include-clocking-task t)
|
||||||
|
|
||||||
|
;; (org-clock-persistence-insinuate)
|
||||||
|
|
||||||
|
;; ORG-AGENDA
|
||||||
|
;; (defvar org-agenda-window-setup)
|
||||||
|
;; (setq org-agenda-window-setup 'current-window)
|
||||||
|
|
||||||
|
;; ORG-DOWNLOAD
|
||||||
|
;; TODO: Setup for seemless insertion of screenshots
|
||||||
|
(setq org-download-screenshot-file "~/sync/screenshots/tmp/orgcapture.png"
|
||||||
|
org-download-screenshot-method "grim -g $(slurp -b '#000000a0' -c '#00000000') -o %s"
|
||||||
|
org-download-image-attr-list '("#+ATTR_ORG: :width 600")
|
||||||
|
org-download-annotate-function (lambda(link) ""))
|
||||||
|
(setq-default org-download-image-dir "./ORGPICS"
|
||||||
|
|
||||||
|
;; KEYBINDINGS
|
||||||
|
(my-leader
|
||||||
|
:states 'normal
|
||||||
|
:definer 'minor-mode
|
||||||
|
:keymaps 'org-src-mode
|
||||||
|
"'" 'org-edit-src-exit)
|
||||||
|
|
||||||
|
(my-leader
|
||||||
|
:states '(normal visual)
|
||||||
|
:keymaps 'org-mode-map
|
||||||
|
"'" 'org-edit-src-code
|
||||||
|
"SPC p" 'fill-paragraph
|
||||||
|
"SPC i" '(:ignore t :which-key "Insert")
|
||||||
|
"SPC i s" 'org-download-screenshot
|
||||||
|
"SPC i t" 'org-todo
|
||||||
|
"SPC i l" 'org-insert-link
|
||||||
|
"SPC s l" 'org-store-link
|
||||||
|
"SPC t" '(:ignore t :which-key "Toggle")
|
||||||
|
"SPC t i" 'org-toggle-inline-images
|
||||||
|
"SPC t l" 'org-latex-preview
|
||||||
|
;; "SPC c" '(:ignore t :which-key "C Funktions (clock, execute)")
|
||||||
|
;; "SPC c i" 'org-clock-in
|
||||||
|
;; "SPC c o" 'org-clock-out
|
||||||
|
;; "SPC c l" 'org-clock-in-last
|
||||||
|
"SPC c c" 'org-babel-execute-src-block
|
||||||
|
"SPC r" '(:ignore t :which-key "Remove")
|
||||||
|
"SPC r r" 'org-babel-remove-result
|
||||||
|
"SPC r a" (lambda () (interactive) (org-babel-remove-result-one-or-many t))
|
||||||
|
"SPC o" 'org-open-at-point
|
||||||
|
"SPC e" 'org-export-dispatch)
|
||||||
|
|
||||||
|
(provide 'a-orgmode)
|
151
cnf/essentials.el
Normal file
151
cnf/essentials.el
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
;; ENVIRONMENT
|
||||||
|
;; COMPAT
|
||||||
|
(straight-use-package 'compat)
|
||||||
|
|
||||||
|
;; ORG-MODE: FIX so the correct org package is loaded (not the one shipped with emacs)
|
||||||
|
;; Has to be as early in the config as possible, so no other package can load the
|
||||||
|
;; incorrect org version beforehand
|
||||||
|
;; (straight-use-package 'org)
|
||||||
|
|
||||||
|
;; ASYNC: Asynchronous functionality
|
||||||
|
(straight-use-package 'async)
|
||||||
|
(require 'async)
|
||||||
|
|
||||||
|
;; GENERAL: Keybindings
|
||||||
|
(straight-use-package 'general)
|
||||||
|
(require 'general)
|
||||||
|
|
||||||
|
;; TODO: Rename the leader key (if you want)
|
||||||
|
(general-create-definer my-leader
|
||||||
|
:prefix "<SPC>"
|
||||||
|
:non-normal-prefix "C-SPC")
|
||||||
|
|
||||||
|
;; EVIL:
|
||||||
|
;; depends on: goto-chg, undo-tree
|
||||||
|
(straight-use-package 'evil)
|
||||||
|
(straight-use-package 'undo-fu)
|
||||||
|
(straight-use-package 'undo-fu-session)
|
||||||
|
(undo-fu-session-global-mode)
|
||||||
|
(straight-use-package 'vundo)
|
||||||
|
|
||||||
|
;; variables
|
||||||
|
(setq evil-want-C-u-scroll t
|
||||||
|
evil-want-integration t
|
||||||
|
evil-want-keybinding nil
|
||||||
|
evil-undo-system 'undo-fu)
|
||||||
|
(require 'evil)
|
||||||
|
;; start mode
|
||||||
|
(evil-mode t)
|
||||||
|
|
||||||
|
;; https://github.com/emacs-evil/evil/issues/1288
|
||||||
|
;; Credit goes to: https://github.com/nnicandro
|
||||||
|
;; Fix for the broken org-src-tab-acts-natively functionality
|
||||||
|
;; Tab in fact does nothing in src blocks if evil is enabled
|
||||||
|
(defun evil-org-insert-state-in-edit-buffer (fun &rest args)
|
||||||
|
"Bind `evil-default-state' to `insert' before calling FUN with ARGS."
|
||||||
|
(let ((evil-default-state 'insert)
|
||||||
|
;; Force insert state
|
||||||
|
evil-emacs-state-modes
|
||||||
|
evil-normal-state-modes
|
||||||
|
evil-motion-state-modes
|
||||||
|
evil-visual-state-modes
|
||||||
|
evil-operator-state-modes
|
||||||
|
evil-replace-state-modes)
|
||||||
|
(apply fun args)
|
||||||
|
(evil-refresh-cursor)))
|
||||||
|
|
||||||
|
;; MESSAGE BUFFER:
|
||||||
|
(evil-set-initial-state 'message-mode 'normal)
|
||||||
|
|
||||||
|
(advice-add 'org-babel-do-key-sequence-in-edit-buffer
|
||||||
|
:around #'evil-org-insert-state-in-edit-buffer)
|
||||||
|
|
||||||
|
;; EVIL-NERD-COMMENTER: Easy un/comment
|
||||||
|
(straight-use-package 'evil-nerd-commenter)
|
||||||
|
|
||||||
|
;; EVIL-VILUALSTAR: Search selected thing with *
|
||||||
|
(straight-use-package 'evil-visualstar)
|
||||||
|
(global-evil-visualstar-mode)
|
||||||
|
|
||||||
|
;; EVIL-SURROUND:
|
||||||
|
(straight-use-package 'evil-surround)
|
||||||
|
;; start mode
|
||||||
|
(global-evil-surround-mode t)
|
||||||
|
|
||||||
|
;; EVIL-COLLECTION: improved evil support for multiple packages
|
||||||
|
(straight-use-package 'evil-collection)
|
||||||
|
;; variables
|
||||||
|
(setq evil-collection-setup-minibuffer t
|
||||||
|
evil-collection-mode-list
|
||||||
|
'(ibuffer help calc nov man calendar ivy minibuffer dired debug
|
||||||
|
doc-view arc-mode magit vterm))
|
||||||
|
;; start mode
|
||||||
|
(evil-collection-init)
|
||||||
|
|
||||||
|
;; IVY: better popup menu (Alternative: Helm)
|
||||||
|
(straight-use-package 'ivy)
|
||||||
|
;; variables
|
||||||
|
(setq ivy-use-virtual-buffers t
|
||||||
|
ivy-re-builders-alist '((t . ivy--regex-ignore-order))
|
||||||
|
enable-recursive-minibuffers t
|
||||||
|
ivy-wrap t
|
||||||
|
ivy-magic-slash-non-match-action 'ivy-magic-slash-non-match-create
|
||||||
|
ivy-count-format "%d/%d ")
|
||||||
|
;; remove caret (has to be counsel not ivy #thanksfornothinginternet)
|
||||||
|
(with-eval-after-load 'counsel (setq ivy-initial-inputs-alist nil))
|
||||||
|
;; start mode
|
||||||
|
(ivy-mode t)
|
||||||
|
|
||||||
|
;; Keybindings
|
||||||
|
;; Allow the creation of files/folders even if a file/folder with a similar name
|
||||||
|
;; is matched in the ivy buffer.
|
||||||
|
(my-leader
|
||||||
|
:states 'normal
|
||||||
|
:keymaps 'ivy-minibuffer-map
|
||||||
|
"SPC f" 'ivy-immediate-done)
|
||||||
|
|
||||||
|
;; IVY-PRESCIENT: better suggestions for ivy
|
||||||
|
(straight-use-package 'ivy-prescient)
|
||||||
|
;; start mode
|
||||||
|
(ivy-prescient-mode)
|
||||||
|
|
||||||
|
;; COUNSEL: several improved functions like find-file, etc.
|
||||||
|
(straight-use-package 'counsel)
|
||||||
|
(setq counsel-grep-base-command "grep -R -i -n -H --color=never %s ."
|
||||||
|
counsel-rg-base-command "rg -i -M 250 --hidden --no-heading --line-number --color never %s")
|
||||||
|
|
||||||
|
;; WHICH-KEY: hints in the mini bar
|
||||||
|
(straight-use-package 'which-key)
|
||||||
|
(which-key-setup-minibuffer)
|
||||||
|
;; start mode
|
||||||
|
(which-key-mode)
|
||||||
|
|
||||||
|
;; ACE-WINDOW: jump between windows faster
|
||||||
|
;; TODO: Set your own keys (;
|
||||||
|
(straight-use-package 'ace-window)
|
||||||
|
(setq aw-scope 'frame
|
||||||
|
aw-keys '(?j ?k ?l ?f ?d ?s))
|
||||||
|
|
||||||
|
;; ELECTRIC-PAIR: auto-balance brackets
|
||||||
|
(electric-pair-mode t)
|
||||||
|
;; electric-indent-mode is a bit buggy in src blocks...
|
||||||
|
;; Unfortunately it adds a bug, where the cursor jumps to the start of the src
|
||||||
|
;; block after inserting a nested block of any sort {}, [], () and pressing RET
|
||||||
|
;; This is triggered by: org-return -> newline-and-indent
|
||||||
|
;; Adding an advice did not work, since the point must not only be recovered
|
||||||
|
;; but also increased by the level of indention... Also, it seemed like another
|
||||||
|
;; function is responsible for the reset since I added the advice to
|
||||||
|
;; org-babel-do-key-sequence-in-edit-buffer (Probably newline-and-indent)
|
||||||
|
;; TODO: Check if this bug is still present in newer versions
|
||||||
|
|
||||||
|
;; hooks
|
||||||
|
(add-hook 'org-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(setq-local electric-pair-inhibit-predicate
|
||||||
|
`(lambda (c)
|
||||||
|
(if (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))
|
||||||
|
;; SAVE PLACE MODE
|
||||||
|
;; Return to the point in a buffer when reopening it after some time
|
||||||
|
(save-place-mode 1)
|
||||||
|
|
||||||
|
(provide 'essentials)
|
20
cnf/functions.el
Normal file
20
cnf/functions.el
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
;; Run a terminal in the current folder
|
||||||
|
;; TODO: Check the command for your terminal emulator for this to work properly
|
||||||
|
(defun phga/run-terminal-here ()
|
||||||
|
(interactive "@")
|
||||||
|
(shell-command (concat "TERM_FROM_EMACS=true alacritty -e sh -c 'cd " default-directory
|
||||||
|
"; /run/current-system/sw/bin/bash' > /dev/null 2>&1 & disown ")
|
||||||
|
nil nil))
|
||||||
|
|
||||||
|
;; https://gist.github.com/mads-hartmann/3402786
|
||||||
|
;; Allows for emacs to toggle window "maximization"
|
||||||
|
(defun toggle-maximize-buffer ()
|
||||||
|
"Maxmize current buffer, when called again, restore previous buffer setup"
|
||||||
|
(interactive)
|
||||||
|
(if (= 1 (length (window-list)))
|
||||||
|
(jump-to-register '_)
|
||||||
|
(progn
|
||||||
|
(window-configuration-to-register '_)
|
||||||
|
(delete-other-windows))))
|
||||||
|
|
||||||
|
(provide 'functions)
|
96
cnf/global-keybindings.el
Normal file
96
cnf/global-keybindings.el
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
;; EXAMPLE: Global override of keybinding
|
||||||
|
;; Ged rid of default bindings I don't enjoy :<
|
||||||
|
(general-def :states '(normal insert emacs visual) :keymaps 'override
|
||||||
|
;; This motherf***** + another ESC used to close my windows. NOO MOOORE!
|
||||||
|
"M-ESC" (lambda () (interactive) (message "You pressed it again Mr. Fatfinger...")))
|
||||||
|
|
||||||
|
;; GLOBAL BINDINGS
|
||||||
|
(general-def
|
||||||
|
:states '(normal insert visual)
|
||||||
|
:keymaps 'override
|
||||||
|
|
||||||
|
"C-j" 'evil-scroll-down
|
||||||
|
"C-k" 'evil-scroll-up
|
||||||
|
;; "<XF86AudioLowerVolume>" 'evil-scroll-down
|
||||||
|
;; "<XF86AudioRaiseVolume>" 'evil-scroll-up
|
||||||
|
)
|
||||||
|
|
||||||
|
;; This is a reference to the leader key defined in essentials.el
|
||||||
|
;; It basically means: <YOUR-LEADER> + whatever is configured below
|
||||||
|
;; E.g. "SPC SPC" actually means "SPC SPC SPC" because it is prefix with `my-leader'
|
||||||
|
(my-leader
|
||||||
|
;; These are the states for which the keybinding should work
|
||||||
|
:states '(normal visual emacs)
|
||||||
|
;; This is the keymap for which the keybinding should work.
|
||||||
|
;; Override is the GLOBAL keymap but there are specific ones for each mode
|
||||||
|
:keymaps 'override
|
||||||
|
|
||||||
|
;; This ignores the sole keybinding of "SPC SPC" to use this "namespace" for mode specific bindings
|
||||||
|
"SPC" '(:ignore t :which-key "Mode Specific Binds")
|
||||||
|
"SPC SPC" 'counsel-M-x
|
||||||
|
|
||||||
|
"f" 'counsel-find-file
|
||||||
|
"g" 'magit-status
|
||||||
|
"h" 'evil-avy-goto-line
|
||||||
|
"i" 'counsel-imenu
|
||||||
|
"y" 'counsel-yank-pop
|
||||||
|
";" 'evilnc-comment-or-uncomment-lines
|
||||||
|
"." 'save-buffer
|
||||||
|
|
||||||
|
;; window stuff
|
||||||
|
"w" '(:ignore t :which-key "Window")
|
||||||
|
;; quick switch to other window
|
||||||
|
"a" 'ace-window
|
||||||
|
"w v" 'split-window-right
|
||||||
|
"w h" 'split-window-below
|
||||||
|
"w f" 'toggle-maximize-buffer
|
||||||
|
"w L" 'windsize-right
|
||||||
|
"w H" 'windsize-left
|
||||||
|
"w J" 'windsize-down
|
||||||
|
"w K" 'windsize-up
|
||||||
|
|
||||||
|
;; switch stuff
|
||||||
|
"s" '(:ignore t :which-key "Switch")
|
||||||
|
"s b" 'switch-to-buffer
|
||||||
|
"s n" 'switch-to-next-buffer
|
||||||
|
"s p" 'switch-to-prev-buffer
|
||||||
|
"s s" 'counsel-switch-buffer
|
||||||
|
"s a" 'ace-swap-window
|
||||||
|
;; kill stuff
|
||||||
|
"k" '(:ignore t :which-key "Kill")
|
||||||
|
"k b" 'kill-buffer
|
||||||
|
"k w" 'delete-window
|
||||||
|
"k W" 'kill-buffer-and-window
|
||||||
|
"k o b" 'kill-some-buffers
|
||||||
|
"k o w" 'delete-other-windows
|
||||||
|
"k q q" 'kill-emacs
|
||||||
|
"k k" 'kill-current-buffer
|
||||||
|
|
||||||
|
;; buffer stuff
|
||||||
|
"b" '(:ignore t :which-key "Buffer (revert)")
|
||||||
|
"b r" 'revert-buffer
|
||||||
|
"b a r" 'auto-revert-mode
|
||||||
|
|
||||||
|
;; edit stuff
|
||||||
|
"e" '(:ignore t :which-key "Edit")
|
||||||
|
"e c" '((lambda() (interactive) (dired my/emacsconf)) :which-key "edit emacs config")
|
||||||
|
|
||||||
|
;; ui stuff
|
||||||
|
"q" '(:ignore t :which-key "Quality :)")
|
||||||
|
"q t" 'phga/cycle-themes
|
||||||
|
"q =" 'phga/text-scale-adjust
|
||||||
|
|
||||||
|
;; tools
|
||||||
|
"t u" 'vundo
|
||||||
|
|
||||||
|
;; describe stuff
|
||||||
|
"?" '(:ignore t :which-key "Describe")
|
||||||
|
"? v" 'describe-variable
|
||||||
|
"? f" 'describe-function
|
||||||
|
"? c" 'describe-char
|
||||||
|
"? m" 'describe-mode
|
||||||
|
"? k" 'describe-key
|
||||||
|
"? F" 'describe-face
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'global-keybindings)
|
146
cnf/ui.el
Normal file
146
cnf/ui.el
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
;; GENERAL UI
|
||||||
|
(setq x-stretch-cursor t
|
||||||
|
blink-cursor-mode nil
|
||||||
|
show-paren-delay 0
|
||||||
|
scroll-conservatively 5
|
||||||
|
scroll-margin 0
|
||||||
|
mouse-wheel-scroll-amount '(2 ((shift) . 2)) ;; one line at a time
|
||||||
|
mouse-wheel-progressive-speed nil ;; don't accelerate scrolling
|
||||||
|
mouse-wheel-follow-mouse 't ;; scroll window under mouse
|
||||||
|
scroll-step 2 ;; keyboard scroll two lines at a time
|
||||||
|
frame-resize-pixelwise t
|
||||||
|
frame-title-format "Allmighty Editor w/o Kitchen Sink")
|
||||||
|
|
||||||
|
;; Highlight matching parens
|
||||||
|
(show-paren-mode t)
|
||||||
|
;; Show line numbers on the left side of the buffer
|
||||||
|
(global-display-line-numbers-mode 0)
|
||||||
|
;; Highlight current horizontal line with a different background
|
||||||
|
(global-hl-line-mode t)
|
||||||
|
;; Also display the current column index in e.g. the mode-line
|
||||||
|
(column-number-mode t)
|
||||||
|
;; Show tooltip on hover in minibuffer
|
||||||
|
(tooltip-mode 0)
|
||||||
|
;; Default encoding
|
||||||
|
(set-language-environment "UTF-8")
|
||||||
|
;; Show line that indicates maximum number of "allowed" characters
|
||||||
|
(add-hook 'prog-mode-hook 'display-fill-column-indicator-mode)
|
||||||
|
|
||||||
|
;; FONT SETUP
|
||||||
|
(defvar phga/font "Jetbrains Mono")
|
||||||
|
(defvar phga/font-size "19")
|
||||||
|
(defvar phga/font-family (concat phga/font ":size=" phga/font-size))
|
||||||
|
;; These are required to have the correct font size with the first frame (emacs server)
|
||||||
|
(add-to-list 'default-frame-alist `(font . ,phga/font-family))
|
||||||
|
|
||||||
|
;; TEXT-SCALE: Scale text globally
|
||||||
|
(defvar phga/text-scale-amount 2)
|
||||||
|
(defvar phga/text-scale--current-size (string-to-number phga/font-size))
|
||||||
|
(defun phga/text-scale-adjust ()
|
||||||
|
"Adjust the size of the frame-font by `phga/text-scale-amount'."
|
||||||
|
(interactive)
|
||||||
|
(phga/text-scale--adjust))
|
||||||
|
|
||||||
|
(defun phga/text-scale--scale (inc)
|
||||||
|
"Scale the frame-font by `phga/text-scale-amount'.
|
||||||
|
If INC is not nil increase the font size else decrease it"
|
||||||
|
(if inc (setq phga/text-scale--current-size
|
||||||
|
(+ phga/text-scale--current-size phga/text-scale-amount))
|
||||||
|
(setq phga/text-scale--current-size
|
||||||
|
(- phga/text-scale--current-size phga/text-scale-amount)))
|
||||||
|
(set-frame-font (concat phga/font ":size="
|
||||||
|
(number-to-string phga/text-scale--current-size)) t t))
|
||||||
|
|
||||||
|
(defun phga/text-scale--adjust ()
|
||||||
|
"Actual function which will call itself with the temporary keymap to scale the text."
|
||||||
|
(let ((ev last-command-event)
|
||||||
|
(echo-keystrokes nil))
|
||||||
|
(pcase (event-basic-type ev)
|
||||||
|
((or ?= ?k) (phga/text-scale--scale t))
|
||||||
|
((or ?- ?j) (phga/text-scale--scale nil))
|
||||||
|
((or ?0) (progn (set-frame-font phga/font-family t t)
|
||||||
|
(setq phga/text-scale--current-size
|
||||||
|
(string-to-number phga/font-size))
|
||||||
|
(error "Reset to normal text scale"))))
|
||||||
|
(message "Use j/=, k/-, 0 for further adjustment")
|
||||||
|
(set-transient-map
|
||||||
|
(let ((map (make-sparse-keymap)))
|
||||||
|
(dolist (key '(?- ?j ?k ?= ?0))
|
||||||
|
(define-key map (vector (list key))
|
||||||
|
(lambda () (interactive) (phga/text-scale--adjust))))
|
||||||
|
map))))
|
||||||
|
|
||||||
|
;; LIGATURES
|
||||||
|
(straight-use-package 'ligature)
|
||||||
|
;; Enable the "www" ligature in every possible major mode
|
||||||
|
;; (ligature-set-ligatures 't '("www"))
|
||||||
|
;; Enable all Cascadia Code ligatures in programming modes
|
||||||
|
(ligature-set-ligatures
|
||||||
|
'prog-mode
|
||||||
|
'("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
|
||||||
|
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
|
||||||
|
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
|
||||||
|
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
|
||||||
|
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
|
||||||
|
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
|
||||||
|
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
|
||||||
|
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
|
||||||
|
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
|
||||||
|
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
|
||||||
|
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
|
||||||
|
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
|
||||||
|
"\\\\" "://"))
|
||||||
|
|
||||||
|
(global-ligature-mode t)
|
||||||
|
|
||||||
|
;; THEMES
|
||||||
|
;; SHANTY
|
||||||
|
(straight-use-package 'shanty-themes)
|
||||||
|
(defvar phga/dark-theme 'shanty-themes-dark)
|
||||||
|
(defvar phga/light-theme 'shanty-themes-light)
|
||||||
|
|
||||||
|
(defvar phga/current-theme phga/dark-theme)
|
||||||
|
(load-theme phga/current-theme t)
|
||||||
|
|
||||||
|
(defun phga/cycle-themes ()
|
||||||
|
"Cycle through my preferred dark and light theme"
|
||||||
|
(interactive)
|
||||||
|
(if (eq phga/current-theme phga/dark-theme)
|
||||||
|
(progn
|
||||||
|
(disable-theme phga/dark-theme)
|
||||||
|
(load-theme phga/light-theme t)
|
||||||
|
(message "Loaded light theme")
|
||||||
|
(setq phga/current-theme phga/light-theme))
|
||||||
|
(progn
|
||||||
|
(disable-theme phga/light-theme)
|
||||||
|
(load-theme phga/dark-theme t)
|
||||||
|
(message "Loaded dark theme")
|
||||||
|
(setq phga/current-theme phga/dark-theme))))
|
||||||
|
|
||||||
|
;; MODE-LINE
|
||||||
|
;; https://emacs.stackexchange.com/questions/5529/how-to-right-align-some-items-in-the-modeline
|
||||||
|
(defun simple-mode-line-render (left right)
|
||||||
|
"Return a string of `window-width' length containing LEFT, and RIGHT aligned respectively."
|
||||||
|
(let* ((available-width (- (window-total-width) (length left) 2)))
|
||||||
|
(format (format " %%s %%%ds " available-width) left right)))
|
||||||
|
|
||||||
|
(setq-default mode-line-format
|
||||||
|
'((:eval (simple-mode-line-render
|
||||||
|
;; left
|
||||||
|
(format-mode-line
|
||||||
|
'(""
|
||||||
|
;; (:eval (propertize "%* %b"))
|
||||||
|
(:eval (propertize "%* %b" 'face 'mode-line-buffer-id))
|
||||||
|
evil-mode-line-tag
|
||||||
|
(:eval (propertize "%m"))))
|
||||||
|
;; (:eval (propertize "%m" 'face 'font-lock-comment-face))))
|
||||||
|
;; right
|
||||||
|
(format-mode-line mode-line-position)))))
|
||||||
|
|
||||||
|
;; FIXES
|
||||||
|
;; Shell mode line highlighted
|
||||||
|
;; (set-face-attribute 'comint-highlight-prompt nil :inherit nil)
|
||||||
|
;; (custom-set-faces '(comint-highlight-prompt ((t nil))))
|
||||||
|
|
||||||
|
(message "ui.el was succesfully loaded")
|
||||||
|
(provide 'ui)
|
23
early-init.el
Normal file
23
early-init.el
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;;; early-init.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
;; Emacs HEAD (27+) introduces early-init.el, which is run before init.el,
|
||||||
|
;; before package and UI initialization happens.
|
||||||
|
|
||||||
|
;; Defer garbage collection further back in the startup process
|
||||||
|
(setq gc-cons-threshold most-positive-fixnum)
|
||||||
|
;; In Emacs 27+, package initialization occurs before `user-init-file' is
|
||||||
|
;; loaded, but after `early-init-file'. Doom handles package initialization, so
|
||||||
|
;; we must prevent Emacs from doing it early!
|
||||||
|
(setq package-enable-at-startup nil)
|
||||||
|
(advice-add #'package--ensure-init-file :override #'ignore)
|
||||||
|
|
||||||
|
;; Prevent the glimpse of un-styled Emacs by disabling these UI elements early.
|
||||||
|
(push '(menu-bar-lines . 0) default-frame-alist)
|
||||||
|
(push '(tool-bar-lines . 0) default-frame-alist)
|
||||||
|
(push '(vertical-scroll-bars . nil) default-frame-alist)
|
||||||
|
(push '(horizontal-scroll-bars . nil) default-frame-alist)
|
||||||
|
|
||||||
|
;; Resizing the Emacs frame can be a terribly expensive part of changing the
|
||||||
|
;; font. By inhibiting this, we easily halve startup times with fonts that are
|
||||||
|
;; larger than the system default.
|
||||||
|
(setq frame-inhibit-implied-resize t)
|
31
init.el
Normal file
31
init.el
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
(setq gc-cons-threshold most-positive-fixnum)
|
||||||
|
;; install straight.el
|
||||||
|
(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))
|
||||||
|
|
||||||
|
;; load own config files
|
||||||
|
(setq custom-file (concat user-emacs-directory "customs.el"))
|
||||||
|
(unless (file-exists-p custom-file)
|
||||||
|
(make-empty-file custom-file))
|
||||||
|
(load-file custom-file)
|
||||||
|
|
||||||
|
(push (concat user-emacs-directory "cnf") load-path)
|
||||||
|
|
||||||
|
(require 'essentials)
|
||||||
|
(require 'ui)
|
||||||
|
(require 'additionals)
|
||||||
|
(require 'global-keybindings)
|
||||||
|
(require 'functions)
|
||||||
|
|
||||||
|
;; set gc values back to smth reasonable
|
||||||
|
(setq gc-cons-threshold 104857600) ;; 100 MegaByte (LSP)
|
Loading…
x
Reference in New Issue
Block a user