X-Git-Url: http://git.vanrenterghem.biz/Dotty.git/blobdiff_plain/22c7b5d659e1dc66aac094456af47ed5445c2075..f3c54e5eee9aff018f5006e5801a89248fb173d3:/emacs/.emacs.d/init.el diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el index 0e6bd9d..ec85953 100644 --- a/emacs/.emacs.d/init.el +++ b/emacs/.emacs.d/init.el @@ -10,7 +10,8 @@ ;; Configure printing using CUPS network printer (setq lpr-switches - (append '("-o raw") + (append '("-o raw" + "-o media=A4") lpr-switches)) ;; Enable the melpa archive for packages @@ -53,43 +54,112 @@ vc-follow-symlinks t (setq inferior-julia-program-name "/usr/bin/julia") ;; enable autocomplete -(use-package company +(use-package corfu :ensure t - :bind(:map company-active-map - ("" . nil) - ("RET" . nil) - ("C-" . company-complete-selection) - ([tab] . company-complete-common) - ("TAB" . company-complete-common)) - :config - (global-company-mode 1)) + ;; Optional customizations + :custom + (corfu-cycle t) ;; Enable cycling for `corfu-next/previous' + (corfu-auto t) ;; Enable auto completion + ;; (corfu-separator ?\s) ;; Orderless field separator + ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary + ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match + ;; (corfu-preview-current nil) ;; Disable current candidate preview + ;; (corfu-preselect 'prompt) ;; Preselect the prompt + ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches + ;; (corfu-scroll-margin 5) ;; Use scroll margin + + ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. + ;; :hook ((prog-mode . corfu-mode) + ;; (shell-mode . corfu-mode) + ;; (eshell-mode . corfu-mode)) + + ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can + ;; be used globally (M-/). See also the customization variable + ;; `global-corfu-modes' to exclude certain modes. + :init + (global-corfu-mode) + (corfu-history-mode)) + +(use-package cape + :ensure t + ;; Bind prefix keymap providing all Cape commands under a mnemonic key. + ;; Press C-c p ? to for help. + :bind ("C-c p" . cape-prefix-map) ;; Alternative keys: M-p, M-+, ... + ;; Alternatively bind Cape commands individually. + ;; :bind (("C-c p d" . cape-dabbrev) + ;; ("C-c p h" . cape-history) + ;; ("C-c p f" . cape-file) + ;; ...) + :init + ;; Add to the global default value of `completion-at-point-functions' which is + ;; used by `completion-at-point'. The order of the functions matters, the + ;; first function returning a result wins. Note that the list of buffer-local + ;; completion functions takes precedence over the global list. + (add-hook 'completion-at-point-functions #'cape-dict) ;; requires words package to be installed on Arch to provide /usr/share/dict/words + (add-hook 'completion-at-point-functions #'cape-dabbrev) + (add-hook 'completion-at-point-functions #'cape-file) + (add-hook 'completion-at-point-functions #'cape-elisp-block) + ;; (add-hook 'completion-at-point-functions #'cape-history) + ;; ... + ) (use-package org :ensure t - :after - denote :bind - (("C-c c" . org-capture) - ("C-c l" . org-store-link)) - :custom - (org-default-notes-file "~/Nextcloud/notes/inbox.org") - (org-capture-bookmark nil) - ;; Capture templates - (org-capture-templates - '(("f" "Fleeting note" item - (file+headline org-default-notes-file "Notes") - "- %?\nEntered on %U\n %i\n %a") - ("p" "Permanent note" plain - (file denote-last-path) - #'denote-org-capture - :no-save t - :immediate-finish nil - :kill-buffer t - :jump-to-captured t) - ("t" "New task" entry - (file+headline org-default-notes-file "Tasks") - "* TODO %i%?"))) + (("C-c c" . org-capture) + ("C-c l" . org-store-link) + ("C-c a" . org-agenda)) + :custom + (org-default-notes-file "~/Nextcloud/notes/inbox.org") + (org-agenda-files `(,org-default-notes-file "~/Nextcloud/notes/calendar.org")) + (org-capture-bookmark nil) + ;; Capture templates + (org-capture-templates + '(("f" "Fleeting note" entry + (file+headline org-default-notes-file "Notes") + "* %?\nEntered on %U\n %i\n %a") + ("b" "Tax receipt" item + (file "~/Documents/belastingen/FY24-25.org") + "* %t %a\n") + ("a" "Appointment" entry + (file+olp+datetree "~/Nextcloud/notes/calendar.org") + "* %?\n :PROPERTIES:\n :location: %^{Location}\n :END:\n%^T--%^T\n\n" + :jump-to-captured t + :tree-type month + :time-prompt t) + ("p" "Permanent note" plain + (file denote-last-path) + #'denote-org-capture + :no-save t + :immediate-finish nil + :kill-buffer t + :jump-to-captured t) + ("t" "New task" entry + (file+headline org-default-notes-file "Tasks") + "* TODO %i%?") + ("e" "Email follow-up" entry (file+headline org-default-notes-file "Tasks") + "* TODO %:fromname: %a %?\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+2d\"))"))) + ;; Agenda views + (org-agenda-custom-commands + '(("P" "Expired calendar events" ((tags "TIMESTAMP<=\"\""))) + ("n" "Agenda and all TODOs" ((agenda "") (alltodo ""))))) :config + ;; Configure refile + (defun my/opened-buffer-files () + "Return the list of org files currently opened in emacs" + (delq nil + (mapcar (lambda (x) + (if (and (buffer-file-name x) + (string-match "\\.org$" + (buffer-file-name x))) + (buffer-file-name x))) + (buffer-list)))) + (setq org-refile-targets `((my/opened-buffer-files :maxlevel . 9) + (,(file-expand-wildcards "~/Nextcloud/notes/*.org") :maxlevel . 1))) + (setq org-agenda-skip-scheduled-if-done t) + (setq org-agenda-skip-deadline-if-done t) + (setq org-agenda-start-on-weekday nil) + (setq org-log-done 'time) ;; Automatically flow lines based on window width and use ;; variable width fonts in org-mode. (add-hook 'org-mode-hook 'visual-line-mode) @@ -98,10 +168,20 @@ vc-follow-symlinks t (org-babel-do-load-languages 'org-babel-load-languages '((R . t) - (latex . t))) - ;; Security risk - This is somewhat ill-advised it appears - (setq org-confirm-babel-evaluate nil)) - + (latex . t)))) + +(use-package org-caldav + :ensure t + :config + (setq org-caldav-url "https://owncloud.vanrenterghem.biz/remote.php/dav/calendars/frederik") + (setq org-caldav-calendar-id "orgmode") + ;; Org filename where new entries from calendar stored + (setq org-caldav-inbox "~/Nextcloud/notes/calendar.org") + ;; Additional Org files to check for calendar events + (setq org-caldav-files nil) + ;; Usually a good idea to set the timezone manually + (setq org-icalendar-timezone "Australia/Perth")) + (use-package tex :ensure auctex :config @@ -123,6 +203,7 @@ vc-follow-symlinks t '(("\\.mdwn\\'" . markdown-mode) ("\\.md\\'" . markdown-mode) ("\\.yarn\\'" . markdown-mode) + ("\\.cpp\\'" . c++-mode) ("\\.js\\'" . js-mode) ("\\.json\\'" . js-mode) ("Makefile" . makefile-mode) @@ -153,7 +234,8 @@ vc-follow-symlinks t '("8d146df8bd640320d5ca94d2913392bc6f763d5bc2bb47bed8e14975017eea91" "9a977ddae55e0e91c09952e96d614ae0be69727ea78ca145beea1aae01ac78d2" "0cf95236abcf59e05b1ea69b4edd53d293a5baec4fe4c3484543fee99bfd2204" "80b00f3bf7cdbdca6c80aadfbbb03145f3d0aacf6bf2a559301e61109954e30a" default)) '(org-export-backends '(ascii html icalendar latex md odt)) '(package-selected-packages - '(nov eat mu4e ellama emms mpdel-embark libmpdel pass password-store fontaine osm orderless embark-consult embark consult jinx dired-preview ftable flx nerd-icons-dired nerd-icons all-the-icons-dired marginalia vertico denote ox-rss org-ql org-contrib mustache org-static-blog haskell-mode julia-mode elfeed-protocol ack company magit auctex lsp-mode elpy ## org htmlize leuven-theme lua-mode ess-smart-underscore ess-R-data-view ess))) + '(devdocs straight calfw calfw-org engrave-faces org-caldav nov eat mu4e ellama emms mpdel-embark libmpdel pass password-store fontaine osm orderless embark-consult embark consult jinx dired-preview ftable flx nerd-icons-dired nerd-icons all-the-icons-dired marginalia vertico denote ox-rss org-ql org-contrib mustache org-static-blog haskell-mode julia-mode elfeed-protocol ack company magit auctex lsp-mode elpy ## org htmlize leuven-theme lua-mode ess-smart-underscore ess-R-data-view ess)) + '(use-package-compute-statistics 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. @@ -220,7 +302,9 @@ vc-follow-symlinks t mu4e-sent-folder "/Sent" mu4e-drafts-folder "/Drafts" mu4e-trash-folder "/Trash" - message-kill-buffer-on-exit t) + message-kill-buffer-on-exit t + ;;Fixing duplicate UID errors when using mbsync and mu4e + mu4e-change-filenames-when-moving t) ;; attach files to mu4e messages by marking the file(s) in dired and pressing C-c RET C-a (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode) ;; Define all bookmarks starting with favourite query used in mailcount modeline @@ -288,8 +372,15 @@ vc-follow-symlinks t ;; Denote config (use-package denote :ensure t + :hook (dired-mode . denote-dired-mode) + :bind + (("C-c n n" . denote) + ("C-c n r" . denote-rename-file) + ("C-c n l" . denote-link) + ("C-c n b" . denote-backlinks)) :config - (setq denote-directory "/home/frederik/Nextcloud/notes/")) + (setq denote-directory "/home/frederik/Nextcloud/notes/") + (denote-rename-buffer-mode 1)) (use-package nerd-icons ;; :custom @@ -325,6 +416,11 @@ vc-follow-symlinks t (setq vertico-resize nil) (vertico-mode 1)) +;; Persist history over Emacs restarts. Vertico sorts by history position. +(use-package savehist + :init + (savehist-mode)) + ;; Use `marginalia' package. This will display useful ;; annotations next to entries in the minibuffer. For example, when ;; using M-x it will show a brief description of the command as well @@ -368,6 +464,23 @@ vc-follow-symlinks t ;; Other custom bindings ("M-y" . consult-yank-pop))) ;; orig. yank-pop +(use-package consult-mu + :ensure nil ;; cloned in + :load-path "~/.emacs.d/lisp/consult-mu" + :after (consult mu4e) + :custom + ;;maximum number of results shown in minibuffer + (consult-mu-maxnum 200) + ;;show preview when pressing any keys + (consult-mu-preview-key 'any) + ;;do not mark email as read when previewed + (consult-mu-mark-previewed-as-read nil) + ;;do not amrk email as read when selected. This is a good starting point to ensure you would not miss important emails marked as read by mistake especially when trying this package out. Later you can change this to t. + (consult-mu-mark-viewed-as-read nil) + ;; open the message in mu4e-view-buffer when selected. + (consult-mu-action #'consult-mu--view-action) + ) + ;; Configure `world-clock' (use-package time :ensure nil @@ -378,7 +491,8 @@ vc-follow-symlinks t ;; View PDFs in Emacs (pdf-loader-install) ; On demand loading, leads to faster startup time - +(setq pdf-misc-print-programm "/usr/bin/lpr") + (use-package magit :ensure t) @@ -453,6 +567,11 @@ vc-follow-symlinks t :variable-pitch-height 1.0 :line-spacing 1)))) +(use-package devdocs + :ensure t + :bind + ("C-h D" . devdocs-lookup)) + ;; Custom functions ;; Might want to run this automatically