]> git.donarmstrong.com Git - lib.git/blobdiff - emacs_el/configuration/don-configuration.org
add beancount
[lib.git] / emacs_el / configuration / don-configuration.org
index 03de60c7bf743e750196016e0024bb851a0b19fb..baae5d8763b00c0eee415d3b049959e8697d40ea 100644 (file)
 Borrowed from https://github.com/nilcons/emacs-use-package-fast/ to
 load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
 #+BEGIN_SRC emacs-lisp
-  (setq package-enable-at-startup nil)
-  (setq package--init-file-ensured t)
-  (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
-                           ("melpa" . "https://melpa.org/packages/")
-                           ("org" . "http://orgmode.org/elpa/") ))
   (eval-and-compile
+    ;; add /etc/ssl/ca-global/ca-certificates.crt so that we can
+    ;; download packages when we're on Debian hosts which chop down the
+    ;; list of available certificates
+    (require 'gnutls)
+    (add-to-list 'gnutls-trustfiles "/etc/ssl/ca-global/ca-certificates.crt")
+    (setq package-enable-at-startup nil)
+    (setq package--init-file-ensured t)
+    (setq package-user-dir "~/var/emacs/elpa")
+    (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
+                             ("melpa" . "https://melpa.org/packages/")
+                             ("org" . "http://orgmode.org/elpa/")))
     (setq use-package-verbose (not (bound-and-true-p byte-compile-current-file))))
   (mapc #'(lambda (add) (add-to-list 'load-path add))
     (eval-when-compile
@@ -52,9 +58,21 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
                        nil))
                      load-path))))))
 
