Skip to content

Instantly share code, notes, and snippets.

@webframp
Created November 12, 2019 17:09
Show Gist options
  • Save webframp/cf8b51c6646e564023145247d5f53371 to your computer and use it in GitHub Desktop.
Save webframp/cf8b51c6646e564023145247d5f53371 to your computer and use it in GitHub Desktop.

Revisions

  1. webframp created this gist Nov 12, 2019.
    204 changes: 204 additions & 0 deletions config.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,204 @@
    ;;; ~/.doom.d/config.el -*- lexical-binding: t; -*-

    ;; To modify or add binding for existing modules use add-hook! or after! macros
    ;; https://github.com/hlissner/doom-emacs/wiki/Customization#reconfigure-packages

    ;; HOTFIX for Emacs 26.1 and gnutls 3.6 - no longer needed?
    ;; https://www.reddit.com/r/emacs/comments/cdf48c/failed_to_download_gnu_archive/
    ;; (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")

    ;;; UI
    (when IS-LINUX
    (font-put doom-font :weight 'semi-light))
    (when IS-MAC
    (setq ns-use-thin-smoothing t))

    (setq doom-modeline-major-mode-icon t)

    (setq doom-theme 'doom-outrun-electric)

    ;; (setq doom-font (font-spec :family "SauceCodePro Nerd Font" :size 18))
    (setq doom-font (font-spec :family "FuraCode Nerd Font Mono" :size 18)
    doom-variable-pitch-font (font-spec :family "Noto Sans" :size 18))

    ;;; Windows/Frames
    ;;;
    (add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
    (when IS-MAC
    (add-hook 'window-setup-hook #'toggle-frame-maximized))

    ;;; Keybinds
    ;; TODO Combine into single map! use
    (map! :after forge
    :map forge-post-mode-map
    :n "ZZ" #'forge-post-submit
    :n "ZQ" #'forge-post-cancel)

    (map! :after forge
    :map forge-topic-mode-map
    "c" #'forge-create-post
    :n "gy" #'forge-copy-url-at-point-as-kill
    :n "go" #'forge-browse-dwim)

    (map! :after forge
    :map magit-status-mode-map
    :n "gi" #'forge-jump-to-issues
    :n "gp" #'forge-jump-to-pullreqs
    :n "gy" #'forge-copy-url-at-point-as-kill
    :n "go" #'magit-browse-thing)


    ;; TODO add mapping for forge-toggle-closed-visibility.
    ;; Place with dispatch: SPC g ' x ?, @ x ? (visual, normal states too)
    ;; NOTE how to customize dispatch menu?
    (map! :leader
    :after projectile
    (:prefix "p"
    :desc "Save Project Buffers" "s" #'projectile-save-project-buffers))

    ;; Bind to SPC f F - freshen file from disk
    ;; Source: https://www.emacswiki.org/emacs/download/misc-cmds.el
    (defun revert-buffer-no-confirm ()
    "Revert buffer without confirmation."
    (interactive)
    (revert-buffer :ignore-auto :noconfirm))

    (map! :leader
    (:prefix "f"
    :desc "Refresh file from disk" "F" #'revert-buffer-no-confirm))

    ;; TODO rebind org-archive-subtree to SPC m h a ?
    ;; bindings for org-move-subtree-up, down, etc ?
    ;; http://develop.spacemacs.org/layers/+emacs/org/README.html#trees
    ;; (map! :localleader
    ;; :map org-mode-map
    ;; :after org
    ;; :desc "Archive subtree" "$" #'org-archive-subtree)


    ;;; Modules/Packages
    ;;
    ;; Emoji Cheatsheet
    ;; https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus/
    ;; (use-package! emoji-cheat-sheet-plus
    ;; :after (magit)
    ;; :config
    ;; (add-hook! 'magit-status-mode-hook 'emoji-cheat-sheet-plus-display-mode)
    ;; (add-hook! 'magit-log-mode-hook 'emoji-cheat-sheet-plus-display-mode))

    ;; (map! :leader
    ;; :after emoji-cheat-sheet-plus
    ;; (:prefix "i"
    ;; :desc "Insert emoji" "e" #'emoji-cheat-sheet-plus-insert))

    ;; Kubernetes.el
    ;; https://github.com/chrisbarrett/kubernetes-el
    ;; TODO Fix kubeconfig handling with iam-authenticator
    ;; :init config? is :defer-incrementally useful here?
    (use-package! kubernetes
    :config
    (setq kubernetes-poll-frequency 3600
    kubernetes-redraw-frequency 3600))

    (use-package! kubernetes-evil
    :when (featurep! :editor evil +everywhere)
    :after kubernetes)

    ;; TODO any more keybindings ?
    (map! :leader
    :after kubernetes
    (:prefix "o"
    :desc "Kubernetes status" "k" #'kubernetes-overview))

    ;; Org mode
    ;; (setq org-ellipsis " ▼ "
    ;; org-mobile-directory "~/Dropbox/Apps/MobileOrg"
    ;; org-agenda-files '("~/org/todo.org"
    ;; "~/org/devou.org"
    ;; "~/org/devops.org"
    ;; ;; "~/org/sensuwork.org"))

    (after! org
    ;; FIXME https://emacs.stackexchange.com/questions/38800/match-data-clobbered-by-buffer-modification-hooks
    (add-hook! 'org-mode-hook 'emoji-cheat-sheet-plus-display-mode)
    (add-to-list 'org-modules 'org-habit t))

    ;; Cloudformation mode
    ;; https://github.com/awkspace/doom-emacs-config/blob/dfd89cdff6204899fc49c5a2df88e71f427df0b5/config.el#L96
    (define-derived-mode cfn-mode yaml-mode
    "Cloudformation"
    "Cloudformation template mode.")

    (add-to-list 'auto-mode-alist '(".template\\'" . cfn-mode))
    (after! flycheck
    (flycheck-define-checker cfn-lint
    "A Cloudformation linter using cfn-python-lint.
    See URL 'https://github.com/awslabs/cfn-python-lint'."
    :command ("cfn-lint" "-f" "parseable" source)
    :error-patterns ((warning line-start (file-name) ":" line ":" column
    ":" (one-or-more digit) ":" (one-or-more digit) ":"
    (id "W" (one-or-more digit)) ":" (message) line-end)
    (error line-start (file-name) ":" line ":" column
    ":" (one-or-more digit) ":" (one-or-more digit) ":"
    (id "E" (one-or-more digit)) ":" (message) line-end))
    :modes (cfn-mode))
    (add-to-list 'flycheck-checkers 'cfn-lint))

    ;; Spotify controls
    (use-package! counsel-spotify
    :after (counsel))

    (map! :leader
    (:prefix ("o" . "open")
    (:prefix ("s" . "Spotify control")
    :desc "play/pause" "SPC" #'counsel-spotify-toggle-play-pause
    :desc "next" "l" #'counsel-spotify-next
    :desc "previous" "h" #'counsel-spotify-previous)))

    ;; Typopunct - insert proper typographical punctuation when writing
    ;; https://github.com/emacsmirror/typopunct
    (use-package! typopunct)
    (map! :desc "Typopunct" :n "SPC t t" #'typopunct-mode)

    (defun sme-markdown-mode-config ()
    "Enforce customized settings for markdown mode and enable typopunct"
    (set-fill-column 80)
    (typopunct-change-language 'english t)
    (typopunct-mode 1)
    ;; (setq-local comment-use-syntax nil) ;; usefulness is questionable
    )

    (add-hook! 'markdown-mode-hook 'sme-markdown-mode-config)
    (add-hook! 'gfm-mode-hook 'sme-markdown-mode-config)

    ;;; Edit Server
    ;; Edit with emacs, supports editing textareas from FF in Emacs
    ;; https://github.com/stsquad/emacs_chrome
    ;; https://addons.mozilla.org/en-US/firefox/addon/edit-with-emacs1/
    ;; TODO add hook after edit-server-edit minor mode to turn on autofilll/spellcheck/evil bindings
    ;; NOTE customize based on buffer type? html email vs markdown vs text
    (use-package! edit-server
    :config
    (edit-server-start))

    ;; (map! :map edit-server-edit-mode-map
    ;; "ZZ" #'edit-server-done
    ;; "ZQ" #'edit-server-abort)

    (pushnew! auto-mode-alist
    '("\\.tmpl\\'" . web-mode))

    (setq web-mode-engines-alist
    '(("go" . "\\.tmpl\\'")))

    ;; Non git tracked local settings
    (load! "+local")

    ;; Finally, keep my configs clean
    (setq-default custom-file (concat doom-private-dir "+custom.el"))
    (load! "+custom")

    ;; Local Variables:
    ;; flycheck-disabled-checkers: (emacs-lisp-checkdoc)
    ;; byte-compile-warnings: (not free-vars)
    ;; End:
    191 changes: 191 additions & 0 deletions init.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,191 @@
    ;;; init.el -*- lexical-binding: t; -*-

    ;; Copy this file to ~/.doom.d/init.el or ~/.config/doom/init.el ('doom
    ;; quickstart' will do this for you). The `doom!' block below controls what
    ;; modules are enabled and in what order they will be loaded. Remember to run
    ;; 'doom refresh' after modifying it.
    ;;
    ;; More information about these modules (and what flags they support) can be
    ;; found in modules/README.org.

    (doom! :input
    ;;chinese
    ;;japanese

    :completion
    company ; the ultimate code completion backend
    ;;helm ; the *other* search engine for love and life
    ;;ido ; the other *other* search engine...
    ivy ; a search engine for love and life

    :ui
    ;;deft ; notational velocity for Emacs
    doom ; what makes DOOM look the way it does
    doom-dashboard ; a nifty splash screen for Emacs
    ;;doom-quit ; DOOM quit-message prompts when you quit Emacs
    ;;fill-column ; a `fill-column' indicator
    hl-todo ; highlight TODO/FIXME/NOTE tags
    ;;indent-guides ; highlighted indent columns
    modeline ; snazzy, Atom-inspired modeline, plus API
    nav-flash ; blink the current line after jumping
    ;;neotree ; a project drawer, like NERDTree for vim
    ophints ; highlight the region an operation acts on
    (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
    treemacs ; a project drawer, like neotree but coole

    ;;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
    workspaces ; tab emulation, persistence & separate workspaces

    :editor
    (evil +everywhere); come to the dark side, we have cookies
    file-templates ; auto-snippets for empty files
    fold ; (nigh) universal code folding
    (format +onsave) ; automated prettiness
    ;;lispy ; vim for lisp, for people who dont like vim
    multiple-cursors ; editing in many places at once
    ;;objed ; text object editing for the innocent
    ;;parinfer ; turn lisp into python, sort of
    rotate-text ; cycle region at point between text candidates
    snippets ; my elves. They type so I don't have to

    :emacs
    (dired ; making dired pretty [functional]
    ;;+ranger ; bringing the goodness of ranger to dired
    +icons) ; colorful icons for dired-mode
    electric ; smarter, keyword-based electric-indent
    vc ; version-control and Emacs, sitting in a tree

    :term
    ;;eshell ; a consistent, cross-platform shell (WIP)
    shell ; a terminal REPL for Emacs
    ;;term ; terminals in Emacs
    ;;vterm ; another terminals in Emacs

    :tools
    ;;ansible
    ;;debugger ; FIXME stepping through code, to help you add bugs
    direnv
    docker
    editorconfig ; let someone else argue about tabs vs spaces
    ;;ein ; tame Jupyter notebooks with emacs
    eval ; run code, run (also, repls)
    flycheck ; tasing you for every semicolon you forget
    flyspell ; tasing you for misspelling mispelling
    ;;gist ; interacting with github gists
    (lookup ; helps you navigate your code and documentation
    +docsets) ; ...or in Dash docsets locally
    lsp
    macos ; MacOS-specific commands
    magit ; a git porcelain for Emacs
    make ; run make tasks from Emacs
    ;;pass ; password manager for nerds
    ;;pdf ; pdf enhancements
    ;;prodigy ; FIXME managing external services & code builders
    ;;rgb ; creating color strings
    terraform ; infrastructure as code
    ;;tmux ; an API for interacting with tmux
    ;;upload ; map local to remote projects via ssh/ftp
    ;;wakatime

    :lang
    ;;agda ; types of types of types of types...
    ;;assembly ; assembly for fun or debugging
    ;;cc ; C/C++/Obj-C madness
    ;;clojure ; java with a lisp
    ;;common-lisp ; if you've seen one lisp, you've seen them all
    ;;coq ; proofs-as-programs
    ;;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
    ;;fsharp ; ML stands for Microsoft's Language
    (go +lsp) ; the hipster dialect
    ;;(haskell +intero) ; a language that's lazier than I am
    ;;hy ; readability of scheme w/ speed of python
    ;;idris ;
    ;;(java +meghanada) ; the poster child for carpal tunnel syndrome
    ;;javascript ; all(hope(abandon(ye(who(enter(here))))))
    ;;julia ; a better, faster MATLAB
    ;;kotlin ; a better, slicker Java(Script)
    ;;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
    ;; +dragndrop ; file drag & drop support
    ;; +ipython ; ipython support for babel
    +pandoc ; pandoc integration into org's exporter
    +present) ; using 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
    ;; +pyenv) ; 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 {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
    rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
    ;;scala ; java, but good
    ;;scheme ; a fully conniving family of lisps
    sh ; she sells {ba,z,fi}sh shells on the C xor
    ;;solidity ; do you need a blockchain? No.
    ;;swift ; who asked for emoji variables?
    ;;terra ; Earth and Moon in alignment for performance.
    (web
    +html
    +css) ; the tubes
    ;;vala ; GObjective-C

    :email
    ;;(mu4e +gmail) ; WIP
    ;;notmuch ; WIP
    ;;(wanderlust +gmail) ; WIP

    ;; Applications are complex and opinionated modules that transform Emacs
    ;; toward a specific purpose. They may have additional dependencies and
    ;; should be loaded late.
    :app
    ;;calendar
    ;;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 sets reasonable defaults for Emacs. It also
    ;; provides a Spacemacs-inspired keybinding scheme and a smartparens
    ;; config. Use it as a reference for your own modules.
    (default +bindings +smartparens))

    ;; (with-eval-after-load 'gnutls
    ;; (add-to-list 'gnutls-trustfiles "/usr/local/etc/libressl/cert.pem"))

    ;; Local Variables:
    ;; flycheck-disabled-checkers: (emacs-lisp-checkdoc)
    ;; End:
    18 changes: 18 additions & 0 deletions packages.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    ;; -*- no-byte-compile: t; -*-
    ;;; ~/.doom.d/packages.el

    (package! kubernetes)
    (when (featurep! :editor evil +everywhere)
    (package! kubernetes-evil))

    (package! emoji-cheat-sheet-plus)

    (package! counsel-spotify)

    (package! typopunct :recipe (:host github :repo "emacsmirror/typopunct" :files (:defaults "*")))

    (package! edit-server)

    ;; Local Variables:
    ;; flycheck-disabled-checkers: (emacs-lisp-checkdoc)
    ;; End: