Skip to content

Latest commit

 

History

History
executable file
·
466 lines (391 loc) · 12.3 KB

jsamsa.org

File metadata and controls

executable file
·
466 lines (391 loc) · 12.3 KB

Jason Samsa’s Emacs Configuration

Basic Configuration

Backups and Autosaves

;; store all backup and autosave files in the tmp dir
;; (setq backup-directory-alist
;;       `((".*" . ,temporary-file-directory)))
;; (setq auto-save-file-name-transforms
;;       `((".*" . ,temporary-file-directory)))

;; autosave the undo-tree history
;; (setq undo-tree-history-directory-alist
;;       `((".*" . ,temporary-file-directory)))
;; (setq undo-tree-auto-save-history t)

Newline at end of file

(setq require-final-newline t)

revert buffers automatically when underlying files are changed externally

(global-auto-revert-mode t)

Projectile

Globally enable Projectile

(projectile-mode)
;;(setq projectile-switch-project-action 'helm-projectile)
(setq projectile-switch-project-action 'magit-status)

Indenting stuff

(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq js-indent-level 2)
(setq js-indent-level 4)
(setq c-basic-offset 4)

~/.emacs.d/init.el

This is how to bootstrap my emacs config using org-mode.

(package-initialize nil)

(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(unless (assoc-default "melpa" package-archives)
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
  (package-refresh-contents))

(unless (package-installed-p 'use-package)
  (package-install 'use-package))

(require 'use-package)

(use-package org)

(org-babel-load-file "~/.emacs.d/jsamsa.org")

Personal Information

(setq user-full-name "Jason Samsa"
      user-mail-address "")

~/elisp/

orgmode-mediawiki provides an org-mode export to media wiki format

(when (file-directory-p "~/elisp/orgmode-mediawiki")
  (add-to-list 'load-path "~/elisp/orgmode-mediawiki")
  (require 'ox-mediawiki))

OS X

Make command key meta and option key super

(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'super)
(use-package exec-path-from-shell
  :init (progn
          (exec-path-from-shell-initialize)
          (exec-path-from-shell-copy-env "SSH_AGENT_PID")
          (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")))
    

Fonts

(set-face-attribute 'default nil :height 160)

Bells

;; quiet, please! No dinging!
(setq visible-bell nil)
(setq ring-bell-function 'ignore)

Helm

(use-package helm
  :ensure helm
  :init
  (progn
    (require 'helm-config)
    (setq helm-candidate-number-limit 100)
    (setq helm-idle-delay 0.0
          helm-quick-update t
          helm-M-x-requires-pattern nil
          helm-ff-skip-boring-files t)
    (helm-mode))
  :bind (("C-c h"	. helm-mini)
         ("C-h a"	. helm-apropos)
         ("C-x C-b"	. helm-buffers-list)
         ("C-x b"	. helm-buffers-list)
         ("M-y"	. helm-show-kill-ring)
         ("M-x"	. helm-M-x)
         ("C-x C-f"	. helm-find-files)
         ("C-x c o"	. helm-occur)
         ("C-x c s"	. helm-swoop)
         ("C-x c SPC" . helm-all-mark-rings)
         ("C-x c r"	. helm-register))
  :config (setq helm-M-x-fuzzy-match t)
  )

(ido-mode -1)


Change “yes or no” to “y or n”

(fset 'yes-or-no-p 'y-or-n-p)

Show Column Numbers

(column-number-mode)

Backups

(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))

Windowing

Shhhh….

(when window-system
  (tooltip-mode -1)
  (tool-bar-mode -1)
  (menu-bar-mode 1)
  (scroll-bar-mode -1))
(setq inhibit-startup-message t)

Frame Size

(when window-system (set-frame-size (selected-frame) 120 40))

Encoding

From http://www.wisdomandwonder.com/wordpress/wp-content/uploads/2014/03/C3F.html

(prefer-coding-system 'utf-8)
(when (display-graphic-p)
  (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))

Color Theme

;; gruber-darker-theme
;; (use-package color-theme :ensure t)
;; (use-package gruber-darker-theme :ensure t)
;; (load-theme 'tango t)
;; (disable-theme 'tango)
(load-theme 'dracula t)

Main line

(use-package main-line :ensure t)
(setq main-line-separator-style 'slant-right)

Smart Mode Line

(use-package smart-mode-line :ensure t)

Registers

(set-register ?e '(file . "~/.emacs.d/jsamsa.org"))
(set-register ?t '(file . "~/org/todo.org"))

Key Bindings

(global-set-key (kbd "C-x C-m") 'helm-M-x)

Narrowing

Enable narrowing without warning

(put 'narrow-to-region 'disabled nil)

Speedbar

(global-set-key (kbd "C-c s") 'speedbar)
(add-hook 'speedbar-after-create-hook
          (lambda ()
            (speedbar-toggle-show-all-files)))

Org mode

My org files are in ~/org

(setq org-directory "~/org")

Would like to use babel for capturing and executing useful commands.

(require 'ob-sh)
(require 'ob-dot)

Syntax highlighting for code blocks

(setq org-src-fontify-natively t)

Default TODO workflow

(setq org-todo-keywords
      '((sequence "TODO(t/!)" "BLOCKED(b/@)" "|" "DONE" "DELEGATED(@)" "CANCELED(@)")))
;; See C-h v org-agenda-custom-commands-local-options 
(setq org-agenda-custom-commands
      '(("u" "Unscheduled"
         ((todo "" ((org-agenda-overriding-header "Unscheduled")
                    (org-agenda-skip-function '(org-agenda-skip-entry-if 'scheduled))))
          (todo "" ((org-agenda-overriding-header "Scheduled")
                    (org-agenda-skip-function '(org-agenda-skip-entry-if 'notscheduled))))))
        ))

Editing source code

(setq org-src-window-setup 'current-window)

Babel

(org-babel-do-load-languages
 'org-babel-load-languages
 '((emacs-lisp . t)
   (sh . t)
   (http . t)
   (java . t)
   (dot . t)))

Key Bindings

(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-cb" 'org-iswitchb)

Capture templates

 (setq org-capture-templates
	'(("t" "Todo" entry (file "~/org/todo.org")
          "* TODO %?\n  %i\n  %a")
         ("m" "Meeting" entry (file+headline "~/org/todo.org" "Meetings")
          "** %?\n    %^T\n")
	  ("i" "Interview Candidate" plain (file+headline "~/org/interview.org" "PVL 88936")
	   (file "~/org/pvl-88936.org"))))

GNUPlot

(use-package gnuplot
  :ensure t
  :config
  (setq gnuplot-program "/usr/local/bin/gnuplot"))

Contrib

(use-package ox-confluence
  :load-path "~/site-lisp/org-mode/contrib/lisp/")

Programming

Work around clock table indent bug/feature

This really didn’t do what I want, but I may want to build on it if this doesn’t resolve in versions after 8.2.10

;; (defun my-org-clocktable-indent-string (level)
;;   (if (= level 1)
;;       ""
;;     (let ((str "^"))
;;       (while (> level 2)
;;         (setq level (1- level)
;;               str (concat str "--")))
;;       (concat str "-> "))))

;; (advice-add 'org-clocktable-indent-string :override #'my-org-clocktable-indent-string)

Speed Commands

(setq org-use-speed-commands t)

Lisp Mode Hook

I want to use these modes for any lisp dialect

(defun my-lisp-mode-hook()
  (paredit-mode)
  (rainbow-identifiers-mode)
  (rainbow-delimiters-mode)
  (show-paren-mode))

Emacs Lisp

(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)

Clojure

(use-package cider 
  :ensure t
  ;; :config (setq cider-lein-command "~/bin/lein")
  :init
  (add-hook 'cider-mode-hook #'eldoc-mode)
  (add-hook 'clojure-mode-hook 'my-lisp-mode-hook)
  (setq nrepl-log-messages t))



; using 4clojure for study group
(use-package 4clojure :ensure t)

Groovy

(add-to-list 'auto-mode-alist '("\\.groovy\'" . groovy-mode))

Haskell

(use-package haskell-mode
  :ensure t
  :config
  (add-hook 'haskell-mode-hook 'haskell-indent-mode)
  (add-hook 'haskell-mode-hook 'interactive-haskell-mode)
  (setq haskell-process-suggest-remove-import-lines t
        haskell-process-auto-import-loaded-modules t
        haskell-process-log t)
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
  (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
  (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
  (define-key haskell-mode-map (kbd "C-c C-k") 'haskell-interactive-mode-clear)
  (define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
  (define-key haskell-mode-map (kbd "SPC") 'haskell-mode-contextual-space)
  )

Javascript

  ;; (add-to-list 'auto-mode-alist '("\\.js$" . js3-mode))
  ;; (add-hook 'js3-mode-hook (lambda () (tern-mode t)))
  ;; (setq js-indent-level 4)

  ;; (use-package js2-mode :ensure t :defer t
  ;;   :mode (("\\.js\\'" . js2-mode)
  ;;          ("\\.json\\'" . javascript-mode))
  ;;   :commands js2-mode
  ;;   :init (progn
  ;;           (setq-default js2-basic-offset 4
  ;;                         js2-indent-switch-body t
  ;;                         js2-auto-indent-p t
  ;;                         js2-global-externs '("angular")
  ;;                         js2-indent-on-enter-key t
  ;;                         flycheck-disabled-checkers '(javascript-jshint)
  ;;                         flycheck-checker '(javascript-eslint)
  ;;                         flycheck-eslintrc "~/.eslintrc"))
  ;;   (add-to-list 'interpreter-mode-alist (cons "node" 'js2-mode))
  ;;   (add-to-list 'js2-mode-hook 'flycheck-mode))

;; (setq-default flycheck-disabled-checkers '(javascript-jshint)
;;               flycheck-checker 'javascript-eslint
;;               flycheck-eslintrc "~/dev/star-app/src/main/webap/.eslintrc.yml")

Flycheck

(defun my/use-eslint-from-node-modules ()
  (let* ((root (locate-dominating-file
               (or (buffer-file-name) default-directory)
               "node_modules"))
        (eslint (and root
                     (expand-file-name "node_modules/.bin/eslint"
                                       root))))
    (when (and eslint (file-executable-p eslint))
      (setq-local flycheck-javascript-eslint-executable eslint))))

(add-hook 'flycheck-mode-hook #'my/use-eslint-from-node-modules)
(add-hook 'after-init-hook #'global-flycheck-mode)

Python

Elisp

(use-package paredit :ensure t)
(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)

Magit

(global-set-key (kbd "C-c g s") 'magit-status)

Web Mode

(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))

(defun my-web-mode-hook ()
  (setq web-mode-markup-indent-offset 2))

(add-hook 'web-mode-hook 'my-web-mode-hook)

Databases

HSQL

(use-package hsql
  :load-path "~/site-lisp/hsql.el/")