Compare commits
22 Commits
dd7bf61b09
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 65816a55a2 | |||
| f0e2e87388 | |||
| 79f1d5fb4a | |||
| 9228e7a324 | |||
| 86c942105b | |||
| 050daea24e | |||
| f3114b38a8 | |||
| ef53232fca | |||
| afbcb04217 | |||
| 436c50f7e4 | |||
| b3af1571fc | |||
| ed2c458924 | |||
| d5d921dcf4 | |||
| 84c079e1d3 | |||
| b9d74d3abf | |||
| 5a32fbb0b2 | |||
| f26b0dcd89 | |||
| 9f6b1a9334 | |||
| e5c195e079 | |||
| c420e2797b | |||
| 73ac756ade | |||
| d4468530fc |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/stuff/
|
||||
13
docker-compose.yml
Normal file
13
docker-compose.yml
Normal 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
|
||||
5
docs.fsdproject.org/Fes.toml
Normal file
5
docs.fsdproject.org/Fes.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
[app]
|
||||
|
||||
name = "docs.fsdproject.org"
|
||||
version = "0.1.0"
|
||||
authors = ["vx-clutch"]
|
||||
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
@@ -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 <port></code></td>
|
||||
<td>Set the server port</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>new <project></code></td>
|
||||
<td>Create a new projet called <project></td>
|
||||
@@ -243,6 +260,30 @@ footer {
|
||||
<td><code>run <project></code></td>
|
||||
<td>Run the projet called <project></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 <port></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>
|
||||
@@ -1,5 +0,0 @@
|
||||
[app]
|
||||
|
||||
name = "fsd.vxserver.dev"
|
||||
version = "0.0.1"
|
||||
authors = ["owen"]
|
||||
@@ -1,5 +0,0 @@
|
||||
[app]
|
||||
|
||||
name = "fsd.vxserver.dev"
|
||||
version = "0.0.1"
|
||||
authors = ["owen"]
|
||||
Binary file not shown.
Submodule fsd.vxserver.dev/archive/releases/yait/yait deleted from 54db089b71
Binary file not shown.
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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/)
|
||||
@@ -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
5
fsdproject.org/Fes.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
[app]
|
||||
|
||||
name = "fsdproject.org"
|
||||
version = "1.0.0"
|
||||
authors = ["vx-clutch"]
|
||||
BIN
fsdproject.org/archive/fes/fes-0.1.0.tar.gz
Normal file
BIN
fsdproject.org/archive/fes/fes-0.1.0.tar.gz
Normal file
Binary file not shown.
BIN
fsdproject.org/archive/fes/fes-0.2.0.tar.gz
Normal file
BIN
fsdproject.org/archive/fes/fes-0.2.0.tar.gz
Normal file
Binary file not shown.
BIN
fsdproject.org/archive/tools/yait-0.3.tar.gz
Normal file
BIN
fsdproject.org/archive/tools/yait-0.3.tar.gz
Normal file
Binary file not shown.
34
fsdproject.org/include/global.lua
Normal file
34
fsdproject.org/include/global.lua
Normal 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
|
||||
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
@@ -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
|
||||
16
fsdproject.org/www/community.lua
Normal file
16
fsdproject.org/www/community.lua
Normal 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
|
||||
45
fsdproject.org/www/hacking.lua
Normal file
45
fsdproject.org/www/hacking.lua
Normal 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
|
||||
17
fsdproject.org/www/index.lua
Normal file
17
fsdproject.org/www/index.lua
Normal 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
|
||||
25
fsdproject.org/www/releases.lua
Normal file
25
fsdproject.org/www/releases.lua
Normal 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
|
||||
73
fsdproject.org/www/releases/fes.lua
Normal file
73
fsdproject.org/www/releases/fes.lua
Normal 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
|
||||
24
fsdproject.org/www/releases/yait.lua
Normal file
24
fsdproject.org/www/releases/yait.lua
Normal 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
|
||||
Reference in New Issue
Block a user