((p "A Zettelstore must store its zettel somehow and somewhere." " " "In most cases you want to store your zettel as files in a directory." " " "Under certain circumstances you may want to store your zettel elsewhere.") (p "An example are the " (a (@ (href . "00001005090000")) "predefined zettel") " that come with a Zettelstore." " " "They are stored within the software itself." " " "In another situation you may want to store your zettel volatile, e.g. if you want to provide a sandbox for experimenting.") (p "To cope with these (and more) situations, you configure Zettelstore to use one or more " (em "boxes") "." " " "This is done via the " (kbd "box-uri-X") " keys of the " (a (@ (href . "00001004010000#box-uri-X")) "startup configuration") " (X is a number)." " " "Boxes are specified using special " (a (@ (href . "https://en.wikipedia.org/wiki/Uniform_Resource_Identifier") (rel . "external")) "URIs") ", somehow similar to web addresses.") (p "The following box URIs are supported:") (dl (dt (a (@ (id . "dir")) (kbd "dir://DIR"))) (dd (p "Specifies a directory where zettel files are stored." " " (kbd "DIR") " is the file path." " " "Although it is possible to use relative file paths, such as " (kbd "./zettel") " (→ URI is " (kbd "dir://.zettel") "), it is preferable to use absolute file paths, e.g. " (kbd "/home/user/zettel") ".") (p "The directory must exist before starting the Zettelstore" (sup (@ (id . "fnref:1")) (a (@ (class . "zs-noteref") (href . "#fn:1") (role . "doc-noteref")) "1")) ".") (p "It is possible to " (a (@ (href . "00001004011400")) "configure") " a directory box.")) (dt (a (@ (id . "file")) (kbd "file:FILE.zip") " or " (kbd "file:///path/to/file.zip"))) (dd (p "Specifies a ZIP file which contains files that store zettel." " " "You can create such a ZIP file, if you zip a directory full of zettel files.") (p "This box is always read-only.")) (dt (a (@ (id . "mem")) (kbd "mem:"))) (dd (p "Stores all its zettel in volatile memory." " " "If you stop the Zettelstore, all changes are lost." " " "To limit usage of volatile memory, you should " (a (@ (href . "00001004011600")) "configure") " this type of box, although the default values might be valid for your use case."))) (p "All boxes that you configure via the " (kbd "box-uri-X") " keys form a chain of boxes." " " "If a zettel should be retrieved, a search starts in the box specified with the " (kbd "box-uri-2") " key, then " (kbd "box-uri-3") " and so on." " " "If a zettel is created or changed, it is always stored in the box specified with the " (kbd "box-uri-1") " key." " " "This allows to overwrite zettel from other boxes, e.g. the predefined zettel.") (p "If you use the " (kbd "mem:") " box, where zettel are stored in volatile memory, it makes only sense if you configure it as " (kbd "box-uri-1") "." " " "Such a box will be empty when Zettelstore starts and only the first box will receive updates." " " "You must make sure that your computer has enough RAM to store all zettel."))