Skip to content

Instantly share code, notes, and snippets.

@minikomi
Created February 1, 2018 09:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minikomi/cdb53d4e544f2168b18ebdaf7a94f3f0 to your computer and use it in GitHub Desktop.
Save minikomi/cdb53d4e544f2168b18ebdaf7a94f3f0 to your computer and use it in GitHub Desktop.
; macros
(defmacro eval-after-load-all (features form)
"Arrange that if, and only if, all `FEATURES' are loaded, `FORM' is evaluated."
(declare (indent defun))
(if (null (cdr features))
`(eval-after-load ,(car features) ,form)
`(eval-after-load ,(car features) (eval-after-load-all ,(cdr features) ,form))))
(defmacro after (features &rest body)
"Arrange that if, and only if, all `FEATURES' are loaded, `BODY' is evaluated.
Additionally, `BODY' is wrapped in a lambda so that it is properly byte-compiled."
(declare (indent defun))
`(eval-after-load-all ,features ((lambda () (quote (progn ,@body))))))
(defmacro after! (features &rest body)
"Load `FEATURES' now, and arrange that `BODY' is evaluated when they are.
Additionally, `BODY' is wrapped in a lambda so that it is properly byte-compiled."
(declare (indent defun))
`(progn
(mapc 'require (list ,@features))
(eval-after-load-all ,features ((lambda () (quote (progn ,@body)))))))
(defmacro with-hook (hook &rest body)
"Add to the value of `HOOK', all of the actions in `BODY'."
(declare (indent 1))
`(add-hook ,hook (lambda () (progn ,@body))))
; remove chrome, fix keys etc. --
(setq inhibit-startup-message t)
(tool-bar-mode -1)
(show-paren-mode 1)
(menu-bar-mode -1)
(setq ring-bell-function 'ignore)
(global-set-key (quote [134217893]) "\\")
(setq backup-directory-alist `(("." . "~/.saves")))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t)
; packages --
(require 'package)
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("org" . "http://orgmode.org/elpa/")
("marmalade" . "http://marmalade-repo.org/packages/")
; ("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")
("melpa" . "http://melpa.milkbox.net/packages/" )
))
(package-initialize)
(defun require-package (package)
(setq-default highlight-tabs t)
(unless (package-installed-p package)
(unless (assoc package package-archive-contents)
(package-refresh-contents))
(package-install package)))
(require-package 'color-theme)
; evil --
(add-hook 'text-mode-hook 'turn-on-auto-fill)
(setq evil-want-C-u-scroll t)
(require-package 'evil)
(evil-mode 1)
(require-package 'evil-leader)
(require-package 'evil-search-highlight-persist)
(require-package 'evil-org)
(setq evil-emacs-state-cursor '("red" box))
(setq evil-normal-state-cursor '("green" box))
(setq evil-visual-state-cursor '("orange" box))
(setq evil-insert-state-cursor '("red" bar))
(setq evil-replace-state-cursor '("red" bar))
(setq evil-operator-state-cursor '("red" hollow))
(global-evil-search-highlight-persist t)
(global-evil-leader-mode)
(evil-leader/set-leader ",")
(evil-leader/set-key "SPC" 'evil-search-highlight-persist-remove-all)
(add-to-list 'evil-emacs-state-modes 'racket-repl-mode)
(define-key evil-normal-state-map (kbd "C-r") 'redo)
(define-key evil-normal-state-map (kbd "C-w <left>") 'evil-window-left)
(define-key evil-normal-state-map (kbd "C-w <down>") 'evil-window-down)
(define-key evil-normal-state-map (kbd "C-w <up>") 'evil-window-up)
(define-key evil-normal-state-map (kbd "C-w <right>") 'evil-window-right)
(define-key evil-normal-state-map "gq" 'evil-fill)
; ibuffer ---
(autoload 'ibuffer "ibuffer" "List buffers." t)
(evil-leader/set-key "TAB" 'ibuffer)
(add-hook 'ibuffer-mode
(lambda () (add-to-list 'ibuffer-never-show-predicates "^\\*")))
; org ---
(require-package 'org)
(add-hook 'org-mode-hook (lambda ()
(modify-syntax-entry (string-to-char "v") "w")
(org-display-inline-images)
)) ; Down arrow for collapsed drawer.
(setq org-startup-indented t)
(setq org-hide-leading-stars t)
(setq org-odd-level-only nil)
(setq org-insert-heading-respect-content nil)
(setq org-M-RET-may-split-line '((item) (default . t)))
(setq org-special-ctrl-a/e t)
(setq org-return-follows-link nil)
(setq org-use-speed-commands t)
(setq org-startup-align-all-tables nil)
(setq org-log-into-drawer nil)
(setq org-tags-column 1)
(setq org-ellipsis " \u25bc" )
(setq org-speed-commands-user nil)
(setq org-blank-before-new-entry '((heading . nil) (plain-list-item . nil)))
(setq org-completion-use-ido t)
(setq org-indent-mode t)
(setq org-startup-truncated nil)
(global-auto-revert-mode t)
(prefer-coding-system 'utf-8)
(cua-mode t)
(setq cua-auto-tabify-rectangles nil)
(transient-mark-mode nil)
(setq cua-keep-region-after-copy t)
(require-package 'evil-org)
(defun my-insert-date (prefix)
"Insert the current date. With prefix-argument, use ISO format. With
two prefix arguments, write out the day and month name."
(interactive "P")
(let ((format (cond
((not prefix) "%Y-%m-%d %H:%M")
((equal prefix '(4)) "%Y-%m-%d")
((equal prefix '(16)) "%A, %d. %B %Y"))))
(insert (format-time-string format))))
(define-key global-map (kbd "C-`") 'my-insert-date)
(setq org-capture-templates
'(("d" "Journal Entry" plain
(file+datetree "~/play/org/journal.org")
"%U\n\n%?" :empty-lines-before 1)
("f" "tracks" entry
(file+datetree "~/play/org/tracks.org")
"* %^{Description} %^g\n%?\n\nAdded: %U"
)))
(global-set-key (kbd "C-c c") 'org-capture)
(defun paste-clipboard-to-file (&optional filename temp-dir)
"Take a screenshot using the crosshairs and saveit to FILENAME,
if it is given or to a temp file in the TEMP-DIR
directory. Then add an orgmode style link at point."
(interactive)
(let* ((temporary-file-directory (or temp-dir "images"))
(fname (or filename (make-temp-file "img" nil ".jpg"))))
(call-process-shell-command (concat
"/usr/sbin/screencapture -s " fname))
(insert "\n[[file:" fname "]]")))
(setq org-image-actual-width '(450))
(global-set-key (kbd "C-c p") 'paste-clipboard-to-file)
(setq org-clock-persist 'history)
(org-clock-persistence-insinuate)
; python --
(setq-default indent-tabs-mode nil)
(setq default-tab-width 4)
; racket --
(require-package 'racket-mode)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-enabled-themes (quote (sanityinc-tomorrow-night)))
'(custom-safe-themes
(quote
("06f0b439b62164c6f8f84fdda32b62fb50b6d00e8b01c2208e55543a6337433a" default)))
'(package-selected-packages
(quote
(ac-cider cider clojure-mode color-theme-sanityinc-tomorrow ace-jump-buffer evil-paredit paredit racket-mode evil-org evil-search-highlight-persist evil-leader evil color-theme))))
(add-hook 'racket-mode-hook
'(lambda ()
(define-key racket-mode-map (kbd "C-c C-l") 'racket-run)
(define-key racket-mode-map (kbd "C-c C-k") 'racket-test)))
; paredit --
(require-package 'paredit)
(require-package 'evil-paredit)
(autoload 'enable-paredit-mode "paredit" "Turn on pseudo-structural editing of Lisp code." t)
(add-hook 'emacs-lisp-mode-hook #'enable-paredit-mode)
(add-hook 'eval-expression-minibuffer-setup-hook #'enable-paredit-mode)
(add-hook 'ielm-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-interaction-mode-hook #'enable-paredit-mode)
(add-hook 'scheme-mode-hook #'enable-paredit-mode)
(add-hook 'racket-mode-hook #'enable-paredit-mode)
(add-hook 'clojure-mode-hook #'enable-paredit-mode)
(add-hook 'cider-mode-hook #'enable-paredit-mode)
(add-hook 'emacs-lisp-mode-hook 'evil-paredit-mode)
(add-hook 'racket-mode-hook 'evil-paredit-mode)
(add-hook 'clojure-mode-hook 'evil-paredit-mode)
(add-hook 'cider-mode-hook 'evil-paredit-mode)
(defun set-paredit-evil-keys (mode-name)
(evil-leader/set-key-for-mode mode-name
"W" 'paredit-wrap-round
"S" 'paredit-splice-sexp
"w (" 'paredit-wrap-round
"w [" 'paredit-wrap-square
"w {" 'paredit-wrap-curly
">" 'paredit-forward-slurp-sexp
"<" 'paredit-forward-barf-sexp
"+" 'paredit-backward-slurp-sexp
"*" 'paredit-backward-barf-sexp
"/" 'paredit-split-sexp
"?" 'paredit-join-sexp)
)
(mapc 'set-paredit-evil-keys
'(racket-mode
clojure-mode
cider-mode
emacs-lisp-mode))
;; buffer switching
(require-package 'ace-jump-buffer)
(global-set-key [(control tab)] 'ibuffer)
;; themes
;;
(require-package 'color-theme-sanityinc-tomorrow)
(color-theme-sanityinc-tomorrow-night)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;; clojure
(require-package 'clojure-mode)
(require-package 'cider)
(add-to-list 'exec-path "/usr/local/bin")
(setq cider-show-error-buffer nil)
(require-package 'ac-cider)
(add-hook 'cider-mode-hook 'ac-flyspell-workaround)
(add-hook 'cider-mode-hook 'ac-cider-setup)
(add-hook 'cider-repl-mode-hook 'ac-cider-setup)
(eval-after-load "auto-complete"
'(progn
(add-to-list 'ac-modes 'cider-mode)
(add-to-list 'ac-modes 'cider-repl-mode)))
(add-hook 'cider-mode-hook 'ac-flyspell-workaround)
(add-hook 'cider-mode-hook 'ac-cider-setup)
(add-hook 'cider-repl-mode-hook 'ac-cider-setup)
(eval-after-load "auto-complete"
'(progn
(add-to-list 'ac-modes 'cider-mode)
(add-to-list 'ac-modes 'cider-repl-mode)))
(defface font-lock-func-face
'((nil (:foreground "#C3E3F0" :weight normal))
(t (:bold f :italic f)))
"Font Lock mode face used for function calls."
:group 'font-lock-highlighting-faces)
(font-lock-add-keywords
'clojure-mode
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
1 'font-lock-func-face)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment