Gehninfel
Table of Contents
1. Gehninfel the planaet
Gehninfel is a fiction land I created in a science-ficiton novel. It is a colourful, vibrant planet that is only accessible in a small window every year from a portal in the heart of Antarctica, around the South Pole. (Because the coordinates are anchored on the solar system)
2. Gehninfel the symbol
The creation of Gehninfel is an very early work(around when I’m 13 or so), and since then it has gradually become a symbol of a land that is all to myself, symbol of my inner world. I just started using it as alias around and naming stuff with it. I clearly remember that at one point my alias on http://drrr.com is “Herman, Governer of Gehninfel”, or “Governer Herman” in short. I think I still have a page on drrr.com’s wiki with that alias.
3. Gehninfel the website
gehninfel.xyz
is personal website and zettelkasten braindump of linfeng he. The idea basically follows digital gardening, braindump and zettelkasten, which I generally think is more or less the same thing. I just write notes, put them here, and make some connections between them.
4. Building Gehninfel the website
currently gehninfel.xyz
is in 2 parts both hosted on codeberg pages
:
- a simple main page (source), which is exported from an org-mode file with builtin
org-html-export-to-html
. I usually just edit the org-mode file,org-export
it, andgit push
the whole thing to the codeberg repo. a zettelkasten note base (source), which is exported from my org-roam notebase, with the following script:
;;; publish.el --- Description -*- lexical-binding: t; -*- ;; ;; Copyright (C) 2023 Linfeng He ;; ;; Author: Linfeng He <linfeng@linfeng-Legion-Y7000P-2019> ;; Maintainer: Linfeng He <linfeng@linfeng-Legion-Y7000P-2019> ;; Created: November 23, 2023 ;; Modified: November 23, 2023 ;; Version: 0.0.1 ;; Package-Requires: ((emacs "24.3")) ;; ;; This file is not part of GNU Emacs. ;; ;;; Commentary: ;; ;; Description ;; ;;; Code: (require 'ox-publish) (setq org-publish-project-alist '( ("test-notes" :base-directory "~/playground/org-id-notes-example/" :base-extension "org" :publishing-directory "~/playground/public_html/" :recursive t :publishing-function org-html-publish-to-html :headline-levels 4 ; Just the default for this project. :auto-preamble t ) ("test-notes-static" :base-directory "~/playgrdoun/org-id-notes-example/" :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf" :publishing-directory "~/playground/public_html/" :recursive t :publishing-function org-publish-attachment ) ("test" :components ("test-notes" "test-notes-static")) ("org-roam-notes" :base-directory "~/Notes/RoamNotes/" :base-extension "org" :publishing-directory "~/playground/projects/braindump/braindump/" :recursive t :publishing-function org-html-publish-to-html :headline-levels 4 ; Just the default for this project. :auto-preamble t ) ("org-roam-notes-static" :base-directory "~/Notes/RoamNotes/" :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf" :publishing-directory "~/playground/projects/braindump/braindump/" :recursive t :publishing-function org-publish-attachment ) ("braindump-utility" :base-directory "~/playground/projects/braindump/braindump-utilities/" :base-extension "org" :publishing-directory "~/playground/projects/braindump/braindump/" :publishing-function org-html-publish-to-html :headline-levels 4 ; Just the default for this project. :auto-preamble t ) ("org-roam" :components ("org-roam-notes" "org-roam-notes-static" "braindump-utility")) )) (defun publish-my-org-export-filter-link (link backend info) (when (string= "info" (org-element-property :type link)) ;; (string-match-p "TARGET-TO-IGNORE" (org-element-property :path link)) nil ;; Return nil to exclude this link from the export )) (add-to-list 'org-export-filter-link-functions 'publish-my-org-export-filter-link) (setq org-export-with-broken-links t) ;; (org-export-to-file 'EXPORT-BACKEND "OUTPUT-FILE") (defcustom rasmus/setup-file '( "https://fniessen.github.io/org-html-themes/org/theme-bigblow.setup" ) "list of string with setup file or functions. Functions must take care of keyword themselves and must return strings.") (defcustom rasmus/setup-file-keyword "#+SETUPFILE: " "Keyword used by `rasmus/org-export-setup-files'") (defun rasmus/org-export-setup-files (backend) "Include setup-files automatically. See also `rasmus/setup-file' and `rasmus/setup-file-keyword'" ;; TODO: Resolve local files. ;; TODO: Better control over where contents is inserted. (save-excursion (goto-char (point-max)) (insert "\n" (mapconcat (lambda (elm) (cond ((stringp elm) (concat rasmus/setup-file-keyword elm)) (functionp elm) (funcall elm) (t (error "`rasmus/setup-file' should contain only strings and functions!")))) rasmus/setup-file "\n")))) ;; from https://org-roam.discourse.group/t/export-backlinks-on-org-export/1756/21?page=2 (defun collect-backlinks-string (backend) (when (org-roam-node-at-point) (let* ((source-node (org-roam-node-at-point)) (source-file (org-roam-node-file source-node)) (nodes-in-file (--filter (s-equals? (org-roam-node-file it) source-file) (org-roam-node-list))) (nodes-start-position (-map 'org-roam-node-point nodes-in-file)) ;; Nodes don't store the last position, so get the next headline position ;; and subtract one character (or, if no next headline, get point-max) (nodes-end-position (-map (lambda (nodes-start-position) (goto-char nodes-start-position) (if (org-before-first-heading-p) ;; file node (point-max) (call-interactively 'org-forward-heading-same-level) (if (> (point) nodes-start-position) (- (point) 1) ;; successfully found next (point-max)))) ;; there was no next nodes-start-position)) ;; sort in order of decreasing end position (nodes-in-file-sorted (->> (-zip nodes-in-file nodes-end-position) (--sort (> (cdr it) (cdr other)))))) (dolist (node-and-end nodes-in-file-sorted) (-let (((node . end-position) node-and-end)) (when (org-roam-backlinks-get node) (goto-char end-position) ;; Add the references as a subtree of the node (setq heading (format "\n\n%s Backlinks\n" (s-repeat (+ (org-roam-node-level node) 1) "*"))) (insert heading) (setq properties-drawer ":PROPERTIES:\n:HTML_CONTAINER_CLASS: references\n:END:\n") (insert properties-drawer) (dolist (backlink (org-roam-backlinks-get node)) (let* ((source-node (org-roam-backlink-source-node backlink)) (properties (org-roam-backlink-properties backlink)) (outline (when-let ((outline (plist-get properties :outline))) (mapconcat #'org-link-display-format outline " > "))) (point (org-roam-backlink-point backlink)) (text (s-replace "\n" " " (org-roam-preview-get-contents (org-roam-node-file source-node) point))) (reference (format "%s [[id:%s][%s]]\n%s\n%s\n\n" (s-repeat (+ (org-roam-node-level node) 2) "*") (org-roam-node-id source-node) (org-roam-node-title source-node) (if outline (format "%s (/%s/)" (s-repeat (+ (org-roam-node-level node) 3) "*") outline) "") text))) (insert reference))))))))) (add-hook 'org-export-before-processing-functions 'rasmus/org-export-setup-files) (add-hook 'org-export-before-processing-functions 'collect-backlinks-string) (provide 'publish) ;;; publish.el ends here
My file structure is as follows:
. ├── braindump └── braindump-utilities ├── index.org └── publish.el
index.org is there as index.html for
z.gehninfel.xyz
to land on.
4.1. build process
my build process is manual and goes like this:
- [I open emacs]
- I run
org-publish
with targetcodeberg-publish
, which would populate a directory with source ofz.gehninfel.xyz
, andgit add . && git commit && git push origin
(will prompt for authentication)
Backlinks
projects
Index of all projects I have done
- dedicated session
- kernel routine
- Gehninfel - the website
- I have recorded 2 original piano compositions for my bestie Coco’s birthdays. They are with large portion of improvisation, generally in jazz and pop/new age style, with some chord movements that makes more sense sementically than musically. I’ll attach scores and links to recordings here when I have found them.
- I have recorded 1 original piano soundtrack for a mini-film coursework on procrastination. It is very confusing with lots of chromatic chord movements. I’ll attach scores and links to recordings here when I have them.
- I upload sketches to my deviantArt account. It is not a project per se, but is something that I do.
- developmental luc steels’ mars explorer
about
This probably should not be part of the main Zettelkasten, but I put it here anyway.
- Who am I
- Linfeng He, for short.
- This site
- Gehninfel
- (no term)
about this zettelkasten
This zettelkasten is my second zettelkasten with org-roam, and my 5th zettelkasten of all(there’s one other with Roam Research, 2 others with Obsidian).
This zettelkasten uses the org-roam implementation of zettelkasten. I typically use this zettekasten inside emacs, where zettelkasten primitives like search for note
, create note
, create link to note
, find backlinks
are implemented in the org-roam package and could be called with one custom keybinding.
There’s a public html export of this zettelkasten on Gehninfel (link). I did not filter the draft tag, so everything’s on there. In the future I might want to change this.
There are 5 main categories/directories to the notes:
- main
- ideas in the most literate form
- article
- compilation, blog and tutorials
- reference
- noting something that I did not come up with
- doc
- typically on code-heavy notes and those that tangles
- project
- on projects, archive, description.
I currently use a giant index zettel to keep all of my notebase connected. Now it is one file with about 100 outgoing links to other zettels. In future I’ll make more intermediate navigation/index notes and replace some links on index with them.
I don’t use tags in the zettelkasten, but use navigation notes, with the latter half of the idea Tag and link: Gate and corridor.
doomemacs configuration
(org-roam > publish)
It’s a full file with comments and provide
and I don’t feel like moving it just yet.
Most of it is in Gehninfel.
(load "~/playground/projects/braindump/braindump-utilities/publish.el")