dotfiles/.emacs.d/init.el
2023-05-29 10:14:32 +02:00

449 lines
11 KiB
EmacsLisp

(add-hook 'emacs-startup-hook
(lambda ()
(message "tobmacs loaded in %s."
(emacs-init-time))))
(set-default-coding-systems 'utf-8)
(customize-set-variable 'visible-bell 1)
(customize-set-variable 'large-file-warning-threshold 100000000)
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(load custom-file 'noerror)
;; (add-to-list 'native-comp-eln-load-path (expand-file-name "eln-cache/" user-emacs-directory))
(setq package-archives
'(("elpa" . "https://elpa.gnu.org/packages/")
("elpa-devel" . "https://elpa.gnu.org/devel/")
("nongnu" . "https://elpa.nongnu.org/nongnu/")
("melpa" . "https://melpa.org/packages/")))
(setq package-archive-priorities
'(("elpa" . 2)
("nongnu" . 1)))
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
(setq use-package-compute-statistics t)
;; -----------------------------------------------------------------
(use-package ace-window
:bind
("M-o" . ace-window))
(use-package all-the-icons
:if window-system)
(use-package all-the-icons-dired
:if window-system
:hook dired-mode)
(use-package avy
:bind
(("C-." . avy-goto-char-timer)
("C-:" . avy-goto-char)
("M-g f" . avy-goto-line)))
(use-package chatgpt-shell
:config
(setq chatgpt-shell-openai-key
(lambda ()
(auth-source-pick-first-password :host "api.openai.com"))))
(use-package cider
:defer t)
(use-package clj-refactor
:hook clojure-mode)
(use-package clojure-mode
:hook (clojure-mode . (lambda ()
(unbind-key "C-:" clojure-mode-map)))
:config
(use-package flycheck-clj-kondo)
(require 'flycheck-clj-kondo))
(use-package consult
:bind
(("C-x b" . consult-buffer)
("C-x 4 b" . consult-buffer-other-window)
("C-x r b" . consult-bookmark)
("C-x p b" . consult-project-buffer)
("M-y" . consult-yank-pop)
("M-g g" . consult-goto-line)
("M-g M-g" . consult-goto-line)
("M-i" . consult-imenu)
("M-s l" . consult-line)
("M-s L" . consult-line-multi))
:hook
(completion-list-mode . consult-preview-at-point-mode))
(use-package copilot
:load-path "packages/copilot"
:bind ("M-C-<return>" . copilot-accept-completion)
:commands (copilot-login global-copilot-mode)
:config
(defun to/copilot-disable-predicate ()
(member major-mode '(shell-mode
eshell-mode
term-mode
vterm-mode
compilation-mode
debugger-mode
dired-mode-hook
compilation-mode-hook
minibuffer-mode-hook)))
(add-to-list 'copilot-disable-predicates #'to/copilot-disable-predicate))
(use-package corfu
:custom
(corfu-cycle t)
(corfu-preselect-first nil)
(corfu-auto t)
:init
(global-corfu-mode))
(use-package dash)
(use-package dired
:ensure nil
:init
(setq dired-dwim-target t
dired-hide-details-hide-symlink-targets nil
dired-auto-revert-buffer #'dired-buffer-stale-p
dired-recursive-copies 'always
dired-recursive-deletes 'top
dired-kill-when-opening-new-dired-buffer t))
(use-package dired-hide-details-mode
:ensure nil
:after dired
:hook dired-mode)
(use-package dired-x
:ensure nil)
(use-package dockerfile-mode)
(use-package dumb-jump
:config
(add-hook 'xref-backend-functions #'dumb-jump-xref-activate)
(setq xref-show-definitions-function #'xref-show-definitions-completing-read))
(use-package ef-themes
:config
(setq ef-themes-headings
'((0 . (variable-pitch light 2.0))
(1 . (variable-pitch light 1.5))
(2 . (variable-pitch semibold 1.2))
(t . (variable-pitch semibold 1.0))))
(setq ef-themes-mixed-fonts t
ef-themes-variable-pitch-ui t
ef-themes-region '(intense no-extend))
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'ef-winter :no-confirm))
(use-package editorconfig)
(use-package eglot
:hook
(swift-mode . eglot-ensure)
:config
(add-to-list
'eglot-server-programs
'(swift-mode . ("/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp"))))
(use-package emacs
:config
(global-auto-revert-mode)
(minibuffer-electric-default-mode)
(electric-pair-mode)
(repeat-mode)
(fset 'yes-or-no-p 'y-or-n-p)
(setq
auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
backup-directory-alist `((".*" . ,temporary-file-directory))
coding-system-for-read 'utf-8
coding-system-for-write 'utf-8
create-lockfiles nil
default-process-coding-system '(utf-8-unix . utf-8-unix)
delete-by-moving-to-trash t
isearch-allow-motion t
locale-coding-system 'utf-8
next-line-add-newlines t
sentence-end-double-space nil
tab-bar-new-tab-choice "*scratch*"
tab-bar-show nil
user-full-name "Tobias Ostner"
user-mail-address "tobias.ostner@gmail.com"
undo-limit 6710886400 ;; 64mb
undo-strong-limit 100663296 ;; x 1.5 (96mb)
undo-outer-limit 1006632960 ;; x 10 (960mb)
truncate-string-ellipsis "..."
use-dialog-box nil
fast-but-imprecise-scrolling t)
(setq-default indent-tabs-mode nil)
(set-charset-priority 'unicode)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(require 'epg)
(setq epg-pinentry-mode 'loopback)
(when (fboundp 'mac-auto-operator-composition-mode)
(mac-auto-operator-composition-mode))
(when (memq window-system '(mac ns))
(setq mac-option-modifier 'none
mac-command-modifier 'meta
visible-bell nil
ring-bell-function 'flash-mode-line)
(defun flash-mode-line ()
(invert-face 'mode-line)
(run-with-timer 0.1 nil #'invert-face 'mode-line))
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
(add-to-list 'default-frame-alist '(ns-appearance . dark))
(use-package exec-path-from-shell
:config
(exec-path-from-shell-initialize))))
(use-package flycheck
:init
(global-flycheck-mode))
(use-package flycheck-swiftlint
:after flycheck
:config
(flycheck-swiftlint-setup))
(use-package fontaine
:config
(setq fontaine-presets
'((tiny
:default-family "Iosevka Comfy Wide Fixed"
:default-height 70)
(small
:default-family "Iosevka Comfy Fixed"
:default-height 90)
(regular
:default-height 140)
(medium
:default-height 170)
(large
:default-weight semilight
:default-height 250
:bold-weight extrabold)
(presentation
:default-weight semilight
:default-height 250
:bold-weight extrabold)
(jumbo
:default-weight semilight
:default-height 300
:bold-weight extrabold)
(t
:default-family "Iosevka Comfy"
:default-weight regular
:default-height 130
:variable-pitch-family "Iosevka Comfy Duo"
:bold-weight bold
:italic-slant italic
:line-spacing 0.25)))
(fontaine-set-preset 'regular))
(use-package git-gutter
:after ef-themes
:hook prog-mode
:config
(setq git-gutter:update-interval 0.02)
(ef-themes-with-colors
(set-face-foreground 'git-gutter:modified yellow-warmer)
(set-face-foreground 'git-gutter:added green-warmer)
(set-face-foreground 'git-gutter:deleted red-warmer)))
(use-package git-gutter-fringe
:config
(define-fringe-bitmap 'git-gutter-fr:added [224] nil nil '(center repeated))
(define-fringe-bitmap 'git-gutter-fr:modified [224] nil nil '(center repeated))
(define-fringe-bitmap 'git-gutter-fr:deleted [128 192 224 240] nil nil 'bottom))
(use-package graphql-mode)
(use-package js2-mode)
(use-package magit
:defer t)
(use-package marginalia
:init
(marginalia-mode))
(use-package modus-themes
:config
(setq modus-themes-variable-pitch-headings t
modus-themes-org-blocks 'tinted-background
modus-themes-bold-constructs t
modus-themes-italic-constructs t
modus-themes-scale-headings t
modus-themes-completions 'opinionated
modus-themes-mode-line '(accented borderless)))
(use-package moody
:config
(setq x-underline-at-descent-line t)
(moody-replace-mode-line-buffer-identification)
(moody-replace-vc-mode)
(moody-replace-eldoc-minibuffer-message-function)
(use-package minions
:config
(minions-mode)))
(use-package ob-swift
:after org
:config
(org-babel-do-load-languages
'org-babel-load-languages
(append org-babel-load-languages
'((swift . t)))))
(use-package ob-swiftui
:after org)
(use-package olivetti
:hook (org-mode markdown-mode)
:custom
(olivetti-body-width 90))
(use-package orderless
:custom
(completion-styles '(orderless basic))
(completion-category-overrides '((file (styles basic partial-completion)))))
(use-package org
:defer t
:hook
(org-mode . visual-line-mode)
:config
(setq org-auto-align-tags nil
org-tags-column 0
org-special-ctrl-a/e t
org-pretty-entities t
org-hide-emphasis-markers t
org-startup-with-inline-images t
org-agenda-files '("~/TobCloud/org")
org-capture-templates
'(("t" "Todo" entry (file "~/TobCloud/org/inbox.org")
"* TODO %?\n %t\n %i\n %a"))))
(use-package org-modern
:after org
:init
(global-org-modern-mode))
(use-package org-tempo
:ensure nil)
(use-package ox-gfm
:after org)
(use-package paredit
:disabled t
:hook ((lisp-mode emacs-lisp-mode clojure-mode) . paredit-mode))
(use-package pulsar
:config
(pulsar-global-mode 1)
(add-hook 'next-error-hook #'pulsar-pulse-line))
(use-package puni
:hook prog-mode
:bind (:map puni-mode-map
("C-<backspace>" . puni-backward-kill-word)
("C-)" . puni-slurp-forward)
("C-(" . puni-slurp-backward)
("C-}" . puni-barf-forward)
("C-{" . puni-barf-backward)))
(use-package rainbow-delimiters
:hook (emacs-lisp-mode clojure-mode))
(use-package restclient)
(use-package s)
(use-package savehist
:init
(savehist-mode))
(use-package so-long
:config
(global-so-long-mode))
(use-package swift-helpful
:commands swift-helpful)
(use-package swift-mode
:hook (swift-mode . subword-mode)
:config
(setq
swift-mode:multiline-statement-offset 2
swift-mode:parenthesized-expression-offset 2
swift-mode:basic-offset 2
swift-mode:repl-executable "xcrun swift repl"))
(use-package system-packages)
(use-package tabspaces
:config
(tabspaces-mode)
:custom
(tabspaces-use-filtered-buffers-as-default t))
(use-package terraform-mode)
(use-package tree-sitter
:config
(global-tree-sitter-mode))
(use-package tree-sitter-langs
:after tree-sitter)
(use-package yaml-mode)
(use-package vertico
:init
(vertico-mode)
:config
(setq vertico-cycle t))
(use-package vertico-directory
:after vertico
:ensure nil
:hook (rfn-eshadow-update-overlay . vertico-directory-tidy)
:bind (:map vertico-map
("DEL" . vertico-directory-delete-char)
("M-DEL" . vertico-directory-delete-word)))
(use-package vterm
:if module-file-suffix)
(provide 'init)
;;; init.el ends here