Skip to content

Instantly share code, notes, and snippets.

@kukagg
Last active February 20, 2020 01:43
Show Gist options
  • Save kukagg/f09272169e6a22117e5db1ce871a05b1 to your computer and use it in GitHub Desktop.
Save kukagg/f09272169e6a22117e5db1ce871a05b1 to your computer and use it in GitHub Desktop.
;; packages
(setq package-enable-at-startup nil)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
("marmalade" . "https://marmalade-repo.org/packages/")
("melpa" . "https://melpa.org/packages/")))
(when (>= emacs-major-version 24)
(require 'package)
(add-to-list
'package-archives
;; '("melpa" . "http://stable.melpa.org/packages/") ; many packages won't show if using stable
'("melpa" . "http://melpa.milkbox.net/packages/")
t))
(package-initialize)
;; use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
;; hide defaults
(menu-bar-mode -1)
(tool-bar-mode -1)
;; hides splash, faster startup
(setq inhibit-startup-screen t
inhibit-startup-buffer-menu t
inhibit-startup-message t
inhibit-startup-hooks t)
(savehist-mode 1) ;; save history
;; load evil
(use-package evil
:ensure t ;; install the evil package if not installed
:init ;; tweak evil's configuration before loading it
(setq evil-search-module 'evil-search)
(setq evil-ex-complete-emacs-commands nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(setq evil-shift-round nil)
(setq evil-want-C-u-scroll t)
:config ;; tweak evil after loading it
(evil-mode)
;; example how to map a command in normal mode (called 'normal state' in evil)
(define-key evil-normal-state-map (kbd ", w") 'evil-window-vsplit)
(evil-define-key 'normal term-raw-map (kbd "p") 'term-paste)
;; evil related
(define-key evil-normal-state-map (kbd "M-.") nil)
(define-key evil-normal-state-map (kbd "M-,") nil))
;; vim
;; t.pope surround
(require 'evil-surround)
(global-evil-surround-mode)
;;;;; multiple cursors
(require 'evil-mc)
(global-evil-mc-mode)
;;;;; multi-edit
(require 'evil-multiedit)
;; evil leader
(require 'evil-leader)
(global-evil-leader-mode)
;; Highlights all matches of the selection in the buffer.
(define-key evil-visual-state-map "R" 'evil-multiedit-match-all)
;; Match the word under cursor (i.e. make it an edit region). Consecutive presses will
;; incrementally add the next unmatched match.
(define-key evil-normal-state-map (kbd "M-d") 'evil-multiedit-match-and-next)
;; Match selected region.
(define-key evil-visual-state-map (kbd "M-d") 'evil-multiedit-match-and-next)
;; Insert marker at point
(define-key evil-insert-state-map (kbd "M-d") 'evil-multiedit-toggle-marker-here)
;; Same as M-d but in reverse.
(define-key evil-normal-state-map (kbd "M-D") 'evil-multiedit-match-and-prev)
(define-key evil-visual-state-map (kbd "M-D") 'evil-multiedit-match-and-prev)
;; OPTIONAL: If you prefer to grab symbols rather than words, use
;; `evil-multiedit-match-symbol-and-next` (or prev).
;; Restore the last group of multiedit regions.
(define-key evil-visual-state-map (kbd "C-M-D") 'evil-multiedit-restore)
;; RET will toggle the region under the cursor
(define-key evil-multiedit-state-map (kbd "RET") 'evil-multiedit-toggle-or-restrict-region)
;; ...and in visual mode, RET will disable all fields outside the selected region
(define-key evil-motion-state-map (kbd "RET") 'evil-multiedit-toggle-or-restrict-region)
;; For moving between edit regions
(define-key evil-multiedit-state-map (kbd "C-n") 'evil-multiedit-next)
(define-key evil-multiedit-state-map (kbd "C-p") 'evil-multiedit-prev)
(define-key evil-multiedit-insert-state-map (kbd "C-n") 'evil-multiedit-next)
(define-key evil-multiedit-insert-state-map (kbd "C-p") 'evil-multiedit-prev)
;; Ex command that allows you to invoke evil-multiedit with a regular expression, e.g.
(evil-ex-define-cmd "ie[dit]" 'evil-multiedit-ex-match)
;; commentary
(require 'evil-commentary)
(evil-commentary-mode 1)
;; theme
(load-theme 'badwolf t)
;; line numbers
;; (global-display-line-numbers-mode 1)
(add-hook 'prog-mode-hook '(lambda ()
(if (version<= emacs-version "26.0.50")
(linum-mode)
(display-line-numbers-mode))))
;; windmove
(when (fboundp 'windmove-default-keybindings)
(windmove-default-keybindings))
;; smooth scroll
(setq redisplay-dont-pause t
scroll-margin 3
scroll-step 1
scroll-conservatively 10000
scroll-preserve-screen-position 1)
;; powerline
(require 'powerline)
(powerline-default-theme)
;;;; clipboard
(setq select-enable-clipboard t)
(setq save-interprogram-paste-before-kill t)
;; clipboard for mac
(defun copy-from-osx ()
(shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
(let ((process-connection-type nil))
(let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc))))
(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)
;; minibuffer
(setq mouse-yank-at-point t)
;; encoding
(setq locale-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
;; time locale
(setq system-time-locale "C")
;; backup
(setq-default backup-directory-alist
`(("" . ,(expand-file-name "backup/" user-emacs-directory)))
auto-save-default nil
backup-by-copying t
delete-old-versions t)
;; lockfiles
(setq create-lockfiles nil)
;; large files limit increase
(setq large-file-warning-threshold 40000000)
;; highlighting parens
(use-package paren
:demand
:custom ((show-paren-delay 0))
:config
(show-paren-mode t))
;; auto-completion
(use-package ivy
:demand t
:ensure t
:diminish
:commands ivy-mode
:custom ((ivy-wrap t)
(ivy-height 8)
(ivy-display-style 'fancy)
(ivy-use-virtual-buffers t)
(ivy-case-fold-search-default t)
(ivy-re-builders-alist '((t . ivy--regex-ignore-order)))
(enable-recursive-minibuffers t))
:config
(ivy-mode t)
:bind (:map ivy-minibuffer-map
("<RET>" . ivy-alt-done)))
;;;; syntax
(setq-default tab-width 2)
(setq-default tab-width 2 indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq js-indent-level 2)
(setq python-indent 2)
(setq css-indent-offset 2)
(add-hook 'sh-mode-hook
(lambda ()
(setq sh-basic-offset 2
sh-indentation 2)))
(setq web-mode-markup-indent-offset 2)
;; checking
(add-hook 'after-init-hook #'global-flycheck-mode)
;; auto-indent with return key
(define-key global-map (kbd "RET") 'newline-and-indent)
;; javascript
(add-to-list 'auto-mode-alist '("\\.js\\'" . rjsx-mode))
(add-hook 'js-mode-hook 'js2-minor-mode)
(add-hook 'js2-mode-hook 'ac-js2-mode)
(setq js2-highlight-level 3)
(setq js-indent-level 2)
;; Semicolons are optional in JS, do not warn about them missing
(setq js2-strict-missing-semi-warning nil)
;; rainbow
(add-hook 'prog-mode-hook 'rainbow-mode)
;; gargage collection
(setq gc-cons-threshold 20000000)
;; auto-save in /tmp
(setq backup-directory-alist
`((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
`((".*" ,temporary-file-directory t)))
;; follow sym-links
(setq vc-follow-symlinks t)
;; one space after period
(setq sentence-end-double-space nil)
;; ask y/n instead of yes/no
(fset 'yes-or-no-p 'y-or-n-p)
;; auto refresh the buffer
(global-auto-revert-mode t)
;; modes
(use-package json-mode)
(use-package dockerfile-mode)
;;Neotree
(with-eval-after-load 'neotree
(evil-define-key 'evilified neotree-mode-map (kbd "C-w l") 'evil-window-right)
(evil-define-key 'evilified neotree-mode-map (kbd "C-w <right>") 'evil-window-right))
(define-key global-map (kbd "M-g") 'neotree-toggle)
(use-package neotree
:ensure t
:config
(setq projectile-switch-project-action 'neotree-projectile-action)
(setq-default neo-show-hidden-files t)
(add-hook 'neotree-mode-hook
(lambda ()
(define-key evil-normal-state-local-map (kbd "q") 'neotree-hide)
(define-key evil-normal-state-local-map (kbd "I") 'neotree-hidden-file-toggle)
(define-key evil-normal-state-local-map (kbd "z") 'neotree-stretch-toggle)
(define-key evil-normal-state-local-map (kbd "R") 'neotree-refresh)
(define-key evil-normal-state-local-map (kbd "m") 'neotree-rename-node)
(define-key evil-normal-state-local-map (kbd "c") 'neotree-create-node)
(define-key evil-normal-state-local-map (kbd "d") 'neotree-delete-node)
(define-key evil-normal-state-local-map (kbd "s") 'neotree-enter-vertical-split)
(define-key evil-normal-state-local-map (kbd "S") 'neotree-enter-horizontal-split)
(define-key evil-normal-state-local-map (kbd "RET") 'neotree-enter)))
(neotree-show))
(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.
'(ansi-color-names-vector
["#080808" "#d70000" "#67b11d" "#875f00" "#268bd2" "#af00df" "#00ffff" "#b2b2b2"])
'(custom-safe-themes
(quote
("fa2b58bb98b62c3b8cf3b6f02f058ef7827a8e497125de0254f56e373abee088" "123a8dabd1a0eff6e0c48a03dc6fb2c5e03ebc7062ba531543dfbce587e86f2a" "e1d09f1b2afc2fed6feb1d672be5ec6ae61f84e058cb757689edb669be926896" "a06658a45f043cd95549d6845454ad1c1d6e24a99271676ae56157619952394a" "b89ae2d35d2e18e4286c8be8aaecb41022c1a306070f64a66fd114310ade88aa" "4cf9ed30ea575fb0ca3cff6ef34b1b87192965245776afa9e9e20c17d115f3fb" "aded61687237d1dff6325edb492bde536f40b048eab7246c61d5c6643c696b7f" "44ef88be62a61ad370d55ade1b150e62f2a12bbf80f028e8d5fd4e0f85870f6c" "3be1f5387122b935a26e02795196bc90860c57a62940f768f138b02383d9a257" "bffa9739ce0752a37d9b1eee78fc00ba159748f50dc328af4be661484848e476" "174502267725776b47bdd2d220f035cae2c00c818765b138fea376b2cdc15eb6" "939ea070fb0141cd035608b2baabc4bd50d8ecc86af8528df9d41f4d83664c6a" default)))
'(enable-recursive-minibuffers t)
'(hl-todo-keyword-faces
(quote
(("TODO" . "#dc752f")
("NEXT" . "#dc752f")
("THEM" . "#2aa198")
("PROG" . "#268bd2")
("OKAY" . "#268bd2")
("DONT" . "#d70000")
("FAIL" . "#d70000")
("DONE" . "#86dc2f")
("NOTE" . "#875f00")
("KLUDGE" . "#875f00")
("HACK" . "#875f00")
("TEMP" . "#875f00")
("FIXME" . "#dc752f")
("XXX+" . "#dc752f")
("\\?\\?\\?+" . "#dc752f"))))
'(ivy-case-fold-search-default t)
'(ivy-display-style (quote fancy))
'(ivy-height 8)
'(ivy-re-builders-alist (quote ((t . ivy--regex-ignore-order))) t)
'(ivy-use-virtual-buffers t)
'(ivy-wrap t)
'(notmuch-search-line-faces
(quote
(("unread" :foreground "#aeee00")
("flagged" :foreground "#0a9dff")
("deleted" :foreground "#ff2c4b" :bold t))))
'(package-selected-packages
(quote
(racket-mode slime dockerfile-mode evil-leader neotree evil-multiedit evil-mc treemacs-magit treemacs-icons-dired treemacs-projectile treemacs-evil treemacs rainbow-mode evil-commentary writegood-mode writeroom-mode xterm-color yaml-mode web-mode tide synosaurus smex spaceline spacemacs-theme robe rjsx-mode markdown-mode json-mode evil-surround ac-js2 ag cider exec-path-from-shell use-package powerline-evil hackernews gruvbox-theme git-gutter flycheck evil-org evil-mu4e evil-magit badwolf-theme auto-complete)))
'(pdf-view-midnight-colors (quote ("#b2b2b2" . "#262626")))
'(server-mode t)
'(show-paren-delay 0))
(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.
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment