Created
December 20, 2016 05:07
-
-
Save matthew-ball/faa6a927c0f31729fef9b36461cd8b5b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defgroup user-variables nil "User variables.") | |
(defcustom user-projects-directory "~/Public/" "Directory for user's project files." :type 'directory :group 'user-variables) | |
(defcustom user-documents-directory "~/Documents/" "Directory for user's files." :type 'directory :group 'user-variables) | |
(defcustom user-notes-file (concat (expand-file-name user-documents-directory) "notes.org") "File for user's organisation." :type 'file :group 'user-variables) | |
(defcustom user-packages-list '(magit gist markdown-mode undo-tree browse-kill-ring adaptive-wrap projectile slime yasnippet auto-complete diminish) "List of user packages." :type '(repeat symbol) :group 'user-variables) | |
(eval-when-compile (require 'cl-lib)) | |
(defmacro load-after (mode &rest body) | |
(declare (indent defun)) | |
`(eval-after-load ,mode '(progn ,@body))) | |
(menu-bar-mode -1) | |
(tool-bar-mode -1) | |
(scroll-bar-mode -1) | |
(blink-cursor-mode -1) | |
(tooltip-mode -1) | |
(file-name-shadow-mode 1) | |
(delete-selection-mode 1) | |
(show-paren-mode 1) | |
(electric-pair-mode 1) | |
(line-number-mode 1) | |
(column-number-mode 1) | |
(size-indication-mode 1) | |
(global-prettify-symbols-mode 1) | |
(global-visual-line-mode 1) | |
(fringe-mode '(nil . 2)) | |
(setq-default tab-width 4 | |
show-trailing-whitespace 1 | |
delete-old-versions 1) | |
(setq show-paren-style 'parenthesis | |
show-paren-delay 1.0 | |
inhibit-startup-message 1 | |
inhibit-echo-area-message 1 | |
completion-ignore-case 1 | |
read-buffer-completion-ignore-case 1 | |
read-file-name-completion-ignore-case 1 | |
disabled-command-function nil | |
use-dialog-box nil | |
confirm-nonexistent-file-or-buffer nil) | |
(require 'package) | |
(load-after "package" | |
(package-initialize) | |
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) | |
(defun user-packages-install () | |
(dolist (package user-packages-list) | |
(unless (package-installed-p package) | |
(package-install package)))) | |
(unless package-archive-contents | |
(package-refresh-contents) | |
(user-packages-install))) | |
(require 'uniquify) | |
(load-after "uniquify" | |
(setq uniquify-buffer-name-style 'reverse | |
uniquify-separator "/" | |
uniquify-after-kill-buffer-p 1 | |
unifuidy-ignore-buffers-re "^\\*")) | |
(require 'recentf) | |
(load-after "recentf" | |
(setq recentf-save-file (concat (expand-file-name user-emacs-directory) "recent-files") | |
recentf-max-saved-items 500 | |
recentf-max-menu-items 25) | |
(recentf-mode 1)) | |
(require 'savehist) | |
(load-after "savehist" | |
(savehist-mode 1) | |
(setq savehist-file (concat (expand-file-name user-emacs-directory) "save-history"))) | |
(require 'saveplace) | |
(load-after "saveplace" | |
;; TODO: update this for emacs25 | |
(setq-default save-place 1) | |
(setq save-place-file (concat (expand-file-name user-emacs-directory) "save-place"))) | |
(require 'flyspell) | |
(load-after "flyspell" | |
(add-hook 'text-mode-hook #'turn-on-flyspell) | |
(defun turn-on-flyspell-prog-mode () | |
(flyspell-prog-mode)) | |
(add-hook 'prog-mode-hook #'turn-on-flyspell-prog-mode)) | |
(require 'ispell) | |
(load-after "ispell" | |
(setq ispell-program-name "aspell" | |
ispell-dictionary "en_GB" | |
ispell-parser 'tex | |
ispell-extra-args '("--sug-mode=ultra"))) | |
(require 'eldoc) | |
(load-after "eldoc" | |
(defun turn-on-eldoc-mode () | |
(eldoc-mode 1)) | |
(add-hook 'emacs-lisp-mode-hook #'turn-on-eldoc-mode)) | |
(require 'midnight) | |
(require 'hideshow) | |
(load-after "hideshow" | |
(setq hs-hide-comments nil | |
hs-isearch-open t | |
hs-set-up-overlay #'display-code-line-count) | |
(defun toggle-selective-display (column) | |
(interactive "P") | |
(set-selective-display | |
(or column | |
(unless selective-display | |
(1+ (current-column)))))) | |
(defun toggle-hiding (column) | |
(interactive "P") | |
(if hs-minor-mode | |
(if (condition-case nil | |
(hs-toggle-hiding) | |
(error t)) | |
(hs-show-all)) | |
(toggle-selective-display column))) | |
(defun display-code-line-count (ov) | |
(when (eq 'code (overlay-get ov 'hs)) | |
(overlay-put ov 'display | |
(format "... / %d" (count-lines (overlay-start ov) | |
(overlay-end ov)))))) | |
(defun turn-on-hideshow-mode () | |
(hs-minor-mode 1)) | |
(add-hook 'prog-mode-hook #'turn-on-hideshow-mode)) | |
(require 'imenu) | |
(load-after "imenu" | |
(defun ido-jump-to-symbol (&optional symbol-list) | |
(interactive) | |
(unless (featurep 'imenu) | |
(require 'imenu nil t)) | |
(cond | |
((not symbol-list) | |
(let ((ido-mode ido-mode) | |
(ido-enable-flex-matching | |
(if (boundp 'ido-enable-flex-matching) | |
ido-enable-flex-matching t)) | |
name-and-pos symbol-names position) | |
(unless ido-mode | |
(ido-mode 1) | |
(setq ido-enable-flex-matching t)) | |
(while (progn | |
(imenu--cleanup) | |
(setq imenu--index-alist nil) | |
(ido-jump-to-symbol (imenu--make-index-alist)) | |
(setq selected-symbol (ido-completing-read "Jump to: " symbol-names)) | |
(string= (car imenu--rescan-item) selected-symbol))) | |
(unless (and (boundp 'mark-active) mark-active) | |
(push-mark nil t nil)) | |
(setq position (cdr (assoc selected-symbol name-and-pos))) | |
(cond | |
((overlayp position) (goto-char (overlay-start position))) | |
(t (goto-char position))))) | |
((listp symbol-list) | |
(dolist (symbol symbol-list) | |
(let (name position) | |
(cond | |
((and (listp symbol) (imenu--subalist-p symbol)) (ido-jump-to-symbol symbol)) | |
((listp symbol) (setq name (car symbol)) (setq position (cdr symbol))) | |
((stringp symbol) (setq name symbol) (setq position (get-text-property 1 'org-imenu-marker symbol)))) | |
(unless (or (null position) (null name) (string= (car imenu--rescan-item) name)) | |
(add-to-list 'symbol-names name) (add-to-list 'name-and-pos (cons name position)))))))) | |
(global-set-key (kbd "C-c C-j") #'ido-jump-to-symbol)) | |
(autoload 'ido-switch-buffer "ido" "Interactively do things!" t) | |
(load-after "ido" | |
(ido-mode 1) | |
(ido-everywhere 1) | |
(setq ido-enable-flex-matching 1 | |
ido-use-virtual-buffers 1 | |
ido-create-new-buffer 'always | |
ido-case-fold 1 | |
ido-show-dot-for-dired 1)) | |
(autoload 'ibuffer "ibuffer" "Interactively list buffers." t) | |
(load-after "ibuffer" | |
(require 'ibuf-ext) | |
(setq ibuffer-show-empty-filter-groups nil | |
ibuffer-default-sorting-mode 'filename/process | |
ibuffer-sorting-mode 'recency | |
ibuffer-expert 1 | |
ibuffer-always-show-last-buffer 1 | |
ibuffer-display-summary 1 | |
ibuffer-case-fold-search 1 | |
ibuffer-old-time 24 | |
ibuffer-truncate-lines 1 | |
ibuffer-use-header-line 1 | |
;; ibuffer-use-other-window 1 | |
ibuffer-directory-abbrev-alist `((,(expand-file-name user-emacs-directory) . "~/.emacs.d/") | |
(,(expand-file-name "~/.config-scripts/") . "~/.conf/") | |
(,(expand-file-name user-documents-directory) . "~/Documents/") | |
(,(expand-file-name user-projects-directory) . "~/Public/")) | |
ibuffer-saved-filter-groups `(("default" | |
("Configuration" | |
(or (filename . ,(expand-file-name user-emacs-directory)) | |
(filename . ,(expand-file-name "~/.config-scripts/")))) | |
("Projects" | |
(filename . ,(expand-file-name user-projects-directory))) | |
("Documents" | |
(filename . ,(expand-file-name user-documents-directory))) | |
("Miscellaneous" | |
(or (name . "\\*scratch\\*$") | |
(mode . ibuffer-mode) | |
(mode . customize-mode) | |
(mode . Custom-mode) | |
(mode . help-mode) | |
(mode . messages-buffer-mode)))))) | |
(add-to-list 'ibuffer-never-show-predicates " ^\\*Minibuf-0\\*$") | |
(add-to-list 'ibuffer-never-show-predicates " ^\\*Minibuf-1\\*$") | |
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions\\*$") | |
(add-to-list 'ibuffer-never-show-predicates "^\\*Backtrace\\*$") | |
(defun turn-on-custom-ibuffer-mode () | |
(ibuffer-auto-mode 1) | |
(ibuffer-switch-to-saved-filter-groups "default")) | |
(add-hook 'ibuffer-mode-hook #'turn-on-custom-ibuffer-mode)) | |
;; (autoload 'eshell "eshell" "Shell written in Emacs Lisp." t) | |
;; (load-after "eshell" | |
;; (setq eshell-prompt-function #'custom-eshell-prompt) | |
;; (defmacro with-face (string &rest properties) | |
;; `(propertize ,string 'face (list ,@properties))) | |
;; (defun custom-eshell-prompt () | |
;; (format "%s@%s:%s%s%s" | |
;; (with-face user-login-name :foreground "red" :weight 'bold) | |
;; (with-face (car (split-string system-name "\\.")) :foreground "green" :weight 'bold) | |
;; (with-face (eshell/pwd) :foreground "blue" :weight 'bold) | |
;; (if (= (user-uid) 0) | |
;; (with-face " #" :foreground "red") | |
;; "$") | |
;; " "))) | |
(require 'dired) | |
(load-after "dired" | |
(require 'dired-x) | |
(setq dired-listing-switches "--color=auto -DaGghlv --group-directories-first --time-style=long-iso" | |
dired-dwim-target t | |
dired-omit-files (concat dired-omit-files "\\|^\\..+$")) | |
(defun turn-on-custom-dired-mode-bindings () | |
(define-key dired-mode-map (kbd "<return>") #'dired-find-alternate-file) | |
(define-key dired-mode-map (kbd "^") #'(lambda () (interactive) (find-alternate-file "..")))) | |
(defun turn-on-custom-dired-mode () | |
(turn-on-custom-dired-mode-bindings) | |
(dired-hide-details-mode) | |
(dired-omit-mode)) | |
(add-hook 'dired-mode-hook #'turn-on-custom-dired-mode)) | |
(autoload 'org-mode "org" "Outline based notes management and organizer." t) | |
(load-after "org" | |
(setq org-return-follow-links 1 | |
org-completion-use-ido 1 | |
org-cycle-separator 1 | |
org-directory user-documents-directory | |
org-default-notes-file user-notes-file | |
org-agenda-include-diary nil | |
org-agenda-inhibit-startup 1 | |
org-agenda-span 'month | |
org-agenda-files `(,(expand-file-name user-notes-file)) | |
org-confirm-babel-evaluate nil | |
org-src-fontify-natively 1 | |
org-src-tab-acts-natively 1 | |
org-export-in-background 1 | |
org-export-with-toc nil | |
org-export-with-tasks nil | |
org-export-with-todo-keywords nil | |
org-latex-listings 1 | |
org-tag-alist '(("NOTES" . ?n) | |
("TASKS" . ?t)) | |
org-capture-templates '(("N" "Note" entry (file+headline (expand-file-name user-notes-file) "Notes") | |
"*** %^{Title} %^g\n%^{Text}\n\n" :empty-lines 1 :immediate-finish 1) | |
("T" "Task" entry (file+headline (expand-file-name user-notes-file) "Tasks") | |
"*** TODO %^{Description} %^g\n%^{Text}\n\n" :empty-lines 1 :immediate-finish 1))) | |
(add-to-list 'org-latex-packages-alist '("" "listings")) | |
(add-to-list 'org-latex-packages-alist '("" "color")) | |
(org-babel-do-load-languages 'org-babel-do-load-languages | |
'((emacs-lisp . t) | |
(sh . t))) | |
(defun surrounded-by-p (char) | |
(save-excursion | |
(and (forward-word -1) | |
(equal char (char-before)) | |
(forward-word 1) | |
(equal char (char-after))))) | |
(defun surround-word (char &optional force) | |
(save-excursion | |
(if (not (surrounded-by-p char)) | |
(progn | |
(forward-word 1) | |
(insert char) | |
(forward-word -1) | |
(insert char) | |
t) | |
(forward-word 1) | |
(delete-char 1) | |
(forward-word -1) | |
(delete-char -1) | |
nil))) | |
(defmacro org-propertise-word (prop char) | |
`(defun ,(intern (format "org-%s-word" prop)) (&optional force) | |
(interactive "p") | |
(surround-word ,char force))) | |
(org-propertise-word bold ?*) | |
(org-propertise-word italic ?/) | |
(org-propertise-word underline ?_) | |
(org-propertise-word verbatim ?~) | |
(org-propertise-word teletype ?=) | |
(defun turn-on-custom-org-mode-bindings () | |
(define-key org-mode-map (kbd "C-c b") #'org-bold-word) | |
(define-key org-mode-map (kbd "C-c i") #'org-italic-word) | |
(define-key org-mode-map (kbd "C-c u") #'org-underline-word) | |
(define-key org-mode-map (kbd "C-c v") #'org-verbatim-word) | |
(define-key org-mode-map (kbd "C-c t") #'org-teletype-word)) | |
(defun turn-on-custom-org-mode () | |
(org-toggle-pretty-entities) | |
(turn-on-custom-org-mode-bindings)) | |
(add-hook 'org-mode-hook #'turn-on-custom-org-mode) | |
(defun turn-on-hl-line-mode () | |
(hl-line-mode 1)) | |
(add-hook 'org-agenda-mode-hook #'turn-on-hl-line-mode 'append)) | |
(autoload 'python-mode "python" "Python development." t) | |
(load-after "python" | |
(setq python-shell-interpreter "python3")) | |
(autoload 'magit-status "magit" "Manage git repositories." t) | |
(load-after "magit" | |
;;(setq magit-completing-read-function #'magit-ido-completing-read) | |
(diminish 'auto-revert-mode "")) | |
(autoload 'gist-region "gist" "Gist!" t) | |
(load-after "gist") | |
(autoload 'gfm-mode "markdown-mode" "GitHub flavoured markdown." t) | |
(autoload 'undo-tree-visualize "undo-tree" "Display undo information." t) | |
(load-after "undo-tree" | |
(setq undo-tree-auto-save-history 1 | |
undo-tree-history-directory-alist `((".*" . ,(concat (expand-file-name user-emacs-directory) "undo-history"))))) | |
(autoload 'browse-kill-ring "browse-kill-ring" "Browse kill ring." t) | |
(load-after "browse-kill-ring" | |
(setq browse-kill-ring-highlight-inserted-item 1 | |
browse-kill-ring-show-preview 1)) | |
(require 'adaptive-wrap) | |
(load-after "adaptive-wrap" | |
(defun turn-on-adaptive-wrap-prefix-mode () | |
(adaptive-wrap-prefix-mode 1)) | |
(add-hook 'text-mode-hook #'turn-on-adaptive-wrap-prefix-mode)) | |
(require 'projectile) | |
(load-after "projectile" | |
(projectile-mode 1)) | |
(require 'slime-autoloads) | |
(load-after "slime" | |
(setq inferior-lisp-program "~/Public/ccl/armcl" | |
slime-startup-animation nil | |
slime-repl-history-file (concat (expand-file-name user-emacs-directory) "slime-history")) | |
(slime-setup '(slime-fancy))) | |
(require 'yasnippet) | |
(load-after "yasnippet" | |
(yas-global-mode 1)) | |
(require 'auto-complete) | |
(load-after "auto-complete" | |
(ac-config-default) | |
(setq ac-auto-start nil | |
ac-auto-show-menu nil | |
ac-delay 1.0 | |
ac-candidate-limit 10) | |
(defun ac-add-yasnippet-source () | |
(add-to-list 'ac-sources 'ac-source-yasnippet)) | |
(add-hook 'prog-mode-hook #'ac-add-yasnippet-source) | |
(global-auto-complete-mode 1)) | |
(require 'diminish) | |
(load-after "diminish" | |
(diminish 'flyspell-mode "") | |
(diminish 'visual-line-mode "") | |
(diminish 'yas-minor-mode "") | |
(diminish 'auto-complete-mode "") | |
(diminish 'abbrev-mode "") | |
(diminish 'eldoc-mode "") | |
(diminish 'hs-minor-mode "")) | |
(defun complete-string (source) | |
(cond | |
((fboundp #'auto-complete) (auto-complete source)) | |
(t (dabbrev-expand source)))) | |
(defun smart-tab () | |
(interactive) | |
(if (minibufferp) | |
(unless (minibuffer-complete) | |
(complete-string nil)) | |
(if mark-active | |
(indent-region (region-beginning) (region-end)) | |
(if (looking-at "\\_>") | |
(complete-string nil) | |
(indent-for-tab-command))))) | |
(global-set-key (kbd "TAB") #'smart-tab) | |
(global-set-key (kbd "C-x C-b") #'ibuffer) | |
(global-set-key (kbd "C-x b") #'ido-switch-buffer) | |
(global-set-key (kbd "C-z") #'undo-tree-visualize) | |
(global-set-key (kbd "M-+") #'toggle-hiding) | |
;; (global-set-key (kbd "C-c o a") #'org-agenda) | |
;; (global-set-key (kbd "C-c o c") #'org-capture) | |
;; (global-set-key (kbd "C-c o b") #'org-iswitchb) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment