Emacs configuration
Initialize
gc-cons
(setq gc-cons-threshold 64000000)
(add-hook 'after-init-hook (lambda ()
;; restore after startup
(setq gc-cons-threshold 800000)))Add custom load path
(add-to-list 'load-path (expand-file-name "my-packages" user-emacs-directory))Install use-package
(setq core-packages
'(use-package))
(defun ensure-packages (packages)
(dolist (package packages)
(unless (package-installed-p package)
(package-install package))))
(ensure-packages core-packages)Enable auto-installing of packages using use-package
(setq use-package-always-ensure t)
(require 'use-package)Helpers
(defun enable-minor-mode (my-pair)
"Enable minor mode if filename match the regexp. MY-PAIR is a cons cell (regexp . minor-mode)."
(if (buffer-file-name)
(if (string-match (car my-pair) buffer-file-name)
(funcall (cdr my-pair)))))Server
Start server automatically. Use emacsclient to associate/open files.
(use-package server
:if window-system
:init
(server-start))Appearance/UI
Hide welcome message
(setq inhibit-startup-message t)Hide initial scratch buffer message
(setq initial-scratch-message nil)Hide toolbar
(if window-system
(tool-bar-mode -1))
(if window-system
(menu-bar-mode -1))Disable Scrollbar
(scroll-bar-mode -1)Switch window to fullscreen
(add-to-list 'default-frame-alist '(fullscreen . maximized))Disable emacs window disappearing on Ctrl-z
(global-unset-key (kbd "C-z"))Turn off ad-handle-definition: `tramp-read-passwd’ got redefined
(setq ad-redefinition-action 'accept)Change “yes or no” to “y or n”
(defalias 'yes-or-no-p 'y-or-n-p)Show Line/Col Numbers
Show Line col numbers
;; (global-linum-mode t)
;;(add-hook 'prog-mode-hook 'linum-mode)
(use-package nlinum
:config
(add-hook 'prog-mode-hook 'nlinum-mode)
;;(global-nlinum-mode)
)Update line numbers format to avoid graphics glitches in fringe
(setq-default linum-format " %4d ")Show column numbers
;; show column number
(setq-default column-number-mode t)Set Font, Size
Set font and size
(set-frame-font "Hack 14")Change font-size with ctrl + mouse wheel
(global-set-key (vector (list 'control mouse-wheel-down-event)) 'text-scale-increase)
(global-set-key (vector (list 'control mouse-wheel-up-event)) 'text-scale-decrease)Enable Soft-wrap lines
(global-visual-line-mode t)Enable Smooth scrolling
;;(use-package smooth-scrolling)
;;(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
(setq scroll-conservatively 101) ;; move minimum when cursor exits view, instead of recentering
(setq mouse-wheel-scroll-amount '(5)) ;; mouse scroll moves 1 line at a time, instead of 5 lines
(setq mouse-wheel-progressive-speed nil) ;; on a long mouse scroll keep scrolling by 1 lineChange cursor from box to bar
(setq-default cursor-type 'bar)Show matching parentheses with 0 delay
(show-paren-mode 1)
(setq-default show-paren-delay 0)Show beacon on cursor
A light that follows your cursor around so you don’t lose it!
(use-package beacon
:config
(beacon-mode t))Show Tabs for buffers
(use-package tabbar
:config
(tabbar-mode t)
(setq tabbar-cycle-scope (quote tabs))
(setq tabbar-use-images nil)
(setq table-time-before-update 0.1)
;; define all tabs to be one of 3 possible groups: “Emacs Buffer”, “Dired”, “User Buffer”.
(defun tabbar-buffer-groups ()
(list
(cond
((string-equal "*" (substring (buffer-name) 0 1))
"Emacs Buffer"
)
((eq major-mode 'dired-mode)
"Dired"
)
(t
"User Buffer"
)
)))
;; ignore all buffers starting with *
(setq tabbar-buffer-list-function
(lambda ()
(remove-if
(lambda(buffer)
(find (aref (buffer-name buffer) 0) " *"))
(buffer-list))))
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups)
(global-set-key (vector (list 'control `tab)) 'tabbar-forward-tab)
(global-set-key (kbd "C-S-p") 'tabbar-backward-group)
(global-set-key (kbd "C-S-n") 'tabbar-forward-group)
(global-set-key (kbd "C-<") 'tabbar-backward)
(global-set-key (kbd "C->") 'tabbar-forward))Highlight indentation
(use-package highlight-indent-guides
:config
(setq highlight-indent-guides-method 'fill)
(add-hook 'prog-mode-hook 'highlight-indent-guides-mode))Layout
Enable winner mode
(winner-mode 1)Apply syntax highlighting to all buffers
(global-font-lock-mode t)Load Colour theme
(use-package dracula-theme)
(load-theme 'dracula t)
;;(use-package nova-theme)
;;(load-theme 'nova t)Modeline
Spaceline
(use-package spaceline
:config
(progn
(require 'spaceline-config)
(setq powerline-default-separator 'curve)
(setq powerline-height 27)
(setq spaceline-separator-dir-left '(left . left))
(setq spaceline-separator-dir-right '(right . right))
(setq spaceline-workspace-numbers-unicode t)
(spaceline-toggle-battery-off)
(spaceline-toggle-buffer-modified-off)
(spaceline-toggle-hud-off)
(spaceline-toggle-major-mode-on)
(spaceline-toggle-projectile-root-off)
(spaceline-toggle-version-control-off)
(spaceline-toggle-window-number-off)
(spaceline-emacs-theme)
;;(spaceline-helm-mode)
))Diminish
(use-package diminish
:config
(diminish 'company-mode)
(diminish 'helm-mode)
(diminish 'beacon-mode)
(diminish 'cursor-in-brackets-mode)
(diminish 'undo-tree-mode)
(diminish 'visual-line-mode)
;;(diminish 'yas-minor-mode)
)Mode Icons
(use-package mode-icons
:config
(mode-icons-mode))Editing
Character Encodings
(set-default-coding-systems 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-language-environment 'utf-8)
(setq locale-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(when (display-graphic-p)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))Copy/paste
Enable clipboard
(setq select-enable-clipboard t)Save Interprogram paste
https://www.reddit.com/r/emacs/comments/30g5wo/the_kill_ring_and_the_clipboard/
(setq save-interprogram-paste-before-kill t)Overwrite active region
(delete-selection-mode t)Indent new line automatically on ENTER
(global-set-key (kbd "RET") 'newline-and-indent)Duplicate current line
(defun duplicate-line()
(interactive)
(move-beginning-of-line 1)
(kill-line)
(yank)
(open-line 1)
(next-line 1)
(yank)
)
(global-set-key (kbd "C-c d") 'duplicate-line)Simplify whitespace style
(setq-default whitespace-style (quote (spaces tabs newline space-mark tab-mark newline-mark)))Delete trailing whitespace before saving
(add-hook 'before-save-hook 'delete-trailing-whitespace)Set default tab char’s display width to 4 spaces
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
;; make tab key always call a indent command.
(setq-default tab-always-indent t)
;; make tab key call indent command or insert tab character, depending on cursor position
(setq-default tab-always-indent nil)
;; make tab key do indent first then completion.
(setq-default tab-always-indent 'complete)Move cursor inside brackets after adding
;; (use-package cursor-in-brackets
;; :config
;; (add-hook 'prog-mode-hook 'cursor-in-brackets-mode))Enable moving line or region, up or down
(use-package move-text
:config
(move-text-default-bindings))Editor config
(use-package editorconfig
:config
(move-text-default-bindings))Multiple Cursors
(use-package multiple-cursors
:config
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines))Enable code folding
undo-tree
(use-package undo-tree)
(global-undo-tree-mode 1)Sorting lines
(global-set-key (kbd "C-c M-s") 'sort-lines)Bookmarks
(use-package bm
:demand t
:init
;; restore on load (even before you require bm)
(setq bm-restore-repository-on-load t)
:config
;; Allow cross-buffer 'next'
(setq bm-cycle-all-buffers t)
;; where to store persistant files
(setq bm-repository-file "~/.emacs.d/bm-repository")
;; save bookmarks
(setq-default bm-buffer-persistence t)
;; Loading the repository from file when on start up.
(add-hook' after-init-hook 'bm-repository-load)
;; Restoring bookmarks when on file find.
(add-hook 'find-file-hooks 'bm-buffer-restore)
;; Saving bookmarks
(add-hook 'kill-buffer-hook #'bm-buffer-save)
;; Saving the repository to file when on exit.
;; kill-buffer-hook is not called when Emacs is killed, so we
;; must save all bookmarks first.
(add-hook 'kill-emacs-hook #'(lambda nil
(bm-buffer-save-all)
(bm-repository-save)))
;; The `after-save-hook' is not necessary to use to achieve persistence,
;; but it makes the bookmark data in repository more in sync with the file
;; state.
(add-hook 'after-save-hook #'bm-buffer-save)
;; Restoring bookmarks
(add-hook 'find-file-hooks #'bm-buffer-restore)
(add-hook 'after-revert-hook #'bm-buffer-restore)
;; The `after-revert-hook' is not necessary to use to achieve persistence,
;; but it makes the bookmark data in repository more in sync with the file
;; state. This hook might cause trouble when using packages
;; that automatically reverts the buffer (like vc after a check-in).
;; This can easily be avoided if the package provides a hook that is
;; called before the buffer is reverted (like `vc-before-checkin-hook').
;; Then new bookmarks can be saved before the buffer is reverted.
;; Make sure bookmarks is saved before check-in (and revert-buffer)
(add-hook 'vc-before-checkin-hook #'bm-buffer-save)
:bind (("<f2>" . bm-next)
("S-<f2>" . bm-previous)
("C-<f2>" . bm-toggle))
)Expand region
(use-package expand-region
:config
(global-set-key (kbd "C-=") 'er/expand-region))Key Bindings
Which Key
(use-package which-key
:defer 0.2
:diminish
:config (which-key-mode))Buffers
Backup
Force emacs to save backups to a specific directory.
(setq backup-directory-alist '(("." . "~/.emacs.d/backup/per-save"))
backup-by-copying t ; Don't delink hardlinks
version-control t ; Use version numbers on backups
delete-old-versions t ; Automatically delete excess backups
kept-new-versions 20 ; how many of the newest versions to keep
kept-old-versions 5 ; and how many of the old
)
(defun force-backup-of-buffer ()
"Make a special 'per session' backup at the first save of each Emacs session."
(when (not buffer-backed-up)
;; Override the default parameters for per-session backups.
(let ((backup-directory-alist '(("" . "~/.emacs.d/backup/per-session")))
(kept-new-versions 3))
(backup-buffer)))
;; Make a "per save" backup on each save. The first save results in
;; both a per-session and a per-save backup, to keep the numbering
;; of per-save backups consistent.
(let ((buffer-backed-up nil))
(backup-buffer)))Force backup of buffer before saving.
(add-hook 'before-save-hook 'force-backup-of-buffer)Kill buffer without confirmation
(defun volatile-kill-buffer ()
"Kill current buffer unconditionally."
(interactive)
(let ((buffer-modified-p nil))
(kill-buffer (current-buffer))))
(global-set-key (kbd "C-x k") 'volatile-kill-buffer)Refresh buffer from filesystem periodically
(global-auto-revert-mode t)Show current file path
(defun show-file-name ()
"Show the full path file name in the minibuffer."
(interactive)
(message (buffer-file-name)))
(global-set-key [C-f1] 'show-file-name)Make buffer names unique
(use-package uniquify
:ensure nil
:config (setq uniquify-buffer-name-style 'forward))Global Packages
projectile
(use-package projectile
:init
(setq projectile-keymap-prefix (kbd "C-c p"))
:config
(projectile-global-mode)
(setq projectile-completion-system 'default)
(setq projectile-enable-caching t)
:diminish projectile-mode)
(use-package helm-projectile)helm
(use-package helm
:config
;; replace default find file
(global-set-key (kbd "C-x C-f") 'helm-find-files)
;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
(global-set-key (kbd "C-c h") 'helm-command-prefix)
(global-unset-key (kbd "C-x c"))
;; Use helm-M-x instead, shows keybindings for commands
(global-set-key (kbd "M-x") 'helm-M-x)
;; rebind tab to run persistent action
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
;; make TAB works in terminal
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
;; list actions using C-z
;; (define-key helm-map (kbd "C-z") 'helm-select-action)
(when (executable-find "curl")
(setq helm-google-suggest-use-curl-p t))
;; move to end or beginning of source when reaching top or bottom of source.
(setq helm-move-to-line-cycle-in-source t)
;; search for library in `require' and `declare-function' sexp.
(setq helm-ff-search-library-in-sexp t)
;; scroll 8 lines other window using M-<next>/M-<prior>
(setq helm-scroll-amount 8)
(setq helm-ff-file-name-history-use-recentf t)
;; Make helm window lean
;; https://www.reddit.com/r/emacs/comments/2z7nbv/lean_helm_window/
(setq helm-display-header-line nil) ;; t by default
(set-face-attribute 'helm-source-header nil :height 0.1)
(helm-autoresize-mode 1)
(defun helm-toggle-header-line ()
(if (= (length helm-sources) 1)
(set-face-attribute 'helm-source-header nil :height 0.1)
(set-face-attribute 'helm-source-header nil :height 1.0)))
(add-hook 'helm-before-initialize-hook 'helm-toggle-header-line)
;; Set shortcut to helm-occur
;; (global-set-key (kbd "C-c h o") 'helm-occur)
;; Enable helm
(helm-mode 1))thesilversearcher - ag
(use-package ag
:config
;;(setq ag-reuse-window 't)
;;(setq ag-reuse-buffers 't)
(global-set-key "\C-c\C-g" 'ag-project)
(customize-set-variable 'ag-arguments
(quote
("--ignore-dir" "node_modules" "--ignore-dir" "elpa" "--ignore-dir" "lib" "--ignore-dir" "build"))))
(use-package helm-ag)
;; (defun projectile-helm-ag ()
;; (interactive)
;; (helm-ag (projectile-project-root)))wgrep
(use-package wgrep-helm)
(use-package wgrep-ag)company
(use-package company
:config
(add-hook 'after-init-hook 'global-company-mode)
(setq company-idle-delay 0.2
company-minimum-prefix-length 1
company-selection-wrap-around t
company-tooltip-align-annotations t
company-tooltip-flip-when-above nil
company-tooltip-limit 10
company-tooltip-minimum 3
company-tooltip-margin 1
company-transformers '(company-sort-by-occurrence)
company-dabbrev-downcase nil)
;; Add yasnippet support for all company backends
;; https://github.com/syl20bnr/spacemacs/pull/179
(defvar company-mode/enable-yas t "Enable yasnippet for all backends.")
(defun company-mode/backend-with-yas (backend)
(if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
backend
(append (if (consp backend) backend (list backend))
'(:with company-yasnippet))))
)
(use-package company-statistics
:config
(company-statistics-mode)
)Shell/exec-path-from-shell
;; exec-path-from-shell
(use-package exec-path-from-shell
:config
(exec-path-from-shell-initialize))direnv
(use-package direnv
:config
(direnv-mode))Terminal
(use-package multi-term)
(setq multi-term-program "/bin/bash")
(defalias 'term 'multi-term)(defun term-bash (buffer-name)
"Start a terminal and rename buffer."
(interactive "sbuffer name: ")
(ansi-term "/bin/bash")
(rename-buffer buffer-name t))SSH
;; (setq tramp-default-method "ssh")magit
(use-package magit
:config
(setq magit-auto-revert-mode nil)
(setq magit-last-seen-setup-instructions "1.4.0"))Icons
(use-package all-the-icons)neotree
(use-package neotree
:config
(global-set-key [f8] 'neotree-toggle)
(setq neo-smart-open t)
(setq-default neo-show-hidden-files t)
(setq neo-theme 'icons)
(setq projectile-switch-project-action 'neotree-projectile-action))Programming
Coverage
;;(add-to-list 'load-path "~/.emacs.d/coverage-mode/")
;;(load "coverage-mode.el")
;;(require 'coverage-mode)Language Server Protocol (LSP)
(use-package lsp-mode)org
(use-package org
:config
;; Change ... to downward arrow when there's stuff under a header.
;;(setq org-ellipsis "⤵")
(setq org-hide-leading-stars t)
;; Use syntax highlighting in source blocks while editing.
;; (setq org-src-fontify-natively t)
(font-lock-flush)
;; Make TAB act as if it were issued in a buffer of the language's major mode.
(setq org-src-tab-acts-natively t)
(setq org-support-shift-select t)
(setq org-todo-keyword-faces
'(("TODO" . (:foreground "yellow" :weight bold))
("DONE" . "green")
))
(global-set-key (kbd "C-c a") 'org-agenda)
(setq org-directory "~/Projects/Notes")
(setq org-agenda-files '("~/Projects/Notes/todo.org"))
)Use bullets instead of asterisks.
(use-package org-bullets
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode t))))flycheck
(use-package let-alist)
(use-package flycheck
:init (global-flycheck-mode)
:config
(setq-default flycheck-checker-error-threshold 500)
(setq-default flycheck-highlighting-mode 'lines)
(setq-default flycheck-idle-change-delay 3)
(setq-default flycheck-display-errors-delay 0))
dockerfile-mode
(use-package dockerfile-mode
:mode "Dockerfile$")Python
(add-hook 'python-mode-hook
(lambda ()
(setq indent-tabs-mode nil)
(setq tab-width 4)
(setq-default python-indent-guess-indent-offset nil)
(setq python-indent-offset 4)))(use-package pipenv
:hook (python-mode . pipenv-mode)
:init
(setq pipenv-projectile-after-switch-function #'pipenv-projectile-after-switch-extended))
;; python3
;; (setq-default python-shell-interpreter "~/.pyenv/versions/3.6.5/bin/python");; anaconda
(use-package anaconda-mode
:config
(add-hook 'python-mode-hook 'anaconda-mode)
(add-hook 'python-mode-hook 'anaconda-eldoc-mode)
)(use-package company-anaconda
:config
(add-to-list 'company-backends 'company-anaconda));; pip install isort
(use-package py-isort
:init
;;(add-hook 'before-save-hook 'py-isort-before-save)
);; TODO deprecate in favour of black
;; sudo -H pip install yapf
(use-package yapfify
:init
;;(add-hook 'python-mode-hook 'yapf-mode)
)(use-package python-pytest)Golang
(use-package go-mode)Markdown
(use-package markdown-mode)
(add-hook 'markdown-mode-hook
(lambda ()
(when buffer-file-name
(add-hook 'after-save-hook
'check-parens
nil t))))
(use-package flymd)
(defun my-flymd-browser-function (url)
(let ((browse-url-browser-function 'browse-url-firefox))
(browse-url url)))
(setq flymd-browser-open-function 'my-flymd-browser-function)R/ESS
;; (use-package ess
;; :commands R
;; :init (progn
;; ;; TODO: why doesn't use-package require it for us?
;; (require 'ess)
;; (setq ess-eval-visibly-p nil
;; ess-use-tracebug t
;; ;; ess-use-auto-complete t
;; ess-help-own-frame 'one
;; ess-ask-for-ess-directory nil)
;; (setq-default ess-dialect "R")
;; ))
;; ;; (ess-toggle-underscore t)))
;; (add-to-list 'company-backends 'company-ess)rainbow-mode
(use-package rainbow-mode
:init
(setq rainbow-html-colors-major-mode-list '(css-mode
html-mode
less-css-mode
nxml-mode
php-mode
sass-mode
scss-mode
web-mode
xml-mode))
(dolist (mode rainbow-html-colors-major-mode-list)
(add-hook (intern (format "%s-hook" mode)) 'rainbow-mode)))rainbow-delimiters
(use-package rainbow-delimiters
:config
(progn
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode)))HTML/Javascript
web-mode
(use-package web-mode
:mode (
("\\.css$" . web-mode)
("\\.html$" . web-mode)
("\\.js$" . web-mode)
("\\.json$" . web-mode)
("\\.jsx$" . web-mode)
("\\.vue$" . web-mode)
("\\.scss$" . web-mode)
("\\.less$" . web-mode))
:config
(setq-default indent-tabs-mode nil) ;; no TABS
(setq web-mode-code-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-enable-auto-closing t)
(setq web-mode-enable-auto-expanding t)
(setq web-mode-enable-auto-opening t)
(setq web-mode-enable-auto-pairing t)
(setq web-mode-enable-auto-pairing t)
(setq web-mode-enable-auto-quoting nil)
(setq web-mode-enable-css-colorization t)
(setq web-mode-enable-current-column-highlight t)
(setq web-mode-enable-current-element-highlight t)
(setq web-mode-js-indent-offset 2)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-content-types-alist
'(("jsx" . "\\.js[x]?\\'")))
;; Default comment to //
(setq-default web-mode-comment-formats (remove '("javascript" . "/*") web-mode-comment-formats))
(add-to-list 'web-mode-comment-formats '("javascript" . "//"))
)
(use-package company-web);Javascript
Prettier
(use-package prettier-js
:config
;;(add-hook 'web-mode-hook 'prettier-js-mode)
(add-hook 'web-mode-hook #'(lambda ()
(enable-minor-mode
'("\\.jsx?\\'" . prettier-js-mode))))
)
Emmet(Zencoding)
(use-package emmet-mode)YAML
(use-package yaml-mode
:mode (("\\.yaml$" . yaml-mode)))Snippets
(use-package yasnippet
:config
(yas-global-mode 1)
(add-hook 'term-mode-hook (lambda()
(setq yas-dont-activate-functions t))))
(use-package yasnippet-snippets)Notes
deft - Searching/Filtering notes
(use-package deft
:config
(setq deft-extensions '("txt" "org"))
(setq deft-directory "~/Projects/Notes/")
(setq deft-recursive t)
(global-set-key [f9] 'deft)
)Shortcuts/Registers
(set-register ?t (cons 'file "~/Projects/Notes/todo.org"))
(set-register ?j (cons 'file "~/Projects/Notes/journal.org"))
(set-register ?p (cons 'file "~/Projects/Notes/pw/permanent.org"))
(set-register ?i (cons 'file "~/.emacs.d/configuration.org"))Project Specific
(defun thrive-enable () (interactive)
(setq web-mode-code-indent-offset 4)
(setq web-mode-markup-indent-offset 4)
(setq web-mode-css-indent-offset 4)
(setq web-mode-js-indent-offset 4)
(setq-default flycheck-flake8-maximum-line-length 120)
(pipenv-activate)
;; (setq-default python-shell-interpreter "~/.local/share/virtualenvs/Rpm-ffkIv7wJ/bin/python")
;;(flycheck-select-checker `("python-flake8" "python-pylint"))
(add-hook 'before-save-hook 'py-isort-before-save)
;;(prettier-js-mode 1)
;;(setq prettier-args '())
(editorconfig-mode)
)
(defun thrive-disable () (interactive)
(setq web-mode-code-indent-offset 2)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-js-indent-offset 2)
(setq-default flycheck-flake8-maximum-line-length 80)
(pipenv-deactivate)
(remove-hook 'before-save-hook 'py-isort-before-save)
;;(setq-default python-shell-interpreter "~/.local/share/virtualenvs/Rpm-ffkIv7wJ/bin/python")
;;(flycheck-disable-checker python-syntax-checker)
;;(prettier-js-mode 0)
;;(setq prettier-args '())
(editorconfig-mode 0)
)
(defun hobbit-enable () (interactive)
(setq web-mode-code-indent-offset 4)
(setq web-mode-markup-indent-offset 4)
(setq web-mode-css-indent-offset 4)
(setq web-mode-js-indent-offset 4)
(setq-default flycheck-flake8-maximum-line-length 88)
(editorconfig-mode)
(pipenv-activate)
(add-hook 'before-save-hook 'py-isort-before-save)
(add-hook 'python-mode-hook 'blacken-mode)
)
(defun hobbit-disable () (interactive)
(setq web-mode-code-indent-offset 2)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-js-indent-offset 2)
(setq-default flycheck-flake8-maximum-line-length 80)
(editorconfig-mode 0)
(pipenv-deactivate)
(remove-hook 'before-save-hook 'py-isort-before-save)
(remove-hook 'python-mode-hook 'blacken-mode)
)
;; Forcing django mode on all html
;; TODO: Better way to do this?
(setq-default web-mode-engines-alist
'(("django" . "\\.html\\'")))