Skip to content

Latest commit

 

History

History
699 lines (583 loc) · 18.3 KB

File metadata and controls

699 lines (583 loc) · 18.3 KB

Configuration File

Setup

(add-to-list 'load-path "~/.emacs.d/config-files/")
;;Add package archives
(require 'package)
  (setq package-enable-at-startup nil)
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")t)
  (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t)

;;Enable use-package
(package-initialize)

(unless (package-installed-p 'bind-key)
  (package-refresh-contents)
  (package-install 'bind-key))

;; Bootstrap `use-package'
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

;;Enable servermode allows emacs client to connect
(server-mode t)

;; Change the path so that terminal works
;;/usr/local/bin
(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
(setq exec-path (append exec-path '("/usr/local/bin")))

OS Specific

;;MacOS
;;############################
;;Realease Modifier Keys
(setq ns-right-alternate-modifier (quote noneaa))
(setq ns-right-option-modifier (quote none))
(setq ns-right-command-modifier (quote none))
(setq ns-right-control-modifier (quote none))

(setq mac-option-modifier 'meta)

(provide 'init-os-specific)

Secrets

(require 'init-secrets)

Text

Undo & Redo

;;UndoTree
(use-package undo-tree
  :ensure t
  :init
  (global-undo-tree-mode))

Copy & Paste

;;Counsel
(use-package counsel
  :ensure t
  :bind
  (("M-y" . counsel-yank-pop)
   :map ivy-minibuffer-map
   ("M-y" . ivy-next-line)))

;;Allow Emacs to access OS clipboard
(setq save-interprogram-paste-before-kill t)

Autocomplete & Snippets & Commenting

;; Enable ivy mode everywhere
;;   Brings up completions
(ivy-mode 1)

;;Auto-Complete
(use-package auto-complete
  :ensure t
  :init
  (progn
    (ac-config-default)
    (global-auto-complete-mode t)))

;;Yas Snippet
(use-package yasnippet
  :ensure t
  :init
  (yas-global-mode 1))

(global-set-key (kbd "C-;") 'comment-or-uncomment-region)

Moving Around

;;Text Navigation

;;(global-set-key "\C-s" 'swiper)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "C-x b") 'ivy-switch-buffer)

;;Avy
(use-package avy
  :ensure t
  :bind ("M-s" . avy-goto-char))

;;Expand Region
(use-package expand-region
  :ensure t
  :config 
  (global-set-key (kbd "C-=") 'er/expand-region))


;;Narrow & Widen
 (defun narrow-or-widen-dwim (p)
   (interactive "P")
   (declare (interactive-only))
   (cond ((and (buffer-narrowed-p) (not p)) (widen))
	   ((region-active-p)
	    (narrow-to-region (region-beginning)
			      (region-end)))
	   ((derived-mode-p 'org-mode)
	    (cond ((ignore-errors (org-edit-src-code) t)
		   (delete-other-windows))
		  ((ignore-errors (org-narrow-to-block) t))
		  (t (org-narrow-to-subtree))))
	   ((derived-mode-p 'latex-mode)
	    (LaTeX-narrow-to-environment))
	   (t (narrow-to-defun))))
 (define-key ctl-x-map "n" #'narrow-or-widen-dwim)
 (add-hook 'LaTeX-mode-hook
	     (lambda ()
	       (define-key LaTeX-mode-map "\C-xn"
		 nil)))

Searching Text

;; Swoop Search

(use-package helm-swoop
  :ensure t)

;; (global-set-key (kbd "C-s") 'helm-swoop)
(global-set-key (kbd "C-s") 'helm-swoop-without-pre-input)
;;(global-set-key (kbd "C-x C-f") 'helm-find-files)

Spelling

;; Spelling Configuration

;; ispell and aspell need to be installed
;; BASH COMMAND: brew install ispell --with-lang-en && brew install aspell --with-lang-en

(setq ispell-program-name "/usr/local/bin/aspell")

File

;;Dired Sidebar
(use-package dired-sidebar
  :bind (("C-x C-n" . dired-sidebar-toggle-sidebar))
  :ensure t
  :commands (dired-sidebar-toggle-sidebar)
  :config
  (use-package all-the-icons-dired
    ;; M-x all-the-icons-install-fonts
    :ensure t
    :commands (all-the-icons-dired-mode)))

Buffer & Window

 ;; Window and buffer navigation configuration

 ;;Ace Window
 (use-package ace-window
   :ensure t
   :init
   (progn
     (global-set-key [remap other-window] 'ace-window)
     (custom-set-faces
      '(aw-leading-char-face
	 ((t (:inherit ace-jump-face-foreground :height 3.0)))))))


 ;;Winner Mode
 (winner-mode 1)

 ;;IBuffer List Buffers
 (defalias 'list-buffers 'ibuffer-other-window)

 ;; Groups for specific buffer types

 (setq ibuffer-saved-filter-groups
	'(("home"
	   ("Org" (or (mode . org-mode)
		      (filename . "OrgMode")))
	   ("Development" (or (mode . shell-mode)
			      (mode . eshell-mode)
			      (mode . haskell-mode)
			      (name . ".hs$")))
	   ("dired" (mode . dired-mode))
	   ("emacs" (or
			   (name . "^\\*scratch\\*$")
			   (name . "^\\*Messages\\*$")))
	   ("irc" (or (mode . circe-channel-mode)
			      (mode . circe-server-mode)))
	   ("magit" (or (mode . magit-mode)
			      (name . "*magit*")))
	   ("Help" (or (name . "\*Help\*")
		       (name . "\*Apropos\*")
		       (name . "\*info\*")))
	   ("email" (or (mode . mu4e-headers)
			      (mode . mu4e:compose)))
	   )))


 (add-hook 'ibuffer-mode-hook
	    '(lambda ()
	       (ibuffer-auto-mode 1)
	       (ibuffer-switch-to-saved-filter-groups "home")))

 (setq ibuffer-show-empty-filter-groups nil)

 (add-hook 'ibuffer-mode-hook
	    (lambda ()
	      (ibuffer-auto-mode 1)
	      (ibuffer-switch-to-saved-filter-groups "default")))

 (use-package ibuffer-rcirc
   :ensure t)

 (setq ibuffer-formats
	'((mark modified read-only rcirc-activity-status-one-char " "
		(name 18 18 :left :elide)
		" "
		(size 9 -1 :right)
		" "
		(mode 16 16 :left :elide)
		" "
		;; (rcirc-activity-status 20 18 :left) " "
		;; (rcirc-activity-status-mini 5 3 :center) " "
		filename-and-process)))

 (defun kyle/kill-this-buffer ()
   "Kill the current buffer."
   (interactive)
   (kill-buffer (current-buffer)))

 (global-set-key (kbd "C-x M-k") 'kyle/kill-this-buffer)

Help & Documentation

;;Which Key
(use-package which-key
	  :ensure t
	  :config
	  (which-key-mode))

Interface

Basic Customisations

;;Disable Startup Message
(setq inhibit-startup-message t)

;;Disable Tool Bar
(tool-bar-mode -1)

;;Disable Tool Bar
;;(menu-bar-mode -1) 

;;Enable Line Numbers
(global-linum-mode t)

;;Confirmation Message
(fset 'yes-or-no-p 'y-or-n-p)

;;Line Highlighting
(global-hl-line-mode t)

;;Change the Default Size of the Text
(set-face-attribute 'default nil :height 160)

;;Clear the Buffers List
(setq ido-virtual-buffers '())
(setq recentf-list '())

;; Make the cursor full width of the character beneth it
(setq x-stretch-cursor t)

Theme

Doom Theme

 ;;Install the theme
 (use-package doom-themes
   :ensure t)

 (require 'doom-themes)

 ;; Global settings (defaults)
 (setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
	doom-themes-enable-italic t) ; if nil, italics is universally disabled

 ;; Load the theme (doom-one, doom-molokai, etc); keep in mind that each theme
 ;; may have their own settings.

 ;; (load-theme 'doom-one t)
 ;; (load-theme 'doom-one-light t)
 ;; (load-theme 'doom-vibrant t)
 ;; (load-theme 'doom-citylights t)
 ;; (load-theme 'doom-dracula t)
 (load-theme 'doom-molokai t)
 ;; (load-theme 'doom-nord t)
 ;; (load-theme 'doom-nord-light t)
 ;; (load-theme 'doom-nova t)
 ;; (load-theme 'doom-peacock t)
 ;; (load-theme 'doom-solarized-light t)
 ;; (load-theme 'doom-spacegrey t)
 ;; (load-theme 'doom-tomorrow-night t)


 ;; Enable flashing mode-line on errors
 (doom-themes-visual-bell-config)

 ;; Enable custom neotree theme
 (doom-themes-neotree-config)  ; all-the-icons fonts must be installed!

 ;; Corrects (and improves) org-mode's native fontification.
 (doom-themes-org-config)

Modeline

;;Mode Line
(display-time-mode 1)

 ;; (use-package powerline
 ;;   :ensure t
 ;;   :init
 ;;   (powerline-default-theme))

Programming

Highlighting

;; Highlight Maching Bracket
(show-paren-mode t)
(setq show-paren-style 'expression)

=#+BEGIN_SRC emacs-lisp (use-package highlight-indent-guides :ensure t) (add-hook ‘prog-mode-hook ‘highlight-indent-guides-mode)

=#+END_SRC

Version Control & Backup

;;Reload the file if chaanged on the disk
(global-auto-revert-mode 1)
(setq auto-revert-verbose nil)

;;Install magit
(use-package magit
  :ensure t
  :bind (("C-c g" . magit-status)))

(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))   ;;Change the location 
                                                              ;; of backup files
    backup-by-copying t    ; Don't delink hardlinks
    version-control t      ; Use version numbers on backups
    delete-old-versions t  ; Automatically delete excess backups
    kept-new-versions 20   ; how many of the newest versions to keep
    kept-old-versions 5    ; and how many of the old
    )

Terminal

;; Term Config

(use-package multi-term
  :ensure t)

(setq multi-term-program "/bin/bash")



(defun set-exec-path-from-shell-PATH ()
  (let ((path-from-shell (replace-regexp-in-string
			    "[ \t\n]*$"
			    ""
			    (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
    (setenv "PATH" path-from-shell)
    (setq eshell-path-env path-from-shell) ; for eshell users
    (setq exec-path (split-string path-from-shell path-separator))))

(when window-system (set-exec-path-from-shell-PATH))

Haskell

;; Haskell Customisations

(use-package haskell-mode
  :ensure t)

(add-hook 'haskell-mode-hook 'haskell-mode)

Java

Org Mode

Setup

;;Install and setup Org
(unless package-archive-contents    ;; Refresh the packages descriptions
  (package-refresh-contents))
(setq package-load-list '(all))     ;; List of packages to load
(unless (package-installed-p 'org)  ;; Make sure the Org package is
  (package-install 'org))           ;; installed, install it if not
(package-initialize)                ;; Initialize & Install Package

Misc

;;Install org Mode
(use-package org
  :ensure t)

;;(use-package org
;;  :ensure org-plus-contrib
;;  :pin org)



;;Org Tags
(setq org-tag-alist '(("SixthForm" . ?s) ("University" . ?u) ("Personal" . ?p)))

;;Org Clocking
(setq org-clock-into-drawer t)

;;Org Bullets
(use-package org-bullets 
  :ensure t
  :config
  (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

Agenda

 ;;Org Agenda

 (message "Entered Org Agenda")
 ;;Define Agenda Files Location
 (setq org-agenda-files (list "/Users/kyle/Dropbox/org/life.org"
			       "/Users/kyle/Dropbox/org/inbox.org"
			       "/Users/kyle/Dropbox/org/gcal.org"
			       "/Users/kyle/Dropbox/org/edinburgh.org"
			       "/Users/kyle/workspace/MapApp/README.org"))

 ;;Define the Org Agenda Key Map
 (define-key global-map "\C-ca" 'org-agenda)

 ;;Don't show done tasks in agenda
 (setq org-agenda-skip-scheduled-if-done nil)

 ;;Org Refile
 (setq org-refile-targets
	'(("life.org" :maxlevel . 2)
	  ("inbox.org" :maxlevel . 2)
	  ("edinburgh.org" :maxlevel . 2)))

 ;;Org Archive Type
 (setq org-archive-location "%s_archive::datetree/")
 ;;Custom Agenda View 1

 (setq org-agenda-custom-commands
	'(("c" "Simple agenda view"
	   ((tags "PRIORITY=\"A\""
		  ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
		   (org-agenda-overriding-header "High-priority unfinished tasks:")))
	    ;; (agenda "")
	    ;; (alltodo "")
	    ))))

Todo

 ;;Define Todo's
 (setq org-todo-keywords
	(quote ((sequence "TODO(t)" "IN-PROGRESS(p)" "WAITING(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)" "ARCHIVE(a)"))))
 (setq org-todo-keyword-faces
	(quote (("TODO" :foreground "red" :weight bold)
		("SOMEDAY" :foreground "orange" :weight bold)
		("DONE" :foreground "forest green" :weight bold)
		("WAITING" :foreground "orange" :weight bold)
		("IN-PROGRESS" :foreground "orange" :weight bold)
		("CANCELLED" :foreground "forest green" :weight bold)
		("ARCHIVE" :foreground "forest green" :weight bold))))

 ;;Set the parent todo done when all children complete
 (defun org-summary-todo (n-done n-not-done)
   (let (org-log-done org-log-states)
   (org-todo (if (= n-not-done 0) "DONE" "TODO"))))
   (add-hook 'org-after-todo-statistics-hook 'org-summary-todo)

Export

 ;;Org HTML Export
 (use-package htmlize
   :ensure t)

 ;;Agenda Export
 (setq org-agenda-exporter-settings
	'((ps-number-of-columns 2)
	  (ps-landscape-mode t)
	  (org-agenda-add-entry-text-maxlines 5)
	  (htmlize-output-type 'css)))

Capture

 ;;Org Capture
 ;;Capture Key Bindings
 (global-set-key (kbd "C-c c") 'org-capture)
 (define-key global-map "\C-cl" 'org-store-link)

 (setq org-log-done t)
 (setq org-agenda-skip-scheduled-if-done t)

 ;;Capture Templates
 (setq org-capture-templates
	'(
	  ("t" "Quick Task" entry (file "~/Dropbox/org/inbox.org") "* TODO %^{Brief Task Description}\nSCHEDULED: %^t\n %^{Additional Details}" :prepend t)
	  ("e" "Event" entry (file  "~/Dropbox/org/gcal.org" ) "* %?\n\n%^T\n\n:PROPERTIES:\n\n:END:\n\n")
	  ("n" "Note" entry (file+headline "~/Dropbox/org/life.org" "Misc Notes") "* %^{Title}\n%?" :prepend t)
	  ("d" "Diary" entry (file+datetree "~/Dropbox/org/diary.org") "** %^{Entry Title}\n%?")
	  ))

Literate

;;This code allow for literate programming in org mode.
(org-babel-do-load-languages
 'org-babel-load-languages
 '(
   (emacs-lisp . t)
   (java . t)
   (haskell . t)
   (latex . t)
   ))

;; (setq max-lisp-eval-depth 10000)
;; (setq max-specpdl-size 10000)

New Org Stuff

(setq org-deadline-warning-days 0)

Irc

 ;;IRC Config File

 (use-package circe
   :ensure t)

 (setq circe-default-nick "ScriptRunner"
	circe-default-user "ScriptRunner"
	circe-default-realname "ScriptRunner"
	circe-default-part-message "ScriptRunner Says: Bye"
	circe-default-quit-message "ScriptRunner Says: Bye")

 (setq circe-new-buffer-behavior 'ignore)

 (setq circe-network-options
	(let ((server-passwd
	       (lambda (server-name)
		 (read-passwd (format "Password for server: %s? " server-name)))))
	  `(
	   ("ZNC/imaginarynet"
	    :tls t
	    :host ,homelab-address
	    :port 6501
	    :user "kyle/imaginarynet"
	    :pass ,znc-password)
	   ("ZNC/freenode"
	   :tls t
	   :host ,homelab-address
	   :port 6501
	   :user "kyle/freenode"
	   :pass ,znc-password)
	   )))

 (setq circe-format-say "{nick:-16s} {body}")
 (setq circe-color-nicks-everywhere t)
 (enable-circe-color-nicks)
 (setq circe-reduce-lurker-spam t)
 (setq erc-server-auto-reconnect nil)

 (setq
  lui-time-stamp-position 'right-margin
  lui-fill-type nil)

 (add-hook 'lui-mode-hook 'my-lui-setup)
 (defun my-lui-setup ()
   (setq
    fringes-outside-margins t
    right-margin-width 5
    word-wrap t
    wrap-prefix "    "))


 (setq circe-network-defaults nil)

Spotify

(use-package counsel-spotify
  :ensure t)

(setq counsel-spotify-client-id spotify-client-id)
(setq counsel-spotify-client-secret spotify-client-secret)

Rss

;; RSS Reader Customisations
(use-package elfeed-org
  :ensure t
  :config
  (elfeed-org)
  (setq rmh-elfeed-org-files (list "/Users/kyle/Dropbox/org/elfeed.org")))

(defun kyle/elfeed-show-all ()
  (interactive)
  (bookmark-maybe-load-default-file)
  (bookmark-jump "elfeed-all"))
(defun kyle/elfeed-show-emacs ()
  (interactive)
  (bookmark-maybe-load-default-file)
  (bookmark-jump "elfeed-emacs"))
(defun kyle/elfeed-show-daily ()
  (interactive)
  (bookmark-maybe-load-default-file)
  (bookmark-jump "elfeed-daily"))

;;functions to support syncing .elfeed between machines
;;makes sure elfeed reads index from disk before launching
(defun kyle/elfeed-load-db-and-open ()
  "Wrapper to load the elfeed db from disk before opening"
  (interactive)
  (elfeed-db-load)
  (elfeed)
  (elfeed-search-update--force))

;;write to disk when quiting
(defun kyle/elfeed-save-db-and-bury ()
  "Wrapper to save the elfeed db to disk before burying buffer"
  (interactive)
  (elfeed-db-save)
  (quit-window))


(use-package elfeed
  :ensure t
  :bind (:map elfeed-search-mode-map
		("A" . kyle/elfeed-show-all)
		("E" . kyle/elfeed-show-emacs)
		("D" . kyle/elfeed-show-daily)
		("q" . kyle/elfeed-save-db-and-bury)))

;;http://pragmaticemacs.com/emacs/read-your-rss-feeds-in-emacs-with-elfeed/

Keybindings

;;File for all custom keybindings

;; Top Row Shortcut Keys.
(global-set-key (kbd "M-§") 'org-agenda-list)
(global-set-key (kbd "M-1") 'mu4e)
(global-set-key (kbd "M-2") 'circe)
(global-set-key (kbd "M-3") 'elfeed)

(global-set-key (kbd "M-[") 'shrink-window)
(global-set-key (kbd "M-]") 'enlarge-window)
(global-set-key (kbd "M-{") 'shrink-window-horizontally)
(global-set-key (kbd "M-}") 'enlarge-window-horizontally)

;; (global-set-key (kbd "M-<backspace>") 'counsel-spotify-toggle-play-pause)
(global-set-key (kbd "M-0") 'counsel-spotify-toggle-play-pause)
(global-set-key (kbd "M-=") 'counsel-spotify-next)
(global-set-key (kbd "M--") 'counsel-spotify-previous)
(global-set-key (kbd "M-S") 'counsel-spotify-search-track)