Compare commits

...

19 Commits

Author SHA1 Message Date
548475904f Fix elfeed synchronization with Miniflux 2025-12-22 08:33:55 +01:00
941c2b87a0 Use ruff and ty for Python development 2025-12-22 08:33:55 +01:00
256156fc99 Speed up LSP via lsp-booster 2025-12-22 08:33:55 +01:00
a9e92105e2 Remove bibliography management functionality 2025-12-22 08:33:54 +01:00
4559fb9785 Group PDF settings in a single block 2025-12-22 08:33:54 +01:00
984fd5c3a9 Disable PDF recoloring by default 2025-12-22 08:33:54 +01:00
910f42bb4a Simplify projectile search path 2025-12-22 08:33:54 +01:00
8ffe2ef07b Improve elfeed synchronization configuration 2025-12-22 08:33:53 +01:00
325949c55d Add timesheet email template 2025-12-22 08:33:53 +01:00
d649a7af4f Add keybinding to upload files to Arduino 2025-12-22 08:33:53 +01:00
ae47f02a35 Format configuration files 2025-12-22 08:33:53 +01:00
f56be80d37 Tweak Org agenda display 2025-12-22 08:33:53 +01:00
007998544d Remove redundant credentials configuration 2025-12-22 08:33:52 +01:00
949e838ee4 Enable PDF smooth scrolling 2025-12-22 08:33:52 +01:00
41f5a4cb4e Display org agenda events of the week 2025-12-22 08:33:52 +01:00
15a2613fea Disable upload module 2025-12-22 08:33:52 +01:00
3d17701e86 Remove Uni email configuration 2025-12-22 08:33:51 +01:00
8bfbb89c50 Move RSS configuration to module 2025-12-22 08:33:51 +01:00
a903e5f436 Remove Wallabag configuration 2025-12-22 08:33:51 +01:00
9 changed files with 87 additions and 135 deletions

View File

