Compare commits

..

5 Commits

11 changed files with 326 additions and 182 deletions

View File

@@ -1,6 +1,17 @@
;;; +keybindings.el -*- lexical-binding: t; -*- ;;; +keybindings.el -*- lexical-binding: t; -*-
;; Custom keybindings ;; Custom keybindings
;; ;;
;; Keybindings for next/previous buffer ;; Select target in Makefile compilation as default
(map! :n "C-c j" #'previous-buffer) (map! :leader :n "c c" #'makefile-executor-execute-project-target)
(map! :n "C-c k" #'next-buffer) ;; Keybindings for R markdown polymode
(map! :map poly-markdown+R-mode-map
:n "RET" #'polymode-eval-chunk
:desc "Evaluate code block")
;; Map elfeed to global keybinding
(map! :leader :n "o e" #'=rss)
;; Map wallabag to global keybinding
(map! :leader :n "o w" #'=wallabag)
;; Keybindings for org-noter
(map! :mode org-noter
:n "i" #'org-noter-insert-note
:desc "Insert note with a subheading")

45
+mail.el Normal file
View File

@@ -0,0 +1,45 @@
;;; +mail.el -*- lexical-binding: t; -*-
;; Mu4e configuration
;;
;; Set up the default email identity
(setq user-full-name "Amin Kasrou Aouam")
;; Use msmtp to send email
(setq sendmail-program (executable-find "msmtp")
send-mail-function #'smtpmail-send-it
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from")
message-send-mail-function #'message-send-mail-with-sendmail)
;; Account configuration
(set-email-account! "gmail"
'((mu4e-sent-folder . "/gmail/sent")
(mu4e-drafts-folder . "/gmail/drafts")
(mu4e-trash-folder . "/gmail/trash")
(mu4e-refile-folder . "/gmail/archive")
(smtpmail-smtp-user . "akasroua@gmail.com")
(user-mail-address . "akasroua@gmail.com"))
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"
'((mu4e-sent-folder . "/disroot/sent")
(mu4e-drafts-folder . "/disroot/drafts")
(mu4e-trash-folder . "/disroot/trash")
(mu4e-refile-folder . "/disroot/archive")
(smtpmail-smtp-user . "akasroua@disroot.org")
(user-mail-address . "akasroua@disroot.org"))
t)
;; Configure mu4e contexts
(setq mu4e-context-policy 'ask-if-none
mu4e-compose-context-policy 'ask-if-none)
;; Run lazy check when syncing
(setq mu4e-index-lazy-check t)
;; Use ISO dates
(setq mu4e-headers-date-format "%Y-%m-%d %H:%M")
;; Disable colors for HTML emails
(setq shr-use-colors nil)

99
+org.el
View File

@@ -8,7 +8,35 @@
;; Disable completion ;; Disable completion
(set-company-backend! 'org-mode nil) (set-company-backend! 'org-mode nil)
;; Turn off line numbers ;; Turn off line numbers
(add-hook! 'org-mode-hook (display-line-numbers-mode -1)) (add-hook 'org-mode-hook (lambda () (display-line-numbers-mode -1)))
;; Add Notes to agenda
(setq org-agenda-files '("~/Notes"))
;; Tailor Org super agenda
(use-package! org-super-agenda
:after org-agenda
:init
(setq org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t
org-agenda-include-deadlines t
org-agenda-block-separator nil
org-agenda-tags-column 100
org-agenda-compact-blocks t)
(setq org-super-agenda-groups '((:name "Overdue"
:deadline past)
(:name "Today"
:scheduled today
:deadline today
:time-grid t)
(:name "Important"
:priority "A")
(:name "Assignments"
:tag "labs"
:order 10)
(:name "Exams"
:tag "exams"
:order 10)))
:config
(org-super-agenda-mode))
;; Add timestamp to DONE task ;; Add timestamp to DONE task
(setq org-log-done 'time) (setq org-log-done 'time)
;; Print babel results to the buffer and export them ;; Print babel results to the buffer and export them
@@ -16,8 +44,9 @@
(:cache . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no")) (:cache . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no"))
org-babel-default-lob-header-args '((:exports . "both"))) org-babel-default-lob-header-args '((:exports . "both")))
;; Enter writeroom-mode in all org files ;; Enter writeroom-mode in all org files
(add-hook! 'org-mode-hook 'global-writeroom-mode) (add-hook 'org-mode-hook 'global-writeroom-mode)
(add-hook! 'org-mode-hook 'visual-line-mode) (setq writeroom-major-modes '(org-mode))
(add-hook 'org-mode-hook 'visual-line-mode)
;; Respect LANGUAGE export variable ;; Respect LANGUAGE export variable
(add-to-list 'org-latex-packages-alist '("AUTO" "babel" t ("pdflatex"))) (add-to-list 'org-latex-packages-alist '("AUTO" "babel" t ("pdflatex")))
;; Don't evaluate code blocks on export ;; Don't evaluate code blocks on export
@@ -37,20 +66,22 @@
;; Add org-plain-latex ;; Add org-plain-latex
(after! ox-latex (after! ox-latex
(add-to-list 'org-latex-classes (add-to-list 'org-latex-classes
'("org-plain-latex" '("org-plain-latex"
"\\documentclass{article} "\\documentclass{article}
[NO-DEFAULT-PACKAGES] [NO-DEFAULT-PACKAGES]
[PACKAGES] [PACKAGES]
[EXTRA]" [EXTRA]"
("\\section{%s}" . "\\section*{%s}") ("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))) ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
;; Prettify code block export ;; Prettify code block export
(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 citar-bibliography '("~/Documents/Education/Bibliography/references.bib"))
;; 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)
@@ -61,8 +92,30 @@
(setq org-pomodoro-length '45 (setq org-pomodoro-length '45
org-pomodoro-short-break-length '15 org-pomodoro-short-break-length '15
org-pomodoro-long-break-length '30 org-pomodoro-long-break-length '30
org-pomodoro-time-format "%.2m min" org-pomodoro-audio-player "pw-play")
org-pomodoro-keep-killed-pomodoro-time t) ;; Define capture templates
(setq org-capture-templates
'(("c" "Cookbook" entry (file "~/Notes/Recipes.org")
"%(org-chef-get-recipe-from-url)"
:empty-lines 1)))
;; Fix org-chef scraping
(setq org-chef-prefer-json-ld t)
;; Get the current state of org-pomodoro
(defun bergheim/org-clock-status ()
"Return the org time status - including any pomodoro activity"
(if (and (featurep 'org-pomodoro) (org-pomodoro-active-p))
(cl-case org-pomodoro-state
(:pomodoro
(format "%d min" (/ (org-pomodoro-remaining-seconds) 60)))
(:short-break
(format "Short break: %d min" (/ (org-pomodoro-remaining-seconds) 60)))
(:long-break
(format "Long break: %d min" (/ (org-pomodoro-remaining-seconds) 60)))
(:overtime
(format "Overtime! %d min" (/ (org-pomodoro-remaining-seconds) 60))))
(if (org-clocking-p)
(format "%s" (org-duration-from-minutes (org-clock-get-clocked-time)))
"")))
;; Save org-download images to an assets directory ;; Save org-download images to an assets directory
(after! org-download (after! org-download
(setq org-download-image-dir "assets/" (setq org-download-image-dir "assets/"
@@ -75,26 +128,10 @@
:hook (org-mode . org-modern-mode) :hook (org-mode . org-modern-mode)
:config :config
(setq org-modern-star [""])) (setq org-modern-star [""]))
(add-hook! 'org-agenda-finalize-hook #'org-modern-agenda)
;; Configure a better split and some default for org-noter ;; Configure a better split and some default for org-noter
(after! org-noter (after! org-noter
(setq org-noter-always-create-frame nil (setq org-noter-always-create-frame nil
org-noter-doc-split-fraction '(0.7 . 0.3) org-noter-doc-split-fraction '(0.7 . 0.3)
org-noter-default-heading-title " " org-noter-default-heading-title " "))
org-noter-separate-notes-from-heading nil)) ;; Increase the latex preview size
;; Show latex preview automatically and increase its size (setq org-format-latex-options (plist-put org-format-latex-options :scale 3.0))
(setq org-startup-with-latex-preview t
org-format-latex-options (plist-put org-format-latex-options :scale 3.0))
;; Close tags automatically
(after! smartparens
(sp-with-modes 'org-mode
(sp-local-pair "*" "*")
(sp-local-pair "_" "_")
(sp-local-pair "/" "/")
(sp-local-pair "~" "~")
(sp-local-pair "$" "$")))
;; Show raw latex when the cursor on the expression
(add-hook! 'org-mode-hook 'org-fragtog-mode)
;; HACK Fix search folded sections
(setq org-fold-core-style 'overlays)
(evil-select-search-module 'evil-search-module 'evil-search)

71
+ui.el
View File

@@ -3,40 +3,61 @@
;; Set Font and theme ;; Set Font and theme
(setq doom-font (font-spec :family "Iosevka Medium" :size 26) (setq doom-font (font-spec :family "Iosevka Medium" :size 26)
doom-theme 'doom-one) doom-theme 'doom-one)
;; Display Magit status in fullscreen
(after! magit
(setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1))
;; Match pdf-tools colors to the theme and fit to page by default
(after! pdf-tools
(setq pdf-view-midnight-colors '("#BBC2CF" . "#282C34"))
(setq-default pdf-view-display-size 'fit-width)
(add-hook 'pdf-tools-enabled-hook 'pdf-view-midnight-minor-mode))
;; Customize modeline ;; Customize modeline
(setq doom-modeline-buffer-encoding nil) (setq doom-modeline-major-mode-icon t
doom-modeline-persp-name t
doom-modeline-buffer-encoding nil
doom-modeline-persp-name nil)
;; Hide direnv environment variables popup
(setq direnv-always-show-summary nil)
;; Change splash-screen banner ;; Change splash-screen banner
(setq fancy-splash-image "~/.doom.d/assets/emacs.svg") (setq fancy-splash-image "~/.doom.d/assets/emacs.svg")
;; Disable LSP documentation popup
(after! lsp-ui
(setq lsp-ui-doc-enable nil
lsp-signature-auto-activate nil
lsp-enable-symbol-highlighting nil
lsp-ui-sideline-show-code-actions nil
lsp-modeline-code-actions-enable nil))
;; Shrink minibuffer ;; Shrink minibuffer
(after! vertico (after! vertico
(setq vertico-count 8)) (setq vertico-count 8))
;; Eliminate gaps between windows ;; Eliminate gaps between windows
(after! frame (after! frame
(remove-hook 'doom-init-ui-hook #'window-divider-mode)) (remove-hook 'doom-init-ui-hook #'window-divider-mode))
;; Disable lsp header line
(after! lsp-mode
(setq lsp-headerline-breadcrumb-enable nil))
;; Shrink terminal buffer
(set-popup-rule! "^\\*vterm" :size 0.1 :vslot -4 :select t :quit nil :ttl 0)
;; Show matching parenthesis on the minibuffer ;; Show matching parenthesis on the minibuffer
(after! smartparens (show-smartparens-global-mode t)) (after! smartparens (show-smartparens-global-mode t))
;; Modify the splash screen actions ;; Modify the splash screen actions
(setq +doom-dashboard-menu-sections (assoc-delete-all "Jump to bookmark" +doom-dashboard-menu-sections)
'(("Reload last session" (assoc-delete-all "Open private configuration" +doom-dashboard-menu-sections)
:icon (nerd-icons-octicon "nf-oct-history" :face 'doom-dashboard-menu-title) (assoc-delete-all "Open documentation" +doom-dashboard-menu-sections)
:when (cond ((modulep! :ui workspaces) (add-to-list '+doom-dashboard-menu-sections
(file-exists-p (expand-file-name persp-auto-save-fname persp-save-dir))) '("Open email client"
((require 'desktop nil t) :icon (all-the-icons-octicon "mail" :face 'doom-dashboard-menu-title)
(file-exists-p (desktop-full-file-name)))) :when (featurep! :email mu4e)
:face (:inherit (doom-dashboard-menu-title bold)) :face (:inherit (doom-dashboard-menu-title bold))
:action doom/quickload-session) :action =mu4e) t)
("Open org-agenda" (add-to-list '+doom-dashboard-menu-sections
:icon (nerd-icons-octicon "nf-oct-calendar" :face 'doom-dashboard-menu-title) '("RSS reader"
:when (fboundp 'org-agenda) :icon (all-the-icons-octicon "rss" :face 'doom-dashboard-menu-title)
:action org-agenda) :when (featurep! :app rss)
("Recently opened files" :face (:inherit (doom-dashboard-menu-title bold))
:icon (nerd-icons-faicon "nf-fa-file_text" :face 'doom-dashboard-menu-title) :action =rss) t)
:action recentf-open-files))) (add-to-list '+doom-dashboard-menu-sections
;; Restore previous session without confirmation '("Read saved articles"
(defadvice! restore-no-confirm-session-quickload-a () :icon (all-the-icons-octicon "book" :face 'doom-dashboard-menu-title)
:override #'doom/quickload-session :face (:inherit (doom-dashboard-menu-title bold))
(message "Restoring session...") :action =wallabag) t)
(doom-load-session)
(message "Session restored. Welcome back."))
;; Decrease size of icons in the modeline
(setq nerd-icons-scale-factor 1.0)

130
config.el
View File

@@ -6,56 +6,122 @@
(load! "+ui") (load! "+ui")
;; Load custom keybindings ;; Load custom keybindings
(load! "+keybindings") (load! "+keybindings")
;; Auto cleanup recentf ;; Set projects directories
(setq projectile-project-search-path '(("~/Projects" . 2)
("~/Documents/Work" . 1)
("~/Documents/Papers" . 0)
("~/Documents/Typesetting" . 1)
("~/Documents/Paperwork" . 1)
("~/Documents/Typesetting" . 1)
("~/Documents/Uni" . 3)
("~/Repos" . 1)
"~/.dotfiles"
"~/Notes"))
; 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
(setq org-directory "~/Notes")
(after! org (load! "+org")) (after! org (load! "+org"))
;; Disable completion and line numbers in Markdown ;; Disable completion and line numbers in Markdown
(add-hook! 'markdown-mode-hook (display-line-numbers-mode -1)) (add-hook 'markdown-mode-hook (lambda () (display-line-numbers-mode -1)))
(after! markdown (after! markdown
(set-company-backend! 'markdown-mode nil)) (set-company-backend! 'markdown-mode nil))
;; Enable writeroom-mode for text modes
(setq writeroom-major-modes '(org-mode markdown-mode)
+zen-text-scale 1.5)
(add-hook! 'markdown-mode-hook 'global-writeroom-mode)
;; Reload file from disk without confirmation ;; Reload file from disk without confirmation
(defun revert-buffer-no-confirm () (defun revert-buffer-no-confirm ()
(interactive) (interactive)
(revert-buffer :ignore-auto :noconfirm)) (revert-buffer :ignore-auto :noconfirm))
;; Align columns in CSV mode ;; Align columns in CSV mode
(add-hook! 'csv-mode-hook 'csv-align-mode) (add-hook 'csv-mode-hook 'csv-align-mode)
(add-hook! 'csv-mode-hook 'csv-header-line)
;; Close compilation buffer if successful ;; Close compilation buffer if successful
(defun close-compilation-buffer-if-successful (buffer string) (setq compilation-finish-functions
"Bury a compilation buffer if succeeded without warnings " (lambda (buf str)
(when (and (eq major-mode 'compilation-mode) (if (null (string-match ".*exited abnormally.*" str))
(string-match "finished" string) (progn
(not (run-at-time
(with-current-buffer buffer "0.5 sec" nil 'delete-windows-on
(search-forward "warning" nil t)))) (get-buffer-create "*compilation*"))
(run-with-timer 1 nil (message "No Compilation Errors!")))))
(lambda (buf)
(let ((window (get-buffer-window buf)))
(when (and (window-live-p window)
(eq buf (window-buffer window)))
(delete-window window))))
buffer)))
(add-hook 'compilation-finish-functions #'close-compilation-buffer-if-successful)
;; Map leader key for major mode to , ;; Map leader key for major mode to ,
(setq evil-snipe-override-evil-repeat-keys nil)
(setq doom-localleader-key ",") (setq doom-localleader-key ",")
;; Disable company mode in Nix
(setq-hook! 'nix-mode-hook company-idle-delay nil)
;; Trigger flycheck after save ;; Trigger flycheck after save
(setq flycheck-check-syntax-automatically '(save)) (setq flycheck-check-syntax-automatically '(save))
;; Ignore development databases folders
(after! lsp-mode
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.mysql\\'")
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.pgdata\\'"))
;; Ignore empty files
(after! projectile
(add-to-list 'projectile-globally-ignored-files ".gitkeep")
(add-to-list 'projectile-globally-ignored-files ".envrc")
(add-to-list 'projectile-globally-ignored-files ".project")
(add-to-list 'projectile-globally-ignored-directories ".direnv"))
;; Associate polymode to R markdown files
(add-to-list 'auto-mode-alist '("\\.[rR]md\\'" . poly-markdown+R-mode))
;; Set clangd as C/C++ LSP
(setq lsp-clients-clangd-args '("-j=3"
"--background-index"
"--clang-tidy"
"--completion-style=detailed"
"--header-insertion=never"
"--header-insertion-decorators=0"))
(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)
;; Set indentation level to 2 ;; Use pass as auth-source
(setq tab-width 2) (add-to-list 'auth-sources 'password-store)
;; Move buffer while maintaining cursor centered ;; Set up wallabag
(use-package! centered-cursor-mode (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-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 delta to view diffs in Magit
(use-package! magit-delta
:after magit
:config :config
(global-centered-cursor-mode)) (magit-delta-mode))
;; Restore previous session on startup ;; Set up the mail stack
(add-hook 'window-setup-hook #'doom/quickload-session) (after! mu4e (load! "+mail"))
;; HACK Enable AOT native compilation
(setq native-comp-deferred-compilation nil)
(after! (doom-packages straight)
(setq straight--native-comp-available t))

102
init.el
View File

@@ -11,10 +11,10 @@
(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
;;helm ; the *other* search engine for love and life ;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine... ;;ido ; the other *other* search engine...
;;(ivy ; a search engine for love and life ;;(ivy ; a search engine for love and life
@@ -33,48 +33,47 @@
(ligatures (ligatures
+extra +extra
+iosevka) ; ligatures and symbols to make your code pretty again +iosevka) ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API modeline ; snazzy, Atom-inspired modeline, plus API
nav-flash ; blink the current line after jumping nav-flash ; blink the current line after jumping
;;neotree ; a project drawer, like NERDTree for vim ;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on ophints ; highlight the region an operation acts on
(popup ; tame sudden yet inevitable temporary windows (popup ; tame sudden yet inevitable temporary windows
+all ; catch all popups that start with an asterix +all ; catch all popups that start with an asterix
+defaults) ; default popup rules +defaults) ; default popup rules
;;tabs ; an tab bar for Emacs ;;tabs ; an tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler ;;treemacs ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages ;;unicode ; extended unicode support for various languages
;;vc-gutter ; vcs diff in the fringe vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB vi-tilde-fringe ; fringe tildes to mark beyond EOB
window-select ; visually switch windows window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces workspaces ; tab emulation, persistence & separate workspaces
zen ; distraction-free coding or writing zen ; distraction-free coding or writing
:editor :editor
(evil +everywhere) ; come to the dark side, we have cookies (evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness (format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys ;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim ;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once ;;multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent ;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of ;;parinfer ; turn lisp into python, sort of
rotate-text ; cycle region at point between text candidates rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to snippets ; my elves. They type so I don't have to
;;word-wrap ; soft wrapping with language-aware indent ;;word-wrap ; soft wrapping with language-aware indent
:emacs :emacs
dired ; making dired pretty [functional] dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent electric ; smarter, keyword-based electric-indent
;;ibuffer ; interactive buffer management ;;ibuffer ; interactive buffer management
;;vc ; version-control and Emacs, sitting in a tree vc ; version-control and Emacs, sitting in a tree
:term :term
;;eshell ; the elisp shell that works everywhere ;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs ;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs ;;term ; basic terminal emulator for Emacs
;;vterm ; the best terminal emulation in Emacs vterm ; the best terminal emulation in Emacs
:checkers :checkers
syntax ; tasing you for every semicolon you forget syntax ; tasing you for every semicolon you forget
@@ -83,72 +82,69 @@
: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
;;editorconfig ; let someone else argue about tabs vs spaces ;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs ;;ein ; tame Jupyter notebooks with emacs
;;(eval +overlay) ; run code, run (also, repls) (eval +overlay) ; run code, run (also, repls)
;;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 ; 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
;;pass ; password manager for nerds ;;pass ; password manager for nerds
;;pdf ; pdf enhancements pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders ;;prodigy ; FIXME managing external services & code builders
;;rgb ; creating color strings ;;rgb ; creating color strings
;;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... 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...
;;assembly ; assembly for fun or debugging ;;assembly ; assembly for fun or debugging
;;beancount ; mind the GAAP ;;beancount ; mind the GAAP
;;(cc +lsp (cc +lsp) ; C > C++ == 1
;; +tree-sitter) ; C > C++ == 1
;;clojure ; java with a lisp ;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all ;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs ;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c ;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans ;;csharp ; unity, .NET, and mono shenanigans
data ; config/data formats data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall ;;dhall
;;(dart
;;+flutter
;;+lsp) ; paint ui and not much else
;;elixir ; erlang done right ;;elixir ; erlang done right
;;elm ; care for a cup of TEA? ;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age ;;erlang ; an elegant language for a more civilized age
;;(ess +lsp) ; emacs speaks statistics (ess +lsp) ; emacs speaks statistics
;;faust ; dsp, but you get to keep your soul ;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language ;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3 ;;fstar ; (dependent) types and (monadic) effects and Z3
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;gdscript ; the language you waited for ;;gdscript ; the language you waited for
;;(go +lsp (go +lsp) ; the hipster dialect
;; +tree-sitter) ; the hipster dialect ;;(haskell +lsp) ; a language that's lazier than I am
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python ;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on ;;idris ; a language you can depend on
;;(json +tree-sitter) ; At least it ain't XML json ; At least it ain't XML
;;(java +lsp (java +lsp) ; the poster child for carpal tunnel syndrome
;;+tree-sitter) ; the poster child for carpal tunnel syndrome
;;(javascript +lsp) ; all(hope(abandon(ye(who(enter(here)))))) ;;(javascript +lsp) ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB ;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script) ;;kotlin ; a better, slicker Java(Script)
;;(latex +lsp) ; writing papers in Emacs has never been so fun (latex +lsp) ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove ;;lean
;;ledger ; an accounting system in Emacs ;;ledger ; an accounting system in Emacs
;;lua ; one-based indices? one-based indices ;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c ;;nim ; python + lisp at the speed of c
;;(nix +tree-sitter); I hereby declare "nix geht mehr!" nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel ;;ocaml ; an objective camel
(org ; organize your plain life in plain text (org ; organize your plain life in plain text
+dragndrop ; drag & drop files/images into org buffers +dragndrop ; drag & drop files/images into org buffers
@@ -158,35 +154,35 @@
+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)
;;perl ; write code no one else can comprehend
;;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 +pyright
;;+poetry +poetry)
;;+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
;;rest ; Emacs as a REST client rest ; Emacs as a REST client
;;rst ; ReST in peace ;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good ;;scala ; java, but good
;;scheme ; a fully conniving family of lisps ;;scheme ; a fully conniving family of lisps
;;(sh +tree-sitter) ; she sells {ba,z,fi}sh shells on the C xor sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml ;;sml
;;solidity ; do you need a blockchain? No. ;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables? ;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance. ;;terra ; Earth and Moon in alignment for performance.
;;(web +tree-sitter); the tubes web ; the tubes
;;yaml ; JSON, but readable yaml ; JSON, but readable
;;zig ; C, but simpler ;;zig ; C, but simpler
:email :email
;;(mu4e +org +gmail) (mu4e +org +gmail)
;;notmuch ;;notmuch
;;(wanderlust +gmail) ;;(wanderlust +gmail)
@@ -195,7 +191,7 @@
;;emms ;;emms
;;everywhere ; *leave* Emacs!? You must be joking ;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize ;;irc ; how neckbeards socialize
;;rss ; emacs as an RSS reader rss ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought ;;twitter ; twitter client https://twitter.com/vnought
:config :config

View File

@@ -5,13 +5,11 @@
;; (package! some-package) ;; (package! some-package)
;; (package! another-package :recipe (:host github :repo "username/repo")) ;; (package! another-package :recipe (:host github :repo "username/repo"))
;; (package! builtin-package :disable t) ;; (package! builtin-package :disable t)
;; Prettier LaTeX source blocks (package! org-super-agenda)
(package! org-chef)
(package! emacsql-sqlite)
(package! wallabag :recipe (:host github :repo "chenyanming/wallabag.el" :files ("*.el" "*.alist" "*.css")))
(package! elfeed-protocol)
(package! magit-delta)
(package! engrave-faces) (package! engrave-faces)
;; Prettier org mode
(package! org-modern) (package! org-modern)
;; Enable LaTeX previews automatically
(package! org-fragtog)
;; Light theme
(package! os1-theme :recipe (:host github :repo "sashimacs/os1-theme"))
;; Move buffer while maintaining cursor centered
(package! centered-cursor-mode)

View File

@@ -1,9 +0,0 @@
# -*- mode: snippet -*-
# name: img
# uuid: img
# key: trigger-key
# condition: t
# --
#+CAPTION: $1
#+LABEL: $2
#+ATTR_HTML: :width 50%

View File

@@ -1,8 +0,0 @@
# -*- mode: snippet -*-
# name: email signature
# key: sign
# --
Best regards,
Amin Kasrou Aouam

View File

@@ -1,5 +0,0 @@
# -*- mode: snippet -*-
# name: formal greeting
# key: dear
# --
Dear Madam/Sir,

View File

@@ -1,8 +0,0 @@
# -*- mode: snippet -*-
# name: email signature
# key: frsign
# --
Cordialement,
Amin Kasrou Aouam