diff options
| author | Magdalena Szweda <hi@roughlynamed.net> | 2026-10-08 11:16:43 +0200 |
|---|---|---|
| committer | Magdalena Szweda <hi@roughlynamed.net> | 2026-10-09 12:42:05 +0200 |
| commit | 645efdd774a7b61ed1073a8c24b47afab2ddae5a (patch) | |
| tree | 4a732337abd0ce5ed96f313081ce22a52285c8d4 | |
| parent | dce84c70626df313c972b8b65765b753b6eccfa6 (diff) | |
Auth: remove pinentry.el & reword authinfo comment
| -rw-r--r-- | config.el | 143 | ||||
| -rw-r--r-- | config.org | 12 | ||||
| -rw-r--r-- | config.org.bak | 8 | ||||
| -rw-r--r-- | diff.txt | 215 | ||||
| -rw-r--r-- | packages.el | 11 |
5 files changed, 365 insertions, 24 deletions
@@ -143,11 +143,6 @@ (add-hook 'mhtml-ts-mode-hook #'apheleia-mode) -(use-package! pinentry - :config - (pinentry-start)) -(setq epg-pinentry-mode 'loopback) - (setq auth-sources '("~/.authinfo.gpg")) (setq auth-source-cache-expiry nil) @@ -605,7 +600,7 @@ org-html-postamble nil)) (add-hook 'nov-mode-hook (lambda () (face-remap-add-relative 'variable-pitch - :family "Georgia" :height 1.3))) ; different font for reading + :family "Libron" :height 1.3))) ; different font for reading (add-hook 'nov-mode-hook #'writeroom-mode) ; center text & stuff (map! :map nov-mode-map @@ -615,6 +610,22 @@ org-html-postamble nil)) :n "[" #'nov-previous-document :n "t" #'nov-goto-toc)) +(use-package! company + :ensure t + :defer nil) + +(use-package! hledger-mode + :mode ("\\.journal\\'" "\\.hledger\\'") + :custom + (hledger-jfile (expand-file-name "~/.hledger.journal")) + :after (company cape) + :config + (add-hook 'hledger-mode-hook + (lambda () + (add-hook 'completion-at-point-functions + (cape-company-to-capf #'hledger-company) + nil t)))) + (with-eval-after-load 'tramp (add-to-list 'tramp-methods '("doas" @@ -624,6 +635,126 @@ org-html-postamble nil)) (tramp-remote-shell-args ("-c")) (tramp-connection-timeout 10)))) +(defconst my/exwm-session-p (and (getenv "EXWM") t)) + +(defun my/spawn (cmd) + "Return a command that runs shell CMD." + (lambda () (interactive) (start-process-shell-command cmd nil cmd))) + +(defun my/run-once (cmd) + "Run CMD only if no process named like its executable is already running." + (let ((name (file-name-nondirectory (car (split-string cmd))))) + (start-process-shell-command + cmd nil (format "pgrep -x %s >/dev/null || %s" (shell-quote-argument name) cmd)))) + +(defun my/close-window () + (interactive) + (kill-buffer) + (when (cdr (window-list)) + (edwina-delete-window))) + +(defconst my/spawn-binds + '(("s-<return>" . "alacritty") ("s-w" . "vivaldi") ("s-e" . "xfe") + ("s-s" . "discord") ("s-x" . "loginctl lock-session") + ("<print>" . "screenshot") ("S-<print>" . "screenrecord") + ("s-S" . "screenshot select") ("s-R" . "screenrecord select") + ("<XF86AudioRaiseVolume>" . "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+") + ("<XF86AudioLowerVolume>" . "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-") + ("<XF86AudioMute>" . "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle") + ("<XF86AudioPlay>" . "playerctl play-pause") + ("<XF86AudioNext>" . "playerctl next") + ("<XF86AudioPrev>" . "playerctl previous"))) + +(defconst my/wm-binds + '(("s-r" . exwm-reset) + ("s-p" . app-launcher-run-app) + ("s-j" . edwina-select-next-window) + ("s-k" . edwina-select-previous-window) + ("s-J" . edwina-swap-next-window) + ("s-K" . edwina-swap-previous-window) + ("s-h" . edwina-dec-mfact) + ("s-l" . edwina-inc-mfact) + ("s-H" . edwina-inc-nmaster) + ("s-L" . edwina-dec-nmaster) + ("s-m" . edwina-zoom) ; promote to master, dwm-style + ("s-q" . my/close-window) + ("s-f" . exwm-floating-toggle-floating) + ("C-s-q" . save-buffers-kill-emacs))) + +(defconst my/ws-binds + (cl-loop for i from 0 below 9 + for sym in '("!" "@" "#" "$" "%" "^" "&" "*" "(") + collect (cons (format "s-%d" (1+ i)) + (let ((ws i)) (lambda () (interactive) (exwm-workspace-switch-create ws)))) + collect (cons (format "s-%s" sym) + (let ((ws i)) (lambda () (interactive) (exwm-workspace-move-window ws)))))) + +(defun my/exwm-key (spec) + (cons (kbd (car spec)) + (if (stringp (cdr spec)) (my/spawn (cdr spec)) (cdr spec)))) + +(use-package! exwm + :when my/exwm-session-p + :config + (setenv "EXWM" nil) + (setq exwm-workspace-number 9 + exwm-manage-configurations + '(((member exwm-class-name '("Alacritty")) char-mode t) + ((equal exwm-class-name "discord") workspace 8) + ((member exwm-class-name '("Pavucontrol" "Blueman-manager" "ssh-askpass" "Gcr-prompter")) + floating t) + ((equal exwm-title "pinentry") floating t)) + exwm-input-global-keys + (mapcar #'my/exwm-key (append my/spawn-binds my/wm-binds my/ws-binds)) + exwm-input-simulation-keys + '(([?\C-b] . [left]) ([?\C-f] . [right]) + ([?\C-p] . [up]) ([?\C-n] . [down]) + ([?\C-a] . [home]) ([?\C-e] . [end]) + ([?\C-d] . [delete]) ([?\C-k] . [S-end delete]) + ([?\C-w] . [?\C-x]) ([?\M-w] . [?\C-c]) ([?\C-y] . [?\C-v]))) + + (cl-pushnew ?\C-c exwm-input-prefix-keys) + + (add-hook 'exwm-update-class-hook + (lambda () (exwm-workspace-rename-buffer exwm-class-name))) + (add-hook 'exwm-update-title-hook + (lambda () + (exwm-workspace-rename-buffer + (format "%s | %s" exwm-class-name + (truncate-string-to-width (or exwm-title "") 40 nil nil "…"))))) + + (add-hook 'exwm-mode-hook #'doom-mark-buffer-as-real-h) + (advice-add #'suspend-frame :override #'ignore) + + (add-hook 'exwm-init-hook + (lambda () + (start-process-shell-command + "dbus-env" nil "dbus-update-activation-environment DISPLAY XAUTHORITY") + (dolist (c '("feh --bg-scale ~/Pictures/floating_gnu.png" "xset m 0")) + (start-process-shell-command c nil c)) + (my/run-once "~/.cargo/bin/mprisence"))) + + (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systemtray-enable)) + (if (fboundp 'exwm-wm-mode) (exwm-wm-mode 1) (exwm-enable))) ; 0.34+ vs 0.33 + +(use-package! exwm-edit + :when my/exwm-session-p + :after exwm + :config (setq exwm-edit-split "below")) + +(use-package! exwm-mff + :when my/exwm-session-p + :hook (exwm-init . exwm-mff-mode)) + +(use-package! edwina + :when my/exwm-session-p + :after exwm + :config + (setq display-buffer-base-action '(display-buffer-below-selected) + edwina-mfact 0.50 + edwina-narrow-threshold 0) + (edwina-mode 1)) + (remove-hook 'doom-first-input-hook #'evil-snipe-mode) (use-package lispyville @@ -337,18 +337,8 @@ First we hook apheleia into prog-mode. ** Auth To send mail, we need to log into everything. Instead of typing out passwords every time, we use the ~~.authinfo.gpg~ file (can also be without the gpg encryption). -First we install & set up pinentry. -#+begin_src emacs-lisp :tangle ~/.config/doom/packages.el -(package! pinentry) -#+end_src -#+begin_src emacs-lisp -(use-package! pinentry - :config - (pinentry-start)) -(setq epg-pinentry-mode 'loopback) -#+end_src -To read the file: +Read authinfo.gpg, the file containing the secrets #+begin_src emacs-lisp (setq auth-sources '("~/.authinfo.gpg")) #+end_src diff --git a/config.org.bak b/config.org.bak index c2ae151..26989af 100644 --- a/config.org.bak +++ b/config.org.bak @@ -247,14 +247,12 @@ Here we hook the new oxfmt formatter into: ** Auth To send mail, we need to log into everything. Instead of typing out passwords every time, we use the ~~.authinfo.gpg~ file (can also be without the gpg encryption). -First we set up pinentry. +First we set up epg-pinentry. #+begin_src emacs-lisp - (use-package! pinentry - :config - (pinentry-start)) (setq epg-pinentry-mode 'loopback) #+end_src -To read the file: + +To read the file which contains all our secrets: #+begin_src emacs-lisp (setq auth-sources '("~/.authinfo.gpg")) #+end_src diff --git a/diff.txt b/diff.txt new file mode 100644 index 0000000..93dc30e --- /dev/null +++ b/diff.txt @@ -0,0 +1,215 @@ +Modified regular file config.org: + ... + 337 337: ** Auth + 338 338: To send mail, we need to log into everything. + 339 339: Instead of typing out passwords every time, we use the ~~.authinfo.gpg~ file (can also be without the gpg encryption). + 340 : First we install & set up pinentry. + 341 : #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el + 342 : (package! pinentry) + 343 : #+end_src + 344 340: + 345 : #+begin_src emacs-lisp + 346 : (use-package! pinentry + 347 : :config + 348 : (pinentry-start)) + 349 : (setq epg-pinentry-mode 'loopback) + 350 : #+end_src + 351 : To read the file: + 341: Read authinfo.gpg, the file containing the secrets + 352 342: #+begin_src emacs-lisp + 353 343: (setq auth-sources '("~/.authinfo.gpg")) + 354 344: #+end_src + ... +1400 1390: (add-hook 'nov-mode-hook +1401 1391: (lambda () +1402 1392: (face-remap-add-relative 'variable-pitch +1403 : :family "Georgia" :height 1.3))) ; different font for reading + 1393: :family "Libron" :height 1.3))) ; different font for reading +1404 1394: (add-hook 'nov-mode-hook #'writeroom-mode) ; center text & stuff +1405 1395: #+end_src +1406 1396: + ... +1420 1410: (package! try) +1421 1411: #+end_src +1422 1412: That's about all ~try~ needs. + 1413: ** hledger-mode + 1414: hledger mode lets you manage hledger via Emacs. + 1415: #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el + 1416: (package! hledger-mode) + 1417: (package! company) ; needed for autocompletion + 1418: #+end_src + 1419: + 1420: First we have to set up company, which is needed for autocompletion in hledger-mode + 1421: #+begin_src emacs-lisp + 1422: (use-package! company + 1423: :ensure t + 1424: :defer nil) + 1425: #+end_src + 1426: + 1427: + 1428: Then, we set up hledger-mode + 1429: #+begin_src emacs-lisp + 1430: (use-package! hledger-mode + 1431: :mode ("\\.journal\\'" "\\.hledger\\'") + 1432: :custom + 1433: (hledger-jfile (expand-file-name "~/.hledger.journal")) + 1434: :after (company cape) + 1435: :config + 1436: (add-hook 'hledger-mode-hook + 1437: (lambda () + 1438: (add-hook 'completion-at-point-functions + 1439: (cape-company-to-capf #'hledger-company) + 1440: nil t)))) + 1441: #+end_src +1423 1442: * Tramp +1424 1443: +1425 1444: Tramp is a way to edit files via SSH and root owned files in Emacs. + ... +1434 1453: (tramp-remote-shell-args ("-c")) +1435 1454: (tramp-connection-timeout 10)))) +1436 1455: #+end_src + 1456: * EXWM + 1457: #+begin_quote + 1458: Who needs a WM if you have Emacs? + 1459: #+end_quote + 1460: EXWM is the Emacs X Window Manager. + 1461: #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el + 1462: (package! exwm) + 1463: (package! edwina) ; dynamic tiling + 1464: (package! exwm-edit) ; edit X text fields in an Emacs buffer + 1465: (package! exwm-mff) ; mouse follows focus + 1466: (package! app-launcher :recipe (:host github :repo "SebastienWae/app-launcher")) + 1467: #+end_src + 1468: + 1469: ** Helpers and bindings + 1470: #+begin_src emacs-lisp + 1471: (defconst my/exwm-session-p (and (getenv "EXWM") t)) + 1472: + 1473: (defun my/spawn (cmd) + 1474: "Return a command that runs shell CMD." + 1475: (lambda () (interactive) (start-process-shell-command cmd nil cmd))) + 1476: + 1477: (defun my/run-once (cmd) + 1478: "Run CMD only if no process named like its executable is already running." + 1479: (let ((name (file-name-nondirectory (car (split-string cmd))))) + 1480: (start-process-shell-command + 1481: cmd nil (format "pgrep -x %s >/dev/null || %s" (shell-quote-argument name) cmd)))) + 1482: + 1483: (defun my/close-window () + 1484: (interactive) + 1485: (kill-buffer) + 1486: (when (cdr (window-list)) + 1487: (edwina-delete-window))) + 1488: + 1489: (defconst my/spawn-binds + 1490: '(("s-<return>" . "alacritty") ("s-w" . "vivaldi") ("s-e" . "xfe") + 1491: ("s-s" . "discord") ("s-x" . "loginctl lock-session") + 1492: ("<print>" . "screenshot") ("S-<print>" . "screenrecord") + 1493: ("s-S" . "screenshot select") ("s-R" . "screenrecord select") + 1494: ("<XF86AudioRaiseVolume>" . "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+") + 1495: ("<XF86AudioLowerVolume>" . "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-") + 1496: ("<XF86AudioMute>" . "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle") + 1497: ("<XF86AudioPlay>" . "playerctl play-pause") + 1498: ("<XF86AudioNext>" . "playerctl next") + 1499: ("<XF86AudioPrev>" . "playerctl previous"))) + 1500: + 1501: (defconst my/wm-binds + 1502: '(("s-r" . exwm-reset) + 1503: ("s-p" . app-launcher-run-app) + 1504: ("s-j" . edwina-select-next-window) + 1505: ("s-k" . edwina-select-previous-window) + 1506: ("s-J" . edwina-swap-next-window) + 1507: ("s-K" . edwina-swap-previous-window) + 1508: ("s-h" . edwina-dec-mfact) + 1509: ("s-l" . edwina-inc-mfact) + 1510: ("s-H" . edwina-inc-nmaster) + 1511: ("s-L" . edwina-dec-nmaster) + 1512: ("s-m" . edwina-zoom) ; promote to master, dwm-style + 1513: ("s-q" . my/close-window) + 1514: ("s-f" . exwm-floating-toggle-floating) + 1515: ("C-s-q" . save-buffers-kill-emacs))) + 1516: + 1517: (defconst my/ws-binds + 1518: (cl-loop for i from 0 below 9 + 1519: for sym in '("!" "@" "#" "$" "%" "^" "&" "*" "(") + 1520: collect (cons (format "s-%d" (1+ i)) + 1521: (let ((ws i)) (lambda () (interactive) (exwm-workspace-switch-create ws)))) + 1522: collect (cons (format "s-%s" sym) + 1523: (let ((ws i)) (lambda () (interactive) (exwm-workspace-move-window ws)))))) + 1524: + 1525: (defun my/exwm-key (spec) + 1526: (cons (kbd (car spec)) + 1527: (if (stringp (cdr spec)) (my/spawn (cdr spec)) (cdr spec)))) + 1528: #+end_src + 1529: + 1530: ** EXWM itself + 1531: #+begin_src emacs-lisp + 1532: (use-package! exwm + 1533: :when my/exwm-session-p + 1534: :config + 1535: (setenv "EXWM" nil) + 1536: (setq exwm-workspace-number 9 + 1537: exwm-manage-configurations + 1538: '(((member exwm-class-name '("Alacritty")) char-mode t) + 1539: ((equal exwm-class-name "discord") workspace 8) + 1540: ((member exwm-class-name '("Pavucontrol" "Blueman-manager" "ssh-askpass" "Gcr-prompter")) + 1541: floating t) + 1542: ((equal exwm-title "pinentry") floating t)) + 1543: exwm-input-global-keys + 1544: (mapcar #'my/exwm-key (append my/spawn-binds my/wm-binds my/ws-binds)) + 1545: exwm-input-simulation-keys + 1546: '(([?\C-b] . [left]) ([?\C-f] . [right]) + 1547: ([?\C-p] . [up]) ([?\C-n] . [down]) + 1548: ([?\C-a] . [home]) ([?\C-e] . [end]) + 1549: ([?\C-d] . [delete]) ([?\C-k] . [S-end delete]) + 1550: ([?\C-w] . [?\C-x]) ([?\M-w] . [?\C-c]) ([?\C-y] . [?\C-v]))) + 1551: + 1552: (cl-pushnew ?\C-c exwm-input-prefix-keys) + 1553: + 1554: (add-hook 'exwm-update-class-hook + 1555: (lambda () (exwm-workspace-rename-buffer exwm-class-name))) + 1556: (add-hook 'exwm-update-title-hook + 1557: (lambda () + 1558: (exwm-workspace-rename-buffer + 1559: (format "%s | %s" exwm-class-name + 1560: (truncate-string-to-width (or exwm-title "") 40 nil nil "…"))))) + 1561: + 1562: (add-hook 'exwm-mode-hook #'doom-mark-buffer-as-real-h) + 1563: (advice-add #'suspend-frame :override #'ignore) + 1564: + 1565: (add-hook 'exwm-init-hook + 1566: (lambda () + 1567: (start-process-shell-command + 1568: "dbus-env" nil "dbus-update-activation-environment DISPLAY XAUTHORITY") + 1569: (dolist (c '("feh --bg-scale ~/Pictures/floating_gnu.png" "xset m 0")) + 1570: (start-process-shell-command c nil c)) + 1571: (my/run-once "~/.cargo/bin/mprisence"))) + 1572: + 1573: (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systemtray-enable)) + 1574: (if (fboundp 'exwm-wm-mode) (exwm-wm-mode 1) (exwm-enable))) ; 0.34+ vs 0.33 + 1575: + 1576: (use-package! exwm-edit + 1577: :when my/exwm-session-p + 1578: :after exwm + 1579: :config (setq exwm-edit-split "below")) + 1580: + 1581: (use-package! exwm-mff + 1582: :when my/exwm-session-p + 1583: :hook (exwm-init . exwm-mff-mode)) + 1584: #+end_src + 1585: ** Edwina + 1586: Edwina lets EXWM become a dynamically tiling window manager. + 1587: #+begin_src emacs-lisp + 1588: (use-package! edwina + 1589: :when my/exwm-session-p + 1590: :after exwm + 1591: :config + 1592: (setq display-buffer-base-action '(display-buffer-below-selected) + 1593: edwina-mfact 0.50 + 1594: edwina-narrow-threshold 0) + 1595: (edwina-mode 1)) + 1596: #+end_src +1437 1597: * Evil +1438 1598: ~Mapping at its finest~ +1439 1599: EVIl mode emulates VIM bindings in Emacs. + ... diff --git a/packages.el b/packages.el index b3284de..a7a574d 100644 --- a/packages.el +++ b/packages.el @@ -11,8 +11,6 @@ (package! vertico-carousel :recipe (:host github :repo "kn66/vertico-carousel")) -(package! pinentry) - (package! jabber) (package! vc-jj) @@ -35,3 +33,12 @@ (package! nov) (package! try) + +(package! hledger-mode) +(package! company) ; needed for autocompletion + +(package! exwm) +(package! edwina) ; dynamic tiling +(package! exwm-edit) ; edit X text fields in an Emacs buffer +(package! exwm-mff) ; mouse follows focus +(package! app-launcher :recipe (:host github :repo "SebastienWae/app-launcher")) |
