Skip to content

Instantly share code, notes, and snippets.

@sprusr
Last active May 11, 2020 08:04
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 sprusr/f37ade924855475f050ae38bbfae860b to your computer and use it in GitHub Desktop.
Save sprusr/f37ade924855475f050ae38bbfae860b to your computer and use it in GitHub Desktop.
init.el
auto-save-list
custom.el
elpa
eshell
projectile-bookmarks.eld
quelpa
transient
url
;;; init.el --- config of sprusr
;;; Commentary:
;; This config is written to be as close to vanilla Emacs as possible
;; while having modern editor features that I can't live without.
;;; Code:
(eval-when-compile
;; Init package manager
(package-initialize)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
;; Don't update quelpa melpa on init
(defvar quelpa-update-melpa-p nil)
;; Install quelpa
(unless (package-installed-p 'quelpa)
(with-temp-buffer
(url-insert-file-contents
"https://github.com/quelpa/quelpa/raw/master/quelpa.el")
(eval-buffer)
(quelpa-self-upgrade)))
;; Install use-package dependencies
(quelpa
'(quelpa-use-package
:fetcher github
:repo "quelpa/quelpa-use-package"))
(quelpa 'diminish)
(quelpa 'exec-path-from-shell)
;; Require use-package dependencies
(require 'quelpa-use-package)
(require 'diminish))
;; Get correct PATH for macOS GUI Emacs
(when (string-equal system-type "darwin")
(exec-path-from-shell-initialize))
;; Icons for neotreec
(use-package all-the-icons
:ensure t)
;; Python highlighting
(use-package anaconda-mode
:diminish
:ensure t
:hook (python-mode))
;; Completion framework
(use-package company
:diminish company-mode
:config
(global-company-mode 1)
:ensure t)
;; Golang completion
(use-package company-go
:ensure t
:hook (go-mode)
:config
(add-to-list 'company-backends 'company-go))
;; Python completion
(use-package company-anaconda
:ensure t
:config
(add-to-list 'company-backends 'company-anaconda))
;; Use ivy completion for everything
(use-package counsel
:diminish counsel-mode
:config (counsel-mode 1)
:ensure t)
;; Emacs built-in GUI config
(use-package custom
:custom
(custom-file (expand-file-name "custom.el" user-emacs-directory)
"Make custom add stuff to its own file.")
:config
(load custom-file 'noerror))
(use-package elfeed
:ensure t
:custom
(elfeed-feeds '() "Feeds to be used with elfeed.")
(shr-inhibit-images t "Disable images in elfeed."))
;; General Emacs config
(use-package emacs
:custom
(package-enable-at-startup nil)
(mac-option-key-is-meta nil)
(mac-command-key-is-meta t)
(mac-command-modifier 'meta)
(mac-option-modifier 'none)
(ring-bell-function 'ignore)
(backup-directory-alist `(("." . "~/.saves")))
(indent-tabs-mode nil "Don't convert spaces to tabs at tab-width")
:config
;; default frame
(add-to-list 'default-frame-alist '(width . 200))
(add-to-list 'default-frame-alist '(height . 100))
(add-to-list 'default-frame-alist '(font . "Monospace-14"))
;; hide the GUI toolbar
(tool-bar-mode 0)
(toggle-scroll-bar 0)
;; undo window layout changes
(when (fboundp 'winner-mode)
(winner-mode 1)))
;; Error checking on-the-fly
(use-package flycheck
:ensure t
:diminish
:init (global-flycheck-mode))
;; Diffs in gutter
(use-package git-gutter
:ensure t)
;; Point gnutls to trustfile
(use-package gnutls
:config
(add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem"))
;; Golang highlighting
(use-package go-mode
:ensure t
:mode "\\.go\\'")
;; Completion UI
(use-package ivy
:diminish ivy-mode
:config (ivy-mode 1)
:ensure t)
;; JavaScript highlighting
(use-package js2-mode
:ensure t
:mode ("\\.m?jsx?\\'" . js2-jsx-mode)
:interpreter ("node" . js2-jsx-mode)
:custom
(js2-mode-show-strict-warnings nil "Disable strict JS warnings.")
(js2-basic-offset 2))
;; Git magic
(use-package magit
:commands (magit)
:ensure t)
;; Code minimap
(use-package minimap
:demand
:diminish minimap-mode
:bind ("C-c n" . minimap-mode)
:custom
(minimap-window-location 'right)
:ensure t)
;; File tree
(use-package neotree
:ensure t
:after (all-the-icons)
:bind (("C-c t" . neotree-toggle))
:custom
(neo-theme
(if (display-graphic-p) 'icons 'arrow)
"Use icons and arrows for neotree.")
(neo-window-fixed-size nil "Allow neotree resize"))
;; Dark theme
(use-package night-owl-theme
:ensure t)
;; Jira in org-mode
(use-package org-jira
:ensure t)
;; Use macOS clipboard
(use-package pbcopy
:ensure t
:hook (dashboard-mode . (turn-on-pbcopy))
:if (eq system-type 'darwin))
;; Prettier for JS
(use-package prettier-js
:ensure t)
;; Introduce concept of projects
(use-package projectile
:after (ivy)
:ensure t
:config
(define-key projectile-mode-map (kbd "s-p") 'projectile-command-map)
(define-key projectile-mode-map (kbd "C-c p")
'projectile-command-map)
(projectile-mode +1)
:custom
(projectile-project-search-path '("~/code")
"Projectile project directories")
(projectile-completion-system 'ivy "Projectile completion system")
:diminish)
;; Reveal in finder for current buffer
(use-package reveal-in-osx-finder
:bind ("C-c z" . reveal-in-osx-finder)
:ensure t
:if (eq system-type 'darwin))
;; Does what it says
(use-package scss-mode
:ensure t
:mode ("\\.scssm?\\'" . scss-mode)
:custom
(css-indent-offset 2 "CSS indent size"))
;; Spotify client
(use-package spotify
:quelpa (spotify
:fetcher github
:repo "jkdufair/spotify.el"
:branch "feature/melpa")
:bind-keymap ("C-c ." . spotify-command-map))
;; Telegram client
(use-package telega
:commands (telega)
:defer t
:ensure t)
;; TypeScript completion
(use-package tide
:demand t
:ensure t
:after (typescript-mode web-mode company flycheck)
:hook ((typescript-mode . tide-setup)
(typescript-mode . tide-hl-identifier-mode)
(web-mode . (lambda ()
(when (string-equal "tsx" (file-name-extension
buffer-file-name))
(tide-setup))))
(web-mode . (lambda ()
(when (string-equal "tsx" (file-name-extension
buffer-file-name))
(tide-hl-identifier-mode)))))
:config (flycheck-add-mode 'typescript-tslint 'web-mode))
;; TypeScript highlighting
(use-package typescript-mode
:demand t
:ensure t
:mode (("\\.ts\\'" . typescript-mode))
:custom
(typescript-indent-level 2 "TypeScript indent size"))
;; J/TSX highlighting
(use-package web-mode
:demand t
:ensure t
:mode (("\\.tsx\\'" . web-mode)
("\\.jsx\\'" . web-mode))
:custom
(web-mode-markup-indent-offset 2 "Web mode indent size"))
;; Shows keyboard shortcut suggestions
(use-package which-key
:config (which-key-mode 1)
:diminish which-key-mode
:ensure t)
(provide 'init)
;;; init.el ends here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment