aboutsummaryrefslogtreecommitdiffstats
path: root/emacs
diff options
context:
space:
mode:
authorGravatar Tom Willemse2017-01-08 13:33:08 +0100
committerGravatar Tom Willemse2017-01-08 13:33:08 +0100
commit0ee856c6f35f9eda412534f9e2a7b5e4954e6af6 (patch)
tree4710d1224c8a8781d3462d0dbc364209f38bef10 /emacs
parent562791b0ae258ba68851a025f954614fed1f0dd1 (diff)
parenta6a88fd424ea806ce89ce6b2aa1e0d6664b918de (diff)
downloadnew-dotfiles-0ee856c6f35f9eda412534f9e2a7b5e4954e6af6.tar.gz
new-dotfiles-0ee856c6f35f9eda412534f9e2a7b5e4954e6af6.zip
Merge remote-tracking branch 'origin/index' into index
Diffstat (limited to 'emacs')
-rw-r--r--emacs/.emacs.d/GNUmakefile17
-rw-r--r--emacs/.emacs.d/init.org37
-rw-r--r--emacs/.emacs.d/init/oni-circe-init.org68
-rw-r--r--emacs/.emacs.d/init/oni-compilation-init.org21
-rw-r--r--emacs/.emacs.d/init/oni-emacs-lisp-mode-init.org6
-rw-r--r--emacs/.emacs.d/init/oni-org-init.org20
-rw-r--r--emacs/.emacs.d/init/oni-shr-init.org28
-rw-r--r--emacs/.emacs.d/site-lisp/oni-smt.el252
-rw-r--r--emacs/.emacs.d/snippets/.dir-locals.el2
-rw-r--r--emacs/.emacs.d/snippets/conf-mode/.yas-compiled-snippets.el8
-rw-r--r--emacs/.emacs.d/snippets/conf-mode/section8
-rw-r--r--emacs/.emacs.d/snippets/css-mode/.yas-compiled-snippets.el8
-rw-r--r--emacs/.emacs.d/snippets/css-mode/box-shadow5
-rw-r--r--emacs/.emacs.d/snippets/emacs-lisp-mode/.yas-compiled-snippets.el9
-rw-r--r--emacs/.emacs.d/snippets/emacs-lisp-mode/depends-on5
-rw-r--r--emacs/.emacs.d/snippets/emacs-lisp-mode/face5
-rw-r--r--emacs/.emacs.d/snippets/haml-mode/.yas-compiled-snippets.el10
-rw-r--r--emacs/.emacs.d/snippets/haml-mode/faq12
-rw-r--r--emacs/.emacs.d/snippets/html-mode/.yas-compiled-snippets.el12
-rw-r--r--emacs/.emacs.d/snippets/html-mode/block7
-rw-r--r--emacs/.emacs.d/snippets/html-mode/for8
-rw-r--r--emacs/.emacs.d/snippets/html-mode/generic-block8
-rw-r--r--emacs/.emacs.d/snippets/html-mode/script5
-rw-r--r--emacs/.emacs.d/snippets/html-mode/trans-with-cap6
-rw-r--r--emacs/.emacs.d/snippets/nxml-mode/.yas-compiled-snippets.el10
-rw-r--r--emacs/.emacs.d/snippets/nxml-mode/pencil-property7
-rw-r--r--emacs/.emacs.d/snippets/nxml-mode/pencil-property-value5
-rw-r--r--emacs/.emacs.d/snippets/nxml-mode/pencil-shortcut9
-rw-r--r--emacs/.emacs.d/snippets/org-mode/.yas-compiled-snippets.el11
-rw-r--r--emacs/.emacs.d/snippets/org-mode/codeblock7
-rw-r--r--emacs/.emacs.d/snippets/org-mode/heading9
-rw-r--r--emacs/.emacs.d/snippets/org-mode/project51
-rw-r--r--emacs/.emacs.d/snippets/org-mode/snippet14
-rw-r--r--emacs/.emacs.d/snippets/php-mode/.yas-compiled-snippets.el10
-rw-r--r--emacs/.emacs.d/snippets/php-mode/function8
-rw-r--r--emacs/.emacs.d/snippets/php-mode/wpheader.php13
-rw-r--r--emacs/.emacs.d/snippets/python-mode/.yas-compiled-snippets.el15
-rw-r--r--emacs/.emacs.d/snippets/python-mode/defm_empty7
-rw-r--r--emacs/.emacs.d/snippets/python-mode/form9
-rw-r--r--emacs/.emacs.d/snippets/python-mode/form_valid8
-rw-r--r--emacs/.emacs.d/snippets/python-mode/form_valid_with_return8
-rw-r--r--emacs/.emacs.d/snippets/python-mode/import_from6
-rw-r--r--emacs/.emacs.d/snippets/python-mode/method7
-rw-r--r--emacs/.emacs.d/snippets/python-mode/permission_guard9
-rw-r--r--emacs/.emacs.d/snippets/python-mode/url5
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/.yas-compiled-snippets.el18
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/ProductSeed5
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/ProductSeedHW5
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/ProductSeedHWGroup8
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/describe7
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/do6
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/factory9
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/fill_in5
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/mod11
-rw-r--r--emacs/.emacs.d/snippets/ruby-mode/reduce5
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/.yas-compiled-snippets.el18
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/_self5
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/blk7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/def7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/ext5
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/for7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/if7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/ife9
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/iif5
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/imp7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/mac7
-rw-r--r--emacs/.emacs.d/snippets/twig-mode/set5
-rw-r--r--emacs/.emacs.d/vendor-lisp/circe-serenity/circe-serenity.el205
68 files changed, 960 insertions, 208 deletions
diff --git a/emacs/.emacs.d/GNUmakefile b/emacs/.emacs.d/GNUmakefile
index e5171d4..bbe5a76 100644
--- a/emacs/.emacs.d/GNUmakefile
+++ b/emacs/.emacs.d/GNUmakefile
@@ -6,7 +6,8 @@ SITE_LISPS = $(addsuffix c,$(filter-out $(UNWANTED),$(wildcard site-lisp/*.el)))
INIT_LISPS = $(addsuffix .elc,$(basename $(wildcard init/*.org)))
VENDOR_DIRS = $(wildcard vendor-lisp/*)
-all: $(SITE_LISPS) init.elc $(INIT_LISPS) $(AUTOLOADS_FILE)
+.PHONE: all snippets
+all: $(SITE_LISPS) init.elc $(INIT_LISPS) $(AUTOLOADS_FILE) snippets
%.el: %.org
$(call tangle,emacs-lisp)
@@ -28,3 +29,17 @@ $(AUTOLOADS_FILE): $(SITE_LISPS)
@$(EMACS) -batch \
-eval "(setq generated-autoload-file \"$(CURDIR)/$@\")" \
-eval "(update-directory-autoloads \"$(CURDIR)/site-lisp/\")"
+
+### Snippets
+
+SNIPPET_DIRS = $(wildcard snippets/*)
+COMPILED_SNIPPETS = $(addsuffix /.yas-compiled-snippets.el, $(SNIPPET_DIRS))
+
+%/.yas-compiled-snippets.el: %/*
+ @echo -e "\e[36mYAS\e[0m $(CURDIR)/snippets"
+ @$(EMACS) -batch \
+ -eval "(package-initialize)" \
+ -l yasnippet \
+ -eval "(yas-compile-directory \"$(CURDIR)/snippets\")"
+
+snippets: $(COMPILED_SNIPPETS)
diff --git a/emacs/.emacs.d/init.org b/emacs/.emacs.d/init.org
index 2e4c44f..8052c76 100644
--- a/emacs/.emacs.d/init.org
+++ b/emacs/.emacs.d/init.org
@@ -264,12 +264,33 @@ To start off, first I need to enable lexical binding.
* Theme
+ Load my personal theme. I sometimes change it to a different theme,
+ but for some reason I always come crawling back to it.
+
#+BEGIN_SRC emacs-lisp
(add-to-list 'custom-theme-load-path
(concat user-emacs-directory "vendor-lisp/yoshi-theme"))
(load-theme 'yoshi :no-confirm)
#+END_SRC
+ Load my personal SVG mode-line theme.
+
+ #+BEGIN_SRC emacs-lisp
+ (require 'svg-mode-line-themes)
+ (require 'oni-smt)
+
+ (smt/enable)
+ (smt/set-theme 'oni-smt)
+ #+END_SRC
+
+ Because SVG mode-line themes doesn't include the box around the
+ mode-line, remove it (my personal theme adds it as padding).
+
+ #+BEGIN_SRC emacs-lisp
+ (set-face-attribute 'mode-line nil :box nil)
+ (set-face-attribute 'mode-line-inactive nil :box nil)
+ #+END_SRC
+
* Diminish
I really don't need to see some of the minor modes.
@@ -466,6 +487,14 @@ To start off, first I need to enable lexical binding.
(add-hook 'minibuffer-setup-hook 'electric-pair-local-mode)
#+END_SRC
+* Libraries
+
+ - [[file:init/oni-shr-init.org][shr]]
+
+ #+BEGIN_SRC emacs-lisp
+ (with-eval-after-load 'shr (load "oni-shr-init"))
+ #+END_SRC
+
* Minor modes
- [[file:init/oni-company-init.org][Company mode]] :: A better auto completion system than auto
@@ -728,9 +757,15 @@ To start off, first I need to enable lexical binding.
- [[file:init/oni-scheme-init.org][scheme-mode]] :: Scheme is an awesome lisp variant.
#+BEGIN_SRC emacs-lisp
- (with-eval-after-load 'scheme-mode (load "oni-scheme-init"))
+ (with-eval-after-load 'scheme (load "oni-scheme-init"))
#+END_SRC
+ - [[file:init/oni-compilation-init.org][compilation-mode]]
+
+ #+BEGIN_SRC emacs-lisp
+ (with-eval-after-load 'compilation (load "oni-compilation-init"))
+ #+END_SRC
+
** Inferior Emacs lisp mode (ielm)
Enable paredit mode.
diff --git a/emacs/.emacs.d/init/oni-circe-init.org b/emacs/.emacs.d/init/oni-circe-init.org
index 7521c04..b7fd14e 100644
--- a/emacs/.emacs.d/init/oni-circe-init.org
+++ b/emacs/.emacs.d/init/oni-circe-init.org
@@ -5,6 +5,7 @@
(require 'circe-color-nicks)
(require 'circe-serenity)
(require 'oni-circe)
+ (require 'mowedline)
#+END_SRC
I switched to Circe from ERC because I couldn't make the
@@ -21,7 +22,9 @@ I spend most of my time on IRC on Freenode.
"#ninthfloor"
"#dispass"
"#linuxvoice"
- "#conkeror")
+ "#conkeror"
+ "#emacs-circe"
+ "#chicken")
:nickserv-password
,(oni-circe-get-password-for "irc.freenode.net")))
#+END_SRC
@@ -50,3 +53,66 @@ Serenity.
#+BEGIN_SRC emacs-lisp
(enable-circe-serenity)
#+END_SRC
+
+Add external tracking. Show the status of tracked buffers in
+mowedline instead in the mode-line. With color!
+
+This code has been generously donated by [[http://retroj.net][retroj]], the author of
+mowedline.
+
+First define a function to parse the text properties from the tracking
+buffers list so that highlights (from mentions) also appear in
+mowedline.
+
+#+BEGIN_SRC emacs-lisp
+ (defun mowedline-colorize-mode-line-spec (s)
+ (cond
+ ((stringp s) (string-trim s))
+ ((eq ':propertize (car s))
+ (let ((s (cadr s))
+ (face (plist-get (cddr s) 'face)))
+ (if face
+ `(color ,(face-foreground face)
+ ,(substring-no-properties s))
+ s)))
+ (t "")))
+#+END_SRC
+
+Also tell mowedline to use the dbus interface directly, instead of
+going through the command-line interface.
+
+#+BEGIN_SRC emacs-lisp
+ (setq mowedline-update-function 'mowedline-update/dbus)
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp
+ (defvar jjf-tracking-buffers '())
+ (defvar jjf-external-tracking-timer nil)
+ (defun jjf-external-tracking ()
+ (setq jjf-external-tracking-timer nil)
+ (mowedline-update
+ 'irc
+ (if (stringp jjf-tracking-buffers)
+ (mowedline-colorize jjf-tracking-buffers t)
+ (format "%S" (mapcar #'mowedline-colorize-mode-line-spec
+ jjf-tracking-buffers)))))
+
+ (defun oni:clear-irc-mowedline-widget ()
+ (mowedline-clear 'irc))
+
+ (defun jjf-external-tracking-advice (orig-fun &rest args)
+ "Update my external status bar when tracking computes a new
+ status line, and suppress tracking in the mode-line. Since
+ tracking-status may be called many times in quick succession, for
+ example on a make-frame-visible event, we use a short timer to
+ only call the updater once within a minimum duration."
+ (setq jjf-tracking-buffers (apply orig-fun args))
+ (when jjf-external-tracking-timer
+ (cancel-timer jjf-external-tracking-timer))
+ (setq jjf-external-tracking-timer
+ (run-at-time 0.2 nil 'jjf-external-tracking))
+ nil)
+
+ (advice-add 'tracking-status :around #'jjf-external-tracking-advice)
+ (add-hook 'kill-emacs-hook 'oni:clear-irc-mowedline-widget)
+#+END_SRC
diff --git a/emacs/.emacs.d/init/oni-compilation-init.org b/emacs/.emacs.d/init/oni-compilation-init.org
new file mode 100644
index 0000000..2813654
--- /dev/null
+++ b/emacs/.emacs.d/init/oni-compilation-init.org
@@ -0,0 +1,21 @@
+#+TITLE: Compilation mode configuration
+
+Scroll output in compilation mode.
+
+#+BEGIN_SRC emacs-lisp
+ (setq compilation-scroll-output t)
+#+END_SRC
+
+Show compilation buffers in a side window.
+
+#+BEGIN_SRC emacs-lisp
+ (add-to-list 'display-buffer-alist
+ `(,(rx bos "*compilation*" eos)
+ display-buffer-in-side-window))
+#+END_SRC
+
+Bury compilation buffers on successful compilation.
+
+#+BEGIN_SRC emacs-lisp
+ (bury-successful-compilation)
+#+END_SRC
diff --git a/emacs/.emacs.d/init/oni-emacs-lisp-mode-init.org b/emacs/.emacs.d/init/oni-emacs-lisp-mode-init.org
index 14a2a99..8050247 100644
--- a/emacs/.emacs.d/init/oni-emacs-lisp-mode-init.org
+++ b/emacs/.emacs.d/init/oni-emacs-lisp-mode-init.org
@@ -24,3 +24,9 @@ Enable flycheck mode to help me avoid errors.
#+BEGIN_SRC emacs-lisp
(add-hook 'emacs-lisp-mode-hook 'flycheck-mode)
#+END_SRC
+
+Enable namesless mode to help with viewing name-prefixed symbols.
+
+#+BEGIN_SRC emacs-lisp
+ (add-hook 'emacs-lisp-mode-hook 'nameless-mode)
+#+END_SRC
diff --git a/emacs/.emacs.d/init/oni-org-init.org b/emacs/.emacs.d/init/oni-org-init.org
index a7ea4f0..36f7be3 100644
--- a/emacs/.emacs.d/init/oni-org-init.org
+++ b/emacs/.emacs.d/init/oni-org-init.org
@@ -2,6 +2,7 @@
#+BEGIN_SRC emacs-lisp
(require 'org)
+ (require 'org-capture)
#+END_SRC
Tell org-mode to fontify code blocks in their specified languages.
@@ -21,3 +22,22 @@ Enable automatic text filling for org-mode.
#+BEGIN_SRC emacs-lisp
(add-hook 'org-mode-hook 'auto-fill-mode)
#+END_SRC
+
+* Org protocol
+
+ Load org-protocol to let external applications add information to
+ org.
+
+ #+BEGIN_SRC emacs-lisp
+ (require 'org-protocol)
+ #+END_SRC
+
+ This template is used by Conkeror to capture a bookmark into my
+ bookmarks file.
+
+ #+BEGIN_SRC emacs-lisp
+ (add-to-list 'org-capture-templates
+ '("b" "Bookmark" entry (file "~/documents/org/bookmarks.org")
+ "* %c\n\n %i"
+ :empty-lines 1))
+ #+END_SRC
diff --git a/emacs/.emacs.d/init/oni-shr-init.org b/emacs/.emacs.d/init/oni-shr-init.org
new file mode 100644
index 0000000..3aa8626
--- /dev/null
+++ b/emacs/.emacs.d/init/oni-shr-init.org
@@ -0,0 +1,28 @@
+#+TITLE: shr configuration
+
+#+BEGIN_SRC emacs-lisp
+ (require 'shr)
+#+END_SRC
+
+* Remove background colors
+
+ Define a procedure that removes the last argument it gets if there
+ are more than 3.
+
+ #+BEGIN_SRC emacs-lisp
+ (defun oni:shr-colorize-remove-last-arg (args)
+ "If ARGS has more than 3 items, remove the last one."
+ (if (> (length args) 3)
+ (butlast args)
+ args))
+ #+END_SRC
+
+ Add the function as a filter-args advice to
+ =shr-colorize-region=. The last (fourth) argument to that function
+ is the background color to use, it's optional, so removing it
+ effectively stops shr from adding background colors.
+
+ #+BEGIN_SRC emacs-lisp
+ (advice-add #'shr-colorize-region :filter-args
+ #'oni:shr-colorize-remove-last-arg)
+ #+END_SRC
diff --git a/emacs/.emacs.d/site-lisp/oni-smt.el b/emacs/.emacs.d/site-lisp/oni-smt.el
new file mode 100644
index 0000000..a39bc57
--- /dev/null
+++ b/emacs/.emacs.d/site-lisp/oni-smt.el
@@ -0,0 +1,252 @@
+;;; oni-smt.el --- My SVG mode-line theme -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2014 Tom Willemse
+
+;; Author: Tom Willemse <tom@ryuslash.org>
+;; Keywords: faces
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'svg-mode-line-themes)
+(require 'flycheck)
+
+;; (require 'mode-icons)
+
+(defun oni-smt-flycheck-errors-text (_)
+ "Show an indicator of the number of errors and warnings from flycheck."
+ (when flycheck-mode
+ (let* ((counts (flycheck-count-errors flycheck-current-errors))
+ (err-color (if (smt/window-active-p) "#a85454" "#969696"))
+ (warn-color (if (smt/window-active-p) "#a88654" "#969696"))
+ (info-color (if (smt/window-active-p) "#5476a8" "#969696"))
+ (err-count (alist-get 'error counts 0))
+ (warn-count (alist-get 'warning counts 0))
+ (info-count (alist-get 'info counts 0)))
+ `(tspan " " (tspan :fill ,err-color ,err-count)
+ "/" (tspan :fill ,warn-color ,warn-count)
+ "/" (tspan :fill ,info-color ,info-count)))))
+
+(smt/defwidget oni-smt-flycheck-errors
+ :text #'oni-smt-flycheck-errors-text)
+
+(defun oni-smt-jabber-activity-text (_)
+ "Show jabber activity indicator."
+ (if (and (smt/window-active-p)
+ (boundp 'jabber-activity-mode-string)
+ (not (equal jabber-activity-mode-string "")))
+ (concat jabber-activity-mode-string " ")))
+
+(smt/defwidget oni-smt-jabber-activity
+ :text #'oni-smt-jabber-activity-text)
+
+;;; TODO Turn:
+;; #("message: (FORMAT-STRING &rest ARGS)"
+;; 0 7 (face font-lock-function-name-face)
+;; 10 23 (face eldoc-highlight-function-argument))
+;;; into:
+;;; (tspan (tspan :fill (fg-color font-lock-function-name-face) "message:")
+;;; " ("
+;;; (tspan :fill (fg-color highlight-function-argument) "FORMAT-STRING")
+;;; " &rest ARGS)")
+
+(defvar oni-smt-eldoc-message nil)
+
+(defun oni-smt-eldoc-minibuffer-message (format-string &rest args)
+ (if (minibufferp)
+ (progn
+ (add-hook 'minibuffer-exit-hook
+ (lambda () (setq oni-smt-eldoc-message nil
+ eldoc-mode-line-string nil
+ eldoc-last-message nil))
+ nil t)
+ (setq oni-smt-eldoc-message
+ (when (stringp format-string)
+ (apply 'format format-string args)))
+ (force-mode-line-update t))
+ (apply 'message format-string args)))
+
+(smt/defwidget oni-smt-eldoc-message
+ :text (lambda (widget)
+ (ignore widget)
+ (when oni-smt-eldoc-message
+ `(tspan :fill "#bfbfbf" " (" (tspan :fill "#5476a8" ,oni-smt-eldoc-message) ")"))))
+
+(defun oni-smt-yoshi-title-style (_)
+ "Fill color for either active or inactive windows."
+ (list :fill (if (smt/window-active-p) "#65a854" "#969696")
+ :font-weight (if (smt/window-active-p) "bold" "normal")))
+
+(smt/defwidget oni-smt-po-counters
+ :text (lambda (widget)
+ (ignore widget)
+ (when (eql major-mode 'po-mode)
+ (format " %dt+%df+%du+%do" po-translated-counter
+ po-fuzzy-counter po-untranslated-counter
+ po-obsolete-counter))))
+
+(smt/defwidget oni-smt-buffer-identification
+ :style 'oni-smt-yoshi-title-style
+ :text (lambda (widget)
+ (ignore widget)
+ (concat
+ (string-trim
+ (substring-no-properties
+ (format-mode-line mode-line-buffer-identification)))
+ (when (and (or buffer-file-name
+ buffer-offer-save)
+ (buffer-modified-p))
+ "*"))))
+
+(smt/defwidget oni-smt-current-dictionary
+ :text (lambda (widget)
+ (ignore widget)
+ (if flyspell-mode
+ (concat " " (or ispell-current-dictionary
+ ispell-local-dictionary
+ flyspell-default-dictionary)))))
+
+(smt/defwidget oni-smt-erc
+ :text (lambda (_)
+ (when (boundp 'erc-modified-channels-alist)
+ erc-modified-channels-object)))
+
+(smt/defwidget oni-smt-position
+ :text (lambda (_) (format-mode-line "%l/%c:%p")))
+
+(defun oni-smt-read-only/write (_)
+ "Show a locked or unlocked icon."
+ `(tspan :font-family "FontAwesome"
+ :font-size 13
+ ,(if buffer-read-only " " " ")))
+
+(smt/defwidget oni-smt-rwo
+ :text #'oni-smt-read-only/write)
+
+(defun oni-smt-extra-minor-modes (minor-modes)
+ "Add some more info to MINOR-MODES."
+ (if (boundp 'evil-state)
+ (let ((l (capitalize (elt (symbol-name evil-state) 0))))
+ `(tspan ,minor-modes (tspan :fill "#54a875" ,(char-to-string l))))
+ minor-modes))
+
+(add-function
+ :filter-return
+ (symbol-function 'smt/minor-mode-indicator-text)
+ #'oni-smt-extra-minor-modes)
+
+(smt/defrow oni-smt-right
+ :prototype 'default-right
+ :widgets '(oni-smt-jabber-activity
+ oni-smt-erc
+ major-mode
+ oni-smt-current-dictionary
+ oni-smt-flycheck-errors
+ version-control
+ minor-modes)
+ :margin 17)
+
+;; (defun smt/r-export-image (row theme)
+;; `(image
+;; :x ,(if (equal (smt/r-align row) "left")
+;; (* (smt/r-margin row)
+;; (frame-char-width))
+;; (- (smt/window-pixel-width)
+;; (* (smt/r-margin row)
+;; (frame-char-width))))
+;; :y 2
+;; :width 16
+;; :height 16
+;; :xlink:href ,(concat "data:image/png;base64,"
+;; (let ((name (nth 1 (mode-icons-get-icon-spec mode-name))))
+;; (if name
+;; (with-temp-buffer
+;; (insert-file-contents (concat (mode-icons-get-icon-file name) ".png"))
+;; (base64-encode-region (point-min) (point-max))
+;; (buffer-substring-no-properties (point-min) (point-max)))
+;; mode-name)))))
+
+;; (smt/defrow oni-smt-major-mode
+;; :prototype 'default-right
+;; :export 'smt/r-export-image
+;; :margin 40)
+
+(smt/defrow oni-smt-left
+ :prototype 'default-left
+ :widgets '(buffer-info
+ oni-smt-rwo
+ oni-smt-buffer-identification
+ oni-smt-po-counters
+ which-function
+ oni-smt-eldoc-message))
+
+(smt/defrow oni-smt-position
+ :prototype 'default-position
+ :widgets '(oni-smt-position))
+
+(defun oni-smt-major-mode-style (widget)
+ (ignore widget)
+ '(:fill "#ccc" :font-family "Signika" :filter nil
+ :font-weight "regular" :font-style "italic"))
+
+(defun oni-smt-background (_)
+ ""
+ (let ((stops '(("0%" "#484848" 0.3)
+ ("25%" "#484848" 0.3)
+ ("75%" "#484848" 0.3)
+ ("100%" "#111111" 0.3))))
+ `((\defs
+ (linearGradient
+ :id "twisted" :x1 "0%" :y1 "0%" :x2 "100%" :y2 "25%"
+ (stop :offset ,(first (nth 1 stops)) :stop-color ,(second (nth 1 stops)) :stop-opacity ,(third (nth 1 stops)))
+ (stop :offset ,(first (nth 2 stops)) :stop-color ,(second (nth 2 stops)) :stop-opacity ,(third (nth 2 stops)))
+ (stop :offset ,(first (nth 3 stops)) :stop-color ,(second (nth 3 stops)) :stop-opacity ,(third (nth 3 stops)))
+ (stop :offset ,(first (nth 4 stops)) :stop-color ,(second (nth 4 stops)) :stop-opacity ,(third (nth 4 stops)))))
+ (rect :width "100%" :height "100%" :x 0 :y 0 :fill "url(#twisted)"))))
+
+(defun oni-smt-overlay (_)
+ ""
+ (let ((stops '(("0%" "#FFFFFF" 0.1)
+ ("20%" "#111111" 0.0)
+ ("90%" "#111111" 0.5)
+ ("100%" "#111111" 0.8))))
+ `((\defs
+ (linearGradient
+ :id "over-gradient" :x1 "0%" :y1 "0%" :x2 "0%" :y2 "100%"
+ (stop :offset ,(first (nth 1 stops)) :stop-color ,(second (nth 1 stops)) :stop-opacity ,(third (nth 1 stops)))
+ (stop :offset ,(first (nth 2 stops)) :stop-color ,(second (nth 2 stops)) :stop-opacity ,(third (nth 2 stops)))
+ (stop :offset ,(first (nth 3 stops)) :stop-color ,(second (nth 3 stops)) :stop-opacity ,(third (nth 3 stops)))
+ (stop :offset ,(first (nth 4 stops)) :stop-color ,(second (nth 4 stops)) :stop-opacity ,(third (nth 4 stops)))))
+ (rect :width "100%" :height "100%" :x 0 :y 0 :fill "url(#over-gradient)"))))
+
+(smt/deftheme oni-smt
+ :prototype 'black-crystal
+ :overlay 'oni-smt-overlay
+ :background 'oni-smt-background
+ :local-widgets (list (cons 'major-mode
+ (smt/make-widget
+ :prototype 'major-mode
+ :style 'oni-smt-major-mode-style)))
+ :rows '(oni-smt-left oni-smt-position oni-smt-right))
+
+(add-function :override (symbol-function 'eldoc-minibuffer-message)
+ #'oni-smt-eldoc-minibuffer-message)
+
+(provide 'oni-smt)
+;;; oni-smt.el ends here
diff --git a/emacs/.emacs.d/snippets/.dir-locals.el b/emacs/.emacs.d/snippets/.dir-locals.el
new file mode 100644
index 0000000..f88a6f9
--- /dev/null
+++ b/emacs/.emacs.d/snippets/.dir-locals.el
@@ -0,0 +1,2 @@
+((nil
+ (require-final-newline . nil)))
diff --git a/emacs/.emacs.d/snippets/conf-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/conf-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..c0664cc
--- /dev/null
+++ b/emacs/.emacs.d/snippets/conf-mode/.yas-compiled-snippets.el
@@ -0,0 +1,8 @@
+;;; Compiled snippets and support files for `conf-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'conf-mode
+ '(("Section" "Section \"$1\"\n Identifier \"$2\"\n $0\nEndSection\n" "Xorg Section" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/conf-mode/section" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/conf-mode/section b/emacs/.emacs.d/snippets/conf-mode/section
new file mode 100644
index 0000000..55be8f8
--- /dev/null
+++ b/emacs/.emacs.d/snippets/conf-mode/section
@@ -0,0 +1,8 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: Xorg Section
+# key: Section
+# --
+Section "$1"
+ Identifier "$2"
+ $0
+EndSection
diff --git a/emacs/.emacs.d/snippets/css-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/css-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..16e5bf0
--- /dev/null
+++ b/emacs/.emacs.d/snippets/css-mode/.yas-compiled-snippets.el
@@ -0,0 +1,8 @@
+;;; Compiled snippets and support files for `css-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'css-mode
+ '(("boxshadow" "box-shadow: ${1:offset-x} ${2:offset-y}${3: [blur-radius]}${4: [spread-radius]}${5: [color]};" "box-shadow" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/css-mode/box-shadow" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/css-mode/box-shadow b/emacs/.emacs.d/snippets/css-mode/box-shadow
new file mode 100644
index 0000000..82fe9d5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/css-mode/box-shadow
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: box-shadow
+# key: boxshadow
+# --
+box-shadow: ${1:offset-x} ${2:offset-y}${3: [blur-radius]}${4: [spread-radius]}${5: [color]}; \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/emacs-lisp-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/emacs-lisp-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..2eef2b1
--- /dev/null
+++ b/emacs/.emacs.d/snippets/emacs-lisp-mode/.yas-compiled-snippets.el
@@ -0,0 +1,9 @@
+;;; Compiled snippets and support files for `emacs-lisp-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'emacs-lisp-mode
+ '(("face" " `($1 ((t (${2::foreground} $0))))" "face" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/emacs-lisp-mode/face" nil nil)
+ ("do" "(depends-on \"$1\")$0" "depends-on" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/emacs-lisp-mode/depends-on" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/emacs-lisp-mode/depends-on b/emacs/.emacs.d/snippets/emacs-lisp-mode/depends-on
new file mode 100644
index 0000000..4f99d92
--- /dev/null
+++ b/emacs/.emacs.d/snippets/emacs-lisp-mode/depends-on
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: depends-on
+# key: do
+# --
+(depends-on "$1")$0 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/emacs-lisp-mode/face b/emacs/.emacs.d/snippets/emacs-lisp-mode/face
new file mode 100644
index 0000000..9fdbbb2
--- /dev/null
+++ b/emacs/.emacs.d/snippets/emacs-lisp-mode/face
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: face
+# key: face
+# --
+ `($1 ((t (${2::foreground} $0)))) \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/haml-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/haml-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..121aadb
--- /dev/null
+++ b/emacs/.emacs.d/snippets/haml-mode/.yas-compiled-snippets.el
@@ -0,0 +1,10 @@
+;;; Compiled snippets and support files for `haml-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'haml-mode
+ '(("faq" "%dt\n = link_to '#' do\n .expand_icon\n $1\n%dd\n %p\n $0" "FAQ Question & Answer" nil nil
+ ((yas-indent-line 'fixed))
+ "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/haml-mode/faq" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/haml-mode/faq b/emacs/.emacs.d/snippets/haml-mode/faq
new file mode 100644
index 0000000..4d1a9e2
--- /dev/null
+++ b/emacs/.emacs.d/snippets/haml-mode/faq
@@ -0,0 +1,12 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: FAQ Question & Answer
+# key: faq
+# expand-env: ((yas-indent-line 'fixed))
+# --
+%dt
+ = link_to '#' do
+ .expand_icon
+ $1
+%dd
+ %p
+ $0 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/html-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/html-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..bd1aba1
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/.yas-compiled-snippets.el
@@ -0,0 +1,12 @@
+;;; Compiled snippets and support files for `html-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'html-mode
+ '(("trans" "{% trans \"$1\"|capfirst %}" "trans with cap" pony-tpl-minor-mode nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/html-mode/trans-with-cap" nil nil)
+ ("script" "<script src=\"$1\" type=\"${2:text/javascript}\" language=\"${3:javascript}\"></script>" "script" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/html-mode/script" nil nil)
+ ("%" "{% $1 %}\n $0\n{% end$1 %}" "Template Block" pony-tpl-minor-mode nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/html-mode/generic-block" nil nil)
+ ("for" "{% for $1 in $2 %}\n $0\n{% endfor %}" "for" pony-tpl-minor-mode nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/html-mode/for" nil nil)
+ ("block" "{% block $1 %}\n $0\n{% endblock %}" "block" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/html-mode/block" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/html-mode/block b/emacs/.emacs.d/snippets/html-mode/block
new file mode 100644
index 0000000..6510011
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/block
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: block
+# key: block
+# --
+{% block $1 %}
+ $0
+{% endblock %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/html-mode/for b/emacs/.emacs.d/snippets/html-mode/for
new file mode 100644
index 0000000..01d9c44
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/for
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: for
+# key: for
+# condition: pony-tpl-minor-mode
+# --
+{% for $1 in $2 %}
+ $0
+{% endfor %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/html-mode/generic-block b/emacs/.emacs.d/snippets/html-mode/generic-block
new file mode 100644
index 0000000..82d40c7
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/generic-block
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: Template Block
+# key: %
+# condition: pony-tpl-minor-mode
+# --
+{% $1 %}
+ $0
+{% end$1 %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/html-mode/script b/emacs/.emacs.d/snippets/html-mode/script
new file mode 100644
index 0000000..e50dbf5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/script
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: script
+# key: script
+# --
+<script src="$1" type="${2:text/javascript}" language="${3:javascript}"></script> \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/html-mode/trans-with-cap b/emacs/.emacs.d/snippets/html-mode/trans-with-cap
new file mode 100644
index 0000000..4f20a33
--- /dev/null
+++ b/emacs/.emacs.d/snippets/html-mode/trans-with-cap
@@ -0,0 +1,6 @@
+# -*- mode: snippet -*-
+# name: trans with cap
+# key: trans
+# condition: pony-tpl-minor-mode
+# --
+{% trans "$1"|capfirst %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/nxml-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/nxml-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..edc7fe1
--- /dev/null
+++ b/emacs/.emacs.d/snippets/nxml-mode/.yas-compiled-snippets.el
@@ -0,0 +1,10 @@
+;;; Compiled snippets and support files for `nxml-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'nxml-mode
+ '(("s" "<Shortcut displayName=\"$1\"\n icon=\"$2\"\n to=\"$3\">\n $0\n</Shortcut>" "Shortcut" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/nxml-mode/pencil-shortcut" nil nil)
+ ("pv" "<PropertyValue name=\"$1\">$2</PropertyValue>" "PropertyValue" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/nxml-mode/pencil-property-value" nil nil)
+ ("p" "<Property name=\"$1\"\n displayName=\"$2\"\n type=\"$3\">$4</Property>" "PencilProperty" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/nxml-mode/pencil-property" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/nxml-mode/pencil-property b/emacs/.emacs.d/snippets/nxml-mode/pencil-property
new file mode 100644
index 0000000..7fafcb8
--- /dev/null
+++ b/emacs/.emacs.d/snippets/nxml-mode/pencil-property
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: PencilProperty
+# key: p
+# --
+<Property name="$1"
+ displayName="$2"
+ type="$3">$4</Property> \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/nxml-mode/pencil-property-value b/emacs/.emacs.d/snippets/nxml-mode/pencil-property-value
new file mode 100644
index 0000000..5da3d10
--- /dev/null
+++ b/emacs/.emacs.d/snippets/nxml-mode/pencil-property-value
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: PropertyValue
+# key: pv
+# --
+<PropertyValue name="$1">$2</PropertyValue> \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/nxml-mode/pencil-shortcut b/emacs/.emacs.d/snippets/nxml-mode/pencil-shortcut
new file mode 100644
index 0000000..e760d27
--- /dev/null
+++ b/emacs/.emacs.d/snippets/nxml-mode/pencil-shortcut
@@ -0,0 +1,9 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: Shortcut
+# key: s
+# --
+<Shortcut displayName="$1"
+ icon="$2"
+ to="$3">
+ $0
+</Shortcut> \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/org-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/org-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..cefc1eb
--- /dev/null
+++ b/emacs/.emacs.d/snippets/org-mode/.yas-compiled-snippets.el
@@ -0,0 +1,11 @@
+;;; Compiled snippets and support files for `org-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'org-mode
+ '(("snippet" "#+TITLE: ${1:snippet-name}\n#+OPTIONS: toc:nil\n\n* $1\n\n ${2:A short description abount $1}\n\n #+BEGIN_SRC $3 :tangle yes\n$0\n #+END_SRC" "snippet" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/org-mode/snippet" nil nil)
+ ("project" "#+TITLE: ${1:project_name}\n#+LINK: src ${2:http://code.ryuslash.org/cgit.cgi/$3$1/}\n#+LINK: tar_gz $2${4:snapshot/$1-master}.tar.gz\n#+LINK: zip $2$4.zip\n#+STARTUP: showall\n\n#+begin_html\n <script src=\"/keyjs.js\" type=\"text/javascript\"></script>\n <script type=\"text/javascript\">\n keyjs_initialize({ \"u\": [ \"keyjs_goto\", \"../index.html\" ],\n \"h\": [ \"keyjs_goto\", \"http://ryuslash.org\" ] });\n </script>\n#+end_html\n\n#+INCLUDE: \"dlmenu.inc\"\n\n* About\n\n ${5:A short description about $1}\n\n | $0Status | $6 |\n | Language | $7 |\n | License | ${8:GPLv3} |\n\n* Why?\n\n ${9:Why did you even think of writing $1?}\n\n* Features\n\n ${10:$1 does...}\n\n* Dependencies\n\n ${11:$1 needs to have...}\n\n* Download\n\n ${12:To download $1...}\n\n* Install\n\n ${13:To install $1...}\n\n* Usage\n\n ${14:Using $1...}" "project" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/org-mode/project" nil nil)
+ ("*" "${1:*} ${2:TODO} $3\n${1:$(make-string (length text) ?\\ )} :PROPERTIES:\n${1:$(make-string (length text) ?\\ )} :CATEGORY: $4\n${1:$(make-string (length text) ?\\ )} :END:\n${1:$(make-string (length text) ?\\ )} $0" "Heading" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/org-mode/heading" nil nil)
+ ("code" "#+begin_src $1\n $0\n#+end_src" "codeblock" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/org-mode/codeblock" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/org-mode/codeblock b/emacs/.emacs.d/snippets/org-mode/codeblock
new file mode 100644
index 0000000..a200b08
--- /dev/null
+++ b/emacs/.emacs.d/snippets/org-mode/codeblock
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: codeblock
+# key: code
+# --
+#+begin_src $1
+ $0
+#+end_src \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/org-mode/heading b/emacs/.emacs.d/snippets/org-mode/heading
new file mode 100644
index 0000000..9d5451e
--- /dev/null
+++ b/emacs/.emacs.d/snippets/org-mode/heading
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: Heading
+# key: *
+# --
+${1:*} ${2:TODO} $3
+${1:$(make-string (length text) ?\ )} :PROPERTIES:
+${1:$(make-string (length text) ?\ )} :CATEGORY: $4
+${1:$(make-string (length text) ?\ )} :END:
+${1:$(make-string (length text) ?\ )} $0 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/org-mode/project b/emacs/.emacs.d/snippets/org-mode/project
new file mode 100644
index 0000000..269d655
--- /dev/null
+++ b/emacs/.emacs.d/snippets/org-mode/project
@@ -0,0 +1,51 @@
+# -*- mode: snippet -*-
+# name: project
+# key: project
+# --
+#+TITLE: ${1:project_name}
+#+LINK: src ${2:http://code.ryuslash.org/cgit.cgi/$3$1/}
+#+LINK: tar_gz $2${4:snapshot/$1-master}.tar.gz
+#+LINK: zip $2$4.zip
+#+STARTUP: showall
+
+#+begin_html
+ <script src="/keyjs.js" type="text/javascript"></script>
+ <script type="text/javascript">
+ keyjs_initialize({ "u": [ "keyjs_goto", "../index.html" ],
+ "h": [ "keyjs_goto", "http://ryuslash.org" ] });
+ </script>
+#+end_html
+
+#+INCLUDE: "dlmenu.inc"
+
+* About
+
+ ${5:A short description about $1}
+
+ | $0Status | $6 |
+ | Language | $7 |
+ | License | ${8:GPLv3} |
+
+* Why?
+
+ ${9:Why did you even think of writing $1?}
+
+* Features
+
+ ${10:$1 does...}
+
+* Dependencies
+
+ ${11:$1 needs to have...}
+
+* Download
+
+ ${12:To download $1...}
+
+* Install
+
+ ${13:To install $1...}
+
+* Usage
+
+ ${14:Using $1...} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/org-mode/snippet b/emacs/.emacs.d/snippets/org-mode/snippet
new file mode 100644
index 0000000..67f15d5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/org-mode/snippet
@@ -0,0 +1,14 @@
+# -*- mode: snippet -*-
+# name: snippet
+# key: snippet
+# --
+#+TITLE: ${1:snippet-name}
+#+OPTIONS: toc:nil
+
+* $1
+
+ ${2:A short description abount $1}
+
+ #+BEGIN_SRC $3 :tangle yes
+$0
+ #+END_SRC \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/php-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/php-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..ba80240
--- /dev/null
+++ b/emacs/.emacs.d/snippets/php-mode/.yas-compiled-snippets.el
@@ -0,0 +1,10 @@
+;;; Compiled snippets and support files for `php-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'php-mode
+ '(("header" "/*\n * Plugin Name: $1\n * Plugin URI: $2\n * Description: $3\n * Version: ${4:1.0}\n * Author: ${5:Tom Willemse}\n * Author URI: ${6:https://ryuslash.org}\n * License: ${7:GPLv2}\n */" "WP Plugin Header" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/php-mode/wpheader.php" nil nil)
+ ("(" "( $0 " "opening-brace" electric-pair-mode nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/php-mode/opening-brace" nil nil)
+ ("function" "function $1($2)\n{\n $0\n}" "function" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/php-mode/function" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/php-mode/function b/emacs/.emacs.d/snippets/php-mode/function
new file mode 100644
index 0000000..ab4cf2c
--- /dev/null
+++ b/emacs/.emacs.d/snippets/php-mode/function
@@ -0,0 +1,8 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: function
+# key: function
+# --
+function $1($2)
+{
+ $0
+} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/php-mode/wpheader.php b/emacs/.emacs.d/snippets/php-mode/wpheader.php
new file mode 100644
index 0000000..2c70f93
--- /dev/null
+++ b/emacs/.emacs.d/snippets/php-mode/wpheader.php
@@ -0,0 +1,13 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: WP Plugin Header
+# key: header
+# --
+/*
+ * Plugin Name: $1
+ * Plugin URI: $2
+ * Description: $3
+ * Version: ${4:1.0}
+ * Author: ${5:Tom Willemse}
+ * Author URI: ${6:https://ryuslash.org}
+ * License: ${7:GPLv2}
+ */ \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/python-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..fee2e88
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/.yas-compiled-snippets.el
@@ -0,0 +1,15 @@
+;;; Compiled snippets and support files for `python-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'python-mode
+ '(("url" "url(r'^$1', $2, name='$3')," "url" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/url" nil nil)
+ ("defm" "@method_decorator(permission_required('$1',\n raise_exception=True))\ndef dispatch(self, *args, **kwargs):\n '''Make sure the user has the $1 permission.'''\n return super(${3:`(progn (re-search-backward \"^[ \\t]*class \\\\(.+\\\\)(\") (match-string 1)))`}, self).dispatch(*args, **kwargs)" "Permission guard" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/permission_guard" nil nil)
+ ("defm" "def $1(self$2):\n '''$3'''\n $0" "method" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/method" nil nil)
+ ("from" "from ${1:module} import ${2:class_or_module}\n" "from ... import ..." nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/import_from" nil nil)
+ ("formvalid" "def form_valid(self, form):\n rv = super(`(let ((name (python-info-current-defun))) (substring name 0 (cl-position ?. name)))`, self).form_valid(form)\n $0\n return rv" "form_valid with return" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/form_valid_with_return" nil nil)
+ ("defm" "@record_activity(model=${1:`(progn (re-search-backward \"^[ \\t]*model = \\\\([a-zA-Z_].*\\\\)$\") (match-string 1))`})\ndef form_valid(self, form):\n '''Make sure any changes to the $1 model get logged.'''\n return super(${2:`(progn (re-search-backward \"^[ \\t]*class \\\\(.+\\\\)(\") (match-string 1)))`}, self).form_valid(form)" "Record form" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/form_valid" nil nil)
+ ("form" "class ${1:Model}Form(forms.ModelForm):\n '''Form for the $1 model.'''\n\n class Meta:\n model = $1" "Model Form" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/form" nil nil)
+ ("defm" "def ${1:name}(self, *args, **kwargs):\n '''$2'''\n return super(${3:`(progn (re-search-backward \"^[ \\t]*class \\\\(.+\\\\)(\") (match-string 1)))`}, self).$1(*args, **kwargs)" "Empty Defmethod" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/python-mode/defm_empty" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/python-mode/defm_empty b/emacs/.emacs.d/snippets/python-mode/defm_empty
new file mode 100644
index 0000000..baa976e
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/defm_empty
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+# name: Empty Defmethod
+# key: defm
+# --
+def ${1:name}(self, *args, **kwargs):
+ '''$2'''
+ return super(${3:`(progn (re-search-backward "^[ \t]*class \\(.+\\)(") (match-string 1)))`}, self).$1(*args, **kwargs) \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/form b/emacs/.emacs.d/snippets/python-mode/form
new file mode 100644
index 0000000..225d5e4
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/form
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: Model Form
+# key: form
+# --
+class ${1:Model}Form(forms.ModelForm):
+ '''Form for the $1 model.'''
+
+ class Meta:
+ model = $1 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/form_valid b/emacs/.emacs.d/snippets/python-mode/form_valid
new file mode 100644
index 0000000..c5a7e58
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/form_valid
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: Record form
+# key: defm
+# --
+@record_activity(model=${1:`(progn (re-search-backward "^[ \t]*model = \\([a-zA-Z_].*\\)$") (match-string 1))`})
+def form_valid(self, form):
+ '''Make sure any changes to the $1 model get logged.'''
+ return super(${2:`(progn (re-search-backward "^[ \t]*class \\(.+\\)(") (match-string 1)))`}, self).form_valid(form) \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/form_valid_with_return b/emacs/.emacs.d/snippets/python-mode/form_valid_with_return
new file mode 100644
index 0000000..fac23bc
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/form_valid_with_return
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: form_valid with return
+# key: formvalid
+# --
+def form_valid(self, form):
+ rv = super(`(let ((name (python-info-current-defun))) (substring name 0 (cl-position ?. name)))`, self).form_valid(form)
+ $0
+ return rv \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/import_from b/emacs/.emacs.d/snippets/python-mode/import_from
new file mode 100644
index 0000000..d9cc4e2
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/import_from
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+# name: from ... import ...
+# contributor: Tom Willemse
+# key: from
+# --
+from ${1:module} import ${2:class_or_module}
diff --git a/emacs/.emacs.d/snippets/python-mode/method b/emacs/.emacs.d/snippets/python-mode/method
new file mode 100644
index 0000000..7c033cf
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/method
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: method
+# key: defm
+# --
+def $1(self$2):
+ '''$3'''
+ $0 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/permission_guard b/emacs/.emacs.d/snippets/python-mode/permission_guard
new file mode 100644
index 0000000..ab53895
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/permission_guard
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: Permission guard
+# key: defm
+# --
+@method_decorator(permission_required('$1',
+ raise_exception=True))
+def dispatch(self, *args, **kwargs):
+ '''Make sure the user has the $1 permission.'''
+ return super(${3:`(progn (re-search-backward "^[ \t]*class \\(.+\\)(") (match-string 1)))`}, self).dispatch(*args, **kwargs) \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/python-mode/url b/emacs/.emacs.d/snippets/python-mode/url
new file mode 100644
index 0000000..00ade72
--- /dev/null
+++ b/emacs/.emacs.d/snippets/python-mode/url
@@ -0,0 +1,5 @@
+# -*- mode: snippet -*-
+# name: url
+# key: url
+# --
+url(r'^$1', $2, name='$3'), \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/ruby-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..76a2f42
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/.yas-compiled-snippets.el
@@ -0,0 +1,18 @@
+;;; Compiled snippets and support files for `ruby-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'ruby-mode
+ '(("reduce" "reduce { |a, e| $0 }" "reduce" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/reduce" nil nil)
+ ("mod" "module ${1:`(let ((fn (capitalize (file-name-nondirectory\n (directory-file-name\n default-directory)))))\n (replace-regexp-in-string \"_\" \"\" fn t t))`}\n $0\nend" "module ... end" nil
+ ("definitions")
+ nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/mod" nil nil)
+ ("fin" "fill_in '$1', with: $2" "fill_in" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/fill_in" nil nil)
+ ("factory" "FactoryGirl.define do\n factory :${1:`(file-name-sans-extension (file-name-nondirectory buffer-file-name))`} do\n $0\n end\nend" "factory" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/factory" nil nil)
+ ("do" "do$0\nend" "do" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/do" nil nil)
+ ("desc" "describe '$1' do\n $0\nend" "describe" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/describe" nil nil)
+ ("pseed" "Product.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Small', price: '20.00', width_in_cm: '25.00', height_in_cm: '21.00', width_in_mm: '250', height_in_mm: '210')\nProduct.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Medium', price: '20.00', width_in_cm: '30.00', height_in_cm: '25.80', width_in_mm: '300', height_in_mm: '258')\nProduct.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Large', price: '20.00', width_in_cm: '35.00', height_in_cm: '30.00', width_in_mm: '350', height_in_mm: '300')\nProduct.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Extra large', price: '20.00', width_in_cm: '40.00', height_in_cm: '34.00', width_in_mm: '400', height_in_mm: '340')\n" "ProductSeedWithHWGroup" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHWGroup" nil nil)
+ ("pseed" "Product.find_or_create_by_name(parent_id: $1, name: '$2', description: '$3', price: '$4', width_in_cm: '$5', height_in_cm: '$6', width_in_mm: '${5:$(round (* 10 (string-to-int yas-text)))}', height_in_mm: '${6:$(round (* 10 (string-to-int yas-text)))}')" "ProductSeedWithHW" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHW" nil nil)
+ ("pseed" "Product.find_or_create_by_name(parent_id: $1, name: '$2', description: '$3', price: '$4')" "ProductSeed" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/ruby-mode/ProductSeed" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/ruby-mode/ProductSeed b/emacs/.emacs.d/snippets/ruby-mode/ProductSeed
new file mode 100644
index 0000000..7e836c2
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/ProductSeed
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: ProductSeed
+# key: pseed
+# --
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: '$3', price: '$4') \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHW b/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHW
new file mode 100644
index 0000000..843b32e
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHW
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: ProductSeedWithHW
+# key: pseed
+# --
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: '$3', price: '$4', width_in_cm: '$5', height_in_cm: '$6', width_in_mm: '${5:$(round (* 10 (string-to-int yas-text)))}', height_in_mm: '${6:$(round (* 10 (string-to-int yas-text)))}') \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHWGroup b/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHWGroup
new file mode 100644
index 0000000..25594c5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/ProductSeedHWGroup
@@ -0,0 +1,8 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: ProductSeedWithHWGroup
+# key: pseed
+# --
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Small', price: '20.00', width_in_cm: '25.00', height_in_cm: '21.00', width_in_mm: '250', height_in_mm: '210')
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Medium', price: '20.00', width_in_cm: '30.00', height_in_cm: '25.80', width_in_mm: '300', height_in_mm: '258')
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Large', price: '20.00', width_in_cm: '35.00', height_in_cm: '30.00', width_in_mm: '350', height_in_mm: '300')
+Product.find_or_create_by_name(parent_id: $1, name: '$2', description: 'Extra large', price: '20.00', width_in_cm: '40.00', height_in_cm: '34.00', width_in_mm: '400', height_in_mm: '340')
diff --git a/emacs/.emacs.d/snippets/ruby-mode/describe b/emacs/.emacs.d/snippets/ruby-mode/describe
new file mode 100644
index 0000000..acd3a6b
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/describe
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: describe
+# key: desc
+# --
+describe '$1' do
+ $0
+end \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/do b/emacs/.emacs.d/snippets/ruby-mode/do
new file mode 100644
index 0000000..3c556fc
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/do
@@ -0,0 +1,6 @@
+# -*- mode: snippet -*-
+# name: do
+# key: do
+# --
+do$0
+end \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/factory b/emacs/.emacs.d/snippets/ruby-mode/factory
new file mode 100644
index 0000000..619b2e5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/factory
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: factory
+# key: factory
+# --
+FactoryGirl.define do
+ factory :${1:`(file-name-sans-extension (file-name-nondirectory buffer-file-name))`} do
+ $0
+ end
+end \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/fill_in b/emacs/.emacs.d/snippets/ruby-mode/fill_in
new file mode 100644
index 0000000..854b029
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/fill_in
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: fill_in
+# key: fin
+# --
+fill_in '$1', with: $2 \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/mod b/emacs/.emacs.d/snippets/ruby-mode/mod
new file mode 100644
index 0000000..9af7d23
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/mod
@@ -0,0 +1,11 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: module ... end
+# key: mod
+# group: definitions
+# --
+module ${1:`(let ((fn (capitalize (file-name-nondirectory
+ (directory-file-name
+ default-directory)))))
+ (replace-regexp-in-string "_" "" fn t t))`}
+ $0
+end \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/ruby-mode/reduce b/emacs/.emacs.d/snippets/ruby-mode/reduce
new file mode 100644
index 0000000..3d4bfe4
--- /dev/null
+++ b/emacs/.emacs.d/snippets/ruby-mode/reduce
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: reduce
+# key: reduce
+# --
+reduce { |a, e| $0 } \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/.yas-compiled-snippets.el b/emacs/.emacs.d/snippets/twig-mode/.yas-compiled-snippets.el
new file mode 100644
index 0000000..43d1519
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/.yas-compiled-snippets.el
@@ -0,0 +1,18 @@
+;;; Compiled snippets and support files for `twig-mode'
+;;; Snippet definitions:
+;;;
+(yas-define-snippets 'twig-mode
+ '(("set" "{% set $1 = $2 %}" "set" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/set" nil nil)
+ ("mac" "{% macro ${1:name}(${2:args}) %}\n $0\n{% endmacro %}" "macro" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/mac" nil nil)
+ ("imp" "{% import \"${1:module}\" as ${1:$(if (string-match \"/\\\\\\\\([^/]*\\\\\\\\)$\" yas-text)\n (match-string 1 yas-text)\n yas-text)} %}" "import" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/imp" nil nil)
+ ("iif" "{% if $1 %}$0{% endif %}" "Inline if" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/iif" nil nil)
+ ("ife" "{% if $1 %}\n $0\n{% else %}\n\n{% endif %}" "if...else" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/ife" nil nil)
+ ("if" "{% if $1 %}\n $0\n{% endif %}" "if" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/if" nil nil)
+ ("for" "{% for $1 in $2 %}\n `yas-selected-text`$0\n{% endfor %}" "for" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/for" nil nil)
+ ("ext" "{% extends \"$1\" %}" "extends" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/ext" nil nil)
+ ("def" "{% if $1 is not defined %}\n {% set $1 = $2 %}\n{% endif %}" "default value" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/def" nil nil)
+ ("blk" "{% block $1 %}\n $0\n{% endblock %}" "block" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/blk" nil nil)
+ ("_self" "{% import _self as ${1:`(file-name-nondirectory (file-name-sans-extension buffer-file-name))`} %}" "_self" nil nil nil "/home/chelys/projects/dotfiles/emacs/.emacs.d/snippets/twig-mode/_self" nil nil)))
+
+
+;;; Do not edit! File generated at Tue Nov 22 15:37:52 2016
diff --git a/emacs/.emacs.d/snippets/twig-mode/_self b/emacs/.emacs.d/snippets/twig-mode/_self
new file mode 100644
index 0000000..c441690
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/_self
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: _self
+# key: _self
+# --
+{% import _self as ${1:`(file-name-nondirectory (file-name-sans-extension buffer-file-name))`} %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/blk b/emacs/.emacs.d/snippets/twig-mode/blk
new file mode 100644
index 0000000..bb100a3
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/blk
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: block
+# key: blk
+# --
+{% block $1 %}
+ $0
+{% endblock %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/def b/emacs/.emacs.d/snippets/twig-mode/def
new file mode 100644
index 0000000..78dead4
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/def
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: default value
+# key: def
+# --
+{% if $1 is not defined %}
+ {% set $1 = $2 %}
+{% endif %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/ext b/emacs/.emacs.d/snippets/twig-mode/ext
new file mode 100644
index 0000000..501cae8
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/ext
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: extends
+# key: ext
+# --
+{% extends "$1" %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/for b/emacs/.emacs.d/snippets/twig-mode/for
new file mode 100644
index 0000000..01c0cc5
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/for
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: for
+# key: for
+# --
+{% for $1 in $2 %}
+ `yas-selected-text`$0
+{% endfor %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/if b/emacs/.emacs.d/snippets/twig-mode/if
new file mode 100644
index 0000000..a9385d9
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/if
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: if
+# key: if
+# --
+{% if $1 %}
+ $0
+{% endif %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/ife b/emacs/.emacs.d/snippets/twig-mode/ife
new file mode 100644
index 0000000..a4d18f3
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/ife
@@ -0,0 +1,9 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: if...else
+# key: ife
+# --
+{% if $1 %}
+ $0
+{% else %}
+
+{% endif %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/iif b/emacs/.emacs.d/snippets/twig-mode/iif
new file mode 100644
index 0000000..df26b61
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/iif
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: Inline if
+# key: iif
+# --
+{% if $1 %}$0{% endif %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/imp b/emacs/.emacs.d/snippets/twig-mode/imp
new file mode 100644
index 0000000..01ceb69
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/imp
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: import
+# key: imp
+# --
+{% import "${1:module}" as ${1:$(if (string-match "/\\\\([^/]*\\\\)$" yas-text)
+ (match-string 1 yas-text)
+ yas-text)} %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/mac b/emacs/.emacs.d/snippets/twig-mode/mac
new file mode 100644
index 0000000..d4e480a
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/mac
@@ -0,0 +1,7 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: macro
+# key: mac
+# --
+{% macro ${1:name}(${2:args}) %}
+ $0
+{% endmacro %} \ No newline at end of file
diff --git a/emacs/.emacs.d/snippets/twig-mode/set b/emacs/.emacs.d/snippets/twig-mode/set
new file mode 100644
index 0000000..715c828
--- /dev/null
+++ b/emacs/.emacs.d/snippets/twig-mode/set
@@ -0,0 +1,5 @@
+# -*- mode: snippet; require-final-newline: nil -*-
+# name: set
+# key: set
+# --
+{% set $1 = $2 %} \ No newline at end of file
diff --git a/emacs/.emacs.d/vendor-lisp/circe-serenity/circe-serenity.el b/emacs/.emacs.d/vendor-lisp/circe-serenity/circe-serenity.el
deleted file mode 100644
index d7c3dc9..0000000
--- a/emacs/.emacs.d/vendor-lisp/circe-serenity/circe-serenity.el
+++ /dev/null
@@ -1,205 +0,0 @@
-;;; circe-serenity.el --- Clean up Circe buffers -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2016 Tom Willemse
-
-;; Author: Tom Willemse <chelys@drd>
-;; Keywords: convenience
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This is an extension module for Circe. It creates what I think is
-;; a more minimalistic view of Circe buffers. It right-aligns all the
-;; nicks, right-justifies and simplifies certain messages. It takes
-;; care of both `fill-prefix' and `wrap-prefix' so it should be usable
-;; with and without `lui-fill-type'.
-
-;; The name circe-serenity was chosen because I think the buffers feel
-;; cleaner and more serene with this setup.
-
-;;; Code:
-
-(defvar circe-serenity-longest-nick 0
- "The longest known nick.")
-(make-variable-buffer-local 'circe-serenity-longest-nick)
-
-(defvar circe-serenity--formatters-alist nil
- "Alist of which formatter to use for which circe format.")
-
-(defun circe-serenity--define-formatter (formatter format)
- "Define that FORMATTER should be used for FORMAT."
- (setf (alist-get format circe-serenity--formatters-alist) formatter))
-
-(defun circe-serenity--fill-string ()
- "Create a padded string as long as `circe-serenity-longest-nick'."
- (make-string (+ circe-serenity-longest-nick 3) ?\s))
-
-(defun circe-serenity--update-longest-nick (keywords)
- "Keep track of the longest nick seen so far.
-KEYWORDS is a plist which should contain a :nick key."
- (let* ((nick (plist-get keywords :nick))
- (len (length nick)))
- (when (> len circe-serenity-longest-nick)
- (setq circe-serenity-longest-nick len)
- (when lui-fill-type
- (setq-local lui-fill-type (circe-serenity--fill-string))))))
-
-(defun circe-serenity-say-formatter (&rest keywords)
- "Format a message from a user.
-KEYWORDS should be a plist with at least a :nick and :body. It
-is passed on to `lui-format'."
- (circe-serenity--update-longest-nick keywords)
- (propertize
- (lui-format (format "{nick:%ds} {body}" circe-serenity-longest-nick)
- keywords)
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-say-formatter 'circe-format-say)
-(circe-serenity--define-formatter 'circe-serenity-say-formatter 'circe-format-self-say)
-
-(defun circe-serenity-action-formatter (&rest keywords)
- "Format a user's action message.
-KEYWORDS should be plist with at least the keys :nick and :body.
-A key :intro is added to the plist and then passed on to
-`lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} {body}" circe-serenity-longest-nick)
- (plist-put keywords :intro "*"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-action-formatter 'circe-format-action)
-
-(defun circe-serenity-server-message-formatter (&rest keywords)
- "Format a message from the server.
-KEYWORDS should be a plist with at least a :body key. A key
-:intro is added to the plist and then passed on to `lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {body}" circe-serenity-longest-nick)
- (plist-put keywords :intro "***"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-message-formatter 'circe-format-server-message)
-
-(defun circe-serenity-server-join-in-channel-formatter (&rest keywords)
- "Format a message from a user joining a channel.
-KEYWORDS should be a plist with at least a :nick and :channel
-key. A key :intro is added to the plist and then passed on to
-`lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} joined {channel}"
- circe-serenity-longest-nick)
- (plist-put keywords :intro ">>>"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-join-in-channel-formatter
- 'circe-format-server-join-in-channel)
-
-(defun circe-serenity-server-join-formatter (&rest keywords)
- "Format a message from a user joining the server.
-KEYWORDS should be a plist with at least a :nick key. A key
-:intro is added to the plist and then passed on to `lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} logged on"
- circe-serenity-longest-nick)
- (plist-put keywords :intro ">>>"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-join-formatter 'circe-format-server-join)
-
-(defun circe-serenity-server-quit-formatter (&rest keywords)
- "Format a message from a user quitting the server.
-KEYWORDS should be a plist with at least a :nick key. A key
-:intro is added to the plist and then passed on to `lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} logged off"
- circe-serenity-longest-nick)
- (plist-put keywords :intro "<<<"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-quit-formatter 'circe-format-server-quit)
-
-(defun circe-serenity-server-quit-channel-formatter (&rest keywords)
- "Format a message from a user quitting a channel.
-KEYWORDS should be a plist with at least a :nick and :channel
-key. A key :intro is added to the plist and then passed on to
-`lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} left {channel}"
- circe-serenity-longest-nick)
- (plist-put keywords :intro "<<<"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-quit-channel-formatter
- 'circe-format-server-quit-channel)
-
-(defun circe-serenity-server-part-formatter (&rest keywords)
- "Format a message from a user parting a channel.
-KEYWORDS should be a plist with at least a :nick and :channel
-key. A key :intro is added to the plist and then passed on to
-`lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} parted from {channel}"
- circe-serenity-longest-nick)
- (plist-put keywords :intro "***"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-part-formatter 'circe-format-server-part)
-
-(defun circe-serenity-server-nick-change-formatter (&rest keywords)
- "Format a message from a user changing their nick.
-KEYWORDS should be a plist with at least a :new-nick and
-:old-nick key. A key :intro is added to the plist and then
-passed on to `lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {old-nick} is now know as {new-nick}"
- circe-serenity-longest-nick)
- (plist-put keywords :intro "***"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-nick-change-formatter
- 'circe-format-server-nick-change)
-
-(defun circe-serenity-server-topic-formatter (&rest keywords)
- "Format a message of a topic having changed.
-KEYWORDS should be a plist with at least a :nick and :new-topic
-key. A key :intro is added to the plist and then passed on to
-`lui-format'."
- (propertize
- (lui-format
- (format "{intro:%ds} {nick} changed topic to: {new-topic}"
- circe-serenity-longest-nick)
- (plist-put keywords :intro "***"))
- 'wrap-prefix (circe-serenity--fill-string)))
-(circe-serenity--define-formatter 'circe-serenity-server-topic-formatter 'circe-format-server-topic)
-
-;;;###autoload
-(defun enable-circe-serenity ()
- "Enable Serenity for Circe."
- (interactive)
- (dolist (format-pair circe-serenity--formatters-alist)
- (cl-destructuring-bind (format . formatter) format-pair
- (if (null (get format 'circe-serenity-original))
- (put format 'circe-serenity-original (symbol-value format)))
- (set format formatter))))
-
-(defun disable-circe-serenity ()
- "Disable Serenity for Circe."
- (interactive)
- (dolist (format-pair circe-serenity--formatters-alist)
- (let ((format (car format-pair)))
- (set format (get format 'circe-serenity-original))
- (put format 'circe-serenity-original nil))))
-
-(provide 'circe-serenity)
-;;; circe-serenity.el ends here