(defconst as/emacs-directory (concat (getenv "HOME") "/.emacs.d/"))
(defconst as/config (concat (getenv "HOME") "/projects/emacs-config/"))
(defconst as/elisp (concat (getenv "HOME") "/projects/emacs-config/elisp/"))
(setq as/org (concat (getenv "HOME") "/org/")
as/agenda (concat as/org "agenda/")
as/views (concat (getenv "HOME") "/org/views/")
as/gtd (concat as/org "gtd.org"))
(add-to-list 'load-path as/elisp)
(add-to-list 'load-path as/config)
(let ((default-directory as/elisp))
(normal-top-level-add-subdirs-to-load-path))
(setq user-full-name "Andrew Sanchez"
user-mail-address "[email protected]")
(require 'package)
(add-to-list 'load-path "packages")
(setq package-archives
'(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")
("melpa-stable" . "http://stable.melpa.org/packages/")
("elpy" . "https://jorgenschaefer.github.io/packages/")
("org" . "http://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 use-package-always-ensure t)
(setq use-package-verbose t)
(use-package diminish
:config
(diminish 'undo-tree-mode))
(setq server-socket-dir (expand-file-name "server" user-emacs-directory))
(server-start)
Automatically tangle this file on save.
(defun as/tangle-dotfiles ()
"If the current file is in 'as/config, tangle blocks"
(when (equal (file-name-directory (directory-file-name buffer-file-name))
as/config)
(org-babel-tangle)
(message "%s tangled" buffer-file-name)))
(add-hook 'after-save-hook #'as/tangle-dotfiles)
(use-package helpful
:commands
(helpful-callable
helpful-function
helpful-macro
helpful-command
helpful-key
helpful-variable
helpful-at-point)
:init
(global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-h k") #'helpful-key)
(global-set-key (kbd "C-h o") #'helpful-at-point))
(setq custom-file (expand-file-name "custom.el" as/elisp))
(when (file-exists-p custom-file)
(load custom-file))
Also check out smex
(global-set-key (kbd "C-6") 'evil-switch-to-windows-last-buffer)
(global-set-key (kbd "C-w") 'evil-window-next)
(global-set-key (kbd "C-x f") 'helm-find-files)
(use-package which-key
:defer 10
:config
(which-key-mode))
(evil-leader/set-key "ts" 'flyspell-mode)
(use-package evil-leader
:config
(global-evil-leader-mode)
(setq evil-leader/in-all-states t)
(setq evil-leader/non-normal-prefix "C-")
(evil-leader/set-leader "<SPC>"))
(use-package evil
:config
(evil-mode 1))
(use-package evil-nerd-commenter
:config
(evil-leader/set-key
"ci" 'evilnc-comment-or-uncomment-lines
"cl" 'evilnc-quick-comment-or-uncomment-to-the-line
"ll" 'evilnc-quick-comment-or-uncomment-to-the-line
"cc" 'evilnc-copy-and-comment-lines
"cp" 'evilnc-comment-or-uncomment-paragraphs
"cr" 'comment-or-uncomment-region
"cv" 'evilnc-toggle-invert-comment-line-by-line
"." 'evilnc-copy-and-comment-operator
"\\" 'evilnc-comment-operator))
(use-package evil-surround
:config
(global-evil-surround-mode 1))
(use-package evil-lisp-state
:init (setq evil-lisp-state-global t)
:config (evil-lisp-state-leader "<SPC> k"))
;; (use-package bind-map)
(use-package evil-matchit
:config
(require 'evil-matchit)
(global-evil-matchit-mode 1))
(add-to-list 'evil-emacs-state-modes 'dired-mode)
(add-to-list 'evil-emacs-state-modes 'flycheck-error-list-mode)
(evil-set-initial-state 'Info-mode 'emacs)
(evil-set-initial-state 'realgud-short-key-mode 'emacs)
(evil-set-initial-state 'realgud-track-mode 'emacs)
(evil-set-initial-state 'pdb-track-mode 'emacs)
(add-to-list 'evil-emacs-state-modes 'realgud-short-key-mode)
(add-to-list 'evil-emacs-state-modes 'realgud-track-mode)
(add-to-list 'evil-emacs-state-modes 'pdb-track-mode)
(use-package avy
:init
(defhydra hydra-avy (:color blue)
"avy-goto"
("c" avy-goto-char "char")
("C" avy-goto-char-2 "char-2")
("w" avy-goto-word-1 "word")
("s" avy-goto-subword-1 "subword")
("l" avy-goto-line "line")
("u" link-hint-open-link "open-URI")
("U" link-hint-copy-link "copy-URI"))
(evil-leader/set-key "j" 'hydra-avy/body)
:commands hydra-avy/body
:config
(use-package link-hint))
(use-package expand-region
:commands (er/expand-region)
:config
(global-set-key (kbd "C-=") 'er/expand-region))
(evil-leader/set-key
"!" 'shell-command)
Display a more compact mode line
(use-package smart-mode-line
:init
(setq sml/no-confirm-load-theme t)
(sml/setup))
(display-time-mode 1)
Also check out ivy and swiper and helm-swiper.
(use-package helm
:init
(evil-leader/set-key
"sg" 'helm-google-suggest
"<SPC>" 'helm-M-x
"sj" 'helm-semantic-or-imenu
"ha" 'helm-apropos
"ho" 'helm-info-org
"hi" 'helm-info
"ss" 'helm-occur)
:commands
(helm-google-suggest helm-M-x helm-semantic-or-imenu helm-apropos helm-occur helm-info-org)
:bind (("M-y" . helm-show-kill-ring)
("C-h a" . helm-apropos)
("M-x" . helm-M-x)
("C-x b" . helm-buffers-list))
:config
(require 'helm-config))
(use-package helm-descbinds
:bind (("C-h b" . helm-descbinds)))
(use-package hydra)
(defhydra hydra-buffers (:color blue)
"Buffers"
("d" kill-this-buffer "kill buffer")
("s" (lambda () (interactive) (pop-to-buffer "*scratch*")) "*scratch*")
("i" (lambda () (interactive) (pop-to-buffer "*info*")) "*info*")
("h" (lambda () (interactive) (pop-to-buffer "*Help*")) "*Help*")
("e" (lambda () (interactive) (pop-to-buffer "*eshell*")) "*eshell*")
("m" (lambda () (interactive) (pop-to-buffer "*Messages*")) "*Messages*")
("b" helm-buffers-list "helm buffers list"))
(evil-leader/set-key "b" 'hydra-buffers/body)
(evil-leader/set-key "f" 'hydra-files/body)
(defhydra hydra-files (:color blue)
"Files"
("d" (lambda () (interactive)
(find-file "~/projects/emacs-config/init.org"))
"dot-file")
("g" (lambda () (interactive)
(find-file "~/org/gtd.org"))
"gtd")
("f" helm-find-files "helm-find-files")
("m" helm-multi-files "helm-multi-files")
("b" helm-filtered-bookmarks "helm-filtered-bookmarks")
("t" neotree-toggle "neotree-toggle")
("F" helm-tramp "helm-tramp")
("r" helm-recentf "recentf-open-files"))
;; (defhydra hydra-applications ()
;; "Applications"
;; ("d" deft "deft find file"))
(evil-leader/set-key "ad" 'deft)
(evil-leader/set-key "am" 'mu4e)
(use-package yasnippet
:diminish yas-minor-mode
:init
(defhydra hydra-yasnippet (:color blue :hint nil)
"
^YASnippets^
--------------------------------------------
Modes: Load/Visit: Actions:
_g_lobal _d_irectory _i_nsert
_m_inor _f_ile _t_ryout
_e_xtra _l_ist _n_ew
_a_ll
"
("d" yas-load-directory)
("e" yas-activate-extra-mode)
("i" yas-insert-snippet)
("f" yas-visit-snippet-file :color blue)
("n" yas-new-snippet)
("t" yas-tryout-snippet)
("l" yas-describe-tables)
("g" yas/global-mode)
("m" yas/minor-mode)
("a" yas-reload-all))
(evil-leader/set-key "y" 'hydra-yasnippet/body)
:defer 15
; not sure why this doesn't work
; :commands hydra-yasnippet/body
:config
(require 'yasnippet)
(yas-global-mode 1))
(use-package yasnippet-snippets)
(use-package org
:mode (("\\.org$" . org-mode))
:commands (org-agenda org-capture helm-info-org)
:load-path "~/.emacs.d/packages/org-mode/lisp"
:diminish org-mode
:init
;; (add-to-list 'org-modules 'org-protcol)
;; (load-library "org-protocol")
(require 'org-protocol)
(evil-leader/set-key
"oa" 'org-agenda
"oc" 'org-capture
"ot" 'hydra-org-clock/body)
:config
(load "org-config"))
Save space by not showing the toolbar
(tool-bar-mode -1)
(use-package golden-ratio
:commands
(evil-window-next
evil-window-right
evil-window-left
evil-window-down
evil-window-up)
:config
(golden-ratio-mode 1)
(add-to-list 'golden-ratio-extra-commands 'evil-window-next)
(add-to-list 'golden-ratio-extra-commands 'evil-window-right)
(add-to-list 'golden-ratio-extra-commands 'evil-window-left)
(add-to-list 'golden-ratio-extra-commands 'evil-window-down)
(add-to-list 'golden-ratio-extra-commands 'evil-window-up))
Undo and redo window configuration
(use-package winner
:init
(evil-leader/set-key
"wu" 'winner-undo
"wr" 'winner-redo)
:commands
(winner-undo winner-redo)
:config
(winner-mode))
(use-package zoom-frm
:commands hydra-zoom)
(defhydra hydra-zoom (global-map "M-=")
"zoom"
("g" text-scale-increase)
("l" text-scale-decrease)
("i" zoom-in)
("o" zoom-out))
;; Special dir for backups
(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))
(setq create-lockfiles nil)
(use-package magit
:init (evil-leader/set-key "gs" 'magit-status)
:commands magit-status
:config
(setq magit-git-executable "~/usr/bin/git")
(add-hook 'git-commit-mode-hook 'git-commit-turn-on-flyspell)
(evil-set-initial-state 'git-commit-mode 'normal))
Also look at sensible-defaults
(show-paren-mode 1)
(menu-bar-mode -1)
(when (fboundp 'tool-bar-mode)
(tool-bar-mode -1))
(when (fboundp 'scroll-bar-mode)
(scroll-bar-mode -1))
(when (fboundp 'horizontal-scroll-bar-mode)
(horizontal-scroll-bar-mode -1))
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
(require 'saveplace)
(setq-default save-place t)
(fset 'yes-or-no-p 'y-or-n-p)
(setq initial-scratch-message "") ;; Uh, I know what Scratch is for
(use-package visual-fill-column
:init
(global-visual-fill-column-mode)
(evil-leader/set-key "tl" 'visual-fill-column-mode)
:config
(add-hook 'rst-mode-hook 'visual-line-mode))
(setq tramp-default-method "ssh"
tramp-inline-compress-start-size 1000000
tramp-verbose 1
remote-file-name-inhibit-cache nil
tramp-completion-reread-directory-timeout nil
projectile-mode-line "Projectile")
(setq vc-ignore-dir-regexp
(format "\\(%s\\)\\|\\(%s\\)"
vc-ignore-dir-regexp
tramp-file-name-regexp))
(use-package helm-tramp
:commands helm-tramp
:config
(setq create-lockfiles nil)
(add-hook 'helm-tramp-pre-command-hook '
(lambda ()
(projectile-mode 0)))
(add-hook 'helm-tramp-quit-hook
'(lambda ()
(projectile-mode 1))))
(use-package python
:mode ("\\.py\\'" . python-mode)
:interpreter ("python" . python-mode)
:config
(load "realgud")
(flycheck-mode)
(use-package anaconda-mode
:config (anaconda-eldoc-mode) (anaconda-mode)
;; (add-to-list 'company-backends 'company-anaconda)
)
;; (use-package ob-ipython
;; :config (require 'ob-ipython))
;; (org-babel-do-load-languages
;; 'org-babel-load-languages
;; (append org-babel-load-languages
;; '((ipython . t)
;; (python . t))))
(add-hook 'before-save-hook 'py-isort-before-save)
(add-hook 'python-mode-hook 'smartparens-mode)
(add-hook 'inferior-python-mode-hook 'smartparens-mode)
(add-hook 'rst-mode-hook 'turn-on-flyspell)
(setq python-shell-exec-path '("~/miniconda3/bin/python"))
(defhydra hydra-python (:color blue :hint nil)
"
^Navigation^ ^Elpy^ ^Formatting^
-------------------------------------------------------------------------
_d_: find definitions _t_: elpy-test _y_: yapfify-buffer
_a_: find assignments _z_: switch to shell _i_: py-isort-buffer
_r_: find references _c_: send region/buffer _f_: flycheck
_s_: show doc _C_: send statement _x_: sphinx-doc
_v_: pyvenv-activate
_V_: pyvenv-deactivate
_w_: venv-workon
_W_: venv-deactivate
_p_: pdb
"
("d" elpy-goto-definition)
("a" anaconda-mode-find-assignments)
("r" anaconda-mode-find-references)
("s" elpy-doc)
("S" helm-pydoc)
("y" yapfify-buffer)
("v" pyvenv-activate)
("V" pyvenv-deactivate)
("w" venv-workon)
("W" venv-deactivate)
("i" py-isort-buffer)
("f" hydra-flycheck/body)
("x" sphinx-doc)
("p" realgud:pdb)
("t" elpy-hydra/body)
("z" elpy-shell-switch-to-shell)
("c" elpy-shell-send-region-or-buffer)
("C" elpy-shell-send-current-statement))
(evil-leader/set-key-for-mode 'python-mode "m" 'hydra-python/body)
(evil-leader/set-key-for-mode 'rst-mode "m" 'hydra-python/body)
(use-package sphinx-doc
:commands (sphinx-doc)
:config (sphinx-doc-mode))
(use-package helm-pydoc :commands helm-pydoc)
(use-package py-isort :commands py-isort-buffer
:config (require 'py-isort))
(use-package virtualenvwrapper :commands (venv-workon)
:config
(venv-initialize-interactive-shells)
(venv-initialize-eshell)
(setq venv-location "/Users/andrew/miniconda3/envs"))
(use-package elpy
:init (with-eval-after-load 'python (elpy-enable))
:config
(setq python-shell-interpreter "ipython"
python-shell-interpreter-args "-i --simple-prompt")
(pyvenv-mode)
(defun projectile-pyenv-mode-set ()
"Set pyenv version matching project name."
(let ((project (projectile-project-name)))
(if (member project (pyenv-mode-versions))
(pyenv-mode-set project)
(pyenv-mode-unset))))
(add-hook 'projectile-after-switch-project-hook 'projectile-pyenv-mode-set)
(defhydra elpy-hydra (:color red)
"
Elpy in venv: %`pyvenv-virtual-env-name
"
("t" (progn (call-interactively 'elpy-test-pytest-runner) (elpy-nav-errors/body)) "pytest" :color blue)
("w" (venv-workon) "workon venv…")
("q" nil "quit")
("Q" (kill-buffer "*compilation*") "quit and kill compilation buffer" :color blue))
(defhydra elpy-nav-errors (:color red)
" Navigate errors "
("n" next-error "next error")
("p" previous-error "previous error")
("s" (progn
(switch-to-buffer-other-window "*compilation*")
(goto-char (point-max))) "switch to compilation buffer" :color blue)
("q" nil "quit")
("Q" (kill-buffer "*compilation*") "quit and kill compilation buffer" :color blue))))
Source: jorgenschaefer/elpy#887 Fixes this error message: Warning (python): Your ‘python-shell-interpreter’ doesn’t seem to support readline, yet ‘python-shell-completion-native’ was t and “ipython3” is not part of the ‘python-shell-completion-native-disabled-interpreters’ list. Native completions have been disabled locally.
(with-eval-after-load 'python
(defun python-shell-completion-native-try ()
"Return non-nil if can trigger native completion."
(let ((python-shell-completion-native-enable t)
(python-shell-completion-native-output-timeout
python-shell-completion-native-try-output-timeout))
(python-shell-completion-native-get-completions
(get-buffer-process (current-buffer))
nil "_"))))
(add-to-list 'load-path (concat as/elisp "slurm"))
(require 'slurm-mode)
(require 'slurm-script-mode)
(use-package yapfify :commands yapfify-buffer)
(use-package exec-path-from-shell)
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize))
(use-package smartparens
:defer 5
:config
(require 'smartparens-config)
(smartparens-global-mode)
(autoload 'smartparens-mode "paredit" "Turn on pseudo-structural editing of Lisp code." t)
(add-hook 'eval-expression-minibuffer-setup-hook #'smartparens-mode)
(defhydra hydra-smartparens (:hint nil)
"
Sexps (quit with _q_)
^Nav^ ^Barf/Slurp^ ^Depth^
^---^------------^----------^-----------------^-----^-----------------
_f_: forward _<left>_: slurp forward _R_: splice
_b_: backward _<right>_: barf forward _r_: raise
_u_: backward ↑ _C-<left>_: slurp backward _<up>_: raise backward
_d_: forward ↓ _C-<right>_: barf backward _<down>_: raise forward
_p_: backward ↓
_n_: forward ↑
^Kill^ ^Misc^ ^Wrap^
^----^-----------^----^-----------------------^----^------------------
_w_: copy _j_: join _(_: wrap with ( )
_k_: kill _s_: split _{_: wrap with { }
^^ _t_: transpose _'_: wrap with ' '
^^ _c_: convolute _\"_: wrap with \" \"
^^ _i_: indent defun"
("q" nil)
;; Wrapping
("(" (lambda (a) (interactive "P") (sp-wrap-with-pair "(")))
("{" (lambda (a) (interactive "P") (sp-wrap-with-pair "{")))
("'" (lambda (a) (interactive "P") (sp-wrap-with-pair "'")))
("\"" (lambda (a) (interactive "P") (sp-wrap-with-pair "\"")))
;; Navigation
("f" sp-forward-sexp )
("b" sp-backward-sexp)
("u" sp-backward-up-sexp)
("d" sp-down-sexp)
("p" sp-backward-down-sexp)
("n" sp-up-sexp)
;; Kill/copy
("w" sp-copy-sexp)
("k" sp-kill-sexp)
;; Misc
("t" sp-transpose-sexp)
("j" sp-join-sexp)
("s" sp-split-sexp)
("c" sp-convolute-sexp)
("i" sp-indent-defun)
;; Depth changing
("R" sp-splice-sexp)
("r" sp-splice-sexp-killing-around)
("<up>" sp-splice-sexp-killing-backward)
("<down>" sp-splice-sexp-killing-forward)
;; Barfing/slurping
("<right>" sp-forward-slurp-sexp)
("<left>" sp-forward-barf-sexp)
("C-<left>" sp-backward-barf-sexp)
("C-<right>" sp-backward-slurp-sexp)))
(use-package projectile
:init
(evil-leader/set-key "p" 'helm-projectile)
:commands (helm-projectile-switch-project helm-projectile)
:config
(evil-leader/set-key "p" 'projectile-command-map)
(projectile-mode)
(setq projectile-enable-caching t)
(use-package helm-projectile
:config
(require 'helm-projectile)
(helm-projectile-on))
(defun projectile-test-suffix (project-type)
"Find default test files suffix based on PROJECT-TYPE."
(cond
((member project-type '(python-tox)) "_test"))))
(use-package solarized-theme
:config
(evil-leader/set-key "tt" 'toggle-theme))
(load-theme 'solarized-dark t)
(setq active-theme 'solarized-dark)
(defun toggle-theme ()
(interactive)
(if (eq active-theme 'solarized-light)
(setq active-theme 'solarized-dark)
(setq active-theme 'solarized-light))
(load-theme active-theme))
(set-face-attribute 'default t :font
"-*-Source Code Pro-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1")
(set-face-attribute 'default nil :height 140)
(use-package company
:diminish company-mode
:config
(global-company-mode))
(use-package wordnut
:commands (wordnut-search wordnut-lookup-current-word)
:load-path "packages/wordnut"
:config
(require 'wordnut)
(setq wordnut-cmd "/usr/local/bin/wn"))
(use-package helm-wordnet
:commands helm-wordnet
:load-path "packages/helm-wordnet"
:config
(setq helm-wordnet-prog "/usr/local/bin/wn"))
(evil-leader/set-key
"wd" 'helm-wordnet)
(use-package google-translate
:commands (google-translate-at-point google-translate-smooth-translate)
:config
(setq google-translate-default-source-language "nl")
(setq google-translate-default-target-language "en")
(evil-leader/set-key
"wp" 'google-translate-at-point
"ww" 'google-translate-smooth-translate))
(use-package linum-relative
:config
(linum-relative-global-mode))
(setq column-number-mode t)
(use-package flycheck
:init
(add-hook 'after-init-hook 'global-flycheck-mode)
:config
(setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))
(defhydra hydra-flycheck
(:pre (progn (setq hydra-lv t) (flycheck-list-errors))
:post (progn (setq hydra-lv nil) (quit-windows-on "*Flycheck errors*"))
:hint nil)
"Errors"
("f" flycheck-error-list-set-filter "Filter")
("n" flycheck-next-error "Next")
("p" flycheck-previous-error "Previous")
("gg" flycheck-first-error "First")
("G" (progn (goto-char (point-max)) (flycheck-previous-error)) "Last")
("q" nil)))
(use-package deft
:commands deft
:config
(setq deft-directory "~/org")
(setq deft-extensions '("txt" "org"))
(setq deft-default-extension "org")
(setq deft-recursive t)
(setq deft-use-filename-as-title t)
(setq deft-use-filter-string-for-filename t)
(setq deft-ignore-file-regexp
(concat "\\(?:"
"archive\\.org\\'"
"\\)")))
(use-package elfeed
:commands elfeed
:config
(add-to-list 'evil-emacs-state-modes 'elfeed-search-mode)
(use-package elfeed-org
:config
(require 'elfeed-org)
(elfeed-org)
(setq rmh-elfeed-org-files (list "~/org/elfeed.org"))))
(setq message-send-mail-function 'smtpmail-send-it
starttls-use-gnutls t
smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-auth-credentials
'(("smtp.gmail.com" 587 "[email protected]" nil))
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587)
(setq message-kill-buffer-on-exit t)
(add-to-list 'load-path "/usr/local/Cellar/mu/HEAD-65863e4_1/share/emacs/site-lisp")
(require 'mu4e)
(add-hook 'message-send-hook (lambda () (mu4e-update-mail-and-index t)))
(require 'org-mu4e) ;; store org-mode links to messages
;;store link to message if in header view, not to header query
(setq org-mu4e-link-query-in-headers-mode nil)
(setq mu4e-confirm-quit nil)
(setq mu4e-change-filenames-when-moving t)
(setq mu4e-sent-messages-behavior 'delete)
(setq mu4e-mu-binary "/usr/local/bin/mu")
(setq mu4e-get-mail-command "/usr/local/bin/mbsync -a")
(setq mu4e-maildir (expand-file-name "~/Maildir"))
(setq mu4e-attachment-dir (expand-file-name "~/Downloads"))
(setq mu4e-drafts-folder "/personal/drafts")
(setq mu4e-sent-folder "/personal/sent")
(setq mu4e-trash-folder "/personal/trash")
(setq mu4e-refile-folder "/personal/all")
(setq mu4e-maildir-shortcuts
'(("/personal/INBOX". ?i)
("/personal/sent" . ?s)
("/personal/trash" . ?t)
("/personal/all" . ?a)
("/personal/drafts" . ?d)
("/work/INBOX" . ?w)
("/work/all" . ?W)
("/work/sent" . ?S)))
(evil-set-initial-state 'mu4e-view-mode 'motion)
(add-hook 'message-mode-hook 'turn-on-orgstruct++)
(add-hook 'mu4e-compose-mode-hook 'turn-on-flyspell)
(add-hook 'mu4e-compose-mode-hook 'visual-line-mode)
(add-hook 'mu4e-view-mode-hook 'visual-line-mode)
;; (require 'mu4e-multi)
;; (setq mu4e-multi-account-alist
;; '(("personal"
;; (user-mail-address . "[email protected]")
;; (mu4e-drafts-folder . "/personal/drafts")
;; (mu4e-refile-folder . "/personal/all")
;; (mu4e-sent-folder . "/personal/sent")
;; (mu4e-trash-folder . "/personal/trash")
;; (mu4e-compose-signature .
;; (concat
;; "--\n"
;; "Andrew Sanchez\n")))
;; ("work"
;; (user-mail-address . "[email protected]")
;; (mu4e-drafts-folder . "/work/drafts")
;; (mu4e-refile-folder . "/work/all")
;; (mu4e-sent-folder . "/work/sent")
;; (mu4e-trash-folder . "/work/trash")
;; (mu4e-compose-signature .
;; "--\nAndrew\nThe Fluent Forever Team"))))
;; (global-set-key (kbd "C-x m") 'mu4e-multi-compose-new)
;; (mu4e-multi-enable)
(use-package gnus
:commands gnus
:config
(add-to-list 'evil-emacs-state-modes 'gnus-group-mode)
(setq gnus-select-method
'(nnimap "gmail"
(nnimap-address "imap.gmail.com")
(nnimap-server-port "993")
(nnimap-stream ssl)))
(setq gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\"]\"[#'()]"
gnus-message-archive-group nil)
;; mml2015-encrypt-to-self
;; Attempt to encrypt all outgoin emails
;; (add-hook 'message-setup-hook 'mml-secure-message-encrypt)
(eval-after-load 'gnus-group
'(progn
(defhydra hydra-gnus-group (:color blue)
"Do?"
("l" gnus-group-list-all-groups "List subscribed groups")
("a" gnus-group-list-active "List groups on servers")
("c" gnus-group-catchup-all "Read all")
("G" gnus-group-make-nnir-group "Search server G G")
("g" gnus-group-get-new-news "Refresh g")
("s" gnus-group-enter-server-mode "Servers")
("m" gnus-group-new-mail "Compose m OR C-x m")
("#" gnus-topic-mark-topic "mark #")
("q" nil "cancel"))
(define-key gnus-group-mode-map "," 'hydra-gnus-group/body)))
;; gnus-summary-mode
(eval-after-load 'gnus-sum
'(progn
(defhydra hydra-gnus-summary (:color blue)
"Do?"
("s" gnus-summary-show-thread "Show thread")
("h" gnus-summary-hide-thread "Hide thread")
("n" gnus-summary-insert-new-articles "Refresh / N")
("f" gnus-summary-mail-forward "Forward C-c C-f")
("!" gnus-summary-tick-article-forward "Mail -> disk !")
("p" gnus-summary-put-mark-as-read "Mail <- disk")
("c" gnus-summary-catchup-and-exit "Read all c")
("e" gnus-summary-resend-message-edit "Resend S D e")
("R" gnus-summary-reply-with-original "Reply with original R")
("r" gnus-summary-reply "Reply r")
("W" gnus-summary-wide-reply-with-original "Reply all with original S W")
("w" gnus-summary-wide-reply "Reply all S w")
("#" gnus-topic-mark-topic "mark #")
("q" nil "cancel"))
(define-key gnus-summary-mode-map "," 'hydra-gnus-summary/body)))
;; gnus-article-mode
(eval-after-load 'gnus-art
'(progn
(defhydra hydra-gnus-article (:color blue)
"Do?"
("f" gnus-summary-mail-forward "Forward")
("R" gnus-article-reply-with-original "Reply with original R")
("r" gnus-article-reply "Reply r")
("W" gnus-article-wide-reply-with-original "Reply all with original S W")
("o" gnus-mime-save-part "Save attachment at point o")
("w" gnus-article-wide-reply "Reply all S w")
("q" nil "cancel"))
(define-key gnus-article-mode-map "," 'hydra-gnus-article/body)))
(eval-after-load 'message
'(progn (add-hook 'message-mode-hook 'flyspell-mode)
(defhydra hydra-message (:color blue)
"Do?"
("ca" mml-attach-file "Attach C-c C-a")
("cc" message-send-and-exit "Send C-c C-c")
("q" nil "cancel"))
(global-set-key (kbd "C-c C-y") 'hydra-message/body))))
(defhydra hydra-mail (:color blue)
"Mail"
("M" mu4e "mu4e")
("m" mu4e~main-menu "mu4e main menu"))
(use-package keyfreq
:defer 5
:config
(require 'keyfreq)
(setq keyfreq-excluded-commands
'(self-insert-command
abort-recursive-edit
forward-char
backward-char
previous-line
next-line
evil-a-WORD
evil-append
evil-backward-char
evil-backward-word-begin
evil-change
evil-change-line
evil-complete-next
evil-complete-previous
evil-delete
evil-delete-backward-char-and-join
evil-delete-char
evil-delete-line
evil-emacs-state
evil-end-of-line
evil-escape-emacs-state
evil-escape-insert-state
evil-escape-isearch
evil-escape-minibuffer
evil-escape-motion-state
evil-escape-visual-state))
(keyfreq-mode 1)
(keyfreq-autosave-mode 1))
(use-package restart-emacs
:init
(evil-leader/set-key "qr" 'restart-emacs)
:commands restart-emacs)
(use-package neotree
:commands neotree-toggle
:config
(require 'neotree)
(evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter)
(evil-define-key 'normal neotree-mode-map (kbd "SPC") 'neotree-quick-look)
(evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide)
(evil-define-key 'normal neotree-mode-map (kbd "RET") 'neotree-enter))
(use-package realgud
:commands realgud:pdb
:config
(add-hook 'realgud-short-key-mode-hook
(lambda ()
(local-set-key "\C-c" realgud:shortkey-mode-map)))
(setq realgud:pdb-command-name "python -m pdb"
realgud-safe-mode nil))
(use-package gnugo
:commands gnugo
:config
(add-to-list 'evil-emacs-state-modes 'gnugo-board-mode)
(add-hook 'gnugo-start-game-hook 'gnugo-image-display-mode)
(setq gnugo-xpms 'gnugo-imgen-create-xpms))
(use-package ledger-mode
:mode "\\.ledger\\'"
:config
(use-package flycheck-ledger))
(use-package eieio)
(use-package lyqi
:load-path "~/.emacs.d/packages/lyqi"
:mode (("\\.ly$" . lyqi-mode)
("\\.ily$" . lyqi-mode))
:config
(setq lyqi:prefered-languages '(english)
lyqi:pdf-command "open"
lyqi:midi-backend 'osx
lyqi:pdf-command "open"
lyqi:midi-command "open"))
Workgroups for Windows (for Emacs) It’s tedious setting Emacs’ window layout just the way you like it – splitting windows, adjusting their size, switching to the right buffers, etc. And even when it is set, it won’t stay that way for long. On top of that, you can’t save your window-configurations to disk, so you have to start over from scratch every time you restart Emacs.
There are solutions out there to parts of the problem – elscreen, revive.el, window-configuration-to-register, etc. – but none provide a complete solution. Workgroups does.
With Workgroups, you can:
Store an unlimited number of window configs
Save window configs to disk, and load them from disk
Kill and yank window configs
It also provides:
Animated window config morphing
Frame reversing and window movement
A concept of “base” and “working” configs, for maximum flexibility
Lots of other stuff
Description
This package provides tagged workspaces in Emacs, similar to workspaces in windows managers such as Awesome and XMonad (and somewhat similar to multiple desktops in Gnome or Spaces in OS X).
perspective.el provides multiple workspaces (or “perspectives”) for each Emacs frame. This makes it easy to work on many separate projects without getting lost in all the buffers.
Each perspective is composed of a window configuration and a set of buffers. Switching to a perspective activates its window configuration, and when in a perspective only its buffers are available by default.
It’s recommended that you install perspective.el from Marmalade using M-x package-install. Alternately, you may put it in your load path and run (require ‘perspective). Users of Debian 9 or later or Ubuntu 16.04 or later may simply apt-get install elpa-perspective.