diff --git a/emacs/.doom.d/+magit.el b/emacs/.config/doom/+magit.el similarity index 100% rename from emacs/.doom.d/+magit.el rename to emacs/.config/doom/+magit.el diff --git a/emacs/.doom.d/+mail.el b/emacs/.config/doom/+mail.el similarity index 100% rename from emacs/.doom.d/+mail.el rename to emacs/.config/doom/+mail.el diff --git a/emacs/.doom.d/+python.el b/emacs/.config/doom/+python.el similarity index 100% rename from emacs/.doom.d/+python.el rename to emacs/.config/doom/+python.el diff --git a/emacs/.doom.d/+reason.el b/emacs/.config/doom/+reason.el similarity index 100% rename from emacs/.doom.d/+reason.el rename to emacs/.config/doom/+reason.el diff --git a/emacs/.doom.d/autoload/hlissner.el b/emacs/.config/doom/autoload/hlissner.el similarity index 100% rename from emacs/.doom.d/autoload/hlissner.el rename to emacs/.config/doom/autoload/hlissner.el diff --git a/emacs/.doom.d/beancount.el b/emacs/.config/doom/beancount.el similarity index 100% rename from emacs/.doom.d/beancount.el rename to emacs/.config/doom/beancount.el diff --git a/emacs/.doom.d/config.org b/emacs/.config/doom/config.org similarity index 96% rename from emacs/.doom.d/config.org rename to emacs/.config/doom/config.org index debb2f2..5fd4944 100644 --- a/emacs/.doom.d/config.org +++ b/emacs/.config/doom/config.org @@ -18,9 +18,9 @@ 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. #+BEGIN_SRC emacs-lisp -(setq doom-theme 'doom-challenger-deep - doom-font (font-spec :family "JetBrains Mono NL" :size 12 :weight 'semi-light) - doom-big-font (font-spec :family "JetBrains Mono NL" :size 16) +(setq doom-theme 'srcery + doom-font (font-spec :family "JetBrains Mono" :size 14 :weight 'semi-light) + doom-big-font (font-spec :family "JetBrains Mono" :size 18) doom-variable-pitch-font (font-spec :family "Overpass" :size 16)) #+END_SRC ** Borders @@ -173,6 +173,14 @@ How I went about [[file:/usr/home/powellc/var/org/20200916134500-vale_prose_lint ) (add-to-list 'flycheck-checkers 'vale 'append) #+END_SRC +#+begin_src emacs-lisp +(setq +format-on-save-enabled-modes + '(not emacs-lisp-mode ; elisp's mechanisms are good enough + sql-mode ; sqlformat is currently broken + tex-mode ; latexindent is broken + org-mode + latex-mode)) +#+end_src * Org-mode ** Basic configuration A handful of mods here clean up org mode. Line numbers don’t mean much when @@ -495,11 +503,6 @@ Here we are trying to auto-translate Word and PDF files to be viewed in Emacs. #+END_SRC * Magit #+BEGIN_SRC emacs-lisp -;;(add-hook 'magit-mode-hook #'doom-disable-line-numbers-h) - -(setq +magit-hub-features t ;; I want the PR/issue stuff too! - +magit-hub-enable-by-default t) ;; And I want it on by default! - (after! magit (magit-wip-after-save-mode t) (magit-wip-after-apply-mode t) @@ -513,9 +516,12 @@ Here we are trying to auto-translate Word and PDF files to be viewed in Emacs. magithub-clone-default-directory "~/src" ;; I want my stuff to clone to ~/projects magithub-preferred-remote-method 'ssh_url)) ;; HTTPS cloning is awful, i authenticate with ssh keys. + ; Show gravatars in magit + (setq magit-revision-show-gravatars '("^Author: " . "^Commit: ")) -(setq lsp-enable-links nil) +; (setq lsp-enable-links nil) #+END_SRC + * Openwith #+BEGIN_SRC emacs-lisp (when (require 'openwith nil 'noerror) diff --git a/emacs/.config/doom/custom.el b/emacs/.config/doom/custom.el new file mode 100644 index 0000000..5e85ed6 --- /dev/null +++ b/emacs/.config/doom/custom.el @@ -0,0 +1,12 @@ +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(package-selected-packages '(modus-vivendi-theme))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/emacs/.doom.d/init.el b/emacs/.config/doom/init.el similarity index 97% rename from emacs/.doom.d/init.el rename to emacs/.config/doom/init.el index 0a737ae..53098b2 100644 --- a/emacs/.doom.d/init.el +++ b/emacs/.config/doom/init.el @@ -24,6 +24,7 @@ ;;ido ; the other *other* search engine... (ivy ; a search engine for love and life +fuzzy + +presient +icons) :ui @@ -89,15 +90,15 @@ ;;debugger ; FIXME stepping through code, to help you add bugs direnv ;;docker - editorconfig ; let someone else argue about tabs vs spaces + editorconfig ; let someone else argue about tabs vs spaces ;;ein ; tame Jupyter notebooks with emacs (eval +overlay) ; run code, run (also, repls) - gist ; interacting with github gists - (lookup ; navigate your code and its documentation + gist ; interacting with github gists + (lookup ; navigate your code and its documentation +dictionary +docsets) lsp - magit ; a git porcelain for Emacs + (magit +forge) ; a git porcelain for Emacs make ; run make tasks from Emacs (pass +auth) ; password manager for nerds pdf ; pdf enhancements diff --git a/emacs/.doom.d/packages.el b/emacs/.config/doom/packages.el similarity index 100% rename from emacs/.doom.d/packages.el rename to emacs/.config/doom/packages.el diff --git a/emacs/.doom.d/config.el b/emacs/.doom.d/config.el deleted file mode 100644 index 52444e0..0000000 --- a/emacs/.doom.d/config.el +++ /dev/null @@ -1,401 +0,0 @@ -(setq user-full-name "Colin Powell" - user-mail-address "colin@unbl.ink") - -(setq ivy-read-action-function #'ivy-hydra-read-action) - -(setq doom-theme 'doom-challenger-deep - doom-font (font-spec :family "JetBrains Mono NL" :size 12 :weight 'semi-light) - doom-big-font (font-spec :family "JetBrains Mono NL" :size 16) - doom-variable-pitch-font (font-spec :family "Overpass" :size 16)) - -;; Applies to current frame -(set-frame-parameter nil 'internal-border-width 10) ; 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 . 10)) - -(nyan-mode) ;; progress in the form of a rainbow cat. -(add-hook 'after-init-hook #'global-emojify-mode) ;; emojis?! -(add-hook 'prog-mode-hook #'goto-address-mode) ;; linify links! - -(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 "o" - :desc "(H)ckrnews" "H" #'hackernews - :desc "(R)SS" "R" #'=rss - :desc "(M)ail" "M" #'=notmuch - :desc "(L)obste.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 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)) - -(setq wttrin-default-cities '("Castine, ME" "San Francisco" "Thessaloniki")) -(setq wttrin-default-accept-language '("Accept-Language" . "en-US")) - -(map! - (:leader - (:prefix "o" - :desc "(W)eather" "W" #'wttrin))) - -(setq libmpdel-hostname "mpd.unbl.ink") - -(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)) - -(setq elfeed-protocol-ttrss-maxsize 100) ;; bigger than 200 is invalid -(setq elfeed-feeds '("ttrss+https://powellc:hT7nPKAHa^fYwXZ*@reader.unbl.ink")) - -(setq elfeed-log-level 'debug) -(elfeed-protocol-enable) - -;; Schedule feed update for every 15 minutes -(run-at-time "30 min" nil 'elfeed-update) - -(setq elfeed-search-filter "@2-days-ago +unread") -(defun elfeed-search-format-date (date) - (format-time-string "%Y-%m-%d %H:%M" (seconds-to-time date))) - -; Serif font in Elfeed -(add-hook! 'elfeed-mode-hook 'variable-pitch-mode) -(add-hook! 'elfeed-show-mode-hook (text-scale-set 1.2)) - -(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))) - -(define-key global-map "\M-z" 'unfill-paragraph) - -;; 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"))) - -(flycheck-define-checker vale - "A checker for prose" - :command ("vale" "--output" "line" - source) - :standard-input nil - :error-patterns - ((error line-start (file-name) ":" line ":" column ":" (id (one-or-more (not (any ":")))) ":" (message) line-end)) - :modes (markdown-mode org-mode text-mode) - ) -(add-to-list 'flycheck-checkers 'vale 'append) - -(add-hook 'org-mode-hook #'doom-disable-line-numbers-h) - -(after! org - (setq org-directory (expand-file-name "~/var/org/") - org-agenda-files (file-expand-wildcards "~/var/org/2020-*") - org-pretty-entities t - org-agenda-dim-blocked-tasks nil - org-log-done 'time - org-hide-emphasis-markers t - org-fontify-whole-heading-line t - org-fontify-done-headline t - org-fontify-quote-and-verse-blocks t - org-ellipsis "…" - org-image-actual-width '(600) - org-protocol-default-template-key "l" - org-capture-templates - '(("i" "Send to inbox" entry (file "~/var/org/inbox.org") - "* TODO %?\n") - ("l" "Link" entry (file "~/var/org/inbox.org") - "* TODO %a\n %?\n %i")) - org-todo-keywords - '((sequence "TODO(t)" "NEXT(n)" "MAYBE(m)" "|" "DONE(d)" "WONTDO(w)")) - org-modules '(ol-eshell - ol-notmuch - ob-eval - ob-exp - ob-http - org-id))) - -;; Don’t display git gutter in org mode -;; With tree folding, it's pretty much useless -(after! git-gutter - (setq git-gutter:disabled-modes '(org-mode image-mode))) - -;; Refiling -(setq org-refile-targets '(("~/var/org/inbox.org" :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 - -(setq +inbox-file "~/var/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 "Save all org buffers" "A" #'org-save-all-org-buffers) - -(setq org-agenda-span 3 - org-agenda-start-day "1d") -(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)) - -(setq org-roam-directory "~/var/org/") -(setq org-roam-dailies-directory "") - -(setq org-roam-dailies-capture-templates - '(("d" "default" entry - #'org-roam-capture--get-point - "* %?" - :file-name "%<%Y-%m-%d>" - :head "#+title: %<%Y-%m-%d>\n\n"))) - -(setq org-fc-directories "~/var/org/") -(require 'org-fc-hydra) - -(require 'justify-kp) -;(setq nov-text-width t) -(setq nov-text-width 100) - -(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) - -(defun my-nov-font-setup () - (face-remap-add-relative 'variable-pitch :family "Noto Serif Regular" - :height 1.0 - :size 16)) -(add-hook 'nov-mode-hook 'my-nov-font-setup) -(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)) - -;(add-hook 'nov-mode-hook 'variable-pitch-mode) - -(setq mm-text-html-renderer 'w3m) -(setq w3m-fill-column 88) - -(setq message-kill-buffer-on-exit t) -(setq message-auto-save-directory "~/Mail/colin@unbl.ink/Drafts/") -(setq message-directory "~/Mail/colin@unbl.ink/") - -;; sendmail-program "/usr/local/bin/msmtpq" <--- this doesn't work as advertised right now -(setq send-mail-function 'sendmail-send-it - sendmail-program "/usr/local/bin/msmtp" - mail-specify-envelope-from t - message-sendmail-f-is-evil t - message-sendmail-envelope-from 'header - message-sendmail-extra-arguments '("--read-envelope-from") - mail-envelope-from 'header) - -(setq notmuch-saved-searches '((:name "inbox" :query "tag:inbox" :key "i") - (:name "unread" :query "tag:inbox and tag:unread" :key "u") - (:name "jira" :query "tag:jira and date:yesterday..today" :key "j") - (:name "github" :query "tag:github and date:yesterday..today" :key "g"))) - -(after! notmuch - (set-popup-rule! "^\\*notmuch*" :ignore t) - ) - -(map! :leader - (:prefix "e" - :desc "(s)end queued mail" "s" #'smtpmail-send-queued-mail - :desc "Open (i)nbox" "i" #'=notmuch - :desc "Open (n)otmuch" "n" #'notmuch - :desc "(C)ompose mail" "c" #'notmuch-mua-new-mail)) - -(after! eshell - (set-eshell-alias! - "djtest" "DJANGO_SETTINGS_MODULE=ff.settings.ci python manage.py test $*" - "djpytest" "DJANGO_SETTINGS_MODULE=ff.settings.ci pytest --reuse-db --black --flake8 --isort --durations=3 $*" - "djsh" "DJANGO_SETTINGS_MODULE=ff.settings.ci python manage.py shell_plus" - "dj" "DJANGO_SETTINGS_MODULE=ff.settings.ci python manage.py $*" - "f" "(other-window 1) && find-file $1" - "l" "ls -lh" - "d" "dired $1" - "gl" "(call-interactively 'magit-log-current)" - "gs" "magit-status" - "gc" "magit-commit")) - -(after! lsp - (setq lsp-file-watch-threshold nil)) - -(setq mastodon-instance-url "https://mastodon.technology") - -(map! :leader - (:prefix "=" - :desc "Open mastodon" "=" #'mastodon - :desc "Update Mastodon timeline" "u" #'mastodon-tl--update - :desc "More Mastodon timeline" "m" #'mastodon-tl--more - :desc "Toot to Mastodon" "t" #'mastodon-toot)) - -(use-package! slack -:commands (slack-start) -:init -(setq slack-buffer-emojify t) -(setq slack-prefer-current-team t) -:config -(slack-register-team - :name "15five" - :token (auth-source-pick-first-password - :host "15five.slack.com" - :user "colin.powell@15five.com") - :subscribed-channels '(squad-admin water-cooler)) -(slack-register-team - :name "RAB" - :token (auth-source-pick-first-password - :host "randomaccessbrewery.slack.com" - :user "colin@onec.me") - :subscribed-channels '(the_taps random)) - - (evil-define-key 'normal slack-info-mode-map - ",u" 'slack-room-update-messages) - (evil-define-key 'normal slack-mode-map - ",c" 'slack-buffer-kill - ",ra" 'slack-message-add-reaction - ",rr" 'slack-message-remove-reaction - ",rs" 'slack-message-show-reaction-users - ",pl" 'slack-room-pins-list - ",pa" 'slack-message-pins-add - ",pr" 'slack-message-pins-remove - ",mm" 'slack-message-write-another-buffer - ",me" 'slack-message-edit - ",md" 'slack-message-delete - ",u" 'slack-room-update-messages - ",2" 'slack-message-embed-mention - ",3" 'slack-message-embed-channel - "\C-n" 'slack-buffer-goto-next-message - "\C-p" 'slack-buffer-goto-prev-message) - (evil-define-key 'normal slack-edit-message-mode-map - ",k" 'slack-message-cancel-edit - ",s" 'slack-message-send-from-buffer - ",2" 'slack-message-embed-mention - ",3" 'slack-message-embed-channel)) - -(use-package! alert - :commands (alert) - :init - (setq alert-default-style 'libnotify)) - -(map! :leader - (:prefix "o" - (:prefix ("s" . "+slack") - :desc "Slack channels" "S" #'slack-start - :desc "Slack channels" "s" #'slack-channel-select - :desc "Slack IMs" "i" #'slack-im-select - :desc "Slack groups" "g" #'slack-group-select - :desc "Slack threads" "t" #'slack-all-threads))) - -(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)) - -;;(add-hook 'magit-mode-hook #'doom-disable-line-numbers-h) - -(setq +magit-hub-features t ;; I want the PR/issue stuff too! - +magit-hub-enable-by-default t) ;; And I want it on by default! - -(after! magit - (magit-wip-after-save-mode t) - (magit-wip-after-apply-mode t) - - (setq magit-save-repository-buffers 'dontask - magit-circleci-token "097bf0dd808ad9103d489844e37cecffdf967837" - magit-repository-directories '(("~/src/" . 3) - ("~/dotfiles/" . 0)) - magit-popup-display-buffer-action nil ;; Not sure why this is here, wonder what it does - magit-display-file-buffer-function #'switch-to-buffer-other-window - magithub-clone-default-directory "~/src" ;; I want my stuff to clone to ~/projects - magithub-preferred-remote-method 'ssh_url)) ;; HTTPS cloning is awful, i authenticate with ssh keys. - - -(setq lsp-enable-links nil) - -(when (require 'openwith nil 'noerror) - (setq openwith-associations - (list - (list (openwith-make-extension-regexp - '("mpg" "mpeg" "mp3" "mp4" - "avi" "wmv" "wav" "mov" "flv" - "ogm" "ogg" "mkv")) - "vlc" - '(file)) - (list (openwith-make-extension-regexp - '("pdf" "ps" "ps.gz" "dvi")) - "zathura" - '(file)) - )) - (openwith-mode 1)) diff --git a/emacs/.doom.d/custom.el b/emacs/.doom.d/custom.el deleted file mode 100644 index e69de29..0000000