@@ -10,9 +10,6 @@
;; Map elfeed to global keybinding ;; Map elfeed to global keybinding
(map! :leader :n "o e" #'=rss (map! :leader :n "o e" #'=rss
:desc "RSS reader") :desc "RSS reader")
;; Map wallabag to global keybinding
(map! :leader :n "o w" #'=wallabag
:desc "Read saved articles")
;; Keybindings for org-noter ;; Keybindings for org-noter
(map! :mode pdf-view-mode (map! :mode pdf-view-mode
:n "i" #'org-noter-insert-note :n "i" #'org-noter-insert-note
@@ -31,13 +28,11 @@
;; Keybindings for next/previous buffer ;; Keybindings for next/previous buffer
(map! :n "C-c j" #'previous-buffer) (map! :n "C-c j" #'previous-buffer)
(map! :n "C-c k" #'next-buffer) (map! :n "C-c k" #'next-buffer)
;; Keybindings for citar
(map! :leader :n "n B" #'citar-open-files
:desc "Open associated PDF with bibliography entry")
;; Keybindings for PlatformIO ;; Keybindings for PlatformIO
(map! :after platformio-mode (map! :after platformio-mode
:map platformio-mode-map :map platformio-mode-map
(:localleader (:localleader
:desc "Compile the project" "c c" #'platformio-build :desc "Compile the project" "c c" #'platformio-build
:desc "Upload the project" "c u" #'platformio-upload :desc "Upload the project" "c u" #'platformio-upload
:desc "Monitor the serial console" "c m" #'platformio-device-monitor)) :desc "Monitor the serial console" "c m" #'platformio-device-monitor
:desc "Upload data files" "c d" #'platformio-spiffs-upload))

View File

@@ -18,14 +18,6 @@
(smtpmail-smtp-user . "akasroua@gmail.com") (smtpmail-smtp-user . "akasroua@gmail.com")
(user-mail-address . "akasroua@gmail.com")) (user-mail-address . "akasroua@gmail.com"))
t) t)
(set-email-account! "ugent"
'((mu4e-sent-folder . "/ugent/sent")
(mu4e-drafts-folder . "/ugent/drafts")
(mu4e-trash-folder . "/ugent/trash")
(mu4e-refile-folder . "/ugent/archive")
(smtpmail-smtp-user . "amin.kasrouaouam@ugent.be")
(user-mail-address . "amin.kasrouaouam@ugent.be"))
t)
(set-email-account! "disroot" (set-email-account! "disroot"
'((mu4e-sent-folder . "/disroot/sent") '((mu4e-sent-folder . "/disroot/sent")
(mu4e-drafts-folder . "/disroot/drafts") (mu4e-drafts-folder . "/disroot/drafts")
@@ -46,8 +38,7 @@
;; Use shortcuts to access inboxes easily ;; Use shortcuts to access inboxes easily
(setq mu4e-maildir-shortcuts (setq mu4e-maildir-shortcuts
'(("/disroot/inbox" . ?d) '(("/disroot/inbox" . ?d)
("/gmail/inbox" . ?g) ("/gmail/inbox" . ?g)))
("/ugent/inbox" . ?u)))
;; Change mu4e bookmarks ;; Change mu4e bookmarks
(setq mu4e-bookmarks '((:name "Unread messages" :query "flag:unread AND NOT flag:trashed" :key 117) (setq mu4e-bookmarks '((:name "Unread messages" :query "flag:unread AND NOT flag:trashed" :key 117)
(:name "Today's messages" :query "date:today..now" :key 116) (:name "Today's messages" :query "date:today..now" :key 116)

30
+org.el
View File

@@ -17,13 +17,16 @@
:init :init
(setq org-agenda-skip-scheduled-if-done t (setq org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t org-agenda-skip-deadline-if-done t
org-agenda-skip-scheduled-delay-if-deadline t
org-agenda-skip-deadline-prewarning-if-scheduled t
org-deadline-warning-days 0
org-agenda-include-deadlines t org-agenda-include-deadlines t
org-agenda-tags-column 100 org-agenda-tags-column 100
org-agenda-block-separator nil org-agenda-block-separator nil
org-agenda-compact-blocks t org-agenda-compact-blocks t
org-agenda-start-day nil org-agenda-start-day nil
org-agenda-span 1 org-agenda-span 7
org-agenda-start-on-weekday nil) org-agenda-start-on-weekday 0)
(setq org-super-agenda-groups '((:name "Overdue" (setq org-super-agenda-groups '((:name "Overdue"
:deadline past :deadline past
:order 0) :order 0)
@@ -44,8 +47,8 @@
(:name "Errands" (:name "Errands"
:tag ("errand" "call") :tag ("errand" "call")
:order 10) :order 10)
(:name "Thesis" (:name "Projects"
:tag "thesis" :file-path "Projects"
:order 6) :order 6)
(:discard (:tag ("periodic" "birthday"))))) (:discard (:tag ("periodic" "birthday")))))
:config :config
@@ -92,10 +95,6 @@
(use-package! engrave-faces-latex (use-package! engrave-faces-latex
:after ox-latex) :after ox-latex)
(setq org-latex-src-block-backend 'engraved) (setq org-latex-src-block-backend 'engraved)
;; Set up bibliography management
(setq org-cite-global-bibliography '("~/Documents/Uni/Thesis/docs/bibliography.bib")
citar-bibliography org-cite-global-bibliography
citar-library-paths '("~/Documents/Uni/Thesis/bibliography"))
;; Add citeproc and metadata-file options to ox-pandoc ;; Add citeproc and metadata-file options to ox-pandoc
(after! ox-pandoc (after! ox-pandoc
(add-to-list 'org-pandoc-valid-options 'citeproc) (add-to-list 'org-pandoc-valid-options 'citeproc)
@@ -117,17 +116,6 @@
:file "~/Notes/Recipes.org" :file "~/Notes/Recipes.org"
:type entry :type entry
:template ("%(org-chef-get-recipe-from-url)")) :template ("%(org-chef-get-recipe-from-url)"))
("Reference" :keys "r"
:type entry
:file "~/Documents/Uni/Thesis/docs/Bibliography.org"
:function org-goto
:fetch-bibtex (lambda () (org-capture-ref-process-capture))
:org-entry (lambda () (org-capture-ref-get-org-entry))
:template
("%{fetch-bibtex}* %?%{space}%(org-capture-ref-get-bibtex-field :title)"
"#+begin_src bibtex"
"%(org-capture-ref-get-bibtex-field :bibtex-string)"
"#+end_src")))))
;; Fix org-chef scraping ;; Fix org-chef scraping
(setq org-chef-prefer-json-ld t) (setq org-chef-prefer-json-ld t)
;; Get the current state of org-pomodoro ;; Get the current state of org-pomodoro
@@ -182,10 +170,6 @@
(add-hook! 'org-mode-hook 'org-fragtog-mode) (add-hook! 'org-mode-hook 'org-fragtog-mode)
;; Auto tangle on save ;; Auto tangle on save
(add-hook! 'org-mode-hook 'org-auto-tangle-mode) (add-hook! 'org-mode-hook 'org-auto-tangle-mode)
;; Save bibtex to annotated bibliography with category selection
(setq org-goto-interface 'outline-path-completion
org-goto-max-level 1)
(use-package! org-capture-ref)
;; HACK Fix search folded sections ;; HACK Fix search folded sections
(setq org-fold-core-style 'overlays) (setq org-fold-core-style 'overlays)
(evil-select-search-module 'evil-search-module 'evil-search) (evil-select-search-module 'evil-search-module 'evil-search)

35
+rss.el Normal file
View File

@@ -0,0 +1,35 @@
;;; +rss.el -*- lexical-binding: t; -*-
;; Elfeed configuration
;;
;; Tweak appeareance of the main page
(setq elfeed-sort-order 'ascending
elfeed-search-filter "@all +unread"
elfeed-goodies/tag-column-width 0)
;; Synchronize elfeed with Miniflux
(use-package! elfeed-protocol
:after elfeed
:config
(setq elfeed-use-curl t
elfeed-protocol-enabled-protocols '(fever)
elfeed-protocol-feeds (list
(list "fever+https://coolneng@rss.psydnd.org"
:api-url "https://rss.psydnd.org/fever/"
:password (auth-source-pass-get 'secret "api/miniflux"))))
(elfeed-protocol-enable))
;; Update RSS feeds on startup
(add-hook! 'elfeed-search-mode-hook 'elfeed-update)
;; Use different font and show article in fullscreen
(setq elfeed-show-entry-switch #'switch-to-buffer)
(defadvice! +rss-elfeed-wrap-h-nicer ()
"Enhances an elfeed entry's readability by wrapping it to a width of
`fill-column' and centering it with `visual-fill-column-mode'."
:override #'+rss-elfeed-wrap-h
(setq-local truncate-lines nil
shr-width 160
visual-fill-column-center-text t
default-text-properties '(line-height 1.1))
(let ((inhibit-read-only t)
(inhibit-modification-hooks t))
(visual-fill-column-mode)
(setq-local shr-current-font '(:family "Lato" :height 1.1))
(set-buffer-modified-p nil)))

19
+ui.el
View File

@@ -6,10 +6,11 @@
;; Display Magit status in fullscreen ;; Display Magit status in fullscreen
(after! magit (after! magit
(setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)) (setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1))
;; Match pdf-tools colors to the theme and fit to page by default ;; Match pdf-tools colors to the theme, fit to page by default and enable smooth scrolling
(after! pdf-tools (after! pdf-tools
(setq pdf-view-midnight-colors '("#BBC2CF" . "#282C34")) (setq pdf-view-midnight-colors '("#BBC2CF" . "#282C34"))
(add-hook 'pdf-tools-enabled-hook 'pdf-view-midnight-minor-mode)) (setq-default pdf-view-display-size 'fit-width)
(add-hook 'pdf-tools-enabled-hook 'pdf-view-roll-minor-mode))
;; Customize modeline ;; Customize modeline
(setq doom-modeline-major-mode-icon t (setq doom-modeline-major-mode-icon t
doom-modeline-buffer-encoding nil) doom-modeline-buffer-encoding nil)
@@ -62,17 +63,13 @@
:icon (nerd-icons-octicon "nf-oct-rss" :face 'doom-dashboard-menu-title) :icon (nerd-icons-octicon "nf-oct-rss" :face 'doom-dashboard-menu-title)
:when (featurep! :app rss) :when (featurep! :app rss)
:face (:inherit (doom-dashboard-menu-title bold)) :face (:inherit (doom-dashboard-menu-title bold))
:action =rss) :action =rss)))
("Read saved articles"
:icon (nerd-icons-octicon "nf-oct-book" :face 'doom-dashboard-menu-title)
:face (:inherit (doom-dashboard-menu-title bold))
:action =wallabag)))
;; Restore previous session without confirmation ;; Restore previous session without confirmation
(defadvice! restore-no-confirm-session-quickload-a () (defadvice! restore-no-confirm-session-quickload-a ()
:override #'doom/quickload-session :override #'doom/quickload-session
(message "Restoring session...") (message "Restoring session...")
(doom-load-session) (doom-load-session)
(message "Session restored. Welcome back.")) (message "Session restored. Welcome back."))
;; Decrease size of icons in the modeline ;; Decrease size of icons in the modeline
(setq nerd-icons-scale-factor 1.0) (setq nerd-icons-scale-factor 1.0)
;; Increase size of the PlatformIO compilation buffer ;; Increase size of the PlatformIO compilation buffer

View File

@@ -8,18 +8,13 @@
(load! "+keybindings") (load! "+keybindings")
;; Set projects directories ;; Set projects directories
(setq projectile-project-search-path '(("~/Projects" . 2) (setq projectile-project-search-path '(("~/Projects" . 2)
("~/Documents/Work" . 1) ("~/Documents" . 5)
("~/Documents/Papers" . 0) ("~/Repos")
("~/Documents/Typesetting" . 1)
("~/Documents/Paperwork" . 1)
("~/Documents/Typesetting" . 1)
("~/Documents/Uni" . 3)
("~/Repos" . 1)
"~/.dotfiles" "~/.dotfiles"
"~/Notes")) "~/Notes"))
; Auto cleanup recentf ;; Auto cleanup recentf
(setq recentf-auto-cleanup 300) (setq recentf-auto-cleanup 300)
; Save backup files to ~/.cache and autosave files to ~/.cache/emacs ;; Save backup files to ~/.cache and autosave files to ~/.cache/emacs
(setq backup-directory-alist `(("." . "~/.cache")) (setq backup-directory-alist `(("." . "~/.cache"))
auto-save-list-file-prefix (concat "~/.cache")) auto-save-list-file-prefix (concat "~/.cache"))
;; Load org configuration ;; Load org configuration
@@ -86,63 +81,8 @@
(after! lsp-clangd (set-lsp-priority! 'clangd 2)) (after! lsp-clangd (set-lsp-priority! 'clangd 2))
;; Use relative line numbers (Usage: number <j/k>) ;; Use relative line numbers (Usage: number <j/k>)
(setq display-line-numbers-type 'relative) (setq display-line-numbers-type 'relative)
;; Use pass as auth-source ;; Set up RSS reader
(add-to-list 'auth-sources 'password-store) (after! elfeed (load! "+rss"))
;; Set up wallabag
(after! wallabag
(setq wallabag-host "https://wallabag.coolneng.duckdns.org"
wallabag-username "coolneng"
wallabag-password (auth-source-pass-get 'secret "api/wallabag")
wallabag-clientid (auth-source-pass-get "clientid" "api/wallabag")
wallabag-secret (auth-source-pass-get "api-secret" "api/wallabag")
wallabag-show-sidebar 't
wallabag-show-entry-switch 'switch-to-buffer
url-automatic-caching t)
(add-hook! 'wallabag-after-render-hook 'wallabag-search-update-and-clear-filter))
(add-hook! 'doom-real-buffer-functions
(defun +rss-buffer-p (buf)
(string-match-p "^\\*wallabag" (buffer-name buf))))
(defvar +wallabag-workspace-name "*wallabag*")
(defun =wallabag ()
"Activate (or switch to) `wallabag' in its workspace."
(interactive)
(if (modulep! :ui workspaces)
(progn
(+workspace-switch +wallabag-workspace-name t)
(doom/switch-to-scratch-buffer)
(wallabag)
(+workspace/display))
(setq +wallabag--wconf (current-window-configuration))
(delete-other-windows)
(switch-to-buffer (doom-fallback-buffer))
(wallabag)))
;; Set up elfeed
(after! elfeed
(setq elfeed-use-curl t)
(setq elfeed-protocol-feeds (list
(list "fever+https://coolneng@rss.coolneng.duckdns.org"
:api-url "https://rss.coolneng.duckdns.org/fever/"
:password (auth-source-pass-get 'secret "api/miniflux"))))
(setq elfeed-sort-order 'ascending
elfeed-search-filter "@all +unread"
elfeed-goodies/tag-column-width 0)
(elfeed-protocol-enable)
(add-hook! 'elfeed-search-mode-hook 'elfeed-update)
;; Use different font and show article in fullscreen
(setq elfeed-show-entry-switch #'switch-to-buffer)
(defadvice! +rss-elfeed-wrap-h-nicer ()
"Enhances an elfeed entry's readability by wrapping it to a width of
`fill-column' and centering it with `visual-fill-column-mode'."
:override #'+rss-elfeed-wrap-h
(setq-local truncate-lines nil
shr-width 160
visual-fill-column-center-text t
default-text-properties '(line-height 1.1))
(let ((inhibit-read-only t)
(inhibit-modification-hooks t))
(visual-fill-column-mode)
(setq-local shr-current-font '(:family "Lato" :height 1.1))
(set-buffer-modified-p nil))))
;; Set up the mail stack ;; Set up the mail stack
(after! mu4e (load! "+mail")) (after! mu4e (load! "+mail"))
;; HACK Enable AOT native compilation ;; HACK Enable AOT native compilation
@@ -154,9 +94,6 @@
:after cc-mode :after cc-mode
:config :config
(add-hook! 'c++-mode-hook (platformio-conditionally-enable))) (add-hook! 'c++-mode-hook (platformio-conditionally-enable)))
;; Disable Pyright's type checking
(after! lsp-pyright
(setq lsp-pyright-use-library-code-for-types nil))
;; Set indentation level to 2 ;; Set indentation level to 2
(setq tab-width 2) (setq tab-width 2)
;; Move buffer while maintaining cursor centered ;; Move buffer while maintaining cursor centered
@@ -167,3 +104,6 @@
(pixel-scroll-precision-mode) (pixel-scroll-precision-mode)
;; Restore previous session on startup ;; Restore previous session on startup
(add-hook 'window-setup-hook #'doom/quickload-session) (add-hook 'window-setup-hook #'doom/quickload-session)
;; Set ruff as the default python formatter
(after! python
(set-formatter! 'ruff :modes '(python-mode python-ts-mode)))

15
init.el
View File

@@ -11,7 +11,7 @@
(doom! :input (doom! :input
;;chinese ;;chinese
;;japanese ;;japanese
;layout ; auie,ctsrnm is the superior home row ;;layout ; auie,ctsrnm is the superior home row
:completion :completion
;;(company +tng) ; the ultimate code completion backend ;;(company +tng) ; the ultimate code completion backend
@@ -84,7 +84,7 @@
:tools :tools
;;ansible ;;ansible
biblio ; Writes a PhD for you (citation needed) ;;biblio ; Writes a PhD for you (citation needed)
debugger ; FIXME stepping through code, to help you add bugs debugger ; FIXME stepping through code, to help you add bugs
direnv direnv
;;docker ;;docker
@@ -94,7 +94,7 @@
;;gist ; interacting with github gists ;;gist ; interacting with github gists
lookup ; navigate your code and its documentation lookup ; navigate your code and its documentation
;;+docsets) ; ...or in Dash docsets locally ;;+docsets) ; ...or in Dash docsets locally
lsp ; M-x vscode (lsp +booster) ; M-x vscode
;;macos ; MacOS-specific commands ;;macos ; MacOS-specific commands
magit ; a git porcelain for Emacs magit ; a git porcelain for Emacs
make ; run make tasks from Emacs make ; run make tasks from Emacs
@@ -105,7 +105,7 @@
;;terraform ; infrastructure as code ;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux ;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree... tree-sitter ; syntax and parsing, sitting in a tree...
upload ; map local to remote projects via ssh/ftp ;;upload ; map local to remote projects via ssh/ftp
:lang :lang
;;agda ; types of types of types of types... ;;agda ; types of types of types of types...
@@ -159,14 +159,13 @@
+pandoc ; export-with-pandoc support +pandoc ; export-with-pandoc support
+pomodoro ; be fruitful with the tomato technique +pomodoro ; be fruitful with the tomato technique
+present) ; using org-mode for presentations +present) ; using org-mode for presentations
;;+pretty) ;;+pretty)
;;php ; perl's insecure younger brother ;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more ;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional ;;purescript ; javascript, but functional
(python +lsp ; beautiful is better than ugly (python +lsp ; beautiful is better than ugly
+pyright +poetry
+poetry +tree-sitter)
+tree-sitter)
;;qt ; the 'cutest' gui framework ever ;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs ;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6 ;;raku ; the artist formerly known as perl6

View File

@@ -9,8 +9,6 @@
(package! org-super-agenda) (package! org-super-agenda)
;; Save recipes to org file ;; Save recipes to org file
(package! org-chef) (package! org-chef)
;; Wallabag client
(package! wallabag :recipe (:host github :repo "chenyanming/wallabag.el" :files ("*.el" "*.alist" "*.css")))
;; Miniflux integration for elfeed ;; Miniflux integration for elfeed
(package! elfeed-protocol) (package! elfeed-protocol)
;; Prettier LaTeX source blocks ;; Prettier LaTeX source blocks
@@ -21,14 +19,15 @@
(package! org-auto-tangle) (package! org-auto-tangle)
;; Enable LaTeX previews automatically ;; Enable LaTeX previews automatically
(package! org-fragtog) (package! org-fragtog)
;; Fetch and save bibtex from Firefox
(package! asoc :recipe (:host github :repo "troyp/asoc.el"))
(package! doct :recipe (:host github :repo "progfolio/doct"))
(package! persid :recipe (:host github :repo "rougier/persid"))
(package! org-capture-ref :recipe (:host github :repo "yantar92/org-capture-ref"))
;; Arduino development ;; Arduino development
(package! platformio-mode) (package! platformio-mode)
;; Light theme ;; Light theme
(package! os1-theme :recipe (:host github :repo "sashimacs/os1-theme")) (package! os1-theme :recipe (:host github :repo "sashimacs/os1-theme"))
;; Move buffer while maintaining cursor centered ;; Move buffer while maintaining cursor centered
(package! centered-cursor-mode) (package! centered-cursor-mode)
;; Use the fork of pdf-tools with smooth scrolling
(unpin! pdf-tools)
(package! pdf-tools :recipe (:host github :repo "aikrahguzar/pdf-tools" :branch "child-frame-preview"))
(package! image-roll :recipe (:host github :repo "dalanicolai/image-roll.el"))
;; Declarative org capture templates
(package! doct :recipe (:host github :repo "progfolio/doct"))

View File

@@ -0,0 +1,12 @@
# -*- mode: snippet -*-
# name: work administration template
# key: work
# condition: t
# --
Dear colleague,
You will find attached to this mail my $1 for the month of `(format-time-string "%B %Y")`.
Kind regards,
Amin Kasrou Aouam