Skip to content

Instantly share code, notes, and snippets.

@lazyvalue
Created August 19, 2020 22:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lazyvalue/b51bc1343d73ff0a647ac5eeba4e7a92 to your computer and use it in GitHub Desktop.
Save lazyvalue/b51bc1343d73ff0a647ac5eeba4e7a92 to your computer and use it in GitHub Desktop.
Scott's Emacs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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