Created
August 19, 2020 22:03
-
-
Save lazyvalue/b51bc1343d73ff0a647ac5eeba4e7a92 to your computer and use it in GitHub Desktop.
Scott's Emacs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Package stuff | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(require 'package) | |
(setq package-archives '(("org" . "http://orgmode.org/elpa/") | |
("gnu" . "http://elpa.gnu.org/packages/") | |
("melpa" . "https://melpa.org/packages/") | |
("marmalade" . "http://marmalade-repo.org/packages/"))) | |
(package-initialize) | |
;; Bootstrap `use-package' | |
(unless (package-installed-p 'use-package) ; unless it is already installed | |
(package-refresh-contents) ; updage packages archive | |
(package-install 'use-package)) ; and install the most recent version of use-package | |
(require 'use-package) | |
;; other bootstrap | |
(use-package exec-path-from-shell :ensure t) | |
(when (memq window-system '(mac ns x)) | |
(exec-path-from-shell-initialize)) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Basic functionality | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(setq delete-old-versions -1 ) ; delete excess backup versions silently | |
(setq version-control t ) ; use version control | |
(setq vc-make-backup-files t ) ; make backups file even when in version controlled dir | |
(setq backup-directory-alist `(("." . "~/.emacs.d/backups")) ) ; which directory to put backups file | |
(setq vc-follow-symlinks t ) ; don't ask for confirmation when opening symlinked file | |
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)) ) ;transform backups file name | |
(setq inhibit-startup-screen t ) ; inhibit useless and old-school startup screen | |
(setq ring-bell-function 'ignore ) ; silent bell when you make a mistake | |
(setq coding-system-for-read 'utf-8 ) ; use utf-8 by default | |
(setq coding-system-for-write 'utf-8 ) | |
(setq sentence-end-double-space nil) ; sentence SHOULD end with only a point. | |
(setq default-fill-column 80) ; toggle wrapping text at the 80th character | |
(setq initial-scratch-message "Welcome in Emacs") ; print a default message in the empty scratch buffer opened at startup | |
(setq create-lockfiles nil) | |
(global-auto-revert-mode t) ;; auto-revert-mode | |
;; undo tree | |
(use-package undo-tree :ensure t) | |
(global-undo-tree-mode) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; GUI | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(set-cursor-color "#ffffff") | |
(blink-cursor-mode 0) | |
;; highlight indent modes | |
(use-package highlight-indent-guides :ensure t) | |
(setq highlight-indent-guides-method 'column) | |
(setq highlight-indent-guides-responsive 'stack) | |
(add-hook 'prog-mode-hook 'highlight-indent-guides-mode) | |
;; zoom windows | |
(use-package zoom :ensure t) | |
;; eyebrowse | |
(use-package eyebrowse :ensure t) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Evil Mode | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; evil | |
(use-package evil | |
:ensure t | |
:init | |
(setq evil-want-C-u-scroll t) | |
:config | |
(evil-mode 1) | |
) | |
(require 'evil) | |
(evil-mode t) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Ivy | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;(use-package counsel | |
; :after ivy | |
; :config (counsel-mode)) | |
(use-package ivy | |
:defer 0.1 | |
:diminish | |
:bind (("C-c C-r" . ivy-resume) | |
("C-x B" . ivy-switch-buffer-other-window)) | |
:custom | |
(ivy-count-format "(%d/%d) ") | |
(ivy-use-virtual-buffers t) | |
:config (ivy-mode)) | |
(use-package swiper | |
:after ivy | |
:bind (("C-s" . swiper) | |
("C-r" . swiper))) | |
(use-package ivy-hydra :ensure t) | |
(use-package counsel :ensure t) | |
(ivy-mode 1) | |
(setq ivy-use-virtual-buffers t) | |
(setq enable-recursive-minibuffers t) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Other UX stuff | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(use-package ag :ensure t) | |
(use-package moody :ensure t | |
:config | |
(setq x-underline-at-descent-line t) | |
(moody-replace-mode-line-buffer-identification) | |
(moody-replace-vc-mode)) | |
(use-package minions | |
:ensure t | |
:config (minions-mode 1) | |
) | |
;; magit | |
(use-package magit :ensure t) | |
;; evil magit | |
(use-package evil-magit :ensure t) | |
(require 'evil-magit) | |
;; ranger | |
(use-package ranger :ensure t) | |
;; helm | |
;(use-package helm :ensure t) | |
;(require 'helm-config) | |
;(use-package helm-ag :ensure t) | |
;; ace window | |
(use-package ace-window :ensure t) | |
(require 'ace-window) | |
;; projectile | |
(use-package projectile :ensure t) | |
(require 'projectile) | |
(setq projectile-project-search-path '("~/ws/")) | |
(projectile-mode +1) | |
;; helm-projectile | |
;(use-package helm-projectile :ensure t) | |
;(helm-projectile-on) | |
;; counsel-projectile | |
(use-package counsel-projectile :ensure t) | |
(counsel-projectile-mode 1) | |
;; gui | |
(global-display-line-numbers-mode) | |
(tool-bar-mode -1) | |
(menu-bar-mode -1) | |
;; font | |
(set-language-environment "UTF-8") | |
(set-frame-font "Hack-16" nil t) | |
(global-hl-line-mode 1) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Themes | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(use-package vscode-dark-plus-theme | |
:ensure t | |
:config | |
(load-theme 'vscode-dark-plus t)) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Treemacs | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(use-package treemacs | |
:ensure t | |
:defer t | |
:init | |
(with-eval-after-load 'winum | |
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window)) | |
:config | |
(progn | |
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0) | |
treemacs-deferred-git-apply-delay 0.5 | |
treemacs-directory-name-transformer #'identity | |
treemacs-display-in-side-window t | |
treemacs-eldoc-display t | |
treemacs-file-event-delay 5000 | |
treemacs-file-extension-regex treemacs-last-period-regex-value | |
treemacs-file-follow-delay 0.2 | |
treemacs-file-name-transformer #'identity | |
treemacs-follow-after-init t | |
treemacs-git-command-pipe "" | |
treemacs-goto-tag-strategy 'refetch-index | |
treemacs-indentation 2 | |
treemacs-indentation-string " " | |
treemacs-is-never-other-window nil | |
treemacs-max-git-entries 5000 | |
treemacs-missing-project-action 'ask | |
treemacs-move-forward-on-expand nil | |
treemacs-no-png-images nil | |
treemacs-no-delete-other-windows t | |
treemacs-project-follow-cleanup nil | |
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory) | |
treemacs-position 'left | |
treemacs-recenter-distance 0.1 | |
treemacs-recenter-after-file-follow nil | |
treemacs-recenter-after-tag-follow nil | |
treemacs-recenter-after-project-jump 'always | |
treemacs-recenter-after-project-expand 'on-distance | |
treemacs-show-cursor nil | |
treemacs-show-hidden-files t | |
treemacs-silent-filewatch nil | |
treemacs-silent-refresh nil | |
treemacs-sorting 'alphabetic-asc | |
treemacs-space-between-root-nodes t | |
treemacs-tag-follow-cleanup t | |
treemacs-tag-follow-delay 1.5 | |
treemacs-user-mode-line-format nil | |
treemacs-user-header-line-format nil | |
treemacs-width 35) | |
;; The default width and height of the icons is 22 pixels. If you are | |
;; using a Hi-DPI display, uncomment this to double the icon size. | |
;;(treemacs-resize-icons 44) | |
(treemacs-follow-mode t) | |
(treemacs-filewatch-mode t) | |
(treemacs-fringe-indicator-mode t) | |
(pcase (cons (not (null (executable-find "git"))) | |
(not (null treemacs-python-executable))) | |
(`(t . t) | |
(treemacs-git-mode 'deferred)) | |
(`(t . _) | |
(treemacs-git-mode 'simple)))) | |
:bind | |
(:map global-map | |
("M-0" . treemacs-select-window) | |
("C-x t 1" . treemacs-delete-other-windows) | |
("C-x t t" . treemacs) | |
("C-x t B" . treemacs-bookmark) | |
("C-x t C-t" . treemacs-find-file) | |
("C-x t M-t" . treemacs-find-tag))) | |
(use-package treemacs-evil | |
:after treemacs evil | |
:ensure t) | |
(use-package treemacs-projectile | |
:after treemacs projectile | |
:ensure t) | |
(use-package treemacs-icons-dired | |
:after treemacs dired | |
:ensure t | |
:config (treemacs-icons-dired-mode)) | |
(use-package treemacs-magit | |
:after treemacs magit | |
:ensure t) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Key bindings | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; which-key | |
(use-package which-key :ensure t) | |
(which-key-mode) | |
;; general | |
(use-package general :ensure t | |
:config | |
(general-define-key | |
:states '(normal visual insert emacs) | |
:prefix "SPC" | |
:non-normal-prefix "C-SPC" | |
;; code | |
"c" '(:ignore t :which-key "Code") | |
;"cf" '(helm-ag :which-key "helm ag") | |
;; projectile | |
"p" '(:ignore t :which-key "Projectile") | |
"pm" '(projectile-mode-map :which-key "projectile mode map") | |
"pp" '(counsel-projectile-switch-project :which-key "switch project") | |
"pb" '(counsel-projectile-switch-to-buffer :which-key "projectile switch to buffer") | |
"pf" '(counsel-projectile-find-file :which-key "projectile find file") | |
;"pg" '(helm-projectile-grep :whick-key "projectile grep") | |
;"pc" '(projectile-compile-project :which-key "compile project") | |
;; ivy | |
"i" '(:ignore t :which-key "Ivy") | |
"ii" '(ivy-mode :which-key "Ivy mode") | |
;; file management | |
"f" '(:ignore t :which-key "File") | |
"ff" '(find-file :which-key "Find File") | |
"fr" '(ranger-minimal-toggle :which-key "ranger") | |
;; buffers | |
"b" '(:ignore t :which-key "Buffers") | |
;"bb" '(helm-mini :which-key "helm mini") | |
"bk" '(kill-this-buffer nil :which-key "kill buffer") | |
"br" '(revert-buffer nil :which-key "revert buffer") | |
;; org | |
; "o" '(:ignore t :which-key "org mode") | |
; "oj" '(org-roam-jump-to-index :which-key "index") | |
; "or" '(org-roam :which-key "org-roam-mode") | |
; "of" '(org-roam-find-file :which-key "roam find file") | |
; "oi" '(org-roam-insert :which-key "roam insert") | |
;; windows | |
"w" '(:ignore t :which-key "Workspaces") | |
"ww" '(ace-window :which-key "Ace Window") | |
"wd" '(delete-window :which-key "Delete window") | |
;; shell | |
"s" '(:ignore t :which-key "Shell") | |
"te" '(eshell :which-key "eshell") | |
;; git | |
"g" '(:ignore t :which-key "Git") | |
"gm" '(magit-status :which-key "magit") | |
)) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Programming Languages | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; json | |
(use-package json-mode :ensure t :init) | |
;; python mode | |
(use-package elpy | |
:ensure t | |
:init | |
(elpy-enable)) | |
(add-hook 'elpy-mode-hook (lambda () | |
(add-hook 'before-save-hook | |
'elpy-format-code nil t))) | |
(use-package flycheck | |
:hook (after-init . global-flycheck-mode)) | |
;; go mode | |
(use-package go-mode | |
:ensure t | |
:init | |
(local-set-key (kbd "M-.") 'godef-jump) | |
) | |
(add-hook 'go-mode-hook #'lsp-go-install-save-hooks) | |
;; yaml mode | |
(use-package yaml-mode :ensure t) | |
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode)) | |
;; rust | |
(use-package rustic :ensure t) | |
;;(add-hook 'rust-mode-hook (lambda () (setq indent-tabs-mode nil))) | |
;;(setq rust-format-on-save t) | |
;; terraform mode | |
(use-package terraform-mode :ensure t) | |
(add-hook 'terraform-mode-hook #'terraform-format-on-save-mode) | |
;; protobuf mode | |
(use-package protobuf-mode :ensure t) | |
(require 'protobuf-mode) | |
;; typescript mode | |
(use-package tide | |
:ensure t | |
:after (typescript-mode company flycheck) | |
:hook ((typescript-mode . tide-setup) | |
(typescript-mode . tide-hl-identifier-mode) | |
(before-save . tide-format-before-save))) | |
(defun setup-tide-mode () | |
(interactive) | |
(tide-setup) | |
(flycheck-mode +1) | |
(setq flycheck-check-syntax-automatically '(save mode-enabled)) | |
(eldoc-mode +1) | |
(tide-hl-identifier-mode +1) | |
;; company is an optional dependency. You have to | |
;; install it separately via package-install | |
;; `M-x package-install [ret] company` | |
(company-mode +1)) | |
;; aligns annotation to the right hand side | |
(setq company-tooltip-align-annotations t) | |
;; formats the buffer before saving | |
(add-hook 'before-save-hook 'tide-format-before-save) | |
(add-hook 'typescript-mode-hook #'setup-tide-mode) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; Programming | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;; lsp | |
(use-package lsp-mode | |
:commands (lsp lsp-deferred) | |
:config (setq lsp-file-watch-threshold 512 | |
lsp-enable-file-watchers nil | |
lsp-enable-snippet nil) | |
:init | |
:hook (go-mode . lsp-deferred)) | |
(setq lsp-keymap-prefix "C-l") | |
;; Set up before-save hooks to format buffer and add/delete imports. | |
;; Make sure you don't have other gofmt/goimports hooks enabled. | |
(defun lsp-go-install-save-hooks () | |
(add-hook 'before-save-hook #'lsp-format-buffer t t) | |
(add-hook 'before-save-hook #'lsp-organize-imports t t)) | |
;; Optional - provides fancier overlays. | |
(use-package lsp-ui | |
:ensure t | |
:commands lsp-ui-mode | |
:hook (go-mode . lsp-deferred)) | |
;; Company mode is a standard completion package that works well with lsp-mode. | |
(use-package company | |
:ensure t | |
:config | |
;; Optionally enable completion-as-you-type behavior. | |
(setq company-idle-delay 0) | |
(setq company-minimum-prefix-length 1)) | |
;; company-lsp integrates company mode completion with lsp-mode. | |
;; completion-at-point also works out of the box but doesn't support snippets. | |
(use-package company-lsp | |
:ensure t | |
:commands company-lsp) | |
;; Optional - provides snippet support. | |
(use-package yasnippet | |
:ensure t | |
:commands yas-minor-mode | |
:hook (go-mode . yas-minor-mode)) | |
(with-eval-after-load 'lsp-mode | |
(add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment