From 050daea24e46fa2f7e140e178e489acd3f747e74 Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Thu, 15 Jan 2026 13:40:01 -0500 Subject: [PATCH] save --- docker-compose.yml | 2 +- docs.vxserver.dev/Dockerfile | 7 -- fsd.vxserver.dev/Dockerfile | 7 -- .../archive/{ => fes}/fes-0.1.0.tar.gz | Bin .../archive/{ => fes}/fes-0.2.0.tar.gz | Bin .../archive/tools/yait-0.3.tar.gz | Bin 0 -> 4876 bytes fsd.vxserver.dev/archive/yait-1.0.tar.gz | Bin 7311 -> 0 bytes fsd.vxserver.dev/article/Versioning.md | 67 --------------- fsd.vxserver.dev/include/global.lua | 34 ++++++++ fsd.vxserver.dev/include/header.lua | 15 ---- fsd.vxserver.dev/www/about.lua | 10 +-- fsd.vxserver.dev/www/article.lua | 81 ------------------ fsd.vxserver.dev/www/community.lua | 21 +++++ fsd.vxserver.dev/www/faq.lua | 28 ------ fsd.vxserver.dev/www/hacking.lua | 45 ++++++++++ fsd.vxserver.dev/www/index.lua | 56 ++---------- .../www/{release.lua => releases.lua} | 11 +-- fsd.vxserver.dev/www/releases/fes.lua | 10 +-- fsd.vxserver.dev/www/releases/yait.lua | 10 +-- 19 files changed, 118 insertions(+), 286 deletions(-) delete mode 100644 docs.vxserver.dev/Dockerfile delete mode 100644 fsd.vxserver.dev/Dockerfile rename fsd.vxserver.dev/archive/{ => fes}/fes-0.1.0.tar.gz (100%) rename fsd.vxserver.dev/archive/{ => fes}/fes-0.2.0.tar.gz (100%) create mode 100644 fsd.vxserver.dev/archive/tools/yait-0.3.tar.gz delete mode 100644 fsd.vxserver.dev/archive/yait-1.0.tar.gz delete mode 100644 fsd.vxserver.dev/article/Versioning.md create mode 100644 fsd.vxserver.dev/include/global.lua delete mode 100644 fsd.vxserver.dev/include/header.lua delete mode 100644 fsd.vxserver.dev/www/article.lua create mode 100644 fsd.vxserver.dev/www/community.lua delete mode 100644 fsd.vxserver.dev/www/faq.lua create mode 100644 fsd.vxserver.dev/www/hacking.lua rename fsd.vxserver.dev/www/{release.lua => releases.lua} (60%) diff --git a/docker-compose.yml b/docker-compose.yml index bbef596..f542870 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,4 +10,4 @@ services: ports: - "2101:3000" volumes: - - ./docs.vxserver.dev:/app + - ./docs.vxserver.dev:/app diff --git a/docs.vxserver.dev/Dockerfile b/docs.vxserver.dev/Dockerfile deleted file mode 100644 index a64443c..0000000 --- a/docs.vxserver.dev/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM fes:latest - -COPY . /app - -WORKDIR /app - -CMD ["fes", "-p", "2101", "run", "/app"] diff --git a/fsd.vxserver.dev/Dockerfile b/fsd.vxserver.dev/Dockerfile deleted file mode 100644 index c0168a8..0000000 --- a/fsd.vxserver.dev/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM fes:latest - -COPY . /app - -WORKDIR /app - -CMD ["fes", "-p", "2100", "run", "/app"] diff --git a/fsd.vxserver.dev/archive/fes-0.1.0.tar.gz b/fsd.vxserver.dev/archive/fes/fes-0.1.0.tar.gz similarity index 100% rename from fsd.vxserver.dev/archive/fes-0.1.0.tar.gz rename to fsd.vxserver.dev/archive/fes/fes-0.1.0.tar.gz diff --git a/fsd.vxserver.dev/archive/fes-0.2.0.tar.gz b/fsd.vxserver.dev/archive/fes/fes-0.2.0.tar.gz similarity index 100% rename from fsd.vxserver.dev/archive/fes-0.2.0.tar.gz rename to fsd.vxserver.dev/archive/fes/fes-0.2.0.tar.gz diff --git a/fsd.vxserver.dev/archive/tools/yait-0.3.tar.gz b/fsd.vxserver.dev/archive/tools/yait-0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6f0ff65ad3e80a477fd7b74461fd819a76234fa1 GIT binary patch literal 4876 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 literal 0 HcmV?d00001 diff --git a/fsd.vxserver.dev/archive/yait-1.0.tar.gz b/fsd.vxserver.dev/archive/yait-1.0.tar.gz deleted file mode 100644 index 95014003631169d2d1f7a410e5613803f55c685f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7311 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 1.10.0 -> 1.11.0. - -Once a versioned package has been released, the contents of that version MUST NOT be modified. Any modifications MUST be released as a new version. - -Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable. - -Version 1.0.0 defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes. - -Patch version Z (x.y.Z | x > 0) MUST be incremented if only backward compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior. - -Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backward compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated. It MAY be incremented if substantial new functionality or improvements are introduced within the private code. It MAY include patch level changes. Patch version MUST be reset to 0 when minor version is incremented. - -Major version X (X.y.z | X > 0) MUST be incremented if any backward incompatible changes are introduced to the public API. It MAY also include minor and patch level changes. Patch and minor versions MUST be reset to 0 when major version is incremented. - -A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. Identifiers MUST comprise only ASCII alphanumerics and hyphens [0-9A-Za-z-]. Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes. Pre-release versions have a lower precedence than the associated normal version. A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version. Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92, 1.0.0-x-y-z.--. - -Build metadata MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version. Identifiers MUST comprise only ASCII alphanumerics and hyphens [0-9A-Za-z-]. Identifiers MUST NOT be empty. Build metadata MUST be ignored when determining version precedence. Thus two versions that differ only in the build metadata, have the same precedence. Examples: 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85, 1.0.0+21AF26D3----117B344092BD. - -Precedence refers to how versions are compared to each other when ordered. - -Precedence MUST be calculated by separating the version into major, minor, patch and pre-release identifiers in that order (Build metadata does not figure into precedence). - -Precedence is determined by the first difference when comparing each of these identifiers from left to right as follows: Major, minor, and patch versions are always compared numerically. - -Example: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1. - -When major, minor, and patch are equal, a pre-release version has lower precedence than a normal version: - -Example: 1.0.0-alpha < 1.0.0. - -Precedence for two pre-release versions with the same major, minor, and patch version MUST be determined by comparing each dot separated identifier from left to right until a difference is found as follows: - -Identifiers consisting of only digits are compared numerically. - -Identifiers with letters or hyphens are compared lexically in ASCII sort order. - -Numeric identifiers always have lower precedence than non-numeric identifiers. - -A larger set of pre-release fields has a higher precedence than a smaller set, if all of the preceding identifiers are equal. - -Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0. - -### Attributions - -The summary of Semantic Versioning 2.0.0 is based on the offical specification at [semver.org](https://semver.org/spec/v2.0.0.html) and is published under a [Creative Commons -- CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) license. - -The specification of Semantic Versioning 2.0.0 is based on the offical specification at [semver.org](https://semver.org/spec/v2.0.0.html) and is published under a [Creative Commons -- CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) license. diff --git a/fsd.vxserver.dev/include/global.lua b/fsd.vxserver.dev/include/global.lua new file mode 100644 index 0000000..97d03ad --- /dev/null +++ b/fsd.vxserver.dev/include/global.lua @@ -0,0 +1,34 @@ +local global = {} + +global.start = function(fes, site, title) + if title and title ~= "" then + title = title .. " - " + else + title = "" + end + site.title = title .. "Free Software Distributions " + site.copyright = fes.util.copyright("https://fsdproject.org", "fSD") + site.favicon = "/static/favicon.ico" + site:banner(fes.util.cc { + fes.std.center(fes.std.ha("/", fes.std.h1("Free Software Distributions"))), + fes.std.center(fes.util.cc { + fes.std.nav("/about", "About"), + fes.std.nav("/community", "Community"), + fes.std.nav("/releases", "Releases"), + fes.std.nav("/hacking", "Hacking"), + }) + }) +end + +global.finish = function(fes, site) + site:note(fes.util.cc { + fes.std.h2("Other resources"), + fes.std.tl({ + fes.std.external("https://git.vxserver.dev", "Git Trees"), + fes.std.external("https://docs.fsdproject.org", "Documentation"), + }), + + }) +end + +return global diff --git a/fsd.vxserver.dev/include/header.lua b/fsd.vxserver.dev/include/header.lua deleted file mode 100644 index d67a981..0000000 --- a/fsd.vxserver.dev/include/header.lua +++ /dev/null @@ -1,15 +0,0 @@ -local header = {} - -header.render = function(std) - return table.concat({ - std.center(std.ha("/", std.h1("Free Software Distributions"))), - std.center(table.concat({ - std.nav("/about", "About"), - std.nav("/faq", "FAQ"), - std.nav("/release", "Releases"), - std.nav("/article", "Articles"), - })) - }) -end - -return header diff --git a/fsd.vxserver.dev/www/about.lua b/fsd.vxserver.dev/www/about.lua index ebbc2c4..99b3d8c 100644 --- a/fsd.vxserver.dev/www/about.lua +++ b/fsd.vxserver.dev/www/about.lua @@ -4,13 +4,7 @@ local u = fes.util local site = fes.fes() -local title = "Free Software Distributions" - -site.title = title .. "- About" -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" - -site:banner(fes.app.header.render(std)) +fes.app.global.start(fes, site, "About") site:note(u.cc({ std.h2("Free Software Distributions"), @@ -50,6 +44,6 @@ site:note(u.cc({ std.p("Except where otherwise stated, content on this site is copyright (C) 2025 by fSD and is made avaliable to you under the " .. fes.std.a("https://creativecommons.org/licenses/by-nc/4.0/", "Creative Commons Attribtuion-NonCommerical 4.0 International")) })) -site:note(fes.app.footer.render(std)) +fes.app.global.finish(fes, site) return site diff --git a/fsd.vxserver.dev/www/article.lua b/fsd.vxserver.dev/www/article.lua deleted file mode 100644 index b8475b7..0000000 --- a/fsd.vxserver.dev/www/article.lua +++ /dev/null @@ -1,81 +0,0 @@ -local fes = require("fes") -local std = fes.std -local u = fes.util - -local site = fes.fes() - -local title = "Free Software Distributions" - -site.title = title .. " - Site articles" -site.copyright = u.copyright("[https://git.vxserver.dev/fSD](https://git.vxserver.dev/fSD)", "fSD") -site.favicon = "/static/favicon.ico" -site:banner(fes.app.header.render(std)) - -local function url_encode(s) - if not s then return "" end - s = s:gsub("([^%w%-_.~])", function(c) return string.format("%%%02X", string.byte(c)) end) - return s -end - -local function read_file(path) - local f = io.open(path, "r") - if not f then return nil end - local data = f:read("*a") - f:close() - return data -end - -local dir = "article" -local files = u.ls(dir) - -local params = fes.bus.params or {} -local article = params.article -if type(article) == "table" then - article = article[1] -end - -if article then - local candidates = { article, article .. ".txt", article .. ".md", article .. ".html" } - local body - for _, c in ipairs(candidates) do - local p = dir .. "/" .. c - body = read_file(p) - if body then break end - end - site.title = article - if body then - site:g("") - site:g(fes.markdown_to_html(body)) - else - site:note(u.cc { - std.h1(article), - std.p("article not found"), - }) - end - site:note(fes.app.footer.render(std)) - return site -end - -local articles = {} -local n = 0 -for _, v in ipairs(files) do - local display = v:gsub("%.[^%.]+$", "") - local link = "/article?article=" .. url_encode(display) - table.insert(articles, std.a(link, display)) - n = n + 1 -end - -table.sort(articles, function (x, y) - return x > y -end) - -if n > 0 then - site:h1("Articles") - site:note(std.ul(articles)) -else - site:h1("No articles") -end - -site:note(fes.app.footer.render(std)) - -return site diff --git a/fsd.vxserver.dev/www/community.lua b/fsd.vxserver.dev/www/community.lua new file mode 100644 index 0000000..81e2db9 --- /dev/null +++ b/fsd.vxserver.dev/www/community.lua @@ -0,0 +1,21 @@ +local fes = require("fes") + +local std = fes.std + +local site = fes.fes() + +fes.app.global.start(fes, site, "Community") + +site:h1("Community") + +site:h2("Mailing lists") +site:ul { + std.element("code", nil, "hackers@fsdproject.org") .. " - " .. std.strong("only for patches") .. "Commit messages and diffs for all fSD projects can be sent here for review.", +} + +site:h2("Discord") +site:p("Offical " .. std.a("https://discord.gg/A7QBvK5jhd", "discord") .. " server of the fSD project:") + +fes.app.global.finish(fes, site) + +return site diff --git a/fsd.vxserver.dev/www/faq.lua b/fsd.vxserver.dev/www/faq.lua deleted file mode 100644 index 36248b7..0000000 --- a/fsd.vxserver.dev/www/faq.lua +++ /dev/null @@ -1,28 +0,0 @@ -local fes = require("fes") -local std = fes.std -local u = fes.util - -local site = fes.fes() - -local title = "Free Software Distributions" - -site.title = title .. "- FAQ" -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" - -site:banner(fes.app.header.render(std)) - -site:note(u.cc({ - std.h1("Frequently Asked Questions"), - std.p("Welcome to the world of fSD, come here ye before thou ask thy stupid questions."), - std.h2("Why is it called fSD?"), - std.p([[ - The name "Free Software Distributions" is dervided from exactly what we do, we distribute free software. - This name stems from the Berkeley Software Distribution (BSD) specifically the Software Distribution part. - ]]), - std.p('It is worth pointing out that the word "free" is being used in two ways here: one meaning "at no cost" and the other meaning "do whatever you like".'), -})) - -site:note(fes.app.footer.render(std)) - -return site diff --git a/fsd.vxserver.dev/www/hacking.lua b/fsd.vxserver.dev/www/hacking.lua new file mode 100644 index 0000000..fafce86 --- /dev/null +++ b/fsd.vxserver.dev/www/hacking.lua @@ -0,0 +1,45 @@ +local fes = require("fes") + +local site = fes.fes() + +fes.app.global.start(fes, site) + +site:h1("Hacking") + +site:h2("Copying/license") +site:p("We only accept contributions from individuals, not corporate entities. See the project LICENSE or equivalent file you're contributing to.") + +site:h2("Patches") +site:p("Please provide a clear and concise \"commit message\" for your patches.") + +site:h3("patch filename format") +site:p("The expected format for patches is:") +site:p("For git revisions:") +site:code([[ +toolname-patchname-YYYDDMM-SHORTHASH.patch +yait-updatething-19300101-1234abc.patch +]]) +site:p([[ +The YYYYMMDD date should correspond to the last time the patch has been +modified. The SHORTHASH here is the seven chars git commit short hash +corresponding to the last commit of the tool on which the patch can be applied +correctly and is working with. You can get it by taking the first seven chars +of the full hash or for example: +]]) +site:code("git rev-parse --short (with commit-id: HEAD, commit hash, etc.)") + +site:h2("patch generation") +site:p("For git:") +site:code([[ +git format-patch --stdout origin/main >toolname-patchname-YYYYDDMM-SHORTHASH.patch +]]) + +site:h2("patch program") +site:p("For git users:") +site:code([[ +git apply toolname-patchname-YYYYDDMM-SHORTHASH.patch +]]) + +fes.app.global.finish(fes, site) + +return site diff --git a/fsd.vxserver.dev/www/index.lua b/fsd.vxserver.dev/www/index.lua index 12904ff..daac631 100644 --- a/fsd.vxserver.dev/www/index.lua +++ b/fsd.vxserver.dev/www/index.lua @@ -1,59 +1,17 @@ local fes = require("fes") + local std = fes.std local u = fes.util local site = fes.fes() -local title = "Free Software Distributions" +fes.app.global.start(fes, site) -site.title = title -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" +site:h1("Home") +site:p(u.cc { + std.p("Welcome to the " .. std.em("Free Software Distributions Project") .. ". This place is home to various free software."), +}) -site:banner(fes.app.header.render(std)) - -site:g(fes.markdown_to_html([[ -News -=== -2026-03-01 ----------- -[fes-0.3.0](/releases/fes) released: [download](/archive/fes/fes-0.3.0.tar.gz) - -2026-03-01 ----------- -[fes-0.2.1](/releases/fes) released: [download](/archive/fes/fes-0.2.1.tar.gz) - -2026-03-01 ----------- -[fes-0.2.0](/releases/fes) released: [download](/archive/fes/fes-0.2.0.tar.gz) - -2026-01-02 ----------- -Some changes were made to this site. -[sites](https://git.vxserver.dev/fSD/sites) -* Update fes's release page -* Update release archive structure -* Add way to get to archive fromr release - -2026-01-01 ----------- -[fes-0.1.0](/releases/fes) released: [download](/archive/fes/fes-0.1.0.tar.gz) - -2025-31-12 ----------- -Some changes were made to this site. -[sites](https://git.vxserver.dev/fSD/sites) -* New article -* Update release pages - -2025-17-12 ----------- -Some changes were made to this site. -[sites](https://git.vxserver.dev/fSD/sites) -* General improvments and fixes -* Moving the news page to here. -]])) - -site:note(fes.app.footer.render(std)) +fes.app.global.finish(fes, site) return site diff --git a/fsd.vxserver.dev/www/release.lua b/fsd.vxserver.dev/www/releases.lua similarity index 60% rename from fsd.vxserver.dev/www/release.lua rename to fsd.vxserver.dev/www/releases.lua index d47584a..0967f6b 100644 --- a/fsd.vxserver.dev/www/release.lua +++ b/fsd.vxserver.dev/www/releases.lua @@ -1,16 +1,9 @@ local fes = require("fes") local std = fes.std -local u = fes.util local site = fes.fes() -local title = "Free Software Distributions" - -site.title = title .. " - Release" -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" - -site:banner(fes.app.header.render(std)) +fes.app.global.start(fes, site, "Releases") local pkgs = { "yait", @@ -27,6 +20,6 @@ end site:p("This directory contains the tools which have been created or maintained by the Free Software Distributions Project.") site:tl(directory_packages) -site:note(fes.app.footer.render(std)) +fes.app.global.finish(fes, site) return site diff --git a/fsd.vxserver.dev/www/releases/fes.lua b/fsd.vxserver.dev/www/releases/fes.lua index ac93e9d..3b8cd0e 100644 --- a/fsd.vxserver.dev/www/releases/fes.lua +++ b/fsd.vxserver.dev/www/releases/fes.lua @@ -4,11 +4,7 @@ local u = fes.util local site = fes.fes() -site.title = "fes - Free Easy Site" -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" - -site:banner(fes.app.header.render(std)) +fes.app.global.start(fes, site, "fes") site:h2("Fes") site:muted("fes is a lightweight, static, and optionated microframework.") @@ -24,7 +20,7 @@ site:p("You can deploy websites using the " .. std.external("https://git.vxserver.dev/fSD/-/packages/container/fes/latest", "docker") .. " image:") site:code("docker pull git.vxserver.dev/fsd/fes:latest") -local tars = u.ls("archive") +local tars = u.ls("archive/fes") local function parseVersion(pkg) local version = pkg:match("-(.+)$") @@ -72,6 +68,6 @@ site:ul { } -site:note(fes.app.footer.render(std)) +fes.app.global.finish(fes, site) return site diff --git a/fsd.vxserver.dev/www/releases/yait.lua b/fsd.vxserver.dev/www/releases/yait.lua index 5227ef1..42fb6f8 100644 --- a/fsd.vxserver.dev/www/releases/yait.lua +++ b/fsd.vxserver.dev/www/releases/yait.lua @@ -4,11 +4,7 @@ local u = fes.util local site = fes.fes() -site.title = "yait - Yet Another Init Tool" -site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD") -site.favicon = "/static/favicon.ico" - -site:banner(fes.app.header.render(std)) +fes.app.global.start(fes, site, "yait") site:h2("Yait") site:muted("Yait is a highly opinionated C and SH project generator.") @@ -20,9 +16,9 @@ site:code("git clone https://git.vxserver.dev/fSD/yait") site:h2("Download") site:ul { std.p(std.a("/archive/yait/yait-1.0.tar.gz", "yait-1.0") .. " (2025-31-12)"), - std.a("/archive/yait", "Looking for specific version?") + std.a("/archive/tools", "Looking for specific version?") } -site:note(fes.app.footer.render(std)) +fes.app.global.finish(fes, site) return site