Andreas Röhler <andreas.roeh...@easy-emacs.de> writes:

>   ;; Automatically write the data, but only when we have write access.
>   (when (org-persist--check-write-access org-persist-directory)
> +  (unless (string= "root" (getenv "USER"))
>       (add-hook 'kill-emacs-hook #'org-persist-clear-storage-maybe) ; 
> Run last.
>       (add-hook 'kill-emacs-hook #'org-persist-write-all)
>       ;; `org-persist-gc' should run before `org-persist-write-all'.
>       ;; So we are adding the hook after `org-persist-write-all'.
> -  (add-hook 'kill-emacs-hook #'org-persist-gc))
> +    (add-hook 'kill-emacs-hook #'org-persist-gc)))

This will not be enough because some parts of the code force writing
cache. Disabling the cleanup will simply make things worse in your
situation.

> The issue occurred at NixOS when running Emacs as root in order to edit 
> configuration.nix.
> ...
> Debugger entered--Lisp error: (permission-denied "Opening input file" 
> "Permission denied" "/home/MySelf/.cache/org-persist/index.eld")
> insert-file-contents("/home/MySelf/.cache/org-persist/index.eld")
> org-persist--read-elisp-file("/home/MySelf/.cache/org-persist/index.eld")
>    org-persist-read:index((index "3.2") 
> "/home/MySelf/.cache/org-persist/index.eld" nil)
>    org-persist-load:index((index "3.2") 

Can you try the attached patch?

>From 65b87dab6f8b7142ac4a9db7a6a71c5c1a982f6c Mon Sep 17 00:00:00 2001
Message-ID: <65b87dab6f8b7142ac4a9db7a6a71c5c1a982f6c.1754226853.git.yanta...@posteo.net>
From: Ihor Radchenko <yanta...@posteo.net>
Date: Sun, 3 Aug 2025 15:13:03 +0200
Subject: [PATCH] org-persist: Fix edge case when we have no permission to read
 index file
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* lisp/org-persist.el (org-persist-read:index): Do not try reading
index file we have no permission to read.

Reported-by: Andreas Röhler <andreas.roeh...@easy-emacs.de>
Link: https://orgmode.org/list/ee44aed6-8b50-4afd-bb90-47675ce84...@easy-emacs.de
---
 lisp/org-persist.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/org-persist.el b/lisp/org-persist.el
index d2c5f6760..cb69a9380 100644
--- a/lisp/org-persist.el
+++ b/lisp/org-persist.el
@@ -760,7 +760,7 @@ (defun org-persist-read:url (_ path __)
 
 (defun org-persist-read:index (cont index-file _)
   "Read index container CONT from INDEX-FILE."
-  (when (file-exists-p index-file)
+  (when (and (file-exists-p index-file) (file-readable-p index-file))
     (let ((index (org-persist--read-elisp-file index-file)))
       (when index
         (catch :found
-- 
2.50.1

-- 
Ihor Radchenko // yantar92,
Org mode maintainer,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>

Reply via email to