Skip to content

Instantly share code, notes, and snippets.

@matthew-ball
Created January 15, 2017 05:35
Show Gist options
  • Save matthew-ball/89b2d1e98e7dd3bb101419093ec3db5b to your computer and use it in GitHub Desktop.
Save matthew-ball/89b2d1e98e7dd3bb101419093ec3db5b to your computer and use it in GitHub Desktop.
(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-vabriables)
(defcustom user-notes-file (concat (expand-file-name user-documents-directory) "notes.org") "File for user's notes." :type 'file :group 'user-variables)
(defcustom user-packages-list '(magit gist undo-tree browse-kill-ring adaptive-wrap projectile yasnippet auto-complete diminish) "List of user packages." :type '(repeat symbol) :group 'user-variables)
(eval-when-compile (require 'cl-lib))
(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
real-file-name-completion-ignore-case 1
disabled-command-function nil
use-dialog-box nil
confirm-nonexistent-file-or-buffer nil)
(require '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)
(require 'recentf)
(recentf-mode 1)
(require 'savehist)
(savehist-mode 1)
(require 'saveplace)
(setq-default save-place 1)
(require 'flyspell)
(add-hook 'text-mode-hook #'turn-on-flyspell)
(add-hook 'prog-mode-hook #'flyspell-prog-mode)
(require 'ispell)
(setq ispell-dictionary "en_GB")
(require 'eldoc)
(add-hook 'emacs-lisp-mode-hook #'turn-on-eldoc-mode)
(require 'hideshow)
(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))))))
(setq hs-hide-comment nil
hs-isearch-open 1
hs-set-up-overlay #'display-code-line-count)
(add-hook 'prog-mode-hook #'hs-minor-mode)
(global-set-key (kbd "M-+") #'hs-toggle-hiding)
(require '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)
(require '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-abbrev-list `((,(expand-file-name user-emacs-directory) . "~/.emacs.d/"))
ibuffer-saved-filter-groups `(("default"
("Configuration"
(or (filename . ,(expand-file-name user-emacs-directory))
(filename . ,(expand-file-name "~/.bashrc"))
(filename . ,(expand-file-name "~/.screenrc"))))
("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))))))
(defun custom-ibuffer ()
(ibuffer-auto-mode 1)
(ibuffer-switch-to-saved-filter-groups "default"))
(add-hook 'ibuffer-mode-hook #'custom-ibuffer)
(global-set-key (kbd "C-x C-b") #'ibuffer)
(require 'dired)
(require 'dired-x)
(setq dired-listing-switches "--color=auto -DaGghlv --group-directories-first --time-style=long-iso"
dired-dwim-target 1
dired-omit-files (concat dired-omit-files "\\|^\\..+$"))
(defun custom-dired-bindings ()
(define-key dired-mode-map (kbd "<return>") #'dired-find-alternate-file)
(define-key dired-mode-map (kbd "^") #'(lambda () (interactive) (find-alternate-file ".."))))
(defun custom-dired ()
(custom-dired-bindings)
(dired-hide-details-mode)
(dired-omit-mode))
(add-hook 'dired-mode-hook #'custom-dired)
(require 'org)
(setq org-return-follows-link 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 custom-org-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 custom-org ()
(org-toggle-pretty-entities)
(custom-org-bindings))
(add-hook 'org-mode-hook #'custom-org)
(add-hook 'org-agenda-mode-hook #'hl-line-mode 'append)
(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)
;; user-packages
(require 'magit)
(require 'gist)
(require 'undo-tree)
(setq undo-tree-history 1
undo-tree-history-directory-alist `((".*" . ,(concat (expand-file-name user-emacs-directory) "undo-history"))))
(global-set-key (kbd "C-z") #'undo-tree-visualize)
(require 'browse-kill-ring)
(setq browse-kill-ring-highlight-inserted-item 1
browse-kill-ring-show-preview 1)
(require 'adaptive-wrap)
(add-hook 'text-mode-hook #'adaptive-wrap-prefix-mode)
(require 'projectile)
(projectile-mode 1)
(require 'yasnippet)
(yas-global-mode 1)
(require '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)
(diminish 'flyspell-mode "")
(diminish 'visual-line-mode "")
(diminish 'yas-minor-mode "")
(diminish 'auto-complete-mode "")
(diminish 'hs-minor-mode "")
(diminish 'eldoc-mode "")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment