Forráskód Böngészése

[emacs] Let's use tokyo-night for a while

Colin Powell 2 éve
szülő
commit
654a4e7a06
2 módosított fájl, 341 hozzáadás és 3 törlés
  1. 338 0
      emacs/.config/doom/config.el
  2. 3 3
      emacs/.config/doom/config.org

+ 338 - 0
emacs/.config/doom/config.el

@@ -0,0 +1,338 @@
+(setq user-full-name "Colin Powell"
+      user-mail-address "colin@unbl.ink")
+
+;;(setq ivy-read-action-function #'ivy-hydra-read-action)
+
+(defun file-notify-rm-all-watches ()
+  "Remove all existing file notification watches from Emacs."
+  (interactive)
+  (maphash
+   (lambda (key _value)
+     (file-notify-rm-watch key))
+   file-notify-descriptors))
+
+(setq doom-theme 'doom-tokyo-night
+      doom-font (font-spec :family "Iosevka" :size 12 :weight 'regular)
+      doom-big-font (font-spec :family "Iosevka" :size 16 :weight 'regular)
+      doom-variable-pitch-font (font-spec :family "Overpass" :size 12))
+
+;; 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!
+
+(setq eww-search-prefix "https://search.unbl.ink/?q=")
+
+(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 "Copy link hints"         "c" #'link-hint-copy-link
+        :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 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-fever-maxsize 100)
+(setq elfeed-feeds '(("fever+https://secstate@rss.unbl.ink"
+                     :api-url "https://rss.unbl.ink/fever/"
+                     :password "password"
+                     :autotags '(("rss.unbl.ink")))))
+
+;(setq elfeed-protocol-log-trace t)
+(setq elfeed-protocol-fever-maxsize 50)
+;(setq elfeed-log-level 'debug)
+(elfeed-protocol-enable)
+
+(map! :leader
+      (:prefix "r"
+        :desc "Open Elfeed"         "r" #'elfeed
+        :desc "Update Elfeed"       "u" #'elfeed-update))
+
+;; Schedule feed update for every 15 minutes
+(run-at-time 300 300
+             (lambda () (when (= elfeed-curl-queue-active 0)
+                          (elfeed-update))))
+;;;;; Database auto-save
+
+  ;; Save elfeed db automatically, because if Emacs crashes or is killed (which happens to me
+  ;; occasionally, especially since I develop packages in a single instance), we'd lose the db
+  ;; updates not saved.
+(unless (cl-loop for timer in timer-idle-list
+                 thereis (equal (aref timer 5) #'elfeed-db-save))
+  (run-with-idle-timer 400 'repeat #'elfeed-db-save))
+
+(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)
+
+(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)
+
+(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
+            html-mode
+            latex-mode))
+
+(add-hook 'org-mode-hook #'doom-disable-line-numbers-h)
+
+(after! org
+  (setq org-directory (expand-file-name "~/var/org/")
+        org-agenda-files (append '("~/var/org"))
+        org-ellipsis "…"
+        org-image-actual-width '(600)
+        org-fontify-quote-and-verse-blocks t
+        org-agenda-dim-blocked-tasks nil
+        org-pretty-entities t
+        org-fancy-priorities-list '("🅰" "🅱" "🅲" "🅳" "🅴")
+        org-modules '(ol-eshell
+                      ol-notmuch
+                      ob-eval
+                      ob-exp
+                      ob-http
+                      org-id)))
+
+;; Refiling
+(setq org-refile-targets '(("~/var/org/index.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/index.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-roam-directory "~/var/org/")
+(setq org-roam-dailies-directory "dailies")
+
+(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 $*"
+   "ffsh" "python ~/src/github.com/15five/fifteen5/manage.py shell_plus"
+   "ffdev" "ssh dev-ff.local "
+   "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"))
+
+(setq lsp-lens-enable 1
+      lsp-ui-sideline-enable 1
+      lsp-enable-links 1
+      lsp-headerline-breadcrumb-enable 1
+      lsp-modeline-code-actions-enable 1
+      lsp-modeline-diagnostics-enable 1
+      lsp-completion-show-detail 1
+      lsp-file-watch-threshold nil
+ )
+
+(use-package lsp-mode
+  :commands lsp
+  :diminish lsp-mode
+  :hook
+  (elixir-mode . lsp)
+  :init
+  (add-to-list 'exec-path "~/.emacs.d/var/elixir-ls"))
+
+(setq mastodon-instance-url "https://fosstodon.org"
+      mastodon-active-user "colin@unbl.ink")
+
+(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))
+
+(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))
+
+(after! magit
+  (magit-wip-after-save-mode t)
+  (magit-wip-after-apply-mode t)
+
+  (setq magit-save-repository-buffers 'dontask
+        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.
+
+  ; Show gravatars in magit
+  (setq magit-revision-show-gravatars '("^Author:     " . "^Commit:     "))
+
+(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))
+
+(setq org-reveal-root "file:///path-to-reveal.js")
+(setq org-reveal-title-slide nil)

+ 3 - 3
emacs/.config/doom/config.org

@@ -32,9 +32,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
 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.
 for it's retro charm. Nimbus just doesn't look great when I'm tired though.
 #+BEGIN_SRC emacs-lisp
 #+BEGIN_SRC emacs-lisp
-(setq doom-theme 'doom-one
-      doom-font (font-spec :family "FuraCode Nerd Font Mono" :size 12 :weight 'regular)
-      doom-big-font (font-spec :family "JetBrains Mono" :size 16 :weight 'regular)
+(setq doom-theme 'doom-tokyo-night
+      doom-font (font-spec :family "Iosevka" :size 12 :weight 'regular)
+      doom-big-font (font-spec :family "Iosevka" :size 16 :weight 'regular)
       doom-variable-pitch-font (font-spec :family "Overpass" :size 12))
       doom-variable-pitch-font (font-spec :family "Overpass" :size 12))
 #+END_SRC
 #+END_SRC
 ** Borders
 ** Borders