Compare commits

...

22 Commits

Author SHA1 Message Date
65816a55a2 fix fes release 2026-01-18 15:51:58 -05:00
f0e2e87388 update community page 2026-01-18 15:25:52 -05:00
79f1d5fb4a update references 2026-01-18 11:34:03 -05:00
9228e7a324 update vxserver.dev to fsdproject.org 2026-01-16 19:50:48 -05:00
86c942105b guess on the version 2026-01-16 13:29:49 -05:00
050daea24e save 2026-01-15 13:40:01 -05:00
f3114b38a8 structure changes 2026-01-06 15:45:56 -05:00
ef53232fca add .gitignore 2026-01-05 15:22:43 -05:00
afbcb04217 fes 0.3.0 release 2026-01-04 16:29:04 -05:00
436c50f7e4 fes 0.2.1 release 2026-01-03 16:59:00 -05:00
b3af1571fc use latest image 2026-01-03 16:52:45 -05:00
ed2c458924 fix yait release structure 2026-01-03 10:06:01 -05:00
d5d921dcf4 fes 0.2.0 release 2026-01-03 09:57:42 -05:00
84c079e1d3 fix wrong release version 2026-01-02 11:02:12 -05:00
b9d74d3abf update site 2026-01-02 10:23:15 -05:00
5a32fbb0b2 update a few things 2025-12-31 13:04:41 -05:00
f26b0dcd89 update fes documentation 2025-12-27 19:17:50 -05:00
9f6b1a9334 remove markdown philosphy 2025-12-27 16:04:49 -05:00
e5c195e079 fix: use new docker interface 2025-12-27 12:06:06 -05:00
c420e2797b docker works 2025-12-26 22:07:56 -05:00
73ac756ade update Dockerfiles 2025-12-23 21:51:01 -05:00
d4468530fc add Dockerfile 2025-12-22 20:40:01 -05:00
35 changed files with 314 additions and 323 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/stuff/

13
docker-compose.yml Normal file
View File

@@ -0,0 +1,13 @@
services:
fsd:
image: git.vxserver.dev/fsd/fes:latest
ports:
- "2100:3000"
volumes:
- ./fsdproject.org:/app
docs:
image: git.vxserver.dev/fsd/fes:latest
ports:
- "2101:3000"
volumes:
- ./docs.fsdproject.org:/app

View File

@@ -0,0 +1,5 @@
[app]
name = "docs.fsdproject.org"
version = "0.1.0"
authors = ["vx-clutch"]

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -183,6 +183,7 @@ footer {
<li><a href="#introduction">Introduction</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#usage">Usage</a></li>
<li><a href="#quick">Quick Start</a></li>
<li><a href="#cli-reference">Cli Reference</a></li>
<li><a href="#reference">Reference</a></li>
</ul>
@@ -210,6 +211,34 @@ footer {
</ul>
</section>
<section id="quick">
<h2>Quick Start</h2>
<pre><code>fes new hello</code></pre>
<p>This creates a new project under the name <code>hello</code>.</p>
<pre><code>fes run hello</code></pre>
<p>This runs your project <code>hello</code>, by default at <a href="localhost:3000" target="_blank">localhost:3000</a>.</p>
<h3>Extensions</h3>
<p>Let's add a paragraph to this simple site. Right now you have the following page:</p>
<pre><code>local fes = require("fes")
local site = fes.fes()
-- site.copyright = fes.util.copyright("https://fsd.vxserver.dev", "vx-clutch")
site:h1("Hello, World!")
return site</code></pre>
<p>To add a simple paragraph modify like so:</p>
<pre><code>local fes = require("fes")
local site = fes.fes()
-- site.copyright = fes.util.copyright("https://fsd.vxserver.dev", "vx-clutch")
site:h1("Hello, World!")
site:p("This is a paragraph")
return site</code></pre>
</section>
<section id="cli-reference">
<h2>Cli Reference</h2>
<table> <thead>
@@ -219,18 +248,6 @@ footer {
</tr>
</thead>
<tbody>
<tr>
<td><code>--help</code></td>
<td>Display help information</td>
</tr>
<tr>
<td><code>--no-color</code></td>
<td>Disable color output</td>
</tr>
<tr>
<td><code>-p &lt;port&gt;</code></td>
<td>Set the server port</td>
</tr>
<tr>
<td><code>new &lt;project&gt;</code></td>
<td>Create a new projet called &lt;project&gt;</td>
@@ -243,6 +260,30 @@ footer {
<td><code>run &lt;project&gt;</code></td>
<td>Run the projet called &lt;project&gt;</td>
</tr>
<tr>
<td><code>-help</code></td>
<td>Display help information.</td>
</tr>
<tr>
<td><code>-V1</code></td>
<td>Print extended version information, this is very helpful when it comes to bug reporting.</td>
</tr>
<tr>
<td><code>-no-color</code></td>
<td>Disable color output.</td>
</tr>
<tr>
<td><code>-p &lt;port&gt;</code></td>
<td>Set the server port.</td>
</tr>
<tr>
<td><code>-static</code></td>
<td>Render and save all pages. (this feature is yet to be implemented)</td>
</tr>
<tr>
<td><code>-version</code></td>
<td>Print the version.</td>
</tr>
</tbody>
</table>
</section>
@@ -586,7 +627,7 @@ return hello</pre></code> This can be called from another with,
</section>
<footer>
<p>Last updated: 2025-12-16</p>
<p>Last updated: 2025-12-27</p>
</footer>
</main>
</body>

View File

@@ -1,5 +0,0 @@
[app]
name = "fsd.vxserver.dev"
version = "0.0.1"
authors = ["owen"]

View File

@@ -1,5 +0,0 @@
[app]
name = "fsd.vxserver.dev"
version = "0.0.1"
authors = ["owen"]

Submodule fsd.vxserver.dev/archive/releases/yait/yait deleted from 54db089b71

View File

@@ -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("news", "Site news"),
}))
})
end
return header

View File

@@ -1,7 +0,0 @@
# Happy Holidays
Merry Christmas and Happy Holidays!
This article mostly exists to test the article system at `news`
2025-02-12

View File

@@ -1,32 +0,0 @@
# Alpha Release
# Pages
This is the first release of this site so far we have the following pages:
* About
* FAQ
* Releases
* Site news
### About
This page contains information about fSD.
### FAQ
Answers common questions about fSD and things pertaining to it.
### Releases
A list of fSD with a short description and link to repository.
### Site news
A location for news about this website, fSD, etc.
## Future
I hope that this gets expanded and polished as to expand the usefulness to the fSD project.
2025-02-12

View File

@@ -1,13 +0,0 @@
# fSD Prospects
In the future I hope to the fsdproject.org domain. fsd.org is owned by someone,
yet they do not do anything with it. So is fsd.dev, fsd.com, fsd.xyz, fsd.io,
fsd.cc. So I have very few options.
Here they are:
- fsdproject.org
- fsd.site
As I stated I am leaning towards fsdproject.org because I like that .org.
2025-17-12

View File

@@ -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

View File

@@ -1,30 +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.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD")
site.favicon = "/static/favicon.ico"
site:banner(fes.app.header.render(std))
site:custom(fes.markdown_to_html([[
News
===
2025-12-17
----------
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))
return site

View File

@@ -1,112 +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 news"
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 list_files_in_dir(dir)
local files = {}
local ok, lfs = pcall(require, "lfs")
if ok and lfs then
for name in lfs.dir(dir) do
if name ~= "." and name ~= ".." then
local attr = lfs.attributes(dir .. "/" .. name)
if attr and attr.mode == "file" then
table.insert(files, name)
end
end
end
table.sort(files)
return files
end
local p = io.popen('ls -1 "' .. dir:gsub('"', '\"') .. '" 2>/dev/null')
if not p then return files end
for line in p:lines() do
if line ~= "." and line ~= ".." then
local f = dir .. "/" .. line
local fh = io.open(f, "r")
if fh then
fh:close()
table.insert(files, line)
end
end
end
p:close()
table.sort(files)
return files
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 = "news"
local files = list_files_in_dir(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:custom(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 = "/news?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("Site news")
site:note(std.ul(articles))
else
site:h1("No articles")
end
site:note(fes.app.footer.render(std))
return site

View File

@@ -1,15 +0,0 @@
**What is fSD?**
The Free Software Distributions Project or fSD is a collection of free software written with the goal of being: free, minimal, and hackable. This software is created with the hope that it will be useful and improve the world in which it was created. This software, like other media, is an expression of its creator and thus the reason it was made is extremely important. Software, like art, is meant to be freely enjoyed by all and interpreted however they wish. This is evident in the first core principle of fSD: ***free***, that is, in the sense of freedom. Free software is scarcely detrimental to anyone except corporations--and when have they been right? This principle is baked into fSD software as all source code is publicly accessible, to download and play with. The second core principle is ***hackability***, the ability to modify and change the source code. This is embodied via clean and readable source code. Finally, ***minimal***, minimal is the second most important value but the one that requires the most description. Minimalism in computing is software that is charactered by its lack of bloat, low resource usage, and simplicity in interface. This, in combination with the UNIX philosophy, results with great, simple software.
**What are the means of software?**
Software is a computer program that instructs the execution of a computer. But it's more that than. Software is a medium of expression for the programmer or programmers that built it. As the builder of a cathedral builds his structure, the programmer creates. It takes time and a central dogma to follow. For software to be good it should be treated as a cathedral. This all stems from the ideas of Fred Brooks' *The Mythical Man-Month*, a collection of essays on Software Engineering. Within this essay Brooks defines what a software architect is; that being a single box which produces idea with an assumed continuity. This is analogous to the architect found in the layman's diction. The emphasis is on the continuity of the product; good software is consistent software, and that starts at the architecture. Consider the *Linux Kernel*, from the mind of Linus Torvalds it is a vanguard of free computing and exemplifies the central software architect. Linux has grown to where it has for reasons beyond the intellect of Torvalds, although it helped, but from the contribution of the many; However, lots and lots of disfocused individual's patches results in terrible code. The central overarching design of a singleton results in unified software, leading to greater sums.
**Select Quotes**
> "Good design is as little design as possible." <br>
> \- some German motherfucker [?](https://motherfuckingwebsite.com/)
**Copyright**
[Creative Commons Attribtuion-NonCommerical 4.0 International](https://creativecommons.org/licenses/by-nc/4.0/)

View File

@@ -1,37 +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 .. " - Release"
site.copyright = u.copyright("https://git.vxserver.dev/fSD", "fSD")
site.favicon = "/static/favicon.ico"
site:banner(fes.app.header.render(std))
local pkgs = {
{ "yait", "Highly opinionated C and SH project generator." },
{ "fes", "A lightweight, static, and opinionated microframework." },
}
for i, pkg in pairs(pkgs) do
pkgs[i] = std.note(u.cc({
std.h2(pkg[1]),
std.muted(pkg[2] or "Could not find a description."),
std.br(),
std.ul({
std.rl(pkg[1], std.external("/archive/releases/" .. pkg[1], "Download")),
}),
}))
end
site:custom(u.cc({
u.cc(pkgs),
}))
site:note(fes.app.footer.render(std))
return site

5
fsdproject.org/Fes.toml Normal file
View File

@@ -0,0 +1,5 @@
[app]
name = "fsdproject.org"
version = "1.0.0"
authors = ["vx-clutch"]

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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.fsdproject.org/", "Git Trees"),
fes.std.external("https://docs.fsdproject.org", "Documentation"),
}),
})
end
return global

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -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"),
@@ -41,8 +35,6 @@ Most of the good programmers do programming not because they expect to get paid
std.p([[
We hope that you enjoy our software and gain somethin from our time here.
]]),
std.h2("Interested?"),
std.p("See extended " .. std.a("philosphy")),
}))
@@ -52,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

View File

@@ -0,0 +1,16 @@
local fes = require("fes")
local std = fes.std
local site = fes.fes()
fes.app.global.start(fes, site, "Community")
site:h1("Community")
site:h2("Discord")
site:p("Offical " .. std.a("https://discord.gg/A7QBvK5jhd", "discord") .. " server of the fSD project. This is a place where you can sumbit patches. (we do have plans for an email list)")
fes.app.global.finish(fes, site)
return site

View File

@@ -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 <commit-id> (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

View File

@@ -0,0 +1,17 @@
local fes = require("fes")
local std = fes.std
local u = fes.util
local site = fes.fes()
fes.app.global.start(fes, site)
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."),
})
fes.app.global.finish(fes, site)
return site

View File

@@ -0,0 +1,25 @@
local fes = require("fes")
local std = fes.std
local site = fes.fes()
fes.app.global.start(fes, site, "Releases")
local pkgs = {
"yait",
"fes",
}
table.sort(pkgs)
local directory_packages = {}
for _, v in ipairs(pkgs) do
table.insert(directory_packages, std.a("/releases/" .. v, v .. "/"))
end
site:p("This directory contains the tools which have been created or maintained by the Free Software Distributions Project.")
site:tl(directory_packages)
fes.app.global.finish(fes, site)
return site

View File

@@ -0,0 +1,73 @@
local fes = require("fes")
local std = fes.std
local u = fes.util
local site = fes.fes()
fes.app.global.start(fes, site, "fes")
site:h2("Fes")
site:muted("fes is a lightweight, static, and optionated microframework.")
site:h2("Development")
site:p("You can " ..
std.external("https://git.fsdproject.org/fes", "browse") ..
" its source code or get a copy using the following command:")
site:code("git clone https://git.vxserver.dev/fSD/fes")
site:h2("Docker")
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/fes")
local function parseVersion(pkg)
local version = pkg:match("-(.+)$")
local parts = {}
for n in version:gmatch("%d+") do
parts[#parts + 1] = tonumber(n)
end
return parts
end
local function isNewer(a, b)
local va, vb = parseVersion(a), parseVersion(b)
local len = math.max(#va, #vb)
for i = 1, len do
local na, nb = va[i] or 0, vb[i] or 0
if na ~= nb then
return na > nb
end
end
return false
end
local function latestRelease(packages, name)
local latest = nil
local prefix = "^" .. name .. "%-"
for _, pkg in ipairs(packages) do
if pkg:match(prefix) then
if not latest or isNewer(pkg, latest) then
latest = pkg
end
end
end
return latest
end
local latest = latestRelease(tars, "fes")
site:h2("Download")
site:ul {
std.p(std.a("/archive/fes/" .. latest, latest) .. " (2026-04-1)"),
std.a("/archive/fes", "Looking for specific version?")
}
fes.app.global.finish(fes, site)
return site

View File

@@ -0,0 +1,24 @@
local fes = require("fes")
local std = fes.std
local u = fes.util
local site = fes.fes()
fes.app.global.start(fes, site, "yait")
site:h2("Yait")
site:muted("Yait is a highly opinionated C and SH project generator.")
site:h2("Development")
site:p("You can " .. std.external("https://git.vxserver.dev/fSD/yait", "browse") .. " its source code or get a copy using the following command:")
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/tools", "Looking for specific version?")
}
fes.app.global.finish(fes, site)
return site