summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2022-11-18 14:12:14 +0000
committerYann Herklotz <git@yannherklotz.com>2022-11-18 14:12:14 +0000
commit7196eb60e7701a21285cb5135dad06c12807aa6c (patch)
tree74e9fcc42b26c11a30cc8961f9138dfdff587da4
parent056747b5c4b17b768c6f9a9e72ad85bf6b0b7a5e (diff)
downloadymh-emacs-7196eb60e7701a21285cb5135dad06c12807aa6c.tar.gz
ymh-emacs-7196eb60e7701a21285cb5135dad06c12807aa6c.zip
A more final configuration with extra packages
-rw-r--r--init.el482
1 files changed, 469 insertions, 13 deletions
diff --git a/init.el b/init.el
index 393b67f..6e05f1f 100644
--- a/init.el
+++ b/init.el
@@ -6,13 +6,25 @@
(tool-bar-mode -1)
(scroll-bar-mode -1)
+(set-face-attribute 'default nil :font "Iosevka YMHG Medium-11")
+
(setq gc-cons-threshold (* 1024 1024 1024))
(setq-default fill-column 80)
+(setq tab-bar-show nil)
+(setq tab-bar-select-tab-modifiers '(meta))
+(tab-bar-mode 1)
+
(setq inhibit-startup-message t)
(setq confirm-nonexistent-file-or-buffer nil)
(setq ring-bell-function 'ignore)
+(setq sentence-end-double-space t)
+(setq-default bidi-paragraph-direction 'left-to-right)
+(if (version<= "27.1" emacs-version)
+ (setq bidi-inhibit-bpa t))
+
+(setq face-remapping-alist '((proof-locked-face . region)))
(fset 'yes-or-no-p 'y-or-n-p)
@@ -24,8 +36,19 @@
mac-option-modifier nil))
(defun prev-window ()
- (interactive)
- (other-window -1))
+ (interactive)
+ (other-window -1))
+
+(defun ymhg/reset-coq-windows ()
+ "Resets the Goald and Response windows."
+ (interactive)
+ (other-frame 1)
+ (delete-other-windows)
+ (split-window-below)
+ (switch-to-buffer "*goals*")
+ (other-window 1)
+ (switch-to-buffer "*response*")
+ (other-frame 1))
(global-set-key (kbd "M-u") #'upcase-dwim)
(global-set-key (kbd "M-l") #'downcase-dwim)
@@ -40,12 +63,22 @@
(global-set-key (kbd "C-c a") #'org-agenda)
(global-set-key (kbd "C-c c") #'org-capture)
-(defvar ymh/temporary-file-directory)
-(setq ymh/temporary-file-directory (concat user-emacs-directory "backups"))
-(setq backup-directory-alist
- `((".*" . ,temporary-file-directory)))
-(setq auto-save-file-name-transforms
- `((".*" ,temporary-file-directory t)))
+(defvar --backup-directory)
+(setq --backup-directory (concat user-emacs-directory "backups"))
+(if (not (file-exists-p --backup-directory))
+ (make-directory --backup-directory t))
+(setq backup-directory-alist `(("." . ,--backup-directory)))
+(setq make-backup-files t ; backup of a file the first time it is saved.
+ backup-by-copying t ; don't clobber symlinks
+ version-control t ; version numbers for backup files
+ delete-old-versions t ; delete excess backup files silently
+ delete-by-moving-to-trash t
+ kept-old-versions 6 ; oldest versions to keep when a new numbered backup is made (default: 2)
+ kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
+ auto-save-default t ; auto-save every buffer that visits a file
+ auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
+ auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
+ )
(setq vc-follow-symlinks t)
@@ -58,6 +91,72 @@
(define-prefix-command 'ymh-map)
(global-set-key (kbd "C-c y") 'ymh-map)
+(define-key ymh-map (kbd "o") #'ymhg/reset-coq-windows)
+
+(setq browse-url-handlers
+ '(("wikipedia\\.org" . eww-browse-url)
+ ("yannherklotz\\.com" . eww-browse-url)
+ ("ymhg\\.org" . eww-browse-url)
+ ("archlinux\\.org" . eww-browse-url)
+ ("sachachua\\.com" . eww-browse-url)
+ ("comonad\\.com" . eww-browse-url)
+ ("drewdevault\\.com" . eww-browse-url)
+ ("wordpress\\.com" . eww-browse-url)
+ ("mathbabe\\.org" . eww-browse-url)
+ ("ethz\\.ch" . eww-browse-url)
+ ("pragmaticemacs\\.com" . eww-browse-url)))
+
+(set-register ?l (cons 'file "~/.emacs.d/loader.org"))
+(set-register ?m (cons 'file "~/Dropbox/org/meetings.org"))
+(set-register ?i (cons 'file "~/Dropbox/org/inbox.org"))
+(set-register ?p (cons 'file "~/Dropbox/org/projects.org"))
+(set-register ?c (cons 'file (format-time-string "~/Dropbox/org/%Y-%m.org")))
+
+(setq message-send-mail-function 'message-send-mail-with-sendmail)
+(setq message-fill-column 80)
+
+(use-package sendmail
+ :config
+ (if (eq system-type 'darwin)
+ (setq sendmail-program "/usr/local/bin/msmtp")
+ (setq sendmail-program "/usr/bin/msmtp")))
+
+(setq message-signature "Yann Herklotz
+Imperial College London
+https://yannherklotz.com")
+
+(setq auth-sources '("~/.authinfo" "~/.authinfo.gpg" "~/.netrc"))
+
+(setq mail-specify-envelope-from t)
+(setq message-sendmail-envelope-from 'header)
+(setq mail-envelope-from 'header)
+
+(setq shr-use-fonts nil)
+(setq shr-max-image-proportion 0.5)
+
+(defun diary-schedule (y1 m1 d1 y2 m2 d2 dayname)
+ "Entry applies if date is between dates on DAYNAME.
+ Order of the parameters is M1, D1, Y1, M2, D2, Y2 if
+ `european-calendar-style' is nil, and D1, M1, Y1, D2, M2, Y2 if
+ `european-calendar-style' is t. Entry does not apply on a history."
+ (let ((date1 (calendar-absolute-from-gregorian (list m1 d1 y1)))
+ (date2 (calendar-absolute-from-gregorian (list m2 d2 y2)))
+ (d (calendar-absolute-from-gregorian date)))
+ (if (and
+ (<= date1 d)
+ (<= d date2)
+ (= (calendar-day-of-week date) dayname)
+ (not (calendar-check-holidays date)))
+ entry)))
+
+(defun diary-last-day-of-month (date)
+ "Return `t` if DATE is the last day of the month."
+ (let* ((day (calendar-extract-day date))
+ (month (calendar-extract-month date))
+ (year (calendar-extract-year date))
+ (last-day-of-month
+ (calendar-last-day-of-month month year)))
+ (= day last-day-of-month)))
(defvar bootstrap-version)
(let ((bootstrap-file
@@ -76,15 +175,372 @@
(straight-use-package 'use-package)
(use-package ef-themes
- :config
- (load-theme 'ef-autumn t))
+ :config
+
+ (load-theme 'ef-autumn t))
(use-package pass
:bind (:map ymh-map
- ("p" . password-store-copy)
- ("i" . password-store-insert)
- ("g" . password-store-generate)))
+ ("q" . password-store-otp-token-copy)
+ ("p" . password-store-copy)
+ ("i" . password-store-insert)
+ ("g" . password-store-generate)))
(use-package magit)
+(use-package org
+ :config
+ (unbind-key "C-," org-mode-map)
+
+ (setq org-startup-indented nil)
+ (setq org-src-window-setup 'current-window)
+ (setq org-return-follows-link t)
+ (setq org-confirm-babel-evaluate nil)
+ (setq org-use-speed-commands t)
+ (setq org-hide-emphasis-markers nil)
+ (setq org-adapt-indentation nil)
+ (setq org-cycle-separator-lines 2)
+ (setq org-startup-folded 'content)
+ (setq org-structure-template-alist '(("a" . "export ascii")
+ ("c" . "center")
+ ("C" . "comment")
+ ("e" . "example")
+ ("E" . "export")
+ ("h" . "export html")
+ ("l" . "export latex")
+ ("q" . "quote")
+ ("s" . "src")
+ ("v" . "verse")
+ ("el" . "src emacs-lisp")
+ ("d" . "definition")
+ ("t" . "theorem")))
+ (setq org-attach-auto-tag "attach")
+
+ (setq org-log-done 'time)
+ (setq org-log-into-drawer t)
+
+ (setq org-agenda-files (mapcar 'expand-file-name
+ (list "~/Dropbox/org/inbox.org"
+ "~/Dropbox/org/main.org"
+ "~/Dropbox/org/tickler.org"
+ "~/Dropbox/org/projects.org"
+ (format-time-string "~/Dropbox/org/%Y-%m.org")
+ "~/Dropbox/bibliography/reading_list.org")))
+ (setq org-agenda-custom-commands
+ '(("w" "At work" tags-todo "@work"
+ ((org-agenda-overriding-header "Work")))
+ ("h" "At home" tags-todo "@home"
+ ((org-agenda-overriding-header "Home")))
+ ("u" "At uni" tags-todo "@uni"
+ ((org-agenda-overriding-header "University")))))
+ (setq org-agenda-tag-filter '("-backed"))
+ (setq org-agenda-span 7)
+ (setq org-agenda-start-day ".")
+ (setq org-agenda-start-on-week 1)
+ (setq org-agenda-include-diary t)
+
+ (setq org-icalendar-include-todo t)
+ (setq org-icalendar-include-bbdb-anniversaries t)
+
+ (setq org-refile-targets `(("~/Dropbox/org/main.org" :level . 1)
+ ("~/Dropbox/org/someday.org" :level . 1)
+ ("~/Dropbox/org/projects.org" :maxlevel . 2)
+ (,(format-time-string "~/Dropbox/org/%Y-%m.org") :level . 1)))
+
+ (setq org-capture-templates
+ `(("t" "Todo" entry (file "inbox.org")
+ "* TODO %?
+ :PROPERTIES:
+ :ID: %(org-id-uuid)
+ :END:
+ :LOGBOOK:
+ - State \"TODO\" from \"\" %U
+ :END:" :empty-lines 1)
+ ("l" "Link Todo" entry (file "inbox.org")
+ "* TODO %?
+ :PROPERTIES:
+ :ID: %(org-id-uuid)
+ :END:
+ :LOGBOOK:
+ - State \"TODO\" from \"\" %U
+ :END:
+
+ %a" :empty-lines 1)
+ ("c" "Contacts" entry (file "~/Dropbox/org/contacts.org")
+ "* %(org-contacts-template-name)
+ :PROPERTIES:
+ :EMAIL: %(org-contacts-template-email)
+ :END:" :empty-lines 1))
+
+ org-todo-keywords
+ '((sequence
+ "TODO(t)" ; A task that needs doing & is ready to do
+ "PROJ(p)" ; A project, which usually contains other tasks
+ "STRT(s)" ; A task that is in progress
+ "WAIT(w)" ; Something external is holding up this task
+ "HOLD(h)" ; This task is paused/on hold because of me
+ "DELG(l)" ; This task is delegated
+ "SMDY(m)" ; todo some day
+ "|"
+ "DONE(d!)" ; Task successfully completed
+ "KILL(k)") ; Task was cancelled, aborted or is no longer applicable
+ (sequence
+ "[ ](T)" ; A task that needs doing
+ "[-](S)" ; Task is in progress
+ "[?](W)" ; Task is being held up or paused
+ "|"
+ "[X](D)"))
+ org-todo-keyword-faces '(("[-]" . +org-todo-active)
+ ("STRT" . +org-todo-active)
+ ("[?]" . +org-todo-onhold)
+ ("WAIT" . +org-todo-onhold)
+ ("HOLD" . +org-todo-onhold)
+ ("DELG" . +org-todo-onhold)
+ ("SMDY" . +org-todo-onhold)
+ ("PROJ" . +org-todo-project)
+ ("NO" . +org-todo-cancel)
+ ("KILL" . +org-todo-cancel)))
+ (setq org-html-head-include-default-style nil)
+ (setq org-html-head-include-scripts nil)
+ (setq org-html-doctype "html5")
+ (setq org-html-html5-fancy t)
+ (setq org-html-container-element "section")
+ (setq org-html-postamble-format '(("en" "")))
+ (setq org-html-postamble t)
+ (setq org-html-divs '((preamble "header" "header")
+ (content "article" "content")
+ (postamble "footer" "postamble")))
+
+ (setq org-export-with-broken-links t))
+
+(use-package org-habit
+ :straight nil
+ :after org)
+
+(use-package calendar
+ :straight nil
+ :config
+ (setq calendar-mark-diary-entries-flag t)
+ (setq calendar-mark-holidays-flag t)
+ (setq calendar-mode-line-format nil)
+ (setq calendar-time-display-form
+ '(24-hours ":" minutes
+ (when time-zone
+ (format "(%s)" time-zone))))
+ (setq calendar-week-start-day 1) ; Monday
+ (setq calendar-date-style 'iso)
+ (setq calendar-date-display-form calendar-iso-date-display-form)
+ (setq calendar-time-zone-style 'numeric) ; Emacs 28.1
+ (add-hook 'calendar-today-visible-hook #'calendar-mark-today)
+ (remove-hook 'calendar-mode-hook #'org--setup-calendar-bindings)
+ (let ((map calendar-mode-map))
+ (define-key map (kbd "s") #'calendar-sunrise-sunset)
+ (define-key map (kbd "l") #'lunar-phases)
+ (define-key map (kbd "i") nil) ; Org sets this, much to my chagrin (see `remove-hook' above)
+ (define-key map (kbd "i a") #'diary-insert-anniversary-entry)
+ (define-key map (kbd "i c") #'diary-insert-cyclic-entry)
+ (define-key map (kbd "i d") #'diary-insert-entry) ; for current "day"
+ (define-key map (kbd "i m") #'diary-insert-monthly-entry)
+ (define-key map (kbd "i w") #'diary-insert-weekly-entry)
+ (define-key map (kbd "i y") #'diary-insert-yearly-entry)
+ (define-key map (kbd "M-n") #'calendar-forward-month)
+ (define-key map (kbd "M-p") #'calendar-backward-month)))
+
+(use-package cal-dst
+ :straight nil
+ :config
+ (setq calendar-standard-time-zone-name "+0000")
+ (setq calendar-daylight-time-zone-name "+0100"))
+
+(use-package diary-lib
+ :straight nil
+ :config
+ (setq diary-file "~/Dropbox/org/diary")
+ (setq diary-date-forms diary-iso-date-forms)
+ (setq diary-comment-start ";;")
+ (setq diary-comment-end "")
+ (setq diary-nonmarking-symbol "!")
+ (setq diary-show-holidays-flag t)
+ (setq diary-display-function #'diary-fancy-display) ; better than its alternative
+ (setq diary-header-line-format nil)
+ (setq diary-list-include-blanks nil)
+ (setq diary-number-of-entries 2)
+ (setq diary-mail-days 2)
+ (setq diary-abbreviated-year-flag nil)
+ ;;(add-hook 'diary-list-entries-hook #'diary-fix-timezone t)
+ (add-hook 'diary-list-entries-hook #'diary-sort-entries t)
+ (add-hook 'diary-list-entries-hook 'diary-include-other-diary-files)
+ (add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files))
+
+(use-package org-crypt
+ :straight nil
+ :after org
+ :config
+ (org-crypt-use-before-save-magic)
+ (setq org-tags-exclude-from-inheritance '("crypt"))
+ (setq org-crypt-key "8CEF4104683551E8"))
+
+(use-package org-id
+ :straight nil
+ :after org
+ :config
+ (setq org-id-link-to-org-use-id 'use-existing)
+ (setq org-id-track-globally t))
+
+(use-package appt
+ :straight nil
+ :config
+ (setq appt-display-diary nil)
+ (setq appt-disp-window-function #'appt-disp-window)
+ (setq appt-display-mode-line t)
+ (setq appt-display-interval 3)
+ (setq appt-audible nil)
+ (setq appt-warning-time-regexp "appt \\([0-9]+\\)")
+ (setq appt-message-warning-time 15)
+ (run-at-time 10 nil #'appt-activate 1))
+
+(use-package org-transclusion
+ :after org
+ :config
+ (setq org-transclusion-exclude-elements nil))
+
+(use-package org-zettelkasten
+ :after org
+ :config
+ (define-key ymh-map (kbd "s")
+ (lambda () (interactive)
+ (let ((org-agenda-files
+ '("~/Dropbox/zk/hls.org"
+ "~/Dropbox/zk/computing.org"
+ "~/Dropbox/zk/verification.org"
+ "~/Dropbox/zk/mathematics.org"
+ "~/Dropbox/zk/hardware.org"))) (org-search-view)))))
+
+(use-package pdf-tools
+ :config
+ (pdf-tools-install))
+
+(use-package proof-general
+ :config
+ (setq proof-splash-enable nil)
+ (setq proof-auto-action-when-deactivating-scripting 'retract)
+ (setq proof-delete-empty-windows nil)
+ (setq proof-multiple-frames-enable nil)
+ (setq proof-three-window-enable nil)
+ (setq proof-auto-raise-buffers nil)
+ (setq coq-compile-before-require nil)
+ (setq coq-compile-vos t)
+ (setq coq-compile-parallel-in-background t)
+ (setq coq-compile-keep-going nil)
+ (setq coq-compile-quick 'no-quick)
+ (setq coq-max-background-compilation-jobs 4)
+ (setq coq-indent-modulestart 0)
+
+ (defun ymhg--reset-coq-indentation ()
+ "Reset slow indentation."
+ (setq-local indent-line-function #'indent-relative))
+
+ (add-hook 'coq-mode-hook #'ymhg--reset-coq-indentation t)
+ ;;(define-key coq-mode-map (kbd "C-c TAB") #'smie-indent-line)
+ )
+
+(use-package boogie-friends
+ :config
+ (setq flycheck-dafny-executable (executable-find "dafny"))
+ (setq dafny-verification-backend 'cli))
+
+(use-package direnv
+ :config
+ (direnv-mode))
+
+(use-package orderless
+ :custom (completion-styles '(substring orderless)))
+
+(use-package vertico
+ :init
+ (vertico-mode))
+
+(use-package savehist
+ :straight nil
+ :init
+ (savehist-mode))
+
+(use-package notmuch
+ :config
+ (defun ymhg/notmuch-search-delete-mail (&optional beg end)
+ "Delete a message."
+ (interactive (notmuch-interactive-region))
+ (if (member "deleted" (notmuch-search-get-tags))
+ (notmuch-search-tag (list "-deleted"))
+ (notmuch-search-tag (list "+deleted" "-unread") beg end)))
+
+ (defun ymhg/notmuch ()
+ "Delete a message."
+ (interactive)
+ (let ((tab (tab-bar--tab-index-by-name "*MAIL*")))
+ (if tab (tab-bar-select-tab (1+ tab))
+ (progn
+ (tab-bar-new-tab-to)
+ (tab-bar-rename-tab "*MAIL*")
+ (notmuch)))))
+
+ (defun ymhg/notmuch-show-delete-mail (&optional beg end)
+ "Delete a message."
+ (interactive (notmuch-interactive-region))
+ (if (member "deleted" (notmuch-show-get-tags))
+ (notmuch-show-tag (list "-deleted"))
+ (notmuch-show-tag (list "+deleted" "-unread") beg end)))
+
+ (setq notmuch-archive-tags '("-inbox" "-unread" "+archive"))
+ (setq-default notmuch-search-oldest-first nil)
+
+ (define-key notmuch-show-mode-map (kbd "d") #'ymhg/notmuch-show-delete-mail)
+ (define-key notmuch-search-mode-map (kbd "d") #'ymhg/notmuch-search-delete-mail)
+
+ (global-set-key (kbd "C-c o m") #'ymhg/notmuch)
+
+ (setq notmuch-saved-searches
+ '((:name "inbox" :query "date:last_month..this_month and tag:inbox not tag:deleted" :key "n")
+ (:name "flagged" :query "tag:flagged" :key "f")
+ (:name "sent" :query "tag:sent" :key "s")
+ (:name "drafts" :query "tag:draft" :key "d")
+ (:name "mailbox" :query "date:last_month..this_month and (tag:mailbox and tag:inbox) and not tag:deleted and not tag:sent" :key "m")
+ (:name "imperial" :query "date:last_month..this_month and (tag:imperial and tag:inbox) and not tag:deleted and not tag:sent" :key "i")
+ (:name "all recent" :query "date:last_month..this_month" :key "r")))
+
+ (setq notmuch-fcc-dirs
+ '(("yann@yannherklotz.com" . "mailbox/Sent -inbox +sent -unread +mailbox -new")
+ ("git@ymhg.org" . "mailbox/Sent -inbox +sent -unread +mailbox -new")
+ ("yann.herklotz15@imperial.ac.uk" . "\"imperial/Sent Items\" -inbox +sent -unread +imperial -new")))
+
+ (setq +notmuch-home-function (lambda () (notmuch-search "tag:inbox"))))
+
+(use-package ol-notmuch)
+
(setq gc-cons-threshold (* 1024 1024 10))
+
+(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.
+ '(org-agenda-files
+ '("/home/ymherklotz/Dropbox/org/inbox.org" "/home/ymherklotz/Dropbox/org/main.org" "/home/ymherklotz/Dropbox/org/tickler.org" "/home/ymherklotz/Dropbox/org/projects.org" "/home/ymherklotz/Dropbox/bibliography/reading_list.org"))
+ '(safe-local-variable-values
+ '((eval setq org-ref-pdf-directory
+ (concat
+ (projectile-project-root)
+ "papers/"))
+ (eval setq org-attach-id-dir
+ (concat
+ (locate-dominating-file
+ (buffer-file-name)
+ ".dir-locals.el")
+ "data"))
+ (eval add-hook 'before-save-hook #'org-zettelkasten-update-modified nil t))))
+(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.
+ )