From 4cdfd1e9eaf35414b0c13b962e42373f1fa38458 Mon Sep 17 00:00:00 2001 From: Swarsel Date: Sat, 1 Jun 2024 01:55:32 +0200 Subject: [PATCH] Several Improvements to Emacs and NixOX Emacs: Fix: Emacs mouse wheel scrolling was overshooting sometimes Feat: Hide more useless messages in the echo are (NO CHILDREN) Feat: Add presentation mode using org-present Fix: Fix org-tempo angled brackets insertion Feat: better math mode in AucTeX in lieu of some yasnippet bits Fix: add treesitter modes to eglot for automatic startup Fix: Make mu4e automatic sender address choosing more robust NixOS: Feat: Add oama derivation Feat: Add main email sender address to config Feat: Add opacity toggle (for use with presentation mode) --- Emacs.org | 429 ++++++++++++++++++++++++----------- Nix.org | 127 +++++++---- profiles/common/home.nix | 24 ++ profiles/common/nixos.nix | 101 +++++---- programs/emacs/init.el | 411 +++++++++++++++++++++++---------- scripts/checkelement.sh | 0 scripts/toggle_opacity.sh | 11 + secrets/general/secrets.yaml | 5 +- 8 files changed, 782 insertions(+), 326 deletions(-) mode change 100644 => 100755 scripts/checkelement.sh create mode 100755 scripts/toggle_opacity.sh diff --git a/Emacs.org b/Emacs.org index 8e1b6b6..8fc1cdd 100644 --- a/Emacs.org +++ b/Emacs.org @@ -119,6 +119,7 @@ Here I set up some things that are too minor to put under other categories. (global-hl-line-mode 1) ;; (setq redisplay-dont-pause t) ;; obsolete (setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown + (setq blink-matching-paren nil) ;; this makes the cursor jump around annoyingly (delete-selection-mode 1) (setq vc-follow-symlinks t) (setq require-final-newline t) @@ -183,19 +184,33 @@ By default, emacs scrolls half a page when reaching the bottom of the buffer. Th #+begin_src emacs-lisp - (setq scroll-step 1 - scroll-margin 4 - scroll-conservatively 101) + ;; (setq scroll-step 1 + ;; scroll-margin 4 + ;; scroll-conservatively 101) - ;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time - ;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling - ;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse + (setq mouse-wheel-scroll-amount + '(1 + ((shift) . 5) + ((meta) . 0.5) + ((control) . text-scale)) + mouse-drag-copy-region nil + make-pointer-invisible t + mouse-wheel-progressive-speed t + mouse-wheel-follow-mouse t) + + (setq-default scroll-preserve-screen-position t + scroll-conservatively 1 + scroll-margin 0 + next-screen-context-lines 0) + ;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time + ;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling + ;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse - (pixel-scroll-precision-mode 1) + (pixel-scroll-precision-mode 1) - ;; (use-package fast-scroll - ;; :ensure nil - ;; :init (fast-scroll-mode 1)) + ;; (use-package fast-scroll + ;; :ensure nil + ;; :init (fast-scroll-mode 1)) #+end_src @@ -307,6 +322,7 @@ This function will check if a directory for which a file we want to open exists; (advice-add 'mu4e--server-filter :around #'suppress-messages) (advice-add 'org-unlogged-message :around #'suppress-messages) (advice-add 'magit-auto-revert-mode--init-kludge :around #'suppress-messages) + (advice-add 'push-mark :around #'suppress-messages) ;; to reenable ;; (advice-remove 'timer-event-handler #'suppress-messages) @@ -322,7 +338,7 @@ This function will check if a directory for which a file we want to open exists; ;; (advice-add 'message :around #'who-called-me?) ;; disable to stop receiving backtrace - ;; (advice-remove 'message #'who-called-me?) + (advice-remove 'message #'who-called-me?) #+end_src @@ -400,6 +416,8 @@ Base emacs undo logic is very useful, but not easy to understand. I prefer undo- "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mp" '(popper-toggle :which-key "popper") "md" '(dirvish :which-key "dirvish") + "o" '(:ignore o :which-key "org") + "op" '((lambda () (interactive) (org-present)) :which-key "org-present") ;; "c" '(:ignore c :which-key "capture") ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") ;; "cs" '(markdown-download-screenshot :which-key "screenshot") @@ -994,24 +1012,26 @@ Soon I want to try out this new hot stuff - just at the moment there is too much - ;; ;; Set faces for heading levels - ;; (with-eval-after-load 'org-faces (dolist (face '((org-level-1 . 1.3) - ;; (org-level-2 . 1.2) - ;; (org-level-3 . 1.15) - ;; (org-level-4 . 1.1) - ;; (org-level-5 . 1.1) - ;; (org-level-6 . 1.1) - ;; (org-level-7 . 1.1) - ;; (org-level-8 . 1.1))) - ;; (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'regular :height (cdr face))) + ;; Set faces for heading levels + (with-eval-after-load 'org-faces (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 0.9) + (org-level-3 . 0.9) + (org-level-4 . 0.9) + (org-level-5 . 0.9) + (org-level-6 . 0.9) + (org-level-7 . 0.9) + (org-level-8 . 0.9))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) - ;; ;; Ensure that anything that should be fixed-pitch in Org files appears that way - ;; (set-face-attribute 'org-block nil :inherit '(fixed-pitch)) - ;; (set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch)) - ;; (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) - ;; (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) - ;; (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) - ;; (set-face-attribute 'org-checkbox nil :inherit '(fixed-pitch))) + ;; Ensure that anything that should be fixed-pitch in Org files appears that way + (set-face-attribute 'org-block nil :inherit 'fixed-pitch) + (set-face-attribute 'org-table nil :inherit 'fixed-pitch) + (set-face-attribute 'org-formula nil :inherit 'fixed-pitch) + (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch)) + (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) + (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) + (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) + (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)) #+end_src @@ -1070,12 +1090,14 @@ Soon I want to try out this new hot stuff - just at the moment there is too much #+begin_src emacs-lisp - (org-babel-do-load-languages - 'org-babel-load-languages - '((emacs-lisp . t) - (python . t))) + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (python . t) + (shell . t) + )) - (push '("conf-unix" . conf-unix) org-src-lang-modes) + (push '("conf-unix" . conf-unix) org-src-lang-modes) #+end_src @@ -1088,7 +1110,7 @@ Soon I want to try out this new hot stuff - just at the moment there is too much (require 'org-tempo) (add-to-list 'org-structure-template-alist '("sh" . "src shell")) (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) - (add-to-list 'org-structure-template-alist '("py" . "src python")) + (add-to-list 'org-structure-template-alist '("py" . "src python :results output")) (add-to-list 'org-structure-template-alist '("nix" . "src nix :tangle")) #+end_src @@ -1119,19 +1141,20 @@ Soon I want to try out this new hot stuff - just at the moment there is too much #+begin_src emacs-lisp - (use-package auctex - :ensure nil) + (use-package auctex) (setq TeX-auto-save t) (setq TeX-save-query nil) (setq TeX-parse-self t) - (setq-default TeX-master nil) + (setq-default TeX-master nil) (add-hook 'LaTeX-mode-hook 'visual-line-mode) (add-hook 'LaTeX-mode-hook 'flyspell-mode) (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) (add-hook 'LaTeX-mode-hook 'reftex-mode) - - ;; (setq reftex-plug-into-AUCTeX t) + (setq LaTeX-electric-left-right-brace t) + (setq font-latex-fontify-script nil) + (setq TeX-electric-sub-and-superscript t) + ;; (setq reftex-plug-into-AUCTeX t) #+end_src @@ -1192,6 +1215,114 @@ Soon I want to try out this new hot stuff - just at the moment there is too much #+end_src +** Presentations + +#+begin_src emacs-lisp + + (use-package org-present + :bind (:map org-present-mode-keymap + ("q" . org-present-quit) + ("" . swarsel/org-present-prev) + ("" . 'ignore) + ("" . 'ignore) + ("" . swarsel/org-present-next)) + :hook ((org-present-mode . swarsel/org-present-start) + (org-present-mode-quit . swarsel/org-present-end)) + ) + + + (use-package hide-mode-line) + + (defun swarsel/org-present-start () + (setq-local face-remapping-alist '((default (:height 1.5) variable-pitch) + (header-line (:height 4.0) variable-pitch) + (org-document-title (:height 1.75) org-document-title) + (org-code (:height 1.55) org-code) + (org-verbatim (:height 1.55) org-verbatim) + (org-block (:height 1.25) org-block) + (org-block-begin-line (:height 0.7) org-block) + )) + (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 1.2) + (org-level-3 . 1.2) + (org-level-4 . 1.2) + (org-level-5 . 1.2) + (org-level-6 . 1.2) + (org-level-7 . 1.2) + (org-level-8 . 1.2))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) + + (setq header-line-format " ") + (setq visual-fill-column-width 90) + (setq indicate-buffer-boundaries nil) + (setq inhibit-message nil) + (breadcrumb-mode 0) + (org-display-inline-images) + (global-hl-line-mode 0) + (display-line-numbers-mode 0) + (org-modern-mode 0) + (evil-insert-state 1) + (beginning-of-buffer) + (org-present-read-only) + ;; (org-present-hide-cursor) + (swarsel/org-present-slide) + ) + + (defun swarsel/org-present-end () + (setq-local face-remapping-alist '((default variable-pitch default))) + (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 0.9) + (org-level-3 . 0.9) + (org-level-4 . 0.9) + (org-level-5 . 0.9) + (org-level-6 . 0.9) + (org-level-7 . 0.9) + (org-level-8 . 0.9))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) + (setq header-line-format nil) + (setq visual-fill-column-width 150) + (setq indicate-buffer-boundaries t) + (setq inhibit-message nil) + (breadcrumb-mode 1) + (global-hl-line-mode 1) + (display-line-numbers-mode 1) + (org-remove-inline-images) + (org-modern-mode 1) + (evil-normal-state 1) + ;; (org-present-show-cursor) + ) + + (defun swarsel/org-present-slide () + (org-overview) + (org-show-entry) + (org-show-children) + ) + + (defun swarsel/org-present-prev () + (interactive) + (org-present-prev) + (swarsel/org-present-slide)) + + (defun swarsel/org-present-next () + (interactive) + (unless (eobp) + (org-next-visible-heading 1) + (org-fold-show-entry)) + (when (eobp) + (org-present-next) + (swarsel/org-present-slide) + )) + + (defun clojure-leave-clojure-mode-function () + ) + + (add-hook 'buffer-list-update-hook #'clojure-leave-clojure-mode-function) + (add-hook 'org-present-mode-hook 'swarsel/org-present-start) + (add-hook 'org-present-mode-quit-hook 'swarsel/org-present-end) + (add-hook 'org-present-after-navigate-functions 'swarsel/org-present-slide) + +#+end_src + * Nix Mode #+begin_src emacs-lisp @@ -1590,21 +1721,27 @@ I am not completely sure on electric-pair-mode yet, sometimes it is very helpful #+begin_src emacs-lisp - (use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) + (use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) - (use-package highlight-parentheses - :config - (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) - (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) - (global-highlight-parentheses-mode t)) + (use-package highlight-parentheses + :config + (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) + (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) + (global-highlight-parentheses-mode t)) - (electric-pair-mode 1) - (setq electric-pair-preserve-balance nil) - ;; don't try to be overly smart - (setq electric-pair-delete-adjacent-pairs nil) - ;; don't skip newline when auto-pairing parenthesis - (setq electric-pair-skip-whitespace-chars '(9 32)) + (electric-pair-mode 1) + (setq electric-pair-preserve-balance nil) + ;; don't try to be overly smart + (setq electric-pair-delete-adjacent-pairs nil) + ;; don't skip newline when auto-pairing parenthesis + (setq electric-pair-skip-whitespace-chars '(9 32)) + + ;; in org-mode buffers, do not pair < and > in order not to interfere with org-tempo + (add-hook 'org-mode-hook (lambda () + (setq-local electric-pair-inhibit-predicate + `(lambda (c) + (if (char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))) #+end_src @@ -1921,58 +2058,58 @@ The following block is 100% stolen from Dominik :P #+begin_src emacs-lisp - (setq wtf/latex-greek-prefix "'") - (setq wtf/latex-math-prefix "`") + ;; (setq wtf/latex-greek-prefix "'") + ;; (setq wtf/latex-math-prefix "`") (setq wtf/latex-mathbb-prefix "''") (setq swarsel/latex-mathcal-prefix "``") (use-package yasnippet :config - (setq swtf/greek-alphabet - '(("a" . "\\alpha") - ("b" . "\\beta" ) - ("g" . "\\gamma") - ("d" . "\\delta") - ("e" . "\\epsilon") - ("z" . "\\zeta") - ("h" . "\\eta") - ("th" . "\\theta") - ("i" . "\\iota") - ("k" . "\\kappa") - ("l" . "\\lambda") - ("m" . "\\mu") - ("n" . "\\nu") - ("x" . "\\xi") - ("p" . "\\pi") - ("r" . "\\rho") - ("s" . "\\sigma") - ("t" . "\\tau") - ("u" . "\\upsilon") - ("f" . "\\phi") - ("c" . "\\chi") - ("v" . "\\psi") - ("o" . "\\omega"))) + ;; (setq swtf/greek-alphabet + ;; '(("a" . "\\alpha") + ;; ("b" . "\\beta" ) + ;; ("g" . "\\gamma") + ;; ("d" . "\\delta") + ;; ("e" . "\\epsilon") + ;; ("z" . "\\zeta") + ;; ("h" . "\\eta") + ;; ("th" . "\\theta") + ;; ("i" . "\\iota") + ;; ("k" . "\\kappa") + ;; ("l" . "\\lambda") + ;; ("m" . "\\mu") + ;; ("n" . "\\nu") + ;; ("x" . "\\xi") + ;; ("p" . "\\pi") + ;; ("r" . "\\rho") + ;; ("s" . "\\sigma") + ;; ("t" . "\\tau") + ;; ("u" . "\\upsilon") + ;; ("f" . "\\phi") + ;; ("c" . "\\chi") + ;; ("v" . "\\psi") + ;; ("o" . "\\omega"))) ;; The same for capitalized letters - (dolist (elem swtf/greek-alphabet) - (let ((key (car elem)) - (value (cdr elem))) - (when (string-equal key (downcase key)) - (add-to-list 'swtf/greek-alphabet - (cons - (capitalize (car elem)) - (concat - (substring value 0 1) - (capitalize (substring value 1 2)) - (substring value 2))))))) + ;; (dolist (elem swtf/greek-alphabet) + ;; (let ((key (car elem)) + ;; (value (cdr elem))) + ;; (when (string-equal key (downcase key)) + ;; (add-to-list 'swtf/greek-alphabet + ;; (cons + ;; (capitalize (car elem)) + ;; (concat + ;; (substring value 0 1) + ;; (capitalize (substring value 1 2)) + ;; (substring value 2))))))) - (yas-define-snippets - 'latex-mode - (mapcar - (lambda (elem) - (list (concat wtf/latex-greek-prefix (car elem)) (cdr elem) (concat "Greek letter " (car elem)))) - swtf/greek-alphabet)) + ;; (yas-define-snippets + ;; 'latex-mode + ;; (mapcar + ;; (lambda (elem) + ;; (list (concat wtf/latex-greek-prefix (car elem)) (cdr elem) (concat "Greek letter " (car elem)))) + ;; swtf/greek-alphabet)) (setq wtf/english-alphabet '("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z")) @@ -2031,7 +2168,6 @@ The following block is 100% stolen from Dominik :P #+end_src - *** Duplicate Lines #+begin_src emacs-lisp @@ -2139,9 +2275,13 @@ The following block is 100% stolen from Dominik :P :ensure nil :hook ((python-mode + python-ts-mode c-mode + c-ts-mode c++-mode + c++-ts-mode tex-mode + LaTeX-mode ) . (lambda () (progn (eglot-ensure) (add-hook 'before-save-hook 'eglot-format nil 'local)))) @@ -2437,46 +2577,81 @@ The following block is 100% stolen from Dominik :P #+begin_src emacs-lisp - (use-package mu4e - :ensure nil - ;; :load-path "/usr/share/emacs/site-lisp/mu4e/" - ;;:defer 20 ; Wait until 20 seconds after startup - :config + (use-package mu4e + :ensure nil + ;; :load-path "/usr/share/emacs/site-lisp/mu4e/" + ;;:defer 20 ; Wait until 20 seconds after startup + :config - ;; This is set to 't' to avoid mail syncing issues when using mbsync - (setq send-mail-function 'sendmail-send-it) - (setq mu4e-change-filenames-when-moving t) - (setq mu4e-mu-binary (executable-find "mu")) + ;; This is set to 't' to avoid mail syncing issues when using mbsync + (setq send-mail-function 'sendmail-send-it) + (setq mu4e-change-filenames-when-moving t) + (setq mu4e-mu-binary (executable-find "mu")) - (setq mu4e-update-interval 180) - (setq mu4e-get-mail-command "mbsync -a") - (setq mu4e-maildir "~/Mail") + (setq mu4e-update-interval 180) + (setq mu4e-get-mail-command "mbsync -a") + (setq mu4e-maildir "~/Mail") - ;; enable inline images - (setq mu4e-view-show-images t) - ;; use imagemagick, if available - (when (fboundp 'imagemagick-register-types) - (imagemagick-register-types)) + ;; enable inline images + (setq mu4e-view-show-images t) + ;; use imagemagick, if available + (when (fboundp 'imagemagick-register-types) + (imagemagick-register-types)) - (setq mu4e-drafts-folder "/Drafts") - (setq mu4e-sent-folder "/Sent Mail") - (setq mu4e-refile-folder "/All Mail") - (setq mu4e-trash-folder "/Trash") + (setq mu4e-drafts-folder "/Drafts") + (setq mu4e-sent-folder "/Sent Mail") + (setq mu4e-refile-folder "/All Mail") + (setq mu4e-trash-folder "/Trash") - (setq mu4e-maildir-shortcuts - '((:maildir "/leon/Inbox" :key ?1) - (:maildir "/nautilus/Inbox" :key ?2) - (:maildir "/mrswarsel/Inbox" :key ?3) - (:maildir "/Sent Mail" :key ?s) - (:maildir "/Trash" :key ?t) - (:maildir "/Drafts" :key ?d) - (:maildir "/All Mail" :key ?a)))) + (setq mu4e-maildir-shortcuts + '((:maildir "/leon/Inbox" :key ?1) + (:maildir "/nautilus/Inbox" :key ?2) + (:maildir "/mrswarsel/Inbox" :key ?3) + (:maildir "/Sent Mail" :key ?s) + (:maildir "/Trash" :key ?t) + (:maildir "/Drafts" :key ?d) + (:maildir "/All Mail" :key ?a)))) - (setq user-mail-address "leon.schwarzaeugl@gmail.com" - user-full-name "Leon Schwarzäugl") + (setq user-mail-address "leon@swarsel.win" + user-full-name "Leon Schwarzäugl") (setq mu4e-hide-index-messages t) + (setq mu4e-user-mail-address-list '(leon.schwarzaeugl@gmail.com leon@swarsel.win nautilus.dw@gmail.com mrswarsel@gmail.com)) + + (defun swarsel/mu4e-switch-account () + (interactive) + (let ((account (completing-read "Select account: " mu4e-user-mail-address-list))) + (setq user-mail-address account))) + + (defun swarsel/mu4e-rfs--matching-address () + (cl-loop for to-data in (mu4e-message-field mu4e-compose-parent-message :to) + for to-email = (pcase to-data + (`(_ . email) email) + (x (mu4e-contact-email x))) + for to-name = (pcase to-data + (`(_ . name) name) + (x (mu4e-contact-name x))) + when (mu4e-user-mail-address-p to-email) + return (list to-name to-email))) + + (defun swarsel/mu4e-send-from-correct-address () + (when mu4e-compose-parent-message + (save-excursion + (when-let ((dest (swarsel/mu4e-rfs--matching-address))) + (cl-destructuring-bind (from-user from-addr) dest + (setq user-mail-address from-addr) + (message-position-on-field "From") + (message-beginning-of-line) + (delete-region (point) (line-end-position)) + (insert (format "%s <%s>" (or from-user user-full-name) from-addr))))))) + + (defun swarsel/mu4e-restore-default () + (setq user-mail-address "leon@swarsel.win" + user-full-name "Leon Schwarzäugl")) + + (add-hook 'mu4e-compose-mode-hook #'swarsel/mu4e-send-from-correct-address) + (add-hook 'mu4e-compose-post-hook #'swarsel/mu4e-restore-default) #+end_src ** mu4e-alert diff --git a/Nix.org b/Nix.org index 7341724..3decd46 100644 --- a/Nix.org +++ b/Nix.org @@ -4485,49 +4485,74 @@ Mostly used to install some compilers and lps's that I want to have available wh #+begin_src nix :tangle profiles/common/nixos.nix - environment.systemPackages = with pkgs; [ - # yubikey packages - gnupg - yubikey-personalization - yubikey-personalization-gui - yubico-pam - # yubioath-flutter - # yubikey-manager - # yubikey-manager-qt - yubico-piv-tool - # pinentry + environment.systemPackages = with pkgs; [ + # yubikey packages + gnupg + yubikey-personalization + yubikey-personalization-gui + yubico-pam + # yubioath-flutter + # yubikey-manager + # yubikey-manager-qt + yubico-piv-tool + # pinentry - # theme related - gnome.adwaita-icon-theme + # theme related + gnome.adwaita-icon-theme - # kde-connect - xdg-desktop-portal + # kde-connect + xdg-desktop-portal - # bluetooth - bluez + # bluetooth + bluez - # lsp-related ------------------------------- - # nix - # latex - texlab - ghostscript_headless - # wireguard - wireguard-tools - # rust - rust-analyzer - clippy - rustfmt - # cpp - clang-tools - # + cuda - cudatoolkit - #lsp-bridge / python - gcc - gdb - (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 epc orjson sexpdata six setuptools paramiko numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) - # (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) - # -------------------------------------------- - ]; + # lsp-related ------------------------------- + # nix + # latex + texlab + ghostscript_headless + # wireguard + wireguard-tools + # rust + rust-analyzer + clippy + rustfmt + # cpp + clang-tools + # + cuda + cudatoolkit + #lsp-bridge / python + gcc + gdb + (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 epc orjson sexpdata six setuptools paramiko numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) + # (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) + # -------------------------------------------- + + (stdenv.mkDerivation { + name = "oama"; + + src = pkgs.fetchurl { + name = "oama"; + url = "https://github.com/pdobsan/oama/releases/download/0.13.1/oama-0.13.1-Linux-x86_64-static.tgz"; + sha256 = "sha256-OTdCObVfnMPhgZxVtZqehgUXtKT1iyqozdkPIV+i3Gc="; + }; + + phases = [ + "unpackPhase" + ]; + + unpackPhase = '' + mkdir -p $out/bin + tar xvf $src -C $out/ + mv $out/oama-0.13.1-Linux-x86_64-static/oama $out/bin/ + ''; + + }) + + + + + ]; #+end_src @@ -4978,6 +5003,7 @@ I use sops-nix to handle secrets that I want to have available on my machines at sops.secrets.mrswarsel = {path = "/run/user/1000/secrets/mrswarsel";}; sops.secrets.nautilus = {path = "/run/user/1000/secrets/nautilus";}; sops.secrets.leon = {path = "/run/user/1000/secrets/leon";}; + sops.secrets.swarselmail = {path = "/run/user/1000/secrets/swarselmail";}; sops.secrets.caldav = {path = "${config.home.homeDirectory}/.emacs.d/.caldav";}; # sops.secrets.leon = { }; # sops.secrets.nautilus = { }; @@ -5565,6 +5591,28 @@ zsh is clearly the most convenient shell for me and it happens to be super neat }; }; + accounts.swarsel = { + address = "leon@swarsel.win"; + userName = "8227dc594dd515ce232eda1471cb9a19"; + realName = "Leon Schwarzäugl"; + passwordCommand = "cat ${config.sops.secrets.swarselmail.path}"; + smtp = { + host = "in-v3.mailjet.com"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + mu.enable = false; + msmtp = { + enable = true; + }; + mbsync = { + enable = false; + }; + }; + accounts.nautilus = { primary = false; address = "nautilus.dw@gmail.com"; @@ -6365,6 +6413,7 @@ I am currently using SwayFX, which adds some nice effects to sway, like rounded "${modifier}+x" = "exec \"bash ~/.dotfiles/scripts/checkkitty.sh\""; "${modifier}+d" = "exec \"bash ~/.dotfiles/scripts/checkdiscord.sh\""; "${modifier}+Shift+r" = "exec \"bash ~/.dotfiles/scripts/restart.sh\""; + "${modifier}+Shift+t" = "exec \"bash ~/.dotfiles/scripts/toggle_opacity.sh\""; "${modifier}+Shift+F12" = "move scratchpad"; "${modifier}+F12" = "scratchpad show"; "${modifier}+c" = "exec qalculate-gtk"; diff --git a/profiles/common/home.nix b/profiles/common/home.nix index 16aa1ed..dfa9305 100644 --- a/profiles/common/home.nix +++ b/profiles/common/home.nix @@ -288,6 +288,7 @@ sops.validateSopsFiles = false; sops.secrets.mrswarsel = {path = "/run/user/1000/secrets/mrswarsel";}; sops.secrets.nautilus = {path = "/run/user/1000/secrets/nautilus";}; sops.secrets.leon = {path = "/run/user/1000/secrets/leon";}; +sops.secrets.swarselmail = {path = "/run/user/1000/secrets/swarselmail";}; sops.secrets.caldav = {path = "${config.home.homeDirectory}/.emacs.d/.caldav";}; # sops.secrets.leon = { }; # sops.secrets.nautilus = { }; @@ -796,6 +797,28 @@ accounts.email = { }; }; + accounts.swarsel = { + address = "leon@swarsel.win"; + userName = "8227dc594dd515ce232eda1471cb9a19"; + realName = "Leon Schwarzäugl"; + passwordCommand = "cat ${config.sops.secrets.swarselmail.path}"; + smtp = { + host = "in-v3.mailjet.com"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + mu.enable = false; + msmtp = { + enable = true; + }; + mbsync = { + enable = false; + }; + }; + accounts.nautilus = { primary = false; address = "nautilus.dw@gmail.com"; @@ -1545,6 +1568,7 @@ wayland.windowManager.sway = { "${modifier}+x" = "exec \"bash ~/.dotfiles/scripts/checkkitty.sh\""; "${modifier}+d" = "exec \"bash ~/.dotfiles/scripts/checkdiscord.sh\""; "${modifier}+Shift+r" = "exec \"bash ~/.dotfiles/scripts/restart.sh\""; + "${modifier}+Shift+t" = "exec \"bash ~/.dotfiles/scripts/toggle_opacity.sh\""; "${modifier}+Shift+F12" = "move scratchpad"; "${modifier}+F12" = "scratchpad show"; "${modifier}+c" = "exec qalculate-gtk"; diff --git a/profiles/common/nixos.nix b/profiles/common/nixos.nix index 73d684e..49d44cb 100644 --- a/profiles/common/nixos.nix +++ b/profiles/common/nixos.nix @@ -96,48 +96,73 @@ }; environment.systemPackages = with pkgs; [ - # yubikey packages - gnupg - yubikey-personalization - yubikey-personalization-gui - yubico-pam - # yubioath-flutter - # yubikey-manager - # yubikey-manager-qt - yubico-piv-tool - # pinentry + # yubikey packages + gnupg + yubikey-personalization + yubikey-personalization-gui + yubico-pam + # yubioath-flutter + # yubikey-manager + # yubikey-manager-qt + yubico-piv-tool + # pinentry - # theme related - gnome.adwaita-icon-theme + # theme related + gnome.adwaita-icon-theme - # kde-connect - xdg-desktop-portal + # kde-connect + xdg-desktop-portal - # bluetooth - bluez + # bluetooth + bluez - # lsp-related ------------------------------- - # nix - # latex - texlab - ghostscript_headless - # wireguard - wireguard-tools - # rust - rust-analyzer - clippy - rustfmt - # cpp - clang-tools - # + cuda - cudatoolkit - #lsp-bridge / python - gcc - gdb - (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 epc orjson sexpdata six setuptools paramiko numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) - # (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) - # -------------------------------------------- -]; + # lsp-related ------------------------------- + # nix + # latex + texlab + ghostscript_headless + # wireguard + wireguard-tools + # rust + rust-analyzer + clippy + rustfmt + # cpp + clang-tools + # + cuda + cudatoolkit + #lsp-bridge / python + gcc + gdb + (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 epc orjson sexpdata six setuptools paramiko numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) + # (python3.withPackages(ps: with ps; [ jupyter ipython pyqt5 numpy pandas scipy matplotlib requests debugpy flake8 gnureadline python-lsp-server])) + # -------------------------------------------- + +(stdenv.mkDerivation { + name = "oama"; + + src = pkgs.fetchurl { + name = "oama"; + url = "https://github.com/pdobsan/oama/releases/download/0.13.1/oama-0.13.1-Linux-x86_64-static.tgz"; + sha256 = "sha256-OTdCObVfnMPhgZxVtZqehgUXtKT1iyqozdkPIV+i3Gc="; + }; + + phases = [ + "unpackPhase" + ]; + + unpackPhase = '' + mkdir -p $out/bin + tar xvf $src -C $out/ + mv $out/oama-0.13.1-Linux-x86_64-static/oama $out/bin/ + ''; + +}) + + + + + ]; programs.dconf.enable = true; programs.evince.enable = true; diff --git a/programs/emacs/init.el b/programs/emacs/init.el index 1d6996a..8f2dd93 100644 --- a/programs/emacs/init.el +++ b/programs/emacs/init.el @@ -66,6 +66,7 @@ (global-hl-line-mode 1) ;; (setq redisplay-dont-pause t) ;; obsolete (setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown + (setq blink-matching-paren nil) ;; this makes the cursor jump around annoyingly (delete-selection-mode 1) (setq vc-follow-symlinks t) (setq require-final-newline t) @@ -109,19 +110,33 @@ ;;(set-face-background 'highlight-indent-guides-even-face "steel blue") ;;(set-face-foreground 'highlight-indent-guides-character-face "dark violet") -(setq scroll-step 1 - scroll-margin 4 - scroll-conservatively 101) +;; (setq scroll-step 1 + ;; scroll-margin 4 + ;; scroll-conservatively 101) -;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time -;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling -;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse +(setq mouse-wheel-scroll-amount + '(1 + ((shift) . 5) + ((meta) . 0.5) + ((control) . text-scale)) + mouse-drag-copy-region nil + make-pointer-invisible t + mouse-wheel-progressive-speed t + mouse-wheel-follow-mouse t) -(pixel-scroll-precision-mode 1) +(setq-default scroll-preserve-screen-position t + scroll-conservatively 1 + scroll-margin 0 + next-screen-context-lines 0) + ;; (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time + ;; (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling + ;; (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse -;; (use-package fast-scroll -;; :ensure nil -;; :init (fast-scroll-mode 1)) + (pixel-scroll-precision-mode 1) + + ;; (use-package fast-scroll + ;; :ensure nil + ;; :init (fast-scroll-mode 1)) (defun swarsel/with-buffer-name-prompt-and-make-subdirs () (let ((parent-directory (file-name-directory buffer-file-name))) @@ -206,6 +221,7 @@ (advice-add 'mu4e--server-filter :around #'suppress-messages) (advice-add 'org-unlogged-message :around #'suppress-messages) (advice-add 'magit-auto-revert-mode--init-kludge :around #'suppress-messages) +(advice-add 'push-mark :around #'suppress-messages) ;; to reenable ;; (advice-remove 'timer-event-handler #'suppress-messages) @@ -221,7 +237,7 @@ ;; (advice-add 'message :around #'who-called-me?) ;; disable to stop receiving backtrace -;; (advice-remove 'message #'who-called-me?) +(advice-remove 'message #'who-called-me?) (use-package undo-tree ;; :init (global-undo-tree-mode) @@ -280,6 +296,8 @@ "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mp" '(popper-toggle :which-key "popper") "md" '(dirvish :which-key "dirvish") + "o" '(:ignore o :which-key "org") + "op" '((lambda () (interactive) (org-present)) :which-key "org-present") ;; "c" '(:ignore c :which-key "capture") ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") ;; "cs" '(markdown-download-screenshot :which-key "screenshot") @@ -768,24 +786,26 @@ ;; (swarsel/org-font-setup) ) -;; ;; Set faces for heading levels -;; (with-eval-after-load 'org-faces (dolist (face '((org-level-1 . 1.3) -;; (org-level-2 . 1.2) -;; (org-level-3 . 1.15) -;; (org-level-4 . 1.1) -;; (org-level-5 . 1.1) -;; (org-level-6 . 1.1) -;; (org-level-7 . 1.1) -;; (org-level-8 . 1.1))) -;; (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'regular :height (cdr face))) +;; Set faces for heading levels +(with-eval-after-load 'org-faces (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 0.9) + (org-level-3 . 0.9) + (org-level-4 . 0.9) + (org-level-5 . 0.9) + (org-level-6 . 0.9) + (org-level-7 . 0.9) + (org-level-8 . 0.9))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) -;; ;; Ensure that anything that should be fixed-pitch in Org files appears that way -;; (set-face-attribute 'org-block nil :inherit '(fixed-pitch)) -;; (set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch)) -;; (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) -;; (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) -;; (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) -;; (set-face-attribute 'org-checkbox nil :inherit '(fixed-pitch))) + ;; Ensure that anything that should be fixed-pitch in Org files appears that way + (set-face-attribute 'org-block nil :inherit 'fixed-pitch) + (set-face-attribute 'org-table nil :inherit 'fixed-pitch) + (set-face-attribute 'org-formula nil :inherit 'fixed-pitch) + (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch)) + (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) + (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) + (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) + (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)) ;; Show hidden emphasis markers ;; (use-package org-appear @@ -814,14 +834,16 @@ (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) - (python . t))) + (python . t) + (shell . t) + )) (push '("conf-unix" . conf-unix) org-src-lang-modes) (require 'org-tempo) (add-to-list 'org-structure-template-alist '("sh" . "src shell")) (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) -(add-to-list 'org-structure-template-alist '("py" . "src python")) +(add-to-list 'org-structure-template-alist '("py" . "src python :results output")) (add-to-list 'org-structure-template-alist '("nix" . "src nix :tangle")) (defun swarsel/org-babel-tangle-config () @@ -838,19 +860,20 @@ (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'swarsel/org-babel-tangle-config))) -(use-package auctex - :ensure nil) +(use-package auctex) (setq TeX-auto-save t) (setq TeX-save-query nil) (setq TeX-parse-self t) -(setq-default TeX-master nil) + (setq-default TeX-master nil) (add-hook 'LaTeX-mode-hook 'visual-line-mode) (add-hook 'LaTeX-mode-hook 'flyspell-mode) (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) (add-hook 'LaTeX-mode-hook 'reftex-mode) - -;; (setq reftex-plug-into-AUCTeX t) +(setq LaTeX-electric-left-right-brace t) +(setq font-latex-fontify-script nil) +(setq TeX-electric-sub-and-superscript t) + ;; (setq reftex-plug-into-AUCTeX t) (use-package org-download :after org @@ -885,6 +908,108 @@ ("src" "»" "∥"))) :hook (org-mode . org-modern-mode)) +(use-package org-present + :bind (:map org-present-mode-keymap + ("q" . org-present-quit) + ("" . swarsel/org-present-prev) + ("" . 'ignore) + ("" . 'ignore) + ("" . swarsel/org-present-next)) + :hook ((org-present-mode . swarsel/org-present-start) + (org-present-mode-quit . swarsel/org-present-end)) + ) + + + (use-package hide-mode-line) + + (defun swarsel/org-present-start () + (setq-local face-remapping-alist '((default (:height 1.5) variable-pitch) + (header-line (:height 4.0) variable-pitch) + (org-document-title (:height 1.75) org-document-title) + (org-code (:height 1.55) org-code) + (org-verbatim (:height 1.55) org-verbatim) + (org-block (:height 1.25) org-block) + (org-block-begin-line (:height 0.7) org-block) + )) + (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 1.2) + (org-level-3 . 1.2) + (org-level-4 . 1.2) + (org-level-5 . 1.2) + (org-level-6 . 1.2) + (org-level-7 . 1.2) + (org-level-8 . 1.2))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) + + (setq header-line-format " ") + (setq visual-fill-column-width 90) + (setq indicate-buffer-boundaries nil) + (setq inhibit-message nil) + (breadcrumb-mode 0) + (org-display-inline-images) + (global-hl-line-mode 0) + (display-line-numbers-mode 0) + (org-modern-mode 0) + (evil-insert-state 1) + (beginning-of-buffer) + (org-present-read-only) + ;; (org-present-hide-cursor) + (swarsel/org-present-slide) + ) + + (defun swarsel/org-present-end () + (setq-local face-remapping-alist '((default variable-pitch default))) + (dolist (face '((org-level-1 . 1.1) + (org-level-2 . 0.9) + (org-level-3 . 0.9) + (org-level-4 . 0.9) + (org-level-5 . 0.9) + (org-level-6 . 0.9) + (org-level-7 . 0.9) + (org-level-8 . 0.9))) + (set-face-attribute (car face) nil :font swarsel-alt-font :weight 'medium :height (cdr face))) + (setq header-line-format nil) + (setq visual-fill-column-width 150) + (setq indicate-buffer-boundaries t) + (setq inhibit-message nil) + (breadcrumb-mode 1) + (global-hl-line-mode 1) + (display-line-numbers-mode 1) + (org-remove-inline-images) + (org-modern-mode 1) + (evil-normal-state 1) + ;; (org-present-show-cursor) + ) + + (defun swarsel/org-present-slide () + (org-overview) + (org-show-entry) + (org-show-children) + ) + + (defun swarsel/org-present-prev () + (interactive) + (org-present-prev) + (swarsel/org-present-slide)) + + (defun swarsel/org-present-next () + (interactive) + (unless (eobp) + (org-next-visible-heading 1) + (org-fold-show-entry)) + (when (eobp) + (org-present-next) + (swarsel/org-present-slide) + )) + +(defun clojure-leave-clojure-mode-function () + ) + +(add-hook 'buffer-list-update-hook #'clojure-leave-clojure-mode-function) + (add-hook 'org-present-mode-hook 'swarsel/org-present-start) + (add-hook 'org-present-mode-quit-hook 'swarsel/org-present-end) + (add-hook 'org-present-after-navigate-functions 'swarsel/org-present-slide) + (use-package nix-mode :mode "\\.nix\\'") @@ -1147,20 +1272,26 @@ ) (use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) + :hook (prog-mode . rainbow-delimiters-mode)) -(use-package highlight-parentheses - :config - (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) - (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) - (global-highlight-parentheses-mode t)) + (use-package highlight-parentheses + :config + (setq highlight-parentheses-colors '("black" "white" "black" "black" "black" "black" "black")) + (setq highlight-parentheses-background-colors '("magenta" "blue" "cyan" "green" "yellow" "orange" "red")) + (global-highlight-parentheses-mode t)) -(electric-pair-mode 1) -(setq electric-pair-preserve-balance nil) -;; don't try to be overly smart -(setq electric-pair-delete-adjacent-pairs nil) -;; don't skip newline when auto-pairing parenthesis -(setq electric-pair-skip-whitespace-chars '(9 32)) + (electric-pair-mode 1) + (setq electric-pair-preserve-balance nil) + ;; don't try to be overly smart + (setq electric-pair-delete-adjacent-pairs nil) + ;; don't skip newline when auto-pairing parenthesis + (setq electric-pair-skip-whitespace-chars '(9 32)) + + ;; in org-mode buffers, do not pair < and > in order not to interfere with org-tempo +(add-hook 'org-mode-hook (lambda () + (setq-local electric-pair-inhibit-predicate + `(lambda (c) + (if (char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))) ;; (use-package company ;; :after lsp-mode @@ -1405,58 +1536,58 @@ ;; (use-package yasnippet-snippets) -(setq wtf/latex-greek-prefix "'") -(setq wtf/latex-math-prefix "`") +;; (setq wtf/latex-greek-prefix "'") +;; (setq wtf/latex-math-prefix "`") (setq wtf/latex-mathbb-prefix "''") (setq swarsel/latex-mathcal-prefix "``") (use-package yasnippet :config - (setq swtf/greek-alphabet - '(("a" . "\\alpha") - ("b" . "\\beta" ) - ("g" . "\\gamma") - ("d" . "\\delta") - ("e" . "\\epsilon") - ("z" . "\\zeta") - ("h" . "\\eta") - ("th" . "\\theta") - ("i" . "\\iota") - ("k" . "\\kappa") - ("l" . "\\lambda") - ("m" . "\\mu") - ("n" . "\\nu") - ("x" . "\\xi") - ("p" . "\\pi") - ("r" . "\\rho") - ("s" . "\\sigma") - ("t" . "\\tau") - ("u" . "\\upsilon") - ("f" . "\\phi") - ("c" . "\\chi") - ("v" . "\\psi") - ("o" . "\\omega"))) + ;; (setq swtf/greek-alphabet + ;; '(("a" . "\\alpha") + ;; ("b" . "\\beta" ) + ;; ("g" . "\\gamma") + ;; ("d" . "\\delta") + ;; ("e" . "\\epsilon") + ;; ("z" . "\\zeta") + ;; ("h" . "\\eta") + ;; ("th" . "\\theta") + ;; ("i" . "\\iota") + ;; ("k" . "\\kappa") + ;; ("l" . "\\lambda") + ;; ("m" . "\\mu") + ;; ("n" . "\\nu") + ;; ("x" . "\\xi") + ;; ("p" . "\\pi") + ;; ("r" . "\\rho") + ;; ("s" . "\\sigma") + ;; ("t" . "\\tau") + ;; ("u" . "\\upsilon") + ;; ("f" . "\\phi") + ;; ("c" . "\\chi") + ;; ("v" . "\\psi") + ;; ("o" . "\\omega"))) ;; The same for capitalized letters - (dolist (elem swtf/greek-alphabet) - (let ((key (car elem)) - (value (cdr elem))) - (when (string-equal key (downcase key)) - (add-to-list 'swtf/greek-alphabet - (cons - (capitalize (car elem)) - (concat - (substring value 0 1) - (capitalize (substring value 1 2)) - (substring value 2))))))) + ;; (dolist (elem swtf/greek-alphabet) + ;; (let ((key (car elem)) + ;; (value (cdr elem))) + ;; (when (string-equal key (downcase key)) + ;; (add-to-list 'swtf/greek-alphabet + ;; (cons + ;; (capitalize (car elem)) + ;; (concat + ;; (substring value 0 1) + ;; (capitalize (substring value 1 2)) + ;; (substring value 2))))))) - (yas-define-snippets - 'latex-mode - (mapcar - (lambda (elem) - (list (concat wtf/latex-greek-prefix (car elem)) (cdr elem) (concat "Greek letter " (car elem)))) - swtf/greek-alphabet)) + ;; (yas-define-snippets + ;; 'latex-mode + ;; (mapcar + ;; (lambda (elem) + ;; (list (concat wtf/latex-greek-prefix (car elem)) (cdr elem) (concat "Greek letter " (car elem)))) + ;; swtf/greek-alphabet)) (setq wtf/english-alphabet '("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z")) @@ -1602,9 +1733,13 @@ :ensure nil :hook ((python-mode + python-ts-mode c-mode + c-ts-mode c++-mode + c++-ts-mode tex-mode + LaTeX-mode ) . (lambda () (progn (eglot-ensure) (add-hook 'before-save-hook 'eglot-format nil 'local)))) @@ -1822,45 +1957,81 @@ (add-to-list 'load-path mu4epath))) (use-package mu4e - :ensure nil - ;; :load-path "/usr/share/emacs/site-lisp/mu4e/" - ;;:defer 20 ; Wait until 20 seconds after startup - :config + :ensure nil + ;; :load-path "/usr/share/emacs/site-lisp/mu4e/" + ;;:defer 20 ; Wait until 20 seconds after startup + :config - ;; This is set to 't' to avoid mail syncing issues when using mbsync - (setq send-mail-function 'sendmail-send-it) - (setq mu4e-change-filenames-when-moving t) - (setq mu4e-mu-binary (executable-find "mu")) + ;; This is set to 't' to avoid mail syncing issues when using mbsync + (setq send-mail-function 'sendmail-send-it) + (setq mu4e-change-filenames-when-moving t) + (setq mu4e-mu-binary (executable-find "mu")) - (setq mu4e-update-interval 180) - (setq mu4e-get-mail-command "mbsync -a") - (setq mu4e-maildir "~/Mail") + (setq mu4e-update-interval 180) + (setq mu4e-get-mail-command "mbsync -a") + (setq mu4e-maildir "~/Mail") - ;; enable inline images - (setq mu4e-view-show-images t) - ;; use imagemagick, if available - (when (fboundp 'imagemagick-register-types) - (imagemagick-register-types)) + ;; enable inline images + (setq mu4e-view-show-images t) + ;; use imagemagick, if available + (when (fboundp 'imagemagick-register-types) + (imagemagick-register-types)) - (setq mu4e-drafts-folder "/Drafts") - (setq mu4e-sent-folder "/Sent Mail") - (setq mu4e-refile-folder "/All Mail") - (setq mu4e-trash-folder "/Trash") + (setq mu4e-drafts-folder "/Drafts") + (setq mu4e-sent-folder "/Sent Mail") + (setq mu4e-refile-folder "/All Mail") + (setq mu4e-trash-folder "/Trash") - (setq mu4e-maildir-shortcuts - '((:maildir "/leon/Inbox" :key ?1) - (:maildir "/nautilus/Inbox" :key ?2) - (:maildir "/mrswarsel/Inbox" :key ?3) - (:maildir "/Sent Mail" :key ?s) - (:maildir "/Trash" :key ?t) - (:maildir "/Drafts" :key ?d) - (:maildir "/All Mail" :key ?a)))) + (setq mu4e-maildir-shortcuts + '((:maildir "/leon/Inbox" :key ?1) + (:maildir "/nautilus/Inbox" :key ?2) + (:maildir "/mrswarsel/Inbox" :key ?3) + (:maildir "/Sent Mail" :key ?s) + (:maildir "/Trash" :key ?t) + (:maildir "/Drafts" :key ?d) + (:maildir "/All Mail" :key ?a)))) - (setq user-mail-address "leon.schwarzaeugl@gmail.com" - user-full-name "Leon Schwarzäugl") +(setq user-mail-address "leon@swarsel.win" + user-full-name "Leon Schwarzäugl") (setq mu4e-hide-index-messages t) +(setq mu4e-user-mail-address-list '(leon.schwarzaeugl@gmail.com leon@swarsel.win nautilus.dw@gmail.com mrswarsel@gmail.com)) + +(defun swarsel/mu4e-switch-account () + (interactive) + (let ((account (completing-read "Select account: " mu4e-user-mail-address-list))) + (setq user-mail-address account))) + +(defun swarsel/mu4e-rfs--matching-address () + (cl-loop for to-data in (mu4e-message-field mu4e-compose-parent-message :to) + for to-email = (pcase to-data + (`(_ . email) email) + (x (mu4e-contact-email x))) + for to-name = (pcase to-data + (`(_ . name) name) + (x (mu4e-contact-name x))) + when (mu4e-user-mail-address-p to-email) + return (list to-name to-email))) + +(defun swarsel/mu4e-send-from-correct-address () + (when mu4e-compose-parent-message + (save-excursion + (when-let ((dest (swarsel/mu4e-rfs--matching-address))) + (cl-destructuring-bind (from-user from-addr) dest + (setq user-mail-address from-addr) + (message-position-on-field "From") + (message-beginning-of-line) + (delete-region (point) (line-end-position)) + (insert (format "%s <%s>" (or from-user user-full-name) from-addr))))))) + +(defun swarsel/mu4e-restore-default () + (setq user-mail-address "leon@swarsel.win" + user-full-name "Leon Schwarzäugl")) + +(add-hook 'mu4e-compose-mode-hook #'swarsel/mu4e-send-from-correct-address) +(add-hook 'mu4e-compose-post-hook #'swarsel/mu4e-restore-default) + (use-package mu4e-alert) (mu4e-alert-set-default-style 'libnotify) (add-hook 'after-init-hook #'mu4e-alert-enable-notifications) diff --git a/scripts/checkelement.sh b/scripts/checkelement.sh old mode 100644 new mode 100755 diff --git a/scripts/toggle_opacity.sh b/scripts/toggle_opacity.sh new file mode 100755 index 0000000..2cad615 --- /dev/null +++ b/scripts/toggle_opacity.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +swaymsg opacity plus 0.01 + +if [ $? -eq 0 ]; then + # opacity was not 1, we toggle off + swaymsg opacity 1 +else + # opacity was 1, we toggle on + swaymsg opacity 0.95 +fi diff --git a/secrets/general/secrets.yaml b/secrets/general/secrets.yaml index 4cacccb..b9e0343 100644 --- a/secrets/general/secrets.yaml +++ b/secrets/general/secrets.yaml @@ -3,6 +3,7 @@ nautilus: ENC[AES256_GCM,data:KTBIwO/m/O3RfYBf0kTdgM83mQ==,iv:fCVfS3eYE0F9Jhju+u leon: ENC[AES256_GCM,data:5OAaO/8XiOJEUicx+otLoUUG9w==,iv:cxoNYOQCFIjX53ZgaL/Pu4ZDeL2EByClCIWG2JcRHMw=,tag:954bA4bjcLZsv2hFbtykSQ==,type:str] caldav: ENC[AES256_GCM,data:CfWibtX+/BJcpXJNlpO8dpYJsdORzQZX5pEXX82CB2z+ZpIhIF66+x1GsXFFgP+MnQOS6O7hSUgckxtJBh7Bmy9jLmcdf3VMwnaAcg==,iv:bcahyj8MXSxvFOveFnXbEWHG03yHURb2zWelT5MiDo0=,tag:EguaYYuYNZUQlrKE8zjjrQ==,type:str] restic: ENC[AES256_GCM,data:YZv3dsx2U1XHfv4=,iv:82WoS3n6nlZpPLrwKFRiYwVSvB4R3AfQQDSR6vjiyno=,tag:Y88Lz2i43UEjUduUmfz/OQ==,type:str] +swarselmail: ENC[AES256_GCM,data:QqOGUsip/nmbwFcCX5EhM9u3hCNN4onZpsQAg6qS6lw=,iv:LvQEHkhHJ7+7r4iV1VhxxPW23hJ+h6RMcNIX3NTlB0Y=,tag:/+iH0P/Dmc5m6DLUeUikGw==,type:str] sops: kms: [] gcp_kms: [] @@ -45,8 +46,8 @@ sops: Q0NTRzR0cFVPT2phTlUyL0phU25TdncKD/4ZFw/oR2FEm0U8hUkF6ts5AkxfdXrS 2KdJTSXqy+UmbMHSoapcMQoeaOkfpIpmHZZzwhHzOBd3YPtBYMc91Q== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-02-11T19:37:40Z" - mac: ENC[AES256_GCM,data:uPzSGAx+X5TAlctEZxao8GskyI/IcMP3zGeVPOLLcK9aw5/lsv2bYd1HUDduoWwQevnuV49//aFSYGIMIfr2bXIrrPkStsv+MQyyUDRdX2S8dK8vsQstH6cmq/xMOtIJekfvBH/ED+46oW7yCwkqYM6NWgrqBWocWAbLTV4MSzQ=,iv:xNN0dpID4eafpyFWN3flIt6b0PKWcxeXu01sxrANlRU=,tag:Qv49O+BkPiSs/Tk8+9LwBw==,type:str] + lastmodified: "2024-05-29T13:25:38Z" + mac: ENC[AES256_GCM,data:4zcLmHkzyg4UEHsDYNEKQ6gmgHHBquGWd2hMVYHg/1k2XPd24mNKOPSj9yLxJKkXKpKRRLi6M0HyxbSeONnP+YiNEvmjt9RM8DqOz+ykG7IPmnVUaLtWysS1aM46fUFBTQFhneZ3flypRbByHtaA7k+SIp86249A3ooffL0HWyY=,iv:SC7dfSEhesTCI2M8PRKUYCIWynlu1l2oW4wgCvtvnuw=,tag:u40eCLDX14/aJRJRSeb1GQ==,type:str] pgp: - created_at: "2024-02-07T21:17:55Z" enc: |-