Skip to content

Instantly share code, notes, and snippets.

@arthurmco
Last active November 17, 2021 16:24
Show Gist options
  • Save arthurmco/817048b46e1f3e9f88baee635878afa6 to your computer and use it in GitHub Desktop.
Save arthurmco/817048b46e1f3e9f88baee635878afa6 to your computer and use it in GitHub Desktop.
my emacs config file

my emacs config file

Compatible with emacs 27.x, very probably compatible with 26.x. I use 27.x more frequently

It may have some design issues, because I am learning how to best configure this editor. Feel free to comment if you have any.

It will not be a repo, because I do not feel like it is needed. It is just one file...

(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.
'(TeX-engine 'xetex)
'(ansi-color-faces-vector
[default bold shadow italic underline bold bold-italic bold])
'(ansi-color-names-vector
["#ebdbb2" "#cc241d" "#98971a" "#d79921" "#458588" "#b16286" "#689d6a" "#3c3836"])
'(c-basic-offset 4)
'(c-default-style "linux")
'(c-set-offset 'arglist-cont-nonempty t)
'(cider-auto-select-test-report-buffer t)
'(cider-test-show-report-on-success t)
'(column-number-mode t)
'(compilation-message-face 'default)
'(cua-global-mark-cursor-color "#689d6a")
'(cua-normal-cursor-color "#a89984")
'(cua-overwrite-cursor-color "#d79921")
'(cua-read-only-cursor-color "#98971a")
'(custom-enabled-themes '(solarized-selenized-dark))
'(custom-safe-themes
'("833ddce3314a4e28411edf3c6efde468f6f2616fc31e17a62587d6a9255f4633" "fee7287586b17efbfda432f05539b58e86e059e78006ce9237b8732fde991b4c" "00445e6f15d31e9afaa23ed0d765850e9cd5e929be5e8e63b114a3346236c44c" "7f1d414afda803f3244c6fb4c2c64bea44dac040ed3731ec9d75275b9e831fe5" "2809bcb77ad21312897b541134981282dc455ccd7c14d74cc333b6e549b824f3" "c433c87bd4b64b8ba9890e8ed64597ea0f8eb0396f4c9a9e01bd20a04d15d358" "6bdcff29f32f85a2d99f48377d6bfa362768e86189656f63adbf715ac5c1340b" "5e3fc08bcadce4c6785fc49be686a4a82a356db569f55d411258984e952f194a" "4eb6fa2ee436e943b168a0cd8eab11afc0752aebb5d974bba2b2ddc8910fca8f" "6b5c518d1c250a8ce17463b7e435e9e20faa84f3f7defba8b579d4f5925f60c1" "78c4238956c3000f977300c8a079a3a8a8d4d9fee2e68bad91123b58a4aa8588" "83e0376b5df8d6a3fbdfffb9fb0e8cf41a11799d9471293a810deb7586c131e6" "285d1bf306091644fb49993341e0ad8bafe57130d9981b680c1dbd974475c5c7" "830877f4aab227556548dc0a28bf395d0abe0e3a0ab95455731c9ea5ab5fe4e1" "7153b82e50b6f7452b4519097f880d968a6eaf6f6ef38cc45a144958e553fbc6" "7356632cebc6a11a87bc5fcffaa49bae528026a78637acd03cae57c091afd9b9" "04dd0236a367865e591927a3810f178e8d33c372ad5bfef48b5ce90d4b476481" "ab04c00a7e48ad784b52f34aa6bfa1e80d0c3fcacc50e1189af3651013eb0d58" "a0feb1322de9e26a4d209d1cfa236deaf64662bb604fa513cca6a057ddf0ef64" "4cf9ed30ea575fb0ca3cff6ef34b1b87192965245776afa9e9e20c17d115f3fb" "aded61687237d1dff6325edb492bde536f40b048eab7246c61d5c6643c696b7f" "939ea070fb0141cd035608b2baabc4bd50d8ecc86af8528df9d41f4d83664c6a" "5dbdb4a71a0e834318ae868143bb4329be492dd04bdf8b398fb103ba1b8c681a" "0598c6a29e13e7112cfbc2f523e31927ab7dce56ebb2016b567e1eff6dc1fd4f" "2b9dc43b786e36f68a9fd4b36dd050509a0e32fe3b0a803310661edb7402b8b6" "3c83b3676d796422704082049fc38b6966bcad960f896669dfc21a7a37a748fa" "a27c00821ccfd5a78b01e4f35dc056706dd9ede09a8b90c6955ae6a390eb1c1e" "a22f40b63f9bc0a69ebc8ba4fbc6b452a4e3f84b80590ba0a92b4ff599e53ad0" "8f97d5ec8a774485296e366fdde6ff5589cf9e319a584b845b6f7fa788c9fa9a" "c74e83f8aa4c78a121b52146eadb792c9facc5b1f02c917e3dbb454fca931223" "8e797edd9fa9afec181efbfeeebf96aeafbd11b69c4c85fa229bb5b9f7f7e66c" "b583823b9ee1573074e7cbfd63623fe844030d911e9279a7c8a5d16de7df0ed0" "585942bb24cab2d4b2f74977ac3ba6ddbd888e3776b9d2f993c5704aa8bb4739" "2a9039b093df61e4517302f40ebaf2d3e95215cb2f9684c8c1a446659ee226b9" "fd3c7bd752f48dcb7efa5f852ef858c425b1c397b73851ff8816c0580eab92f1" "fa2b58bb98b62c3b8cf3b6f02f058ef7827a8e497125de0254f56e373abee088" "595617a3c537447aa7e76ce05c8d43146a995296ea083211225e7efc069c598f" "3da031b25828b115c6b50bb92a117f5c0bbd3d9d0e9ba5af3cd2cb9db80db1c2" "e2fd81495089dc09d14a88f29dfdff7645f213e2c03650ac2dd275de52a513de" "a622aaf6377fe1cd14e4298497b7b2cae2efc9e0ce362dade3a58c16c89e089c" "62c81ae32320ceff5228edceeaa6895c029cc8f43c8c98a023f91b5b339d633f" "bffa9739ce0752a37d9b1eee78fc00ba159748f50dc328af4be661484848e476" "732b807b0543855541743429c9979ebfb363e27ec91e82f463c91e68c772f6e3" "a8245b7cc985a0610d71f9852e9f2767ad1b852c2bdea6f4aadc12cce9c4d6d0" "d677ef584c6dfc0697901a44b885cc18e206f05114c8a3b7fde674fce6180879" "a24c5b3c12d147da6cef80938dca1223b7c7f70f2f382b26308eba014dc4833a" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))
'(diary-entry-marker 'font-lock-variable-name-face)
'(emms-mode-line-icon-color "#358d8d")
'(emms-mode-line-icon-image-cache
'(image :type xpm :ascent center :data "/* XPM */
static char *note[] = {
/* width height num_colors chars_per_pixel */
\" 10 11 2 1\",
/* colors */
\". c #1fb3b3\",
\"# c None s None\",
/* pixels */
\"###...####\",
\"###.#...##\",
\"###.###...\",
\"###.#####.\",
\"###.#####.\",
\"#...#####.\",
\"....#####.\",
\"#..######.\",
\"#######...\",
\"######....\",
\"#######..#\" };"))
'(fci-rule-color "#32302f")
'(gnus-logo-colors '("#528d8d" "#c0c0c0"))
'(gnus-mode-line-image-cache
'(image :type xpm :ascent center :data "/* XPM */
static char *gnus-pointer[] = {
/* width height num_colors chars_per_pixel */
\" 18 13 2 1\",
/* colors */
\". c #1fb3b3\",
\"# c None s None\",
/* pixels */
\"##################\",
\"######..##..######\",
\"#####........#####\",
\"#.##.##..##...####\",
\"#...####.###...##.\",
\"#..###.######.....\",
\"#####.########...#\",
\"###########.######\",
\"####.###.#..######\",
\"######..###.######\",
\"###....####.######\",
\"###..######.######\",
\"###########.######\" };"))
'(go-command "go")
'(highlight-changes-colors '("#d3869b" "#b16286"))
'(highlight-symbol-colors
'("#522b41fa2b3b" "#3822432737ec" "#5bbf348b2bf5" "#483e36c83def" "#43c0418329b9" "#538f3624267a" "#317a3ddc3e5e"))
'(highlight-symbol-foreground-color "#bdae93")
'(highlight-tail-colors
'(("#32302f" . 0)
("#747400" . 20)
("#2e7d33" . 30)
("#14676b" . 50)
("#a76e00" . 60)
("#a53600" . 70)
("#9f4d64" . 85)
("#32302f" . 100)))
'(hl-bg-colors
'("#a76e00" "#a53600" "#b21b0a" "#9f4d64" "#8b2a58" "#14676b" "#2e7d33" "#747400"))
'(hl-fg-colors
'("#282828" "#282828" "#282828" "#282828" "#282828" "#282828" "#282828" "#282828"))
'(hl-paren-colors '("#689d6a" "#d79921" "#458588" "#b16286" "#98971a"))
'(hl-sexp-background-color "#1c1f26")
'(hl-todo-keyword-faces
'(("TODO" . "#dc752f")
("NEXT" . "#dc752f")
("THEM" . "#2d9574")
("PROG" . "#4f97d7")
("OKAY" . "#4f97d7")
("DONT" . "#f2241f")
("FAIL" . "#f2241f")
("DONE" . "#86dc2f")
("NOTE" . "#b1951d")
("KLUDGE" . "#b1951d")
("HACK" . "#b1951d")
("TEMP" . "#b1951d")
("FIXME" . "#dc752f")
("XXX" . "#dc752f")
("XXXX" . "#dc752f")
("???" . "#dc752f")))
'(irony-cdb-compilation-databases
'(irony-cdb-json irony-cdb-libclang irony-cdb-clang-complete))
'(latex-preview-pane-multifile-mode 'off)
'(linum-format " %7i ")
'(lsp-ui-doc-border "#bdae93")
'(magit-diff-use-overlays nil)
'(nrepl-message-colors
'("#fb4933" "#d65d0e" "#d79921" "#747400" "#b9b340" "#14676b" "#689d6a" "#d3869b" "#b16286"))
'(org-agenda-files '("~/projects/plan-familyline.org"))
'(package-selected-packages
'(lsp-jedi elpy yasnippet-classic-snippets yasnippet-snippets geiser geiser-guile which-key ido-grid-mode ido-completing-read+ csharp-mode hl-todo eldoc eldoc-cmake yasnippet web-mode use-package lsp-mode flatbuffers-mode lsp-ui alect-themes rainbow-delimiters forge magit-lfs xah-lookup cider clojure-mode rjsx-mode smart-mode-line lsp-clangd company-lsp smart-tabs-mode gruvbox-theme spacemacs-theme smartparens sr-speedbar undo-tree solarized-theme tide jsx-mode tss rainbow-mode json-mode ag dumb-jump irony-eldoc typescript-mode company-irony restclient flycheck-clang-analyzer flycheck-yamllint company-auctex company-go paredit ac-php ac-php-core php+-mode auctex projectile projectile-variable material-theme ac-js2 js2-refactor js2-mode ac-cider expand-region multiple-cursors telephone-line yaml-mode sublime-themes cmake-mode company-racer go-mode flycheck-rust rust-mode idomenu imenu-list latex-preview-pane 2048-game virtualenv neotree move-text molokai-theme markdown-mode magit glsl-mode gitlab evil emmet-mode dracula-theme diredful d-mode company-irony-c-headers))
'(pdf-latex-command "xelatex")
'(pdf-view-midnight-colors '("#fdf4c1" . "#32302f"))
'(pos-tip-background-color "#32302f")
'(pos-tip-foreground-color "#bdae93")
'(projectile-keymap-prefix "C-c p")
'(projectile-mode t nil (projectile))
'(scroll-bar-mode nil)
'(set-specifier vertical-scrollbar-visible-p)
'(show-paren-mode t)
'(smartrep-mode-line-active-bg (solarized-color-blend "#98971a" "#32302f" 0.2))
'(spacemacs-theme-comment-italic t)
'(spacemacs-theme-keyword-italic t)
'(term-default-bg-color "#282828")
'(term-default-fg-color "#a89984")
'(tool-bar-mode nil)
'(vc-annotate-background nil)
'(vc-annotate-background-mode nil)
'(vc-annotate-color-map
'((20 . "#fb4933")
(40 . "#eb7b77d92bd4")
(60 . "#e21f8997270c")
(80 . "#d79921")
(100 . "#c322997b1eac")
(120 . "#b8ad99351d7c")
(140 . "#ae1f98cc1c53")
(160 . "#a37098421b33")
(180 . "#98971a")
(200 . "#8bd799a13aed")
(220 . "#84859aa247c0")
(240 . "#7c5c9ba253bb")
(260 . "#731d9ca05f39")
(280 . "#689d6a")
(300 . "#5cb893d076ee")
(320 . "#55e98efd7ced")
(340 . "#4e358a3982c9")
(360 . "#458588")))
'(vc-annotate-very-old-color nil)
'(weechat-color-list
'(unspecified "#282828" "#32302f" "#b21b0a" "#fb4933" "#747400" "#98971a" "#a76e00" "#d79921" "#14676b" "#458588" "#9f4d64" "#d3869b" "#2e7d33" "#689d6a" "#a89984" "#282828"))
'(xterm-color-names
["#32302f" "#fb4933" "#98971a" "#d79921" "#458588" "#d3869b" "#689d6a" "#a89984"])
'(xterm-color-names-bright
["#282828" "#d65d0e" "#7c6f64" "#282828" "#a89984" "#b16286" "#bdae93" "#fbf1c7"]))
(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.
'(default ((t (:family "Iosevka" :foundry "CYEL" :slant normal :weight normal :height 120 :width normal))))
'(bold ((t (:weight semi-bold))))
'(bold-italic ((t (:slant italic :weight semi-bold)))))
;; Config file
;; Setup MELPA
(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."))
;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
(add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t)
;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives (cons "gnu" (concat proto "://elpa.gnu.org/packages/")))))
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file)
;; Added by Package.el. This must come before configurations of
;; installed packages. Don't delete this line. If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)
(toggle-frame-maximized)
(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))
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
)
(electric-pair-mode t)
(use-package projectile
:ensure t
:init
(require 'projectile)
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
(projectile-global-mode)
(setq projectile-enable-caching t))
(defun setup-c-indentation ()
"Configure indentation right on C modes"
(setq-default c-basic-offset 4
tab-width 4
indent-tabs-mode nil)
(c-set-offset 'arglist-intro '+))
(defun setup-windmove ()
(global-set-key [M-left] 'windmove-left) ; move to left window
(global-set-key [M-right] 'windmove-right) ; move to right window
(global-set-key [M-up] 'windmove-up) ; move to upper window
(global-set-key [M-down] 'windmove-down) ; move to lower window
)
(defun setup-custom-keys ()
(global-set-key (kbd "M-s") 'replace-string)
(global-set-key (kbd "C-c r") 'revert-buffer)
;; delete non needed whitespace
;; this might be in a before-save-hook, but I want to do only when I want
;; and markdown uses trailing whitespaces for non-new-paragraph-newline
(global-set-key (kbd "C-c w") 'delete-trailing-whitespace)
(global-set-key (kbd "C-c ! l") 'flymake-show-diagnostics-buffer))
(defun setup-highlight ()
(global-hl-line-mode)
(set-face-attribute hl-line-face nil :underline nil))
(defun setup-mode-hooks ()
;; (add-hook 'c-mode-hook #'lsp)
;; (add-hook 'php-mode-hook #'lsp)
(add-hook 'markdown-mode-hook 'auto-fill-mode)
(add-hook 'latex-mode-hook 'auto-fill-mode)
(add-hook 'css-mode-hook 'rainbow-mode)
(add-hook 'html-mode-hook 'emmet-mode)
(setq lsp-clients-clangd-executable "/usr/lib/llvm-10/bin/clangd")) ; 100mb
(setup-c-indentation)
(setup-highlight)
(show-paren-mode 1)
; Set node correctly so that emacs will find the typescript language server
(setq exec-path (append exec-path '("~/.nvm/versions/node/v12.18.4/bin")))
(setenv "PATH" (concat (getenv "PATH") ":~/.nvm/versions/node/v12.18.4/bin"))
(require 'use-package)
(use-package windmove
:ensure t
:config (setup-windmove))
(use-package move-text
:ensure t
:bind (("M-S-<up>" . move-text-up)
("M-S-<down>" . move-text-down)))
(use-package idomenu
:ensure t
:init (ido-grid-mode 1)
:config (ido-mode t))
(use-package expand-region
:ensure t
:bind ("C-=" . er/expand-region))
(use-package multiple-cursors
:ensure t
:bind (("M-s-<down>" . mc/mark-next-like-this)
("M-s-<up>" . mc/mark-previous-like-this)
("C-c C-<" . mc/mark-all-like-this)
("M-s-c M-s-c" . mc/edit-lines)))
(use-package web-mode
:mode ("\\.html\\'"
"\\.phtml\\'"
"\\.tpl\\'"
"\\.[agj]sp\\'"
"\\.as[cp]x\\'"
"\\.erb\\'"
"\\.mustache\\'"
"\\.djhtml\\'"))
(use-package rjsx-mode
:mode ("\\.jsx\\'"))
(use-package js2-mode
:mode ("\\.js\\'"))
(use-package magit
:ensure t
:bind (("C-c g" . magit-status)))
(use-package forge
:after magit)
(use-package geiser
:ensure t)
(use-package geiser-guile
:ensure t
:after geiser)
(use-package yasnippet ; Snippets
:ensure t
:config
(setq
yas-verbosity 1 ; No need to be so verbose
yas-wrap-around-region t)
(with-eval-after-load 'yasnippet
(setq yas-snippet-dirs '(yasnippet-snippets-dir)))
(yas-reload-all)
(yas-global-mode))
(use-package yasnippet-snippets ; Collection of snippets
:ensure t)
(use-package recentf
:ensure t
:init
(recentf-mode 1)
(setq recentf-max-menu-items 25)
(setq recentf-max-saved-items 25)
:bind (("\C-c C-r" . recentf-open-files)))
(use-package org
:ensure t
:bind (("\C-c l" . org-store-link)
("\C-c a" . org-agenda))
:config
(setq org-log-done t))
(use-package hl-todo
:ensure t
:bind (("\C-c h p" . hl-todo-previous)
("\C-c h n" . hl-todo-next)
("\C-c h o" . hl-todo-occur)
("\C-c h i" . hl-todo-insert)))
(use-package smart-mode-line
:config (sml/setup))
(use-package rainbow-delimiters
:hook ((c++-mode . rainbow-delimiters-mode)
(js2-mode . rainbow-delimiters-mode)))
(setq lsp-keymap-prefix "C-c s")
(use-package which-key
:ensure t)
(use-package lsp-mode
:ensure t
:init
(require 'lsp-ido)
;; required by lsp-mode to work nicely
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq gc-cons-threshold 100000000) ; 100mb
(which-key-mode)
:hook ((c++-mode . lsp)
(js2-mode . lsp)
(python-mode . lsp)
(lsp . #'lsp-enable-which-key-integration)
; (rust-mode . lsp)
(typescript-mode . lsp))
:config
(setq lsp-clients-clangd-args '("-j=8" "-background-index" "-log=error"))
:bind (("\C-c s" . lsp-command-map)
("\C-c f" . lsp-format-buffer))
:commands lsp)
(use-package elpy
:ensure t
:config
(setq elpy-rpc-python-command "~/anaconda3/bin/python3"))
(use-package lsp-jedi
:ensure t
:init
(setq lsp-jedi-executable-command "~/anaconda3/bin/jedi-language-server")
:config
(with-eval-after-load "lsp-mode"
(add-to-list 'lsp-disabled-clients 'pyls)))
(setup-mode-hooks)
(setup-custom-keys)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment