dotfiles/dot_emacs

539 lines
16 KiB
Plaintext
Executable file

; package --- Summary
;;; Commentary:
;;; Code:
(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
(not (gnutls-available-p))))
(proto (if no-ssl "http" "https")))
(when no-ssl (warn "\
Your version of Emacs does not support SSL connections,
which is unsafe because it allows man-in-the-middle attacks.
There are two things you can do about this warning:
1. Install an Emacs version that does support SSL and be safe.
2. Remove this warning from your init file so you won't see it again."))
(add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t)
(add-to-list 'package-archives '("ublt" . "https://elpa.ubolonton.org/packages/"))
(add-to-list 'package-archives '("celpa" . "https://celpa.conao3.com/packages/"))
;; Comment/uncomment this line to enable MELPA Stable if desired. See `package-archive-priorities`
;; and `package-pinned-packages`. Most users will not need or want to do this.
;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
)
(package-initialize)
(package-refresh-contents)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(auth-source-save-behavior nil)
'(custom-enabled-themes '(doom-one))
'(custom-safe-themes
'("2f1518e906a8b60fac943d02ad415f1d8b3933a5a7f75e307e6e9a26ef5bf570" default))
'(package-selected-packages
'(chess scad-preview dockerfile-mode heaven-and-hell yaml-mode rustic scad-mode lsp-treemacs flycheck-rust telephone-line yasnippet flycheck-pos-tip flycheck magit lsp-ui all-the-icons doom-themes lsp-mode use-package treemacs-evil)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(setq backup-directory-alist `(("." . "~/.emacs.d/saves")))
(add-to-list 'load-path "~/.emacs.d/lisp/")
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package)
(require 'use-package))
(use-package scad-mode
:ensure t)
(setq evil-want-keybinding nil)
(use-package evil
:ensure t
:config
(evil-mode 1))
(use-package evil-surround
:ensure t
:config
(global-evil-surround-mode 1))
(use-package yasnippet
:ensure t
:config
(yas-global-mode 1))
(use-package treemacs
:ensure t)
(use-package treemacs-evil
:ensure t)
(use-package flycheck
:ensure t
:init (global-flycheck-mode))
;; Deprecated
;(use-package company-lsp
; :ensure t
; :config
; (push 'company-lsp company-backends))
(use-package company-box
:ensure t
:config
(add-hook 'company-mode-hook 'company-box-mode))
(use-package yaml-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode)))
(use-package dockerfile-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("Dockerfile\\'" . dockerfile-mode)))
(use-package rustic
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rustic-mode)))
(use-package elcord
:ensure t
:config
(when (not (string= (system-name) "fractal"))
(elcord-mode))
)
(use-package magit
:ensure t)
(use-package evil-magit
:ensure t
:config
(setq evil-magit-state 'motion)
(evil-define-key evil-magit-state magit-mode-map ";" 'magit-log)
(evil-define-key evil-magit-state magit-mode-map "k" 'evil-previous-line)
(evil-define-key evil-magit-state magit-status-mode-map "l" 'evil-next-line))
(use-package magit-todos
:ensure t
:config
(add-hook 'rustic-hook 'hl-todo-mode))
(use-package lsp-ui
:ensure t)
(when (not (string= (system-name) "localhost"))
(use-package tree-sitter
:ensure t)
(use-package tree-sitter-langs
:ensure t)
(global-tree-sitter-mode)
(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode))
;; aligns annotation to the right hand side
(setq company-tooltip-align-annotations t)
(use-package web-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.xhtml\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.css\\'" . css-mode))
(add-to-list 'auto-mode-alist '("\\.scss\\'" . css-mode))
(flycheck-add-mode 'javascript-eslint 'web-mode)
)
(use-package lsp-pyright
:ensure t
:hook (python-mode . (lambda ()
(require 'lsp-pyright)
(lsp)))) ; or lsp-deferred
(use-package scala-mode
:ensure t
:mode "\\.s\\(cala\\|bt\\)$")
(use-package sbt-mode
:ensure t
:commands sbt-start sbt-command
:config
;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31
;; allows using SPACE when in the minibuffer
(substitute-key-definition
'minibuffer-complete-word
'self-insert-command
minibuffer-local-completion-map)
;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152
(setq sbt:program-options '("-Dsbt.supershell=false"))
)
(use-package lsp-metals
:ensure t)
(use-package lsp-mode
:ensure t
:config
(setq rustic-lsp-server 'rust-analyzer)
(setq rustic-compile-command "cargo build")
(setq rustic-format-trigger nil);'on-save)
(setq lsp-prefer-flymake nil)
:hook
(rustic . lsp)
(php-mode . lsp)
(rjsx-mode . lsp)
(css-mode . lsp)
(web-mode . lsp)
(js2-mode . lsp)
(lsp-mode . lsp-lens-mode)
(typescript-mode . lsp)
(scala-mode . lsp)
(tex-mode . lsp)
(lsp-mode . display-fill-column-indicator-mode)
(python-mode . lsp)
(lsp-mode . origami-mode))
(use-package typescript-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode))
)
(use-package rjsx-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.js\\'" . rjsx-mode))
(add-to-list 'auto-mode-alist '("\\.jsx\\'" . rjsx-mode))
)
(setq display-line-numbers-type 'relative)
(use-package impatient-mode
:ensure t)
(defun markdown-html (buffer)
(princ (with-current-buffer buffer
(format "<!DOCTYPE html><html><title>Impatient Markdown</title><xmp theme=\"united\" style=\"display:none;\"> %s </xmp><script src=\"http://strapdownjs.com/v/0.2/strapdown.js\"></script></html>" (buffer-substring-no-properties (point-min) (point-max))))
(current-buffer)))
(httpd-start)
(use-package vterm
:ensure t)
(use-package w3m
:ensure t)
(defun evil-collection-vterm-escape-stay ()
"Go back to normal state but don't move cursor backwards.
Moving cursor backwards is the default vim behavior but
it is not appropriate in some cases like terminals."
(setq-local evil-move-cursor-back nil))
(add-hook 'vterm-mode-hook #'evil-collection-vterm-escape-stay)
(use-package evil-collection
:ensure t)
(evil-collection-init 'vterm)
(use-package lsp-treemacs
:ensure t
:config
(lsp-treemacs-sync-mode 1))
(use-package all-the-icons
:ensure t)
(use-package doom-modeline
:ensure t
:config
(doom-modeline-mode))
(make-variable-buffer-local 'doom-modeline-icon)
(add-hook 'after-make-frame-hook
(lambda ()
(setq doom-modeline-icon (display-graphic-p))))
;(use-package telephone-line
; :ensure t
; :config
; (telephone-line-mode 1))
(use-package chess
:ensure t)
(use-package origami
:ensure t)
(use-package doom-themes
:ensure t
:config
;; Global settings (defaults)
<<<<<<< HEAD
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled
doom-themes-enable-italic t) ; if nil, italics is universally disabled
;; Enable flashing mode-line on errors
(doom-themes-visual-bell-config)
;; Enable custom neotree theme (all-the-icons must be installed!)
(doom-themes-neotree-config)
=======
; (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-one t)
;; Enable flashing mode-line on errors
; (doom-themes-visual-bell-config)
;; Enable custom neotree theme (all-the-icons must be installed!)
;(doom-themes-neotree-config)
>>>>>>> d0a396dae183d57fe0d9f91d8e36cb1a9d28ce11
;; or for treemacs users
(setq doom-themes-treemacs-theme "doom-colors") ; use the colorful treemacs theme
(doom-themes-treemacs-config)
<<<<<<< HEAD
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
=======
>>>>>>> d0a396dae183d57fe0d9f91d8e36cb1a9d28ce11
;; Corrects (and improves) org-mode's native fontification.
; (doom-themes-org-config))
;(use-package man-preview
; :ensure t)
(use-package heaven-and-hell
:ensure t
:init
(setq heaven-and-hell-theme-type 'dark) ;; Omit to use light by default
(setq heaven-and-hell-themes
<<<<<<< HEAD
'((light . doom-one-light)
(dark . doom-one))); Themes can be the list: (dark . (tsdh-dark wombat))
=======
'((light . doom-one-light)
(dark . doom-peacock))) ;; Themes can be the list: (dark . (tsdh-dark wombat))
>>>>>>> d0a396dae183d57fe0d9f91d8e36cb1a9d28ce11
;; Optionall, load themes without asking for confirmation.
(setq heaven-and-hell-load-theme-no-confirm t)
:hook (after-init . heaven-and-hell-init-hook)
:bind (("<f6>" . heaven-and-hell-toggle-theme)))
(global-set-key (kbd "M-RET T") 'treemacs)
(global-set-key (kbd "M-RET t") 'treemacs-select-window)
(global-set-key (kbd "M-RET s") 'treemacs-switch-workspace)
(global-set-key (kbd "M-RET S") 'treemacs-edit-workspaces)
(global-set-key (kbd "M-RET w") 'ace-window)
(global-set-key (kbd "M-RET r b") 'rustic-cargo-build)
(global-set-key (kbd "M-RET r t") 'rustic-cargo-test)
(global-set-key (kbd "M-RET r r") 'rustic-cargo-run)
(global-set-key (kbd "M-RET r c") 'rustic-cargo-clippy)
(global-set-key (kbd "M-RET r f") 'rustic-cargo-fmt)
(global-set-key (kbd "M-RET e") 'lsp-execute-code-action)
(global-set-key (kbd "M-RET R") 'lsp-rename)
(global-set-key (kbd "M-RET m") 'magit-status)
(global-set-key (kbd "<f11>") 'fullscreen)
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
;; show matching parenthesis
(show-paren-mode 1)
(use-package hydra
:ensure t)
(defvar hydra-stack nil)
(defun hydra-push (expr)
(push `(lambda () ,expr) hydra-stack))
(defun hydra-pop ()
(interactive)
(let ((x (pop hydra-stack)))
(when x
(funcall x))))
(defun magic_rb/hydra-launcher ()
"A launcher for hydras based on current context."
(interactive)
(cl-case major-mode
('rustic-mode (magic_rb/hydra-rust/body))
(t (magic_rb/hydra-base/body)))
)
(global-set-key (kbd "C-'") 'magic_rb/hydra-launcher)
(defhydra magic_rb/hydra-base (:color red :body-pre (setq hydra-stack nil))
("w" (progn
(magic_rb/hydra-window-sub/body)
(hydra-push '(magic_rb/hydra-launcher)))
"visit magic_rb/hydra-window-sub" :color teal)
("s" treemacs-switch-workspace)
("S" treemacs-edit-workspaces)
("t" treemacs-select-window)
("T" treemacs)
("m" magit)
("x" delete-window)
("RET" (progn (setq hydra-stack nil)) "Cancel" :color blue)
("SPC" (progn (setq hydra-stack nil)) "Cancel" :color blue))
(defhydra magic_rb/hydra-window-sub (:color red)
("a" ace-window)
("j" windmove-left)
("k" windmove-up)
("l" windmove-down)
(";" windmove-right)
("RET" hydra-pop "exit" :color blue)
("SPC" hydra-pop "exit" :color blue)
("q" (progn (setq hydra-stack nil)) "Cancel" :color blue)
)
(defhydra magic_rb/hydra-rust (:color red :inherit (magic_rb/hydra-base/heads))
("r" (progn
(magic_rb/hydra-rust-sub/body)
(hydra-push '(magic_rb/hydra-launcher)))
"visit magic_rb/hydra-rust-sub" :color teal)
)
(defhydra magic_rb/hydra-rust-sub ()
("b" rustic-cargo-build)
("r" rustic-cargo-run)
("RET" hydra-pop "exit" :color blue)
("SPC" hydra-pop "exit" :color blue)
("q" (progn (setq hydra-stack nil)) "Cancel" :color blue)
)
(use-package key-chord
:ensure t
:init
(defun key-chord-define-nonsymmetric (keymap keys command)
(if (/= 2 (length keys))
(error "Key-chord keys must have two elements"))
(let ((key1 (logand 255 (aref keys 0)))
(key2 (logand 255 (aref keys 1))))
(if (eq key1 key2)
(define-key keymap (vector 'key-chord key1 key2) command)
(define-key keymap (vector 'key-chord key1 key2) command)
;; just remove this line:
;(define-key keymap (vector 'key-chord key2 key1) command)
)))
;;Exit insert mode by pressing j and then j quickly
(setq key-chord-two-keys-delay 0.15)
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
(key-chord-mode 1))
;(use-package jetbrains-darcula-theme
; :config
; (load-theme 'jetbrains-darcula t))
;; move hjkl to jkl;
(define-key evil-motion-state-map "h" nil)
(define-key evil-motion-state-map "j" 'evil-backward-char)
(define-key evil-motion-state-map "k" 'evil-previous-line)
(define-key evil-motion-state-map "l" 'evil-next-line)
(define-key evil-motion-state-map ";" 'evil-forward-char)
(evil-define-key 'treemacs treemacs-mode-map (kbd "h") nil)
(evil-define-key 'treemacs treemacs-mode-map (kbd "j") 'treemacs-root-up)
(evil-define-key 'treemacs treemacs-mode-map (kbd "k") 'treemacs-previous-line)
(evil-define-key 'treemacs treemacs-mode-map (kbd "l") 'treemacs-next-line)
(evil-define-key 'treemacs treemacs-mode-map (kbd ";") 'treemacs-root-down)
;; optimizations for emacs-lsp
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024))
;; enable ido
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
(ido-mode 1)
;; disable gtk stuff
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) ;; no toolbar
(menu-bar-mode -1) ;;no menubar
(scroll-bar-mode -1) ;; no scroll bar
;; set font
(when (string= (system-name) "omen")
(add-to-list 'default-frame-alist '(font . "Fira Code 12")))
(when (string= (system-name) "heater")
(add-to-list 'default-frame-alist '(font . "Fira Code 12")))
(when (string= (system-name) "fractal")
(add-to-list 'default-frame-alist '(font . "Fira Code 12")))
(set-face-attribute 'default nil :font "Fira Code" )
(custom-set-faces
'(default ((t (:family "Fira Code"))))
;; I should be able to set this just in treemacs...
'(variable-pitch ((t (:family "Fira Code"))))
)
;; disable focus on mouse over
(push '(no-accept-focus . t) lsp-ui-doc-frame-parameters)
(push '(no-accept-focus . t) company-box-frame-parameters)
(add-to-list 'lsp-ui-doc-frame-parameters '(no-accept-focus . t))
(add-to-list 'company-box-frame-parameters '(no-accept-focus . t))
(setq mouse-autoselect-window nil)
;; enable parenthesis and quotes pairing thing
(electric-pair-mode)
(add-hook 'after-make-frame-functions
<<<<<<< HEAD
(lambda (frame)
(select-frame frame)
(load-theme 'doom-one t)))
=======
(lambda (frame)
(select-frame frame)
(load-theme 'doom-peacock)))
>>>>>>> d0a396dae183d57fe0d9f91d8e36cb1a9d28ce11
;; fullscreen
(defun fullscreen ()
(interactive)
(set-frame-parameter nil 'fullscreen
(if (frame-parameter nil 'fullscreen) nil 'fullboth)))
;; :q should kill the current buffer rather than quitting emacs entirely
(evil-ex-define-cmd "q" 'kill-this-buffer)
;; Need to type out :quit to close emacs
(evil-ex-define-cmd "quit" 'evil-quit)
;; save and close buffer
(defun liu233w/ex-save-kill-buffer-and-close ()
(interactive)
(save-buffer)
(kill-this-buffer)
)
(evil-ex-define-cmd "wq" 'liu233w/ex-save-kill-buffer-and-close)
;; positional window movement
(when (fboundp 'windmove-default-keybindings)
(windmove-default-keybindings))
;; compositor based transparency
(add-to-list 'default-frame-alist '(alpha 90 90))
;; set fill column indicator column number
(setq-default display-fill-column-indicator-column 100)
(server-start)