commit 589b883f06c3403ac15022ab494bfc5d273331bf Author: Levi Olson Date: Tue Sep 3 17:20:47 2019 -0500 Built for speed from the ground up diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..115e508 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +**/* +!init.* +!index.html +!scripts/*.sh +!.gitignore diff --git a/init.el b/init.el new file mode 100644 index 0000000..7b96470 --- /dev/null +++ b/init.el @@ -0,0 +1,446 @@ +;; -*- lexical-binding: t; -*- + +;; Configure Melpa + +(setq package--init-file-ensured t + package-enable-at-startup nil + ;; package-user-dir doom-elpa-dir + ;; package-gnupghome-dir (expand-file-name "gpg" doom-elpa-dir) + package-archives + `(("gnu" . "https://elpa.gnu.org/packages/") + ("melpa" . "https://melpa.org/packages/") + ("org" . "https://orgmode.org/elpa/"))) + +(package-initialize) + +;; Configure Use-Package +(eval-when-compile + (add-to-list 'load-path (concat user-emacs-directory "elpa/use-package-20190716.1829")) + (add-to-list 'load-path (concat user-emacs-directory "elpa/bind-key-20180513.430")) + (require 'use-package) + (require 'bind-key)) + +;; Compile function +(defun compile-init () + "If the current buffer is 'init.el' tangled file is compiled." + (when (equal (buffer-file-name) + (expand-file-name (concat user-emacs-directory "init.el"))) + ;; Avoid running hooks when tangling. + (let ((prog-mode-hook nil)) + (byte-compile-file (concat user-emacs-directory "init.el"))))) +;; (add-hook 'after-save-hook 'compile-init) + + +;; Some Basic Init +(defvar backup-dir (expand-file-name "~/.emacs.d/backup/")) +(defvar autosave-dir (expand-file-name "~/.emacs.d/autosave/")) + +(setq initial-scratch-message nil + backup-directory-alist (list (cons ".*" backup-dir)) + auto-save-list-file-prefix autosave-dir + auto-save-file-name-transforms `((".*" ,autosave-dir t))) + +;; Turn off the menus, scrollbars, and toolbars +(menu-bar-mode 0) +(scroll-bar-mode 0) +(tool-bar-mode 0) +(global-linum-mode t) +(global-auto-revert-mode t) + +(add-hook 'before-save-hook 'delete-trailing-whitespace) + +;; Set auth source +;; (setq auth-sources '("~/.authinfo.gpg")) + +(defalias 'yes-or-no-p 'y-or-n-p) + +(defun display-startup-echo-area-message () + "Display startup echo area message." + (message "Initialized in %s" (emacs-init-time))) + + + + + + + +(defun leo--find-user-init-file () + "Edit the `~/.emacs.d/init.el' file." + (interactive) + (find-file "~/.emacs.d/init.el")) + + +(defun leo--tidy () + "Indent, untabify and unwhitespacify current buffer, or region if active." + (interactive) + (let ((beg (if (region-active-p) (region-beginning) (point-min))) + (end (if (region-active-p) (region-end) (point-max)))) + (let ((inhibit-message t)) + (indent-region beg end)) + (whitespace-cleanup) + (untabify beg (if (< end (point-max)) end (point-max))) + (if (region-active-p) (message "Indenting Region...Done") (message "Indenting File...Done")))) + +(defun leo--comment-or-uncomment-region-or-line () + "Comment or uncomment the region or the current line if there's no active region." + (interactive) + (let (beg end) + (if (region-active-p) + (setq beg (region-beginning) end (region-end)) + (setq beg (line-beginning-position) end (line-end-position))) + (comment-or-uncomment-region beg end))) + +(defun leo--duplicate-thing (comment) + "Duplicates the current line, or the region if active. If an argument (COMMENT) is given, the duplicated region will be commented out." + (interactive "P") + (save-excursion + (let ((start (if (region-active-p) (region-beginning) (point-at-bol))) + (end (if (region-active-p) (region-end) (point-at-eol)))) + (goto-char end) + (unless (region-active-p) + (newline)) + (insert (buffer-substring start end)) + (when comment (comment-region start end))))) + +(defun leo--kill-this-buffer-unless-scratch () + "Works like `kill-this-buffer' unless the current buffer is the *scratch* buffer. In which case the buffer content is deleted and the buffer is buried." + (interactive) + (if (or (string= (buffer-name) "*dashboard*") (string= (buffer-name) "*scratch*")) + (progn + (bury-buffer (buffer-name)) + (switch-to-buffer (other-buffer))) + (kill-this-buffer))) + +(defun leo--jump-to-symbol (&optional backwardp) + "Jumps to the next symbol near the point if such a symbol exists. If BACKWARDP is non-nil it jumps backward." + (let* ((point (point)) + (bounds (find-tag-default-bounds)) + (beg (car bounds)) (end (cdr bounds)) + (str (isearch-symbol-regexp (find-tag-default))) + (search (if backwardp 'search-backward-regexp + 'search-forward-regexp))) + (goto-char (if backwardp beg end)) + (funcall search str nil t) + (cond ((<= beg (point) end) (goto-char point)) + (backwardp (forward-char (- point beg))) + (t (backward-char (- end point)))))) + +(defun leo--jump-to-prev-symbol () + "Jumps to the previous occurrence of the symbol at point." + (interactive) + (leo--jump-to-symbol t)) + +(defun leo--jump-to-next-symbol () + "Jumps to the next occurrence of the symbol at point." + (interactive) + (leo--jump-to-symbol)) + + + +;; USE PACKAGE help +;; (use-package package-here +;; :commands (cmd cmd-all cmd-etc) ;; List commands used to ":defer" the package +;; :bind-keymap +;; ("M-q" . package-here-keymap) ;; Setup an entire keymap using Prefix "M-q" +;; :bind +;; (("M-s" . cmd) ;; Available Globally +;; :map here-mode-map +;; ("C-t" . cmd-all) ;; Available only in "here-mode" +;; ("C-e" . cmd-etc)) ;; Available only in "here-mode" +;; :init +;; (setq stuff t) ;; declar vars etc... +;; :config +;; (here-mode 1) ;; eval stuff here after the init +;; +;; (use-package ruby-mode +;; :mode "\\.rb\\'" +;; :interpreter "ruby" +;; +;; ;; OR when the package name isn't the same as the =mode= +;; (use-package python +;; :mode ("\\.py\\'" . python-mode) +;; :interpreter ("python" . python-mode)) +;; +;; USE ":defer" when you aren't using either :commands, :bind, :bind*, :bind-keymap, :bind-keymap*, :mode, :interpreter, or :hook +;; (use-package deferred-package +;; :defer t) + + + +(use-package bind-key + :ensure t + :bind + ("C-" . leo--tidy) + ("C-;" . leo--comment-or-uncomment-region-or-line) + ("C-c e" . leo--find-user-init-file) + ("M-q" . leo--kill-this-buffer-unless-scratch) + ("C-c d" . leo--duplicate-thing) + ("M-n" . leo--jump-to-next-symbol) + ("M-p" . leo--jump-to-prev-symbol) + ("M-u" . upcase-dwim) + ("M-c" . capitalize-dwim) + ("M-l" . downcase-dwim) + ) + +(use-package better-defaults + :ensure t) + +(use-package base16-theme + :ensure t + :config + (load-theme 'base16-onedark t)) + +;; https://github.com/Fanael/rainbow-delimiters +(use-package rainbow-delimiters + :ensure t + :hook (prog-mode . rainbow-delimiters-mode)) + +;; M-x all-the-icons-install-fonts +(use-package all-the-icons + :ensure t) + +(use-package doom-modeline + :ensure t + :after (all-the-icons) + :hook (after-init . doom-modeline-mode)) + +(use-package dashboard + :ensure t + :init + (setq dashboard-items '((recents . 6) + (bookmarks . 5) + ;; (projects . 5) + (agenda . 5))) + (setq dashboard-center-content t) + (setq dashboard-banner-logo-title "Let's begin...") + (setq dashboard-startup-banner 1) + (setq dashboard-show-shortcuts t) + (setq show-week-agenda-p t) + (setq dashboard-org-agenda-categories '("work" "tasks")) + :config + (dashboard-setup-startup-hook)) + +(use-package helm + :ensure t + :demand t + :bind + ("M-x" . helm-M-x) + ("C-c b" . helm-buffers-list) + ("C-x C-f" . helm-find-files)) + +;; https://github.com/emacsorphanage/helm-swoop +(use-package helm-swoop + :ensure t + :after (helm) + :bind + ("C-s" . helm-swoop) + :config + ;; If you prefer fuzzy matching + (setq helm-swoop-use-fuzzy-match t)) + +;; https://github.com/syohex/emacs-helm-ag +(use-package helm-ag + :ensure t + :after (helm) + :bind + ("C-c k" . helm-ag)) + +(use-package expand-region + :ensure t + :bind + ("C-@" . er/expand-region) + ("C-#" . er/contract-region)) + +;; https://github.com/magnars/multiple-cursors.el +(use-package multiple-cursors + :ensure t + :bind + ("C-}" . mc/mark-next-like-this) + ("C-)" . mc/unmark-next-like-this) + ("C-{" . mc/mark-previous-like-this) + ("C-(" . mc/unmark-previous-like-this)) + +;; https://github.com/justbur/emacs-which-key +(use-package which-key + :ensure t + :config + (which-key-setup-minibuffer) + (which-key-mode)) + +;; https://github.com/lewang/fic-mode +(use-package fic-mode + :ensure t + :hook prog-mode) + +;; https://github.com/joaotavora/yasnippet +(use-package yasnippet + :ensure t + :bind ("" . yas-expand) + :init + (setq yas-snippet-dirs (list (concat user-emacs-directory "snippets"))) + :config + (yas-reload-all) + (yas-minor-mode 1)) + +;; https://company-mode.github.io/ +(use-package company + :ensure t + :hook (prog-mode . company-mode)) + +;; https://github.com/magit/magit +(use-package magit + :commands magit-status + :ensure t + :init + (setq magit-completing-read-function 'helm-completing-read-default-handler) + :bind + ("C-x g" . magit-status) + ("C-c g" . magit-status)) + +;; https://github.com/bbatsov/projectile +(use-package projectile + :ensure t + :bind-keymap + ("C-c p" . projectile-command-map) + ) + +;; https://github.com/magit/git-modes +(use-package gitignore-mode + :ensure t) + +;; https://github.com/magit/git-modes +(use-package gitconfig-mode + :ensure t) + +;; http://web-mode.org/ +(use-package web-mode + :ensure t + :mode "\\.html?\\'") + +;; https://github.com/joshwnj/json-mode +(use-package json-mode + :ensure t + :mode "\\.json\\'") + +;; https://orgmode.org/elpa.html +(use-package org + :commands (org-cycle-agenda-files org-capture) + :ensure org-plus-contrib + :mode ("\\.org\\'" . org-mode) + :bind ( + ("C-," . org-cycle-agenda-files) + ("C-c C-d" . org-capture) + :map org-mode-map + ("M-RET" . org-insert-todo-heading) + ) + :init + (setq org-agenda-files '("~/Dropbox/Org/todo.org" + "~/Dropbox/Org/archive.org" + "~/Dropbox/Org/diary/eaglecrk.org")) + (setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") + (sequence "BUG(b)" "INPROGRESS(i)" "|" "FIXED(f)") + (sequence "TEST(T)" "NOTEST(N)" "|" "COMPLETE(C)") + (sequence "|" "CANCELED(c)") + (sequence "|" "NEEDCLARIFICATION(n)") + (sequence "|" "PROVIDEUPDATE(p)") + (sequence "|" "WAITING(w)")) + org-refile-targets '((nil :maxlevel . 3) + (org-agenda-files :maxlevel . 3)) + org-directory "~/Dropbox/Org" + org-default-notes-file (concat org-directory "/todo.org") + org-startup-folded t + org-startup-indented t + org-startup-align-all-tables t + org-startup-with-inline-images t + org-startup-with-latex-preview t + org-src-tab-acts-natively t + org-confirm-babel-evaluate nil + org-log-done t + org-log-done-with-time t + org-log-into-drawer t + org-hide-leading-stars t + org-pretty-entities t + org-use-property-inheritance t + org-html-validation-link nil + org-html-text-markup-alist '((bold . "%s") + (code . "%s") + (italic . "%s") + (strike-through . "%s") + (underline . "%s") + (verbatim . "%s")) + ) + :config + (org-babel-do-load-languages 'org-babel-load-languages '((js . t) + (shell . t) + (emacs-lisp . t))) + (add-to-list 'org-structure-template-alist + (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n" + "\n" + "#+END_SRC"))) + (add-to-list 'org-structure-template-alist + (list "j" (concat "#+BEGIN_SRC js :cmd \"/usr/local/bin/babel-node\" :results output code\n" + "\n" + "#+END_SRC"))) + (add-to-list 'org-structure-template-alist + (list "r" (concat "#+BEGIN_SRC restclient :results raw\n" + "\n" + "#+END_SRC"))) + ) + +;; https://github.com/sabof/org-bullets +(use-package org-bullets + :ensure t + :after (org) + :hook (org-mode . org-bullets-mode) + :config + (set-face-attribute 'org-level-1 nil :height 1.3) + (set-face-attribute 'org-level-2 nil :height 1.1) + (set-face-attribute 'org-level-3 nil :height 1.05) + (set-face-attribute 'org-level-4 nil :height 1.05) + (set-face-attribute 'org-scheduled-today nil :height 1.0) + (set-face-attribute 'org-agenda-date-today nil :height 1.1)) + +;; https://orgmode.org/worg/org-contrib/org-protocol.html +(use-package org-protocol + :ensure org-plus-contrib + :after (org) + :init + (setq org-capture-templates + '(("t" "new task" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") + "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n") + ("n" "new note" entry (file+headline org-default-notes-file "Notes") + "* %?\n%i\n") + ("l" "store link" entry (file+olp org-default-notes-file "Links" "Unfiled") + "* %a\n%?\n") + ("d" "store link w/drawer" entry (file+olp org-default-notes-file "Links" "Unfiled") + "* %?\n%l\n:COPIED_TEXT:\n %i\n:END:\n") + ("f" "dotfile" entry (file+headline "~/Dropbox/Org/dotfiles.org" "Other") + "* %?\n:PROPERTIES:\n:CUSTOM_ID: %(org-id-get-create)\n:END:\n") + )) + ) + + +(cond ((member "PragmataPro Liga" (font-family-list)) + (set-face-attribute 'default nil :font "PragmataPro Liga-12"))) + +(server-start) + +;; Reset GC as late as possible +;; (add-hook 'emacs-startup-hook +;; (setq gc-cons-threshold 16777216 +;; gc-cons-percentage 0.1)) +(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. + '(package-selected-packages + (quote + (org-bullets org-plus-contrib web-mode gitconfig-mode gitignore-mode rainbow-delimiters company company-mode projectile magit helm-ag helm-swoop yasnippet fic-mode which-key pdf-tools better-defaults use-package))) + '(safe-local-variable-values (quote ((whitespace-line-column . 120))))) +(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. + )