dotfiles/emacs/emacs.org

9.3 KiB

Emacs config

Prelims

use-package compile-time

(eval-when-compile (require 'use-package))
(require 'diminish)
(require 'bind-key)

Org stuff

modules

keybindings

  (bind-keys :map global-map
             ("C-c l" . org-store-link)
             ("C-c a" . org-agenda)
             ("C-c b" . org-iswitchb)
             ("C-c c" . org-capture))

config

    (setq org-pretty-entities t)
    (setq org-startup-indented t)
    (setq org-src-fontify-natively t)
    (setq org-completion-use-ido t)
    (setq org-src-tab-acts-natively t)
    (setq org-ellipsis "⬎")
    (setq org-log-done t)
    (setq org-todo-keywords
        '((sequence "TODO(t)" "WAIT" "|" "DONE(d)" "CANCEL")))
  (setq org-agenda-files (list "~/org/life.org"
            "~/org/ru.org" 
            "~/org/symfo.org"
            "~/org/fiction.org"))
  (setq org-use-fast-todo-selection t)
  (setq org-directory "~/org")

  (defun org-file-path (filename)
  "Return the absolute address of an org file, given its relative name."
  (concat (file-name-as-directory org-directory) filename))

  ; (setq org-inbox-file "~/org/inbox.org")
  (setq org-index-file (org-file-path "life.org"))
  (setq org-archive-location
      (concat (org-file-path "archive.org") "::* From %s"))

  (setq org-default-notes-file "~/org/refile.org")

  (setq org-agenda-todo-ignore-scheduled t)

  (setq org-capture-templates
        '(("l" "Today I learned"
           entry
           (file+datetree (org-file-path "til.org"))
           "* %?\n")
          ("u" "link"
           entry
           (file+headline org-index-file "check links")
           "* %^L\n")
          ("w" "Week review"
           entry
           (file+datetree (org-file-path "weeklog.org"))
           "* %?\n")
          ("t" "todo item"
           entry
           (file+headline org-index-file "todo")
           "* TODO %?\n")))

add templates

    (add-to-list 'org-structure-template-alist
                 '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"))
    (add-to-list 'org-structure-template-alist
                 '("py" "#+BEGIN_SRC python\n?\n#+END_SRC"))
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((python . t)
     (sh . t)
     ))

org-bullets

(use-package org-bullets
    :init (add-hook 'org-mode-hook 'org-bullets-mode t)
    :commands org-bullets-mode
)

TODO org-ref

  (use-package org-ref
      :disabled
      :config
      (setq org-ref-completion-library 'org-ref-ivy-cite))

Look

Solarized

(use-package solarized
    :if window-system
    :init
    (setq-default frame-background-mode 'dark)
    (set-frame-parameter nil 'background-mode 'dark)
    (add-hook 'after-make-frame-functions (lambda (frame)
                "Reenable solarized"
                (enable-theme 'solarized-dark)))
    :config
    (load-theme 'solarized-dark t)
    (enable-theme 'solarized-dark))

Transparency

(set-frame-parameter (selected-frame) 'alpha '(90 . 85))
(add-to-list 'default-frame-alist '(alpha . (90 . 85)))

Cleaner frames

(tool-bar-mode 0)
(menu-bar-mode 0)
(scroll-bar-mode 0)

hl-line

(when window-system (global-hl-line-mode))
(show-paren-mode t)

Feel

(defalias 'yes-or-no-p 'y-or-n-p)

fix escape

; Map escape to cancel (like C-g)...
(define-key isearch-mode-map [escape] 'isearch-abort)   ;; isearch
(define-key isearch-mode-map "\e" 'isearch-abort)   ;; \e seems to work better for terminals
(global-set-key [escape] 'keyboard-escape-quit)         ;; everywhere else

Fix mouse wheel

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse
(setq scroll-step 1) ;; keyboard scroll one line at a time
(defun sfp-page-down (&optional arg)
    (interactive "^P")
    (setq this-command 'next-line)
    (next-line
    (- (window-text-height)
	next-screen-context-lines)))
(put 'sfp-page-down 'isearch-scroll t)
(put 'sfp-page-down 'CUA 'move)
(defun sfp-page-up (&optional arg)
    (interactive "^P")
    (setq this-command 'previous-line)
    (previous-line
    (- (window-text-height)
	next-screen-context-lines)))
(put 'sfp-page-up 'isearch-scroll t)
(put 'sfp-page-up 'CUA 'move)
(setq scroll-error-top-bottom t)

Ivy

  (use-package ivy
      :init
      (setq ivy-height 10)
      (setq ivy-use-virtual-buffers t)
      (setq enable-recursive-minibuffers t)
      :config
      (ivy-mode t)
      :bind (("C-s" . swiper)
             ("C-c C-r" . ivy-resume)
             ("<f6>" . ivy-resume)))

Counsel

  (use-package counsel
      :bind (("M-x" . counsel-M-x)
             ("C-x C-f" . counsel-find-file)))

(global-set-key (kbd "<f1> f") 'counsel-describe-function) (global-set-key (kbd "<f1> v") 'counsel-describe-variable) (global-set-key (kbd "<f1> l") 'counsel-find-library) (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol) (global-set-key (kbd "<f2> u") 'counsel-unicode-char) ;; (global-set-key (kbd "C-c g") 'counsel-git) ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) ;; (global-set-key (kbd "C-c k") 'counsel-ag) ;; (global-set-key (kbd "C-x l") 'counsel-locate) ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)

projectile

    (use-package projectile
     :config
  (projectile-global-mode t)
  (use-package counsel-projectile))

ggtags

(use-package ggtags
:demand
:bind ("M-." . ggtags-find-tag-dwim))

TODO i3-emacs

editing

line numbers

relative

(use-package linum-relative
    :commands linum-relative-toggle)

enable globally

(global-linum-mode t)

Indentation

(setq-default indent-tabs-mode nil)
(setq-default tab-width 2) ; or any other preferred value
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

git-gutter-fringe

(use-package git-gutter-fringe
    :config (global-git-gutter-mode t))

all-the-icons

(use-package all-the-icons
    :commands all-the-icons-insert)

backups

from emacs wiki

(setq vc-make-backup-files t)
(setq
   backup-by-copying t      ; don't clobber symlinks
   backup-directory-alist
    '(("." . "~/.emacs.d/.saves"))    ; don't litter my fs tree
   delete-old-versions t
   kept-new-versions 6
   kept-old-versions 2
   version-control t)       ; use versioned backups

Evil

(use-package evil
    :config (evil-mode t))
(use-package which-key
    :init
    (setq which-key-allow-evil-operators t)
    (setq which-key-show-operator-state-maps t)
    :config
    (which-key-mode 1)
    (which-key-setup-minibuffer)) ; do I need this?

evil-goggles

(use-package evil-goggles
    :config (evil-goggles-mode)
            (evil-goggles-use-diff-faces))

TODO multiple-cursors

Tools

Magit

(use-package magit
  :bind (("C-c g" . magit-status)
         ("C-c C-g l" . magit-log-all)))

Pass

(use-package pass
  :commands pass)

TODO helm-pass or password-store or fix keybindings for pass

language-specific

markdown

(use-package markdown-mode
    :commands (markdown-mode gfm-mode)
    :mode (("README\\.md\\'" . gfm-mode)
	    ("\\.md\\'" . markdown-mode)
	    ("\\.markdown\\'" . markdown-mode))
    :init (setq markdown-command "multimarkdown"))

org

TODO spellchecking

TODO disable linum on org mode

TODO use org-cliplink

nix

(use-package nix-mode
    :commands (nix-mode)
    :mode (("\\.nix\\'" . nix-mode)))

haskell

(load-library "haskell-mode-autoloads")
  (use-package intero
   :config     (add-hook 'haskell-mode-hook 'intero-mode)
  )

TODO intero / haskell mode https://wiki.haskell.org/Emacs

TODO proof-general