; Use XDG-ish locations (setq xdg-cache-home (file-name-as-directory (or (getenv "XDG_CACHE_HOME") "~/.cache"))) (setq package-user-dir (concat xdg-cache-home "emacs/elpa") ido-save-directory-list-file (concat xdg-cache-home "emacs/ido.last.el") el-get-dir (concat xdg-cache-home "emacs/el-get/") eshell-directory-name (concat xdg-cache-home "emacs/eshell/") wl-score-files-directory (concat xdg-cache-home "emacs/wl-score-files/") elmo-msgdb-directory (concat xdg-cache-home "emacs/elmo-msgdb/") elmo-cache-directory (concat xdg-cache-home "emacs/elmo-cache/") auto-save-list-file-prefix (concat xdg-cache-home "emacs/auto-save-list/saves-") tramp-persistency-file-name (concat xdg-cache-home "emacs/tramp-cache.el") custom-file (concat user-emacs-directory "custom.el") wl-init-file (concat user-emacs-directory "wl.el") ) ;; The basics I can't live without ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (show-paren-mode 1) (column-number-mode 1) (line-number-mode 1) (ido-mode 1) (unless (daemonp) (server-mode 1)) (when (require 'whitespace nil t) (setq whitespace-style '( tab-mark space-mark newline-mark empty )) (global-set-key "\C-cw" 'global-whitespace-mode)) (setq minibuffer-prompt-properties '( read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt )) ;; Preliminary settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set-face-attribute 'default nil :height 80) (add-to-list 'load-path user-emacs-directory) (load custom-file 'noerror) ;; Bootstrap ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Derived from ELPA installation ; http://tromey.com/elpa/install.html (defun eval-url (url) (let ((buffer (url-retrieve-synchronously url))) (save-excursion (set-buffer buffer) (goto-char (point-min)) (re-search-forward "^$" nil 'move) (eval-region (point) (point-max)) (kill-buffer (current-buffer))))) (add-to-list 'load-path (concat el-get-dir "el-get")) (unless (require 'el-get nil t) (let ((el-get-install-branch "master")) ;; live life on the edge (eval-url "https://github.com/dimitri/el-get/raw/master/el-get-install.el"))) ;; Install plugins ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (setq package-enable-at-startup nil) (setq el-get-sources '( (:name dtrt-indent :type elpa :after (dtrt-indent-mode 1)) (:name coffee-mode :type elpa :after (add-hook 'coffee-mode-hook '(lambda () (set (make-local-variable 'tab-width) 2) (set (make-local-variable 'indent-tabs-mode) nil) ))) (:name smart-tabs-mode :type elpa :after (progn (smart-tabs-mode-enable) (apply 'smart-tabs-insinuate (mapcar 'car smart-tabs-insinuate-alist)))) (:name graphviz-dot-mode :type elpa) (:name markdown-mode :type elpa :after (add-to-list 'auto-mode-alist '("\\.ronn\\'" . markdown-mode))) (:name nginx-mode :type elpa :after (put 'nginx-indent-level 'safe-local-variable 'integerp)) (:name scss-mode :type elpa) )) (el-get 'sync '(el-get apel flim semi wanderlust dtrt-indent smart-tabs-mode nginx-mode markdown-mode ;nxhtml )) ;; General settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) (defadvice align-regexp (around align-with-spaces) (let ((indent-tabs-mode nil)) ad-do-it)) (require 'go-mode-load nil t) (require 'uniquify) (load "emacsutils") (when (require 'mailcrypt nil t) (mc-setversion "gpg") (add-hook 'wl-summary-mode-hook 'mc-install-read-mode) (add-hook 'wl-mail-setup-hook 'mc-install-write-mode) (defun mc-wl-verify-signature () (interactive) (save-window-excursion (wl-summary-jump-to-current-message) (mc-verify))) (defun mc-wl-decrypt-message () (interactive) (save-window-excursion (wl-summary-jump-to-current-message) (let ((inhibit-read-only t)) (mc-decrypt)))) (eval-after-load "mailcrypt" '(setq mc-modes-alist (append (quote ((wl-draft-mode (encrypt . mc-encrypt-message) (sign . mc-sign-message)) (wl-summary-mode (decrypt . mc-wl-decrypt-message) (verify . mc-wl-verify-signature)))) mc-modes-alist))) ) (setq-default truncate-lines t) (setq inhibit-startup-screen t org-log-done 'time gamegrid-user-score-file-directory "/var/games/emacs/" ) ;; Indent settings (setq-default indent-tabs-mode t tab-width 8 c-basic-offset 8 sh-basic-offset 8 sh-indent-comment t ) ;; Backup settings (setq backup-by-copying t ;; don't clobber symlinks backup-directory-alist '(("." . "~/.cache/emacs/emacs/saves")) ;; don't litter my fs tree delete-old-versions t kept-new-versions 6 kept-old-versions 2 version-control t ;; use versioned backups ) ;; Web browser settings (setq browse-url-generic-program (executable-find "v-www-browser") browse-url-browser-function 'browse-url-generic ) ;; Make work like in every other program (defun toggle-fullscreen (&optional f) (interactive) (let ((current-value (frame-parameter nil 'fullscreen))) (set-frame-parameter nil 'fullscreen (if (equal 'fullboth current-value) (if (boundp 'old-fullscreen) old-fullscreen nil) (progn (setq old-fullscreen current-value) 'fullboth))))) (global-set-key [f11] 'toggle-fullscreen) (add-hook 'text-mode-hook 'turn-on-auto-fill) (add-hook 'lisp-mode-hook '(lambda () (set (make-local-variable 'indent-tabs-mode) nil) )) (add-hook 'emacs-lisp-mode-hook '(lambda () (set (make-local-variable 'indent-tabs-mode) nil) )) (add-hook 'term-mode-hook '(lambda () (auto-fill-mode -1) (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") (set (make-local-variable 'mouse-yank-at-point) t) (setq tab-width 8 ) (setq truncate-lines nil) (set (make-local-variable 'autopair-dont-activate) t) ;; Don't let autopair break ansi-term )) (add-hook 'ruby-mode-hook '(lambda () (set (make-local-variable 'indent-tabs-mode) t) (set (make-local-variable 'ruby-indent-level) 4) (set (make-local-variable 'tab-width) 4) )) (add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode)) (add-to-list 'auto-mode-alist '("SRCBUILD" . sh-mode)) (defun try-smerge-mode () (save-excursion (goto-char (point-min)) (when (re-search-forward "^<<<<<<< " nil t) (smerge-mode 1)))) (add-hook 'find-file-hook 'try-smerge-mode t)