aboutsummaryrefslogtreecommitdiffstats
path: root/doom/config.el
diff options
context:
space:
mode:
Diffstat (limited to 'doom/config.el')
-rw-r--r--doom/config.el252
1 files changed, 204 insertions, 48 deletions
diff --git a/doom/config.el b/doom/config.el
index b5ddb93..8f66eca 100644
--- a/doom/config.el
+++ b/doom/config.el
@@ -1,9 +1,5 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
-;; Place your private configuration here! Remember, you do not need to run 'doom
-;; sync' after modifying this file!
-
-
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets.
(setq user-full-name "Yann Herklotz"
@@ -20,13 +16,13 @@
;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
;; font string. You generally only need these two:
(setq doom-font (font-spec :family "Iosevka" :size 16)
- doom-variable-pitch-font (font-spec :family "Libre Baskerville")
- doom-serif-font (font-spec :family "Libre Baskerville"))
+ doom-variable-pitch-font (font-spec :family "Libre Baskerville" :size 12)
+ doom-serif-font (font-spec :family "Libre Baskerville" :size 12))
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
-(setq doom-theme 'sanityinc-tomorrow-night)
+(setq doom-theme 'modus-operandi)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
@@ -49,7 +45,8 @@
(global-set-key (kbd "C-,") #'(lambda () (interactive) (other-window -1)))
(global-set-key (kbd "C-c l") #'org-store-link)
(global-set-key (kbd "C-c a") #'org-agenda)
-(global-set-key (kbd "C-c c") #'org-capture)
+(global-set-key (kbd "C-c /") #'avy-goto-word-1)
+(global-set-key (kbd "M-=") #'count-words)
;; Set undo-only correctly
(global-set-key (kbd "C-\\") 'undo-only)
@@ -76,19 +73,6 @@
(global-set-key (kbd "C-`") #'push-mark-no-activate)
(global-set-key (kbd "M-`") #'jump-to-mark)
-;; Delete an emacs client frame.
-(defun y/exit-emacs-client ()
- "consistent exit emacsclient. If not in emacs client, echo a
- message in minibuffer, don't exit emacs. If in server mode and
- editing file, do C-x # server-edit else do C-x 5 0
- delete-frame"
- (interactive)
- (if server-buffer-clients
- (server-edit)
- (delete-frame)))
-
-(global-set-key (kbd "C-c q") #'y/exit-emacs-client)
-
;; Swap two window positions.
(defun y/swap-windows ()
"Swaps two windows and leaves the cursor in the original one"
@@ -106,6 +90,16 @@
(define-key y-map (kbd "g") 'password-store-generate)
(define-key y-map (kbd "r") 'toggle-rot13-mode)
+(electric-indent-mode -1)
+
+;; Mac configuration
+(when (eq system-type 'darwin)
+ (setq mac-right-option-modifier 'none
+ mac-option-key-is-meta nil
+ mac-command-key-is-meta t
+ mac-command-modifier 'meta
+ mac-option-modifier nil))
+
(defun y/insert-date ()
"Insert a timestamp according to locale's date and time format."
(interactive)
@@ -114,15 +108,46 @@
(define-key y-map (kbd "d") 'y/insert-date)
;; Set backup directories into the tmp folder
-(setq backup-directory-alist
- `((".*" . ,temporary-file-directory)))
-(setq auto-save-file-name-transforms
- `((".*" ,temporary-file-directory t)))
+(defvar --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)
+ )
+
+;; Set sensitive data mode
+(setq auto-mode-alist
+ (append
+ (list '("\\.\\(vcf\\|gpg\\)\\'" . sensitive-minor-mode)
+ '("\\.sv\\'" . verilog-mode))
+ auto-mode-alist))
+
+;; Remove the ring for emacs
+(setq ring-bell-function 'ignore)
;; Automatically refresh files
(global-auto-revert-mode 1)
(setq auto-revert-verbose nil)
+;; Set sentence to end with double space
+(setq sentence-end-double-space t)
+
+;; Remove automatic `auto-fill-mode', and replace it by `visual-line-mode',
+;; which is a personal preference.
+(setq-default fill-column 100)
+(remove-hook 'text-mode-hook #'auto-fill-mode)
+(add-hook 'text-mode-hook #'+word-wrap-mode)
+(add-hook 'text-mode-hook #'visual-fill-column-mode)
+
;; Set up magit when C-c g is called
(use-package! magit
:bind (("C-x g" . magit-status)))
@@ -140,7 +165,7 @@
:config (global-hungry-delete-mode))
;; Org configuration
-(use-package org
+(use-package! org
:mode ("\\.org\\'" . org-mode)
:init
(map! :map org-mode-map
@@ -150,6 +175,9 @@
org-return-follows-link t
org-confirm-babel-evaluate nil
org-use-speed-commands t
+ org-hide-emphasis-markers t
+ org-adapt-indentation nil
+ org-cycle-separator-lines 1
org-structure-template-alist '(("a" . "export ascii")
("c" . "center")
("C" . "comment")
@@ -162,36 +190,75 @@
("v" . "verse")
("el" . "src emacs-lisp")
("d" . "definition")
- ("t" . "theorem"))))
+ ("t" . "theorem")))
+ (customize-set-variable 'org-blank-before-new-entry
+ '((heading . nil)
+ (plain-list-item . nil))))
-(use-package! org-id
- :after org)
+(use-package! org-contacts
+ :after org
+ :init
+ (setq org-contacts-files '("~/Dropbox/org/contacts.org")))
;; Disable org indent mode and remove C-, from the org-mode-map.
(after! org
- (setq org-startup-indented nil)
- (define-key org-mode-map (kbd "C-,") nil))
-
-;; Set agenda files, refile targets and todo keywords.
-(setq org-agenda-files (mapcar 'expand-file-name
- (list "~/Dropbox/org/inbox.org"
- "~/Dropbox/org/main.org"
- "~/Dropbox/org/tickler.org"
- (format-time-string "~/Dropbox/org/journals/%Y-%m.org")))
- org-refile-targets `(("~/Dropbox/org/main.org" :maxlevel . 2)
- ("~/Dropbox/org/someday.org" :level . 1)
- ("~/Dropbox/org/tickler.org" :maxlevel . 2)
- (,(format-time-string "~/Dropbox/org/journals/%Y-%m.org") :maxlevel . 2))
- org-todo-keywords '((sequence "TODO(t)" "WAITING(w)" "|" "DONE(d)" "CANCELLED(c)")))
-
-;; Set custom agenda commands which can be activated in the agenda viewer.
-(setq org-agenda-custom-commands
+ (define-key org-mode-map (kbd "C-,") nil)
+ ;; Set agenda files, refile targets and todo keywords.
+ (setq org-startup-indented nil
+ org-agenda-files (mapcar 'expand-file-name
+ (list "~/Dropbox/org/inbox.org"
+ "~/Dropbox/org/main.org"
+ "~/Dropbox/org/tickler.org"
+ "~/Dropbox/org/projects.org"
+ "~/Dropbox/org/pldi2020.org"
+ (format-time-string "~/Dropbox/org/journals/%Y-%m.org")))
+ org-refile-targets `(("~/Dropbox/org/main.org" :maxlevel . 2)
+ ("~/Dropbox/org/someday.org" :level . 1)
+ ("~/Dropbox/org/tickler.org" :maxlevel . 2)
+ ("~/Dropbox/org/projects.org" :level . 1)
+ (,(format-time-string "~/Dropbox/org/journals/%Y-%m.org") :maxlevel . 2))
+ ;; Set custom agenda commands which can be activated in the agenda viewer.
+ 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")))))
+ ((org-agenda-overriding-header "University"))))
+ org-log-done 'time
+ org-capture-templates
+ `(("t" "Todo" entry (file+headline ,(format-time-string "~/Dropbox/org/journals/%Y-%m.org") "Today")
+ "* TODO %^{Title}\nCreated: %U\n\n%?\n")
+ ("c" "Contacts" entry (file "~/Dropbox/org/contacts.org")
+ "* %(org-contacts-template-name)
+ :PROPERTIES:
+ :EMAIL: %(org-contacts-template-email)
+ :END:"))))
+
+;; Set up org ref for PDFs
+(use-package! org-ref
+ :after org
+ :bind (("C-c r" . org-ref-cite-hydra/body)
+ ("C-c b" . org-ref-bibtex-hydra/body))
+ :config
+ (setq org-ref-bibliography-notes "~/Dropbox/bibliography/notes.org"
+ org-ref-default-bibliography '("~/Dropbox/bibliography/references.bib")
+ org-ref-pdf-directory "~/Dropbox/bibliography/papers/")
+ (setq org-ref-completion-library 'org-ref-ivy-cite))
+
+;; Set up org-noter
+(use-package! org-noter
+ :after org
+ :commands org-noter
+ :config (setq org-noter-default-notes-file-names '("notes.org")
+ org-noter-notes-search-path '("~/org/bibliography")
+ org-noter-separate-notes-from-heading t))
+
+(use-package! org-superstar
+ :hook (org-mode . org-superstar-mode)
+ :config
+ (setq org-superstar-headline-bullets-list '("♠" "♣" "♥" "♦")
+ org-superstar-special-todo-items t))
;; Set up org registers to quickly jump to files that I use often.
(set-register ?l (cons 'file "~/.emacs.d/loader.org"))
@@ -199,18 +266,84 @@
(set-register ?i (cons 'file "~/Dropbox/org/inbox.org"))
(set-register ?c (cons 'file (format-time-string "~/Dropbox/org/journals/%Y-%m.org")))
+;; Bibtex stuff
+(use-package! ebib
+ :bind (("C-c y b" . ebib))
+ :init
+ (setq ebib-preload-bib-files '("~/Dropbox/bibliography/references.bib")
+ ebib-notes-directory "~/Dropbox/bibliography/notes/")
+ (add-to-list 'ebib-file-search-dirs "~/Dropbox/bibliography/papers")
+ (add-to-list 'ebib-file-associations '("pdf" . "open"))
+ (advice-add 'bibtex-generate-autokey :around
+ #'(lambda (orig-func &rest args)
+ (replace-regexp-in-string ":" "" (apply orig-func args)))))
+
;; Set up dictionaries
(setq ispell-dictionary "en_GB")
(use-package! flyspell
+ :hook (text-mode . flyspell-mode)
:config
(define-key flyspell-mode-map (kbd "C-.") nil)
(define-key flyspell-mode-map (kbd "C-,") nil))
;; Set up zettelkasten mode
(use-package! zettelkasten
+ :bind-keymap
+ ("C-c k" . zettelkasten-mode-map))
+
+;; Proof general configuration
+(setq proof-splash-enable nil
+ proof-auto-action-when-deactivating-scripting 'retract
+ proof-delete-empty-windows nil
+ proof-auto-raise-buffers t
+ coq-compile-before-require t)
+
+(setq coq-may-use-prettify nil
+ company-coq-prettify-symbols nil)
+(global-prettify-symbols-mode -1)
+
+(use-package smartparens
+ :bind (("M-[" . sp-backward-unwrap-sexp)
+ ("M-]" . sp-unwrap-sexp)
+ ("C-M-f" . sp-forward-sexp)
+ ("C-M-b" . sp-backward-sexp)
+ ("C-M-d" . sp-down-sexp)
+ ("C-M-a" . sp-backward-down-sexp)
+ ("C-M-e" . sp-up-sexp)
+ ("C-M-u" . sp-backward-up-sexp)
+ ("C-M-t" . sp-transpose-sexp)
+ ("C-M-n" . sp-next-sexp)
+ ("C-M-p" . sp-previous-sexp)
+ ("C-M-k" . sp-kill-sexp)
+ ("C-M-w" . sp-copy-sexp)
+ ("C-)" . sp-forward-slurp-sexp)
+ ("C-}" . sp-forward-barf-sexp)
+ ("C-(" . sp-backward-slurp-sexp)
+ ("C-{" . sp-backward-barf-sexp)
+ ("M-D" . sp-splice-sexp)
+ ("C-]" . sp-select-next-thing-exchange)
+ ("C-<left_bracket>" . sp-select-previous-thing)
+ ("C-M-]" . sp-select-next-thing)
+ ("M-F" . sp-forward-symbol)
+ ("M-B" . sp-backward-symbol)
+ ("M-r" . sp-split-sexp))
:config
- (zettelkasten-mode t))
+ (require 'smartparens-config)
+ (show-smartparens-global-mode +1)
+ (smartparens-global-mode 1))
+
+(use-package! ormolu
+ :hook (haskell-mode . ormolu-format-on-save-mode)
+ :bind
+ (:map haskell-mode-map
+ ("C-c r" . ormolu-format-buffer)))
+
+(after! writeroom-mode (setq +zen-text-scale 1))
+
+(setq pdf-view-use-scaling t)
+
+(setq doc-view-resolution 300)
;; Here are some additional functions/macros that could help you configure Doom:
;;
@@ -228,3 +361,26 @@
;;
;; You can also try 'gd' (or 'C-c g d') to jump to their definition and see how
;; they are implemented.
+(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-blank-before-new-entry (quote ((heading) (plain-list-item))))
+ '(package-selected-packages (quote (org-plus-contrib)))
+ '(safe-local-variable-values
+ (quote
+ ((eval add-to-list
+ (quote auto-mode-alist)
+ (quote
+ ("\\.v\\'" . verilog-mode)))
+ (eval setq org-ref-pdf-directory
+ (concat
+ (projectile-project-root)
+ "papers/"))))))
+(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.
+ )