Created
July 2, 2016 00:39
-
-
Save kozross/990187b95925f6fbd0b0b23cea298f1b to your computer and use it in GitHub Desktop.
This file contains 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
;;;; My init.el | |
;;; Ensuring all my packages are installed | |
;; set up the packaging system | |
(require 'package) | |
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")) | |
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) | |
(package-initialize) | |
(defconst my-packages | |
'(auctex | |
better-defaults | |
flycheck | |
flycheck-haskell | |
geiser | |
haskell-mode | |
ido-ubiquitous | |
lice | |
markdown-mode | |
monochrome-theme | |
paradox | |
smex | |
smartparens) | |
"A list of packages I care about.") | |
(defun my-packages-installed? () | |
"Checks if every package I need is installed." | |
(catch 'return | |
(mapc (lambda (x) (unless (package-installed-p x) | |
(throw 'return nil))) my-packages) | |
(throw 'return t))) | |
(unless (my-packages-installed?) | |
(package-refresh-contents) | |
(dolist (x my-packages) | |
(unless (package-installed-p x) | |
(package-install x)))) | |
;;; Load up custom packages | |
(add-to-list 'load-path "~/.emacs.d/custom") | |
(autoload 'forth-mode "gforth") | |
(autoload 'forth-block-mode "gforth") | |
;;; Setup | |
;; AuCTeX | |
(setf TeX-auto-save t) | |
(setf TeX-parse-self t) | |
(setq-default TeX-master nil) | |
(setf LaTeX-electric-left-right-brace t) ;ensures I have matched braces | |
(setf plain-TeX-mode-hook nil) | |
(setf LaTeX-mode-hook nil) | |
(add-hook 'plain-TeX-mode-hook #'flycheck-mode) | |
(add-hook 'LaTeX-mode-hook #'flycheck-mode) | |
;; Better defaults | |
(require 'better-defaults) | |
(require 'ido-ubiquitous) | |
(require 'smex) | |
(require 'smartparens-config) | |
(fset 'yes-or-no-p 'y-or-n-p) | |
(setf inhibit-startup-screen t) ;no annoying startup screen | |
(setf show-paren-style 'expression) ;highlight entire parenthesized expr | |
(setf make-backup-files nil) | |
(setf auto-save-default nil) ;;removes backup files | |
(setq-default fill-column 80) | |
(add-hook 'text-mode-hook 'turn-on-auto-fill) ;; hard 80-character limit | |
(setf column-number-mode t) ;; always have column numbers around | |
(ido-mode t) | |
(ido-everywhere t) ;; so I have more ido than ever! | |
(ido-ubiquitous-mode t) | |
(smex-initialize) | |
(global-set-key (kbd "M-x") 'smex) | |
(global-set-key (kbd "M-X") 'smex-major-mode-commands) | |
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command) ;old M-x | |
;; Elisp | |
(setf emacs-lisp-mode-hook nil) | |
(add-hook 'emacs-lisp-mode-hook #'smartparens-strict-mode) | |
;; Forth | |
(add-to-list 'auto-mode-alist '("\\.fs$" . forth-mode)) | |
(add-to-list 'auto-mode-alist '("\\.fb$" . forth-block-mode)) | |
(setf forth-mode-hook nil) | |
(add-hook 'forth-mode-hook (function (lambda () | |
(setq forth-indent-level 4) | |
(setq forth-minor-indent-level 2) | |
(setq forth-hilight-level 3) | |
(smartparens-strict-mode t)))) | |
;; Flycheck | |
(eval-after-load 'flycheck '(add-hook 'flycheck-mode-hook #'flycheck-haskell-setup)) | |
;; Guile | |
(require 'geiser) | |
(setf scheme-mode-hook nil) | |
(add-hook 'scheme-mode-hook #'smartparens-strict-mode) | |
;; Haskell | |
(require 'haskell-mode) | |
;; (require 'flycheck-liquidhs) | |
(setf haskell-mode-hook nil) | |
(add-hook 'haskell-mode-hook #'flycheck-mode) | |
;; HTML | |
(setf html-mode-hook nil) | |
;; Sets up quick previewing from html-mode | |
(add-hook 'html-mode-hook | |
(lambda () (local-set-key (kbd "C-c C-p") #'browse-url-of-file))) | |
(add-hook 'html-mode-hook #'flycheck-mode) | |
;; Markdown | |
(require 'markdown-mode) | |
(add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode)) | |
(setf markdown-mode-hook nil) | |
(add-hook 'markdown-mode-hook #'smartparens-strict-mode) | |
;; Theme | |
(load-theme 'monochrome t) | |
;;; My pet functions (aren't they cute?) | |
(defmacro when-let (symb test &rest body) | |
"If test returns non-nil, binds the result to symb and executes body." | |
`(let ((,symb ,test)) | |
(when ,symb | |
,@body))) | |
(require 'paradox) | |
(setf paradox-github-token t) | |
(defun my-update-all-packages! () | |
"Checks if any packages I care about need updating and updates them." | |
(interactive) | |
(paradox-upgrade-packages) | |
;solve killing Paradox Report! | |
(when-let package-buf (get-buffer "*Packages*") (kill-buffer package-buf))) | |
;; Still doesn't solve SSHed pastes and copies | |
(defun my-copy-to-x-clipboard () | |
"Gives me proper Emacs-to-non-Emacs copying." | |
(interactive) | |
(if (region-active-p) | |
(progn | |
(shell-command-on-region (region-beginning) (region-end) "xsel -ip") | |
(message "Yanked region to clipboard!") | |
(deactivate-mark)) | |
(message "No region active; can't yank to clipboard!"))) | |
(defun my-paste-from-x-clipboard () | |
"Gives me proper non-Emacs-to-Emacs pasting." | |
(interactive) | |
(insert (shell-command-to-string "xsel -o -p")) | |
t) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment