From 3d3e8d450db5d9cab497859024c4d4e3d1ec294e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20Schwarz=C3=A4ugl?= Date: Tue, 31 Mar 2026 17:08:05 +0200 Subject: [PATCH] feat[work]: improve presentation header opening --- SwarselSystems.org | 428 +++++++++--------- files/emacs/init.el | 4 +- .../x86_64-linux/pyramid/secrets/pii.nix.enc | 6 +- 3 files changed, 221 insertions(+), 217 deletions(-) diff --git a/SwarselSystems.org b/SwarselSystems.org index 49703b4..fa82ef3 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -33821,225 +33821,227 @@ When holding presentations, I think it is important to not have too many distrac #+begin_src emacs-lisp - (use-package org-present - :bind (:map org-present-mode-keymap - ("q" . org-present-quit) - ("" . swarsel/org-present-prev) - ("<​up>" . 'ignore) - ("<​down>" . 'ignore) - ("" . swarsel/org-present-next)) - :hook ((org-present-mode . swarsel/org-present-start) - (org-present-mode-quit . swarsel/org-present-end)) - :config - (add-hook 'org-present-after-navigate-functions #'swarsel/org-present-slide) - (setq org-present-startup-folded t) - ) + (use-package org-present + :bind (:map org-present-mode-keymap + ("q" . org-present-quit) + ("" . swarsel/org-present-prev) + ("<​up>" . 'ignore) + ("<​down>" . 'ignore) + ("" . swarsel/org-present-next)) + :hook ((org-present-mode . swarsel/org-present-start) + (org-present-mode-quit . swarsel/org-present-end)) + :config + (add-hook 'org-present-after-navigate-functions #'swarsel/org-present-slide) + (setq org-present-startup-folded t) + ) - (use-package hide-mode-line) + (use-package hide-mode-line) - (defun swarsel/org-reveal-at-point () - "Reveal the org entry at point if it is a heading." - (when (and (derived-mode-p 'org-mode) - (org-at-heading-p)) - (org-show-entry) - (org-show-children))) - - (defun swarsel/org-present-maybe-read-only () - "Toggle read-only based on whether cursor is inside a src block." - (if (org-in-src-block-p) - (when buffer-read-only - (org-present-read-write) - (evil-insert-state 1)) - (unless buffer-read-only - (org-present-read-only) - (evil-insert-state 1)))) - - - (defun swarsel/org-present-narrow (orig-fn &rest args) - (cl-letf (((symbol-function 'show-all) #'ignore)) - (apply orig-fn args)) - (org-overview) - (org-show-entry)) - - (advice-add 'org-present-narrow :around #'swarsel/org-present-narrow) - - (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 2.75) org-document-title) - (org-code (:height 1.2) org-code) - (org-verbatim (:family ,swarsel/fixed-font :height 1.0) org-verbatim) - (org-quote (:height 1.0) org-quote) - (org-verse (:height 1.0) org-verse) - (org-table (:family ,swarsel/fixed-font :weight regular :height 1.0) org-table) - (org-block (:height 0.9) org-block) - (org-link (:underline nil) org-link) - (org-block-begin-line (:height 0.7) org-block) - )) - - (setq header-line-format " ") - (setq visual-fill-column-width 150) - (setq indicate-buffer-boundaries nil) - (setq inhibit-message nil) - (setq org-babel-eval-error-notify t) - ;; (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) - (org-present-read-only) - ;; (org-present-hide-cursor) - (org-overview) ; fold everything on start - (add-hook 'post-command-hook #'swarsel/org-reveal-at-point nil t) - (add-hook 'post-command-hook #'swarsel/org-present-maybe-read-only nil t) - ) - - (defun swarsel/org-present-end () - (setq-local face-remapping-alist `((org-verbatim (:family ,swarsel/fixed-font :weight regular) - org-verbatim) - (org-table (:family ,swarsel/fixed-font :weight regular) org-table) - (org-meta-line (:family ,swarsel/fixed-font :weight regular) org-meta-line) - (org-formula (:family ,swarsel/fixed-font :weight regular) org-formula) - (org-checkbox (:family ,swarsel/fixed-font :weight regular) org-checkbox) - (org-latex-and-related (:family ,swarsel/fixed-font :weight regular) - org-latex-and-related) - (org-indent (:family ,swarsel/fixed-font :weight regular) org-indent) - (org-code (:family ,swarsel/fixed-font :weight regular) org-code) - (org-document-info-keyword (:family ,swarsel/fixed-font :weight regular) - org-document-info-keyword) - (org-block-end-line (:family ,swarsel/fixed-font :weight regular) org-block-end-line) - (org-block-begin-line (:family ,swarsel/fixed-font :weight regular) - org-block-begin-line) - (org-block (:family ,swarsel/fixed-font :weight regular) org-block) - (mu4e-compose-header-face (:family ,swarsel/fixed-font :weight regular) - mu4e-compose-header-face) - (mu4e-compose-separator-face (:family ,swarsel/fixed-font :weight regular) - mu4e-compose-separator-face) - (mu4e-contact-face (:family ,swarsel/fixed-font :weight regular) mu4e-contact-face) - (mu4e-link-face (:family ,swarsel/fixed-font :weight regular) mu4e-link-face) - (mu4e-header-value-face (:family ,swarsel/fixed-font :weight regular) - mu4e-header-value-face) - (mu4e-header-key-face (:family ,swarsel/fixed-font :weight regular) - mu4e-header-key-face) - (message-header-other (:family ,swarsel/fixed-font :weight regular) - message-header-other) - (message-header-subject (:family ,swarsel/fixed-font :weight regular) - message-header-subject) - (message-header-xheader (:family ,swarsel/fixed-font :weight regular) - message-header-xheader) - (message-header-newsgroups (:family ,swarsel/fixed-font :weight regular) - message-header-newsgroups) - (message-header-cc (:family ,swarsel/fixed-font :weight regular) message-header-cc) - (message-header-to (:family ,swarsel/fixed-font :weight regular) message-header-to) - (message-header-name (:family ,swarsel/fixed-font :weight regular) - message-header-name) - (markdown-math-face (:family ,swarsel/fixed-font :weight regular) markdown-math-face) - (markdown-language-keyword-face (:family ,swarsel/fixed-font :weight regular) - markdown-language-keyword-face) - (markdown-language-info-face (:family ,swarsel/fixed-font :weight regular) - markdown-language-info-face) - (markdown-inline-code-face (:family ,swarsel/fixed-font :weight regular) - markdown-inline-code-face) - (markdown-gfm-checkbox-face (:family ,swarsel/fixed-font :weight regular) - markdown-gfm-checkbox-face) - (markdown-code-face (:family ,swarsel/fixed-font :weight regular) markdown-code-face) - (line-number-minor-tick (:family ,swarsel/fixed-font :weight regular) - line-number-minor-tick) - (line-number-major-tick (:family ,swarsel/fixed-font :weight regular) - line-number-major-tick) - (line-number-current-line (:family ,swarsel/fixed-font :weight regular) - line-number-current-line) - (line-number (:family ,swarsel/fixed-font :weight regular) line-number) - (font-lock-variable-name-face (:family ,swarsel/fixed-font :weight regular) - font-lock-variable-name-face) - (font-lock-type-face (:family ,swarsel/fixed-font :weight regular) - font-lock-type-face) - (font-lock-string-face (:family ,swarsel/fixed-font :weight regular) - font-lock-string-face) - (font-lock-regexp-grouping-construct (:family ,swarsel/fixed-font :weight regular) - font-lock-regexp-grouping-construct) - (font-lock-regexp-grouping-backslash (:family ,swarsel/fixed-font :weight regular) - font-lock-regexp-grouping-backslash) - (font-lock-preprocessor-face (:family ,swarsel/fixed-font :weight regular) - font-lock-preprocessor-face) - (font-lock-negation-char-face (:family ,swarsel/fixed-font :weight regular) - font-lock-negation-char-face) - (font-lock-keyword-face (:family ,swarsel/fixed-font :weight regular) - font-lock-keyword-face) - (font-lock-function-name-face (:family ,swarsel/fixed-font :weight regular) - font-lock-function-name-face) - (font-lock-doc-face (:family ,swarsel/fixed-font :weight regular) font-lock-doc-face) - (font-lock-constant-face (:family ,swarsel/fixed-font :weight regular) - font-lock-constant-face) - (font-lock-comment-delimiter-face (:family ,swarsel/fixed-font :weight regular) - font-lock-comment-delimiter-face) - (font-lock-builtin-face (:family ,swarsel/fixed-font :weight regular) - font-lock-builtin-face) - (font-latex-sectioning-5-face (:family ,swarsel/fixed-font :weight regular) - font-latex-sectioning-5-face) - (font-latex-warning-face (:family ,swarsel/fixed-font :weight regular) - font-latex-warning-face) - (font-latex-sedate-face (:family ,swarsel/fixed-font :weight regular) - font-latex-sedate-face) - (font-latex-math-face (:family ,swarsel/fixed-font :weight regular) - font-latex-math-face) - (diff-removed (:family ,swarsel/fixed-font :weight regular) diff-removed) - (diff-hunk-header (:family ,swarsel/fixed-font :weight regular) diff-hunk-header) - (diff-header (:family ,swarsel/fixed-font :weight regular) diff-header) - (diff-function (:family ,swarsel/fixed-font :weight regular) diff-function) - (diff-file-header (:family ,swarsel/fixed-font :weight regular) diff-file-header) - (diff-context (:family ,swarsel/fixed-font :weight regular) diff-context) - (diff-added (:family ,swarsel/fixed-font :weight regular) diff-added) - (default (:family "Sans Serif" :weight light) variable-pitch default) - )) - (setq header-line-format nil) - (setq visual-fill-column-width 150) - (setq indicate-buffer-boundaries t) - (setq inhibit-message nil) - (setq org-babel-no-eval-on-error 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) - (remove-hook 'post-command-hook #'swarsel/org-reveal-at-point t) - (remove-hook 'post-command-hook #'swarsel/org-present-maybe-read-only t) - ) - - (defun swarsel/org-present-slide-open () - (org-overview) + (defun swarsel/org-reveal-at-point () + "Reveal the org entry at point if it is a heading." + (when (and (derived-mode-p 'org-mode) + (org-at-heading-p)) (org-show-entry) - (org-show-children) - ) + (org-show-children))) - (defun swarsel/org-present-prev () - (interactive) - (beginning-of-buffer) - (org-present-prev) - (swarsel/org-present-slide-open) - ) + (defun swarsel/org-present-maybe-read-only () + "Toggle read-only based on whether cursor is inside a src block." + (if (org-in-src-block-p) + (when buffer-read-only + (org-present-read-write) + (evil-insert-state 1)) + (unless buffer-read-only + (org-present-read-only) + (evil-insert-state 1)))) - (defun swarsel/org-present-next () - (interactive) - (let* ((next-heading (save-excursion - (when (outline-next-heading) (point)))) - (next-block (save-excursion - (when (re-search-forward "^#\\+begin_src" nil t) - (match-beginning 0)))) - (target (cond - ((and next-heading next-block) (min next-heading next-block)) - (next-heading next-heading) - (next-block next-block) - (t nil)))) - (if (and target (< target (point-max))) - (progn - (goto-char target) - (org-fold-show-entry)) - (org-present-next)))) + + (defun swarsel/org-present-narrow (orig-fn &rest args) + (cl-letf (((symbol-function 'show-all) #'ignore)) + (apply orig-fn args)) + (org-overview) + (org-show-entry)) + + (advice-add 'org-present-narrow :around #'swarsel/org-present-narrow) + + (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 2.75) org-document-title) + (org-code (:height 1.2) org-code) + (org-verbatim (:family ,swarsel/fixed-font :height 1.0) org-verbatim) + (org-quote (:height 1.0) org-quote) + (org-verse (:height 1.0) org-verse) + (org-table (:family ,swarsel/fixed-font :weight regular :height 1.0) org-table) + (org-block (:height 0.9) org-block) + (org-link (:underline nil) org-link) + (org-block-begin-line (:height 0.7) org-block) + )) + + (setq header-line-format " ") + (setq visual-fill-column-width 150) + (setq indicate-buffer-boundaries nil) + (setq inhibit-message nil) + (setq org-babel-eval-error-notify t) + ;; (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) + (org-present-read-only) + ;; (org-present-hide-cursor) + (org-overview) ; fold everything on start + (add-hook 'post-command-hook #'swarsel/org-reveal-at-point nil t) + (add-hook 'post-command-hook #'swarsel/org-present-maybe-read-only nil t) + ) + + (defun swarsel/org-present-end () + (setq-local face-remapping-alist `((org-verbatim (:family ,swarsel/fixed-font :weight regular) + org-verbatim) + (org-table (:family ,swarsel/fixed-font :weight regular) org-table) + (org-meta-line (:family ,swarsel/fixed-font :weight regular) org-meta-line) + (org-formula (:family ,swarsel/fixed-font :weight regular) org-formula) + (org-checkbox (:family ,swarsel/fixed-font :weight regular) org-checkbox) + (org-latex-and-related (:family ,swarsel/fixed-font :weight regular) + org-latex-and-related) + (org-indent (:family ,swarsel/fixed-font :weight regular) org-indent) + (org-code (:family ,swarsel/fixed-font :weight regular) org-code) + (org-document-info-keyword (:family ,swarsel/fixed-font :weight regular) + org-document-info-keyword) + (org-block-end-line (:family ,swarsel/fixed-font :weight regular) org-block-end-line) + (org-block-begin-line (:family ,swarsel/fixed-font :weight regular) + org-block-begin-line) + (org-block (:family ,swarsel/fixed-font :weight regular) org-block) + (mu4e-compose-header-face (:family ,swarsel/fixed-font :weight regular) + mu4e-compose-header-face) + (mu4e-compose-separator-face (:family ,swarsel/fixed-font :weight regular) + mu4e-compose-separator-face) + (mu4e-contact-face (:family ,swarsel/fixed-font :weight regular) mu4e-contact-face) + (mu4e-link-face (:family ,swarsel/fixed-font :weight regular) mu4e-link-face) + (mu4e-header-value-face (:family ,swarsel/fixed-font :weight regular) + mu4e-header-value-face) + (mu4e-header-key-face (:family ,swarsel/fixed-font :weight regular) + mu4e-header-key-face) + (message-header-other (:family ,swarsel/fixed-font :weight regular) + message-header-other) + (message-header-subject (:family ,swarsel/fixed-font :weight regular) + message-header-subject) + (message-header-xheader (:family ,swarsel/fixed-font :weight regular) + message-header-xheader) + (message-header-newsgroups (:family ,swarsel/fixed-font :weight regular) + message-header-newsgroups) + (message-header-cc (:family ,swarsel/fixed-font :weight regular) message-header-cc) + (message-header-to (:family ,swarsel/fixed-font :weight regular) message-header-to) + (message-header-name (:family ,swarsel/fixed-font :weight regular) + message-header-name) + (markdown-math-face (:family ,swarsel/fixed-font :weight regular) markdown-math-face) + (markdown-language-keyword-face (:family ,swarsel/fixed-font :weight regular) + markdown-language-keyword-face) + (markdown-language-info-face (:family ,swarsel/fixed-font :weight regular) + markdown-language-info-face) + (markdown-inline-code-face (:family ,swarsel/fixed-font :weight regular) + markdown-inline-code-face) + (markdown-gfm-checkbox-face (:family ,swarsel/fixed-font :weight regular) + markdown-gfm-checkbox-face) + (markdown-code-face (:family ,swarsel/fixed-font :weight regular) markdown-code-face) + (line-number-minor-tick (:family ,swarsel/fixed-font :weight regular) + line-number-minor-tick) + (line-number-major-tick (:family ,swarsel/fixed-font :weight regular) + line-number-major-tick) + (line-number-current-line (:family ,swarsel/fixed-font :weight regular) + line-number-current-line) + (line-number (:family ,swarsel/fixed-font :weight regular) line-number) + (font-lock-variable-name-face (:family ,swarsel/fixed-font :weight regular) + font-lock-variable-name-face) + (font-lock-type-face (:family ,swarsel/fixed-font :weight regular) + font-lock-type-face) + (font-lock-string-face (:family ,swarsel/fixed-font :weight regular) + font-lock-string-face) + (font-lock-regexp-grouping-construct (:family ,swarsel/fixed-font :weight regular) + font-lock-regexp-grouping-construct) + (font-lock-regexp-grouping-backslash (:family ,swarsel/fixed-font :weight regular) + font-lock-regexp-grouping-backslash) + (font-lock-preprocessor-face (:family ,swarsel/fixed-font :weight regular) + font-lock-preprocessor-face) + (font-lock-negation-char-face (:family ,swarsel/fixed-font :weight regular) + font-lock-negation-char-face) + (font-lock-keyword-face (:family ,swarsel/fixed-font :weight regular) + font-lock-keyword-face) + (font-lock-function-name-face (:family ,swarsel/fixed-font :weight regular) + font-lock-function-name-face) + (font-lock-doc-face (:family ,swarsel/fixed-font :weight regular) font-lock-doc-face) + (font-lock-constant-face (:family ,swarsel/fixed-font :weight regular) + font-lock-constant-face) + (font-lock-comment-delimiter-face (:family ,swarsel/fixed-font :weight regular) + font-lock-comment-delimiter-face) + (font-lock-builtin-face (:family ,swarsel/fixed-font :weight regular) + font-lock-builtin-face) + (font-latex-sectioning-5-face (:family ,swarsel/fixed-font :weight regular) + font-latex-sectioning-5-face) + (font-latex-warning-face (:family ,swarsel/fixed-font :weight regular) + font-latex-warning-face) + (font-latex-sedate-face (:family ,swarsel/fixed-font :weight regular) + font-latex-sedate-face) + (font-latex-math-face (:family ,swarsel/fixed-font :weight regular) + font-latex-math-face) + (diff-removed (:family ,swarsel/fixed-font :weight regular) diff-removed) + (diff-hunk-header (:family ,swarsel/fixed-font :weight regular) diff-hunk-header) + (diff-header (:family ,swarsel/fixed-font :weight regular) diff-header) + (diff-function (:family ,swarsel/fixed-font :weight regular) diff-function) + (diff-file-header (:family ,swarsel/fixed-font :weight regular) diff-file-header) + (diff-context (:family ,swarsel/fixed-font :weight regular) diff-context) + (diff-added (:family ,swarsel/fixed-font :weight regular) diff-added) + (default (:family "Sans Serif" :weight light) variable-pitch default) + )) + (setq header-line-format nil) + (setq visual-fill-column-width 150) + (setq indicate-buffer-boundaries t) + (setq inhibit-message nil) + (setq org-babel-no-eval-on-error 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) + (remove-hook 'post-command-hook #'swarsel/org-reveal-at-point t) + (remove-hook 'post-command-hook #'swarsel/org-present-maybe-read-only t) + ) + + (defun swarsel/org-present-slide-open () + (org-overview) + (org-show-entry) + (org-show-children) + ) + + (defun swarsel/org-present-prev () + (interactive) + (beginning-of-buffer) + (org-present-prev) + (swarsel/org-present-slide-open) + ) + + (defun swarsel/org-present-next () + (interactive) + (let* ((next-heading (save-excursion + (when (outline-next-heading) (point)))) + (next-block (save-excursion + (when (re-search-forward "^#\\+begin_src" nil t) + (match-beginning 0)))) + (target (cond + ((and next-heading next-block) (min next-heading next-block)) + (next-heading next-heading) + (next-block next-block) + (t nil)))) + (if (and target (< target (point-max))) + (progn + (goto-char target) + (org-fold-show-entry) + (unless (pos-visible-in-window-p (point-max)) + (recenter 0))) + (org-present-next)))) #+end_src diff --git a/files/emacs/init.el b/files/emacs/init.el index 2ac4e40..d2380cc 100644 --- a/files/emacs/init.el +++ b/files/emacs/init.el @@ -1245,7 +1245,9 @@ create a new one." (if (and target (< target (point-max))) (progn (goto-char target) - (org-fold-show-entry)) + (org-fold-show-entry) + (unless (pos-visible-in-window-p (point-max)) + (recenter 0))) (org-present-next)))) (defun org-babel-execute:markdown (body params) diff --git a/hosts/nixos/x86_64-linux/pyramid/secrets/pii.nix.enc b/hosts/nixos/x86_64-linux/pyramid/secrets/pii.nix.enc index 84a7b9f..ca62d84 100644 --- a/hosts/nixos/x86_64-linux/pyramid/secrets/pii.nix.enc +++ b/hosts/nixos/x86_64-linux/pyramid/secrets/pii.nix.enc @@ -1,5 +1,5 @@ { - "data": "ENC[AES256_GCM,data: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,iv:I5pCXGk/JXER4l9Jrqu7PfF1eKgD5OdKNvjA6HE5lfQ=,tag:u2gosk6uo6GN4+JxJsV9Ew==,type:str]", + "data": "ENC[AES256_GCM,data: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,iv:vJ9l0dJLFw81An47a152ah9daGl5p6Gyt5xZCVuyMlw=,tag:mNSjkEFSTinNTGnqykoSrg==,type:str]", "sops": { "age": [ { @@ -7,8 +7,8 @@ "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsTXhHajBUQnY4MzJuTW5u\nME4vWHJrRCtQMWhWQ1pvU3h1UWVielFQSFFRCkl2RmpTRDh5Z3Q5UWcwS3RCVHds\nM05GNi8vNnpwS3FZcDBGWVdlZEdyVEUKLS0tIEM1SWdtZGV4QjhpaktRNkw0NDl1\neWlYN0tDMUhsWG1OSm9xWlM2VWJKcXcKa9aySsFOXPdwkmrmFc6X+WZT67vcuJf0\ndd1soIklu7xRuNpGKMuZbNKKgyRZnGrcUZUwwGIlJ2KRDag2risOXw==\n-----END AGE ENCRYPTED FILE-----\n" } ], - "lastmodified": "2026-03-24T18:37:56Z", - "mac": "ENC[AES256_GCM,data:0VwPHOcQi8uAzo7F+IKpMfs+UlcaKflC8xPYcT1ITY/PNwZD/mSh18oOjZ0J90UepMysHtYRnJ7BxZSYkBCp+GFcYWYdHrNhYdUOvI5wwTz3FCw4ybaZCmepPFIJl/7LOYX7lQnxegGWFyyVpjxGWh2pe3CIbs+g3ev+EPzqA9E=,iv:cTtBXjwJaUImChgTuPfiUqfXheD8QA402+8Fd0FWor8=,tag:WAdYeB690oI0ILqP05sTTQ==,type:str]", + "lastmodified": "2026-03-30T16:37:27Z", + "mac": "ENC[AES256_GCM,data:f8fnXvl1kQdHBgn6GtaXf/Y/CVXFDMc/ZIlXm/l6oDCnrCphIy61cQGpsYyoLgMeD9oHj3t0+mtZNA+5fdSLxgZdgAoNQbcOkxzly/Y+c+wFt+iaUUfQyFjHhqkU7EvyG2lLdDRr9RgN7yMDA3ptNItGaUBWJHumccFQJmjf9C0=,iv:vDZRJWdxmdI8ozpg7tXPMq9BPsRjJlT4Q39jsjokp3U=,tag:9mFVVoBxwF31aP7S9kceJg==,type:str]", "pgp": [ { "created_at": "2025-12-02T14:58:23Z",