First step towards literate org mode
This commit is contained in:
@ -1,7 +0,0 @@
|
|||||||
;;; Elfeed
|
|
||||||
(run-with-timer 0 (* 30 60) 'elfeed-update)
|
|
||||||
|
|
||||||
(setq httpd-host "0.0.0.0")
|
|
||||||
(setq httpd-port 10000)
|
|
||||||
|
|
||||||
;(elfeed-web-start)
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
;;; ~/.dotfiles/emacs/.config/doom/+eshell.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(after! eshell
|
|
||||||
(set-eshell-alias!
|
|
||||||
"f" "(other-window 1) && find-file $1"
|
|
||||||
"l" "ls -lh"
|
|
||||||
"d" "dired $1"
|
|
||||||
"dc" "docker-compose $*"
|
|
||||||
"fftest" "cd ~/src/ff/fifteen5 && docker-compose exec app django-admin test -k $*"
|
|
||||||
"ffsh" "cd ~/src/ff/fifteen5/ && docker-compose exec app django-admin shell_plus"
|
|
||||||
"ffdj" "cd ~/src/ff/fifteen5/ && docker-compose exec app django-admin $*"
|
|
||||||
"gl" "(call-interactively 'magit-log-current)"
|
|
||||||
"gs" "magit-status"
|
|
||||||
"gc" "magit-commit"))
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
;;; ~/.dotfiles/emacs/.config/doom/+mastodon.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(setq mastodon-instance-url "https://mastodon.technology")
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
(:prefix "="
|
|
||||||
:desc "Open mastodon" "=" #'mastodon
|
|
||||||
:desc "Update Mastodon timeline" "u" #'mastodon-tl--update
|
|
||||||
:desc "Toot to Mastodon" "t" #'mastodon-toot))
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
;;; ~/.dotfiles/emacs/.config/doom/+mpd.el -*- lexical-binding: t; -*-
|
|
||||||
(defun mpdel-playlist-play ()
|
|
||||||
"Start playing the song at point."
|
|
||||||
(interactive)
|
|
||||||
(if (derived-mode-p 'mpdel-playlist-current-playlist-mode)
|
|
||||||
(libmpdel-play-song (navigel-entity-at-point))
|
|
||||||
(mpdel-core-insert-current-playlist)))
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
(:prefix "-"
|
|
||||||
:desc "MPD Open playlist" "-" #'mpdel-playlist-open
|
|
||||||
:desc "MPD Remove at point" "d" #'mpdel-playlist-delete
|
|
||||||
:desc "MPD Start at point" "s" #'mpdel-playlist-play
|
|
||||||
:desc "MPD Next track" "n" #'libmpdel-playback-next
|
|
||||||
:desc "MPD Previous track" "p" #'libmpdel-playback-previous))
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
;;; -*- lexical-binding: t; -*-
|
|
||||||
;;;
|
|
||||||
|
|
||||||
(defvar counsel-spotify-client-id "515f0ff545a349bcadf98efab945972f")
|
|
||||||
(defvar counsel-spotify-client-secret "7618bf445df14b568782b13e37cf63e6")
|
|
||||||
|
|
||||||
(map!
|
|
||||||
(:leader
|
|
||||||
(:desc "applications" :prefix "a"
|
|
||||||
(:desc "music" :prefix "m"
|
|
||||||
:desc "Play/Pause Music" "m" #'counsel-spotify-toggle-play-pause
|
|
||||||
:desc "Next song" "n" #'counsel-spotify-plus-next
|
|
||||||
:desc "Search songs" "s" #'counsel-spotify-search-track
|
|
||||||
:desc "Search albums" "a" #'counsel-spotify-search-album))))
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
;;; ~/.dotfiles/emacs/.config/doom/+nov.el -*- lexical-binding: t; -*-
|
|
||||||
(require 'justify-kp)
|
|
||||||
;(setq nov-text-width t)
|
|
||||||
(setq nov-text-width 80)
|
|
||||||
|
|
||||||
(defun my-nov-window-configuration-change-hook ()
|
|
||||||
(my-nov-post-html-render-hook)
|
|
||||||
(remove-hook 'window-configuration-change-hook
|
|
||||||
'my-nov-window-configuration-change-hook
|
|
||||||
t))
|
|
||||||
|
|
||||||
(defun my-nov-post-html-render-hook ()
|
|
||||||
(if (get-buffer-window)
|
|
||||||
(let ((max-width (pj-line-width))
|
|
||||||
buffer-read-only)
|
|
||||||
(save-excursion
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (not (eobp))
|
|
||||||
(when (not (looking-at "^[[:space:]]*$"))
|
|
||||||
(goto-char (line-end-position))
|
|
||||||
(when (> (shr-pixel-column) max-width)
|
|
||||||
(goto-char (line-beginning-position))
|
|
||||||
(pj-justify)))
|
|
||||||
(forward-line 1))))
|
|
||||||
(add-hook 'window-configuration-change-hook
|
|
||||||
'my-nov-window-configuration-change-hook
|
|
||||||
nil t)))
|
|
||||||
|
|
||||||
(add-hook 'nov-post-html-render-hook 'my-nov-post-html-render-hook)
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
|
||||||
|
|
||||||
(defun my-nov-font-setup ()
|
|
||||||
(face-remap-add-relative 'variable-pitch :family "Liberation Serif"
|
|
||||||
:size 20
|
|
||||||
:height 1.0))
|
|
||||||
(add-hook 'nov-mode-hook 'my-nov-font-setup)
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
;;; ~/.dotfiles/emacs/.config/doom/org-caldav.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; org-caldav
|
|
||||||
(setq org-caldav-url "https://box.onec.me/cloud/remote.php/dav/calendars/colin@onec.me"
|
|
||||||
org-caldav-calendar-id "personal"
|
|
||||||
org-icalendar-timezone "America/New_York"
|
|
||||||
org-caldav-debug-level 2
|
|
||||||
org-caldav-inbox "~/org/cal.org")
|
|
||||||
@ -1,156 +0,0 @@
|
|||||||
;;; org-daypage.el --- Org-Mode Day Page.
|
|
||||||
;;
|
|
||||||
;; Copyright (C) 2010-2011 Thomas Parslow
|
|
||||||
;;
|
|
||||||
;; Author: Thomas Parslow <tom@almostobsolete.net>
|
|
||||||
;; Created: June, 2010
|
|
||||||
;; Version: 1
|
|
||||||
;; Keywords: orgmode, daypage
|
|
||||||
|
|
||||||
;;; License
|
|
||||||
;;
|
|
||||||
;; This program is free software: you can redistribute it and/or modify
|
|
||||||
;; it under the terms of the GNU General Public License as published by
|
|
||||||
;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;; (at your option) any later version.
|
|
||||||
;;
|
|
||||||
;; This program is distributed in he hope that it will be useful,
|
|
||||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;; GNU General Public License for more details.
|
|
||||||
;;
|
|
||||||
;; You should have received a copy of the GNU General Public License
|
|
||||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
;;
|
|
||||||
|
|
||||||
;;; Installation
|
|
||||||
;;
|
|
||||||
;; Add org-daypage.el to your load path and add (require 'org-daypage)
|
|
||||||
;; to your .emacs.
|
|
||||||
|
|
||||||
;;; Configuration:
|
|
||||||
;;
|
|
||||||
;; No keys are defined by default. So you may wish to add something
|
|
||||||
;; like the following to your .emacs as well:
|
|
||||||
;;
|
|
||||||
;; (define-key daypage-mode-map (kbd "<C-left>") 'daypage-prev)
|
|
||||||
;; (define-key daypage-mode-map (kbd "<C-right>") 'daypage-next)
|
|
||||||
;; (define-key daypage-mode-map (kbd "<C-up>") 'daypage-prev-week)
|
|
||||||
;; (define-key daypage-mode-map (kbd "<C-down>") 'daypage-next-week)
|
|
||||||
;; (define-key daypage-mode-map "\C-c." 'daypage-time-stamp)
|
|
||||||
;;
|
|
||||||
;; (global-set-key [f11] 'todays-daypage)
|
|
||||||
;; (global-set-key [f10] 'yesterdays-daypage)
|
|
||||||
;; (global-set-key "\C-con" 'todays-daypage)
|
|
||||||
;; (global-set-key "\C-coN" 'find-daypage)
|
|
||||||
|
|
||||||
(eval-when-compile (require 'cl))
|
|
||||||
|
|
||||||
(setq daypage-path "~/notes/days/")
|
|
||||||
|
|
||||||
(defvar daypage-mode-map
|
|
||||||
(let ((map (make-sparse-keymap)))
|
|
||||||
map)
|
|
||||||
"The key map for daypage buffers.")
|
|
||||||
|
|
||||||
(defun find-daypage (&optional date)
|
|
||||||
"Go to the day page for the specified date, or todays if none is specified."
|
|
||||||
(interactive (list
|
|
||||||
(org-read-date "" 'totime nil nil
|
|
||||||
(current-time) "")))
|
|
||||||
(setq date (or date (current-time)))
|
|
||||||
(find-file (expand-file-name (concat daypage-path (format-time-string "%Y-%m-%d" date) ".org"))))
|
|
||||||
|
|
||||||
(defun daypage-p ()
|
|
||||||
"Return true if the current buffer is visiting a daypage"
|
|
||||||
(if (daypage-date)
|
|
||||||
t
|
|
||||||
nil))
|
|
||||||
|
|
||||||
(defun daypage-date ()
|
|
||||||
"Return the date for the daypage visited by the current buffer
|
|
||||||
or nil if the current buffer isn't visiting a dayage"
|
|
||||||
(let ((file (buffer-file-name))
|
|
||||||
(root-path (expand-file-name daypage-path)))
|
|
||||||
(if (and file
|
|
||||||
(string= root-path (substring file 0 (length root-path)))
|
|
||||||
(string-match "\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\).org$" file))
|
|
||||||
(flet ((d (i) (string-to-number (match-string i file))))
|
|
||||||
(encode-time 0 0 0 (d 3) (d 2) (d 1)))
|
|
||||||
nil)))
|
|
||||||
|
|
||||||
|
|
||||||
(defun maybe-daypage ()
|
|
||||||
"Set up daypage stuff if the org file being visited is in the daypage folder"
|
|
||||||
(let ((date (daypage-date)))
|
|
||||||
(when date
|
|
||||||
; set up the daypage key map
|
|
||||||
(use-local-map daypage-mode-map)
|
|
||||||
(set-keymap-parent daypage-mode-map
|
|
||||||
org-mode-map)
|
|
||||||
(run-hooks 'daypage-hook))))
|
|
||||||
|
|
||||||
(add-hook 'org-mode-hook 'maybe-daypage)
|
|
||||||
|
|
||||||
(defun daypage-next ()
|
|
||||||
(interactive)
|
|
||||||
(find-daypage
|
|
||||||
(seconds-to-time (+ (time-to-seconds (daypage-date))
|
|
||||||
86400)))
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun daypage-prev ()
|
|
||||||
(interactive)
|
|
||||||
(find-daypage
|
|
||||||
(seconds-to-time (- (time-to-seconds (daypage-date))
|
|
||||||
86400)))
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun daypage-next-week ()
|
|
||||||
(interactive)
|
|
||||||
(find-daypage
|
|
||||||
(seconds-to-time (+ (time-to-seconds (daypage-date))
|
|
||||||
(* 86400 7))))
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun daypage-prev-week ()
|
|
||||||
(interactive)
|
|
||||||
(find-daypage
|
|
||||||
(seconds-to-time (- (time-to-seconds (daypage-date))
|
|
||||||
(* 86400 7))))
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun todays-daypage ()
|
|
||||||
"Go straight to todays day page without prompting for a date."
|
|
||||||
(interactive)
|
|
||||||
(find-daypage)
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun yesterdays-daypage ()
|
|
||||||
"Go straight to todays day page without prompting for a date."
|
|
||||||
(interactive)
|
|
||||||
(find-daypage
|
|
||||||
(seconds-to-time (- (time-to-seconds (current-time))
|
|
||||||
86400)))
|
|
||||||
(run-hooks 'daypage-movement-hook))
|
|
||||||
|
|
||||||
(defun daypage-time-stamp ()
|
|
||||||
"Works like (and is basically a thin wrapper round)
|
|
||||||
org-time-stamp except the default date will be the date of the daypage."
|
|
||||||
(interactive)
|
|
||||||
(unless (org-at-timestamp-p)
|
|
||||||
(insert "<" (format-time-string "%Y-%m-%d %a" (daypage-date)) ">")
|
|
||||||
(backward-char 1))
|
|
||||||
(org-time-stamp nil))
|
|
||||||
|
|
||||||
(defun daypage-new-item ()
|
|
||||||
"Switches to the current daypage and inserts a top level heading and a timestamp"
|
|
||||||
(interactive)
|
|
||||||
(todays-daypage)
|
|
||||||
(end-of-buffer)
|
|
||||||
(if (not (bolp))
|
|
||||||
(insert "\n"))
|
|
||||||
(insert "* <" (format-time-string "%Y-%m-%d %a" (daypage-date)) "> "))
|
|
||||||
|
|
||||||
|
|
||||||
(provide 'org-daypage)
|
|
||||||
@ -1,111 +0,0 @@
|
|||||||
;;; package --- summary +org.el
|
|
||||||
;;; lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;;; Commentary:
|
|
||||||
;;; Code:
|
|
||||||
|
|
||||||
(after! org
|
|
||||||
(setq org-directory (expand-file-name "~/org/")
|
|
||||||
org-journal-dir "~/org/journal/"
|
|
||||||
org-agenda-files (list org-directory)
|
|
||||||
org-agenda-window-setup 'only-window
|
|
||||||
org-pretty-entities t
|
|
||||||
org-log-done 'time
|
|
||||||
;org-contacts-files '("~/org/contacts.org")
|
|
||||||
; attempt to return todo function to spacemacs
|
|
||||||
;evil-org-key-theme '(textobjects navigation additional insert todo)
|
|
||||||
;; show actually italicized text instead of /italicized text/
|
|
||||||
;org-agenda-block-separator ""
|
|
||||||
org-fontify-whole-heading-line t
|
|
||||||
org-fontify-done-headline t
|
|
||||||
org-fontify-quote-and-verse-blocks t
|
|
||||||
org-ellipsis "…"
|
|
||||||
org-capture-templates
|
|
||||||
'(("i" "Send to inbox" entry (file+headline "~/org/inbox.org" "Inbox")
|
|
||||||
"* TODO %?\n")
|
|
||||||
("l" "Send to inbox with link" entry (file+headline "~/org/inbox.org" "Inbox")
|
|
||||||
"* TODO %?\n %i\n %a")
|
|
||||||
("w" "Work diary entry" entry (file "~/org/work_diary.org")
|
|
||||||
"* %u\n%?\n")
|
|
||||||
("u" "Add unblink entry" entry (file+headline "~/org/unblink.org" "Misc")
|
|
||||||
"* TITLE\n:PROPERTIES:\n:EXPORT_FILE_NAME: TITLE\n:EXPORT_DATE: %i\n:END:\n%?\n")
|
|
||||||
("n" "Add an idea" entry (file "~/org/ideas.org")
|
|
||||||
"* %?\nEntered on %U\n"))
|
|
||||||
org-todo-keywords
|
|
||||||
'((sequence "TODO(t)" "NEXT(n)" "MAYBE(m)" "|" "DONE(d)" "WONTDO(w)"))
|
|
||||||
|
|
||||||
org-todo-keyword-faces
|
|
||||||
'((("TODO" . (:foreground "red" :weight bold))
|
|
||||||
("NEXT" . (:foreground "blue"))
|
|
||||||
("MAYBE" . (:foreground "sea green"))
|
|
||||||
("WAITING" . (:foreground "forest green"))
|
|
||||||
("WONTDO" . (:foreground "forest green"))
|
|
||||||
("DONE" . (:foreground "light sea green"))))
|
|
||||||
org-agenda-span 5
|
|
||||||
org-agenda-start-day "1d"
|
|
||||||
;;org-use-tag-inheritance t; bug in variable below, just turn 'em off
|
|
||||||
org-tag-alist '(("@personal" . ?h)
|
|
||||||
("@farm" . ?f)
|
|
||||||
("@town" . ?s)
|
|
||||||
("@errand" . ?e)
|
|
||||||
("@15five" . ?w)
|
|
||||||
("@family" . ?m))
|
|
||||||
org-modules '(ol-eshell
|
|
||||||
ol-notmuch
|
|
||||||
ob-eval
|
|
||||||
ob-exp
|
|
||||||
ob-http
|
|
||||||
org-drill
|
|
||||||
org-id)))
|
|
||||||
|
|
||||||
;; Refiling
|
|
||||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
|
||||||
(org-agenda-files :maxlevel . 9)))
|
|
||||||
(setq org-outline-path-complete-in-steps nil) ; Refile in a single go
|
|
||||||
(setq org-refile-use-outline-path t) ; Show full paths for refiling
|
|
||||||
|
|
||||||
;; org-set-tags-command
|
|
||||||
(setq +inbox-file "~/org/inbox.org")
|
|
||||||
(defun +open-inbox-file ()
|
|
||||||
(interactive)
|
|
||||||
"Opens the inbox file"
|
|
||||||
(find-file +inbox-file))
|
|
||||||
|
|
||||||
(map!
|
|
||||||
:leader
|
|
||||||
:desc "Open inbox" "I" #'+open-inbox-file
|
|
||||||
:desc "Open today" "T" #'org-roam-today
|
|
||||||
:desc "Open tomorrow" "N" #'org-roam-tomorrow)
|
|
||||||
|
|
||||||
(defun +show-agenda ()
|
|
||||||
(interactive)
|
|
||||||
(delete-other-windows)
|
|
||||||
(with-popup-rules! nil
|
|
||||||
(org-agenda-list)
|
|
||||||
(calendar))
|
|
||||||
(other-window 1)
|
|
||||||
(split-window-vertically)
|
|
||||||
(other-window 1)
|
|
||||||
(find-file +todo-file))
|
|
||||||
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
(:prefix "f" :desc "Save all org buffers" "a" #'org-save-all-org-buffers))
|
|
||||||
|
|
||||||
(use-package! org-roam
|
|
||||||
:commands (org-roam-insert org-roam-find-file org-roam)
|
|
||||||
:init
|
|
||||||
(setq org-roam-directory "~/org/")
|
|
||||||
(map! :leader
|
|
||||||
:prefix "n"
|
|
||||||
:desc "Org-Roam-Insert" "i" #'org-roam-insert
|
|
||||||
:desc "Org-Roam-Find" "/" #'org-roam-find-file
|
|
||||||
:desc "Org-Roam-Buffer" "r" #'org-roam)
|
|
||||||
:config
|
|
||||||
(org-roam-mode +1))
|
|
||||||
|
|
||||||
(with-eval-after-load 'org-roam
|
|
||||||
(with-eval-after-load 'company
|
|
||||||
(with-eval-after-load 'org
|
|
||||||
(require 'company-org-roam)
|
|
||||||
(company-org-roam-init))))
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
;;; -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(def-package! ranger
|
|
||||||
:commands (ranger deer ranger-override-dired-fn)
|
|
||||||
:config
|
|
||||||
(set-popup-rule! "^\\*ranger" :ignore t))
|
|
||||||
|
|
||||||
(map!
|
|
||||||
(:leader
|
|
||||||
(:prefix "a"
|
|
||||||
:desc "Ranger" "r" #'ranger
|
|
||||||
:desc "Deer" "d" #'deer)))
|
|
||||||
|
|
||||||
(add-hook! dired-mode #'ranger-override-dired-fn) ;; Override dired-mode so it uses deer
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
;;; -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(setq doom-theme 'kaolin-valley-dark)
|
|
||||||
|
|
||||||
;; Fonts
|
|
||||||
(setq doom-font (font-spec :family "Go Mono" :size 12))
|
|
||||||
(setq doom-big-font (font-spec :family "Go Mono" :size 18))
|
|
||||||
|
|
||||||
(set-frame-parameter nil 'internal-border-width 20) ; applies to the current frame
|
|
||||||
;; or
|
|
||||||
(add-to-list 'default-frame-alist '(internal-border-width . 20)) ; applies to all future frames
|
|
||||||
|
|
||||||
;; setup transparency ... this might get annoying
|
|
||||||
(set-frame-parameter (selected-frame) 'alpha '(100 . 100))
|
|
||||||
(add-to-list 'default-frame-alist '(alpha . (100 . 100)))
|
|
||||||
|
|
||||||
;; Dash highlighting
|
|
||||||
(after! dash (dash-enable-font-lock))
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
;;; ~/.config/doom/+wttrin.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(setq wttrin-default-cities '("Castine, ME" "San Francisco" "Thessaloniki"))
|
|
||||||
(setq wttrin-default-accept-language '("Accept-Language" . "en-US"))
|
|
||||||
|
|
||||||
(map!
|
|
||||||
(:leader
|
|
||||||
(:prefix "o"
|
|
||||||
:desc "Weather" "w" #'wttrin)))
|
|
||||||
@ -1,179 +0,0 @@
|
|||||||
;;; ~/.config/doom/config.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; (defvar xdg-data (getenv "XDG_DATA_HOME"))
|
|
||||||
;; (defvar xdg-bin (getenv "XDG_BIN_HOME"))
|
|
||||||
;; (defvar xdg-cache (getenv "XDG_CACHE_HOME"))
|
|
||||||
;; (defvar xdg-config (getenv "XDG_CONFIG_HOME"))
|
|
||||||
|
|
||||||
(add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
|
|
||||||
|
|
||||||
(setq user-full-name "Colin Powell"
|
|
||||||
user-mail-address "colin@unbl.ink")
|
|
||||||
|
|
||||||
;;
|
|
||||||
;; Keybinds
|
|
||||||
|
|
||||||
;;:m "M-j" '+hlissner:multi-next-line
|
|
||||||
;;:m "M-k" '+hlissner:multi-previous-line
|
|
||||||
(map! ;; Easier window movement
|
|
||||||
:n "C-h" 'evil-window-left
|
|
||||||
:n "C-j" 'evil-window-down
|
|
||||||
:n "C-k" 'evil-window-up
|
|
||||||
:n "C-l" 'evil-window-right
|
|
||||||
|
|
||||||
(:map evil-treemacs-state-map
|
|
||||||
"C-h" 'evil-window-left
|
|
||||||
"C-l" 'evil-window-right)
|
|
||||||
|
|
||||||
(:when IS-LINUX
|
|
||||||
"s-x" #'execute-extended-command
|
|
||||||
"s-;" #'eval-expression
|
|
||||||
;; use super for window/frame navigation/manipulation
|
|
||||||
"s-w" #'delete-window
|
|
||||||
"s-W" #'delete-frame
|
|
||||||
"s-n" #'+default/new-buffer
|
|
||||||
"s-j" #'org-move-subtree-down
|
|
||||||
"s-k" #'org-move-subtree-up
|
|
||||||
"s-N" #'make-frame
|
|
||||||
"s-q" (if (daemonp) #'delete-frame #'evil-quit-all)
|
|
||||||
;; Restore OS undo, save, copy, & paste keys (without cua-mode, because
|
|
||||||
;; it imposes some other functionality and overhead we don't need)
|
|
||||||
"s-z" #'undo
|
|
||||||
"s-c" (if (featurep 'evil) #'evil-yank #'copy-region-as-kill)
|
|
||||||
"s-v" #'yank
|
|
||||||
"s-s" #'save-buffer
|
|
||||||
;; Buffer-local font scaling
|
|
||||||
"s-+" (λ! (text-scale-set 0))
|
|
||||||
"s-=" #'text-scale-increase
|
|
||||||
"s--" #'text-scale-decrease
|
|
||||||
;; Conventional text-editing keys
|
|
||||||
"s-a" #'mark-whole-buffer
|
|
||||||
:gi [s-return] #'+default/newline-below
|
|
||||||
:gi [s-S-return] #'+default/newline-above
|
|
||||||
:gi [s-backspace] #'doom/backward-kill-to-bol-and-indent)
|
|
||||||
|
|
||||||
:leader
|
|
||||||
(:prefix "f"
|
|
||||||
:desc "Find file in dotfiles" "t" #'+hlissner/find-in-dotfiles
|
|
||||||
:desc "Browse dotfiles" "T" #'+hlissner/browse-dotfiles)
|
|
||||||
(:prefix "t"
|
|
||||||
:desc "Switch themes" "t" #'load-theme)
|
|
||||||
(:prefix "o"
|
|
||||||
:desc "Elfeed feed reader" "f" #'elfeed
|
|
||||||
:desc "Hckrnews" "h" #'hackernews
|
|
||||||
:desc "Lobste.rs" "l" #'ivy-lobsters)
|
|
||||||
(:prefix "b"
|
|
||||||
:desc "Black format buffer" "f" #'blacken-buffer
|
|
||||||
:desc "isort buffer" "I" #'py-isort-buffer
|
|
||||||
:desc "Links in buffer" "l" #'ace-link-org)
|
|
||||||
(:prefix "s"
|
|
||||||
:desc "Search project TODOs" "t" #'+ivy/tasks
|
|
||||||
:desc "Search the web" "w" #'web-search
|
|
||||||
:desc "Goto URL in eww" "u" #'eww-browse-url
|
|
||||||
:desc "Search in eww" "3" #'eww-search-words
|
|
||||||
:desc "Search all the things" "g" #'deadgrep))
|
|
||||||
|
|
||||||
;; app/search
|
|
||||||
(after! web-search
|
|
||||||
(push '("Searx" "http://search.unbl.ink/?q=%s")
|
|
||||||
web-search-providers)
|
|
||||||
(setq web-search-default-provider "Searx"))
|
|
||||||
|
|
||||||
(def-package! org-alert
|
|
||||||
:commands (org-alert-enable))
|
|
||||||
|
|
||||||
(after! org-alert-mode
|
|
||||||
(setq alert-default-style 'libnotify))
|
|
||||||
|
|
||||||
;; enable smog writing analysis
|
|
||||||
;;(use-package smog
|
|
||||||
;; :config (setq smog-command "style -L en"))
|
|
||||||
|
|
||||||
;;
|
|
||||||
;; Modules
|
|
||||||
|
|
||||||
(setq +workspaces-switch-project-function #'ignore
|
|
||||||
+format-on-save-enabled-modes '(python-mode)
|
|
||||||
+pretty-code-enabled-modes '(emacs-lisp-mode org-mode))
|
|
||||||
|
|
||||||
;; app/eglot
|
|
||||||
;; Back to eglot ...
|
|
||||||
(add-hook 'foo-mode-hook 'eglot-ensure)
|
|
||||||
|
|
||||||
;; app/mpdel
|
|
||||||
;;
|
|
||||||
(setq libmpdel-hostname "phoebe.local")
|
|
||||||
|
|
||||||
;; app/rss
|
|
||||||
(add-hook! 'elfeed-show-mode-hook (text-scale-set 1.5))
|
|
||||||
|
|
||||||
(setq rmh-elfeed-org-files (list "~/org/elfeed.org")
|
|
||||||
elfeed-search-filter "@1-week-ago +unread ")
|
|
||||||
|
|
||||||
(add-hook 'prog-mode-hook #'goto-address-mode) ;; Linkify links!
|
|
||||||
|
|
||||||
;; tools/deft
|
|
||||||
(setq deft-extensions '("org"))
|
|
||||||
(setq deft-directory "~/org")
|
|
||||||
|
|
||||||
;; tools/magit
|
|
||||||
(setq magit-repository-directories '(("~/work" . 2))
|
|
||||||
magit-save-repository-buffers nil)
|
|
||||||
|
|
||||||
|
|
||||||
;;; It is the opposite of fill-paragraph
|
|
||||||
(defun unfill-paragraph ()
|
|
||||||
"Takes a multi-line paragraph and makes it into a single line of text."
|
|
||||||
(interactive)
|
|
||||||
(let ((fill-column (point-max)))
|
|
||||||
(fill-paragraph nil)))
|
|
||||||
|
|
||||||
;; Handy key definition
|
|
||||||
(define-key global-map "\M-z" 'unfill-paragraph)
|
|
||||||
|
|
||||||
; A few nice to haves
|
|
||||||
(nyan-mode) ; a rainbow cat, why not
|
|
||||||
(beacon-mode) ; show me where my cursor is bouncing around to
|
|
||||||
(add-hook 'after-init-hook #'global-emojify-mode) ; emoji, sigh
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.plantuml\\'" . planetuml-mode))
|
|
||||||
|
|
||||||
(load! "+ui.el")
|
|
||||||
(load! "+org") ;; Org mode stuff like todos and rebindings
|
|
||||||
(load! "+org-cal")
|
|
||||||
(load! "+nov") ;; nov.el epub mode settings
|
|
||||||
(load! "+mail") ;; Mail stuff
|
|
||||||
(load! "+eshell")
|
|
||||||
(load! "+mpd")
|
|
||||||
(load! "+ranger")
|
|
||||||
(load! "+mastodon")
|
|
||||||
(load! "+wttrin") ;; Weather config
|
|
||||||
(load! "+elfeed") ;; This runs a background web process ...
|
|
||||||
|
|
||||||
;; findout timezone location strings at http://worldtime.io
|
|
||||||
(setq display-time-world-list '(("America/Los_Angeles" "San Francisco")
|
|
||||||
("America/Tegucigalpa" "Tegucigalpa")
|
|
||||||
("America/New_York" "New York")
|
|
||||||
("Europe/London" "London")
|
|
||||||
("Europe/Warsaw" "Warsaw")
|
|
||||||
("Europe/Kiev" "Lviv")))
|
|
||||||
|
|
||||||
(load! "beancount")
|
|
||||||
(require 'beancount)
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.beancount\\'" . beancount-mode))
|
|
||||||
|
|
||||||
(define-derived-mode
|
|
||||||
pandoc-view-mode
|
|
||||||
markdown-mode
|
|
||||||
"pandoc-view-mode"
|
|
||||||
"View pandoc processing of docx file using markdown mode."
|
|
||||||
(erase-buffer)
|
|
||||||
(let* ((pandoc (executable-find "pandoc")))
|
|
||||||
(insert (shell-command-to-string
|
|
||||||
(concat pandoc " --wrap=none " (shell-quote-argument (buffer-file-name)) " -t markdown"))))
|
|
||||||
(not-modified)
|
|
||||||
(read-only-mode t))
|
|
||||||
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.docx\\'" . pandoc-view-mode))
|
|
||||||
|
|
||||||
(remove-hook 'text-mode-hook #'auto-fill-mode)
|
|
||||||
(add-hook 'message-mode-hook #'word-wrap-mode)
|
|
||||||
439
emacs/.config/doom/config.org
Normal file
439
emacs/.config/doom/config.org
Normal file
@ -0,0 +1,439 @@
|
|||||||
|
#+TITLE: DOOM Emacs Configuration
|
||||||
|
|
||||||
|
This configuration of Emacs is highly opinionated.
|
||||||
|
|
||||||
|
* Basics
|
||||||
|
I don't actually know what this does ... :thinking:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
My identity. Used in a handful of places in Emacs to prepopulate authorship and such.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq user-full-name "Colin Powell"
|
||||||
|
user-mail-address "colin@unbl.ink")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** TODO Figure out what `inhibit-double-buffering` does in Emacs
|
||||||
|
* User interface
|
||||||
|
** Fonts and themes
|
||||||
|
I change my default theme almost as often as the weather. I tend to revert back
|
||||||
|
to Doom One most of the time, but I like the Kaolin themes, as well as Nimbus
|
||||||
|
for it's retro charm. Nimbus just doesn't look great when I'm tired though.
|
||||||
|
|
||||||
|
I love [[https://blog.golang.org/go-fonts][Go Mono]]. But sometimes Emacs is sensitive to fonts and performance
|
||||||
|
suffers, so we have Fira Mono to fall back on.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;;(setq doom-font (font-spec :family "Fira Mono" :size 12))
|
||||||
|
(setq doom-font (font-spec :family "Go Mono" :size 12))
|
||||||
|
(setq doom-big-font (font-spec :family "Go Mono" :size 18))
|
||||||
|
|
||||||
|
(setq doom-theme 'doom-one)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** Borders
|
||||||
|
Barring the unfortunate end of X11 development and my eventual transition to
|
||||||
|
wayland and sway, you can pry i3wm from my cold, dead hands. One problem,
|
||||||
|
however is that when you're trying your best to rice up i3, Emacs needs a padded
|
||||||
|
border.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; Applies to current frame
|
||||||
|
(set-frame-parameter nil 'internal-border-width 20) ; applies to the current frame
|
||||||
|
;; If we create new frames (via emacsclient) this will do the trick
|
||||||
|
(add-to-list 'default-frame-alist '(internal-border-width . 20))
|
||||||
|
;; Dash highlighting
|
||||||
|
(after! dash (dash-enable-font-lock))
|
||||||
|
#+END_SRC
|
||||||
|
** Dash
|
||||||
|
I need to figure out what this doesr, hence the task below.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; Dash highlighting
|
||||||
|
(after! dash (dash-enable-font-lock))
|
||||||
|
#+END_SRC
|
||||||
|
*** TODO Figure out what dash highlighting is all about
|
||||||
|
* Keybindings
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(map! ;; Easier window movement
|
||||||
|
:n "C-h" 'evil-window-left
|
||||||
|
:n "C-j" 'evil-window-down
|
||||||
|
:n "C-k" 'evil-window-up
|
||||||
|
:n "C-l" 'evil-window-right
|
||||||
|
|
||||||
|
(:map evil-treemacs-state-map
|
||||||
|
"C-h" 'evil-window-left
|
||||||
|
"C-l" 'evil-window-right)
|
||||||
|
|
||||||
|
:leader
|
||||||
|
(:prefix "f"
|
||||||
|
:desc "Find file in dotfiles" "t" #'+hlissner/find-in-dotfiles
|
||||||
|
:desc "Browse dotfiles" "T" #'+hlissner/browse-dotfiles)
|
||||||
|
(:prefix "t"
|
||||||
|
:desc "Switch themes" "t" #'load-theme)
|
||||||
|
(:prefix "o"
|
||||||
|
:desc "Elfeed feed reader" "f" #'elfeed
|
||||||
|
:desc "Hckrnews" "h" #'hackernews
|
||||||
|
:desc "Lobste.rs" "l" #'ivy-lobsters)
|
||||||
|
(:prefix "b"
|
||||||
|
:desc "Black format buffer" "f" #'blacken-buffer
|
||||||
|
:desc "isort buffer" "I" #'py-isort-buffer
|
||||||
|
:desc "Links in buffer" "l" #'ace-link-org)
|
||||||
|
(:prefix "s"
|
||||||
|
:desc "Search project TODOs" "t" #'+ivy/tasks
|
||||||
|
:desc "Search the web" "w" #'web-search
|
||||||
|
:desc "Goto URL in eww" "u" #'eww-browse-url
|
||||||
|
:desc "Search in eww" "3" #'eww-search-words
|
||||||
|
:desc "Search all the things" "g" #'deadgrep))
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
* Weather
|
||||||
|
Wttrin is a pretty funny way to check weather. I like that you can copy and
|
||||||
|
paste fun a ASCII representations of the day's weather. It's not terribly
|
||||||
|
accurate though.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq wttrin-default-cities '("Castine, ME" "San Francisco" "Thessaloniki"))
|
||||||
|
(setq wttrin-default-accept-language '("Accept-Language" . "en-US"))
|
||||||
|
|
||||||
|
(map!
|
||||||
|
(:leader
|
||||||
|
(:prefix "o"
|
||||||
|
:desc "Weather" "w" #'wttrin)))
|
||||||
|
#+END_SRC
|
||||||
|
* Search
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; app/search
|
||||||
|
(after! web-search
|
||||||
|
(push '("Searx" "http://search.unbl.ink/?q=%s")
|
||||||
|
web-search-providers)
|
||||||
|
(setq web-search-default-provider "Searx"))
|
||||||
|
#+END_SRC
|
||||||
|
* Eglot
|
||||||
|
Eglot versus LSP? Until 27 lands stable, Eglot wins. I can actually read all
|
||||||
|
it's source.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; app/eglot
|
||||||
|
;; Back to eglot ...
|
||||||
|
(add-hook 'foo-mode-hook 'eglot-ensure)
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
* Music
|
||||||
|
Right now, just make sure I can connect to my local Mopidy server via MPDel.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq libmpdel-hostname "mopidy.local")
|
||||||
|
|
||||||
|
(defun mpdel-playlist-play ()
|
||||||
|
"Start playing the song at point."
|
||||||
|
(interactive)
|
||||||
|
(if (derived-mode-p 'mpdel-playlist-current-playlist-mode)
|
||||||
|
(libmpdel-play-song (navigel-entity-at-point))
|
||||||
|
(mpdel-core-insert-current-playlist)))
|
||||||
|
|
||||||
|
(map! :leader
|
||||||
|
(:prefix "-"
|
||||||
|
:desc "MPD Open playlist" "-" #'mpdel-playlist-open
|
||||||
|
:desc "MPD Remove at point" "d" #'mpdel-playlist-delete
|
||||||
|
:desc "MPD Start at point" "s" #'mpdel-playlist-play
|
||||||
|
:desc "MPD Next track" "n" #'libmpdel-playback-next
|
||||||
|
:desc "MPD Previous track" "p" #'libmpdel-playback-previous))
|
||||||
|
#+END_SRC
|
||||||
|
* RSS
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; app/rss
|
||||||
|
(add-hook! 'elfeed-show-mode-hook (text-scale-set 1.5))
|
||||||
|
|
||||||
|
(setq rmh-elfeed-org-files (list "~/org/elfeed.org")
|
||||||
|
elfeed-search-filter "@1-week-ago +unread ")
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
* Niceties
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(add-hook 'prog-mode-hook #'goto-address-mode) ;; Linkify links!
|
||||||
|
|
||||||
|
;;; It is the opposite of fill-paragraph
|
||||||
|
(defun unfill-paragraph ()
|
||||||
|
"Takes a multi-line paragraph and makes it into a single line of text."
|
||||||
|
(interactive)
|
||||||
|
(let ((fill-column (point-max)))
|
||||||
|
(fill-paragraph nil)))
|
||||||
|
|
||||||
|
;; Handy key definition
|
||||||
|
(define-key global-map "\M-z" 'unfill-paragraph)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Helpful modes to make working less painful.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; A rainbow cat, why not?
|
||||||
|
(nyan-mode)
|
||||||
|
|
||||||
|
;; Show the cursor when we make jumps, I'm too old for this shit.
|
||||||
|
(beacon-mode)
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; Emojis, fuck me.
|
||||||
|
(add-hook 'after-init-hook #'global-emojify-mode)
|
||||||
|
|
||||||
|
;; PlantUML is awesome for quick diagrams
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.plantuml\\'" . plantuml-mode))
|
||||||
|
|
||||||
|
;; Timezone location strings at http://worldtime.io
|
||||||
|
(setq display-time-world-list '(("America/Los_Angeles" "San Francisco")
|
||||||
|
("America/Tegucigalpa" "Tegucigalpa")
|
||||||
|
("America/New_York" "New York")
|
||||||
|
("Europe/London" "London")
|
||||||
|
("Europe/Warsaw" "Warsaw")
|
||||||
|
("Europe/Kiev" "Lviv")))
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq +workspaces-switch-project-function #'ignore
|
||||||
|
+format-on-save-enabled-modes '(python-mode)
|
||||||
|
+pretty-code-enabled-modes '(emacs-lisp-mode org-mode))
|
||||||
|
#+END_SRC
|
||||||
|
* Org-mode
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;; tools/deft
|
||||||
|
(setq deft-extensions '("org"))
|
||||||
|
(setq deft-directory "~/org")
|
||||||
|
|
||||||
|
(after! org
|
||||||
|
(setq org-directory (expand-file-name "~/org/")
|
||||||
|
org-journal-dir "~/org/journal/"
|
||||||
|
org-agenda-files (list org-directory)
|
||||||
|
org-agenda-window-setup 'only-window
|
||||||
|
org-pretty-entities t
|
||||||
|
org-log-done 'time
|
||||||
|
;org-contacts-files '("~/org/contacts.org")
|
||||||
|
; attempt to return todo function to spacemacs
|
||||||
|
;evil-org-key-theme '(textobjects navigation additional insert todo)
|
||||||
|
;; show actually italicized text instead of /italicized text/
|
||||||
|
;org-agenda-block-separator ""
|
||||||
|
org-fontify-whole-heading-line t
|
||||||
|
org-fontify-done-headline t
|
||||||
|
org-fontify-quote-and-verse-blocks t
|
||||||
|
org-ellipsis "…"
|
||||||
|
org-capture-templates
|
||||||
|
'(("i" "Send to inbox" entry (file+headline "~/org/inbox.org" "Inbox")
|
||||||
|
"* TODO %?\n")
|
||||||
|
("l" "Send to inbox with link" entry (file+headline "~/org/inbox.org" "Inbox")
|
||||||
|
"* TODO %?\n %i\n %a")
|
||||||
|
("w" "Work diary entry" entry (file "~/org/work_diary.org")
|
||||||
|
"* %u\n%?\n")
|
||||||
|
("u" "Add unblink entry" entry (file+headline "~/org/unblink.org" "Misc")
|
||||||
|
"* TITLE\n:PROPERTIES:\n:EXPORT_FILE_NAME: TITLE\n:EXPORT_DATE: %i\n:END:\n%?\n")
|
||||||
|
("n" "Add an idea" entry (file "~/org/ideas.org")
|
||||||
|
"* %?\nEntered on %U\n"))
|
||||||
|
org-todo-keywords
|
||||||
|
'((sequence "TODO(t)" "NEXT(n)" "MAYBE(m)" "|" "DONE(d)" "WONTDO(w)"))
|
||||||
|
|
||||||
|
org-todo-keyword-faces
|
||||||
|
'((("TODO" . (:foreground "red" :weight bold))
|
||||||
|
("NEXT" . (:foreground "blue"))
|
||||||
|
("MAYBE" . (:foreground "sea green"))
|
||||||
|
("WAITING" . (:foreground "forest green"))
|
||||||
|
("WONTDO" . (:foreground "forest green"))
|
||||||
|
("DONE" . (:foreground "light sea green"))))
|
||||||
|
org-agenda-span 5
|
||||||
|
org-agenda-start-day "1d"
|
||||||
|
;;org-use-tag-inheritance t; bug in variable below, just turn 'em off
|
||||||
|
org-tag-alist '(("@personal" . ?h)
|
||||||
|
("@farm" . ?f)
|
||||||
|
("@town" . ?s)
|
||||||
|
("@errand" . ?e)
|
||||||
|
("@15five" . ?w)
|
||||||
|
("@family" . ?m))
|
||||||
|
org-modules '(ol-eshell
|
||||||
|
ol-notmuch
|
||||||
|
ob-eval
|
||||||
|
ob-exp
|
||||||
|
ob-http
|
||||||
|
org-drill
|
||||||
|
org-id)))
|
||||||
|
|
||||||
|
;; Refiling
|
||||||
|
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||||
|
(org-agenda-files :maxlevel . 9)))
|
||||||
|
(setq org-outline-path-complete-in-steps nil) ; Refile in a single go
|
||||||
|
(setq org-refile-use-outline-path t) ; Show full paths for refiling
|
||||||
|
|
||||||
|
;; org-set-tags-command
|
||||||
|
(setq +inbox-file "~/org/inbox.org")
|
||||||
|
(defun +open-inbox-file ()
|
||||||
|
(interactive)
|
||||||
|
"Opens the inbox file"
|
||||||
|
(find-file +inbox-file))
|
||||||
|
|
||||||
|
(map!
|
||||||
|
:leader
|
||||||
|
:desc "Open inbox" "I" #'+open-inbox-file
|
||||||
|
:desc "Open today" "T" #'org-roam-today
|
||||||
|
:desc "Open tomorrow" "N" #'org-roam-tomorrow)
|
||||||
|
|
||||||
|
(defun +show-agenda ()
|
||||||
|
(interactive)
|
||||||
|
(delete-other-windows)
|
||||||
|
(with-popup-rules! nil
|
||||||
|
(org-agenda-list)
|
||||||
|
(calendar))
|
||||||
|
(other-window 1)
|
||||||
|
(split-window-vertically)
|
||||||
|
(other-window 1)
|
||||||
|
(find-file +todo-file))
|
||||||
|
|
||||||
|
|
||||||
|
(map! :leader
|
||||||
|
(:prefix "f" :desc "Save all org buffers" "a" #'org-save-all-org-buffers))
|
||||||
|
|
||||||
|
(use-package! org-roam
|
||||||
|
:commands (org-roam-insert org-roam-find-file org-roam)
|
||||||
|
:init
|
||||||
|
(setq org-roam-directory "~/org/")
|
||||||
|
(map! :leader
|
||||||
|
:prefix "n"
|
||||||
|
:desc "Org-Roam-Insert" "i" #'org-roam-insert
|
||||||
|
:desc "Org-Roam-Find" "/" #'org-roam-find-file
|
||||||
|
:desc "Org-Roam-Buffer" "r" #'org-roam)
|
||||||
|
:config
|
||||||
|
(org-roam-mode +1))
|
||||||
|
|
||||||
|
(with-eval-after-load 'org-roam
|
||||||
|
(with-eval-after-load 'company
|
||||||
|
(with-eval-after-load 'org
|
||||||
|
(require 'company-org-roam)
|
||||||
|
(company-org-roam-init))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* Nov.el
|
||||||
|
Reading novels in Emacs, how novel!
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(require 'justify-kp)
|
||||||
|
;(setq nov-text-width t)
|
||||||
|
(setq nov-text-width 80)
|
||||||
|
|
||||||
|
(defun my-nov-window-configuration-change-hook ()
|
||||||
|
(my-nov-post-html-render-hook)
|
||||||
|
(remove-hook 'window-configuration-change-hook
|
||||||
|
'my-nov-window-configuration-change-hook
|
||||||
|
t))
|
||||||
|
|
||||||
|
(defun my-nov-post-html-render-hook ()
|
||||||
|
(if (get-buffer-window)
|
||||||
|
(let ((max-width (pj-line-width))
|
||||||
|
buffer-read-only)
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (not (eobp))
|
||||||
|
(when (not (looking-at "^[[:space:]]*$"))
|
||||||
|
(goto-char (line-end-position))
|
||||||
|
(when (> (shr-pixel-column) max-width)
|
||||||
|
(goto-char (line-beginning-position))
|
||||||
|
(pj-justify)))
|
||||||
|
(forward-line 1))))
|
||||||
|
(add-hook 'window-configuration-change-hook
|
||||||
|
'my-nov-window-configuration-change-hook
|
||||||
|
nil t)))
|
||||||
|
|
||||||
|
(add-hook 'nov-post-html-render-hook 'my-nov-post-html-render-hook)
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||||
|
|
||||||
|
(defun my-nov-font-setup ()
|
||||||
|
(face-remap-add-relative 'variable-pitch :family "Liberation Serif"
|
||||||
|
:size 20
|
||||||
|
:height 1.0))
|
||||||
|
(add-hook 'nov-mode-hook 'my-nov-font-setup)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* Mail
|
||||||
|
I use notmuch to read and write email from within Emacs.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
;;(load! "+mail") ;; Mail stuff
|
||||||
|
|
||||||
|
;; Use word wrap in text emails, because most people suck
|
||||||
|
(remove-hook 'text-mode-hook #'auto-fill-mode)
|
||||||
|
(add-hook 'message-mode-hook #'word-wrap-mode)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* Eshell
|
||||||
|
Handful of fun aliases to make working in Eshell almost like a /real/ shell :smile:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(after! eshell
|
||||||
|
(set-eshell-alias!
|
||||||
|
"f" "(other-window 1) && find-file $1"
|
||||||
|
"l" "ls -lh"
|
||||||
|
"d" "dired $1"
|
||||||
|
"dc" "docker-compose $*"
|
||||||
|
"fftest" "cd ~/src/ff/fifteen5 && docker-compose exec app django-admin test -k $*"
|
||||||
|
"ffsh" "cd ~/src/ff/fifteen5/ && docker-compose exec app django-admin shell_plus"
|
||||||
|
"ffdj" "cd ~/src/ff/fifteen5/ && docker-compose exec app django-admin $*"
|
||||||
|
"gl" "(call-interactively 'magit-log-current)"
|
||||||
|
"gs" "magit-status"
|
||||||
|
"gc" "magit-commit"))
|
||||||
|
#+END_SRC
|
||||||
|
* Ranger
|
||||||
|
Trick out ranger a bit.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(def-package! ranger
|
||||||
|
:commands (ranger deer ranger-override-dired-fn)
|
||||||
|
:config
|
||||||
|
(set-popup-rule! "^\\*ranger" :ignore t))
|
||||||
|
|
||||||
|
(map!
|
||||||
|
(:leader
|
||||||
|
(:prefix "a"
|
||||||
|
:desc "Ranger" "r" #'ranger
|
||||||
|
:desc "Deer" "d" #'deer)))
|
||||||
|
|
||||||
|
(add-hook! dired-mode #'ranger-override-dired-fn) ;; Override dired-mode so it uses deer
|
||||||
|
#+END_SRC
|
||||||
|
* Mastodon
|
||||||
|
There's gotta be a way to get the token out of password-store for this.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq mastodon-instance-url "https://mastodon.technology")
|
||||||
|
|
||||||
|
(map! :leader
|
||||||
|
(:prefix "="
|
||||||
|
:desc "Open mastodon" "=" #'mastodon
|
||||||
|
:desc "Update Mastodon timeline" "u" #'mastodon-tl--update
|
||||||
|
:desc "Toot to Mastodon" "t" #'mastodon-toot))
|
||||||
|
#+END_SRC
|
||||||
|
* Elfeed
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(run-with-timer 0 (* 30 60) 'elfeed-update)
|
||||||
|
|
||||||
|
(setq httpd-host "0.0.0.0")
|
||||||
|
(setq httpd-port 10000)
|
||||||
|
#+END_SRC
|
||||||
|
* Unprocessed
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(load! "beancount")
|
||||||
|
(require 'beancount)
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.beancount\\'" . beancount-mode))
|
||||||
|
#+END_SRC
|
||||||
|
* Pandoc
|
||||||
|
Here we are trying to auto-translate Word and PDF files to be viewed in Emacs.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(define-derived-mode
|
||||||
|
pandoc-view-mode
|
||||||
|
markdown-mode
|
||||||
|
"pandoc-view-mode"
|
||||||
|
"View pandoc processing of docx file using markdown mode."
|
||||||
|
(erase-buffer)
|
||||||
|
(let* ((pandoc (executable-find "pandoc")))
|
||||||
|
(insert (shell-command-to-string
|
||||||
|
(concat pandoc " --wrap=none " (shell-quote-argument (buffer-file-name)) " -t markdown"))))
|
||||||
|
(not-modified)
|
||||||
|
(read-only-mode t))
|
||||||
|
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.docx\\'" . pandoc-view-mode))
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
@ -172,7 +172,7 @@
|
|||||||
:config
|
:config
|
||||||
;; For literate config users. This will tangle+compile a config.org
|
;; For literate config users. This will tangle+compile a config.org
|
||||||
;; literate config in your `doom-private-dir' whenever it changes.
|
;; literate config in your `doom-private-dir' whenever it changes.
|
||||||
;;literate
|
literate
|
||||||
|
|
||||||
;; The default module sets reasonable defaults for Emacs. It also
|
;; The default module sets reasonable defaults for Emacs. It also
|
||||||
;; provides a Spacemacs-inspired keybinding scheme and a smartparens
|
;; provides a Spacemacs-inspired keybinding scheme and a smartparens
|
||||||
|
|||||||
Reference in New Issue
Block a user