diff --git a/.project.el b/.project.el
deleted file mode 100644
index 9db8eb1..0000000
--- a/.project.el
+++ /dev/null
@@ -1,204 +0,0 @@
-(require 'org)
-(require 'ox-publish)
-(require 'ox-html)
-(require 'org-element)
-(require 'ox-rss)
-
-(setq org-link-file-path-type 'relative)
-
-(defun org-blog-prepare (project-plist)
- "With help from `https://github.com/howardabrams/dot-files'.
- Touch `index.org' to rebuilt it.
- Argument `PROJECT-PLIST' contains information about the current project."
- (let* ((base-directory (plist-get project-plist :base-directory))
- (buffer (find-file-noselect (expand-file-name "index.org" base-directory) t)))
- (with-current-buffer buffer
- (set-buffer-modified-p t)
- (save-buffer 0))))
-
-(defvar org-blog-head
- (concat
- ""
- ""
- ""
- ""))
-
-(defun menu (lst)
- "Blog menu"
- (concat
- ""))
-
-
-(defun str-time-to-year-float (date-str)
- (/ (float-time
- (apply 'encode-time
- (mapcar (lambda (x) (if (null x) 0 x))
- (parse-time-string date-str))))
- (* 365.25 24 60 60)))
-
-(defvar blog-creation-date "2019-07-01")
-
-(defun y-date (date-str)
- "Number of year since the begining of this blog"
- (let ((y (- (str-time-to-year-float date-str)
- (str-time-to-year-float blog-creation-date))))
- (format "∆t=%.2f" y)))
-
-(defun org-blog-preamble (info)
- "Pre-amble for whole blog."
- (concat
- "
"
- (menu '("
↓ bottom ↓"))
- "
"
- (format "%s" (car (plist-get info :title)))
- (when-let ((date (get-from-info info :date)))
- (format " - %s" date))
- "
"
- "
"))
-
-(defun get-from-info (info k)
- (let ((i (car (plist-get info k))))
- (when (and i (stringp i))
- i)))
-
-(defun rand-obfs (c)
- (let ((r (% (random) 20)))
- (cond ((eq 0 r) (format "%c" c))
- ((< 0 r 10) (format "%d;" c))
- (t (format "%X;" c)))))
-
-(defun obfuscate-html (txt)
- (apply 'concat
- (mapcar 'rand-obfs txt)))
-
-(defun org-blog-postamble (info)
- "Post-amble for whole blog."
- (concat
- ""
- "
"
- (menu '("
↑ Top ↑"))
- "
"))
-
-(defun org-blog-sitemap-format-entry (entry _style project)
- "Return string for each ENTRY in PROJECT."
- (when (s-starts-with-p "posts/" entry)
- (format "@@html:@@ %s: @@html:@@ [[file:%s][%s]] @@html:@@"
- (format-time-string "%Y-%m-%d"
- (org-publish-find-date entry project))
- entry
- (org-publish-find-title entry project))))
-
-(defun org-blog-sitemap-function (title list)
- "Return sitemap using TITLE and LIST returned by `org-blog-sitemap-format-entry'."
- (concat "#+TITLE: " title "\n"
- "#+AUTHOR: Yann Esposito\n"
- "#+EMAIL: yann.esposito@gmail.com\n"
- "\n#+begin_archive\n"
- (mapconcat (lambda (li)
- (format "@@html:@@ %s @@html:@@" (car li)))
- (seq-filter #'car (cdr list))
- "\n")
- "\n#+end_archive\n"))
-
-(setq base-dir (concat (projectile-project-root) "src"))
-(setq publish-dir (concat (projectile-project-root) "_site"))
-(setq assets-dir (concat base-dir "/assets"))
-(setq publish-assets-dir (concat publish-dir "/assets"))
-(setq rss-dir base-dir)
-(setq publish-rss-dir publish-dir)
-(setq domainname "https://her.esy.fun")
-(setq org-publish-project-alist
- `(("orgfiles"
- :base-directory ,base-dir
- :exclude ".*drafts/.*"
- :base-extension "org"
-
- :publishing-directory ,publish-dir
-
- :recursive t
- :preparation-function org-blog-prepare
- :publishing-function org-html-publish-to-html
-
- :with-toc nil
- :with-title nil
- :with-date t
- :section-numbers nil
- :html-doctype "html5"
- :html-html5-fancy t
- :html-head-include-default-style nil
- :html-head-include-scripts nil
- :htmlized-source t
- :html-head-extra ,org-blog-head
- :html-preamble org-blog-preamble
- :html-postamble org-blog-postamble
-
- :auto-sitemap t
- :sitemap-filename "archive.org"
- :sitemap-title "Blog Posts"
- :sitemap-style list
- :sitemap-sort-files anti-chronologically
- :sitemap-format-entry org-blog-sitemap-format-entry
- :sitemap-function org-blog-sitemap-function)
-
- ("assets"
- :base-directory ,assets-dir
- :base-extension ".*"
- :publishing-directory ,publish-assets-dir
- :publishing-function org-publish-attachment
- :recursive t)
-
- ("rss"
- :base-directory ,rss-dir
- :base-extension "org"
- :html-link-home ,domainname
- :html-link-use-abs-url t
- :rss-extension "xml"
- :publishing-directory ,publish-rss-dir
- :publishing-function (org-rss-publish-to-rss)
- :exclude ".*"
- :include ("archive.org")
- :section-numbers nil
- :table-of-contents nil)
-
- ("blog" :components ("orgfiles" "assets" "rss"))))
-
-;; add target=_blank and rel="noopener noreferrer" to all links by default
-(defun my-org-export-add-target-blank-to-http-links (text backend info)
- "Add target=\"_blank\" to external links."
- (when (and
- (org-export-derived-backend-p backend 'html)
- (string-match "href=\"http[^\"]+" text)
- (not (string-match "target=\"" text))
- (not (string-match (concat "href=\"" domainname "[^\"]*") text)))
- (string-match "/dev/null"
+ "|grep DECRYPTION_KEY"
+ "|awk '{print $4}'"))))
+
+ (defun y/trusted-gpg-origin-p (file)
+ "Returns true if the file is encrypted with a trusted key"
+ (member (y/get-encryption-key file) y/trusted-gpg-key-fingerprints))
+
+ (defun y/project-el-auto-load ()
+ (with-eval-after-load 'projectile
+ (defconst y/project-file ".project.el.gpg"
+ "Filename looked after to be loaded and evaluated.")
+ (defvar y/loaded-projects (list)
+ "Projects that have been loaded by `y/load-project-file'.")
+ (defun y/load-project-file ()
+ "Loads the `y/project-file' for a project. This is run
+ once after the project is loaded signifying project setup."
+ (interactive)
+ (when (projectile-project-p)
+ (lexical-let* ((project-root (projectile-project-root))
+ (project-init-file (expand-file-name y/project-file project-root)))
+ (when (and (not (member project-root y/loaded-projects)) ;; project file not already loaded
+ (file-exists-p project-init-file) ;; project file exists
+ (y/trusted-gpg-origin-p project-init-file)) ;; project file is tursted
+ (message "Loading project init file for %s" (projectile-project-name))
+ (condition-case ex
+ (progn (load project-init-file)
+ (add-to-list 'y/loaded-projects project-root)
+ (message "%s loaded successfully" project-init-file))
+ ('error
+ (message
+ "There was an error loading %s: %s"
+ project-init-file
+ (error-message-string ex))))))))
+ ;; for some obscure reason there is not really a working hook
+ ;; to be used with projectile to launch the `y/load-project-file'
+ ;; only when switching to a new project.
+ ;; Thus the `y/loaded-projects' state.
+ (add-hook 'find-file-hook #'y/load-project-file t)
+ (add-hook 'dired-mode-hook #'y/load-project-file t)))
+#+end_src
+
+