;;; private/grfn/init.el -*- lexical-binding: t; -*- (doom! :feature ;debugger ; FIXME stepping through code, to help you add bugs eval ; run code, run (also, repls) (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files (lookup ; helps you navigate your code and documentation +devdocs ; ...on devdocs.io online +docsets) ; ...or in Dash docsets locally snippets ; my elves. They type so I don't have to spellcheck ; tasing you for misspelling mispelling (syntax-checker ; tasing you for every semicolon you forget +childframe) ; use childframes for error popups (Emacs 26+ only) workspaces ; tab emulation, persistence & separate workspaces :completion (company ; the ultimate code completion backend +auto) ; as-you-type code completion ;(helm ; the *other* search engine for love and life ; +fuzzy) ; enable fuzzy search backend for helm ;ido ; the other *other* search engine... (ivy ; a search engine for love and life +fuzzy) ; enable fuzzy search backend for ivy :ui doom ; what makes DOOM look the way it does doom-dashboard ; a nifty splash screen for Emacs doom-modeline ; a snazzy Atom-inspired mode-line doom-quit ; DOOM quit-message prompts when you quit Emacs evil-goggles ; display visual hints when editing in evil ;fci ; a `fill-column' indicator hl-todo ; highlight TODO/FIXME/NOTE tags ;modeline ; snazzy, Atom-inspired modeline, plus API nav-flash ; blink the current line after jumping ;neotree ; a project drawer, like NERDTree for vim ;treemacs ; a project drawer, like neotree but cooler (popup ; tame sudden yet inevitable temporary windows +all ; catch all popups that start with an asterix +defaults) ; default popup rules pretty-code ; replace bits of code with pretty symbols ;tabbar ; FIXME an (incomplete) tab bar for Emacs unicode ; extended unicode support for various languages vc-gutter ; vcs diff in the fringe vi-tilde-fringe ; fringe tildes to mark beyond EOB window-select ; visually switch windows :editor ;(format +onsave) ; automated prettiness ;multiple-cursors ; editing in many places at once ;parinfer ; turn lisp into python, sort of rotate-text ; cycle region at point between text candidates :emacs dired ; making dired pretty [functional] ediff ; comparing files in Emacs electric ; smarter, keyword-based electric-indent ;eshell ; a consistent, cross-platform shell (WIP) hideshow ; basic code-folding support imenu ; an imenu sidebar and searchable code index ;term ; terminals in Emacs vc ; version-control and Emacs, sitting in a tree :tools editorconfig ; let someone else argue about tabs vs spaces ;ein ; tame Jupyter notebooks with emacs gist ; interacting with github gists ;macos ; MacOS-specific commands make ; run make tasks from Emacs magit ; password-store ; password manager for nerds pdf ; pdf enhancements ;prodigy ; FIXME managing external services & code builders ;rgb ; creating color strings ;tmux ; an API for interacting with tmux ;upload ; map local to remote projects via ssh/ftp ;wakatime :lang ;assembly ; assembly for fun or debugging ;(cc +irony +rtags); C/C++/Obj-C madness clojure ; java with a lisp ;common-lisp ; if you've seen one lisp, you've seen them all ;crystal ; ruby at the speed of c ;csharp ; unity, .NET, and mono shenanigans data ; config/data formats erlang ; an elegant language for a more civilized age elixir ; erlang done right ;elm ; care for a cup of TEA? emacs-lisp ; drown in parentheses ;ess ; emacs speaks statistics ;go ; the hipster dialect ;(haskell +intero) ; a language that's lazier than I am haskell ; a language that's lazier than I am ;hy ; readability of scheme w/ speed of python ;(java +meghanada) ; the poster child for carpal tunnel syndrome javascript ; all(hope(abandon(ye(who(enter(here)))))) ;julia ; a better, faster MATLAB latex ; writing papers in Emacs has never been so fun ;ledger ; an accounting system in Emacs ;lua ; one-based indices? one-based indices markdown ; writing docs for people to ignore ;nim ; python + lisp at the speed of c nix ; I hereby declare "nix geht mehr!" ;ocaml ; an objective camel (org ; organize your plain life in plain text +attach ; custom attachment system +babel ; running code in org +capture ; org-capture in and outside of Emacs +export ; Exporting org to whatever you want +present) ; Emacs for presentations ;perl ; write code no one else can comprehend ;php ; perl's insecure younger brother ;plantuml ; diagrams for confusing people more ;purescript ; javascript, but functional ;python ; beautiful is better than ugly ;qt ; the 'cutest' gui framework ever ;racket ; a DSL for DSLs ;rest ; Emacs as a REST client ruby ; 1.step do {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} ;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;scala ; java, but good (sh +fish) ; she sells (ba|z)sh shells on the C xor ;solidity ; do you need a blockchain? No. ;swift ; who asked for emoji variables? web ; the tubes ;; Applications are complex and opinionated modules that transform Emacs ;; toward a specific purpose. They may have additional dependencies and ;; should be loaded late. :app ;(email +gmail) ; emacs as an email client irc ; how neckbeards socialize ;(rss +org) ; emacs as an RSS reader ;twitter ; twitter client https://twitter.com/vnought ;(write ; emacs as a word processor (latex + org + markdown) ; +wordnut ; wordnet (wn) search ; +langtool) ; a proofreader (grammar/style check) for Emacs :collab ;floobits ; peer programming for a price ;impatient-mode ; show off code over HTTP :config ;; For literate config users. This will tangle+compile a config.org ;; literate config in your `doom-private-dir' whenever it changes. ;literate ;; The default module set reasonable defaults for Emacs. It also provides ;; a Spacemacs-inspired keybinding scheme, a custom yasnippet library, ;; and additional ex commands for evil-mode. Use it as a reference for ;; your own modules. (default +bindings +snippets +evil-commands)) ;; I've swapped these keys on my keyboard (setq x-super-keysym 'alt x-alt-keysym 'meta) (setq user-mail-address "root@gws.fyi" user-full-name "Griffin Smith") ; (def-package-hook! doom-themes :disable) (after! rust (setq rust-format-on-save t)) ; (defconst rust-src-path ; (-> "/Users/griffin/.cargo/bin/rustc --print sysroot" ; shell-command-to-string ; string-trim ; (concat "/lib/rustlib/src/rust/src"))) ; ; (setenv "RUST_SRC_PATH" rust-src-path) ; ; (after! racer ; (setq racer-rust-src-path rust-src-path)) ; (add-hook! rust-mode (flycheck-rust-setup) (flycheck-mode) (racer-mode) (cargo-minor-mode)) (add-hook! elixir-mode (require 'flycheck-credo) (setq flycheck-elixir-credo-strict t) (flycheck-credo-setup) (require 'flycheck-mix) (flycheck-mix-setup) (require 'flycheck-dialyxir) (flycheck-dialyxir-setup) (flycheck-mode)) (setq exec-path (append exec-path '("/Users/griffin/.cargo/bin"))) (after! cargo (setq cargo-process--custom-path-to-bin "/Users/griffin/.cargo/bin/cargo")) (setq +solarized-s-base03 "#002b36" +solarized-s-base02 "#073642" ;; emphasized content +solarized-s-base01 "#586e75" ;; primary content +solarized-s-base00 "#657b83" +solarized-s-base0 "#839496" ;; comments +solarized-s-base1 "#93a1a1" ;; background highlight light +solarized-s-base2 "#eee8d5" ;; background light +solarized-s-base3 "#fdf6e3" ;; Solarized accented colors +solarized-yellow "#b58900" +solarized-orange "#cb4b16" +solarized-red "#dc322f" +solarized-magenta "#d33682" +solarized-violet "#6c71c4" +solarized-blue "#268bd2" +solarized-cyan "#2aa198" +solarized-green "#859900" ;; Darker and lighter accented colors ;; Only use these in exceptional circumstances! +solarized-yellow-d "#7B6000" +solarized-yellow-l "#DEB542" +solarized-orange-d "#8B2C02" +solarized-orange-l "#F2804F" +solarized-red-d "#990A1B" +solarized-red-l "#FF6E64" +solarized-magenta-d "#93115C" +solarized-magenta-l "#F771AC" +solarized-violet-d "#3F4D91" +solarized-violet-l "#9EA0E5" +solarized-blue-d "#00629D" +solarized-blue-l "#69B7F0" +solarized-cyan-d "#00736F" +solarized-cyan-l "#69CABF" +solarized-green-d "#546E00" +solarized-green-l "#B4C342") (defadvice load-theme (after theme-set-overrides activate) (dolist (theme-settings theme-overrides) (let ((theme (car theme-settings)) (faces (cadr theme-settings))) (if (member theme custom-enabled-themes) (dolist (face faces) (custom-theme-set-faces theme face)))))) (defcustom theme-overrides nil "Association list of override faces to set for different custom themes.") (defun alist-set (alist-symbol key value) "Set VALUE of a KEY in ALIST-SYMBOL." (set alist-symbol (cons (list key value) (assq-delete-all key (eval alist-symbol))))) (alist-set 'theme-overrides 'grfn-solarized-light `((font-lock-doc-face ((t (:foreground ,+solarized-s-base1)))) (font-lock-preprocessor-face ((t (:foreground ,+solarized-red)))) (font-lock-keyword-face ((t (:foreground ,+solarized-green)))) (elixir-attribute-face ((t (:foreground ,+solarized-blue)))) (elixir-atom-face ((t (:foreground ,+solarized-cyan)))) (linum ((t (:background ,+solarized-s-base2 :foreground ,+solarized-s-base1)))) (line-number ((t (:background ,+solarized-s-base2 :foreground ,+solarized-s-base1)))) (haskell-operator-face ((t (:foreground ,+solarized-green)))) (haskell-keyword-face ((t (:foreground ,+solarized-cyan)))))) (add-to-list 'custom-theme-load-path "~/.doom.d/themes") (load-theme 'grfn-solarized-light t) (defface haskell-import-face `((t (:foreground ,+solarized-magenta))) "") (setq doom-theme 'grfn-solarized-light) ; (setq doom-theme 'doom-solarized-light) (add-hook! doom-post-init (set-face-attribute 'bold nil :weight 'ultra-light) (set-face-bold-p 'bold nil)) (defun rx-words (&rest words) (rx-to-string `(and symbol-start (group (or ,@words)) symbol-end))) (font-lock-add-keywords 'elixir-mode `((,(rx-words "def" "defp" "test" "describe" "property" "defrecord" "defmodule" "defstruct" "defdelegate" "defprotocol" "defimpl" "use" "import" "alias" "require" "assert" "refute" "assert_raise") . 'font-lock-preprocessor-face))) (font-lock-add-keywords 'elixir-mode `((,(rx-words "def" "defp" "test" "describe" "property" "defrecord" "defmodule" "defstruct" "defdelegate" "use" "import" "alias" "require" "assert" "refute" "assert_raise") . 'font-lock-preprocessor-face))) (font-lock-add-keywords 'haskell-mode `((,(rx-words "import") . 'haskell-import-face))) ;; (font-lock-add-keywords ;; 'haskell-mode ;; `((,(rx "-- |") . 'haskell-keyword-face))) (load-file (let ((coding-system-for-read 'utf-8)) (shell-command-to-string "agda-mode locate")))