Skip to content

Instantly share code, notes, and snippets.

@nicferrier
Created July 22, 2012 10:21
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save nicferrier/3159186 to your computer and use it in GitHub Desktop.
Save nicferrier/3159186 to your computer and use it in GitHub Desktop.
My .emacs self installing portable config
:;exec emacs -batch -l "$0" -f nic-custom-self-install "$@"
;;; custom.el --- Nic's custom stuff for Emacs
;; Copyright (C) 2012 Nic Ferrier <nferrier@ferrier.me.uk>
;; Author: Nic Ferrier <nferrier@ferrier.me.uk>
;; Keywords: local
;; 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 attempt to finally make my emacs config portable.
;; The idea is that you set your init.el up by running the command in
;; here `nic-custom-self-install' which you can do by executing this
;; script as a shell script:
;;
;; bash ./nic-custom.el
;; Doing that makes this script the source of all knowledge. Put all
;; local hacks here or use packages.
;;; Code:
(defconst nic-custom-bootstrap
(list '(load-file
(setq custom-file
(concat
(file-name-directory
(or (buffer-file-name)
load-file-name))
"nic-custom.el"))))
"The lisp that will be used for the init.el.")
(defun nic-custom-self-install ()
"Self install this code into init.el"
(interactive)
(with-temp-buffer
(let ((fmt-obj
(format
";; Init file installed by niccustom.el
%s
;; End init file"
(pp-to-string
(car nic-custom-bootstrap)))))
(insert fmt-obj))
(write-file (or user-init-file "~/.emacs.d/init.el"))))
;; I really hate brief-mode's keybinding
(fmakunbound 'brief-mode)
;; No need for any other xml mode
(fset 'xml-mode 'nxml-mode)
(defun ispell-lookup (word)
"Lookup a word in the ispell dictionary.
Just uses the minibuffer to read the word."
(interactive "Mword: ")
(with-current-buffer (get-buffer-create "* ispell-lookup *")
(erase-buffer)
(insert word)
(goto-char (point-min))
(switch-to-buffer-other-window (current-buffer))
(ispell-word)))
(defadvice kill-ring-save (before slick-copy activate compile)
"When called interactively with no active region, copy a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(message "Copied line")
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slick-cut activate compile)
"When called interactively with no active region, kill a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice server-start
(around nic-custome-detect-existing first activate compile)
"Detect if the Emacs server is already running.
If it's running then don't start it."
(unless (file-exists-p
(concat
"/tmp/emacs1000/"
server-name))
ad-do-it))
;; Otto work for groovy, Wolf's gradle code uses 4 wide tabs
(add-to-list 'auto-mode-alist '("\\.gradle" . groovy-mode))
(add-hook 'groovy-mode-hook (lambda () (setq tab-width 4)))
(add-hook 'js-mode-hook (lambda () (linum-mode 1)(flyspell-prog-mode)))
(add-hook
'css-mode-hook
(lambda () (linum-mode 1)(flyspell-prog-mode)(rainbow-mode 1)))
(add-hook 'nxml-mode-hook (lambda () (linum-mode 1)(flyspell-prog-mode)))
(add-to-list
'auto-mode-alist
'("\\.\\(xml\\|xslt\\|xsd\\|rng\\|xhtml\\|html\\)\\'" . nxml-mode))
(add-to-list 'auto-mode-alist '("\\.yml" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.pp" . conf-mode))
(add-to-list 'auto-mode-alist '("\\.rake" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.[^.]+rc" . shell-script-mode))
(add-to-list 'auto-mode-alist '("\\.\\(as\\|asant\\)\\'" . java-mode))
(add-to-list 'auto-mode-alist '("\\(Rakefile\\|Capfile\\)" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.md" . markdown-mode))
;; Use this for stuff which is in the package system and can't be
;; started any other way
(add-hook 'after-init-hook 'cycbuf-init)
;; Some personal keys for things that don't have them
(global-set-key
"\M-?"
(lambda ()
(interactive)
(call-interactively 'magit-status)))
;;(global-set-key "\M-P" 'mdmua-pull)
(global-set-key (kbd "C-'") 'shell-switcher-switch-buffer)
(global-set-key (kbd "C-x 4 '") 'shell-switcher-switch-buffer-other-window)
(global-set-key (kbd "C-M-'") 'shell-switcher-new-shell)
(require 'uniquify)
(require 'dired-x)
(provide 'nic-custom)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment