dotfiles

A steaming hot pile of sh...ell scripts and configuration files.
git clone https://kaka.farm/~git/dotfiles
Log | Files | Refs

init.el (15054B)


      1 ;;; -*- lexical-binding: t; -*-
      2 
      3 (setq gc-cons-threshold (* 1024 1024 1024))
      4 
      5 (setq read-process-output-max (string-to-number
      6                                (with-temp-buffer
      7                                  (insert-file-contents "/proc/sys/fs/pipe-max-size")
      8                                  (buffer-string))))
      9 
     10 (require 'server)
     11 (unless (server-running-p)
     12   (server-start))
     13 
     14 (require 'benchmark-init)
     15 
     16 (add-to-list 'load-path (concat user-emacs-directory
     17                                 "local-packages/emacs-kakafarm/"))
     18 
     19 (load (locate-user-emacs-file "local-stuff.el"))
     20 
     21 (setq package-archives '())
     22 (require 'use-package)
     23 
     24 (setq major-mode-remap-alist '((emacs-lisp-mode . fundamental-mode)))
     25 
     26 (autoload 'skribilo-mode "skribilo.el" "Skribilo mode." t)
     27 
     28 '(progn
     29 ;;; Weird https://www.youtube.com/watch?v=TjMTNSdhUvk stuff.
     30    (setq inhibit-startup-message t)
     31    (menu-bar-mode 1)
     32    (fido-vertical-mode 1)
     33    ;; (icomplete-vertical-mode 1)
     34    (push 'flex completion-styles)
     35    '(eldoc-mode 1)
     36    (flymake-mode 1)
     37    ;; (load-theme 'modus-vivendi-tinted t)
     38    (setopt mode-line-end-spaces nil)
     39    (set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?|))
     40    (xterm-mouse-mode 1))
     41 
     42 (use-package browse-url
     43   :demand t
     44   :custom
     45   (browse-url-browser-function 'eww-browse-url)
     46   (browse-url-new-window-flag t)
     47   )
     48 
     49 (use-package casual-calc
     50   :ensure nil
     51   :bind (:map calc-mode-map ("C-o" . casual-calc-tmenu)))
     52 
     53 (use-package casual-dired
     54   :ensure nil
     55   :bind (:map dired-mode-map ("C-o" . casual-dired-tmenu)))
     56 
     57 (use-package casual-info
     58   :ensure nil
     59   :bind (:map Info-mode-map ("C-o" . casual-info-tmenu)))
     60 
     61 '(use-package company
     62    :defer t
     63    :init
     64    (add-hook 'after-init-hook 'global-company-mode))
     65 
     66 (use-package compilation
     67   :demand t
     68   :requires (ansi-color)
     69   )
     70 
     71 ;; FIXME: Why can't I use it in the (use-package compilation :hook or :init)?
     72 (add-hook 'compilation-filter-hook #'kakafarm/colorize-compilation)
     73 
     74 
     75 (use-package corfu
     76   :defer t
     77   :config
     78   (global-corfu-mode)
     79   :custom
     80   (corfu-auto t))
     81 
     82 (use-package cus-edit
     83   :config
     84   ;; Use another file for the ``customize'' customisations.
     85   (setq custom-file (locate-user-emacs-file "custom-variables.el"))
     86   (load custom-file 'noerror 'nomessage))
     87 
     88 (use-package detubifier
     89   :defer t
     90   )
     91 
     92 (use-package dictionary
     93   :defer t
     94   :custom
     95   (dictionary-server "localhost"))
     96 
     97 (use-package elfeed
     98   :defer t
     99   :config
    100   ;; XXX: Not sure if I want it to be a `kakafarm/elfeed-feeds'
    101   ;; variable that is then set to `elfeed-feeds' in the `:custom'
    102   ;; section, or loaded inside the `elfeed-feeds.el' file using the
    103   ;; `customize-set-value' function.
    104   (load (locate-user-emacs-file "elfeed-feeds.el"))
    105   (customize-set-value 'elfeed-curl-program-name
    106                        (expand-file-name "~/.guix-profile/bin/curl"))
    107   :custom
    108   ;; (elfeed-curl-max-connections 10)
    109   (elfeed-search-filter "@1-week-ago +unread")
    110   (elfeed-curl-program-name (expand-file-name "~/.guix-profile/bin/curl"))
    111   )
    112 
    113 '(use-package elfeed-goodies
    114    :config
    115    (elfeed-goodies/setup))
    116 
    117 (use-package emacs
    118   :ensure nil
    119   :bind
    120   (
    121    :map global-map
    122    ("C-c p p" . kakafarm/percent-read)
    123    ("C-c C-s" . (lambda (beg end)
    124                   (interactive (list (region-beginning) (region-end)))
    125 
    126                   (sort-lines '()
    127                               beg
    128                               end)))
    129 
    130    ;; (";" . #'kakafarm/easy-underscore)
    131    )
    132   :config
    133   (set-register ?i `(file . ,(locate-user-emacs-file "init.el")))
    134   '(ido-mode t)
    135   ;; (tab-bar-mode)
    136   :custom
    137   (inhibit-startup-screen t)
    138   )
    139 
    140 (use-package ement
    141   :custom
    142   (ement-auto-sync nil)
    143   (ement-save-sessions t)
    144   )
    145 
    146 (use-package erc
    147   :defer t
    148   :custom
    149   (erc-server "irc.libera.chat")
    150   (erc-nick "kakafarm")
    151   (erc-track-shorten-start 8)
    152   (erc-kill-buffer-on-part t)
    153   (erc-auto-query 'bury)
    154   (erc-autojoin-channels-alist '((libera-kakafarm "#systemcrafters")))
    155   :bind
    156   (("C-c i r c" . (lambda ()
    157                     (interactive)
    158                     (erc-tls :id 'libera-kakafarm))))
    159   ;; :config
    160   ;; (erc-tls :id 'libera-kakafarm)
    161   )
    162 
    163 (use-package ffap
    164   :defer t
    165   :bind
    166   (
    167    ("C-c f a p"   . ffap-menu)
    168    ("C-c f f a p" . kakafarm/ffap-browse-urls)
    169    ))
    170 
    171 (use-package fontset
    172   :defer t
    173   :config
    174   (set-fontset-font t 'hebrew "Noto Sans Hebrew"))
    175 
    176 (use-package geiser
    177   :defer t
    178   :after (scheme-mode)
    179   :config
    180   '((define-key 'geiser-mode-map)
    181     (setq geiser-active-implementations '(guile))
    182     (global-unset-key "C-c C-a")
    183     (unbind-key "C-c C-e" geiser-mode-map)
    184     (unbind-key "C-c C-a" geiser-mode-map))
    185   :custom
    186   (geiser-default-implementation 'guile)
    187   (geiser-mode-auto-p nil)
    188   (geiser-repl-per-project-p t)
    189   )
    190 
    191 (use-package greader
    192   :defer t
    193   :commands (greader-mode)
    194   :config
    195   (add-hook 'greader-mode-hook
    196             'kakafarm/sentence-end-double-nilify-for-read-only-buffers)
    197   :bind
    198   (
    199    :map greader-mode-map
    200    ("C-c g b" . (lambda () (interactive) (kakafarm/greader-estimate-reading-time)))
    201    ("C-c g r" . (lambda () (interactive) (kakafarm/greader-estimate-reading-time (point))))
    202    )
    203   :hook (
    204          Custom-mode
    205          Info-mode
    206          Man-mode
    207          elfeed-show
    208          elfeed-show-mode
    209          elpher
    210          eww-after-render
    211          fundamental-mode
    212          help-mode
    213          helpful-mode
    214          lisp-mode
    215          nov-mode
    216          ;; text-mode ;; It fucks up my magit commit message C-c C-c.
    217          w3m-mode
    218          )
    219   )
    220 
    221 (use-package helm
    222   :defer t
    223   :bind
    224   (
    225    :map global-map
    226    ("M-x" . helm-M-x)
    227    )
    228   )
    229 
    230 (use-package helpful
    231   :defer t
    232   :bind
    233   (
    234    ("C-h f" . helpful-function)
    235    ("C-h k" . helpful-key)
    236    ("C-h m" . helpful-mode)
    237    ("C-h v" . helpful-variable)
    238    )
    239   )
    240 
    241 (use-package howm
    242   :init
    243   (setq howm-directory "~/mine/howm/")
    244   (setq howm-home-directory howm-directory)
    245   (setq howm-file-name-format "%Y-%m-%d-%H%M%S.org")
    246   (setq howm-view-title-header "*")
    247   (setq howm-dtime-format "<%Y-%m-%d %a %H:%M>")
    248   (setq howm-prefix (kbd "C-c ;"))
    249   :bind*
    250   ("C-c ; ;" . howm-menu)
    251   )
    252 
    253 (use-package icomplete
    254   :defer t
    255   :config
    256   ;; Display completions continuously in minibuffer.
    257   (icomplete-mode 1))
    258 
    259 (use-package info
    260   :defer t
    261   :custom
    262   (Info-additional-directory-list '("~/infopath/")))
    263 
    264 (use-package kakafarm
    265   :demand t
    266   :bind
    267   (
    268    :map global-map
    269    ("C-c C-w" . kakafarm/multi-vterm-weechat)
    270    ("C-c w"   . kakafarm/multi-vterm-weechat)
    271    )
    272   )
    273 
    274 (use-package magit
    275   :custom
    276   (magit-diff-refine-hunk t)
    277   (magit-diff-refine-ignore-whitespace nil)
    278   )
    279 
    280 (use-package magit-todos
    281   :defer t
    282   :after magit
    283   :config
    284   (magit-todos-mode 1)
    285   :custom
    286   (magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'")
    287   )
    288 
    289 (use-package mastodon
    290   :defer t
    291   :init
    292   ;; (setq mastodon-active-user "kakafarm"
    293   ;;       mastodon-instance-url "https://emacs.ch/")
    294   (setq mastodon-active-user "kakafarm"
    295         mastodon-instance-url "https://shitposter.world/")
    296   )
    297 
    298 (use-package menu-bar
    299   :custom
    300   (menu-bar-mode nil)
    301   )
    302 
    303 '(use-package mode-line
    304    :custom
    305    (mode-line-percent-position '(6 "%q"))
    306    )
    307 
    308 (use-package modus-themes
    309   :defer t
    310   :init
    311   (setq modus-themes-mode-line '(borderless
    312                                  accented
    313                                  ;; 3d
    314                                  padded
    315                                  ;; moody
    316                                  )
    317         modus-themes-region '(;;accented
    318                               bg-only
    319                               ;;no-extend
    320                               )
    321         modus-themes-paren-match '(bold
    322                                    intense)
    323         ;;modus-themes-syntax '(alt-syntax)
    324         modus-themes-scale-headings t
    325         modus-themes-org-blocks 'tinted-background)
    326   (load-theme 'modus-vivendi)
    327   ;;(load-theme 'wheatgrass)
    328   )
    329 
    330 (use-package mule
    331   :defer t
    332   :config
    333 ;;; https://emacs.stackexchange.com/questions/34322/set-default-coding-system-utf-8
    334   (set-language-environment "utf-8"))
    335 
    336 (use-package multi-vterm
    337   ;; :demand t
    338   :bind
    339   (
    340    :map global-map
    341    ("C-c <RET> <RET>" . multi-vterm)
    342    ("C-c m m"         . multi-vterm)
    343    :map vterm-mode-map
    344    ("C-q" . vterm-send-next-key)
    345    )
    346   :commands
    347   (
    348    multi-vterm
    349    multi-vterm-buffer-exist-p
    350    )
    351   )
    352 
    353 '(use-package nano-tts
    354    :defer t
    355    :hook (eww-after-render nov-mode Info-mode)
    356    :custom
    357    (nano-tts-words-per-minute 225)
    358    )
    359 
    360 (use-package nov
    361   :defer t
    362   :mode ((rx ".epub" string-end) . nov-mode))
    363 
    364 (use-package fundamental
    365   :mode ((rx ".el" string-end) . fundamental-mode))
    366 
    367 '(use-package opml-to-elfeed-feeds
    368    :custom
    369    (opml-to-elfeed-feeds-elfeed-feeds nil t)
    370    )
    371 
    372 (use-package orderless
    373   :defer t
    374   :custom
    375   (completion-styles
    376    '(orderless
    377      basic))
    378   (completion-category-overrides
    379    '((file (styles
    380             basic
    381             partial-completion)))))
    382 
    383 (use-package org
    384   :defer t
    385   :config
    386   (org-babel-do-load-languages
    387    'org-babel-load-languages
    388    '(
    389      (emacs-lisp . t)
    390      (scheme     . t)
    391      (shell      . t)
    392      ))
    393   :custom
    394   (org-agenda-files (list (expand-file-name "~/mine/org/")
    395                           (expand-file-name "~/Documents/notes/")))
    396   (org-default-notes-file (expand-file-name "~/mine/org/org.org"))
    397   (org-directory (expand-file-name "~/mine/org/"))
    398   (org-export-use-babel nil)
    399   (org-html-postamble t)
    400   (org-html-postamble-format '(("en" "<p class=\"author\">Author: %a</p>\12<p class=\"date\">Date: %d</p>\12<p class=\"creator\">%c</p>\12<p class=\"validation\">%v</p>")))
    401   (org-structure-template-alist '(
    402                                   ("a" . "export ascii")
    403                                   ("c" . "center")
    404                                   ("C" . "comment")
    405                                   ("e" . "example")
    406                                   ("E" . "export")
    407                                   ("h" . "export html")
    408                                   ("l" . "export latex")
    409                                   ("q" . "quote")
    410                                   ("s" . "src")
    411                                   ("v" . "verse")
    412                                   ("g" . "src scheme :session moo :results output :tangle eopl3.scm")
    413                                   ("z" . "src scheme")
    414                                   ))
    415   )
    416 
    417 (use-package org-roam
    418   :defer t
    419   :bind (("C-c n l" . org-roam-buffer-toggle)
    420          ("C-c n f" . org-roam-node-find)
    421          ("C-c n i" . org-roam-node-insert))
    422   :config
    423   ;;(org-roam-db-autosync-enable)
    424   ;;(org-roam-db-autosync-mode)
    425   :custom
    426   (org-roam-directory "~/mine/roam/")
    427   (org-roam-graph-viewer '(lambda (x) nil))
    428   )
    429 
    430 (use-package paredit
    431   :defer t
    432   :hook (emacs-lisp-mode
    433          lisp-mode
    434          scheme-mode))
    435 
    436 (use-package paren
    437   :defer t
    438   :config
    439   (show-paren-mode))
    440 
    441 ;; XXX: Disabled.
    442 '(use-package parinfer
    443    :defer t
    444    :hook (emacs-lisp-mode
    445           lisp-mode
    446           scheme-mode))
    447 
    448 '(use-package perspective
    449    :init
    450    (persp-mode)
    451    :bind
    452    ("C-c M-b" . persp-list-buffers)
    453    :custom
    454    (persp-mode-prefix-key (kbd "C-c M-p")))
    455 
    456 (use-package rainbow-delimiters
    457   :defer t
    458   :config
    459   (rainbow-delimiters-mode))
    460 
    461 (use-package recentf
    462   :defer t
    463   :config
    464   (recentf-mode 1)
    465   :bind (("C-S-t" . recentf-open-files)
    466          ("C-c t" . recentf-open-files)
    467          ("C-c l" . dictionary-lookup-definition))
    468   :custom
    469   (recentf-max-menu-items 100)
    470   (recentf-max-saved-items 100)
    471   )
    472 
    473 (use-package scheme-mode
    474   :defer t
    475   :config
    476   ;; TODO: Did it even work?!
    477   (add-hook 'scheme-mode-hook 'hs-minor-mode)
    478   (progn ;; For SRFI-253:
    479     (put 'define-checked 'scheme-indent-function 1)
    480     (put 'lambda-checked 'scheme-indent-function 1))
    481   :mode (rx "." (| "scm" "sxml" "skb") string-end)
    482   ;; :bind (:map scheme-mode-map
    483   ;;             ("C-c C-e" . arei-mode-map)
    484   ;;             ("C-c C-a" . arei))
    485   )
    486 
    487 (use-package shr
    488   :custom
    489   (shr-width 75)
    490   (shr-use-fonts nil)
    491   (shr-use-colors nil)
    492   (shr-indentation 2)
    493   )
    494 
    495 (use-package simple
    496   :defer
    497   :init
    498   (advice-add 'kill-ring-save
    499               :before
    500               'kakafarm/pulse-current-region)
    501   :config
    502   (column-number-mode)
    503   ;; Don't want tabs in any of my source files.
    504   (setq-default indent-tabs-mode
    505                 nil)
    506   '(advice-add 'scratch-buffer
    507                :after
    508                (lambda () "Switch to text-mode."
    509                  (text-mode)))
    510   :custom
    511   (global-visual-line-mode t)
    512   )
    513 
    514 (use-package undo-tree
    515   :defer t
    516   :config
    517   (global-undo-tree-mode 1)
    518   (setq undo-tree-auto-save-history nil)
    519   :bind
    520   ("C-x u" . undo-tree-visualize))
    521 
    522 (use-package vterm
    523   :custom
    524   (vterm-environment '("LC_ALL=en_IL.utf8"))
    525   )
    526 
    527 '(use-package whitespace-cleanup
    528    :custom
    529    (global-whitespace-cleanup-mode t)
    530    )
    531 
    532 (use-package window
    533   :defer t
    534   :config
    535   '(advice-add 'recenter-top-bottom
    536                :around
    537                'kakafarm/recenter-top-bottom))
    538 
    539 (progn
    540 ;;; Emacs From Scratch
    541 ;;; https://systemcrafters.net/emacs-from-scratch/
    542 ;;; https://www.youtube.com/playlist?list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ
    543 
    544   (setq visible-cursor t
    545         visible-bell t)
    546 
    547 ;;; The Basics of Emacs Configuration
    548 ;;; https://systemcrafters.net/emacs-from-scratch/basics-of-emacs-configuration/
    549 ;;; https://www.youtube.com/watch?v=OaF-N-FuGtc
    550 
    551   (tool-bar-mode -1)
    552   (scroll-bar-mode -1)
    553   (menu-bar-mode -1)
    554   ;; (global-display-line-numbers-mode 1)
    555   (hl-line-mode 1)
    556   (blink-cursor-mode 1)
    557 
    558 ;;; https://systemcrafters.net/emacs-from-scratch/the-best-default-settings/
    559 ;;; https://www.youtube.com/watch?v=51eSeqcaikM
    560   ;;(recentf-mode 1)
    561   (setq history-length 25)
    562   (savehist-mode 1)
    563   (save-place-mode 1))
    564 
    565 (progn
    566 ;;; Load org-roam stuff.
    567 
    568   (defvar kakafarm/org-roam-my-publish-time 0
    569     ;; TODO: Write docstring.
    570     "TODO"
    571     )
    572 
    573   (setq org-publish-project-alist
    574         `(("roam"
    575            :base-directory "~/mine/roam/publish/"
    576            :auto-sitemap t
    577            :sitemap-function kakafarm/org-roam-sitemap
    578            :sitemap-title "Roam Notes"
    579            :publishing-function kakafarm/org-roam-publication-wrapper
    580            :publishing-directory "~/mine/roam-export"
    581            :section-number nil
    582            :table-of-contents nil
    583            :include ,(directory-files "~/mine/roam/publish/" t ".*.org$")
    584            :html-head "<link rel=\"stylesheet\" href=\"/index.css\" type=\"text/css\">")))
    585 
    586   (setq org-roam-graph-link-builder
    587         'kakafarm/org-roam-custom-link-builder)
    588 
    589   (add-hook 'org-roam-graph-generation-hook
    590             (lambda (dot svg)
    591               (if (< (- (cadr (current-time))
    592                         kakafarm/org-roam-project-publish-time)
    593                      5)
    594                   (progn
    595                     (copy-file svg
    596                                "~/mine/roam-export/sitemap.svg"
    597                                't)
    598                     (setq kakafarm/org-roam-project-publish-time
    599                           0))))))
    600 
    601 (setq gc-cons-threshold (* 200 1024 1024))
    602 (put 'narrow-to-region 'disabled nil)
    603 (put 'upcase-region 'disabled nil)
    604 (put 'narrow-to-page 'disabled nil)
    605 (put 'scroll-left 'disabled nil)