Schema validate the config
authorJoerg Jaspert <joerg@debian.org>
Sun, 30 Oct 2016 21:39:43 +0000 (22:39 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sun, 30 Oct 2016 21:39:43 +0000 (22:39 +0100)
.emacs.d/config/emacs.org
.emacs.d/elisp/local/cal.el [deleted file]
.emacs.d/elisp/local/ganneff-gnus.el
.emacs.d/elisp/local/mic-paren.el

index cc6b42d..49eda57 100644 (file)
@@ -98,7 +98,12 @@ https://github.com/jwiegley/use-package
 (require 'use-package)
 (require 'bind-key)
 #+END_SRC
-
+*** Schema validation for the config
+[2016-10-30 Sun 17:15]
+#+BEGIN_SRC emacs-lisp
+(use-package validate
+  :ensure t)
+#+END_SRC
 ** Path settings
 *** Load path
 We need to define the load-path. As I have lots of things I add
@@ -121,20 +126,20 @@ jj-elisp-dir and add them.
 *** Info path
 Help emacs to find the info files
 #+BEGIN_SRC emacs-lisp :tangle yes
-(setq Info-directory-list (cons jj-info-dir
-                                '("/usr/local/share/info/"
-                                  "/usr/local/info/"
-                                  "/usr/local/gnu/info/"
-                                  "/usr/local/gnu/lib/info/"
-                                  "/usr/local/gnu/lib/emacs/info/"
-                                  "/usr/local/emacs/info/"
-                                  "/usr/local/lib/info/"
-                                  "/usr/local/lib/emacs/info/"
-                                  "/usr/share/info/emacs-23"
-                                  "/usr/share/info/"
-                                  "/usr/share/info/")))
-(setq Info-default-directory-list
-      (cons jj-info-dir Info-default-directory-list))
+(validate-setq Info-directory-list (cons jj-info-dir
+                                         '("/usr/local/share/info/"
+                                           "/usr/local/info/"
+                                           "/usr/local/gnu/info/"
+                                           "/usr/local/gnu/lib/info/"
+                                           "/usr/local/gnu/lib/emacs/info/"
+                                           "/usr/local/emacs/info/"
+                                           "/usr/local/lib/info/"
+                                           "/usr/local/lib/emacs/info/"
+                                           "/usr/share/info/emacs-23"
+                                           "/usr/share/info/"
+                                           "/usr/share/info/")))
+(validate-setq Info-default-directory-list
+               (cons jj-info-dir Info-default-directory-list))
 #+END_SRC
 
 ** Interface related
@@ -144,44 +149,48 @@ Help emacs to find the info files
 :END:
 I dislike the startup message
 #+BEGIN_SRC emacs-lisp
-(setq inhibit-splash-screen t)
-(setq inhibit-startup-message t)
+(validate-setq inhibit-splash-screen t)
+(validate-setq inhibit-startup-message t)
 #+END_SRC
 
 Usually I want the lines to break at 72 characters.
 #+BEGIN_SRC emacs-lisp
-(setq fill-column 72)
+(validate-setq fill-column 72)
 #+END_SRC
 
 And it is nice to have a final newline in files.
 (Now off, ethan-wspace is doing it better).
 #+BEGIN_SRC emacs-lisp
-(setq require-final-newline nil)
-(setq mode-require-final-newline nil)
+(validate-setq require-final-newline nil)
+(validate-setq mode-require-final-newline nil)
 #+END_SRC
 
 After I typed 300 characters or took a break for more than a minute it
 would be nice of emacs to save whatever I am on in one of its auto-save
 backups. See [[info:emacs#Auto%20Save%20Control][info:emacs#Auto Save Control]] for more details.
 #+BEGIN_SRC emacs-lisp
-(setq auto-save-interval 300)
-(setq auto-save-timeout   60)
+(validate-setq auto-save-interval 300)
+(validate-setq auto-save-timeout   60)
 #+END_SRC
 
 Set my full name and my default mail address - for whatever wants to use
 it later. Also, I am using gnus.
 #+BEGIN_SRC emacs-lisp
-(setq user-full-name "Joerg Jaspert")
-(setq user-mail-address "joerg@ganneff.de")
-(setq mail-user-agent (quote gnus-user-agent))
+(validate-setq user-full-name "Joerg Jaspert")
+(validate-setq user-mail-address "joerg@ganneff.de")
+(validate-setq mail-user-agent (quote gnus-user-agent))
 #+END_SRC
 
 My default mail server. Well, simply a localhost, I have a forwarder that
 puts mail off the right way, no need for emacs to have any further
 knowledge here.
 #+BEGIN_SRC emacs-lisp
-(setq smtpmail-default-smtp-server "localhost")
-(setq smtpmail-smtp-server "localhost")
+(use-package smtpmail
+  :ensure t
+  :config
+  (progn
+    (validate-setq smtpmail-default-smtp-server "localhost")
+    (validate-setq smtpmail-smtp-server "localhost")))
 #+END_SRC
 
 Enable automatic handling of compressed files.
@@ -202,7 +211,7 @@ for new users. Enable them.
 Recenter in a different order - first go to top, then middle, then
 bottom
 #+BEGIN_SRC emacs-lisp
-(setq recenter-positions '(top middle bottom))
+(validate-setq recenter-positions '(top middle bottom))
 #+END_SRC
 *** Look / Theme
 I've tried various different fonts and while I like the Terminus font
@@ -247,40 +256,42 @@ shell. Consistent look is great.
   (progn
     (defun jj-init-theme ()
       (interactive)
+
+      (if (eq jj-color-style 'dark )(load-theme 'solarized-dark t)
+        (load-theme 'solarized-light t))
+      (set-face-attribute 'org-date nil :underline nil)
+      (message "Initializing theme solarized-dark")
+      )
+
       ;; ;; make the fringe stand out from the background
       (setq solarized-distinct-fringe-background t)
 
       ;; ;; Don't change the font for some headings and titles
-      ;; (setq solarized-use-variable-pitch nil)
+      ;; (validate-setq solarized-use-variable-pitch nil)
 
       ;; ;; make the modeline high contrast
-      ;; (setq solarized-high-contrast-mode-line t)
+      ;; (validate-setq solarized-high-contrast-mode-line t)
 
       ;; ;; Use less bolding
-      ;; (setq solarized-use-less-bold t)
+      ;; (validate-setq solarized-use-less-bold t)
 
       ;; ;; Use more italics
-      ;; (setq solarized-use-more-italic t)
+      ;; (validate-setq solarized-use-more-italic t)
 
       ;; ;; Use less colors for indicators such as git:gutter, flycheck and similar
-      ;; (setq solarized-emphasize-indicators nil)
+      ;; (validate-setq solarized-emphasize-indicators nil)
 
       ;; ;; Don't change size of org-mode headlines (but keep other size-changes)
-      ;; (setq solarized-scale-org-headlines nil)
+      ;; (validate-setq solarized-scale-org-headlines nil)
 
       ;; ;; Avoid all font-size changes
-      ;; (setq solarized-height-minus-1 1)
-      ;; (setq solarized-height-plus-1 1)
-      ;; (setq solarized-height-plus-2 1)
-      ;; (setq solarized-height-plus-3 1)
-      ;; (setq solarized-height-plus-4 1)
+      ;; (validate-setq solarized-height-minus-1 1)
+      ;; (validate-setq solarized-height-plus-1 1)
+      ;; (validate-setq solarized-height-plus-2 1)
+      ;; (validate-setq solarized-height-plus-3 1)
+      ;; (validate-setq solarized-height-plus-4 1)
       (setq x-underline-at-descent-line t)
 
-      (if (eq jj-color-style 'dark )(load-theme 'solarized-dark t)
-        (load-theme 'solarized-light t))
-      (set-face-attribute 'org-date nil :underline nil)
-      (message "Initializing theme solarized-dark")
-      )
     (add-to-list 'custom-theme-load-path jj-theme-dir)
     (add-hook 'after-init-hook 'jj-init-theme)
     (jj-init-theme)))
@@ -321,12 +332,12 @@ For them to work even then, we have to do two things.
 1. We have to set the frame alist. We simple set both,
    =initial-frame-alist= and =default-frame-alist= to the same value here.
    #+BEGIN_SRC emacs-lisp
-  (setq initial-frame-alist '(
+  (validate-setq initial-frame-alist '(
                               (horizontal-scroll-bars . nil)
                               (vertical-scroll-bars . nil)
                               (menu-bar-lines . 0)
                               ))
-  (setq default-frame-alist (copy-alist initial-frame-alist))
+  (validate-setq default-frame-alist (copy-alist initial-frame-alist))
 #+END_SRC
 2. We have to disable the toolbar using the customize interface, so you
    can find that in the [[id:0102208d-fdf6-4928-9e40-7e341bd3aa3a][Customized variables]] section.
@@ -339,17 +350,17 @@ As it says, it does a hilight of the current line.
 *** Allow recursive minibuffers
 This allows (additional) minibuffer commands while in the minibuffer.
 #+BEGIN_SRC emacs-lisp
-(setq enable-recursive-minibuffers 't)
+(validate-setq enable-recursive-minibuffers 't)
 #+END_SRC
 *** No GC during minibuffer action
 [2016-02-15 Mon 22:09]
 See [[https://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/][Why are you changing gc cons threshold?]] for more details.
 #+BEGIN_SRC emacs-lisp
 (defun my-minibuffer-setup-hook ()
-  (setq gc-cons-threshold most-positive-fixnum))
+  (validate-setq gc-cons-threshold most-positive-fixnum))
 
 (defun my-minibuffer-exit-hook ()
-  (setq gc-cons-threshold 800000))
+  (validate-setq gc-cons-threshold 800000))
 
 (add-hook 'minibuffer-setup-hook #'my-minibuffer-setup-hook)
 (add-hook 'minibuffer-exit-hook #'my-minibuffer-exit-hook)
@@ -365,12 +376,12 @@ modeline in red as soon as you are over the defined limit.
 (column-number-mode 1)
 (size-indication-mode 1)
 (display-time-mode 1)
-(setq display-time-day-and-date nil)
-(setq display-time-default-load-average nil)
-(setq display-time-24hr-format t)
-(setq display-time-mail-string "")
-(setq display-time-default-load-average nil)
-(setq modelinepos-column-limit 72)
+(validate-setq display-time-day-and-date nil)
+(validate-setq display-time-default-load-average nil)
+(validate-setq display-time-24hr-format t)
+(validate-setq display-time-mail-string "")
+(validate-setq display-time-default-load-average nil)
+(validate-setq modelinepos-column-limit 72)
 
 (use-package modeline-posn
   :ensure t
@@ -378,7 +389,7 @@ modeline in red as soon as you are over the defined limit.
   (progn
     (set-face-foreground 'modelinepos-column-warning "grey20")
     (set-face-background 'modelinepos-column-warning "red")
-    (setq modelinepos-column-limit 72))
+    (validate-setq modelinepos-column-limit 72))
   )
 #+END_SRC
 
@@ -438,27 +449,33 @@ read in emacs.
 (setq-default major-mode 'org-mode)
 #+END_SRC
 #+BEGIN_SRC emacs-lisp :tangle no
-(setq initial-major-mode 'org-mode)
+(validate-setq initial-major-mode 'org-mode)
 #+END_SRC
 
 *** Shell
 [2013-04-23 Tue 16:43]
 Shell. zsh in my case.
 #+BEGIN_SRC emacs-lisp
-(setq shell-file-name "zsh")
-(setq shell-command-switch "-c")
-(setq explicit-shell-file-name shell-file-name)
-(setenv "SHELL" shell-file-name)
-(setq explicit-sh-args '("-login" "-i"))
-(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
-(setq comint-scroll-to-bottom-on-input t)  ; always insert at the bottom
-(setq comint-scroll-to-bottom-on-output t) ; always add output at the bottom
-(setq comint-scroll-show-maximum-output t) ; scroll to show max possible output
-(setq comint-completion-autolist t)        ; show completion list when ambiguous
-(setq comint-input-ignoredups t)           ; no duplicates in command history
-(setq comint-completion-addsuffix t)       ; insert space/slash after file completion
-(setq comint-buffer-maximum-size 20000)    ; max lenght of the buffer in lines
-(setq comint-prompt-read-only nil)         ; if this is t, it breaks shell-command
+  (use-package shell
+    :commands (shell)
+    :defer t
+    :config
+    (progn
+       (validate-setq shell-file-name "zsh")
+       (validate-setq shell-command-switch "-c")
+       (validate-setq explicit-shell-file-name shell-file-name)
+       (setenv "SHELL" shell-file-name)
+       (setq explicit-sh-args '("-login" "-i"))
+       (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
+       (validate-setq comint-scroll-to-bottom-on-input t)  ; always insert at the bottom
+       (validate-setq comint-scroll-to-bottom-on-output t) ; always add output at the bottom
+       (validate-setq comint-scroll-show-maximum-output t) ; scroll to show max possible output
+       (validate-setq comint-completion-autolist t)        ; show completion list when ambiguous
+       (validate-setq comint-input-ignoredups t)           ; no duplicates in command history
+       (validate-setq comint-completion-addsuffix t)       ; insert space/slash after file completion
+       (validate-setq comint-buffer-maximum-size 20000)    ; max lenght of the buffer in lines
+       (validate-setq comint-prompt-read-only nil)         ; if this is t, it breaks shell-command
+       ))
 #+END_SRC
 *** Keyboard related changes
 **** Cycle Spacing
@@ -514,7 +531,7 @@ From [[http://endlessparentheses.com/faster-pop-to-mark-command.html?source=rss]
   (let ((p (point)))
     (dotimes (i 10)
       (when (= p (point)) ad-do-it))))
-(setq set-mark-command-repeat-pop t)
+(validate-setq set-mark-command-repeat-pop t)
 #+END_SRC
 **** Don't kill-buffer, kill-this-buffer instead
 From [[http://pragmaticemacs.com/emacs/dont-kill-buffer-kill-this-buffer-instead/][Pragmatic Emacs]]: By default C-x k runs the command kill-buffer
@@ -531,7 +548,9 @@ prompting (unless there are unsaved changes).
 The variable at t (its default) lets emacs query before killing
 processes when exiting.
 #+BEGIN_SRC emacs-lisp :tangle yes
-(setq confirm-kill-processes nil)
+  ;;(validate-setq confirm-kill-processes nil)
+  (validate-setq kill-buffer-query-functions 
+                 (delq 'process-kill-buffer-query-function kill-buffer-query-functions))
 #+END_SRC
 ** Miscellaneous stuff
 Searches and matches should ignore case.
@@ -541,14 +560,20 @@ Searches and matches should ignore case.
 
 Which buffers to get rid off at midnight.
 #+BEGIN_SRC emacs-lisp
-(setq clean-buffer-list-kill-buffer-names (quote ("*Help*" "*Apropos*"
-                                                  "*Man " "*Buffer List*"
-                                                  "*Compile-Log*"
-                                                  "*info*" "*vc*"
-                                                  "*vc-diff*" "*diff*"
-                                                  "*Customize"
-                                                  "*tramp/" "*debug "
-                                                  "*magit" "*Calendar")))
+  (use-package midnight
+    :ensure t
+    :config
+    (progn
+      (validate-setq clean-buffer-list-kill-buffer-names (quote ("*Help*" "*Apropos*"
+                                                                 "*Man " "*Buffer List*"
+                                                                 "*Compile-Log*"
+                                                                 "*info*" "*vc*"
+                                                                 "*vc-diff*" "*diff*"
+                                                                 "*Customize"
+                                                                 "*tramp/" "*debug "
+                                                                 "*magit" "*Calendar")))
+      (midnight-delay-set 'midnight-delay 16200)
+      ))
 #+END_SRC
 
 Don't display a cursor in non-selected windows.
@@ -559,13 +584,13 @@ Don't display a cursor in non-selected windows.
 What should be displayed in the mode-line for files with those types
 of line endings.
 #+BEGIN_SRC emacs-lisp
-(setq eol-mnemonic-dos "(DOS)")
-(setq eol-mnemonic-mac "(Mac)")
+(validate-setq eol-mnemonic-dos "(DOS)")
+(validate-setq eol-mnemonic-mac "(Mac)")
 #+END_SRC
 
 #+BEGIN_SRC emacs-lisp
-(setq max-lisp-eval-depth 1000)
-(setq max-specpdl-size 3000)
+(validate-setq max-lisp-eval-depth 1000)
+(validate-setq max-specpdl-size 3000)
 #+END_SRC
 
 Unfill paragraph
@@ -581,7 +606,7 @@ From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
 
 #+BEGIN_SRC emacs-lisp
 (setq-default indicate-empty-lines t)
-(setq sentence-end-double-space nil)
+(validate-setq sentence-end-double-space nil)
 #+END_SRC
 
 Hilight annotations in comments, like FIXME/TODO/...
@@ -591,8 +616,13 @@ Hilight annotations in comments, like FIXME/TODO/...
 
 *** Browser
 #+BEGIN_SRC emacs-lisp
-(setq browse-url-browser-function (quote browse-url-generic))
-(setq browse-url-generic-program "/usr/bin/x-www-browser")
+  (use-package browse-url
+    :ensure t
+    :commands (browse-url)
+    :config
+    (progn
+      (validate-setq browse-url-browser-function (quote browse-url-generic))
+      (validate-setq browse-url-generic-program "/usr/bin/x-www-browser")))
 #+END_SRC
 
 *** When saving a script - make it executable
@@ -613,7 +643,7 @@ Hilight annotations in comments, like FIXME/TODO/...
 (use-package edit-server
   :config
   (progn
-    (setq edit-server-new-frame nil)
+    (validate-setq edit-server-new-frame nil)
     (edit-server-start)))
 #+END_SRC
 ** Customized variables
@@ -664,7 +694,7 @@ things I keep for a long while into statements somewhere else, not just
 custom-set here, but we need it anyways.
 
 #+BEGIN_SRC emacs-lisp
-(setq custom-file jj-custom-file)
+(validate-setq custom-file jj-custom-file)
 (safe-load custom-file)
 #+END_SRC
 
@@ -681,8 +711,8 @@ ways.
   :diminish abbrev-mode
   :config
   (progn
-    (setq save-abbrevs 'silently)
-    (setq abbrev-file-name (expand-file-name "abbrev_defs" jj-cache-dir))
+    (validate-setq save-abbrevs 'silently)
+    (validate-setq abbrev-file-name (expand-file-name "abbrev_defs" jj-cache-dir))
     (if (file-exists-p abbrev-file-name)
         (quietly-read-abbrev-file))
 
@@ -710,7 +740,7 @@ abort completely with `C-g'."
   (interactive "P")
   (let (bef aft)
     (save-excursion
-      (while (if (setq bef (thing-at-point 'word))
+      (while (if (validate-setq bef (thing-at-point 'word))
                  ;; Word was corrected or used quit.
                  (if (ispell-word nil 'quiet)
                      nil ; End the loop.
@@ -720,7 +750,7 @@ abort completely with `C-g'."
                ;; until `bob'.
                (not (bobp)))
         (backward-word))
-      (setq aft (thing-at-point 'word)))
+      (validate-setq aft (thing-at-point 'word)))
     (if (and aft bef (not (equal aft bef)))
         (let ((aft (downcase aft))
               (bef (downcase bef)))
@@ -731,7 +761,7 @@ abort completely with `C-g'."
                    bef aft (if p "loc" "glob")))
       (user-error "No typo at or before point"))))
 
-(setq save-abbrevs 'silently)
+(validate-setq save-abbrevs 'silently)
 (setq-default abbrev-mode t)
 #+END_SRC
 ** avy-mode
@@ -744,14 +774,11 @@ avy is a GNU Emacs package for jumping to visible text using a char-based decisi
   :bind (("H-SPC" . avy-goto-char-2)
          ("M-g g" . avy-goto-line)
          )
-  :init
-  (progn
-    (setq avy-all-windows 'all-frames)
-    (setq avi-keys '(?a ?s ?d ?e ?f ?h ?j ?k ?l ?n ?m ?v ?r ?u) )
-    )
   :config
   (progn
     (bind-key "C-y" 'avy-isearch isearch-mode-map)
+    (validate-setq avy-all-windows 'all-frames)
+    (validate-setq avi-keys '(?a ?s ?d ?e ?f ?h ?j ?k ?l ?n ?m ?v ?r ?u) )
     )
 )
 #+END_SRC
@@ -765,7 +792,7 @@ Use H-w to switch windows
   :bind ("H-w" . ace-window)
   :config
   (progn
-    (setq aw-keys '(?a ?s ?d ?f ?j ?k ?l))
+    (validate-setq aw-keys '(?a ?s ?d ?f ?j ?k ?l))
     ))
 #+END_SRC
 ** aggressive-indent
@@ -785,7 +812,7 @@ than electric-indent-mode.
   :config
   (progn
     (global-aggressive-indent-mode 0)
-    (setq aggressive-indent-comments-too 0)
+    (validate-setq aggressive-indent-comments-too 0)
     (add-to-list 'aggressive-indent-excluded-modes 'html-mode)
     ))
 #+END_SRC
@@ -800,7 +827,7 @@ information in the mode-line in various search modes.
   :defer t
   :config
   (progn
-    (setq anzu-search-threshold 1000)
+    (validate-setq anzu-search-threshold 1000)
     (global-anzu-mode 1)
     (set-face-attribute 'anzu-mode-line nil :foreground "yellow" :weight 'bold)))
 #+END_SRC
@@ -808,6 +835,7 @@ information in the mode-line in various search modes.
 [2014-05-21 Wed 00:33]
 #+BEGIN_SRC emacs-lisp
 (use-package ascii
+  :ensure t
   :commands (ascii-on ascii-toggle ascii-display)
   :bind (("C-c e A" . ascii-toggle))
   :init
@@ -822,11 +850,11 @@ information in the mode-line in various search modes.
     (bind-key "C-c e A" 'ascii-toggle)))
 #+END_SRC
 ** auctex
-#+BEGIN_SRC emacs-lisp
-(setq auto-mode-alist (cons '("\\.tex\\'" . latex-mode) auto-mode-alist))
-(setq TeX-auto-save t)
-(setq TeX-parse-self t)
-(setq TeX-PDF-mode t)
+#+BEGIN_SRC emacs-lisp :tangle no
+(validate-setq auto-mode-alist (cons '("\\.tex\\'" . latex-mode) auto-mode-alist))
+(validate-setq TeX-auto-save t)
+(validate-setq TeX-parse-self t)
+(validate-setq TeX-PDF-mode t)
 #+END_SRC
 ** auto-complete mode
 [2013-04-27 Sa 16:33]
@@ -863,20 +891,20 @@ already had typed.
     (bind-key "C-s" 'ac-isearch ac-completing-map)
     (bind-key "M-TAB" 'auto-complete ac-mode-map)
 
-    (setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
-    (setq ac-use-comphist t)
-    (setq ac-expand-on-auto-complete nil)
-    (setq ac-dwim t)
-    (setq ac-auto-start 3)
-    (setq ac-delay 0.3)
-    (setq ac-menu-height 15)
-    (setq ac-quick-help-delay 0.5)
-    (setq ac-use-fuzzy t)
+    (validate-setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
+    (validate-setq ac-use-comphist t)
+    (validate-setq ac-expand-on-auto-complete nil)
+    (validate-setq ac-dwim t)
+    (validate-setq ac-auto-start 3)
+    (validate-setq ac-delay 0.3)
+    (validate-setq ac-menu-height 15)
+    (validate-setq ac-quick-help-delay 0.5)
+    (validate-setq ac-use-fuzzy t)
 
     (ac-flyspell-workaround)
 
     ;; use 't when auto-complete is disabled
-    (setq tab-always-indent 'complete)
+    (validate-setq tab-always-indent 'complete)
     (add-to-list 'completion-styles 'initials t)
 
      ;; Use space and punctuation to accept the current the most likely completion.
@@ -924,8 +952,8 @@ with it. Not to have to revert buffers myself
   :diminish auto-revert-mode
   :config
   (progn
-    (setq global-auto-revert-mode t)
-    (setq global-auto-revert-non-file-buffers t)
+    (validate-setq global-auto-revert-mode t)
+    (validate-setq global-auto-revert-non-file-buffers t)
     (global-auto-revert-mode)))
 #+END_SRC
 
@@ -944,22 +972,22 @@ where =temporary-file-directory= is not inside my home).
            ("\C-cw" . backup-walker-start))
   :init
   (progn
-    (setq backup-directory jj-backup-directory)
-;    (setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
+    (validate-setq backup-directory jj-backup-directory)
+;    (validate-setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
 ;    (if (not (file-exists-p tramp-backup-directory))
 ;        (make-directory tramp-backup-directory))
-;    (setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
-    (setq backup-directory-alist `(("." . ,jj-backup-directory)))
-    (setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
-    (setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
-
-    (setq version-control t)     ;; Use version numbers for backups
-    (setq kept-new-versions 10)  ;; Number of newest versions to keep
-    (setq kept-old-versions 2)   ;; Number of oldest versions to keep
-    (setq delete-old-versions t) ;; Ask to delete excess backup versions?
-    (setq backup-by-copying t)
-    (setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
-    (setq make-backup-files t)
+;    (validate-setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
+    (validate-setq backup-directory-alist `(("." . ,jj-backup-directory)))
+    (validate-setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
+    (validate-setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
+
+    (validate-setq version-control t)     ;; Use version numbers for backups
+    (validate-setq kept-new-versions 10)  ;; Number of newest versions to keep
+    (validate-setq kept-old-versions 2)   ;; Number of oldest versions to keep
+    (validate-setq delete-old-versions t) ;; Ask to delete excess backup versions?
+    (validate-setq backup-by-copying t)
+    (validate-setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
+    (validate-setq make-backup-files t)
 
     (defadvice kill-buffer (around kill-buffer)
       "Always save before killing a file buffer"
@@ -986,7 +1014,7 @@ are saved automatically when they are killed"
         (set-buffer-modified-p nil))
       (kill-buffer))
 
-    (setq backup-enable-predicate
+    (validate-setq backup-enable-predicate
           (lambda (name)
             (and (normal-backup-enable-predicate name)
                  (not
@@ -999,6 +1027,7 @@ are saved automatically when they are killed"
 [2014-12-11 Thu 11:31]
 #+BEGIN_SRC emacs-lisp
 (use-package browse-kill-ring
+  :ensure t
   :commands (browse-kill-ring browse-kill-ring-mode)
   :bind ("M-y" . browse-kill-ring)
   )
@@ -1006,18 +1035,19 @@ are saved automatically when they are killed"
 ** calendar
 [2014-06-10 Tue 22:20]
 #+BEGIN_SRC emacs-lisp
-(use-package cal
+(use-package calendar
   :commands (cal/insert)
   :bind ("C-c c" . cal/insert)
   :config
   (progn
     ; Weeks start on Monday, not sunday.
-    (setq calendar-week-start-day 1)
-
+    (validate-setq calendar-week-start-day 1)
+    (validate-setq calendar-date-style 'european)
+    
     ; Display ISO week numbers in Calendar Mode
     (copy-face font-lock-constant-face 'calendar-iso-week-face)
     (set-face-attribute 'calendar-iso-week-face nil :height 0.7)
-    (setq calendar-intermonth-text
+    (validate-setq calendar-intermonth-text
           '(propertize
             (format "%2d"
                     (car
@@ -1026,7 +1056,7 @@ are saved automatically when they are killed"
             'font-lock-face 'calendar-iso-week-face))
     (copy-face 'default 'calendar-iso-week-header-face)
     (set-face-attribute 'calendar-iso-week-header-face nil :height 0.7)
-    (setq calendar-intermonth-header
+    (validate-setq calendar-intermonth-header
           (propertize "Wk"                  ; or e.g. "KW" in Germany
                       'font-lock-face 'calendar-iso-week-header-face))))
 
@@ -1042,7 +1072,7 @@ want it to using just two commands.
   :config
   (progn
     ; Interpret # and * as part of the word
-    (setq corral-syntax-entries '((?# "_")
+    (validate-setq corral-syntax-entries '((?# "_")
                                   (?* "_")
                                   (?$ ".")
                                   (?/ ".")))
@@ -1103,7 +1133,7 @@ support for rectangular regions, which I started to use a lot since I
 know this mode. The normal keybindings for those are just to useless.
 #+BEGIN_SRC emacs-lisp
 (cua-mode t)
-(setq cua-enable-cua-keys (quote shift))
+(validate-setq cua-enable-cua-keys (quote shift))
 #+END_SRC
 
 Luckily cua-mode easily supports this, with the following line I just
@@ -1117,11 +1147,11 @@ movement keys.
 
 ** Debian related
 #+BEGIN_SRC emacs-lisp
-(require 'dpkg-dev-el-loaddefs nil 'noerror)
-(require 'debian-el-loaddefs nil 'noerror)
+  (require 'dpkg-dev-el-loaddefs nil 'noerror)
+  (require 'debian-el-loaddefs nil 'noerror)
 
-(setq debian-changelog-full-name "Joerg Jaspert")
-(setq debian-changelog-mailing-address "joerg@debian.org")
+  (setq debian-changelog-full-name "Joerg Jaspert")
+  (setq debian-changelog-mailing-address "joerg@debian.org")
 #+END_SRC
 
 ** diff-mode
@@ -1144,26 +1174,28 @@ movement keys.
     (setq diredp-hide-details-initially-flag nil))
   :config
   (progn
-    (setq dired-auto-revert-buffer (quote dired-directory-changed-p))
-    (setq dired-dwim-target t)
-    (setq dired-listing-switches "-alh")
-    (setq dired-listing-switches "-alXh --group-directories-first")
-    (setq dired-recursive-copies (quote top))
-    (setq dired-recursive-deletes (quote top))
-    (setq dired-guess-shell-alist-user
-          '(("\\.pdf\\'" "mupdf")
-            ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
-            ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
-            ("\\.\\(?:xcf\\)\\'" "gimp")
-            ("\\.csv\\'" "libreoffice")
-            ("\\.tex\\'" "pdflatex" "latex")
-            ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "vlc")
-            ("\\.html?\\'" "conkeror")))
+    (validate-setq dired-auto-revert-buffer (quote dired-directory-changed-p))
+    (validate-setq dired-dwim-target t)
+    (validate-setq dired-listing-switches "-alh")
+    (validate-setq dired-listing-switches "-alXh --group-directories-first")
+    (validate-setq dired-recursive-copies (quote top))
+    (validate-setq dired-recursive-deletes (quote top))
 
     (use-package dired+
       :ensure dired+)
 
-    (use-package dired-x)
+    (use-package dired-x
+      :config
+      (progn
+        (validate-setq dired-guess-shell-alist-user
+                       '(("\\.pdf\\'" "mupdf")
+                         ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
+                         ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
+                         ("\\.\\(?:xcf\\)\\'" "gimp")
+                         ("\\.csv\\'" "libreoffice")
+                         ("\\.tex\\'" "pdflatex" "latex")
+                         ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "vlc")
+                         ("\\.html?\\'" "conkeror")))))
 
     (use-package dired-single
       :ensure dired-single
@@ -1173,13 +1205,15 @@ movement keys.
         (bind-key "<mouse-1>" 'dired-single-buffer-mouse dired-mode-map)
         (bind-key "^"
                   (function
-           (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
+                   (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
 
     (use-package wdired
       :ensure wdired
-      :init
+      :bind (:map dired-mode-map
+             ("r" . wdired-change-to-wdired-mode))
+      :config
       (progn
-        (setq wdired-allow-to-change-permissions t)
+        (validate-setq wdired-allow-to-change-permissions t)
         (bind-key "r" 'wdired-change-to-wdired-mode dired-mode-map)))
 
     (use-package gnus-dired
@@ -1197,13 +1231,13 @@ movement keys.
     (defun mark-similar-versions (name)
       (let ((pat name))
         (if (string-match "^\\(.+?\\)-[0-9._-]+$" pat)
-            (setq pat (match-string 1 pat)))
+            (validate-setq pat (match-string 1 pat)))
         (or (gethash pat mark-files-cache)
             (ignore (puthash pat t mark-files-cache)))))
 
     (defun dired-mark-similar-version ()
       (interactive)
-      (setq mark-files-cache (make-hash-table :test #'equal))
+      (validate-setq mark-files-cache (make-hash-table :test #'equal))
       (dired-mark-sexp '(mark-similar-versions name)))
 
     (defun dired-package-initialize ()
@@ -1221,15 +1255,15 @@ movement keys.
                 parent-dir)
             (while (and (not (file-exists-p file))
                         (progn
-                          (setq parent-dir
-                                (file-name-directory
-                                 (directory-file-name
-                                  (file-name-directory file))))
+                          (validate-setq parent-dir
+                                         (file-name-directory
+                                          (directory-file-name
+                                           (file-name-directory file))))
                           ;; Give up if we are already at the root dir.
                           (not (string= (file-name-directory file)
                                         parent-dir))))
               ;; Move up to the parent dir and try again.
-              (setq file (expand-file-name ".git" parent-dir)))
+              (validate-setq file (expand-file-name ".git" parent-dir)))
             ;; If we found a change log in a parent, use that.
             (if (file-exists-p file)
                 (let ((regexp (funcall dired-omit-regexp-orig))
@@ -1342,8 +1376,8 @@ ediff - don't start another frame
          ("C-. = l" . ediff-regions-linewise)
          ("C-. = w" . ediff-regions-wordwise))
   :config (progn
-            (setq ediff-window-setup-function 'ediff-setup-windows-plain)
-            (setq ediff-split-window-function 'split-window-horizontally)
+            (validate-setq ediff-window-setup-function 'ediff-setup-windows-plain)
+            (validate-setq ediff-split-window-function 'split-window-horizontally)
             )
 )
 #+END_SRC
@@ -1356,7 +1390,7 @@ Allows chromium to "send" files (textbox inputs) to emacs to edit.
   :if window-system
   :config
   (progn
-    (setq edit-server-new-frame t)
+    (validate-setq edit-server-new-frame t)
     (edit-server-start)))
 #+END_SRC
 ** emms
@@ -1380,7 +1414,7 @@ EMMS is the Emacs Multimedia System.
 (require 'emms-history)
 (require 'emms-i18n)
 
-(setq emms-playlist-default-major-mode 'emms-playlist-mode)
+(validate-setq emms-playlist-default-major-mode 'emms-playlist-mode)
 (add-to-list 'emms-track-initialize-functions 'emms-info-initialize-track)
 (emms-playing-time 1)
 (emms-lyrics 1)
@@ -1389,7 +1423,7 @@ EMMS is the Emacs Multimedia System.
 (emms-score 1)
 (when (fboundp 'emms-cache) ; work around compiler warning
   (emms-cache 1))
-(setq emms-score-default-score 3)
+(validate-setq emms-score-default-score 3)
 
 (defun emms-mpd-init ()
   "Connect Emms to mpd."
@@ -1398,22 +1432,22 @@ EMMS is the Emacs Multimedia System.
 
 ;; players
 (require 'emms-player-mpd)
-(setq emms-player-mpd-server-name "localhost")
-(setq emms-player-mpd-server-port "6600")
+(validate-setq emms-player-mpd-server-name "localhost")
+(validate-setq emms-player-mpd-server-port "6600")
 (add-to-list 'emms-info-functions 'emms-info-mpd)
 (add-to-list 'emms-player-list 'emms-player-mpd)
-(setq emms-volume-change-function 'emms-volume-mpd-change)
-(setq emms-player-mpd-sync-playlist t)
-
-(setq emms-source-file-default-directory "/var/lib/mpd/music")
-(setq emms-player-mpd-music-directory "/var/lib/mpd/music")
-(setq emms-info-auto-update t)
-(setq emms-lyrics-scroll-p t)
-(setq emms-lyrics-display-on-minibuffer t)
-(setq emms-lyrics-display-on-modeline nil)
-(setq emms-lyrics-dir "~/.emacs.d/var/lyrics")
-
-(setq emms-last-played-format-alist
+(validate-setq emms-volume-change-function 'emms-volume-mpd-change)
+(validate-setq emms-player-mpd-sync-playlist t)
+
+(validate-setq emms-source-file-default-directory "/var/lib/mpd/music")
+(validate-setq emms-player-mpd-music-directory "/var/lib/mpd/music")
+(validate-setq emms-info-auto-update t)
+(validate-setq emms-lyrics-scroll-p t)
+(validate-setq emms-lyrics-display-on-minibuffer t)
+(validate-setq emms-lyrics-display-on-modeline nil)
+(validate-setq emms-lyrics-dir "~/.emacs.d/var/lyrics")
+
+(validate-setq emms-last-played-format-alist
       '(((emms-last-played-seconds-today) . "%H:%M")
         (604800                           . "%a %H:%M") ; this week
         ((emms-last-played-seconds-month) . "%d.%m.%Y")
@@ -1455,7 +1489,7 @@ EMMS is the Emacs Multimedia System.
             (make-string rating rate-char)))
 )
 
-(setq emms-track-description-function 'my-describe)
+(validate-setq emms-track-description-function 'my-describe)
 
 ;; (global-set-key (kbd "C-<f9> t") 'emms-play-directory-tree)
 ;; (global-set-key (kbd "H-<f9> e") 'emms-play-file)
@@ -1499,7 +1533,7 @@ EMMS is the Emacs Multimedia System.
 (define-key emms-playlist-mode-map "n" 'emms-next)
 (define-key emms-playlist-mode-map "p" 'emms-previous)
 
-(setq emms-playlist-buffer-name "*EMMS Playlist*"
+(validate-setq emms-playlist-buffer-name "*EMMS Playlist*"
       emms-playlist-mode-open-playlists t)
 
 ;; Faces
@@ -1511,7 +1545,7 @@ EMMS is the Emacs Multimedia System.
        )
 ))
 
-(setq emms-player-mpd-supported-regexp
+(validate-setq emms-player-mpd-supported-regexp
       (or (emms-player-mpd-get-supported-regexp)
           (concat "\\`http://\\|"
                   (emms-player-simple-regexp
@@ -1555,7 +1589,7 @@ Basic settings for emacs integrated shell
     (use-package 'em-prompt)
     (use-package 'em-term)
 
-    (setq eshell-cmpl-cycle-completions nil
+    (validate-setq eshell-cmpl-cycle-completions nil
           eshell-save-history-on-exit t
           eshell-buffer-maximum-lines 20000
           eshell-history-size 350
@@ -1565,9 +1599,9 @@ Basic settings for emacs integrated shell
           eshell-cmpl-dir-ignore "\\`\\(\\.\\.?\\|CVS\\|\\.svn\\|\\.git\\)/\\'")
 
     (setenv "PAGER" "cat")
-    (setq eshell-visual-commands
+    (validate-setq eshell-visual-commands
           '("less" "tmux" "htop" "top" "bash" "zsh" "tail"))
-    (setq eshell-visual-subcommands
+    (validate-setq eshell-visual-subcommands
           '(("git" "log" "l" "diff" "show")))
 
     (add-to-list 'eshell-command-completions-alist
@@ -1614,7 +1648,7 @@ Basic settings for emacs integrated shell
       :ensure t
       :init
       (progn
-        (setq eshell-highlight-prompt nil
+        (validate-setq eshell-highlight-prompt nil
               ;; epe-git-dirty-char "Ϟ"
               epe-git-dirty-char "*"
               eshell-prompt-function 'epe-theme-dakrone)))
@@ -1625,9 +1659,9 @@ Basic settings for emacs integrated shell
       (magit-status default-directory)
       nil)
 
-    (setq eshell-prompt-function 'eshell/my-prompt)
-    (setq eshell-highlight-prompt nil)
-    (setq eshell-prompt-regexp "^[^#$\n]+[#$] ")))
+    (validate-setq eshell-prompt-function 'eshell/my-prompt)
+    (validate-setq eshell-highlight-prompt nil)
+    (validate-setq eshell-prompt-regexp "^[^#$\n]+[#$] ")))
 
 #+END_SRC
 
@@ -1647,7 +1681,7 @@ jump to the next/previous occurence of it.
 I want to see the buffername and its size, not the host I am on in my
 frame title.
 #+BEGIN_SRC emacs-lisp
-(setq frame-title-format "%b (%i)")
+(validate-setq frame-title-format "%b (%i)")
 #+END_SRC
 
 *** Protect some buffers
@@ -1681,9 +1715,9 @@ In this day and age, UTF-8 is the way to go.
 (set-clipboard-coding-system 'utf-8)
 (prefer-coding-system 'utf-8)
 (set-charset-priority 'unicode)
-(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
+(validate-setq default-process-coding-system '(utf-8-unix . utf-8-unix))
 (when (display-graphic-p)
-  (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
+  (validate-setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
 #+END_SRC
 
 *** Hilight matching parentheses
@@ -1705,11 +1739,11 @@ you are in", emacs doesn't have this... Except, now it will.
 Default scrolling behaviour in emacs is a bit annoying, who wants to
 jump half-windows?
 #+BEGIN_SRC emacs-lisp
-(setq scroll-margin 3)
-(setq scroll-conservatively 100000)
-(setq scroll-up-aggressively 0.0)
-(setq scroll-down-aggressively 0.0)
-(setq scroll-preserve-screen-position 'always)
+(validate-setq scroll-margin 3)
+(validate-setq scroll-conservatively 100000)
+(validate-setq scroll-up-aggressively 0.0)
+(validate-setq scroll-down-aggressively 0.0)
+(validate-setq scroll-preserve-screen-position 'always)
 #+END_SRC
 
 *** Copy/Paste with X
@@ -1717,10 +1751,10 @@ jump half-windows?
 The default how emacs handles cutting/pasting with the primary selection
 changed in emacs24. I am used to the old way, so get it back.
 #+BEGIN_SRC emacs-lisp
-(setq select-enable-primary t)
-(setq select-enable-clipboard nil)
-(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
-(setq mouse-drag-copy-region t)
+(validate-setq select-enable-primary t)
+(validate-setq select-enable-clipboard nil)
+(validate-setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+(validate-setq mouse-drag-copy-region t)
 #+END_SRC
 *** Global keyboard changes not directly related to a mode
 Disable /suspend_frame/ function, I dislike it.
@@ -1882,10 +1916,10 @@ Count which commands I use how often.
 #+BEGIN_SRC emacs-lisp
 (use-package keyfreq
   :ensure keyfreq
-  :init
+  :config
   (progn
-    (setq keyfreq-file (expand-file-name "keyfreq" jj-cache-dir))
-    (setq keyfreq-file-lock (expand-file-name "keyfreq.lock" jj-cache-dir))
+    (validate-setq keyfreq-file (expand-file-name "keyfreq" jj-cache-dir))
+    (validate-setq keyfreq-file-lock (expand-file-name "keyfreq.lock" jj-cache-dir))
     (keyfreq-mode 1)
     (keyfreq-autosave-mode 1)))
 #+END_SRC
@@ -1921,7 +1955,7 @@ the beginning of the line.
 If ARG is not nil or 1, move forward ARG - 1 lines first.  If
 point reaches the beginning or end of the buffer, stop there."
   (interactive "^p")
-  (setq arg (or arg 1))
+  (validate-setq arg (or arg 1))
 
   ;; Move lines first
   (when (/= arg 1)
@@ -1980,7 +2014,7 @@ Comment/Uncomment
 
 Show keystrokes in progress
 #+BEGIN_SRC emacs-lisp
-(setq echo-keystrokes 0.1)
+(validate-setq echo-keystrokes 0.1)
 #+END_SRC
 **** Overwrite mode
 Usually you can press the *Ins*ert key, to get into overwrite mode. I
@@ -2070,16 +2104,16 @@ Proper whitespace handling
   :bind ( ("M-s M-w" . eww-search-words))
   :config
   (progn
-    ;; (setq eww-search-prefix                 "https://duckduckgo.com/html/?q=")
-    (setq eww-search-prefix                 "https://www.google.com/search?q=")
-    (setq eww-download-directory            "~/Downloads")
-    ;; (setq eww-form-checkbox-symbol          "[ ]")
-    (setq eww-form-checkbox-symbol          "☐") ; Unicode hex 2610
-    ;; (setq eww-form-checkbox-selected-symbol "[X]")
-    (setq eww-form-checkbox-selected-symbol "☑") ; Unicode hex 2611
+    ;; (validate-setq eww-search-prefix                 "https://duckduckgo.com/html/?q=")
+    (validate-setq eww-search-prefix                 "https://www.google.com/search?q=")
+    (validate-setq eww-download-directory            "~/Downloads")
+    ;; (validate-setq eww-form-checkbox-symbol          "[ ]")
+    (validate-setq eww-form-checkbox-symbol          "☐") ; Unicode hex 2610
+    ;; (validate-setq eww-form-checkbox-selected-symbol "[X]")
+    (validate-setq eww-form-checkbox-selected-symbol "☑") ; Unicode hex 2611
     ;; Improve the contract of pages like Google results
     ;; http://emacs.stackexchange.com/q/2955/115
-    (setq shr-color-visible-luminance-min 80) ; default = 40
+    (validate-setq shr-color-visible-luminance-min 80) ; default = 40
 
     ;; Auto-rename new eww buffers
     ;; http://ergoemacs.org/emacs/emacs_eww_web_browser.html
@@ -2252,6 +2286,7 @@ fill prefix, such as a comment sequence in program code, and handling
 bullet points like “1.” or “*”.
 #+BEGIN_SRC emacs-lisp
 (use-package filladapt
+  :load-path ("elisp/local")
   :diminish filladapt-mode
   :config
   (setq-default filladapt-mode t))
@@ -2271,10 +2306,10 @@ understand for me.
   (progn
     (use-package flycheck-color-mode-line
       :ensure flycheck-color-mode-line)
-    (setq flycheck-highlighting-mode 'nil)
-    (setq flycheck-flake8-maximum-line-length '150)
+    (validate-setq flycheck-highlighting-mode 'nil)
+    (validate-setq flycheck-flake8-maximum-line-length '150)
     (add-hook 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
-    (setq flycheck-sh-shellcheck-executable "/usr/bin/shellcheck -e 2086")
+    (validate-setq flycheck-sh-shellcheck-executable "/usr/bin/shellcheck -e 2086")
     (add-hook 'find-file-hook
           (lambda ()
             (when (not (equal 'emacs-lisp-mode major-mode))
@@ -2290,7 +2325,7 @@ And I want to have it everywhere.
   :init
   (progn
     (global-font-lock-mode 1)
-    (setq font-lock-maximum-decoration t)))
+    (validate-setq font-lock-maximum-decoration t)))
 #+END_SRC
 ** form-feed-mode
 [2015-08-31 Mon 11:27]
@@ -2328,13 +2363,13 @@ Display nice lines instead of page breaks
          )
   :config
   (progn
-    (setq git-gutter+-disabled-modes '(org-mode))
+    (validate-setq git-gutter+-disabled-modes '(org-mode))
     (global-git-gutter+-mode 1)
     (use-package git-gutter-fringe+
       :ensure git-gutter-fringe+
       :config
       (progn
-        (setq git-gutter-fr+-side 'right-fringe)
+        (validate-setq git-gutter-fr+-side 'right-fringe)
         ;(git-gutter-fr+-minimal)
         ))))
 
@@ -2352,7 +2387,7 @@ useful when you want to know why this line was changed.
   (progn
     (bind-key "m" 'git-messenger:copy-message git-messenger-map)
     (add-hook 'git-messenger:popup-buffer-hook 'magit-revision-mode)
-    (setq git-messenger:show-detail t)))
+    (validate-setq git-messenger:show-detail t)))
 #+END_SRC
 ** git timemachine
 [2014-07-23 Mi 12:57]
@@ -2389,8 +2424,8 @@ be readable enough to know it's content.
   :init
   (progn
     (golden-ratio-mode 1)
-    (setq golden-ratio-exclude-buffer-names '("*LV*" "*guide-key*" "*Ediff Control Panel*"))
-    (setq golden-ratio-exclude-modes '("calendar-mode" "gnus-summary-mode"
+    (validate-setq golden-ratio-exclude-buffer-names '("*LV*" "*guide-key*" "*Ediff Control Panel*"))
+    (validate-setq golden-ratio-exclude-modes '("calendar-mode" "gnus-summary-mode"
                                        "gnus-article-mode" "calc-mode" "calc-trail-mode"
                                        "bbdb-mode"))
     ))
@@ -2415,13 +2450,13 @@ for this.
 (use-package guide-key
   :ensure guide-key
   :diminish guide-key-mode
-  :init
+  :config
   (progn
-    (setq guide-key/guide-key-sequence '("C-x" "C-c" "M-g" "M-s"))
+    (validate-setq guide-key/guide-key-sequence '("C-x" "C-c" "M-g" "M-s"))
     (guide-key-mode 1)
-    (setq guide-key/recursive-key-sequence-flag t)
-    (setq guide-key/popup-window-position 'bottom)
-    (setq guide-key/idle-delay 0.5)))
+    (validate-setq guide-key/recursive-key-sequence-flag t)
+    (validate-setq guide-key/popup-window-position 'bottom)
+    (validate-setq guide-key/idle-delay 0.5)))
 
 #+END_SRC
 
@@ -2447,7 +2482,7 @@ tries to expand it in various ways.
   :commands hippie-expand
   :config
   (progn
-    (setq hippie-expand-try-functions-list '(try-expand-dabbrev
+    (validate-setq hippie-expand-try-functions-list '(try-expand-dabbrev
                                              try-expand-dabbrev-all-buffers
                                              try-expand-dabbrev-from-kill
                                              try-complete-file-name-partially
@@ -2487,8 +2522,8 @@ that disables itself auto-magically.
   :ensure hydra
   :init
   (progn
-    (setq hydra-is-helpful t)
-    (setq hydra-lv t)
+    (validate-setq hydra-is-helpful t)
+    (validate-setq hydra-lv t)
 
     (defhydra hydra-zoom (:color red)
       "zoom"
@@ -2572,7 +2607,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
   :config
   (progn
     (defvar my-ibufffer-separator " • ")
-    (setq ibuffer-filter-group-name-face 'variable-pitch
+    (validate-setq ibuffer-filter-group-name-face 'variable-pitch
           ibuffer-use-header-line t
           ibuffer-old-time 12)
     (unbind-key "M-o" ibuffer-mode-map)
@@ -2619,7 +2654,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
     (bind-key "i" 'ibuffer-magit-status ibuffer-mode-map)
     (bind-key "G" 'ibuffer-magit-status ibuffer-mode-map)
 
-    (setq ibuffer-directory-abbrev-alist
+    (validate-setq ibuffer-directory-abbrev-alist
           (-uniq
            (-flatten
             (--map
@@ -2666,7 +2701,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
     (defun ibuffer-magit-define-filter-groups ()
       (when (and (not ibuffer-magit-filter-groups)
                (boundp 'magit-repo-dirs))
-        (setq ibuffer-magit-filter-groups
+        (validate-setq ibuffer-magit-filter-groups
               (--map (list
                       (concat "git:: "
                               (file-name-nondirectory (directory-file-name it)))
@@ -2677,7 +2712,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
       (interactive)
       ;; (ibuffer-projectile-define-filter-groups)
       ;; (ibuffer-magit-define-filter-groups)
-      (setq ibuffer-filter-groups
+      (validate-setq ibuffer-filter-groups
             (-concat
              ;; ibuffer-projectile-filter-groups
              ibuffer-magit-filter-groups
@@ -2712,7 +2747,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
             (let ((selected-buffer (ibuffer-current-buffer)))
               (if (not ibuffer-filter-groups)
                   (ibuffer-set-filter-groups-by-root)
-                (setq ibuffer-filter-groups nil))
+                (validate-setq ibuffer-filter-groups nil))
               (pop-to-buffer ibuf)
               (ibuffer-update nil t)
               (ibuffer-jump-to-buffer (buffer-name selected-buffer )))))))
@@ -2735,7 +2770,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
     (define-key ibuffer-mode-map
       (vector 'remap 'beginning-of-buffer) 'ibuffer-back-to-top)
 
-    (setq ibuffer-default-sorting-mode 'recency
+    (validate-setq ibuffer-default-sorting-mode 'recency
           ibuffer-eliding-string "…"
           ibuffer-compile-formats t
           ibuffer-git-column-length 6
@@ -2743,7 +2778,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
           ibuffer-default-directory "~/"
           )
 
-    (setq ibuffer-formats '((mark vc-status-mini
+    (validate-setq ibuffer-formats '((mark vc-status-mini
                                   " "
                                   (git-status 8 8 :left)
                                   " "
@@ -2762,7 +2797,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
                                   " " filename)
                             ))
 
-     (setq ibuffer-saved-filter-groups
+     (validate-setq ibuffer-saved-filter-groups
            (quote (("flat")
                    ("default"
                     ("dired"  (mode . dired-mode))
@@ -2901,7 +2936,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
   ;; too cautious for most people. You’ll still be prompted for
   ;; confirmation when deleting modified buffers after the option has
   ;; been turned off.
-  (setq ibuffer-expert t)
+  (validate-setq ibuffer-expert t)
 
 ))
 #+END_SRC
@@ -2917,7 +2952,7 @@ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
   :config
   (progn
     ;(ivy-mode 1)
-    (setq ivy-use-virtual-buffers t)
+    (validate-setq ivy-use-virtual-buffers t)
     ;;advise swiper to recenter on exit
     (defun bjm-swiper-recenter (&rest args)
       "recenter display after swiper"
@@ -2982,7 +3017,7 @@ gnus, so we have a list of modes where we don't want to see it.
   :diminish linum-mode
   :config
   (progn
-    (setq linum-format "%3d ")
+    (validate-setq linum-format "%3d ")
     (setq linum-mode-inhibit-modes-list '(org-mode
                                           eshell-mode
                                           shell-mode
@@ -3001,7 +3036,7 @@ gnus, so we have a list of modes where we don't want to see it.
       :ensure linum-relative
       :init
       (progn
-        (setq linum-format 'dynamic)
+        (validate-setq linum-format 'dynamic)
         )))
   :init
   (global-linum-mode 1))
@@ -3019,6 +3054,7 @@ I'm not doing much of it, except for my emacs and gnus configs, but
 then I like it nice too...
 #+BEGIN_SRC emacs-lisp
 (bind-key "TAB" 'lisp-complete-symbol read-expression-map)
+(bind-key "M-." 'find-function-at-point emacs-lisp-mode-map)
 
 (defun remove-elc-on-save ()
   "If you're saving an elisp file, likely the .elc is no longer valid."
@@ -3042,7 +3078,6 @@ then I like it nice too...
 (add-hook 'emacs-lisp-mode-hook (lambda ()
                                   (run-hooks 'prelude-emacs-lisp-mode-hook)))
 
-(bind-key "M-." 'find-function-at-point emacs-lisp-mode-map)
 
 (after "elisp-slime-nav"
   '(diminish 'elisp-slime-nav-mode))
@@ -3051,6 +3086,15 @@ then I like it nice too...
 (after "eldoc"
   '(diminish 'eldoc-mode))
 #+END_SRC
+** lua
+[2016-10-27 Thu 17:49]
+Lua editing
+#+BEGIN_SRC emacs-lisp
+(use-package lua-mode
+  :ensure t
+  :commands lua-mode
+  :mode ("\\.lua" . lua-mode))
+#+END_SRC
 ** magit
 [2013-04-21 So 20:48]
 magit is a mode for interacting with git.
@@ -3058,53 +3102,50 @@ magit is a mode for interacting with git.
 (use-package magit
   :ensure magit
   :commands  (magit-log magit-run-gitk magit-run-git-gui magit-status
-              magit-git-repo-p magit-list-repos)
+                        magit-git-repo-p magit-list-repos)
   :defer t
   :bind (("C-x g" . magit-status)
          ("C-x G" . magit-status-with-prefix))
-  :init
+  :config
   (progn
-    (setq magit-commit-signoff t
-          magit-repository-directories '("~/git"
-                                   "/develop/vcs/"
-                                   "/develop/Debian/"
-                                   "~/devel"
-                                   )
-          magit-repository-directories-depth 4
-          magit-log-auto-more t)
+    (validate-setq magit-commit-signoff t)
+    (validate-setq magit-repository-directories '("~/git"
+                                                  "/develop/vcs/"
+                                                  "/develop/Debian/"
+                                                  "~/devel"
+                                                  ))
+    (validate-setq magit-repository-directories-depth 4)
+    (validate-setq magit-log-auto-more t)
 
     (use-package magit-blame
       :commands magit-blame-mode
       :defer t)
 
-    ; (use-package magit-svn
-    ;   :ensure magit-svn
-    ;   :commands (magit-svn-mode
-    ;              turn-on-magit-svn)
-    ;   :defer t)
+                                        ; (use-package magit-svn
+                                        ;   :ensure magit-svn
+                                        ;   :commands (magit-svn-mode
+                                        ;              turn-on-magit-svn)
+                                        ;   :defer t)
 
     (add-hook 'magit-mode-hook 'hl-line-mode)
     (defun magit-status-with-prefix ()
       (interactive)
       (let ((current-prefix-arg '(4)))
         (call-interactively 'magit-status)))
-    )
-  :config
-  (progn
     (setenv "GIT_PAGER" "")
 
     (unbind-key "M-h" magit-mode-map)
     (unbind-key "M-s" magit-mode-map)
     (add-to-list 'magit-no-confirm 'stage-all-changes)
-    (setq magit-push-always-verify nil)
-    (setq magit-last-seen-setup-instructions "2.1.0")
-    ; (use-package magit-find-file
-    ;   :ensure magit-find-file
-    ;   :commands (magit-find-file-completing-read)
-    ;   :defer t
-    ;   :init
-    ;   (progn
-    ;     (bind-key "C-x C-f" 'magit-find-file-completing-read magit-mode-map)))
+    (validate-setq magit-push-always-verify nil)
+    (validate-setq magit-last-seen-setup-instructions "2.1.0")
+                                        ; (use-package magit-find-file
+                                        ;   :ensure magit-find-file
+                                        ;   :commands (magit-find-file-completing-read)
+                                        ;   :defer t
+                                        ;   :init
+                                        ;   (progn
+                                        ;     (bind-key "C-x C-f" 'magit-find-file-completing-read magit-mode-map)))
 
     (add-hook 'magit-log-edit-mode-hook
               #'(lambda ()
@@ -3132,11 +3173,11 @@ magit is a mode for interacting with git.
       "Start an interactive rebase sequence over all unpushed commits."
       (interactive (list (magit-get-tracked-branch)
                          (magit-rebase-arguments)))
-      (if (setq commit (magit-rebase-interactive-assert commit))
+      (if (validate-setq commit (magit-rebase-interactive-assert commit))
           (magit-run-git-sequencer "rebase" "-i" commit args)
         (magit-log-select
-          `(lambda (commit)
-             (magit-rebase-interactive (concat commit "^") (list ,@args))))))
+         `(lambda (commit)
+            (magit-rebase-interactive (concat commit "^") (list ,@args))))))
 
     (magit-define-popup-action 'magit-rebase-popup ?l "Rebase unpushed" 'magit-rebase-unpushed)
     ))
@@ -3145,6 +3186,7 @@ magit is a mode for interacting with git.
 [2014-05-20 Tue 23:04]
 #+BEGIN_SRC emacs-lisp
 (use-package markdown-mode
+  :ensure t
   :mode (("\\.md\\'" . markdown-mode)
          ("\\.mdwn\\'" . markdown-mode))
   :defer t)
@@ -3154,25 +3196,25 @@ magit is a mode for interacting with git.
 (use-package message
   :config
   (progn
-    (setq message-kill-buffer-on-exit t)))
+    (validate-setq message-kill-buffer-on-exit t)))
 #+END_SRC
 ** mingus
 [[https://github.com/pft/mingus][Mingus]] is a nice interface to mpd, the Music Player Daemon.
 
 I want to access it from anywhere using =F6=.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp :tangle no
 (use-package mingus-stays-home
   :bind ( "<f6>" . mingus)
   :defer t
   :config
   (progn
-    (setq mingus-dired-add-keys t)
-    (setq mingus-mode-always-modeline nil)
-    (setq mingus-mode-line-show-elapsed-percentage nil)
-    (setq mingus-mode-line-show-volume nil)
-    (setq mingus-mpd-config-file "/etc/mpd.conf")
-    (setq mingus-mpd-playlist-dir "/var/lib/mpd/playlists")
-    (setq mingus-mpd-root "/share/music/")))
+    (validate-setq mingus-dired-add-keys t)
+    (validate-setq mingus-mode-always-modeline nil)
+    (validate-setq mingus-mode-line-show-elapsed-percentage nil)
+    (validate-setq mingus-mode-line-show-volume nil)
+    (validate-setq mingus-mpd-config-file "/etc/mpd.conf")
+    (validate-setq mingus-mpd-playlist-dir "/var/lib/mpd/playlists")
+    (validate-setq mingus-mpd-root "/share/music/")))
 #+END_SRC
 
 ** miniedit
@@ -3199,8 +3241,8 @@ coexist in one buffer.
   :ensure mmm-mode
   :init
   (progn
-    (setq mmm-global-mode 'buffers-with-submode-classes)
-    (setq mmm-submode-decoration-level 2)
+    (validate-setq mmm-global-mode 'buffers-with-submode-classes)
+    (validate-setq mmm-submode-decoration-level 2)
     (eval-after-load 'mmm-vars
       '(progn
          (mmm-add-group
@@ -3240,7 +3282,7 @@ Emacs]].
              mo-git-blame-file)
   :config
   (progn
-    (setq mo-git-blame-blame-window-width 25)))
+    (validate-setq mo-git-blame-blame-window-width 25)))
 #+END_SRC
 
 ** multiple cursors
@@ -3271,7 +3313,7 @@ Use multiple cursors mode. See [[http://emacsrocks.com/e13.html][Emacs Rocks! mu
     (bind-key "n" 'mc/mark-next-like-this region-bindings-mode-map)
     (bind-key "l" 'mc/edit-lines region-bindings-mode-map)
     (bind-key "m" 'mc/mark-more-like-this-extended region-bindings-mode-map)
-    (setq mc/list-file (expand-file-name "mc-cache.el" jj-cache-dir))))
+    (validate-setq mc/list-file (expand-file-name "mc-cache.el" jj-cache-dir))))
 #+END_SRC
 ** neotree
 [2014-08-27 Wed 17:15]
@@ -3287,47 +3329,69 @@ A emacs tree plugin
   :config
   (progn
     (bind-key "^" 'neotree-select-up-node neotree-mode-map)
-    (setq neo-smart-open t)))
+    (validate-setq neo-smart-open t)))
 
 #+END_SRC
+** notmuch
+[2016-10-24 Mon 18:18]
+Nice email search
+#+BEGIN_SRC emacs-lisp
+(use-package notmuch
+  :ensure t
+  :defer t
+  :commands (notmuch)
+  :config
+  (progn
+    (validate-setq notmuch-search-oldest-first nil)))
+#+END_SRC
 ** nxml
 [2013-05-22 Wed 22:02]
 nxml-mode is a major mode for editing XML.
 #+BEGIN_SRC emacs-lisp
-(add-auto-mode
- 'nxml-mode
- (concat "\\."
-         (regexp-opt
-          '("xml" "xsd" "sch" "rng" "xslt" "svg" "rss"
-            "gpx" "tcx"))
-         "\\'"))
-(setq magic-mode-alist (cons '("<\\?xml " . nxml-mode) magic-mode-alist))
-(fset 'xml-mode 'nxml-mode)
-(setq nxml-slash-auto-complete-flag t)
-
-;; See: http://sinewalker.wordpress.com/2008/06/26/pretty-printing-xml-with-emacs-nxml-mode/
-(defun pp-xml-region (begin end)
-  "Pretty format XML markup in region. The function inserts
-linebreaks to separate tags that have nothing but whitespace
-between them.  It then indents the markup by using nxml's
-indentation rules."
-  (interactive "r")
-  (save-excursion
-      (nxml-mode)
-      (goto-char begin)
-      (while (search-forward-regexp "\>[ \\t]*\<" nil t)
-        (backward-char) (insert "\n"))
-      (indent-region begin end)))
-
-;;----------------------------------------------------------------------------
-;; Integration with tidy for html + xml
-;;----------------------------------------------------------------------------
-;; tidy is autoloaded
-(eval-after-load 'tidy
-  '(progn
-     (add-hook 'nxml-mode-hook (lambda () (tidy-build-menu nxml-mode-map)))
-     (add-hook 'html-mode-hook (lambda () (tidy-build-menu html-mode-map)))
-     ))
+  (use-package nxml-mode
+    :mode (("web.config$" . xml-mode)
+           ("\\.xml" . xml-mode)
+           ("\\.xsd" . xml-mode)
+           ("\\.sch" . xml-mode)
+           ("\\.rng" . xml-mode)
+           ("\\.xslt" . xml-mode)
+           ("\\.svg" . xml-mode)
+           ("\\.rss" . xml-mode)
+           ("\\.gpx" . xml-mode)
+           ("\\.tcx" . xml-mode))
+    :defer t
+    :config
+    (progn
+      (setq nxml-child-indent 4)
+      (setq nxml-slash-auto-complete-flag t)
+      (add-hook 'nxml-mode-hook (lambda () (emmet-mode t)))
+
+      (fset 'xml-mode 'nxml-mode)
+      (validate-setq nxml-slash-auto-complete-flag t)
+
+      ;; See: http://sinewalker.wordpress.com/2008/06/26/pretty-printing-xml-with-emacs-nxml-mode/
+      (defun pp-xml-region (begin end)
+        "Pretty format XML markup in region. The function inserts
+  linebreaks to separate tags that have nothing but whitespace
+  between them.  It then indents the markup by using nxml's
+  indentation rules."
+        (interactive "r")
+        (save-excursion
+          (nxml-mode)
+          (goto-char begin)
+          (while (search-forward-regexp "\>[ \\t]*\<" nil t)
+            (backward-char) (insert "\n"))
+          (indent-region begin end)))
+
+      ;;----------------------------------------------------------------------------
+      ;; Integration with tidy for html + xml
+      ;;----------------------------------------------------------------------------
+      ;; tidy is autoloaded
+      (eval-after-load 'tidy
+        '(progn
+           (add-hook 'nxml-mode-hook (lambda () (tidy-build-menu nxml-mode-map)))
+           (add-hook 'html-mode-hook (lambda () (tidy-build-menu html-mode-map)))
+           ))))
 
 #+END_SRC
 ** org                                                               :FIXME:
@@ -4391,7 +4455,7 @@ up here to be used.
     (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
     (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
     (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
-    (setq cperl-invalid-face nil
+    (validate-setq cperl-invalid-face nil
           cperl-close-paren-offset -4
           cperl-continued-statement-offset 0
           cperl-indent-level 4
@@ -4439,7 +4503,7 @@ up here to be used.
   :config
   (progn
     (defun my-puppet-mode-hook ()
-      (setq require-final-newline nil))
+      (validate-setq require-final-newline nil))
     (add-hook 'puppet-mode-hook 'my-puppet-mode-hook)
     (use-package puppet-ext)))
 #+END_SRC
@@ -4491,35 +4555,35 @@ various variables. Elpy author may like them, but I'm not him...
     (add-hook 'python-mode-hook 'elpy-initialize-local-variables)
 
     (defun my-python-mode-hook ()
-      (setq require-final-newline nil)
-      (setq mode-require-final-newline))
+      (validate-setq require-final-newline nil)
+      (validate-setq mode-require-final-newline))
     (add-hook 'python-mode-hook 'my-python-mode-hook)
 
     ;; Flymake support using flake8, including warning faces.
     (when (and (executable-find "flake8")
                (not (executable-find python-check-command)))
-      (setq python-check-command "flake8"))
+      (validate-setq python-check-command "flake8"))
 
     ;; `flymake-no-changes-timeout': The original value of 0.5 is too
     ;; short for Python code, as that will result in the current line to
     ;; be highlighted most of the time, and that's annoying. This value
     ;; might be on the long side, but at least it does not, in general,
     ;; interfere with normal interaction.
-    (setq flymake-no-changes-timeout 60)
+    (validate-setq flymake-no-changes-timeout 60)
 
     ;; `flymake-start-syntax-check-on-newline': This should be nil for
     ;; Python, as;; most lines with a colon at the end will mean the next
     ;; line is always highlighted as error, which is not helpful and
     ;; mostly annoying.
-    (setq flymake-start-syntax-check-on-newline nil)
+    (validate-setq flymake-start-syntax-check-on-newline nil)
 
     ;; `ac-auto-show-menu': Short timeout because the menu is great.
-    (setq ac-auto-show-menu 0.4)
+    (validate-setq ac-auto-show-menu 0.4)
 
     ;; `ac-quick-help-delay': I'd like to show the menu right with the
     ;; completions, but this value should be greater than
     ;; `ac-auto-show-menu' to show help for the first entry as well.
-    (setq ac-quick-help-delay 0.5)
+    (validate-setq ac-quick-help-delay 0.5)
 
     ;; `yas-trigger-key': TAB, as is the default, conflicts with the
     ;; autocompletion. We also need to tell yasnippet about the new
@@ -4527,14 +4591,14 @@ various variables. Elpy author may like them, but I'm not him...
     ;; doing this.
     (let ((old (when (boundp 'yas-trigger-key)
                  yas-trigger-key)))
-      (setq yas-trigger-key "C-c C-i")
+      (validate-setq yas-trigger-key "C-c C-i")
       (when (fboundp 'yas--trigger-key-reload)
         (yas--trigger-key-reload old)))
 
     ;; yas-snippet-dirs can be a string for a single directory. Make
     ;; sure it's a list in that case so we can add our own entry.
     (when (not (listp yas-snippet-dirs))
-      (setq yas-snippet-dirs (list yas-snippet-dirs)))
+      (validate-setq yas-snippet-dirs (list yas-snippet-dirs)))
     (add-to-list 'yas-snippet-dirs
                  (concat (file-name-directory (locate-library "elpy"))
                          "snippets/")
@@ -4583,17 +4647,17 @@ the preferred method python evaluation.
 #+BEGIN_SRC emacs-lisp :tangle no
 (when (executable-find "ipython")
   (require 'ipython)
-  (setq org-babel-python-mode 'python-mode))
+  (validate-setq org-babel-python-mode 'python-mode))
 
-(setq python-shell-interpreter "ipython")
-(setq python-shell-interpreter-args "")
-(setq python-shell-prompt-regexp "In \\[[0-9]+\\]: ")
-(setq python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: ")
-(setq python-shell-completion-setup-code
+(validate-setq python-shell-interpreter "ipython")
+(validate-setq python-shell-interpreter-args "")
+(validate-setq python-shell-prompt-regexp "In \\[[0-9]+\\]: ")
+(validate-setq python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: ")
+(validate-setq python-shell-completion-setup-code
    "from IPython.core.completerlib import module_completion")
-(setq python-shell-completion-module-string-code
+(validate-setq python-shell-completion-module-string-code
    "';'.join(module_completion('''%s'''))\n")
-(setq python-shell-completion-string-code
+(validate-setq python-shell-completion-string-code
    "';'.join(get_ipython().Completer.all_completions('''%s'''))\n")
 #+END_SRC
 ** rainbow-delimiters
@@ -4625,7 +4689,7 @@ Saner regex syntax
   :commands re-builder
   :defer t
   :config
-  (setq reb-re-syntax 'string))
+  (validate-setq reb-re-syntax 'string))
 #+END_SRC
 ** recentf
 [2014-05-19 Mo 22:56]
@@ -4639,8 +4703,8 @@ files. This list is is automatically saved across Emacs sessions.
   :init
   (progn
     (recentf-mode 1)
-    (setq recentf-max-menu-items 25)
-    (setq recentf-save-file (expand-file-name ".recentf" jj-cache-dir))
+    (validate-setq recentf-max-menu-items 25)
+    (validate-setq recentf-save-file (expand-file-name ".recentf" jj-cache-dir))
 
     (defun recentf-add-dired-directory ()
       (if (and dired-directory
@@ -4686,6 +4750,7 @@ Programming in ruby...
   :config
   (progn
     (use-package yari
+      :ensure t
       :init
       (progn
         (defvar yari-helm-source-ri-pages
@@ -4737,17 +4802,20 @@ Programming in ruby...
 [2013-05-22 Wed 22:40]
 Save and restore the desktop
 #+BEGIN_SRC emacs-lisp
-(setq desktop-path (list jj-cache-dir))
-(desktop-save-mode 1)
-(defadvice desktop-read (around trace-desktop-errors activate)
-  (let ((debug-on-error t))
-    ad-do-it))
+(use-package desktop
+  :config
+  (progn
+    (validate-setq desktop-path (list jj-cache-dir))
+    (desktop-save-mode 1)
+    (defadvice desktop-read (around trace-desktop-errors activate)
+      (let ((debug-on-error t))
+        ad-do-it))))
 
 ;;----------------------------------------------------------------------------
 ;; Restore histories and registers after saving
 ;;----------------------------------------------------------------------------
 (use-package session
-  :if (not noninteractive)
+  :ensure t
   :load-path "site-lisp/session/lisp/"
   :init
   (progn
@@ -4770,8 +4838,9 @@ Save and restore the desktop
                     tags-file-name
                     register-alist)))
 
-    (session-initialize)
-
+    (session-initialize))
+  :config
+  (progn
     (defun remove-session-use-package-from-settings ()
       (when (string= (file-name-nondirectory (buffer-file-name)) "settings.el")
         (save-excursion
@@ -4811,7 +4880,6 @@ Save and restore the desktop
 
     (if window-system
         (add-hook 'after-init-hook 'session-initialize t))))
-
 #+END_SRC
 *** savehist
 [2013-04-21 So 20:25]
@@ -4827,7 +4895,7 @@ Save a bit of history
     (setq savehist-additional-variables
           '(search ring regexp-search-ring kill-ring compile-history))
     ;; save every minute
-    (setq savehist-autosave-interval 60)
+    (validate-setq savehist-autosave-interval 60)
     (savehist-mode +1)))
 #+END_SRC
 
@@ -4850,7 +4918,7 @@ Store at which point I have been in files.
   :commands (httpd-start httpd-stop)
   :config
   (progn
-    (setq httpd-root "/srv/www")
+    (validate-setq httpd-root "/srv/www")
     )
 )
 #+END_SRC
@@ -4864,8 +4932,8 @@ Settings for shell scripts
     (defvar sh-script-initialized nil)
     (defun initialize-sh-script ()
       (unless sh-script-initialized
-        (setq sh-script-initialized t)
-        (setq sh-indent-comment t)
+        (validate-setq sh-script-initialized t)
+        (validate-setq sh-indent-comment t)
         (info-lookup-add-help :mode 'shell-script-mode
                               :regexp ".*"
                               :doc-spec
@@ -4898,10 +4966,10 @@ formats if one exists in the first 8 lines of the file.
   :config
   (progn
     (add-hook 'write-file-hooks 'time-stamp)
-    (setq time-stamp-active t)
-    (setq time-stamp-format "%02H:%02M:%02S (%z) - %02d.%02m.%:y from %u (%U) on %s")
-    (setq time-stamp-old-format-warn nil)
-    (setq time-stamp-time-zone nil)))
+    (validate-setq time-stamp-active t)
+    (validate-setq time-stamp-format "%02H:%02M:%02S (%z) - %02d.%02m.%:y from %u (%U) on %s")
+    (validate-setq time-stamp-old-format-warn nil)
+    (validate-setq time-stamp-time-zone nil)))
 #+END_SRC
 
 ** tiny-tools
@@ -4933,15 +5001,15 @@ Transparent Remote (file) Access, Multiple Protocol, remote file editing.
   :defer t
   :config
   (progn
-    ;(setq tramp-persistency-file-name (expand-file-name "tramp" jj-cache-dir))
-    (setq shell-prompt-pattern "^[^a-zA-Z].*[#$%>] *")
+    ;(validate-setq tramp-persistency-file-name (expand-file-name "tramp" jj-cache-dir))
+    (validate-setq shell-prompt-pattern "^[^a-zA-Z].*[#$%>] *")
     ;(add-to-list 'tramp-default-method-alist '("\\`localhost\\'" "\\`root\\'" "su"))
-    (setq tramp-debug-buffer nil)
-    (setq tramp-default-method "sshx")
+    (validate-setq tramp-debug-buffer nil)
+    (validate-setq tramp-default-method "sshx")
     ;(tramp-set-completion-function "ssh"
     ;                               '((tramp-parse-sconfig "/etc/ssh_config")
     ;                                 (tramp-parse-sconfig "~/.ssh/config")))
-    ;(setq tramp-verbose 5)
+    ;(validate-setq tramp-verbose 5)
     ))
 #+END_SRC
 
@@ -4968,8 +5036,8 @@ keeping the full power of emacs undo/redo.
   :init
   (progn
     (global-undo-tree-mode)
-    (setq undo-tree-visualizer-timestamps t)
-    (setq undo-tree-visualizer-diff t)
+    (validate-setq undo-tree-visualizer-timestamps t)
+    (validate-setq undo-tree-visualizer-diff t)
     ;; Keep region when undoing in region
     (defadvice undo-tree-undo (around keep-region activate)
       (if (use-region-p)
@@ -4988,9 +5056,9 @@ Always have unique buffernames. See [[http://www.gnu.org/software/emacs/manual/h
 (use-package uniquify
   :init
   (progn
-    (setq uniquify-buffer-name-style 'post-forward)
-    (setq uniquify-after-kill-buffer-p t)
-    (setq uniquify-ignore-buffers-re "^\\*")))
+    (validate-setq uniquify-buffer-name-style 'post-forward)
+    (validate-setq uniquify-after-kill-buffer-p t)
+    (validate-setq uniquify-ignore-buffers-re "^\\*")))
 #+END_SRC
 
 ** url
@@ -4998,8 +5066,8 @@ url contains code to parse and handle URLs - who would have thought? I
 set it to send Accept-language header and tell it to not send email,
 operating system or location info.
 #+BEGIN_SRC emacs-lisp
-(setq url-mime-language-string "de,en")
-(setq url-privacy-level (quote (email os lastloc)))
+(validate-setq url-mime-language-string "de,en")
+(validate-setq url-privacy-level (quote (email os lastloc)))
 #+END_SRC
 ** visual-regexp
 [2014-06-01 Sun 21:38]
@@ -5033,8 +5101,8 @@ your operation actually changed in the buffer.
   :ensure wgrep
   :config
   (progn
-    (setq wgrep-auto-save-buffer t)
-    (setq wgrep-enable-key "r")
+    (validate-setq wgrep-auto-save-buffer t)
+    (validate-setq wgrep-enable-key "r")
     )
   )
 #+END_SRC
@@ -5047,7 +5115,7 @@ Easily move between splitted windows.
   (progn
     (windmove-default-keybindings)
     ; maybe also:
-    ;(setq org-replace-disputed-keys t)
+    ;(validate-setq org-replace-disputed-keys t)
     ))
 #+END_SRC
 ** winner mode - undo and redo window configuration
@@ -5092,16 +5160,16 @@ writing problems/...
   (progn
     (add-hook 'web-mode-hook
               (lambda ()
-                (setq web-mode-markup-indent-offset 2)
-                (setq web-mode-css-indent-offset 2)
-                (setq web-mode-code-indent-offset 2)
-                (setq web-mode-enable-css-colorization t)
-                (setq web-mode-enable-comment-keywords t)
-                (setq web-mode-enable-current-element-highlight t))))
+                (validate-setq web-mode-markup-indent-offset 2)
+                (validate-setq web-mode-css-indent-offset 2)
+                (validate-setq web-mode-code-indent-offset 2)
+                (validate-setq web-mode-enable-css-colorization t)
+                (validate-setq web-mode-enable-comment-keywords t)
+                (validate-setq web-mode-enable-current-element-highlight t))))
   :config
   (progn
-    (setq web-mode-enable-current-element-highlight t)
-    (setq web-mode-ac-sources-alist
+    (validate-setq web-mode-enable-current-element-highlight t)
+    (validate-setq web-mode-ac-sources-alist
           '(("css" . (ac-source-css-property))
             ("html" . (ac-source-words-in-buffer ac-source-abbrev))))
     (use-package impatient-mode
@@ -5141,7 +5209,7 @@ readable/editable without getting a big headache.
 Yasnippet is a template system. Type an abbreviation, expand it into
 whatever the snippet holds.
 #+BEGIN_SRC emacs-lisp
-;(setq yas-snippet-dirs (expand-file-name "yasnippet/snippets" jj-elisp-dir))
+;(validate-setq yas-snippet-dirs (expand-file-name "yasnippet/snippets" jj-elisp-dir))
 (use-package yasnippet
   :ensure yasnippet
   :defer t
@@ -5153,11 +5221,10 @@ whatever the snippet holds.
     (add-to-list 'hippie-expand-try-functions-list
                  'yas-hippie-try-expand)
     (yas-global-mode 1)
-    (setq yas-expand-only-for-last-commands '(self-insert-command))
+    (validate-setq yas-expand-only-for-last-commands '(self-insert-command))
     (bind-key "\t" 'hippie-expand yas-minor-mode-map)
     
-    (setq yas-snippet-dirs (expand-file-name "yasnippet/snippets" jj-elisp-dir))
-    (add-to-list 'yas-snippet-dirs (expand-file-name "snippets" jj-dir))
+    (validate-setq yas-snippet-dirs (expand-file-name "snippets" jj-dir)) 
     ))
 #+END_SRC
 * Thats it
diff --git a/.emacs.d/elisp/local/cal.el b/.emacs.d/elisp/local/cal.el
deleted file mode 100644 (file)
index 0793b5e..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;;; cal.el --- simple calendar functions
-
-;; This is free and unencumbered software released into the public domain.
-
-;; Author: Christopher Wellons <mosquitopsu@gmail.com>
-;; Version: 0.1
-
-;;; Commentary:
-
-;; `cal/insert' inserts a calendar that looks like so:
-
-;; August 2012
-;; S M T W T F S
-;; 1 2 3 4
-;; 5 6 7 8 9 10 11
-;; 12 13 14 15 16 17 18
-;; 19 20 21 22 23 24 25
-;; 26 27 28 29 30 31
-
-;;; Code:
-
-(defvar cal/month-days '(31 28 31 30 31 30 31 31 30 31 30 31))
-
-(defvar cal/month-names
-  '(" January" "February" " March" " April" " May" " June"
-    " July" " August" "September" " October" "November" "December"))
-
-(defun cal/day-of-week (year month day)
-  "Return day of week number (0-7)."
-  (let* ((Y (if (< month 3) (1- year) year))
-         (m (1+ (mod (+ month 9) 12)))
-         (y (mod Y 100))
-         (c (/ Y 100)))
-    (mod (+ day (floor (- (* 26 m) 2) 10) y (/ y 4) (/ c 4) (* -2 c)) 7)))
-
-(defun cal/leap-day (year month)
-  "Return the number of leap days to add to MONTH (0 or 1)."
-  (if (and (= month 2)
-           (or (= 0 (mod year 400))
-               (and (> (mod year 100) 0) (= 0 (mod year 4))))) 1 0))
-
-;;;###autoload
-(defun cal/insert (year month)
-  "Insert a calendar for the given YEAR and MONTH."
-  (interactive "nYear (yyyy): \nnMonth (mm): \n")
-  (let ((dow (cal/day-of-week year month 1)))
-    (insert (format " %s %d\n" (nth (1- month) cal/month-names) year))
-    (insert " S M T W T F S\n")
-    (dotimes (i dow) (insert " "))
-    (dotimes (d (+ (nth (1- month) cal/month-days) (cal/leap-day year month)))
-      (insert (format "% 3d" (1+ d)))
-      (if (= 0 (mod (+ dow d 1) 7)) (insert "\n")))
-    (insert "\n")))
-
-;;; cal.el ends here
index 2419b26..613055f 100644 (file)
 (defun lld-notmuch-file-to-group (file)
   "Calculate the Gnus group name from the given file name."
   (let ((group (file-name-directory (directory-file-name (file-name-directory file)))))
-    (setq group (replace-regexp-in-string ".*/Maildir/" "nnimap+gkar:" group))
+    (setq group (replace-regexp-in-string ".*/Maildir/" "nnimap+ganneff:" group))
     (setq group (replace-regexp-in-string "/$" "" group))
     (if (string-match ":$" group)
         (concat group "INBOX"))
index 25b7249..f55dc42 100644 (file)
@@ -1,10 +1,10 @@
 ;;; mic-paren.el --- advanced highlighting of matching parentheses
 
-;;; Copyright (C) 2008, 2012 Thien-Thi Nguyen
+;;; Copyright (C) 2008, 2012, 2013 Thien-Thi Nguyen
 ;;; Copyright (C) 1997 Mikael Sjödin (mic@docs.uu.se)
 
-;; Version: 3.10
-;; Released: 2012-07-16
+;; Version: 3.11
+;; Released: 2013-09-20
 ;; Author: Mikael Sjödin (mic@docs.uu.se)
 ;;         Klaus Berndl  <berndl@sdm.de>
 ;;         Jonathan Kotta <jpkotta@gmail.com>
 ;;
 ;; Some examples to try in your ~/.emacs:
 ;;
-;; (add-hook 'LaTeX-mode-hook
-;;           (function (lambda ()
-;;                       (paren-toggle-matching-quoted-paren 1)
-;;                       (paren-toggle-matching-paired-delimiter 1))))
+;;  (add-hook 'LaTeX-mode-hook
+;;            (function (lambda ()
+;;                        (paren-toggle-matching-quoted-paren 1)
+;;                        (paren-toggle-matching-paired-delimiter 1))))
 ;;
-;; (add-hook 'c-mode-common-hook
-;;           (function (lambda ()
-;;                        (paren-toggle-open-paren-context 1))))
+;;  (add-hook 'c-mode-common-hook
+;;            (function (lambda ()
+;;                         (paren-toggle-open-paren-context 1))))
+;;
+;; If you use CUA mode, these might be useful, too:
+;;
+;;  (put 'paren-forward-sexp 'CUA 'move)
+;;  (put 'paren-backward-sexp 'CUA 'move)
 ;;
 ;; ----------------------------------------------------------------------
 ;; Installation:
@@ -87,6 +92,9 @@
 ;;   cursor is between two expressions).
 ;; o Indication of mismatched parentheses.
 ;; o Recognition of "escaped" (also often called "quoted") parentheses.
+;; o Recognition of SML-style "sexp-ish" comment syntax.
+;;   NB: This support is preliminary; there are still problems
+;;       when the parens in the comment span multiple lines, etc.
 ;; o Option to match "escaped" parens too, especially in (La)TeX-mode
 ;;   (e.g., matches expressions like "\(foo bar\)" properly).
 ;; o Offers two functions as replacement for `forward-sexp' and
 ;;
 ;; ----------------------------------------------------------------------
 ;; Versions:
+;; v3.11   + Added support for recognizing SML-style comments as a sexp.
+;;           Thanks to Leo Liu, Stefan Monnier.
+;;
 ;; v3.10   + Added message-length clamping (var `paren-max-message-length').
 ;;           Thanks to Jonathan Kotta.
 ;;
 ;;           the computation of the offscreen-message-linenumber.  Either the
 ;;           number of lines between the two matching parens or the absolute
 ;;           linenumber.  (Thank you for the idea and a first implementation
-;;           to Eliyahu Barzilay <eli@cs.bgu.ac.il>.)
+;;           to Eli Barzilay <eli@barzilay.org>.)
 ;;         + New option `paren-message-truncate-lines': If mic-paren messages
 ;;           should be truncated or not (has only an effect in GNU Emacs 21).
-;;           (Thank you for the idea and a first implementation to Eliyahu
-;;           Barzilay <eli@cs.bgu.ac.il>.)
+;;           (Thank you for the idea and a first implementation to Eli
+;;           Barzilay <eli@barzilay.org>.)
 ;;
 ;; v3.4    + Corrected some bugs in the backward-compatibility for older
 ;;           Emacsen.  Thanks to Tetsuo Tsukamoto <czkmt@remus.dti.ne.jp>.
 ;;
 ;; v1.9    Avoids multiple messages/dings when point has not moved.  Thus,
 ;;         mic-paren no longer overwrites messages in minibuffer.  Inspired by
-;;         the suggestion and code of Barzilay Eliyahu <eli@cs.bgu.ac.il>.
+;;         the suggestion and code of Eli Barzilay <eli@barzilay.org>.
 ;;
 ;; v1.3.1  Some spelling corrected (from Vinicius Jose Latorre
 ;;         <vinicius@cpqd.br> and Steven L Baur <steve@xemacs.org>).
 
 ;;; Code:
 
-(defvar mic-paren-version "3.10"
+(defvar mic-paren-version "3.11"
   "Version of mic-paren.")
 
 (eval-when-compile (require 'cl))
@@ -1006,6 +1017,32 @@ This is the main function of mic-paren."
                                  right-prio))
                        (not fcq)))))
 
+           (comment-style
+            ()
+            (or (get major-mode 'mic-paren-comment-style)
+                (put major-mode 'mic-paren-comment-style
+                     ;; Tested (lightly) w/ SML, Modula-2, Pascal.
+                     (flet ((sub (str pos) (condition-case ()
+                                               (aref str (if (> 0 pos)
+                                                             (+ (length str)
+                                                                pos)
+                                                           pos))
+                                             (error 0))))
+                       (if (string= "()" (string (sub comment-start 0)
+                                                 (sub comment-end -1)))
+                           'sexp
+                         'normal)))))
+
+           (sexp-ish-comment-edge
+            (p mult)
+            (and (eq 'sexp (comment-style))
+                 (if (> 0 mult)
+                     (prog1 (nth 8 (syntax-ppss (1- p)))
+                       (forward-char 1))
+                   ;; hmmm
+                   (save-match-data
+                     (looking-at (regexp-quote comment-start))))))
+
            (find-other-paren
             (forwardp)
             (let ((mult (if forwardp 1 -1)))
@@ -1022,7 +1059,11 @@ This is the main function of mic-paren."
                                             (min lim (point-max))
                                           (point-max)))))
                   (condition-case ()
-                      (setq opos (scan-sexps (point) mult))
+                      (setq opos (let ((p (point)))
+                                   (if (not (sexp-ish-comment-edge p mult))
+                                       (scan-sexps p mult)
+                                     (forward-comment mult)
+                                     (point))))
                     (error nil))))
               ;; We must call matching-paren because `scan-sexps' doesn't
               ;; care about the kind of paren (e.g., matches '( and '}).