dotfiles

My dotfiles.
Log | Files | Refs | LICENSE

commit f4a48c56c2731fa5db2bfdd4d8111ca5c436c150
parent f6a99ef14b83ab325426ec9a144f8b8ca6ceba7c
Author: Ryan Jeffrey <ryan@ryanmj.xyz>
Date:   Sun, 27 Sep 2020 22:56:20 -0700

new econfig

Diffstat:
M.econfig.org | 1274+++++++++++++++++++++++++++++++++++--------------------------------------------
1 file changed, 559 insertions(+), 715 deletions(-)

diff --git a/.econfig.org b/.econfig.org @@ -1,591 +1,317 @@ -#+TITLE: Ryan Jeffrey's Emacs config ++TITLE: Ryan Jeffrey's Emacs config #+AUTHOR: Ryan Jeffrey #+EMAIL: pwishie@gmail.com #+OPTIONS: num:nil - + * Emacs ** init #+BEGIN_SRC emacs-lisp -(require 'server) -(or (server-running-p) - (server-start)) - - (eval-when-compile - (require 'use-package)) - - (defalias 'yes-or-no-p 'y-or-n-p) - - (set-frame-parameter (selected-frame) 'alpha '(90 . 50)) - (add-to-list 'default-frame-alist '(alpha . (90 . 50))) - -#+END_SRC -** font and theme -#+BEGIN_SRC emacs-lisp - -(add-to-list 'load-path "~/.emacs.d/lisp/flycheck-pos-tip") - -; (require 'popup-pos-tip) - -; (defadvice popup-tip -; (around popup-pos-tip-wrapper (string &rest args) activate) -; (if (eq window-system 'x) -; (apply 'popup-pos-tip string args) -; ad-do-it)) - -; (setq x-gtk-use-system-tooltips nil) - - ;; font - (add-to-list 'default-frame-alist - '(font . "Hack:antialias=true:size=20:style=Regular") - '(font . "Fira Code Symbol:antialias=true:size=20:style=Regular")) - - (defun fira-code-mode--make-alist (list) - "Generate prettify-symbols alist from LIST." - (let ((idx -1)) - (mapcar - (lambda (s) - (setq idx (1+ idx)) - (let* ((code (+ #Xe100 idx)) - (width (string-width s)) - (prefix ()) - (suffix '(?\s (Br . Br))) - (n 1)) - (while (< n width) - (setq prefix (append prefix '(?\s (Br . Bl)))) - (setq n (1+ n))) - (cons s (append prefix suffix (list (decode-char 'ucs code)))))) - list))) - - (defconst fira-code-mode--ligatures - '("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\" - "{-" "[]" "::" ":::" ":=" "!!" "!=" "!==" "-}" - "--" "---" "-->" "->" "->>" "-<" "-<<" "-~" - "#{" "#[" "##" "###" "####" "#(" "#?" "#_" "#_(" - ".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*" - "/**" "/=" "/==" "/>" "//" "///" "&&" "||" "||=" - "|=" "|>" "^=" "$>" "++" "+++" "+>" "=:=" "==" - "===" "==>" "=>" "=>>" "<=" "=<<" "=/=" ">-" ">=" - ">=>" ">>" ">>-" ">>=" ">>>" "<*" "<*>" "<|" "<|>" - "<$" "<$>" "<!--" "<-" "<--" "<->" "<+" "<+>" "<=" - "<==" "<=>" "<=<" "<>" "<<" "<<-" "<<=" "<<<" "<~" - "<~~" "</" "</>" "~@" "~-" "~=" "~>" "~~" "~~>" "%%" - "x" ":" "+" "+" "*")) - - (defvar fira-code-mode--old-prettify-alist) - - (defun fira-code-mode--enable () - "Enable Fira Code ligatures in current buffer." - (setq-local fira-code-mode--old-prettify-alist prettify-symbols-alist) - (setq-local prettify-symbols-alist (append (fira-code-mode--make-alist fira-code-mode--ligatures) fira-code-mode--old-prettify-alist)) - (prettify-symbols-mode t)) - - (defun fira-code-mode--disable () - "Disable Fira Code ligatures in current buffer." - (setq-local prettify-symbols-alist fira-code-mode--old-prettify-alist) - (prettify-symbols-mode -1)) - - (define-minor-mode fira-code-mode - "Fira Code ligatures minor mode" - :lighter "" - (setq-local prettify-symbols-unprettify-at-point 'right-edge) - (if fira-code-mode - (fira-code-mode--enable) - (fira-code-mode--disable))) - - (defun fira-code-mode--setup () - "Setup Fira Code Symbols" - (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")) - - (add-hook 'rust-mode-hook 'fira-code-mode) - - (defun my/create-greek-ligatures () - "Create greek ligatures." - (push '("lambda" . ?λ ) prettify-symbols-alist) - (push '("alpha" . ?α ) prettify-symbols-alist) - (push '("beta" . ?β ) prettify-symbols-alist) - (push '("theta" . ?θ ) prettify-symbols-alist) - (push '("omega" . ?ω ) prettify-symbols-alist)) - - (add-hook 'after-init-hook 'my/create-greek-ligatures) - - (add-to-list 'load-path "~/.emacs.d/themes/") - - (setq modus-vivendi-theme-slanted-constructs nil - modus-vivendi-theme-bold-constructs nil - modus-vivendi-theme-visible-fringes nil - modus-vivendi-theme-subtle-diffs nil - modus-vivendi-theme-distinct-org-blocks nil - modus-vivendi-theme-proportional-fonts nil - modus-vivendi-theme-scale-headings nil - modus-vivendi-theme-scale-1 1 - modus-vivendi-theme-scale-2 1 - modus-vivendi-theme-scale-3 1 - modus-vivendi-theme-scale-4 1) - - (load-theme 'modus-vivendi t) - - ;; (use-package telephone-line - ;; :init - - ;; (setq telephone-line-primary-right-separator 'telephone-line-abs-left - ;; telephone-line-secondary-right-separator 'telephone-line-abs-hollow-left) - - ;; (setq telephone-line-height 24 - ;; telephone-line-evil-use-short-tag t) - - ;; :config - - ;; (telephone-line-mode t)) - - ;; - (global-set-key (kbd "M-<up>") 'text-scale-increase) - (global-set-key (kbd "M-<down>") 'text-scale-decrease) - (scroll-bar-mode nil) - - (use-package shr - :commands (eww - eww-browse-url) - :config - ;(setq browse-url-browser-function 'eww-browse-url) - (setq shr-use-fonts nil) - (setq shr-use-colors nil) - (setq shr-max-image-proportion 0.2) - (setq shr-width (current-fill-column))) - - -#+END_SRC -** Ivy-mode -#+BEGIN_SRC emacs-lisp - (use-package counsel - :ensure t) - - (use-package swiper - :ensure t) - - (use-package ivy - :ensure t - :init - - (ivy-mode 1) - (setq ivy-use-virtual-buffers t) - (setq enable-recursive-minibuffers t) - ;; enable this if you want `swiper' to use it - ;; (setq search-default-mode #'char-fold-to-regexp) - (global-set-key "\C-s" 'swiper) - (global-set-key (kbd "<f6>") 'ivy-resume) - (global-set-key (kbd "M-x") 'counsel-M-x) - (global-set-key (kbd "<f5> f") 'counsel-describe-function) - (global-set-key (kbd "<f5> v") 'counsel-describe-variable) - (global-set-key (kbd "<f5> l") 'counsel-find-library) - (global-set-key (kbd "<f5> i") 'counsel-info-lookup-symbol) - (global-set-key (kbd "<f5> u") 'counsel-unicode-char) - (global-set-key (kbd "s-c g") 'counsel-git) - (global-set-key (kbd "s-c j") 'counsel-git-grep) - (global-set-key (kbd "s-c k") 'counsel-ag) - (global-set-key (kbd "s-x l") 'counsel-locate) - (global-set-key (kbd "s-S-o") 'counsel-rhythmbox) - (define-key minibuffer-local-map (kbd "s-r") 'counsel-minibuffer-history)) -#+END_SRC - -** Misc -#+BEGIN_SRC emacs-lisp - (put 'upcase-region 'disabled nil) - (electric-pair-mode t) - (show-paren-mode 1) - (setq-default indent-tabs-mode nil) - (setq-default tab-width 4) - (setq column-number-mode t) - (display-time-mode 1) - (tool-bar-mode -1) - (menu-bar-mode -1) - - ;(scroll-bar-mode -1) - (setq ring-bell-function 'ignore) - (blink-cursor-mode 0) - (set-language-environment "UTF-8") - (setq redisplay-dont-pause t) -#+END_SRC - -** Filename-mode associations -#+BEGIN_SRC emacs-lisp - - (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) - ;(add-to-list 'auto-mode-alist '(".\\'" . conf-mode)) ; run conf mode on dotfiles - (add-to-list 'auto-mode-alist '("\\config\\'" . conf-mode)) - (add-to-list 'auto-mode-alist '("\\.service\\'" . systemd-mode)) - (add-to-list 'auto-mode-alist '("\\.fish\\'" . fish-mode)) - (add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode)) - (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode)) - (add-to-list 'auto-mode-alist '("\\.Xresources'" . conf-xdefaults-mode)) - -#+END_SRC -** joestar -#+BEGIN_SRC emacs-lisp - (add-to-list 'load-path "~/.emacs.d/lisp/") - (require 'highlight) - - (use-package undo-tree - :ensure t) - - (use-package joestar - :init - (progn - (defvar undo-tree-map - (let ((map (make-sparse-keymap))) - ;; remap `undo' and `undo-only' to `undo-tree-undo' - (define-key map [remap undo] 'undo-tree-undo) - (define-key map [remap undo-only] 'undo-tree-undo) - ;; bind standard undo bindings (since these match redo counterparts) - (define-key map (kbd "C-/") 'undo-tree-undo) - (define-key map "\C-_" 'undo-tree-undo) - ;; redo doesn't exist normally, so define our own keybindings - (define-key map (kbd "C-?") 'undo-tree-redo) - (define-key map (kbd "M-_") 'undo-tree-redo) - ;; just in case something has defined `redo'... - (define-key map [remap redo] 'undo-tree-redo) - ;; we use "C-x u" for the undo-tree visualizer - (define-key map (kbd "s-x u") 'undo-tree-visualize) - ;; bind register commands - (define-key map (kbd "s-x r u") 'undo-tree-save-state-to-register) - (define-key map (kbd "s-x r U") 'undo-tree-restore-state-from-register) - ;; set keymap - (setq undo-tree-map map)))) - - :load-path - "~/.emacs.d/joestar/") - - (global-joestar-mode) - - ;; global move window keys so non joestar buffers can still have these bindings - (global-set-key (kbd "M-<left>") #'(lambda () - (interactive) - (other-window -1))) - - (global-set-key (kbd "M-<right>") #'(lambda () - (interactive) - (other-window 1))) - - (global-set-key (kbd "S-<right>") 'joe-nbuf) - (global-set-key (kbd "S-<left>") 'joe-pbuf) +(server-start) -#+END_SRC -** org -#+BEGIN_SRC emacs-lisp +(eval-when-compile + (require 'use-package)) - (use-package org-indent-mode - :config - (org-indent-mode t) - :hook org-mode) +(defalias 'yes-or-no-p 'y-or-n-p) - (use-package org-bullets - :ensure t) - - (setq org-src-tab-acts-natively t) +(set-frame-parameter (selected-frame) 'alpha '(100 . 100)) +(add-to-list 'default-frame-alist '(alpha . (100 . 100))) #+END_SRC -* IDE -** company-mode and flycheck +** font and theme #+BEGIN_SRC emacs-lisp +(add-to-list 'load-path "~/.emacs.d/lisp/") -(require 'flycheck) -(add-hook 'after-init-hook #'global-flycheck-mode) - - (use-package flycheck-irony - :ensure t) - - (use-package counsel - :ensure t) - - (use-package irony - :ensure t - :init - (push 'c++-mode irony-supported-major-modes) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) - (eval-after-load 'flycheck - '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) +(setq x-gtk-use-system-tooltips nil) - (eval-after-load 'company - '(add-to-list 'company-backends 'company-irony)) +;; font +(add-to-list 'default-frame-alist + '(font . "Hack:antialias=true:size=16:style=Regular")) - :hook c++-mode) +(defun my/create-greek-ligatures () + "Create greek ligatures." + (push '("lambda" . ?λ ) prettify-symbols-alist) + (push '("alpha" . ?α ) prettify-symbols-alist) + (push '("beta" . ?β ) prettify-symbols-alist) + (push '("theta" . ?θ ) prettify-symbols-alist) + (push '("omega" . ?ω ) prettify-symbols-alist)) - (use-package company-irony - :ensure t) +(add-hook 'after-init-hook 'my/create-greek-ligatures) - (use-package company-c-headers - :ensure t) +(add-to-list 'load-path "~/.emacs.d/themes/") - (use-package company-irony-c-headers - :ensure t) +(setq modus-vivendi-theme-slanted-constructs nil + modus-vivendi-theme-bold-constructs nil + modus-vivendi-theme-visible-fringes nil + modus-vivendi-theme-subtle-diffs nil + modus-vivendi-theme-distinct-org-blocks nil + modus-vivendi-theme-proportional-fonts nil + modus-vivendi-theme-scale-headings nil + modus-vivendi-theme-scale-1 1 + modus-vivendi-theme-scale-2 1 + modus-vivendi-theme-scale-3 1 + modus-vivendi-theme-scale-4 1) - (use-package company-quickhelp - :ensure t) +(use-package modus-vivendi-theme + :ensure t) +(use-package modus-operandi-theme + :ensure t) +(load-theme 'modus-vivendi t) - (use-package company-mode - :config - (company-mode t) - (require 'color) - (require 'company-quickhelp) +(global-set-key (kbd "M-<up>") 'text-scale-increase) +(global-set-key (kbd "M-<down>") 'text-scale-decrease) +(scroll-bar-mode nil) - (let ((bg (face-attribute 'default :background))) - (custom-set-faces - `(company-tooltip ((t (:inherit default :background ,(color-lighten-name bg 2))))) - `(company-scrollbar-bg ((t (:background ,(color-lighten-name bg 10))))) - `(company-scrollbar-fg ((t (:background ,(color-lighten-name bg 5))))) - `(company-tooltip-selection ((t (:inherit font-lock-function-name-face)))) - `(company-tooltip-common ((t (:inherit font-lock-constant-face)))))) - - (eval-after-load 'irony - '((add-to-list 'company-backends 'company-irony) - (add-to-list 'company-backends 'company-c-headers) - (add-to-list 'company-backends 'company-irony-c-headers))) - (company-quickhelp-mode t) - - - - :hook (prog-mode)) +(use-package shr + :commands (eww + eww-browse-url) + :config + ;(setq browse-url-browser-function 'eww-browse-url) + (setq shr-use-fonts nil) + (setq shr-use-colors nil) + (setq shr-max-image-proportion 0.2) + (setq shr-width (current-fill-column))) #+END_SRC -** cobol +** Ivy-mode #+BEGIN_SRC emacs-lisp +(use-package counsel + :ensure t) - (use-package cobol-mode - :ensure t) - -#+END_SRC -** all programming languages -*** todos -#+BEGIN_SRC emacs-lisp +(use-package swiper + :ensure t) - (use-package fic-mode +(use-package ivy :ensure t - :config - (fic-mode t) - :hook prog-mode) - -#+END_SRC -** C/C++ -*** style and font-lock - -#+BEGIN_SRC emacs-lisp - - (setq c-default-style "linux" - c-basic-offset 4) - - (c-set-offset 'substatement-open 0) - - (use-package modern-cpp-font-lock - :ensure t - :init - (modern-c++-font-lock-global-mode t)) - - (add-hook 'c++-mode-hook 'irony-mode) - (add-hook 'c-mode-hook 'irony-mode) - + :init + + (ivy-mode 1) + (setq ivy-use-virtual-buffers t) + (setq enable-recursive-minibuffers t) + ;; enable this if you want `swiper' to use it + ;; (setq search-default-mode #'char-fold-to-regexp) + (global-set-key "\C-s" 'swiper) + (global-set-key (kbd "<f6>") 'ivy-resume) + (global-set-key (kbd "M-x") 'counsel-M-x) + (global-set-key (kbd "<f5> f") 'counsel-describe-function) + (global-set-key (kbd "<f5> v") 'counsel-describe-variable) + (global-set-key (kbd "<f5> l") 'counsel-find-library) + (global-set-key (kbd "<f5> i") 'counsel-info-lookup-symbol) + (global-set-key (kbd "<f5> u") 'counsel-unicode-char) + (global-set-key (kbd "s-c g") 'counsel-git) + (global-set-key (kbd "s-c j") 'counsel-git-grep) + (global-set-key (kbd "s-c k") 'counsel-ag) + (global-set-key (kbd "s-x l") 'counsel-locate) + (global-set-key (kbd "s-S-o") 'counsel-rhythmbox) + (define-key minibuffer-local-map (kbd "s-r") 'counsel-minibuffer-history)) #+END_SRC -*** company and yasnippet -#+BEGIN_SRC emacs-lisp - - - (add-hook 'c++-mode-hook - (lambda () (setq flycheck-clang-language-standard "c++17"))) - - (use-package yasnippet-snippets - :ensure t) - - (use-package yasnippet - :ensure t - :init - (yas-reload-all) - (add-hook 'prog-mode-hook #'yas-minor-mode)) - -#+END_SRC - -** lisp -#+BEGIN_SRC emacs-lisp - - ;; (use-package slime - ;; :ensure t - ;; :config - ;; (setq inferior-lisp-program "/usr/bin/sbcl") - ;; (setq slime-contribs '(slime-fancy)) - ;; (load (expand-file-name "~/quicklisp/slime-helper.el")) - ;; ;; Replace "sbcl" with the path to your implementation - ;; (setq inferior-lisp-program "sbcl")) - - - ;; (setq geiser-active-implementations '(guile)) - - (use-package elisp-def - :ensure t - :init - (dolist (hook '(emacs-lisp-mode-hook ielm-mode-hook)) - (add-hook hook #'elisp-def-mode))) -#+END_SRC ** Misc - #+BEGIN_SRC emacs-lisp - - (use-package neotree - :ensure t - :init (global-set-key [f8] 'neotree-toggle)) - - (use-package emojify - :ensure t - :init (global-emojify-mode)) +(put 'upcase-region 'disabled nil) +(electric-pair-mode t) +(show-paren-mode 1) +(setq-default indent-tabs-mode nil) +(setq-default tab-width 4) +(setq column-number-mode t) +(display-time-mode 1) +(tool-bar-mode -1) +(menu-bar-mode -1) +(scroll-bar-mode -1) +(setq ring-bell-function 'ignore) +(blink-cursor-mode 0) +(set-language-environment "UTF-8") +(setq redisplay-dont-pause t) #+END_SRC -** scripts -*** Perl -#+BEGIN_SRC emacs-lisp - - (fset 'perl-mode 'cperl-mode) - (setq cperl-indent-level 4) - (setq cperl-extra-newline-before-brace t - cperl-brace-offset -2 - cperl-merge-trailing-else nil) +** Filename-mode associations +#+BEGIN_SRC emacs-lisp - (add-hook 'perl-mode-hook (lambda () - (set (make-local-variable 'rebox-style-loop) '(75 11)) - (set (make-local-variable 'rebox-min-fill-column) 79) - (rebox-mode 1))) +(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) + ;(add-to-list 'auto-mode-alist '(".\\'" . conf-mode)) ; run conf mode on dotfiles +(add-to-list 'auto-mode-alist '("\\config\\'" . conf-mode)) +(add-to-list 'auto-mode-alist '("\\.service\\'" . systemd-mode)) +(add-to-list 'auto-mode-alist '("\\.fish\\'" . fish-mode)) +(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode)) +(add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode)) +(add-to-list 'auto-mode-alist '("\\.Xresources'" . conf-xdefaults-mode)) #+END_SRC -*** Ruby +** joestar #+BEGIN_SRC emacs-lisp +(use-package undo-tree + :ensure t) +(use-package highlight + :ensure t) +(use-package joestar + :load-path + "~/.emacs.d/joestar/" + :init + (progn + (defvar undo-tree-map + (let ((map (make-sparse-keymap))) + ;; remap `undo' and `undo-only' to `undo-tree-undo' + (define-key map [remap undo] 'undo-tree-undo) + (define-key map [remap undo-only] 'undo-tree-undo) + ;; bind standard undo bindings (since these match redo counterparts) + (define-key map (kbd "C-/") 'undo-tree-undo) + (define-key map "\C-_" 'undo-tree-undo) + ;; redo doesn't exist normally, so define our own keybindings + (define-key map (kbd "C-?") 'undo-tree-redo) + (define-key map (kbd "M-_") 'undo-tree-redo) + ;; just in case something has defined `redo'... + (define-key map [remap redo] 'undo-tree-redo) + ;; we use "C-x u" for the undo-tree visualizer + (define-key map (kbd "s-x u") 'undo-tree-visualize) + ;; bind register commands + (define-key map (kbd "s-x r u") 'undo-tree-save-state-to-register) + (define-key map (kbd "s-x r U") 'undo-tree-restore-state-from-register) + ;; set keymap + (setq undo-tree-map map))))) + +(global-joestar-mode) + +;; global move window keys so non joestar buffers can still have these bindings +(global-set-key (kbd "M-<left>") #'(lambda () + (interactive) + (other-window -1))) + +(global-set-key (kbd "M-<right>") #'(lambda () + (interactive) + (other-window 1))) + +(global-set-key (kbd "S-<right>") 'joe-nbuf) +(global-set-key (kbd "S-<left>") 'joe-pbuf) + +#+END_SRC +** markdown +#+begin_src emacs-lisp + +(use-package markdown-mode + :ensure t + :mode (("README\\.md\\'" . gfm-mode) + ("\\.md\\'" . markdown-mode) + ("\\.markdown\\'" . markdown-mode)) + :init (setq markdown-command "multimarkdown")) - (add-hook 'ruby-mode-hook 'robe-mode) - (add-hook 'robe-mode-hook 'ac-robe-setup) - -#+END_SRC -** golang +#+end_src +** org #+BEGIN_SRC emacs-lisp - (defun set-exec-path-from-shell-PATH () - (let ((path-from-shell (replace-regexp-in-string - "[ \t\n]*$" - "" - (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'")))) - (setenv "PATH" path-from-shell) - (setq eshell-path-env path-from-shell) ; for eshell users - (setq exec-path (split-string path-from-shell path-separator)))) +(require 'org-tempo) - (when window-system (set-exec-path-from-shell-PATH)) +(setq org-src-preserve-indentation nil + org-edit-src-content-indentation 0) - (setenv "GOPATH" "/home/rmj/src/goproj/") +(use-package org-indent-mode + :config + (org-indent-mode t) + :hook org-mode) - (add-to-list 'exec-path "/home/rmj/src/goproj/bin/") - (add-hook 'before-save-hook 'gofmt-before-save) +(use-package org-bullets + :ensure t) - (use-package go-mode - :ensure t - :init - (defun my-go-mode-hook () - ; Call Gofmt before saving - (add-hook 'before-save-hook 'gofmt-before-save) - ; Godef jump key binding - (local-set-key (kbd "M-.") 'godef-jump) - (local-set-key (kbd "M-*") 'pop-tag-mark) +(use-package wc-mode + :ensure t) - (add-to-list 'company-backends 'company-go) - ; Customize compile command to run go build - (if (not (string-match "go" compile-command)) - (set (make-local-variable 'compile-command) - "go build -v && go test -v && go vet"))) +(setq org-src-tab-acts-natively t) +(add-hook 'org-mode-hook 'display-line-numbers-mode) +(add-hook 'org-mode-hook 'visual-line-mode) +(add-hook 'org-mode-hook 'wc-mode) - (add-hook 'go-mode-hook 'my-go-mode-hook)) -#+END_SRC -** rust +#+End_src +* IDE +** all programming languages +*** todos #+BEGIN_SRC emacs-lisp - (use-package cargo - :config - (cargo-minor-mode t) - - :hook - (rust-mode)) - - (use-package racer - :ensure t - :init - - (setq racer-cmd "~/.cargo/bin/racer") - (setq racer-rust-src-path "/home/rmj/src/rust/src/") - :config - (progn - (racer-mode t) - (eldoc-mode t) - (company-mode t) - (flycheck-rust-setup) - (define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common) - (setq company-tooltip-align-annotations t) - (local-set-key (kbd "C-c <tab>") #'rust-format-buffer)) - - :hook - (rust-mode)) - +(use-package fic-mode + :ensure t + :config + (fic-mode t) + :hook prog-mode) #+END_SRC -** HTML/CSS/JS +*** flycheck +#+begin_src emacs-lisp +(use-package flycheck + :ensure t + :hook prog-mode) +#+end_src +*** company +#+begin_src emacs-lisp +(use-package company + :ensure t + :bind (:map company-active-map + ("C-n" . company-select-next) + ("C-p" . company-select-previous)) + :config + (company-mode t) + (setq company-idle-delay 0.3) + :hook prog-mode) +#+end_src +** magit +#+begin_src emacs-lisp +(use-package magit + :ensure t) +#+end_src +** Misc #+BEGIN_SRC emacs-lisp - - (use-package web-mode - :ensure t - :init - (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) - (setq web-mode-ac-sources-alist - '(("css" . (ac-source-css-property)) - ("html" . (ac-source-words-in-buffer ac-source-abbrev)))) - (setq web-mode-enable-auto-quoting t)) - - (use-package emmet-mode - :ensure t - - :config - (add-hook 'emmet-mode-hook (lambda () (setq emmet-indentation 4))) ;; indent 4 spaces. - (setq emmet-self-closing-tag-style "/") ;; default "/" - (setq emmet-move-cursor-between-quotes t) ;; default nil - - :hook (sgml-mode css-mode html-mode web-mode)) - +(use-package emojify + :ensure t + :init (global-emojify-mode)) #+END_SRC -** Python +** html #+BEGIN_SRC emacs-lisp - - (use-package elpy - :ensure t - :init - (defun my-init-elpy () - "Init elpy." - (elpy-enable) - (add-to-list 'company-backends 'elpy-company-backend) - - (when (require 'flycheck nil t) - (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) - (add-hook 'elpy-mode-hook 'flycheck-mode)) - - (flymake-mode nil) - (eldoc-mode nil)) - - (add-hook 'python-mode-hook 'my-init-elpy)) - - +(use-package web-mode + :ensure t + :config + (add-to-list 'auto-mode-alist '("\\.api\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("/some/react/path/.*\\.js[x]?\\'" . web-mode)) + + (setq web-mode-content-types-alist + '(("json" . "/some/path/.*\\.api\\'") + ("xml" . "/other/path/.*\\.api\\'") + ("jsx" . "/some/react/path/.*\\.js[x]?\\'"))) + (setq web-mode-markup-indent-offset 4) + (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.css\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) + (define-key web-mode-map (kbd "C-n") 'web-mode-tag-match) + (setq web-mode-enable-current-column-highlight t) + (setq web-mode-enable-current-element-highlight t) + (setq web-mode-enable-auto-closing t)) +#+END_SRC +*** Emmet +#+BEGIN_SRC emacs-lisp + +(use-package emmet-mode + :ensure t + :config + (define-key web-mode-map (kbd "C-j") 'emmet-expand-line) + (emmet-mode) + ; (emmet-preview-mode) + :hook web-mode) #+END_SRC * Text-editor ** spellcheck #+BEGIN_SRC emacs-lisp - (setq ispell-program-name (executable-find "hunspell")) - (setq ispell-local-dictionary "en_US") - (setq ispell-local-dictionary-alist - '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil nil nil utf-8))) +(setq ispell-program-name (executable-find "hunspell")) +(setq ispell-local-dictionary "en_US") +(setq ispell-local-dictionary-alist + '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil nil nil utf-8))) @@ -593,222 +319,340 @@ ** sudo edit #+BEGIN_SRC emacs-lisp - (defun er-sudo-edit (&optional arg) - "Edit currently visited file as root With a prefix ARG prompt for a file to visit. Will also prompt for a file to visit if current buffer is not visiting a file." - (interactive "P") - (if (or arg (not buffer-file-name)) - (find-file (concat "/sudo:root@localhost:" - (ido-read-file-name "Find file(as root): "))) - (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) +(defun er-sudo-edit (&optional arg) + "Edit currently visited file as root With a prefix ARG prompt for a file to visit. Will also prompt for a file to visit if current buffer is not visiting a file." + (interactive "P") + (if (or arg (not buffer-file-name)) + (find-file (concat "/sudo:root@localhost:" + (ido-read-file-name "Find file(as root): "))) + (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) #+END_SRC ** misc #+BEGIN_SRC emacs-lisp -(use-package csgo-conf-mode -:ensure t) - - ;; tell emacs not to use the clipboard - ;(setq x-select-enable-clipboard nil) - - (global-set-key (kbd "s-i") 'ido-switch-buffer) - -#+END_SRC -** latex -#+BEGIN_SRC emacs-lisp - - (setq auto-revert-interval 0.5) - - (use-package company-auctex - :ensure t - :init - (company-auctex-init) - - (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer) - - (setq auctex-latexmk-inherit-TeX-PDF-mode t)) - (use-package auctex-latexmk - :ensure t - :init - (auctex-latexmk-setup) - - (add-hook 'latex-mode #'flyspell-mode)) - -#+END_SRC -** highlighting -#+BEGIN_SRC emacs-lisp - ;; rainbow delimeters - - (use-package rainbow-mode - :ensure t - :config (rainbow-mode t) - - - :hook (web-mode c-mode c++-mode js2-mode)) +;; tell emacs not to use the clipboard + ;(setq x-select-enable-clipboard nil) +(global-set-key (kbd "s-i") 'ido-switch-buffer) #+END_SRC * emacs-os -** rss -#+BEGIN_SRC emacs-lisp - -(use-package elfeed-org - :ensure t - :init - (global-set-key (kbd "s-x w") 'elfeed) - (elfeed-org) - (setq rmh-elfeed-org-files (list "/home/rmj/.emacs.d/elfeed.org"))) - - - (require 'color) - - (defface comic-tag - '((t :foreground "#AE6486")) - "Marks comic tags") - - - (use-package elfeed - :ensure t - :init - (setq elfeed-db-directory (expand-file-name "~/.elrss")) - (define-key elfeed-search-mode-map (kbd "u") '(lambda () - (interactive) - (message "Updating elfeed database.") - (elfeed-update))) - - (setq-default elfeed-search-filter "@6-months-ago +unread -reddit") - - ;; from https://github.com/skeeto/elfeed/issues/190#issuecomment-384346895 - (setq elfeed-show-mode-hook - (lambda () - (set-face-attribute 'variable-pitch (selected-frame) :font (font-spec :family "Ubuntu" :size 12)) - (setq fill-column 120) - (setq elfeed-show-entry-switch #'my-show-elfeed))) - - (defun my-show-elfeed (buffer) - (with-current-buffer buffer - (setq buffer-read-only nil) - (goto-char (point-min)) - (re-search-forward "\n\n") - (fill-individual-paragraphs (point) (point-max)) - (setq buffer-read-only t)) - (switch-to-buffer buffer))) - - - - (defface podcast-tag - '((t :foreground "#6699CC")) - "Marks podcast tags") - - (push '(comic comic-tag) - elfeed-search-face-alist) - - (push '(podcast podcast-tag) - elfeed-search-face-alist) - - - - ;; from https://github.com/ravarspath/emacs-conf/blob/master/lisp/ravar-custom.el - (setq ravar/elfeed-podcast-dir "/home/rmj/Music/podcast") - - (defun ravar/elfeed-play-enclosure-mpd () - "Downloads the item in the enclosure and starts in playing in mpd using mpc" - (interactive) - (let* ((entry elfeed-show-entry) - (enclosure-index (elfeed--get-enclosure-num - "Enclosure to save" entry)) - (url-enclosure (car (elt (elfeed-entry-enclosures entry) - (- enclosure-index 1)))) - (fname - (funcall elfeed-show-enclosure-filename-function - entry url-enclosure))) - (start-process-shell-command - "play enclosure" nil - (format "cd %s; wget %s;mpc update; mpc search filename %s | mpc insert; - mpc next; mpc play " - ravar/elfeed-podcast-dir url-enclosure fname)))) - - (define-key elfeed-show-mode-map (kbd "o") 'ravar/elfeed-play-enclosure-mpd) - +** email +#+BEGIN_SRC emacs-lisp +(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/") +(require 'mu4e) + +(require 'mu4e-alert) +;; Choose the style you prefer for desktop notifications +;; If you are on Linux you can use +;; 1. notifications - Emacs lisp implementation of the Desktop Notifications API +;; 2. libnotify - Notifications using the `notify-send' program, requires `notify-send' to be in PATH +;; +;; On Mac OSX you can set style to +;; 1. notifier - Notifications using the `terminal-notifier' program, requires `terminal-notifier' to be in PATH +;; 1. growl - Notifications using the `growl' program, requires `growlnotify' to be in PATH +(mu4e-alert-set-default-style 'libnotify) +(add-hook 'after-init-hook #'mu4e-alert-enable-notifications) + +(add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display) ; show unread email count on mode line +(mu4e-alert-enable-notifications) + +;; Asynchronously update all emails in Maildir +(require 'mu4e-maildirs-extension) +(mu4e-maildirs-extension) + +;; allows you to see an overview of your maildir +(require 'mu4e-overview) + +(setq mu4e-maildir (expand-file-name "~/Maildir")) + + ; get mail +(setq + mu4e-get-mail-command "mbsync -a" + ;; mu4e-html2text-command "w3m -T text/html" ;;using the default mu4e-shr2text + mu4e-view-prefer-html t + mu4e-update-interval nil + mu4e-headers-auto-update t + mu4e-compose-signature-auto-include nil + mu4e-compose-format-flowed t) + +;; to view selected message in the browser, no signin, just html mail +(add-to-list 'mu4e-view-actions + '("ViewInBrowser" . mu4e-action-view-in-browser) t) + +;; enable inline images +(setq mu4e-view-show-images t) +;; use imagemagick, if available +(when (fboundp 'imagemagick-register-types) + (imagemagick-register-types)) + +;; every new email composition gets its own frame! +(setq mu4e-compose-in-new-frame t) + +;; don't save message to Sent Messages, IMAP takes care of this +(setq mu4e-sent-messages-behavior (lambda() + (if (string= (message-sendmail-envelope-from) "ryan@ryanmj.xyz") + 'sent 'delete))) + + +(add-hook 'mu4e-view-mode-hook #'visual-line-mode) + +;; (defun my-render-html-message () +;; (let ((dom (libxml-parse-html-region (point-min) (point-max)))) +;; (erase-buffer) +;; (shr-insert-document dom) +;; (goto-char (point-min)))) + +;; (setq mu4e-html2text-command 'my-render-html-message) + + +;; <tab> to navigate to links, <RET> to open them in browser +(add-hook 'mu4e-view-mode-hook + (lambda() + ;; try to emulate some of the eww key-bindings + (local-set-key (kbd "<RET>") 'mu4e~view-browse-url-from-binding) + (local-set-key (kbd "<tab>") 'shr-next-link) + (local-set-key (kbd "<backtab>") 'shr-previous-link))) + +;; from https://www.reddit.com/r/emacs/comments/bfsck6/mu4e_for_dummies/elgoumx +(add-hook 'mu4e-headers-mode-hook + (defun my/mu4e-change-headers () + (interactive) + (setq mu4e-headers-fields + `((:human-date . 25) ;; alternatively, use :date + (:flags . 6) + (:from . 22) + (:thread-subject . ,(- (window-body-width) 70)) ;; alternatively, use :subject + (:size . 7))))) + +;; if you use date instead of human-date in the above, use this setting +;; give me ISO(ish) format date-time stamps in the header list + ;(setq mu4e-headers-date-format "%Y-%m-%d %H:%M") + +;; spell check +(add-hook 'mu4e-compose-mode-hook + (defun my-do-compose-stuff () + "My settings for message composition." + (visual-line-mode) + ;(org-mu4e-compose-org-mode) + (use-hard-newlines -1) + (flyspell-mode))) + +;;rename files when moving +;;NEEDED FOR MBSYNC +(setq mu4e-change-filenames-when-moving t) + +;;set up queue for offline email +;;use mu mkdir ~/Maildir/acc/queue to set up first + +;;from the info manual +(setq mu4e-attachment-dir "~/Downloads") + +(setq message-kill-buffer-on-exit t) +(setq mu4e-compose-dont-reply-to-self t) + +(require 'org-mu4e) + +;; convert org mode to HTML automatically +(setq org-mu4e-convert-to-html t) + +(setq mu4e-org-contacts-file (expand-file-name "~/.emacs.d/contacts.org")) +(add-to-list 'mu4e-headers-actions + '("org-contact-add" . mu4e-action-add-org-contact) t) +(add-to-list 'mu4e-view-actions + '("org-contact-add" . mu4e-action-add-org-contact) t) + +;;from vxlabs config +;; show full addresses in view message (instead of just names) +;; toggle per name with M-RET +(setq mu4e-view-show-addresses 't) + +;; don't ask when quitting +(setq mu4e-confirm-quit nil) + + +(require 'feedmail) + +;; mu4e-context +(setq mu4e-context-policy 'pick-first) +(setq mu4e-compose-context-policy 'always-ask) +(setq mu4e-contexts + (list + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Old Gmail ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (make-mu4e-context + :name "old-gmail" ;;for pwishie-gmail + :enter-func (lambda () (mu4e-message "Entering context old-gmail")) + :leave-func (lambda () (mu4e-message "Leaving context old-gmail")) + :match-func (lambda (msg) + (when msg + (mu4e-message-contact-field-matches + msg '(:from :to :cc :bcc) "pwishie@gmail.com"))) + :vars '((user-mail-address . "pwishie@gmail.com") + (user-full-name . "Ryan Jeffrey") + (mu4e-sent-folder . "/pwishie-gmail/[pwishie].Sent Mail") + (mu4e-drafts-folder . "/pwishie-gmail/[pwishie].drafts") + (mu4e-trash-folder . "/pwishie-gmail/[pwishie].Bin") + (mu4e-compose-signature . (concat "Formal Signature\n" "Emacs 25, org-mode 9, mu4e 1.0\n")) + (mu4e-compose-format-flowed . t) + (smtpmail-queue-dir . "~/Maildir/pwishie-gmail/queue/cur") + + (setq message-sendmail-envelope-from 'header) + (mu4e-maildir-shortcuts . ( ("/pwishie-gmail/INBOX" . ?i) + ("/pwishie-gmail/[pwishie].Sent Mail" . ?s) + ("/pwishie-gmail/[pwishie].Bin" . ?t) + ("/pwishie-gmail/[pwishie].All Mail" . ?a) + ("/pwishie-gmail/[pwishie].Starred" . ?r) + ("/pwishie-gmail/[pwishie].drafts" . ?d) + )))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Private Mail ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (make-mu4e-context + :name "personal" ;;for ryanmjxyz + :enter-func (lambda () (mu4e-message "Entering context personal")) + :leave-func (lambda () (mu4e-message "Leaving context personal")) + :match-func (lambda (msg) + (when msg + (mu4e-message-contact-field-matches + msg '(:from :to :cc :bcc) "ryan@ryanmj.xyz"))) + :vars '((user-mail-address . "ryan@ryanmj.xyz") + (user-full-name . "Ryan Jeffrey") (mu4e-sent-folder . "/ryanmjxyz/[ryanmj].Sent Mail") + (mu4e-drafts-folder . "/ryanmjxyz/[ryanmj].Drafts") + (mu4e-trash-folder . "/ryanmjxyz/[ryanmj].Trash") + (mu4e-compose-format-flowed . t) + (smtpmail-queue-dir . "~/Maildir/ryanmjxyz/queue/cur") + (mu4e-maildir-shortcuts . ( ("/ryanmjxyz/INBOX" . ?i) + ("/ryanmjxyz/[ryanmj].Sent Mail" . ?s) + ("/ryanmjxyz/[ryanmj].Trash" . ?t) + ("/ryanmjxyz/[ryanmj].Junk" . ?j) + ("/ryanmjxyz/[ryanmj].Drafts" . ?d) + )))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; New Gmail ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (make-mu4e-context + :name "gmail" ;;for rmjxyz-gmail + :enter-func (lambda () (mu4e-message "Entering context gmail")) + :leave-func (lambda () (mu4e-message "Leaving context gmail")) + :match-func (lambda (msg) + (when msg + (mu4e-message-contact-field-matches + msg '(:from :to :cc :bcc) "rmjxyz@gmail.com"))) + :vars '((user-mail-address . "rmjxyz@gmail.com") + (user-full-name . "Ryan Jeffrey") + (mu4e-sent-folder . "/rmjxyz-gmail/[rmjxyz].Sent Mail") + (mu4e-drafts-folder . "/rmjxyz-gmail/[rmjxyz].drafts") + (mu4e-trash-folder . "/rmjxyz-gmail/[rmjxyz].Bin") + (mu4e-compose-signature . (concat "Formal Signature\n" "Emacs 25, org-mode 9, mu4e 1.0\n")) + (mu4e-compose-format-flowed . t) + (smtpmail-queue-dir . "~/Maildir/rmjxyz-gmail/queue/cur") + (setq message-sendmail-envelope-from 'header) + (mu4e-maildir-shortcuts . ( ("/rmjxyz-gmail/INBOX" . ?i) + ("/rmjxyz-gmail/[rmjxyz].Sent Mail" . ?s) + ("/rmjxyz-gmail/[rmjxyz].Bin" . ?t) + ("/rmjxyz-gmail/[rmjxyz].All Mail" . ?a) + ("/rmjxyz-gmail/[rmjxyz].Starred" . ?r) + ("/rmjxyz-gmail/[rmjxyz].drafts" . ?d) + )))) + + )) + +;; Choose account label to feed msmtp -a option based on From header +;; in Message buffer; This function must be added to +;; message-send-mail-hook for on-the-fly change of From address before +;; sending message since message-send-mail-hook is processed right +;; before sending message. +(defun choose-msmtp-account () + (if (message-mail-p) + (save-excursion + (let* + ((from (save-restriction + (message-narrow-to-headers) + (message-fetch-field "from"))) + (account + (cond + ((string-match "pwishie@gmail.com" from) "pwishie") + ((string-match "ryan@ryanmj.xyz" from) "ryanxyz") + ((string-match "rmjxyz@gmail.com" from) "rmjxyz")))) + (setq message-sendmail-extra-arguments (list '"-a" account)))))) + + +(setq message-sendmail-envelope-from 'header) +(setq message-send-mail-function 'message-send-mail-with-sendmail + sendmail-program "/usr/bin/msmtp" + user-full-name "Ryan Jeffrey") + +(setq message-sendmail-envelope-from 'header) +(add-hook 'message-send-mail-hook 'choose-msmtp-account) + +(setq mu4e-html2text-command 'mu4e-shr2text) #+END_SRC - -#+RESULTS: -: ravar/elfeed-play-enclosure-mpd - -** pdf +** rss #+BEGIN_SRC emacs-lisp - (use-package pdf-tools - :ensure t - :init - (pdf-tools-install) - (add-hook 'pdf-view-hook #'auto-revert-mode)) +(defun elfeed-show-hide-images () + (interactive) + (let ((shr-inhibit-images t)) + (elfeed-show-refresh))) +(setq mm-inline-large-images 1) +(setq shr-max-image-proportion 0.7) -#+END_SRC -** filesystem -#+BEGIN_SRC emacs-lisp - ;; (add-to-list 'load-path "~/.emacs.d/lisp/") - ;; (require 'dired-details) - ;; (setq-default dired-details-hidden-string "[-]") - ;; (dired-details-install) +(use-package elfeed + :ensure t + :init + (setq elfeed-db-directory (expand-file-name "~/.config/.elrss")) + :config + (define-key elfeed-search-mode-map (kbd "u") '(lambda () + (interactive) + (message "Updating elfeed database.") + (elfeed-update))) + + (setq-default elfeed-search-filter "@6-months-ago +unread -reddit")) + + +;; from https://github.com/skeeto/elfeed/issues/190#issuecomment-384346895 +(defun my-show-elfeed (buffer) + (with-current-buffer buffer + (setq buffer-read-only nil) + (goto-char (point-min)) + (re-search-forward "\n\n") + (fill-individual-paragraphs (point) (point-max)) + (setq buffer-read-only t)) + (switch-to-buffer buffer)) + +(setq elfeed-show-mode-hook + '(lambda () + (set-face-attribute 'variable-pitch (selected-frame) :font (font-spec :family "Ubuntu" :size 12)) + (setq fill-column 120) + (setq elfeed-show-entry-switch #'my-show-elfeed))) -#+END_SRC -* Misc -** Terminal stuff -#+BEGIN_SRC emacs-lisp - (add-hook 'term-mode-hook - (defun my-term-mode-hook () - (setq bidi-paragraph-direction 'left-to-right))) - (setq-default term-suppress-hard-newline t) +(use-package elfeed-org + :ensure t + :init + (elfeed-org) + (setq rmh-elfeed-org-files (list "/home/ryan/.emacs.d/elfeed.org"))) -#+END_SRC -*** vterm -#+BEGIN_SRC emacs-lisp - (use-package vterm - :ensure t - :init - (custom-set-faces +(require 'color) - '(vterm-color-black ((t (:foreground "#3F3F3F" :background "#2B2B2B")))) - '(vterm-color-red ((t (:foreground "#AC7373" :background "#8C5353")))) - '(vterm-color-green ((t (:foreground "#7F9F7F" :background "#9FC59F")))) - '(vterm-color-yellow ((t (:foreground "#DFAF8F" :background "#9FC59F")))) - '(vterm-color-blue ((t (:foreground "#7CB8BB" :background "#4C7073")))) - '(vterm-color-magenta ((t (:foreground "#DC8CC3" :background "#CC9393")))) - '(vterm-color-cyan ((t (:foreground "#93E0E3" :background "#8CD0D3")))) - '(vterm-color-white ((t (:foreground "#DCDCCC" :background "#656555")))) +(defface comic-tag + '((t :foreground "#AE6486")) + "Marks comic tags") - '(vterm-default-fg-color ((t (:inherit vterm-color-white)))) - '(vterm-default-bg-color ((t (:inherit vterm-color-black)))))) -#+END_SRC -** ssh -#+BEGIN_SRC emacs-lisp - (use-package ssh - :ensure t - :init - (add-hook 'ssh-mode-hook - (lambda () - (setq ssh-directory-tracking-mode t) - (shell-dirtrack-mode t) - (setq dirtrackp nil)))) +(defface podcast-tag + '((t :foreground "#6699CC")) + "Marks podcast tags") -#+END_SRC -** misc -#+BEGIN_SRC emacs-lisp +(push '(comic comic-tag) + elfeed-search-face-alist) - (use-package highlight-indentation - :ensure t) +(push '(podcast podcast-tag) + elfeed-search-face-alist) #+END_SRC -** scripts -#+BEGIN_SRC emacs-lisp - (defun insert-current-date () (interactive) - (insert (shell-command-to-string "echo -n $(date +\"%d %b %Y %X\")"))) -#+END_SRC