;; as org file examples...
;; https://raw.githubusercontent.com/dieggsy/dotfiles/master/emacs.d/init.org
;; http://mescal.imag.fr/membres/arnaud.legrand/misc/init.org
;; TODO: flycheck, theme (icons), beautiful- : kill all buffers, diminish
;; TODO:
;; (when (memq window-system '(mac ns))
;; (exec-path-from-shell-initialize))
;; bootstrap straight.el package manager
(let ((bootstrap-file (concat user-emacs-directory "straight/bootstrap.el"))
(bootstrap-version 2))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; bootstrap `use-package` via straight so it is overloaded to use straight.el
(straight-use-package 'use-package)
(use-package f
:ensure t)
(use-package exec-path-from-shell
:ensure t
:config
(when (memq window-system '(mac ns))
(exec-path-from-shell-initialize)))
(use-package dumb-jump
:bind (("M-g o" . dumb-jump-go-other-window)
("M-g j" . dumb-jump-go)
("M-g i" . dumb-jump-go-prompt)
("M-g x" . dumb-jump-go-prefer-external)
("M-g z" . dumb-jump-go-prefer-external-other-window))
:config (setq dumb-jump-selector 'ivy dumb-jump-force-searcher 'ag dumb-jump-aggressive nil dumb-jump-debug nil dumb-jump-use-visible-window nil) ;; (setq dumb-jump-selector 'helm)
:ensure t)
(use-package ido-completing-read+
:ensure t
:config
(ido-ubiquitous-mode t))
(use-package all-the-icons
:if window-system
:ensure t
:config
(when (not (member "all-the-icons" (font-family-list)))
(all-the-icons-install-fonts t)))
(use-package zerodark-theme
:ensure t
:config
(load-theme 'zerodark t nil)
(zerodark-setup-modeline-format))
(use-package rainbow-delimiters
:ensure t
:config
(add-hook 'hy-mode-hook 'rainbow-delimiters-mode)
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode)
(add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode))
(use-package swiper
:ensure t
:bind (("C-s" . swiper)))
(use-package dumb-diff
:ensure t
:recipe (:host github :repo "jacktasia/dumb-diff"))
(use-package pmdm
:ensure t
:recipe (:host github :repo "jacktasia/pmdm.el")
:config
(add-hook 'kill-emacs-hook 'pmdm-write-opened-files)
(pmdm-load-files))
(use-package beautiful-emacs
:ensure t
:recipe (:host github :repo "jacktasia/beautiful-emacs")
:bind (("C-c b" . beautiful-git-blame-line)
("C-c 5" . beautiful-eval-buffer)
("M-," . beautiful-new-scratch)
("M-u" . beautiful-backward-kill-line)
("C-c u" . beautiful-reload-config)
("C-c x" . beautiful-kill-all-buffers)
("C-<backspace>" . beautiful-backward-delete-word)))
(use-package visual-regexp
:ensure t
:bind (("C-c r" . vr/replace)
("C-c q" . vr/query-replace)))
(use-package whitespace-mode
:bind (("C-c w" . whitespace-mode))
:config
(setq whitespace-line-column 60000))
(use-package expand-region
:ensure t
:bind (("C-c e" . er/mark-symbol)))
(use-package highlight-symbol
:ensure t
;;:commands (highight-symbol-at-point)
:bind (("s-p" . highlight-symbol-prev)
("s-n" . highlight-symbol-next)
("M-p" . highlight-symbol-prev)
("M-n" . highlight-symbol-next)
("M-g h" . highlight-symbol-at-point))
:config
(highlight-symbol-nav-mode 1))
(use-package fic-mode
:ensure t
:config
(add-hook 'clojure-mode-hook 'fic-mode)
(add-hook 'go-mode-hook 'fic-mode)
(add-hook 'python-mode-hook 'fic-mode)
(add-hook 'javascript-mode-hook 'fic-mode)
(add-hook 'js-mode-hook 'fic-mode)
(add-hook 'web-mode-hook 'fic-mode)
(add-hook 'java-mode-hook 'fic-mode)
(add-hook 'emacs-lisp-mode-hook 'fic-mode)
(add-hook 'web-mode-hook 'fic-mode)
(add-hook 'js2-mode-hook 'fic-mode)
(add-hook 'terraform-mode-hook 'fic-mode))
(use-package avy
:ensure t
:bind (("M-g l" . avy-goto-line)
("M-g c" . avy-goto-char)
("M-g w" . avy-goto-word-0)
("M-g t" . avy-goto-char-timer))
:config
(setq avy-all-windows nil)
(setq avy-keys (number-sequence ?a ?z)))
(use-package ws-butler
:ensure t
:config
(ws-butler-global-mode t))
(use-package smex
:ensure t
:config
(smex-initialize))
(use-package key-chord
:ensure t
:recipe (:host github :repo "emacsmirror/key-chord")
:config
(key-chord-mode 1)
(key-chord-define-global "fj" 'avy-goto-char))
(use-package anzu
:ensure t
:config
(global-anzu-mode +1)
(set-face-attribute 'anzu-mode-line nil :foreground "light green" :weight 'bold)
(setq anzu-cons-mode-line-p nil)
(setcar (cdr (assq 'isearch-mode minor-mode-alist))
'(:eval (anzu--update-mode-line))))
(use-package uniquify
:config
(setq uniquify-buffer-name-style 'post-forward-angle-brackets) ;; or "forward"
(setq uniquify-min-dir-content 3))
(use-package bind-key
:ensure t
:bind (("C-c p" . beginning-of-buffer)
("C-c l" . goto-line)
("C-c n" . end-of-buffer)))
(use-package multiple-cursors
:ensure t
:bind (("C-<return>" . set-rectangular-region-anchor)))
(use-package company-jedi
:ensure t)
(use-package company-anaconda
:ensure t)
(use-package company
:ensure t
:bind (:map company-active-map
("C-p" . beautiful-company-move-up)
("C-n" . beautiful-company-move-down))
:config
(setq company-dabbrev-downcase nil)
(add-hook 'after-init-hook 'global-company-mode)
(add-to-list 'company-backends 'company-anaconda)
(add-hook 'python-mode-hook 'anaconda-mode)
(setq company-idle-delay 0.1))
(use-package ivy
:ensure t
:bind (("C-x b" . ivy-switch-buffer)))
(use-package switch-window
:ensure t
:bind (("M-o" . switch-window)))
(use-package hydra
:ensure t
:config
(defhydra hydra-tmux-memory
(global-map "C-t")
"tmux muscle memeory bindings"
("e" eval-expression "eval expression" :exit t)
("d" beautiful-debug-symbol-at-point "debug" :exit t)
("\"" split-window-below "split below" :exit t)
("'" split-window-below "split below" :exit t)
("%" split-window-right "split window right" :exit t)
("5" split-window-right "split window right" :exit t)
("q" switch-window "switch window" :exit t)
("o" other-window "other window" :exit t)
("w" ivy-switch-buffer "list buffers" :exit t)
("z" delete-other-windows "zoom" :exit t))
(defhydra hydra-diff
(global-map "C-c d")
"diff tools"
("g" beautiful-git-diff "git-diff" :exit t)
("d" dumb-diff "dumb-diff" :exit t)
("1" dumb-diff-set-region-as-buffer1 "inject into diff buf 1" :exit t)
("2" dumb-diff-set-region-as-buffer2 "inject into diff buf 2" :exit t)))
(use-package auto-read-only
:ensure t
:config
(auto-read-only-mode 1)
(add-to-list 'auto-read-only-file-regexps "~/.emacs.d/init.el"))
(use-package counsel
:bind (("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)
("<f1> f" . counsel-describe-function)
("<f1> v" . counsel-describe-variable)
("<f1> l" . counsel-load-library)
("<f2> i" . counsel-info-lookup-symbol)
("<f2> u" . counsel-unicode-char))
:ensure t)
(use-package projectile
:diminish
:config
(projectile-global-mode +1)
(setq projectile-enable-caching t)
:ensure t)
(use-package counsel-projectile
:bind (("s-t" . counsel-projectile-find-file)
("s-o" . counsel-projectile-find-file))
:ensure t)
(use-package helm-ag :ensure t)
(use-package helm-projectile
:bind (("M-g f" . beautiful-helm-projectile-ag-at-point))
:ensure t)
(use-package persistent-scratch
:if window-system
:ensure t
:config
(persistent-scratch-setup-default))
(use-package undo-tree
:bind (:map undo-tree-map
("C-x u" . undo-tree-undo)
("s-Z" . undo-tree-redo)
("C-x v" . undo-tree-visualize))
:config (global-undo-tree-mode t))
(use-package smartparens
:bind (("M-g a" . sp-beginning-of-sexp))
:bind (("M-g e" . sp-end-of-sexp))
:ensure t)
(use-package magit
:bind (("C-x m" . magit-status))
:ensure t)
(use-package diff-hl
:bind (("C-c 8" . diff-hl-previous-hunk)
("C-c 9" . diff-hl-next-hunk))
:config (global-diff-hl-mode 1)
:ensure t)
(use-package files
:bind (("s-r" . revert-buffer)))
(use-package go-mode
:ensure t
:config
(if (string-equal system-type "darwin")
(setq gofmt-command "gofmt")
(setq gofmt-command "~/go/bin/gofmt")))
(use-package midnight-mode
:config
(midnight-mode))
(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.
'(auto-dim-other-buffers-face ((t (:background "#424450"))))
'(isearch ((((class color) (min-colors 89)) (:background "#ddbd78" :foreground "#3e4451"))))
'(rainbow-delimiters-depth-1-face ((t (:foreground "white"))))
'(rainbow-delimiters-depth-2-face ((t (:foreground "dark orange"))))
'(rainbow-delimiters-depth-3-face ((t (:foreground "yellow"))))
'(rainbow-delimiters-depth-4-face ((t (:foreground "green"))))
'(rainbow-delimiters-depth-5-face ((t (:foreground "cyan"))))
'(rainbow-delimiters-depth-6-face ((t (:foreground "blue"))))
'(rainbow-delimiters-depth-7-face ((t (:foreground "dark violet"))))
'(rainbow-delimiters-depth-8-face ((t (:foreground "magenta"))))
'(rainbow-delimiters-depth-9-face ((t (:foreground "saddle brown"))))
'(show-paren-match ((((class color) (min-colors 89)) (:background "#1f5582"))))
'(swiper-line-face ((t (:inherit highlight :background "gray0" :foreground "gray100"))))
'(vhl/default-face ((t (:inherit default :background "yellow2")))))
;; TODO: add all packages
;; TODO: add all packages config
;; TODO: add all built-in keybindings...
;; TODO: add in all jack-util.el code that is _still_ being used....
;;
;; start built-in config changes
;;
(setq visible-bell nil)
(setq ring-bell-function 'ignore)
(setq tramp-default-method "scpx")
(setq clean-buffer-list-delay-general 7)
(show-paren-mode t)
(add-to-list 'auto-mode-alist '("\\.el\\'" . emacs-lisp-mode))
(setq org-log-done t) ;; show done time when marking a todo done
(defalias 'yes-or-no-p 'y-or-n-p) ;; don't require full "yes" for confirms
(tool-bar-mode -1) ;; get rid of tool bar
(setq inhibit-startup-message t) ;; git rid of startup page
(menu-bar-mode 0) ;; no menu bar
(setq resize-mini-windows t) ;; let mini buffer resize
(setq make-backup-files nil) ;; no backup files
(setq-default c-electric-flag nil) ;; do not get fancy with () {} ?
(setq whitespace-line-column 60000) ;; do not turn line purple if "too long"
(blink-cursor-mode 0) ;; no blinking cursor
(setq initial-scratch-message "") ;; no scratch message
(electric-indent-mode 0) ;; stop electric mode from being too smart for its own good
(global-hl-line-mode 1)
;; (global-auto-revert-mode 1) ;; so git branch changes and checkouts update the mode line (slow, so disabled)
(setq auto-revert-check-vc-info nil)
(setq confirm-kill-emacs 'y-or-n-p)
(setq message-log-max t) ;; If t, log messages but don't truncate the buffer when it becomes large.
(setq-default cursor-in-non-selected-windows nil) ;;
(setq column-number-mode t) ;;
(setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))
(setq create-lockfiles nil)
(setq cua-enable-cua-keys nil)
(cua-mode)
(if window-system
(set-fontset-font t 'unicode "Apple Color Emoji" nil 'prepend))
;; http://stackoverflow.com/a/25438277/24998
(setq vc-follow-symlinks t) ;; maybe
(scroll-bar-mode -1)
(global-subword-mode t) ;; for better deleting of parts of camalcase symbols
(global-linum-mode)
(when (and (string-equal system-type "darwin") (member "Iosevka" (font-family-list)))
(set-default-font "Iosevka"))
(let ((my-select-color "light green")) ;; #83F52C is a neon green, FF8300 is orange -- but plain "green" is also nice
(set-face-background 'region my-select-color) ;; make region stick out more
(set-cursor-color my-select-color))
(setq-default cursor-type '(bar . 2))
(defun display-startup-echo-area-message ()
(message "~/.emacs loaded in %s!" (emacs-init-time)))
;;
;; end built-in config changes
;;