Skip to content

Instantly share code, notes, and snippets.

@kozross
Created July 2, 2016 00:39
Show Gist options
  • Save kozross/990187b95925f6fbd0b0b23cea298f1b to your computer and use it in GitHub Desktop.
Save kozross/990187b95925f6fbd0b0b23cea298f1b to your computer and use it in GitHub Desktop.
;;;; 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