dotfiles/dot_emacs

389 lines
11 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/"))
;; 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.
)
(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)
(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
(elcord-mode))
(use-package magit
:ensure t)
(use-package magit-todos
:ensure t
:config
(add-hook 'rustic-hook 'hl-todo-mode))
(use-package lsp-ui
:ensure t)
(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 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)
(require 'lsp-clients)
: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))
(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 vterm
:ensure t)
(setq evil-want-keybinding nil)
(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)
:init
(setq doom-modeline-icon t))
;(use-package telephone-line
; :ensure t
; :config
; (telephone-line-mode 1))
(use-package chess
:ensure t)
(use-package doom-themes
:ensure t
:config
;; Global settings (defaults)
; (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)
;; or for treemacs users
(setq doom-themes-treemacs-theme "doom-colors") ; use the colorful treemacs theme
(doom-themes-treemacs-config))
;; 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
'((light . doom-one-light)
(dark . doom-peacock))) ;; Themes can be the list: (dark . (tsdh-dark wombat))
;; 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 key-chord
:ensure t
:init
;;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))
;; 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-next-line)
(define-key evil-motion-state-map "l" 'evil-previous-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-next-line)
(evil-define-key 'treemacs treemacs-mode-map (kbd "l") 'treemacs-previous-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
(lambda (frame)
(select-frame frame)
(load-theme 'doom-peacock)))
;; 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))
(server-start)