Add doom-emacs files, remove old Emacs files.

This commit is contained in:
Alexander Schmidt 2019-12-22 20:34:03 -05:00
parent 2c39a66ffe
commit eff6302746
Signed by: zyeri
GPG Key ID: E065C448BFD41005
5 changed files with 288 additions and 982 deletions

View File

@ -0,0 +1,13 @@
;;; ~/.doom.d/autoload/functions.el -*- lexical-binding: t; -*-
;;;###autoload
(defun find-in-dotfiles ()
"Open a file somewhere in ~/.dotfiles via a fuzzy filename search."
(interactive)
(doom-project-find-file (expand-file-name "~/projects/dotfiles")))
;;;###autoload
(defun browse-dotfiles ()
"Browse the files in ~/.dotfiles."
(interactive)
(doom-project-browse (expand-file-name "~/projects/dotfiles")))

110
.doom.d/config.el Normal file
View File

@ -0,0 +1,110 @@
;;; .doom.d/config.el -*- lexical-binding: t; -*-
(setq user-full-name "Alex Schmidt"
user-mail-address "zyeryi@gmail.com"
epa-file-encrypt-to user-mail-address)
;; disable automatic completion
(setq company-idle-delay nil)
;; disable lsp-ui-sideline stuff
(setq lsp-ui-sideline-enable nil
lsp-enable-indentation nil
lsp-enable-on-type-formatting nil
lsp-enable-symbol-highlighting nil
lsp-enable-file-watchers nil)
;; disable mouse-overs for mode-line segments
(setq mode-line-default-help-echo nil
show-help-function nil)
;; disable confirmation on quit
(setq confirm-kill-emacs nil)
;; tell projectile where projects are stored
(setq projectile-project-search-path '("~/projects" "~/src/repos"))
;; location where Emacs can find its own source code
(setq source-directory "~/src/repos/emacs/")
;; prevent message about iedit during startup (annoying)
(setq iedit-toggle-key-default nil)
;;
;;; UI
(setq doom-theme 'doom-one)
;; line numbers are distracting if we don't need them
(setq display-line-numbers-type nil)
;; don't yell at us if the fonts aren't installed yet
(ignore-errors
(setq doom-font (font-spec :family "Iosevka" :size 14)
doom-variable-pitch-font (font-spec :family "Noto Sans" :size 13)))
;;; Frames/Windows
(add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
;;
;;; Keybinds
(map! :leader
(:prefix "f"
"t" #'find-in-dotfiles
"T" #'browse-dotfiles)
;; my arrow keys aren't working, so set up some temporary bindings to move
;; lines around until I can get them fixed/replaced
"[ e" #'drag-stuff-up
"] e" #'drag-stuff-down
(:prefix "p"
"/" #'+ivy/project-search)
(:prefix "t"
"m" #'toggle-frame-maximized))
(map! :gnvime "M-K" #'drag-stuff-up
:gnvime "M-J" #'drag-stuff-down)
;;; :completion ivy
(setq +ivy-buffer-preview t)
;;; :editor evil
(setq evil-split-window-below t
evil-vsplit-window-right t)
;; o/O keys shouldn't continue commented lines
(setq +evil-want-o/O-to-continue-comments nil)
;;; :tools magit
(setq magit-repository-directories '(("~/projects" . 1))
magit-save-repository-buffers nil
magit-inhibit-save-previous-winconf t
transient-values '((magit-commit "--gpg-sign=0x1C534F4138D5CCE4")
(magit-rebase "--autosquash" "--gpg-sign=0x1C534F4138D5CCE4")
(magit-pull "--rebase" "--gpg-sign=0x1C534F4138D5CCE4")))
;;; :lang org
(setq org-directory "~/org/"
org-bullets-bullet-list '("*"))
(setq-default org-hide-leading-stars nil)
;; revert TAB behavior (cycle subtree visibility state recursively)
(after! evil-org
(remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h))
;;; :ui vc-gutter
(setq +vc-gutter-in-remote-files nil)
;;; :lang latex
(setq bibtex-completion-library-path (list "~/org/refs/pdfs"))
(setq +latex-bibtex-file "~/org/refs/references.bib"
+latex-enable-unicode-math t)
(after! bibtex
(setq bibtex-dialect 'biblatex))
(when IS-MAC
(setq +latex-viewers '(skim pdf-tools)))

163
.doom.d/init.el Normal file
View File

@ -0,0 +1,163 @@
;;; init.el -*- lexical-binding: t; -*-
;; Copy this file to ~/.doom.d/init.el or ~/.config/doom/init.el ('doom install'
;; will do this for you). The `doom!' block below controls what modules are
;; enabled and in what order they will be loaded. Remember to run 'doom refresh'
;; after modifying it.
;;
;; More information about these modules (and what flags they support) can be
;; found in modules/README.org.
(doom! :input
;;chinese
;;japanese
:completion
company ; the ultimate code completion backend
;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
(ivy +prescient) ; a search engine for love and life
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
;;fill-column ; a `fill-column' indicator
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
hydra
;;indent-guides ; highlighted indent columns
modeline ; snazzy, Atom-inspired modeline, plus API
nav-flash ; blink the current line after jumping
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +all +defaults)
;;pretty-code ; replace bits of code with pretty symbols
;;tabs ; an tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages
vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
:editor
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
;;(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;; lispy ; vim for lisp, for people who don't like vim
multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
;;word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
vc ; version-control and Emacs, sitting in a tree
:term
eshell ; a consistent, cross-platform shell (WIP)
;;shell ; a terminal REPL for Emacs
;;term ; terminals in Emacs
;;vterm ; another terminals in Emacs
:tools
;;ansible
;;debugger ; FIXME stepping through code, to help you add bugs
direnv
;;docker
editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
flycheck ; tasing you for every semicolon you forget
;;flyspell ; tasing you for misspelling mispelling
;;gist ; interacting with github gists
(lookup +docsets)
lsp
macos ; MacOS-specific commands
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
pass ; password manager for nerds
pdf ; pdf enhancements
;; prodigy ; FIXME managing external services & code builders
;;rgb ; creating color strings
;;terraform ; infrastructure as code
;; tmux ; an API for interacting with tmux
;; upload ; map local to remote projects via ssh/ftp
;;wakatime
:lang
;;agda ; types of types of types of types...
;;assembly ; assembly for fun or debugging
(cc +lsp) ; C/C++/Obj-C madness
;;clojure ; java with a lisp
common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
(csharp +omnisharp) ; unity, .NET, and mono shenanigans
data ; config/data formats
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;faust ; dsp, but you get to keep your soul
;;fsharp ; ML stands for Microsoft's Language
;;go ; the hipster dialect
(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ;
;;(java +meghanada) ; the poster child for carpal tunnel syndrome
(javascript +lsp) ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean
;;ledger ; an accounting system in Emacs
lua
; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +dragndrop +gnuplot +jupyter +pandoc +hugo +present)
;;perl ; write code no one else can comprehend
php ; perl's insecure younger brother
plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
(python +lsp) ; beautiful is better than ugly
qt ; the 'cutest' gui framework ever
racket ; a DSL for DSLs
rest ; Emacs as a REST client
rst ; ReST in peace
ruby ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
scheme ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
web ; the tubes
:email
;;mu4e
;;notmuch
;;(wanderlust +gmail)
:app
;; calendar
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
(write +langtool) ; emacs for writers (fiction, notes, papers, etc.)
:config
;;literate
(default +bindings +smartparens))

2
.doom.d/packages.el Normal file
View File

@ -0,0 +1,2 @@
;;; .doom.d/packages.el -*- no-byte-compile: t; -*-

View File

@ -1,982 +0,0 @@
;; -*- lexical-binding: t-*-
(require 'package)
(setq package-enable-at-startup nil)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile
(require 'use-package))
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file 'noerror)
;; (when (string-equal system-name "akemi")
;; (setq tls-checktrust t)
;; (setq gnutls-verify-error t))
(use-package diminish
:ensure t)
;; some useful utility libraries
(use-package dash
:ensure t)
(use-package dash-functional
:ensure t
:after dash)
(use-package s
:ensure t)
(use-package f
:ensure t)
;; startup profiling
(use-package esup
:ensure t)
;; enter pins in emacs
(use-package pinentry
:disabled t
:ensure t
:config
(pinentry-start))
;; personal info
(setq user-full-name "Alex Schmidt"
user-mail-address "zyeryi@gmail.com")
;; better window resizing
(setq frame-resize-pixelwise t)
;; font setup
(cond ((member "Iosevka" (font-family-list))
(set-frame-font "Iosevka-12")
(set-face-attribute 'default nil :font "Iosevka-12")))
;; shorter confirmation prompts
(defalias 'yes-or-no-p 'y-or-n-p)
;; always load latest elisp files
(setq load-prefer-newer t)
;; display bell visually
(setq visible-bell t)
;; follow symlinks in version control
(setq vc-follow-symlinks t)
;; better scrolling
(setq scroll-conservatively 1001
scroll-margin 0
scroll-preserve-screen-position t)
;; handle whitespace sanely
(setq indent-tabs-mode nil
require-file-newline t
tab-always-indent t
tab-width 4)
(setq echo-keystrokes 0.1)
;; delete moves to trash
(setq delete-by-moving-to-trash t)
;; weeks start on Monday
(setq calendar-week-start-day 1)
;; frame title
(setq frame-title-format '(buffer-file-name "%f" ("%b")))
;; don't prompt to load themes, just load them
(setq custom-safe-themes t)
;; line wrapping
(setq-default truncate-lines t
truncate-partial-width-windows 50)
(setq save-interprogram-paste-before-kill t
sentence-end-double-space nil
compilation-scroll-output t)
;; configure relative line numbers on supported Emacs versions
(unless (version< emacs-version "26.1")
(setq display-line-numbers-type 'relative))
;; compressed file support
(auto-compression-mode t)
;; seed the PRNG
(random t)
;; hide some startup stuff
(setq inhibit-startup-message t
inhibit-startup-echo-area-message user-login-name
inhibit-default-init t
initial-major-mode 'fundamental-mode
initial-scratch-message nil)
;; useful constants
(defconst dotemacs/user-home-directory
(f-expand (getenv "HOME"))
"Home directory for the current user.")
(defconst dotemacs/user-emacs-directory
(f-join dotemacs/user-home-directory ".emacs.d")
"Emacs directory for the current user.")
(defconst dotemacs/user-dropbox-directory
(f-join dotemacs/user-home-directory "Dropbox")
"Dropbox directory for the current user.")
(defconst dotemacs/user-org-directory
(f-join dotemacs/user-dropbox-directory "org")
"Directory to look for Org files.")
(defconst dotemacs/user-cache-directory
(f-join dotemacs/user-emacs-directory "cache")
"Directory for cache files.")
(setq abbrev-file-name
(f-join dotemacs/user-cache-directory "abbrev.el"))
(setq auto-save-list-file-name
`((".*" . ,(f-join dotemacs/user-cache-directory "autosave"))))
(setq pcache-directory
(f-join dotemacs/user-cache-directory "pcache"))
(setq server-auth-dir
(f-join dotemacs/user-cache-directory "server"))
(setq url-cache-directory
(f-join dotemacs/user-cache-directory "url-cache"))
(setq url-configuration-directory
(f-join dotemacs/user-cache-directory "url-config"))
(setq backup-directory-alist
`((".*" . ,(f-join dotemacs/user-cache-directory "backups"))))
;; always use unicode
(when (fboundp 'set-charset-priority)
(set-charset-priority 'unicode))
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
;; configure clipboard
(cond ((string-equal system-type "gnu/linux")
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)
select-enable-clipboard t
select-enable-primary t)))
(use-package autorevert
:hook (after-init . global-auto-revert-mode)
:init
(setq auto-revert-verbose nil))
(use-package paren
:hook (after-init . show-paren-mode)
:init
(setq show-paren-delay 0.1
show-paren-highlight-openparen t
show-paren-when-point-inside-paren t))
(use-package smart-mode-line
:ensure t
:init
(setq-default sml/theme 'dark
sml/vc-mode-show-backend t)
:config
;; display line and column numbers in the mode line
(line-number-mode)
(column-number-mode)
;; display battery in the mode line too
(display-battery-mode)
;; activate smart-mode-line
(sml/setup))
;; prevent the scratch buffer from being killed
(use-package unkillable-scratch
:ensure t
:hook (after-init . unkillable-scratch)
:init
(setq unkillable-scratch-behavior 'bury))
(use-package uniquify
:init
(setq uniquify-buffer-name-style 'post-forward-angle-brackets
uniquify-separator "/"
uniquify-ignore-buffers-re "^\\*"))
(use-package recentf
:ensure t
:hook (after-init . recentf-mode)
:init
(setq recentf-save-file (f-join dotemacs/user-cache-directory "recentf")
recentf-max-saved-items 300
recentf-max-menu-items 0
recentf-filename-handlers '(abbreviate-file-name)
recentf-exclude
(list "^/tmp/" "^/ssh:" "\\.?ido\\.last$" "\\.revive$" "/TAGS$"
"^/var/folders/.+$")))
(use-package savehist
:ensure t
:config
(setq savehist-file (f-join dotemacs/user-cache-directory "savehist")
savehist-save-minibuffer-history t
savehist-autosave-interval nil
savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
(savehist-mode +1))
(use-package saveplace
:ensure t
:hook (after-init . save-place-mode)
:init
(setq save-place-file (f-join dotemacs/user-cache-directory "saveplace")
save-place-forget-unreadable-files t))
(use-package bookmark
:init
(setq bookmark-default-file (f-join dotemacs/user-cache-directory "bookmarks")
bookmark-save-flag t))
(use-package editorconfig
:ensure t
:hook (after-init . editorconfig-mode)
:diminish)
(use-package anzu
:ensure t
:diminish
:config
(setq anzu-cons-mode-line-p nil)
(global-anzu-mode +1)
:bind (("M-%" . anzu-query-replace)
("C-M-%" . anzu-query-replace-regexp)))
(use-package server
:config
(unless (server-running-p)
(server-start)))
(use-package doom-themes
:ensure t
:config
(load-theme 'doom-tomorrow-night t)
(doom-themes-neotree-config)
(setq doom-neotree-enable-variable-pitch t
doom-neotree-file-icons 'simple
doom-neotree-line-spacing 2)
(doom-themes-org-config))
(use-package all-the-icons
:ensure t)
(use-package all-the-icons-dired
:ensure t
:after (:all all-the-icons)
:hook (dired-mode . all-the-icons-dired-mode))
(use-package neotree
:ensure t
:after (:all all-the-icons projectile)
:init
(setq neo-create-file-auto-open t
neo-banner-message nil
neo-smart-open nil
neo-show-updir-line nil
neo-mode-line-type 'neotree
neo-dont-be-alone t
neo-window-width 32
neo-show-hidden-files t
neo-auto-indent-point t
neo-modern-sidebar t
neo-theme (if window-system 'icons 'arrow))
:bind (([f2] . neotree-toggle)))
(use-package ag
:ensure t
:init
(setq ag-highlight-search t
ag-reuse-window t
ag-reuse-buffers t))
(use-package hydra
:ensure t
:load-path "site-lisp/hydra")
(use-package ivy
:ensure t
:diminish ivy-mode
:load-path "site-lisp/swiper"
:hook ((after-init . ivy-mode))
:init
(setq projectile-completion-system 'ivy
magit-completing-read-function 'ivy-completing-read
ivy-count-format "(%d/%d) "
ivy-use-virtual-buffers t
ivy-height 10
enable-recursive-minibuffers t)
:bind (("C-c C-r" . ivy-resume)))
(use-package counsel
:ensure t
:bind (("C-x C-f" . counsel-find-file)
("C-c C-s" . counsel-ag)
("C-c k" . counsel-ag)
("M-x" . counsel-M-x)
("C-c j" . counsel-git-grep)
("C-x l" . counsel-locate)))
(use-package counsel-projectile
:ensure t
:hook ((after-init . counsel-projectile-mode)))
(use-package swiper
:ensure t
:after ivy
:bind (("C-s" . swiper)))
(use-package exec-path-from-shell
:ensure t
:if (memq window-system '(mac ns x))
:init
(setq exec-path-from-shell-check-startup-files nil)
:config
(exec-path-from-shell-copy-envs '("WORKON_HOME" "PROJECT_HOME"))
(exec-path-from-shell-initialize))
(use-package python-mode
:ensure t
:mode ("\\.py\\'" . python-mode)
:init
(setq python-shell-completion-native-enable nil
python-shell-interpreter "python"))
(use-package elpy
:ensure t
:init
(setq-default elpy-rpc-python-command "python3")
:config
(elpy-enable))
(use-package dired
:init
(put 'dired-find-alternative-file 'disabled nil)
(setq dired-recursive-deletes 'always
dired-recursive-copies 'always
dired-dwim-target t
dired-listing-switches "-laGh1v --group-directories-first"))
(use-package dired-x
:after dired)
(use-package dired-narrow
:after (:all dired dired-x)
:ensure t
:bind (:map dired-mode-map
("/" . dired-narrow)))
(use-package peep-dired
:after (:all dired dired-x)
:ensure t
:defer t
:init
(setq peep-dired-cleanup-on-disable t)
:bind (:map dired-mode-map
("P" . peep-dired)))
(use-package shackle
:ensure t
:hook (after-init . shackle-mode)
:init
(setq shackle-default-alignment 'below
shackle-rules
'(("*eshell*" :select t :other t)
("*Help*" :select t :inhibit-window-quit t :other t)
("*Messages*" :select nil :inhibit-window-quit t)
("*magit-dispatch-popup*" :select t :align t)
(" *NeoTree*" :select t :align left :static t)
("*compilation*" :size 0.25 :noselect t :autokill t :autoclose t)
("*ert*" :same t :modeline t)
("*info*" :size 0.5 :select t :autokill t)
("*Backtrace*" :size 20 :noselect t)
("*Warnings*" :size 12 :noselect t :autofit t)
("*Messages*" :size 12 :noselect t)
("*Help*" :size 0.3)
("^\\*.*Shell Command.*\\*$" :regexp t :size 20 :noselect t :autokill t)
(apropos-mode :size 0.3 :autokill t :autoclose t)
(Buffer-menu-mode :size 20 :autokill t)
(comint-mode :noesc t)
(grep-mode :size 25 :noselect t :autokill t)
(profiler-report-mode :size 0.3 :regexp t :autokill t :modeline minimal)
(tabulated-list-mode :noesc t)
("^ ?\\*" :regexp t :size 15 :noselect t :autokill t :autoclose t)
("^\\*magit" :regexp t :size 0.5 :noesc t :autokill t))))
(use-package evil
:ensure t
:init
(setq evil-want-fine-undo 'fine
evil-default-cursor 'box
evil-move-beyond-eol t
evil-esc-delay 0
evil-ex-substitute-global t
evil-ex-visual-char-range t
evil-symbol-word-search t
evil-want-C-u-scroll t
evil-want-Y-yank-to-eol t
evil-magic t
evil-echo-state t)
:config
;; set initial state for specific modes
(cl-loop for (mode . state)
in '((help-mode . emacs)
(debugger-mode . emacs)
(dired-mode . emacs)
(tabulated-list-mode . emacs)
(view-mode . emacs)
(comint-mode . emacs)
(term-mode . emacs)
(calendar-mode . emacs)
(Man-mode . emacs)
(grep-mode . emacs)
(image-mode . emacs)
(paradox-menu-mode . emacs)
(epa-key-list-mode . emacs)
(dashboard-mode . emacs)
(neotree-mode . emacs)
(prodigy-mode . emacs)
(special-mode . emacs)
(messages-buffer-mode . emacs)
(flymake-diagnostics-buffer-mode . emacs)
(TeX-output-mode . emacs)
(esup-mode . emacs))
do (evil-set-initial-state mode state))
(evil-select-search-module 'evil-search-module 'evil-search))
(use-package evil-commentary
:ensure t
:diminish
:after evil
:config
(evil-commentary-mode +1))
(use-package evil-visualstar
:ensure t
:after evil
:config
(global-evil-visualstar-mode))
(use-package evil-anzu
:ensure t
:after evil)
(use-package evil-matchit
:ensure t
:after evil
:config
(global-evil-matchit-mode))
(use-package evil-surround
:ensure t
:after evil
:config
(global-evil-surround-mode))
(use-package evil-search-highlight-persist
:ensure t
:after evil
:config
(global-evil-search-highlight-persist t))
(use-package undo-tree
:ensure t
:diminish
:init
(setq undo-tree-history-directory-alist `((".*" . ,(f-join dotemacs/user-cache-directory "undo-tree-history")))
undo-tree-auto-save-history t))
(use-package general
:ensure t
:init
(setq general-default-keymaps 'evil-normal-state-map)
:config
(general-define-key "[ SPC" 'insert-newline-above
"] SPC" 'insert-newline-below))
(use-package move-text
:ensure t
:after general
:config
(general-define-key "[ e" 'move-text-up
"] e" 'move-text-down))
(use-package magit
:ensure t
:init
(setq magit-section-show-children-count t
magit-diff-arguments '("--histogram")
magit-ediff-dwim-show-on-hunks t
magit-repository-directories `(( ,(f-join (getenv "HOME") "src" "projects"))
( ,(f-join (getenv "HOME") "src" "repos"))))
:bind (("C-c g" . magit-status)))
(use-package with-editor
:ensure t
:after magit
:hook ((shell-mode . with-editor-export-editor)
(term-exec . with-editor-export-editor)
(eshell-mode . with-editor-export-editor)))
(use-package which-key
:ensure t
:hook (after-init . which-key-mode)
:diminish
:init
(setq which-key-popup-type 'minibuffer
which-key-add-column-padding 1
which-key-max-display-columns nil
which-key-min-display-lines 5
which-key-sort-uppercase-first nil
which-key-sort-order #'which-key-prefix-then-key-order)
:config
(set-face-attribute 'which-key-local-map-description-face nil :weight 'bold)
(which-key-setup-side-window-bottom))
(use-package expand-region
:ensure t
:bind (("C-c C-+" . er/expand-region)
("C-c C--" . er/contract-region)))
(use-package projectile
:ensure t
:diminish
:init
(setq projectile-enable-caching t
projectile-cache-file (f-join dotemacs/user-cache-directory "projectile-cache.el")
projectile-known-projects-file (f-join dotemacs/user-cache-directory "projectile-projects.el"))
:config
(projectile-mode))
(use-package company
:ensure t
:diminish
:init
(setq company-dabbrev-downcase nil
company-dabbrev-ignore-case t
company-dabbrev-code-ignore-case t
company-dabbrev-code-everywhere t
company-idle-delay 1
company-show-numbers t
company-minimum-prefix-length 2
company-selection-wrap-around t
company-tooltip-limit 10
company-begin-commands '(self-insert-command)
company-backends '((company-files
company-keywords
company-capf
company-yasnippet)
(company-abbrev))
company-disabled-backends '(dabbrev)
company-transformers '(company-sort-by-occurrence
company-sort-by-backend-importance))
:config
(global-company-mode)
:bind (("C-." . company-files)
("M-<tab>" . company-complete)
("C-c C-y" . company-yasnippet)))
(use-package company-statistics
:ensure t
:after company
:config
(setq company-statistics-file (f-join dotemacs/user-cache-directory "company-statistics-cache.el"))
(add-hook 'after-init-hook #'company-statistics-mode))
(use-package org
:ensure t
:diminish org-indent-mode
:config
(setq org-directory (f-expand "~/Dropbox/org")
org-default-notes-file "~/Dropbox/org/notes.org")
(setq org-agenda-files
'("~/Dropbox/org/agenda.org"
"~/Dropbox/org/archive.org"
"~/Dropbox/org/contacts.org"
"~/Dropbox/org/misc.org"
"~/Dropbox/org/notes.org"
"~/Dropbox/org/refile.org"))
(setq org-refile-targets
'((org-agenda-files . (:maxlevel . 1))))
(setq org-src-fontify-natively t
org-src-preserve-indentation t
org-src-window-setup 'current-window
org-src-strip-leading-and-trailing-blank-lines t)
(setq org-todo-keywords
'((sequence "TODO(t)" "WAITING(w)" "SCHEDULED(s)" "ACTIVE(a)" "|" "DONE(d)" "CANCELED(c)")))
;; capture templates
(setq org-capture-templates
'(("t" "Todo" entry (file+headline "~/Dropbox/org/agenda.org" "Tasks")
"* TODO %?\nAdded: %U\n" :prepend t :kill-buffer t)))
(setq org-latex-listings 'minted
org-latex-packages-alist
'(("" "minted" t)
("" "tikz" t)))
(setq org-latex-pdf-process
'("lualatex -shell-escape -interaction nonstopmode -output-directory %o %f"
"lualatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
(setq org-preview-latex-default-process 'imagemagick
org-confirm-babel-evaluate nil)
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(haskell . t)
(python . t)
(sql . t)
(sqlite . t)
(ditaa . t)
(dot . t)
(gnuplot . t)
(latex . t)
(plantuml . t)))
:bind (("C-c c" . org-capture)
("C-c a" . org-agenda)
("C-c l" . org-store-link)))
(use-package org-projectile
:ensure t
:disabled
:init
(setq org-projectile-projects-file
(f-join dotemacs/user-dropbox-directory "org" "projects.org"))
(push (org-projectile-project-todo-entry) org-capture-templates)
(setq org-agenda-files
(append org-agenda-files (org-projectile-todo-files)))
:bind (("C-c n p" . org-projectile-project-todo-completing-read)))
(use-package org-super-agenda
:ensure t
:disabled
:after org-mode
:config
(org-super-agenda-mode +1)
(setq org-super-agenda-groups
'((:order-multi (1 (:name "High priority"
:priority> "C")))
(:order-multi (1 (:name "Done today"
:and (:regexp "State \"DONE\""
:log t)))))))
(use-package elfeed
:ensure t
:commands elfeed
:bind ("C-x w" . elfeed))
(use-package elfeed-org
:ensure t
:after elfeed
:init
(setq rmh-elfeed-org-files (list (f-expand "~/Dropbox/org/elfeed.org")))
:config
(elfeed-org))
(use-package tramp
:ensure t
:init
(setq-default tramp-auto-save-directory (f-join dotemacs/user-cache-directory "tramp-auto-save/")
tramp-backup-directory-alist backup-directory-alist
tramp-persistency-file-name (f-join dotemacs/user-cache-directory "tramp-persistency.el"))
(setq tramp-default-method "ssh"
tramp-use-ssh-controlmaster-options ""))
(use-package json-mode
:ensure t
:mode ("\\.json\\'" . json-mode))
(use-package plantuml-mode
:ensure t
:mode (("\\.plantuml\\'" . plantuml-mode)
("\\.puml\\'" . plantuml-mode))
:init
(setq plantuml-jar-path "~/bin/plantuml.jar"))
(use-package prodigy
:ensure t
:defer t
:bind (([f12] . prodigy)))
(use-package yasnippet
:ensure t
:diminish yas-minor-mode
:init
(setq yas-snippet-dirs '("~/.emacs.d/snippets/private")
yas-indent-line nil)
:config
(yas-reload-all)
(yas-global-mode 1)
(unbind-key "TAB" yas-minor-mode-map)
(unbind-key "<tab>" yas-minor-mode-map))
;; (use-package yasnippet-snippets
;; :ensure t
;; :after yasnippet)
(use-package tex
:mode (("\\.tex\\'" . latex-mode))
:ensure auctex
:config
;; Update PDF buffers after successful LaTeX runs
(add-hook 'TeX-after-TeX-LaTeX-command-finished-hook #'TeX-revert-document-buffer)
(setq TeX-save-query nil
TeX-auto-save t
TeX-parse-self t
TeX-PDF-mode t
TeX-source-correlate-mode t
TeX-source-correlate-start-server t
TeX-source-correlate-method 'synctex
LaTeX-fill-break-at-separators nil)
(add-to-list 'TeX-view-program-selection
'(output-pdf "Zathura"))
(setq-default TeX-master nil
TeX-engine 'luatex)
;; enable reftex integration
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(add-hook 'LaTeX-mode-hook 'flyspell-mode)
(add-hook 'LaTeX-mode-hook 'flyspell-buffer)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode))
(use-package auctex-latexmk
:ensure t
:init
(setq auctex-latexmk-inherit-TeX-PDF-mode t)
:config
(auctex-latexmk-setup))
(use-package company-auctex
:ensure t
:mode (("\\.tex\\'" . latex-mode))
:after (:all company auctex)
:hook ((LaTeX-mode . company-auctex-init)
(TeX-mode . company-auctex-init)))
(use-package markdown-mode
:ensure t
:mode (("README\\.md\\'" . gfm-mode)
("\\.md\\'" . markdown-mode)
("\\.markdown\\'" . markdown-mode)))
(use-package haskell-mode
:ensure t
:hook ((haskell-mode . haskell-indentation-mode)
(haskell-mode . interactive-haskell-mode))
:mode (("\\.hs\"" . haskell-mode))
:commands haskell-mode
:init
(setq haskell-interactive-popup-errors nil
haskell-ask-also-kill-buffers nil
haskell-process-type 'auto))
(use-package hindent
:ensure t
:diminish hindent-mode
:after haskell-mode
:hook ((haskell-mode . hindent-mode)))
(use-package yaml-mode
:ensure t
:mode ("\\.yml\\'" . yaml-mode))
(use-package ini-mode
:ensure t
:mode ("\\.ini\\'" . ini-mode))
(use-package toml-mode
:ensure t
:mode (("\\.toml\\'" . toml-mode)
("Pipfile" . toml-mode)))
(use-package js2-mode
:ensure t
:mode ("\\.js\\'" . js2-mode)
:interpreter ("node" . js2-mode))
(use-package tern
:ensure t
:after js2-mode)
(use-package company-tern
:ensure t
:after (:all company tern)
:hook (js2-mode . tern-mode)
:config
(add-to-list 'company-backends 'company-tern))
(use-package web-mode
:ensure t
:hook (web-mode . emmet-mode)
:mode (("\\.html\\'" . web-mode))
:init
(setq web-mode-style-padding 4
web-mode-script-padding 4
web-mode-css-indent-offset 4
web-mode-code-indent-offset 4
web-mode-markup-indent-offset 2
web-mode-enable-auto-quoting nil
web-mode-comment-keywords t
web-mode-enable-css-colorization t
web-mode-enable-current-element-highlight t
web-mode-enable-heredoc-fontification t
web-mode-enable-comment-keywords t
web-mode-enable-current-element-highlight t
web-mode-enable-current-column-highlight t
web-mode-enable-column-highlight t
web-mode-engines-alist
'(("jinja" . "\\.html\\'"))))
(use-package company-web
:ensure t
:after (:all company web-mode)
:config
(require 'company-web-html))
(use-package css-mode
:ensure t
:after web-mode
:mode ("\\.css$" . css-mode)
:config
(setq css-indent-offset 4))
(use-package sass-mode
:ensure t
:after web-mode
:mode ("\\.sass\\'" . sass-mode))
(use-package scss-mode
:ensure t
:after web-mode
:mode ("\\.scss\\'" . scss-mode))
(use-package emmet-mode
:ensure t
:hook ((sgml-mode . emmet-mode)
(css-mode . emmet-mode))
:after web-mode
:init
(setq-default emmet-move-cursor-between-quotes t)
:config
(unbind-key "<C-return>" emmet-mode-keymap)
(unbind-key "C-M-<left>" emmet-mode-keymap)
(unbind-key "C-M-<right>" emmet-mode-keymap))
(use-package vue-mode
:ensure t)
(use-package rust-mode
:ensure t
:mode ("\\.rs\\'" . rust-mode)
:init
(setq rust-format-on-save t))
(use-package macrostep
:ensure t
:defer t
:bind (:map emacs-lisp-mode-map
("C-c e" . macrostep-expand)))
(use-package systemd
:ensure t)
(use-package nginx-mode
:ensure t)
(defun insert-newline-above (count)
"Insert one or several lines above the current point's line without changing
the current state and point position."
(interactive "p")
(dotimes (_ count) (save-excursion (evil-insert-newline-above))))
(defun insert-newline-below (count)
"Insert one or several lines below the current point's line without changing
the current state and point position."
(interactive "p")
(dotimes (_ count) (save-excursion (evil-insert-newline-below))))
(defun dotemacs/scale-font-size (direction)
"Scale the font. When DIRECTION is positive or zero, the font is scaled up,
otherwise it is scaled down."
(interactive)
(let ((scale 0.5))
(if (eq direction 0)
(text-scale-set 0)
(if (< direction 0)
(text-scale-decrease scale)
(text-scale-increase scale)))))
(defun dotemacs/increase-font-size ()
"Increase font size."
(interactive)
(dotemacs/scale-font-size 1))
(defun dotemacs/decrease-font-size ()
"Decrease font size."
(interactive)
(dotemacs/scale-font-size -1))
(defun dotemacs/reset-font-size ()
"Reset font size."
(interactive)
(dotemacs/scale-font-size 0))
(defun dotemacs/rename-file-and-buffer (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive "sNew name: ")
(let ((name (buffer-name))
(filename (buffer-file-name)))
(if (not filename)
(message "Buffer '%s' is not visiting a file!" name)
(if (get-buffer new-name)
(message "A buffer named '%s' already exists!" new-name)
(progn
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil))))))