about summary refs log tree commit diff
path: root/emacs.d
diff options
context:
space:
mode:
authorVincent Ambo <vincent@spotify.com>2013-07-07T23·15+0200
committerVincent Ambo <vincent@spotify.com>2013-07-07T23·15+0200
commit0d133eceb395d44b7a234b5f455d9d92bba43f4e (patch)
tree10c09f8a56fdeb900e2ba62ba944642ad39838a9 /emacs.d
parent90f95a6a3dd5a95a3df315a9dfcdf8ea94d59104 (diff)
Split up configuration in five files. I wrote a nice commit message explaining this, but I wrote it in vi and it died on me.
Diffstat (limited to 'emacs.d')
-rw-r--r--emacs.d/init-custom.el19
-rw-r--r--emacs.d/init-functions.el53
-rw-r--r--emacs.d/init-modes.el38
-rw-r--r--emacs.d/init-settings.el180
-rw-r--r--emacs.d/init.el50
5 files changed, 340 insertions, 0 deletions
diff --git a/emacs.d/init-custom.el b/emacs.d/init-custom.el
new file mode 100644
index 000000000000..e0ef7ce63b32
--- /dev/null
+++ b/emacs.d/init-custom.el
@@ -0,0 +1,19 @@
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(custom-safe-themes
+   (quote
+    ("ea0c5df0f067d2e3c0f048c1f8795af7b873f5014837feb0a7c8317f34417b04" "a234f91f9be6ed40f6ce0e94dce5cea1b9f1ccec2b9ccd42bb71c499867a3fcc" "fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" "1e7e097ec8cb1f8c3a912d7e1e0331caeed49fef6cff220be63bd2a6ba4cc365" "d6a00ef5e53adf9b6fe417d2b4404895f26210c52bb8716971be106550cea257" default)))
+ '(erc-modules
+   (quote
+    (autojoin button completion dcc irccontrols list log match menu move-to-prompt netsplit networks noncommands notifications readonly ring scrolltobottom stamp track)))
+ '(ns-alternate-modifier (quote none))
+ '(ns-command-modifier (quote meta)))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ )
diff --git a/emacs.d/init-functions.el b/emacs.d/init-functions.el
new file mode 100644
index 000000000000..5ede8ee7dc1d
--- /dev/null
+++ b/emacs.d/init-functions.el
@@ -0,0 +1,53 @@
+;; A few handy functions I use in init.el (or not, but they're nice to
+;; have)
+
+;; Ensure that the themes folder exists
+
+(defun custom-download-theme (url filename)
+  "Downloads a theme through HTTP and places it in ~/.emacs.d/themes"
+
+  ;; Ensure the directory exists
+  (unless (file-exists-p "~/.emacs.d/themes")
+    (make-directory "~/.emacs.d/themes"))
+
+  ;; Adds the themes folder to the theme load path (if not already
+  ;; there)
+  (unless (member "~/.emacs.d/themes" custom-theme-load-path)
+    (add-to-list 'custom-theme-load-path "~/.emacs.d/themes"))
+ 
+  ;; Download file if it doesn't exist.
+
+  (let ((file
+         (concat "~/.emacs.d/themes/" filename)))
+    (unless (file-exists-p file)
+      (url-copy-file url file))))
+
+
+;; These come from the emacs starter kit
+(defun esk-pretty-lambdas ()
+  (font-lock-add-keywords
+   nil `(("(?\\(lambda\\>\\)"
+          (0 (progn (compose-region (match-beginning 1) (match-end 1)
+                                    ,(make-char 'greek-iso8859-7 107))
+                    nil))))))
+
+(defun esk-add-watchwords ()
+  (font-lock-add-keywords
+   nil '(("\\<\\(FIX\\(ME\\)?\\|TODO\\|HACK\\|REFACTOR\\|NOCOMMIT\\)"
+          1 font-lock-warning-face t))))
+
+(defun esk-sudo-edit (&optional arg)
+  (interactive "p")
+  (if (or arg (not buffer-file-name))
+      (find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
+    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
+
+(defun esk-suck-it (suckee)
+  "Insert a comment of appropriate length about what can suck it."
+  (interactive "MWhat can suck it? ")
+  (let ((prefix (concat ";; " suckee " can s"))
+        (postfix "ck it!")
+        (col (current-column)))
+    (insert prefix)
+    (dotimes (_ (- 80 col (length prefix) (length postfix))) (insert "u"))
+    (insert postfix)))
diff --git a/emacs.d/init-modes.el b/emacs.d/init-modes.el
new file mode 100644
index 000000000000..d7415fda06aa
--- /dev/null
+++ b/emacs.d/init-modes.el
@@ -0,0 +1,38 @@
+;; Initializes modes I use.
+
+(add-hook 'prog-mode-hook 'esk-pretty-lambdas)
+(add-hook 'prog-mode-hook 'esk-add-watchwords)
+(add-hook 'prog-mode-hook 'idle-highlight-mode)
+
+;; Configure markdown-mode
+(autoload 'markdown-mode "markdown-mode"
+  "Major mode for editing Markdown files" t)
+(add-to-list 'auto-mode-alist '("\\.txt\\'" . markdown-mode))
+(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
+(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
+
+;; Configure haskell-mode
+;; Enable semi-automatic indentation and font-locking
+(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
+(add-hook 'haskell-mode-hook 'font-lock-mode)
+
+;; Add keybindings to move nested blocks with C-, rsp. C-.
+(define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
+(define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
+
+;; Configure nrepl (Clojure REPL) and clojure-mode
+;; Paredit in clojure
+
+(add-hook 'clojure-mode-hook 'paredit-mode)
+
+;; eldoc in clojure
+(add-hook 'nrepl-interaction-mode-hook
+  'nrepl-turn-on-eldoc-mode)
+
+;; Don't annoy me
+(setq nrepl-hide-special-buffers t)
+(setq nrepl-popup-stacktraces nil)
+
+;; Paredit in nrepl
+(add-hook 'nrepl-mode-hook 'paredit-mode)
+(add-hook 'nrepl-mode-hook 'rainbow-delimiters-mode)
diff --git a/emacs.d/init-settings.el b/emacs.d/init-settings.el
new file mode 100644
index 000000000000..1d72624b3e4c
--- /dev/null
+++ b/emacs.d/init-settings.el
@@ -0,0 +1,180 @@
+;; ## Generic settings ##
+
+(tool-bar-mode -1)
+(scroll-bar-mode -1)
+
+;;; Code:
+
+(when window-system
+  (setq frame-title-format '(buffer-file-name "%f" ("%b")))
+  (tooltip-mode -1)
+  (mouse-wheel-mode t)
+  (blink-cursor-mode -1))
+
+;; can't do it at launch or emacsclient won't always honor it
+(add-hook 'before-make-frame-hook 'esk-turn-off-tool-bar)
+
+(setq visible-bell t
+      inhibit-startup-message t
+      color-theme-is-global t
+      sentence-end-double-space nil
+      shift-select-mode nil
+      mouse-yank-at-point t
+      uniquify-buffer-name-style 'forward
+      whitespace-style '(face trailing lines-tail tabs)
+      whitespace-line-column 80
+      ediff-window-setup-function 'ediff-setup-windows-plain
+      oddmuse-directory (concat user-emacs-directory "oddmuse")
+      save-place-file (concat user-emacs-directory "places")
+      backup-directory-alist `(("." . ,(concat user-emacs-directory "backups")))
+      diff-switches "-u")
+
+(setq smex-save-file (concat user-emacs-directory ".smex-items"))
+(smex-initialize)
+(global-set-key (kbd "M-x") 'smex)
+
+(add-to-list 'safe-local-variable-values '(lexical-binding . t))
+(add-to-list 'safe-local-variable-values '(whitespace-line-column . 80))
+
+;; ido-mode is like magic pixie dust!
+(ido-mode t)
+(ido-ubiquitous t)
+(setq ido-enable-prefix nil
+      ido-enable-flex-matching t
+      ido-auto-merge-work-directories-length nil
+      ido-create-new-buffer 'always
+      ido-use-filename-at-point 'guess
+      ido-use-virtual-buffers t
+      ido-handle-duplicate-virtual-buffers 2
+      ido-max-prospects 10)
+
+;; Swedish!
+(set-language-environment 'Swedish)
+
+(require 'ffap)
+(defvar ffap-c-commment-regexp "^/\\*+"
+  "Matches an opening C-style comment, like \"/***\".")
+
+(defadvice ffap-file-at-point (after avoid-c-comments activate)
+  "Don't return paths like \"/******\" unless they actually exist.
+
+This fixes the bug where ido would try to suggest a C-style
+comment as a filename."
+  (ignore-errors
+    (when (and ad-return-value
+               (string-match-p ffap-c-commment-regexp
+                               ad-return-value)
+               (not (ffap-file-exists-string ad-return-value)))
+      (setq ad-return-value nil))))
+
+(defalias 'yes-or-no-p 'y-or-n-p)
+(defalias 'auto-tail-revert-mode 'tail-mode)
+
+;; Hippie expand: at times perhaps too hip
+(eval-after-load 'hippie-exp
+  '(progn
+     (dolist (f '(try-expand-line try-expand-list try-complete-file-name-partially))
+       (delete f hippie-expand-try-functions-list))
+     
+     ;; Add this back in at the end of the list.
+     (add-to-list 'hippie-expand-try-functions-list 'try-complete-file-name-partially t)))
+
+;; ## Look and feel ##
+
+;; Theme!
+(custom-download-theme "https://raw.github.com/owainlewis/emacs-color-themes/master/themes/hickey-theme.el"
+                       "hickey-theme.el")
+
+(load-theme 'hickey t)
+
+;; Hiding JOIN, QUIT, PART
+(setq erc-hide-list '("JOIN" "PART" "QUIT"))
+
+;; Enable projectile for all things programming
+(add-hook 'prog-mode-hook 'projectile-on)
+
+;; Enable rainbow-delimiters for all things programming
+(add-hook 'prog-mode-hook 'rainbow-delimiters-mode)
+
+;; Enable paredit in all Lisps
+(add-hook 'lisp-mode-hook 'paredit-mode)
+
+(eval-after-load 'diff-mode
+  '(progn
+     (set-face-foreground 'diff-added "green4")
+     (set-face-foreground 'diff-removed "red3")))
+
+(eval-after-load 'magit
+  '(progn
+     (set-face-foreground 'magit-diff-add "green4")
+     (set-face-foreground 'magit-diff-del "red3")))
+
+;; ## Mac specific settings ##
+
+(setq browse-url-browser-function 'browse-default-macosx-browser)
+
+;; Enable mouse support on OS X
+(unless window-system
+  (require 'mouse)
+  (xterm-mouse-mode t)
+  (global-set-key [mouse-4] '(lambda ()
+                              (interactive)
+                              (scroll-down 1)))
+  (global-set-key [mouse-5] '(lambda ()
+                              (interactive)
+                              (scroll-up 1)))
+  (defun track-mouse (e))
+
+  (setq mouse-sel-mode t)
+)
+
+;; Use clipboard properly
+(setq x-select-enable-clipboard t)
+
+;; Settings for Emacs.app (Cocoa Emacs)
+;; Menu bar doesn't take up additional space, so lets use it.
+(menu-bar-mode 1)
+
+;; Don't use Apple's native fullscreen (FIXME: Change with Mavericks)
+(setq ns-use-native-fullscreen nil)
+
+;; ... and then enable fullscreen. (This requires a nightly build of
+;; Emacs for OS X)
+;;(toggle-frame-fullscreen)
+
+;; ## Navigation and key bindings ##
+
+;; Navigate windows with M-<arrows>
+(windmove-default-keybindings 'meta)
+(setq windmove-wrap-around t)
+
+;; Load ace-jump-mode
+(autoload
+  'ace-jump-mode
+  "ace-jump-mode"
+  "Emacs quick move minor mode"
+  )
+
+(define-key global-map [?] 'ace-jump-mode)
+
+;; Quick jump back 
+(autoload
+  'ace-jump-mode-pop-mark
+  "ace-jump-mode"
+  "Ace jump back:-)"
+  )
+
+(eval-after-load "ace-jump-mode"
+  '(ace-jump-mode-enable-mark-sync))
+(define-key global-map (kbd "C-x ö") 'ace-jump-mode-pop-mark)
+
+;; Eshell
+;; Start/join
+(global-set-key (kbd "C-x m") 'eshell)
+;; Always start
+(global-set-key (kbd "C-x M") (lambda () (interactive) (eshell t)))
+
+;; Git
+(global-set-key (kbd "C-c g") 'magit-status)
+
+(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
diff --git a/emacs.d/init.el b/emacs.d/init.el
new file mode 100644
index 000000000000..7d8733fe487d
--- /dev/null
+++ b/emacs.d/init.el
@@ -0,0 +1,50 @@
+;; Configure package manager
+(require 'package)
+
+;; Add Marmalade repo
+(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
+
+;; ... and melpa. Melpa packages that exist on marmalade will have
+;; precendence.
+(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
+
+(package-initialize)
+
+(when (not package-archive-contents)
+  (package-refresh-contents))
+
+;; Important packages
+(defvar my-pkgs '(starter-kit-bindings
+                  haskell-mode
+                  markdown-mode
+                  magit
+                  leuven-theme
+                  projectile
+                  rainbow-delimiters
+                  nrepl
+                  clojure-mode
+                  ace-jump-mode
+                  switch-window)
+  "A list of packages to install at launch.")
+
+(dolist (p my-pkgs)
+  (when (not (package-installed-p p))
+    (package-install p)))
+
+
+(load "~/.emacs.d/init-functions.el")
+(load "~/.emacs.d/init-settings.el")
+
+(setq custom-file "~/.emacs.d/init-custom.el")
+(load custom-file)
+
+;; IRC configuration (erc)
+;; Actual servers and such are loaded from irc.el
+(require 'erc)
+(load "~/.emacs.d/irc")
+
+;; Seed RNG
+(random t)
+
+;; Start server for emacsclient
+(server-start)