-  (require 'use-package)
-  (require 'diminish)
+  ;;; fix up info paths for packages
+  (with-eval-after-load "info"
+    (info-initialize)
+    (dolist (dir (directory-files package-user-dir))
+      (let ((fdir (concat (file-name-as-directory package-user-dir) dir)))
+        (unless (or (member dir '("." ".." "archives" "gnupg"))
+                    (not (file-directory-p fdir))
+                    (not (file-exists-p (concat (file-name-as-directory fdir) "dir"))))
+          (add-to-list 'Info-directory-list fdir)))))
+
+
+  (eval-when-compile
+    (require 'use-package))
   (require 'bind-key)
+  (require 'diminish)
 #+END_SRC
 ** Paradox
 #+BEGIN_SRC emacs-lisp
@@ -89,13 +107,14 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
 * Variables
 ** Safe Local Variables
 #+BEGIN_SRC emacs-lisp
-  (setq safe-local-variable-values 
-        (quote ((auto-save-default)
-                (make-backup-files)
-                (cperl-indent-level . 4)
-                (indent-level . 4)
-                (indent-tabs-mode . f)
-                )))
+(setq safe-local-variable-values
+      (quote ((auto-save-default)
+              (make-backup-files)
+              (cperl-indent-level . 4)
+              (indent-level . 4)
+              (indent-tabs-mode . f)
+              (vcl-indent-level . 4)
+              )))
 #+END_SRC
 * Memory
 #+BEGIN_SRC emacs-lisp
@@ -113,6 +132,14 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
   (add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook)
 #+END_SRC
 * Modules
+** Spacemacs theme
+#+BEGIN_SRC emacs-lisp
+(use-package spacemacs-common
+  :ensure spacemacs-theme
+  :config
+  (load-theme 'spacemacs-dark t)
+  )
+#+END_SRC
 ** Hippie Expand
 #+BEGIN_SRC emacs-lisp
   (use-package hippie-exp
@@ -291,6 +318,7 @@ value, scrolling continues until there is no more output.
 *** Avy
 #+BEGIN_SRC emacs-lisp
   (use-package avy
+    :if (>= emacs-major-version 25)
     :ensure t
     :bind (("C-c C-<SPC>" . avy-goto-word-or-subword-1)
            ("C-c j j" . avy-goto-word-or-subword-1)
@@ -345,6 +373,7 @@ value, scrolling continues until there is no more output.
 *** Auto-YASnippet
 #+BEGIN_SRC emacs-lisp
   (use-package auto-yasnippet
+    :ensure t
     :bind (("H-w" . aya-create)
            ("H-y" . aya-expand)
            )
@@ -352,32 +381,31 @@ value, scrolling continues until there is no more output.
 #+END_SRC
 ** Company
 #+BEGIN_SRC emacs-lisp
-  (use-package company
-    :ensure t
-    :bind (("M-/" . company-complete))
-    :config
-    (setq company-echo-delay 0     ; remove blinking
-          company-show-numbers t   ; show numbers for easy selection
-          company-selection-wrap-around t
-          company-require-match nil
-          company-dabbrev-ignore-case t
-          company-dabbrev-ignore-invisible t
-          company-dabbrev-other-buffers t
-          company-dabbrev-downcase nil
-          company-dabbrev-code-everywhere t
-          company-tooltip-align-annotations t
-          company-minimum-prefix-length 1
-          company-global-modes '(not)
-          company-lighter-base "(C)")
-    (global-company-mode 1)
-  
-    (bind-key "C-n"   #'company-select-next company-active-map)
-    (bind-key "C-p"   #'company-select-previous company-active-map)
-    (bind-key "<tab>" #'company-complete company-active-map)
-    (bind-key "M-?"   #'company-show-doc-buffer company-active-map)
-    (bind-key "M-."   #'company-show-location company-active-map)
-    (bind-key "M-/"   #'company-complete-common org-mode-map)
-    )
+(use-package company
+  :ensure t
+  :bind (("M-/" . company-complete))
+  :config
+  (setq company-echo-delay 0     ; remove blinking
+        company-show-numbers t   ; show numbers for easy selection
+        company-selection-wrap-around t
+        company-require-match nil
+        company-dabbrev-ignore-case t
+        company-dabbrev-ignore-invisible t
+        company-dabbrev-other-buffers t
+        company-dabbrev-downcase nil
+        company-dabbrev-code-everywhere t
+        company-tooltip-align-annotations t
+        company-minimum-prefix-length 1
+        company-global-modes '(not)
+        company-lighter-base "(C)")
+  (global-company-mode 1)
+  :bind (:map company-active-map
+              ("C-n" . company-select-next)
+              ("C-p" . company-select-previous)
+              ("M-?" . company-show-doc-buffer)
+              ("M-." . company-show-location)
+              )
+  )
 #+END_SRC
 *** C/C++
 #+BEGIN_SRC emacs-lisp
@@ -662,6 +690,13 @@ value, scrolling continues until there is no more output.
     (setq ediff-window-setup-function 'ediff-setup-windows-plain)
   )
 #+END_SRC
+** Do the Right Thing Indenting
+Attempts to automatically identify the right indentation for a file
+#+BEGIN_SRC emacs-lisp
+(use-package dtrt-indent
+  :ensure t
+)  
+#+END_SRC
 ** VCL --editing varnish configuration files
 #+BEGIN_SRC emacs-lisp
   (use-package vcl-mode
@@ -1024,109 +1059,111 @@ This can be used to link things pretty quickly if necessary
 #+END_SRC
 ** LaTeX
 #+BEGIN_SRC emacs-lisp
-  (use-package tex
-    :defer t
-    :ensure auctex
+(use-package tex
+  :defer t
+  :ensure auctex
+  :config
+  ; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
+  ;; REFTEX (much enhanced management of cross-ref, labels, etc)
+  ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
+  ; (autoload 'reftex-mode     "reftex" "RefTeX Minor Mode" t)
+  ; (autoload 'turn-on-reftex  "reftex" "RefTeX Minor Mode" nil)
+  ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
+  ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
+  (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
+  (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
+  (add-hook 'LaTeX-mode-hook 'outline-minor-mode)   ; with AUCTeX LaTeX mode
+  (add-hook 'latex-mode-hook 'outline-minor-mode)   ; with Emacs latex mode
+
+  (setq-default reftex-plug-into-AUCTeX t)
+  ;; support fake section headers
+  (setq TeX-outline-extra
+        '(("%chapter" 1)
+          ("%section" 2)
+          ("%subsection" 3)
+          ("%subsubsection" 4)
+          ("%paragraph" 5)))
+  ;; add font locking to the headers
+  (font-lock-add-keywords
+   'latex-mode
+   '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
+      0 'font-lock-keyword-face t)
+     ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
+     ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
+     ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
+     ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
+     ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))
+
+  ;; use smart quotes by default instead of `` and ''
+  ;; taken from http://kieranhealy.org/esk/kjhealy.html
+  (setq TeX-open-quote "“")
+  (setq TeX-close-quote "”")
+
+  ;; (TeX-add-style-hook
+  ;;  "latex"
+  ;;  (lambda ()
+  ;;    (TeX-add-symbols
+  ;;     '("DLA" 1))))
+  ;; (custom-set-variables
+  ;;  '(font-latex-user-keyword-classes 
+  ;;    '(("fixme" 
+  ;;       ("DLA" "RZ")
+  ;;       font-lock-function-name-face 2 (command 1 t))))
+  ;; ) 
+  (setq-default TeX-parse-self t)
+  (setq-default TeX-auto-save t)
+  (setq-default TeX-master nil)
+  (add-to-list 'LaTeX-font-list
+               '(?\C-a "\\alert{","}"))
+  (eval-after-load
+      "latex"
+    '(TeX-add-style-hook
+      "cleveref"
+      (lambda ()
+        (if (boundp 'reftex-ref-style-alist)
+            (add-to-list
+             'reftex-ref-style-alist
+             '("Cleveref" "cleveref"
+               (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
+        (reftex-ref-style-activate "Cleveref")
+        (TeX-add-symbols
+         '("cref" TeX-arg-ref)
+         '("Cref" TeX-arg-ref)
+         '("cpageref" TeX-arg-ref)
+         '("Cpageref" TeX-arg-ref)))))
+  (eval-after-load
+      "latex"
+    '(add-to-list 'LaTeX-fill-excluded-macros
+                  '("Sexpr")))
+
+  (use-package font-latex
     :config
-    ; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
-    ;; REFTEX (much enhanced management of cross-ref, labels, etc)
-    ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
-    ; (autoload 'reftex-mode     "reftex" "RefTeX Minor Mode" t)
-    ; (autoload 'turn-on-reftex  "reftex" "RefTeX Minor Mode" nil)
-    ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
-    ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
-    (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
-    (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
-    (add-hook 'LaTeX-mode-hook 'outline-minor-mode)   ; with AUCTeX LaTeX mode
-    (add-hook 'latex-mode-hook 'outline-minor-mode)   ; with Emacs latex mode
-
-    (setq-default reftex-plug-into-AUCTeX t)
-    ;; support fake section headers
-    (setq TeX-outline-extra
-          '(("%chapter" 1)
-            ("%section" 2)
-            ("%subsection" 3)
-            ("%subsubsection" 4)
-            ("%paragraph" 5)))
-    ;; add font locking to the headers
-    (font-lock-add-keywords
-     'latex-mode
-     '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
-        0 'font-lock-keyword-face t)
-       ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
-       ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
-       ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
-       ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
-       ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))
-
-    ;; use smart quotes by default instead of `` and ''
-    ;; taken from http://kieranhealy.org/esk/kjhealy.html
-    (setq TeX-open-quote "“")
-    (setq TeX-close-quote "”")
-
-    ;; (TeX-add-style-hook
-    ;;  "latex"
-    ;;  (lambda ()
-    ;;    (TeX-add-symbols
-    ;;     '("DLA" 1))))
-    ;; (custom-set-variables
-    ;;  '(font-latex-user-keyword-classes 
-    ;;    '(("fixme" 
-    ;;       ("DLA" "RZ")
-    ;;       font-lock-function-name-face 2 (command 1 t))))
-    ;; ) 
-    (setq-default TeX-parse-self t)
-    (setq-default TeX-auto-save t)
-    (setq-default TeX-master nil)
-    (eval-after-load
-        "latex"
-      '(TeX-add-style-hook
-        "cleveref"
-        (lambda ()
-          (if (boundp 'reftex-ref-style-alist)
-              (add-to-list
-               'reftex-ref-style-alist
-               '("Cleveref" "cleveref"
-                 (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
-          (reftex-ref-style-activate "Cleveref")
-          (TeX-add-symbols
-           '("cref" TeX-arg-ref)
-           '("Cref" TeX-arg-ref)
-           '("cpageref" TeX-arg-ref)
-           '("Cpageref" TeX-arg-ref)))))
-    (eval-after-load
-        "latex"
-      '(add-to-list 'LaTeX-fill-excluded-macros
-                    '("Sexpr")))
-
-    (use-package font-latex
-      :config
-      (setq font-latex-match-reference-keywords
-            '(
-              ("fref" "{")
-              ("Fref" "{")
-              ("citep" "{")
-              ("citet" "{")
-              ("acs" "{")
-              ("acsp" "{")
-              ("ac" "{")
-              ("acp" "{")
-              ("acl" "{")
-              ("aclp" "{")
-              ("acsu" "{")
-              ("aclu" "{")
-              ("acused" "{")
-              ("DLA" "{")
-              ("RZ" "{")
-              ("OM" "{")
-              ("DL" "{")
-              ("fixme" "{"))
-            )
-      )
-    (setq font-latex-fontify-script nil)
-    (setq font-latex-fontify-sectioning (quote color))
-    (setq font-latex-script-display (quote (nil)))
-  )
+    (setq font-latex-match-reference-keywords
+          '(
+            ("fref" "{")
+            ("Fref" "{")
+            ("citep" "{")
+            ("citet" "{")
+            ("acs" "{")
+            ("acsp" "{")
+            ("ac" "{")
+            ("acp" "{")
+            ("acl" "{")
+            ("aclp" "{")
+            ("acsu" "{")
+            ("aclu" "{")
+            ("acused" "{")
+            ("DLA" "{")
+            ("RZ" "{")
+            ("OM" "{")
+            ("DL" "{")
+            ("fixme" "{"))
+          )
+    )
+  (setq font-latex-fontify-script nil)
+  (setq font-latex-fontify-sectioning (quote color))
+  (setq font-latex-script-display (quote (nil)))
+)
 
 #+END_SRC
 ** ESS
@@ -1187,15 +1224,26 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 
 ** Polymode
 #+BEGIN_SRC emacs-lisp
-  (use-package polymode
-    :config
-    (use-package poly-R)
-    (use-package poly-noweb)
-    (use-package poly-markdown)
-    :mode ("\\.Snw" . poly-noweb+r-mode)
-    :mode ("\\.Rnw" . poly-noweb+r-mode)
-    :mode ("\\.Rmd" . poly-markdown+r-mode)
-    )
+(use-package poly-noweb
+  :ensure t
+  :after polymode
+
+  )
+(use-package poly-markdown
+  :ensure t
+  :after polymode
+  )
+(use-package poly-R
+  :ensure t
+  :after (:all polymode poly-markdown poly-noweb)
+  ; :mode ("\\.Snw" . poly-noweb+r-mode)
+  ; :mode ("\\.Rnw" . poly-noweb+r-mode)
+  ; :mode ("\\.Rmd" . poly-markdown+r-mode)
+  )
+(use-package polymode
+  :ensure t
+  )
+
 #+END_SRC
 
 ** Outlining
@@ -1257,6 +1305,8 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 ** Web Mode
 #+BEGIN_SRC emacs-lisp
   (use-package web-mode
+    :load-path "/home/don/projects/web-mode/"
+    :mode ("\\.\\(tx|tmpl\\)\\'" . web-mode)
     :config
     (add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))
     (setq web-mode-enable-engine-detection t)
@@ -1307,53 +1357,85 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
     (setq default-abbrev-mode t))
 #+END_SRC
 
+** Go language
+#+BEGIN_SRC emacs-lisp
+(use-package go-mode
+             :diminish "go"
+             :mode "\\.go"
+             )
+#+END_SRC
+
+** Expand region
+#+BEGIN_SRC emacs-lisp
+(use-package expand-region
+  :bind (("C-=" . 'er/expand-region))
+  )
+#+END_SRC
+
+** Dockerfile
+#+BEGIN_SRC emacs-lisp
+(use-package dockerfile-mode
+  :mode "Dockerfile"
+  )
+#+END_SRC
+
+** Beancount
+#+BEGIN_SRC emacs-lisp
+(use-package beancount
+  :load-path "~/lib/emacs_el/beancount-mode/"
+  :ensure f
+  :mode "\\.beancount\\'"
+  
+  )
+#+END_SRC
 * Email
 ** Mutt
 *** Message-mode
 #+BEGIN_SRC emacs-lisp
-  (use-package message
-    :ensure f
-    :diminish (message "✉")
-    :mode ("muttng-[a-z0-9]+-[0-9]+-" . message-mode)
-    :mode ("mutt-[a-z0-9]+-[0-9]+-" . message-mode)
-    :hook 'my/message-mode-settings
-    :hook 'turn-on-flyspell
-    :bind (:map message-mode-map
-        ("C-c C-a" . my/post-attach-file))
-    :delight (message-mode "✉")
-    :config
-    (defun my/message-mode-settings ()
-      (font-lock-add-keywords nil
-                  '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
-                 (0 'message-multiply-quoted-text-face))
-                ("^[ \t]*>[ \t]*>.*$"
-                 (0 'message-double-quoted-text-face))))
-      )
+(use-package message
+  :ensure f
+  :diminish (message "✉")
+  :mode ("muttng-[a-z0-9]+-[0-9]+-" . message-mode)
+  :mode ("mutt-[a-z0-9]+-[0-9]+-" . message-mode)
+  :hook 'my/message-mode-settings
+  :hook 'turn-on-flyspell
+  :bind (:map message-mode-map
+      ("C-c C-a" . my/post-attach-file))
+  :delight (message-mode "✉")
+  :config
+  (defun my/message-mode-settings ()
+    (font-lock-add-keywords nil
+                '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
+               (0 'message-multiply-quoted-text-face))
+              ("^[ \t]*>[ \t]*>.*$"
+               (0 'message-double-quoted-text-face))))
+    )
 
-    (defun my/post-attach-file ()
-      "Prompt for an attachment."
-      (interactive)
-      (let ((file (read-file-name "Attach file: " nil nil t nil)))
-        (my/header-attach-file file "")))
-
-    (defun my/header-attach-file (file description)
-      "Attach a FILE to the current message (works with Mutt).
-    Argument DESCRIPTION MIME description."
-      (interactive "fAttach file: \nsDescription: ")
-      (when (> (length file) 0)
-    (save-excursion
-      (save-match-data
-        (save-restriction
-          (widen)
-          (goto-char (point-min))
-          (search-forward-regexp "^$")
-          (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
-                  description "\n"))
-          (message (concat "Attached '" file "'."))
-          (setq post-has-attachment t))))))
-
-    (setq mail-yank-prefix "> ")
-  )
+  (defun my/post-attach-file ()
+    "Prompt for an attachment."
+    (interactive)
+    (let ((file (read-file-name "Attach file: " nil nil t nil)))
+      (my/header-attach-file file "")))
+
+  (defun my/header-attach-file (file description)
+    "Attach a FILE to the current message (works with Mutt).
+  Argument DESCRIPTION MIME description."
+    (interactive "fAttach file: \nsDescription: ")
+    (when (> (length file) 0)
+  (save-excursion
+    (save-match-data
+      (save-restriction
+        (widen)
+        (goto-char (point-min))
+        (search-forward-regexp "^$")
+        (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
+                description "\n"))
+        (message (concat "Attached '" file "'."))
+        (setq post-has-attachment t))))))
+
+  (setq mail-yank-prefix "> ")
+  (setq mail-header-separator "") ; fix broken header detection
+)
 #+END_SRC
 *** Muttrc mode
 #+BEGIN_SRC emacs-lisp
@@ -1391,6 +1473,24 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq-default org-log-done 'time)
   (setq-default org-agenda-ndays 5)
 
+  (setq org-agenda-sticky t)
+  (defun dla/show-org-agenda ()
+    (interactive)
+    (let (agendabuffer
+          '(delq nil 
+                (mapcar (lambda (x)
+                          (and (string-match-p
+                                "\*Org Agenda.*\*"
+                                (buffer-name x))
+                               x)
+                          )
+                        (buffer-list))))
+      (if agendabuffer
+          (switch-to-buffer
+           (buffer-name agendabuffer))
+        (org-agenda-list)))
+      (delete-other-windows))
+
   ;; agenda configuration
   ;; Do not dim blocked tasks
   (setq org-agenda-dim-blocked-tasks nil)
@@ -1484,6 +1584,8 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
             "~/projects/org-notes/wildman.org"
             "~/projects/org-notes/uddin.org"
             "~/projects/org-notes/reviews.org"
+            "~/projects/org-notes/laurel.org"
+            "~/projects/org-notes/from-calendar.org"
             "~/org-mode/from-mobile.org"
             "~/projects/org-notes/fh.org")))
 
@@ -1578,12 +1680,12 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
           ("<f9> I" . bh/punch-in)
           ("<f9> O" . bh/punch-out)
           ("<f9> SPC" . bh/clock-in-last-task)
-          ("<f12>" . org-agenda)
+          ("<f12>" . dla/show-org-agenda)
           ;; ("<f5>" . bh/org-todo)
           ("<S-f5>" . bh/widen)
           ("<f7>" . bh/set-truncate-lines)
           ("<f8>" . org-cycle-agenda-files)
-          ("<f9> <f9>" . org-agenda)
+          ("<f9> <f9>" . dla/show-org-agenda)
           ("<f9> b" . bbdb)
           ("<f9> c" . calendar)
           ("<f9> f" . boxquote-insert-file)
@@ -1654,6 +1756,16 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   ;           (lambda ()
   ;             (add-hook 'before-save-hook 'my/org-add-ids-to-headlines-in-file nil 'local)))
 #+END_SRC
+** Org ID locations
+#+BEGIN_SRC emacs-lisp
+(use-package find-lisp
+  :ensure t)
+(setq org-agenda-text-search-extra-files
+      (append '(agenda-archives)
+              (find-lisp-find-files "~/projects/org-notes" "\.org$")
+              (find-lisp-find-files "~/projects/org-notes" "\.org_archive$")
+              ))
+#+END_SRC
 ** Keywords (TODO)
 #+BEGIN_SRC emacs-lisp
   (setq org-todo-keywords
@@ -1754,7 +1866,9 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
     (setq my-org-protocol-flag t))
 
   (defadvice org-insert-todo-heading (after dla/create-id activate)
-    (org-id-get-create)
+    (unless (org-in-item-p)
+      (org-id-get-create)
+      )
     )
 
   ;; org modules
@@ -1862,29 +1976,33 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 #+END_SRC
 ** General Org Babel Configuration
 #+BEGIN_SRC emacs-lisp
-  ;; org babel support
-  (org-babel-do-load-languages
-   'org-babel-load-languages
-   '((emacs-lisp . t )
-     (R . t)
-     (latex . t)
-     (ditaa . t)
-     (dot . t)
-     ))
-  ;; use graphviz-dot for dot things
-  (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
-  ;; org-babel-by-backend
-  (defmacro org-babel-by-backend (&rest body)
-     `(case (if (boundp 'backend) 
-                (org-export-backend-name backend)
-              nil) ,@body))
-
-  (defun my/fix-inline-images ()
-    (when org-inline-image-overlays
-      (org-redisplay-inline-images)))
-
-  (add-hook 'org-babel-after-execute-hook
-             'my/fix-inline-images)
+;; org babel support
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t )
+   (R . t)
+   (latex . t)
+   (ditaa . t)
+   (dot . t)
+   ))
+;; set the right path to ditaa.jar
+(setq org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar")
+;; use graphviz-dot for dot things
+(add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
+;; do not indent begin_src blocks
+(setq org-edit-src-content-indentation 0)
+;; org-babel-by-backend
+(defmacro org-babel-by-backend (&rest body)
+   `(case (if (boundp 'backend) 
+              (org-export-backend-name backend)
+            nil) ,@body))
+
+(defun my/fix-inline-images ()
+  (when org-inline-image-overlays
+    (org-redisplay-inline-images)))
+
+(add-hook 'org-babel-after-execute-hook
+           'my/fix-inline-images)
 
 #+END_SRC
 ** LaTeX configuration
@@ -1892,402 +2010,406 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
    :ID:       7135ba17-6a50-4eed-84ca-b90afa5b12f8
    :END:
 #+BEGIN_SRC emacs-lisp
-  (require 'ox-latex)
-  (add-to-list 'org-latex-classes
-           '("memarticle"
-         "\\documentclass[11pt,oneside,article]{memoir}\n"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (setq org-beamer-outline-frame-options "")
-  (add-to-list 'org-latex-classes
-           '("beamer"
-         "\\documentclass[ignorenonframetext]{beamer}
-  [NO-DEFAULT-PACKAGES]
-  [PACKAGES]
-  [EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("membook"
-         "\\documentclass[11pt,oneside]{memoir}\n"
-         ("\\chapter{%s}" . "\\chapter*{%s}")
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("letter"
-         "\\documentclass[11pt]{letter}
-  [NO-DEFAULT-PACKAGES]
-  [PACKAGES]
-  [EXTRA]"
-     ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("dlacv"
-         "\\documentclass{dlacv}
-  [NO-DEFAULT-PACKAGES]
-  [NO-PACKAGES]
-  [NO-EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-
-  (add-to-list 'org-latex-classes
-           '("dlaresume"
-         "\\documentclass{dlaresume}
-  [NO-DEFAULT-PACKAGES]
-  [NO-PACKAGES]
-  [NO-EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-
-  ;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
-  ;; but adapted to use latexmk 4.22 or higher.  
-  (setq org-latex-pdf-process '("latexmk -f -pdflatex=xelatex -bibtex -use-make -pdf %f"))
-
-  ;; Default packages included in /every/ tex file, latex, pdflatex or xelatex
-  (setq org-latex-default-packages-alist
-    '(("" "amsmath" t)
-      ("" "unicode-math" t)
-      ))
-  (setq org-latex-packages-alist
-    '(("" "graphicx" t)
-      ("" "fontspec" t)
-      ("" "xunicode" t)
-      ("" "hyperref" t)
-      ("" "url" t)
-      ("" "rotating" t)
-      ("" "longtable" nil)
-      ("" "float" )))
-
-  ;; make equations larger
-  (setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
-
-  (defun org-create-formula--latex-header ()
-    "Return LaTeX header appropriate for previewing a LaTeX snippet."
-    (let ((info (org-combine-plists (org-export--get-global-options
-             (org-export-get-backend 'latex))
-            (org-export--get-inbuffer-options
-             (org-export-get-backend 'latex)))))
-      (org-latex-guess-babel-language
-       (org-latex-guess-inputenc
-    (org-splice-latex-header
-     org-format-latex-header
-     org-latex-default-packages-alist
-     nil t
-     (plist-get info :latex-header)))
-       info)))
-
-
-  ; support ignoring headers in org mode export to latex
-  ; from http://article.gmane.org/gmane.emacs.orgmode/67692
-  (defadvice org-latex-headline (around my-latex-skip-headlines
-                    (headline contents info) activate)
-    (if (member "ignoreheading" (org-element-property :tags headline))
-    (setq ad-return-value contents)
-      ad-do-it))
-
-  ;; keep latex logfiles
-
-  (setq org-latex-remove-logfiles nil)
-
-  ;; Resume clocking task when emacs is restarted
-  (org-clock-persistence-insinuate)
-  ;;
-  ;; Show lot of clocking history so it's easy to pick items off the C-F11 list
-  (setq org-clock-history-length 23)
-  ;; Resume clocking task on clock-in if the clock is open
-  (setq org-clock-in-resume t)
-  ;; Change tasks to NEXT when clocking in; this avoids clocking in when
-  ;; there are things like PHONE calls
-  (setq org-clock-in-switch-to-state 'bh/clock-in-to-next)
-  ;; Separate drawers for clocking and logs
-  (setq org-drawers (quote ("PROPERTIES" "LOGBOOK")))
-  ;; Save clock data and state changes and notes in the LOGBOOK drawer
-  (setq org-clock-into-drawer t)
-  (setq org-log-into-drawer t)
-  ;; Sometimes I change tasks I'm clocking quickly - this removes clocked tasks with 0:00 duration
-  (setq org-clock-out-remove-zero-time-clocks t)
-  ;; Clock out when moving task to a done state
-  (setq org-clock-out-when-done t)
-  ;; Save the running clock and all clock history when exiting Emacs, load it on startup
-  (setq org-clock-persist t)
-  ;; Do not prompt to resume an active clock
-  (setq org-clock-persist-query-resume nil)
-  ;; Enable auto clock resolution for finding open clocks
-  (setq org-clock-auto-clock-resolution (quote when-no-clock-is-running))
-  ;; Include current clocking task in clock reports
-  (setq org-clock-report-include-clocking-task t)
-
-  ;; the cache seems to be broken
-  (setq org-element-use-cache nil)
-
-  (defvar bh/keep-clock-running nil)
-
-  (defun bh/is-task-p ()
-    "Any task with a todo keyword and no subtask"
-    (save-restriction
-      (widen)
-      (let ((has-subtask)
-            (subtree-end (save-excursion (org-end-of-subtree t)))
-            (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
-        (save-excursion
-          (forward-line 1)
-          (while (and (not has-subtask)
-                      (< (point) subtree-end)
-                      (re-search-forward "^\*+ " subtree-end t))
-            (when (member (org-get-todo-state) org-todo-keywords-1)
-              (setq has-subtask t))))
-        (and is-a-task (not has-subtask)))))
-  (defun bh/is-project-p ()
-    "Any task with a todo keyword subtask"
-    (save-restriction
-      (widen)
-      (let ((has-subtask)
-            (subtree-end (save-excursion (org-end-of-subtree t)))
-            (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
-        (save-excursion
-          (forward-line 1)
-          (while (and (not has-subtask)
-                      (< (point) subtree-end)
-                      (re-search-forward "^\*+ " subtree-end t))
-            (when (member (org-get-todo-state) org-todo-keywords-1)
-              (setq has-subtask t))))
-        (and is-a-task has-subtask))))
-
-  (defun bh/is-subproject-p ()
-    "Any task which is a subtask of another project"
-    (let ((is-subproject)
+(use-package ox-extra
+  :config
+  (ox-extras-activate '(ignore-headlines)))
+(require 'ox-latex)
+(add-to-list 'org-latex-classes
+         '("memarticle"
+       "\\documentclass[11pt,oneside,article]{memoir}\n"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(setq org-beamer-outline-frame-options "")
+(add-to-list 'org-latex-classes
+         '("beamer"
+       "\\documentclass[ignorenonframetext]{beamer}
+[NO-DEFAULT-PACKAGES]
+[PACKAGES]
+[EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("membook"
+       "\\documentclass[11pt,oneside]{memoir}\n"
+       ("\\chapter{%s}" . "\\chapter*{%s}")
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("letter"
+       "\\documentclass[11pt]{letter}
+[NO-DEFAULT-PACKAGES]
+[PACKAGES]
+[EXTRA]"
+   ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("dlacv"
+       "\\documentclass{dlacv}
+[NO-DEFAULT-PACKAGES]
+[NO-PACKAGES]
+[NO-EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+
+(add-to-list 'org-latex-classes
+         '("dlaresume"
+       "\\documentclass{dlaresume}
+[NO-DEFAULT-PACKAGES]
+[NO-PACKAGES]
+[NO-EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+
+;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
+;; but adapted to use latexmk 4.22 or higher.  
+(setq org-latex-pdf-process '("latexmk -f -pdflatex=xelatex -bibtex -use-make -pdf %f"))
+
+;; Default packages included in /every/ tex file, latex, pdflatex or xelatex
+(setq org-latex-default-packages-alist
+  '(("" "amsmath" t)
+    ("" "unicode-math" t)
+    ))
+(setq org-latex-packages-alist
+  '(("" "graphicx" t)
+    ("" "fontspec" t)
+    ("" "xunicode" t)
+    ("" "hyperref" t)
+    ("" "url" t)
+    ("" "rotating" t)
+    ("" "longtable" nil)
+    ("" "float" )))
+
+;; make equations larger
+(setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
+
+(defun org-create-formula--latex-header ()
+  "Return LaTeX header appropriate for previewing a LaTeX snippet."
+  (let ((info (org-combine-plists (org-export--get-global-options
+           (org-export-get-backend 'latex))
+          (org-export--get-inbuffer-options
+           (org-export-get-backend 'latex)))))
+    (org-latex-guess-babel-language
+     (org-latex-guess-inputenc
+  (org-splice-latex-header
+   org-format-latex-header
+   org-latex-default-packages-alist
+   nil t
+   (plist-get info :latex-header)))
+     info)))
+
+
+; support ignoring headers in org mode export to latex
+; from http://article.gmane.org/gmane.emacs.orgmode/67692
+(defadvice org-latex-headline (around my-latex-skip-headlines
+                  (headline contents info) activate)
+  (if (member "ignoreheading" (org-element-property :tags headline))
+  (setq ad-return-value contents)
+    ad-do-it))
+
+;; keep latex logfiles
+
+(setq org-latex-remove-logfiles nil)
+
+;; Resume clocking task when emacs is restarted
+(org-clock-persistence-insinuate)
+;;
+;; Show lot of clocking history so it's easy to pick items off the C-F11 list
+(setq org-clock-history-length 23)
+;; Resume clocking task on clock-in if the clock is open
+(setq org-clock-in-resume t)
+;; Change tasks to NEXT when clocking in; this avoids clocking in when
+;; there are things like PHONE calls
+(setq org-clock-in-switch-to-state 'bh/clock-in-to-next)
+;; Separate drawers for clocking and logs
+(setq org-drawers (quote ("PROPERTIES" "LOGBOOK")))
+;; Save clock data and state changes and notes in the LOGBOOK drawer
+(setq org-clock-into-drawer t)
+(setq org-log-into-drawer t)
+;; Sometimes I change tasks I'm clocking quickly - this removes clocked tasks with 0:00 duration
+(setq org-clock-out-remove-zero-time-clocks t)
+;; Clock out when moving task to a done state
+(setq org-clock-out-when-done t)
+;; Save the running clock and all clock history when exiting Emacs, load it on startup
+(setq org-clock-persist t)
+;; Do not prompt to resume an active clock
+(setq org-clock-persist-query-resume nil)
+;; Enable auto clock resolution for finding open clocks
+(setq org-clock-auto-clock-resolution (quote when-no-clock-is-running))
+;; Include current clocking task in clock reports
+(setq org-clock-report-include-clocking-task t)
+
+;; the cache seems to be broken
+(setq org-element-use-cache nil)
+
+(defvar bh/keep-clock-running nil)
+
+(defun bh/is-task-p ()
+  "Any task with a todo keyword and no subtask"
+  (save-restriction
+    (widen)
+    (let ((has-subtask)
+          (subtree-end (save-excursion (org-end-of-subtree t)))
           (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
       (save-excursion
-        (while (and (not is-subproject) (org-up-heading-safe))
-          (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
-            (setq is-subproject t))))
-      (and is-a-task is-subproject)))
-
-
-  (defun bh/clock-in-to-next (kw)
-    "Switch a task from TODO to NEXT when clocking in.
-  Skips capture tasks, projects, and subprojects.
-  Switch projects and subprojects from NEXT back to TODO"
-    (when (not (and (boundp 'org-capture-mode) org-capture-mode))
-      (cond
-       ((and (member (org-get-todo-state) (list "TODO"))
-         (bh/is-task-p))
-    "NEXT")
-       ((and (member (org-get-todo-state) (list "NEXT"))
-         (bh/is-project-p))
-    "TODO"))))
-
-  (defun bh/punch-in (arg)
-    "Start continuous clocking and set the default task to the
-  selected task.  If no task is selected set the Organization task
-  as the default task."
-    (interactive "p")
-    (setq bh/keep-clock-running t)
-    (if (equal major-mode 'org-agenda-mode)
-    ;;
-    ;; We're in the agenda
-    ;;
-    (let* ((marker (org-get-at-bol 'org-hd-marker))
-           (tags (org-with-point-at marker (org-get-tags-at))))
-      (if (and (eq arg 4) tags)
-          (org-agenda-clock-in '(16))
-        (bh/clock-in-organization-task-as-default)))
-      ;;
-      ;; We are not in the agenda
-      ;;
-      (save-restriction
+        (forward-line 1)
+        (while (and (not has-subtask)
+                    (< (point) subtree-end)
+                    (re-search-forward "^\*+ " subtree-end t))
+          (when (member (org-get-todo-state) org-todo-keywords-1)
+            (setq has-subtask t))))
+      (and is-a-task (not has-subtask)))))
+(defun bh/is-project-p ()
+  "Any task with a todo keyword subtask"
+  (save-restriction
     (widen)
-    ; Find the tags on the current task
-    (if (and (equal major-mode 'org-mode) (not (org-before-first-heading-p)) (eq arg 4))
-        (org-clock-in '(16))
-      (bh/clock-in-organization-task-as-default)))))
-
-  (defun bh/punch-out ()
-    (interactive)
-    (setq bh/keep-clock-running nil)
-    (when (org-clock-is-active)
-      (org-clock-out))
-    (org-agenda-remove-restriction-lock))
-
-  (defun bh/clock-in-default-task ()
-    (save-excursion
-      (org-with-point-at org-clock-default-task
-    (org-clock-in))))
-
-  (defun bh/clock-in-parent-task ()
-    "Move point to the parent (project) task if any and clock in"
-    (let ((parent-task))
+    (let ((has-subtask)
+          (subtree-end (save-excursion (org-end-of-subtree t)))
+          (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
       (save-excursion
-    (save-restriction
-      (widen)
-      (while (and (not parent-task) (org-up-heading-safe))
+        (forward-line 1)
+        (while (and (not has-subtask)
+                    (< (point) subtree-end)
+                    (re-search-forward "^\*+ " subtree-end t))
+          (when (member (org-get-todo-state) org-todo-keywords-1)
+            (setq has-subtask t))))
+      (and is-a-task has-subtask))))
+
+(defun bh/is-subproject-p ()
+  "Any task which is a subtask of another project"
+  (let ((is-subproject)
+        (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
+    (save-excursion
+      (while (and (not is-subproject) (org-up-heading-safe))
         (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
-          (setq parent-task (point))))
-      (if parent-task
-          (org-with-point-at parent-task
-        (org-clock-in))
-        (when bh/keep-clock-running
-          (bh/clock-in-default-task)))))))
+          (setq is-subproject t))))
+    (and is-a-task is-subproject)))
 
-  (defvar bh/organization-task-id "e22cb8bf-07c7-408b-8f60-ff3aadac95e4")
 
-  (defun bh/clock-in-organization-task-as-default ()
-    (interactive)
-    (org-with-point-at (org-id-find bh/organization-task-id 'marker)
-      (org-clock-in '(16))))
-
-  (defun bh/clock-out-maybe ()
-    (when (and bh/keep-clock-running
-           (not org-clock-clocking-in)
-           (marker-buffer org-clock-default-task)
-           (not org-clock-resolving-clocks-due-to-idleness))
-      (bh/clock-in-parent-task)))
-
-  ; (add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
-
-  (require 'org-id)
-  (defun bh/clock-in-task-by-id (id)
-    "Clock in a task by id"
-    (org-with-point-at (org-id-find id 'marker)
-      (org-clock-in nil)))
-
-  (defun bh/clock-in-last-task (arg)
-    "Clock in the interrupted task if there is one
-  Skip the default task and get the next one.
-  A prefix arg forces clock in of the default task."
-    (interactive "p")
-    (let ((clock-in-to-task
-       (cond
-        ((eq arg 4) org-clock-default-task)
-        ((and (org-clock-is-active)
-          (equal org-clock-default-task (cadr org-clock-history)))
-         (caddr org-clock-history))
-        ((org-clock-is-active) (cadr org-clock-history))
-        ((equal org-clock-default-task (car org-clock-history)) (cadr org-clock-history))
-        (t (car org-clock-history)))))
-      (widen)
-      (org-with-point-at clock-in-to-task
-    (org-clock-in nil))))
-
-
-  (defun org-export-to-ods ()
-    (interactive)
-    (let ((csv-file "data.csv"))
-      (org-table-export csv-file "orgtbl-to-csv")
-      (org-odt-convert csv-file "ods" 'open)))
-
-  ; allow for zero-width-space to be a break in regexp too
-  ; (setcar org-emphasis-regexp-components "​ [:space:] \t('\"{")
-  ; (setcar (nthcdr 1 org-emphasis-regexp-components) "​ [:space:]- \t.,:!?;'\")}\\")
-  ; (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)
-
-  ;; support inserting screen shots
-  (defun my/org-insert-screenshot ()
-    "Take a screenshot into a time stamped unique-named file in the
-  same directory as the org-buffer and insert a link to this file."
-    (interactive)
-    (defvar my/org-insert-screenshot/filename)
-    (setq my/org-insert-screenshot/filename
-      (read-file-name
-       "Screenshot to insert: "
-       nil
-       (concat (buffer-file-name) "_" (format-time-string "%Y%m%d_%H%M%S") ".png")
-       )
-      )
-    (call-process "import" nil nil nil my/org-insert-screenshot/filename)
-    (insert (concat "[[" my/org-insert-screenshot/filename "]]"))
-    (org-display-inline-images))
-
-  (defun my/fix-inline-images ()
-    (when org-inline-image-overlays
-      (org-redisplay-inline-images)))
-
-  (add-hook 'org-babel-after-execute-hook 'my/fix-inline-images)
-
-  ;; use xelatex to preview with imagemagick
-  (add-to-list 'org-preview-latex-process-alist
-           '(xelateximagemagick
-        :programs ("xelatex" "convert")
-        :description "pdf > png"
-        :message "you need to install xelatex and imagemagick"
-        :use-xcolor t
-        :image-input-type "pdf"
-        :image-output-type "png"
-        :image-size-adjust (1.0 . 1.0)
-        :latex-compiler ("xelatex -interaction nonstopmode -output-directory %o %f")
-        :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O"))
-           )
-  ;; use xelatex by default
-  (setq org-preview-latex-default-process 'xelateximagemagick)
-
-  ; from http://orgmode.org/Changes.html
-  (defun my/org-repair-property-drawers ()
-    "Fix properties drawers in current buffer.
-   Ignore non Org buffers."
-    (interactive)
-    (when (eq major-mode 'org-mode)
-      (org-with-wide-buffer
-       (goto-char (point-min))
-       (let ((case-fold-search t)
-         (inline-re (and (featurep 'org-inlinetask)
-                 (concat (org-inlinetask-outline-regexp)
-                     "END[ \t]*$"))))
-     (org-map-entries
-      (lambda ()
-        (unless (and inline-re (org-looking-at-p inline-re))
-          (save-excursion
-        (let ((end (save-excursion (outline-next-heading) (point))))
-          (forward-line)
-          (when (org-looking-at-p org-planning-line-re) (forward-line))
-          (when (and (< (point) end)
-                 (not (org-looking-at-p org-property-drawer-re))
-                 (save-excursion
-                   (and (re-search-forward org-property-drawer-re end t)
-                    (eq (org-element-type
-                     (save-match-data (org-element-at-point)))
-                    'drawer))))
-            (insert (delete-and-extract-region
-                 (match-beginning 0)
-                 (min (1+ (match-end 0)) end)))
-            (unless (bolp) (insert "\n"))))))))))))
+(defun bh/clock-in-to-next (kw)
+  "Switch a task from TODO to NEXT when clocking in.
+Skips capture tasks, projects, and subprojects.
+Switch projects and subprojects from NEXT back to TODO"
+  (when (not (and (boundp 'org-capture-mode) org-capture-mode))
+    (cond
+     ((and (member (org-get-todo-state) (list "TODO"))
+       (bh/is-task-p))
+  "NEXT")
+     ((and (member (org-get-todo-state) (list "NEXT"))
+       (bh/is-project-p))
+  "TODO"))))
+
+(defun bh/punch-in (arg)
+  "Start continuous clocking and set the default task to the
+selected task.  If no task is selected set the Organization task
+as the default task."
+  (interactive "p")
+  (setq bh/keep-clock-running t)
+  (if (equal major-mode 'org-agenda-mode)
+  ;;
+  ;; We're in the agenda
+  ;;
+  (let* ((marker (org-get-at-bol 'org-hd-marker))
+         (tags (org-with-point-at marker (org-get-tags-at))))
+    (if (and (eq arg 4) tags)
+        (org-agenda-clock-in '(16))
+      (bh/clock-in-organization-task-as-default)))
+    ;;
+    ;; We are not in the agenda
+    ;;
+    (save-restriction
+  (widen)
+  ; Find the tags on the current task
+  (if (and (equal major-mode 'org-mode) (not (org-before-first-heading-p)) (eq arg 4))
+      (org-clock-in '(16))
+    (bh/clock-in-organization-task-as-default)))))
+
+(defun bh/punch-out ()
+  (interactive)
+  (setq bh/keep-clock-running nil)
+  (when (org-clock-is-active)
+    (org-clock-out))
+  (org-agenda-remove-restriction-lock))
+
+(defun bh/clock-in-default-task ()
+  (save-excursion
+    (org-with-point-at org-clock-default-task
+  (org-clock-in))))
+
+(defun bh/clock-in-parent-task ()
+  "Move point to the parent (project) task if any and clock in"
+  (let ((parent-task))
+    (save-excursion
+  (save-restriction
+    (widen)
+    (while (and (not parent-task) (org-up-heading-safe))
+      (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
+        (setq parent-task (point))))
+    (if parent-task
+        (org-with-point-at parent-task
+      (org-clock-in))
+      (when bh/keep-clock-running
+        (bh/clock-in-default-task)))))))
+
+(defvar bh/organization-task-id "e22cb8bf-07c7-408b-8f60-ff3aadac95e4")
+
+(defun bh/clock-in-organization-task-as-default ()
+  (interactive)
+  (org-with-point-at (org-id-find bh/organization-task-id 'marker)
+    (org-clock-in '(16))))
+
+(defun bh/clock-out-maybe ()
+  (when (and bh/keep-clock-running
+         (not org-clock-clocking-in)
+         (marker-buffer org-clock-default-task)
+         (not org-clock-resolving-clocks-due-to-idleness))
+    (bh/clock-in-parent-task)))
+
+; (add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
+
+(require 'org-id)
+(defun bh/clock-in-task-by-id (id)
+  "Clock in a task by id"
+  (org-with-point-at (org-id-find id 'marker)
+    (org-clock-in nil)))
+
+(defun bh/clock-in-last-task (arg)
+  "Clock in the interrupted task if there is one
+Skip the default task and get the next one.
+A prefix arg forces clock in of the default task."
+  (interactive "p")
+  (let ((clock-in-to-task
+     (cond
+      ((eq arg 4) org-clock-default-task)
+      ((and (org-clock-is-active)
+        (equal org-clock-default-task (cadr org-clock-history)))
+       (caddr org-clock-history))
+      ((org-clock-is-active) (cadr org-clock-history))
+      ((equal org-clock-default-task (car org-clock-history)) (cadr org-clock-history))
+      (t (car org-clock-history)))))
+    (widen)
+    (org-with-point-at clock-in-to-task
+  (org-clock-in nil))))
+
+
+(defun org-export-to-ods ()
+  (interactive)
+  (let ((csv-file "data.csv"))
+    (org-table-export csv-file "orgtbl-to-csv")
+    (org-odt-convert csv-file "ods" 'open)))
+
+; allow for zero-width-space to be a break in regexp too
+; (setcar org-emphasis-regexp-components "​ [:space:] \t('\"{")
+; (setcar (nthcdr 1 org-emphasis-regexp-components) "​ [:space:]- \t.,:!?;'\")}\\")
+; (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)
+
+;; support inserting screen shots
+(defun my/org-insert-screenshot ()
+  "Take a screenshot into a time stamped unique-named file in the
+same directory as the org-buffer and insert a link to this file."
+  (interactive)
+  (defvar my/org-insert-screenshot/filename)
+  (setq my/org-insert-screenshot/filename
+    (read-file-name
+     "Screenshot to insert: "
+     nil
+     (concat (buffer-file-name) "_" (format-time-string "%Y%m%d_%H%M%S") ".png")
+     )
+    )
+  (call-process "import" nil nil nil my/org-insert-screenshot/filename)
+  (insert (concat "[[" my/org-insert-screenshot/filename "]]"))
+  (org-display-inline-images))
+
+(defun my/fix-inline-images ()
+  (when org-inline-image-overlays
+    (org-redisplay-inline-images)))
+
+(add-hook 'org-babel-after-execute-hook 'my/fix-inline-images)
+
+;; use xelatex to preview with imagemagick
+(add-to-list 'org-preview-latex-process-alist
+         '(xelateximagemagick
+      :programs ("xelatex" "convert")
+      :description "pdf > png"
+      :message "you need to install xelatex and imagemagick"
+      :use-xcolor t
+      :image-input-type "pdf"
+      :image-output-type "png"
+      :image-size-adjust (1.0 . 1.0)
+      :latex-compiler ("xelatex -interaction nonstopmode -output-directory %o %f")
+      :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O"))
+         )
+;; use xelatex by default
+(setq org-preview-latex-default-process 'xelateximagemagick)
+
+; from http://orgmode.org/Changes.html
+(defun my/org-repair-property-drawers ()
+  "Fix properties drawers in current buffer.
+ Ignore non Org buffers."
+  (interactive)
+  (when (eq major-mode 'org-mode)
+    (org-with-wide-buffer
+     (goto-char (point-min))
+     (let ((case-fold-search t)
+       (inline-re (and (featurep 'org-inlinetask)
+               (concat (org-inlinetask-outline-regexp)
+                   "END[ \t]*$"))))
+   (org-map-entries
+    (lambda ()
+      (unless (and inline-re (org-looking-at-p inline-re))
+        (save-excursion
+      (let ((end (save-excursion (outline-next-heading) (point))))
+        (forward-line)
+        (when (org-looking-at-p org-planning-line-re) (forward-line))
+        (when (and (< (point) end)
+               (not (org-looking-at-p org-property-drawer-re))
+               (save-excursion
+                 (and (re-search-forward org-property-drawer-re end t)
+                  (eq (org-element-type
+                   (save-match-data (org-element-at-point)))
+                  'drawer))))
+          (insert (delete-and-extract-region
+               (match-beginning 0)
+               (min (1+ (match-end 0)) end)))
+          (unless (bolp) (insert "\n"))))))))))))
 
 #+END_SRC
 ** Org-Gcal
 #+BEGIN_SRC emacs-lisp
-  (use-package calfw
-    :ensure f
-    )
-  (use-package calfw-org
-    :ensure f
-    )
-  (use-package org-gcal
-    :ensure f
-    :config '((if (file-readable-p "~/.hide/org_gcal.el")
-                  (load-file "~/.hide/org_gcal.el"))
-              )
-    )
+(use-package calfw
+  :ensure f
+  )
+(use-package calfw-org
+  :ensure f
+  )
+(use-package org-gcal
+  :if (file-readable-p "~/.hide/org_gcal.el")
+  :ensure f
+  :config '((if (file-readable-p "~/.hide/org_gcal.el")
+                (load-file "~/.hide/org_gcal.el"))
+            )
+  )
 #+END_SRC
 ** appt integration
 #+BEGIN_SRC emacs-lisp
@@ -2346,8 +2468,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 * Debian
 ** debian-changelog
 #+BEGIN_SRC emacs-lisp
-  (use-package debian-changelog
-    :ensure f
+  (use-package debian-changelog-mode
     :mode "debian/changelog"
     :config
     (setq debian-changelog-mailing-address "don@debian.org")
@@ -2360,17 +2481,20 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq case-fold-search t)
   (setq confirm-kill-emacs (quote y-or-n-p))
   (setq cperl-lazy-help-time nil)
-  (display-time)
-  (setq display-time-24hr-format t)
-  (setq display-time-day-and-date t)
-  (display-time-mode 1)
+#+END_SRC
+** Turn on fontlock and icomplete
+#+BEGIN_SRC emacs-lisp
   (global-font-lock-mode 1)
   (icomplete-mode 1)
   (setq log-edit-keep-buffer t)
+#+END_SRC
+** Set mail User agent
+#+BEGIN_SRC emacs-lisp
   (setq mail-user-agent (quote sendmail-user-agent))
-  (setq markdown-enable-math t)
-  (setq markdown-follow-wiki-link-on-enter nil)
   (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
+#+END_SRC
+** PS Printing
+#+BEGIN_SRC emacs-lisp
   (setq ps-footer-font-size (quote (8 . 10)))
   (setq ps-header-font-size (quote (8 . 10)))
   (setq ps-header-title-font-size (quote (10 . 10)))
@@ -2378,19 +2502,20 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq ps-print-footer t)
   (setq ps-print-footer-frame nil)
   (setq ps-print-only-one-header t)
+#+END_SRC
+** Only single spacing on sentences
+#+BEGIN_SRC emacs-lisp
   (setq sentence-end "[.?!][]\"')]*\\($\\|   \\| \\)[    
   ]*")
   (setq sentence-end-double-space nil)
   ; enable matching parenthesis
+#+END_SRC
+** Display paren mode
+#+BEGIN_SRC emacs-lisp
   (show-paren-mode 1)
-  (tool-bar-mode -1)
-  (setq user-mail-address "don@donarmstrong.com")
-  (setq vc-delete-logbuf-window nil)
-  (setq vc-follow-symlinks t)
+  (setq show-paren-delay 0.2)
 
-  ;; use git before SVN; use CVS earlier, because I have CVS
-  ;; repositories inside of git directories
-  (setq vc-handled-backends (quote (CVS Git RCS SVN SCCS Bzr Hg Mtn Arch)))
+  (setq user-mail-address "don@donarmstrong.com")
 
   ;; switch back to the old primary selection method
   (setq x-select-enable-clipboard nil)
@@ -2441,7 +2566,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 If the envvar EMACS_SERVER_NAME is set, consider this a separate
 emacs, and use a different desktop file to restore history
 #+BEGIN_SRC emacs-lisp
-  (use-package emacs
+  (use-package desktop
     :demand
     :config
     (setq desktop-base-file-name