diff options
author | Yann Herklotz <git@yannherklotz.com> | 2022-11-18 14:12:14 +0000 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2022-11-18 14:12:14 +0000 |
commit | 7196eb60e7701a21285cb5135dad06c12807aa6c (patch) | |
tree | 74e9fcc42b26c11a30cc8961f9138dfdff587da4 | |
parent | 056747b5c4b17b768c6f9a9e72ad85bf6b0b7a5e (diff) | |
download | ymh-emacs-7196eb60e7701a21285cb5135dad06c12807aa6c.tar.gz ymh-emacs-7196eb60e7701a21285cb5135dad06c12807aa6c.zip |
A more final configuration with extra packages
-rw-r--r-- | init.el | 482 |
1 files changed, 469 insertions, 13 deletions
@@ -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. + ) |