{"id":29079552,"url":"https://github.com/markusfisch/simsalabash","last_synced_at":"2025-06-27T17:08:13.576Z","repository":{"id":1924526,"uuid":"2852719","full_name":"markusfisch/simsalabash","owner":"markusfisch","description":"Hypertext mechanics in Bash","archived":false,"fork":false,"pushed_at":"2021-04-04T15:42:32.000Z","size":50,"stargazers_count":12,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2023-03-11T13:38:08.005Z","etag":null,"topics":["bash","shell","static-site-generator"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markusfisch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-11-25T21:39:39.000Z","updated_at":"2021-04-04T15:42:34.000Z","dependencies_parsed_at":"2022-09-15T06:41:21.453Z","dependency_job_id":null,"html_url":"https://github.com/markusfisch/simsalabash","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/markusfisch/simsalabash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusfisch%2Fsimsalabash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusfisch%2Fsimsalabash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusfisch%2Fsimsalabash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusfisch%2Fsimsalabash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markusfisch","download_url":"https://codeload.github.com/markusfisch/simsalabash/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markusfisch%2Fsimsalabash/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262298770,"owners_count":23289603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","shell","static-site-generator"],"created_at":"2025-06-27T17:06:32.147Z","updated_at":"2025-06-27T17:08:13.547Z","avatar_url":"https://github.com/markusfisch.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Hypertext mechanics in Bash\n===========================\n\nFor command line nerds. With love.\n\nA sample is worth a thousand words:\n\n\t$ mkdir contents htdocs layouts\n\t$ echo '\u003ch1\u003eHello World\u003c/h1\u003e' \u003e contents/Hello-World\n\t$ echo '\u003chtml\u003e\u003cbody\u003e`content`\u003c/body\u003e\u003c/html\u003e' \u003e layouts/contents.html\n\t$ simsalabash\n\t$ firefox htdocs/index.html\n\nFind more reasonable examples in examples/.\n\nHow does it work?\n-----------------\n\nFor every file in contents/, the corresponding layout will get expanded into\nhtdocs/ where the output is stored under the name of the content file with\nthe extension of the layout file.\n\nLayouts correspond to content files, when their name (without extension) does\nmatch a component of the (relative) path of the content file. Matching starts\nfrom the rear end with the file name.\n\nIn your content and/or layout files you may use shell expansions like\n\n\t$(command)\n\nor\n\n\t$((expression))\n\nor\n\n\tHi, this is $USER talking.\n\nto combine your website.\n\nsimsalabash does provide the following handy commands:\n\n\ttitle    - prints the title which is the formatted file name\n\t           of the content file in process\n\n\t           usage: title\n\n\n\tnav      - prints a recursive standard list navigation\n\n\t           usage: [(UNFOLD|FLAT)=1] nav [PATH]\n\n\t           PATH - content path (optional, defaults to content/)\n\t           UNFOLD - unfold navigation, this will make a sitemap\n\t           FLAT - do not dive into subdirectories\n\n\n\tcontent  - prints the content of file in process\n\n\t           usage: content\n\n\n\tinclude  - include (and expand) another content/layout file\n\n\t           usage: include FILE...\n\n\t           FILE - path and name of file to include\n\n\nApart from that, you're free to invoke any command you like. For\nexample, you may do something like this:\n\n\t$FILE was written by $(whoami)\n\n$FILE holds the path and name of the content file in process.\n\nHow to extend simsalabash?\n--------------------------\n\nThere are two places for additional source files:\n\n\t$HOME/.simsalabash/\n\t$PWD/lib/\n\nUse the first location for general extensions you want to have always.\nUse the latter for project specific extensions and modifications.\n\nYou can override existing functions to extend simsalabash or add\nnew ones to add further functionality.\n\nHow to use Markdown?\n--------------------\n\nDownload Markdown.pl from\n\nhttp://daringfireball.net/projects/markdown/\n\nand put it into your path. Then paste this\n\n\tcontent()\n\t{\n\t\tinclude \"$FILE\" | Markdown.pl\n\t}\n\ninto a file in $HOME/.simsalabash/ to override and extend the default\nfunction.\n\nPurpose\n-------\n\nsimsalabash aims to be a simple tool to combine a website from a bunch\nof text files and generate a recursive standard list navigation for it.\n\nIt was designed to minify the effort to build and maintain small static\nwebsites and targets the experienced Bash user.\n\nBut simsalabash is not a Jack of all Trades. Please check out the advantages\nand disadvantages:\n\nAdvantages and principles\n-------------------------\n\n* Little to no configuration.\n* Meaningful structure of content/ which mirrors your web site.\n* Automatically generates a recursive standard list navigation.\n* Easy sorting of navigation items with .nav files.\n* The output directory is not temporary so assets and downloads won't\n  get copied everytime you're doing an rsync.\n* No dependencies beyond Bash, cat, mktemp, rm and probably tr (Bash \u003c 4).\n\nDisadvantages and limitations\n-----------------------------\n\n* Markdown and things like that are external.\n* There's no integrated web server and never will be.\n* Bash is slow (but fast enough for any web site of reasonable size).\n* Bash is not object-oriented, nor easy, nor hip.\n\nAlternatives\n------------\n\nFind a comprehensive list at [staticsitegenerators.net](http://staticsitegenerators.net/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkusfisch%2Fsimsalabash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkusfisch%2Fsimsalabash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkusfisch%2Fsimsalabash/lists"}