Compare commits
8 Commits
32578dee9f
...
8c21084565
Author | SHA1 | Date |
---|---|---|
Case Duckworth | 8c21084565 | |
Case Duckworth | 90f04416e1 | |
Case Duckworth | 5287ad1964 | |
Case Duckworth | b27960f0de | |
Case Duckworth | 930736ccbb | |
Case Duckworth | 5bd0ae4fd1 | |
Case Duckworth | e2f2c21a25 | |
Case Duckworth | 0b9aa0ac9f |
|
@ -1 +1,2 @@
|
|||
O
|
||||
public
|
||||
#.*
|
||||
|
|
24
Dp
24
Dp
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
"name": "breadpunk.club",
|
||||
"url": "https://breadpunk.club",
|
||||
"signup_url": "https://breadpunk.club/join",
|
||||
"user_count": "$(getent group|grep '^bakers:'|cut -d: -f4|tr , '\n'|wc -l)",
|
||||
"want_users": true,
|
||||
"admin_email": "breadpunk@acdw.net",
|
||||
"description": "We are a shared Unix computer focused on bread: baking it, eating it, using it as fiat currency in the event of a cataclysm, that sort of thing.",
|
||||
"users": [
|
||||
$(lastuser="$(getent group|grep '^bakers:'|cut -d: -f4|tr , '\n'|tail -n1)"
|
||||
for user in $(getent group|grep '^bakers:'|cut -d: -f4|tr , '\n'); do
|
||||
cat <<-ENDUSER
|
||||
{
|
||||
"username": "$user",
|
||||
"title": "$(awk '/<title>/{gsub("</?title>","");
|
||||
sub(/^[ ]/,"");sub(/[ ]$/,"");
|
||||
print;}' /home/$user/public_html/index.html)",
|
||||
"mtime": "$(stat -c %Y /home/$user/public_html/index.html)"
|
||||
}$( [ "$lastuser" = "$user" ] || printf ',' )
|
||||
ENDUSER
|
||||
done
|
||||
)
|
||||
]
|
||||
}
|
19
I/docs.md
19
I/docs.md
|
@ -1,19 +0,0 @@
|
|||
title docs
|
||||
|
||||
$([ -d "$BREADDOCS" ] &&
|
||||
for F in $(find "$BREADDOCS" -path "$BREADDOCS/.git" -prune -o -type f -print); do
|
||||
case "$F" in
|
||||
*manifesto.md) ;;
|
||||
*man*) continue;;
|
||||
esac
|
||||
l "doc: $F"
|
||||
dir="$UNKO/docs/$(NN)"
|
||||
rm -rf "$dir"
|
||||
mkdir -p "$dir"
|
||||
X "$UNKL" > "$dir/index.html"
|
||||
|
||||
cat <<ENDOFITEM
|
||||
- [$(M title)](/docs/$(NN))
|
||||
ENDOFITEM
|
||||
done
|
||||
)
|
11
I/donate.md
11
I/donate.md
|
@ -1,11 +0,0 @@
|
|||
title donate
|
||||
|
||||
breadpunk.club is hosted on a Digital Ocean droplet that, as of this writing ($(date)), is
|
||||
**6.00 USD a month.**
|
||||
While I ([~breadw](/~breadw/)) can swing it for now, it'd be nice to have some help.
|
||||
|
||||
To that end,
|
||||
I've set up a [Liberapay site](https://liberapay.com/acdw/) to accept donations.
|
||||
**All donations received will fund breadpunk.club's hosting requirements.**
|
||||
|
||||
Thanks!
|
|
@ -1,9 +0,0 @@
|
|||
id joining
|
||||
title join us!
|
||||
|
||||
we're still a pretty small server:
|
||||
we only have $(ls /home|wc -l) bakers!
|
||||
we're all pretty friendly and would love to have you along.
|
||||
|
||||
check out our [joining page](/join)
|
||||
to apply for membership to breadpunk.club.
|
|
@ -1,11 +0,0 @@
|
|||
title news
|
||||
id news
|
||||
|
||||
<ul>
|
||||
$(for art in $(find "$BREADNEWS" -path "$BREADNEWS/.git" -prune -o -type f -print | sort -nr|head -n3); do
|
||||
cat <<-ENDOFARTICLE
|
||||
<li>$(M date "$art"|defstr $(NN "$art")|wrapstr span class="time")
|
||||
<a href="/news#$(NN "$art")">$(M title "$art")</a></li>
|
||||
ENDOFARTICLE
|
||||
done)
|
||||
</ul>
|
|
@ -1,14 +0,0 @@
|
|||
title bakers
|
||||
subtitle in order of most recent bake
|
||||
id bakers
|
||||
|
||||
<ul>
|
||||
$(for u in $(
|
||||
find /home/*/public_html -maxdepth 0 -printf '%T@\t%p\n'|
|
||||
sort -nr |
|
||||
cut -f2- |
|
||||
sed 's,/home/\(.*\)/public_html,\1,')
|
||||
do
|
||||
p "<li><a href=\"/~$u\">~$u</a></li>"
|
||||
done)
|
||||
</ul>
|
16
I/join.md
16
I/join.md
|
@ -1,16 +0,0 @@
|
|||
title joining
|
||||
|
||||
breadpunk.club is open to anyone. it's suggested that you look at our
|
||||
[manifesto](/docs/manifesto) and make sure it's something you're interested in,
|
||||
as well as our [code of conduct](/docs/code-of-conduct) to make sure you agree
|
||||
with our terms.
|
||||
|
||||
to become a baker, just send an email to [breadw](/~breadw) with your SSH key (attached, please!),
|
||||
desired username (must be bread-oriented), realname (can be your “normal”
|
||||
username), and what shell you’d like to use (we have
|
||||
$(cat /etc/shells|
|
||||
awk -F/ '/^#/{next}/tmux$/{next}/screen$/{next}
|
||||
{if (!match(shs, $NF)) shs = (shs ? shs", " : shs) $NF}
|
||||
END{sub(/[^,]+$/," and&",shs);print shs}')).
|
||||
|
||||
we’ll see you around the bakery!
|
12
I/news.md
12
I/news.md
|
@ -1,12 +0,0 @@
|
|||
title news
|
||||
|
||||
$(for art in $(find "$BREADNEWS" -path "$BREADNEWS/.git" -prune -o -type f -print | sort -nr); do
|
||||
l "news: $art"
|
||||
cat <<-ENDOFARTICLE
|
||||
<div class="article" id="$(NN "$art")">
|
||||
<div class="header">$(M title "$art"|wrapstr h1)
|
||||
$(M date "$art"|wrapstr span class="time")
|
||||
$(C "$art"|X|$DISCOUNT)
|
||||
</div>
|
||||
ENDOFARTICLE
|
||||
done)
|
10
I/recipes.md
10
I/recipes.md
|
@ -1,10 +0,0 @@
|
|||
title recipes
|
||||
|
||||
$(mkdir "$UNKO/recipes")
|
||||
<ul>
|
||||
$(for r in /bread/cookbook/html/*; do
|
||||
l "recipe: $r"
|
||||
echo "<li><a href=\"/recipe/$(NN "$r")\">$(NN "$r")</a></li>"
|
||||
|
||||
done)
|
||||
</ul>
|
41
L
41
L
|
@ -1,41 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en">
|
||||
<!-- updated $(date) -->
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="description" content="a collaborative bread-positive space">
|
||||
<title>$(M title|addstr ' | ')BREADPUNK</title>
|
||||
<link rel="stylesheet" media="screen" type="text/css"
|
||||
href="https://fontlibrary.org/face/cmu-typewriter" >
|
||||
<link rel="stylesheet" type="text/css" href="/S/breadpunk.css" >
|
||||
<link rel="icon" type="image/png" href="/S/breadpunk.png">
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<div class="nav">
|
||||
$(cat header.txt)
|
||||
$([ "$(N)" = index ] || {
|
||||
cat <<-ENDHEADER
|
||||
(#) <a href="/">home</a>
|
||||
ENDHEADER
|
||||
})
|
||||
</div>
|
||||
<marquee id="users">
|
||||
$(./update-footer.awk footer.txt | sed 's/#.*//')
|
||||
</marquee>
|
||||
</div>
|
||||
<div id="main">
|
||||
<div class="header">
|
||||
$(M title | wrapstr h1)
|
||||
$(M subtitle | wrapstr p class=subtitle)
|
||||
$(M author | wrapstr p class=author)
|
||||
</div>
|
||||
$(C|X|$DISCOUNT)
|
||||
</div>
|
||||
<div id="footer">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!-- vim: ft=unk
|
||||
-->
|
48
Makefile
48
Makefile
|
@ -1,48 +0,0 @@
|
|||
# breadpunk.club
|
||||
DEBUG ?= false
|
||||
BREADNEWS ?= /bread/news
|
||||
BREADDOCS ?= /bread/docs
|
||||
|
||||
RSYNC_EXCLUDES := \
|
||||
.well-known \
|
||||
old \
|
||||
node_modules \
|
||||
wip
|
||||
|
||||
RSYNC := rsync \
|
||||
--verbose \
|
||||
--archive \
|
||||
--compress \
|
||||
--checksum \
|
||||
--delete \
|
||||
$(foreach e,$(RSYNC_EXCLUDES),--exclude=$(e))
|
||||
|
||||
SERVE ?= php -S 127.0.0.1:2733 -t O/
|
||||
|
||||
WATCH := I/* I/*/* \
|
||||
unk lib.sh L *.txt \
|
||||
$(BREADNEWS)/* $(BREADDOCS)/*
|
||||
|
||||
watch:
|
||||
@echo entr -d -r $(MAKE) _serve
|
||||
@while :; do\
|
||||
(ls -d $(WATCH)) | \
|
||||
entr -d -r $(MAKE) _serve;\
|
||||
done
|
||||
|
||||
_serve: build
|
||||
@pkill php||:
|
||||
$(SERVE)
|
||||
|
||||
publish: build
|
||||
$(RSYNC) O/ /var/www/breadpunk.club/
|
||||
|
||||
# push: publish
|
||||
# @test -z "$$(git status --porcelain)" && \
|
||||
# { echo "Pushing changes..."; MAKE_PUSH=1 git push; } || \
|
||||
# echo "Commit changes!"
|
||||
|
||||
build:
|
||||
DEBUG=$(DEBUG) BREADNEWS=$(BREADNEWS) BREADDOCS=$(BREADDOCS) ./unk
|
||||
|
||||
PHONY: build _serve publish watch
|
|
@ -0,0 +1,18 @@
|
|||
# The URL the site will be built for
|
||||
base_url = "https://breadpunk.club"
|
||||
|
||||
# Whether to automatically compile all Sass files in the sass directory
|
||||
compile_sass = true
|
||||
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
build_search_index = false
|
||||
|
||||
title = "BREADPUNK"
|
||||
|
||||
[markdown]
|
||||
# Whether to do syntax highlighting
|
||||
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
|
||||
highlight_code = false
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
|
@ -1,5 +1,7 @@
|
|||
title BREADPUNK
|
||||
subtitle baking the net since 2020
|
||||
+++
|
||||
title = "BREADPUNK"
|
||||
description = "baking the net since 2020"
|
||||
+++
|
||||
|
||||
Hello, and welcome to **breadpunk.club**.
|
||||
We are a shared Unix computer focused on bread:
|
||||
|
@ -13,13 +15,3 @@ in our [manifesto](/docs/manifesto),
|
|||
namely *anti-commoditization*,
|
||||
*self-reliance*,
|
||||
and *radical cooperation*.
|
||||
|
||||
$(for s in "$UNKI/index_sections"/*; do
|
||||
cat <<-ENDSECTION
|
||||
<div class="section" id="$(M id "$s")">
|
||||
<div class="header">$(M title "$s" |wrapstr h1)$(M subtitle "$s" |wrapstr p class=subtitle)
|
||||
</div>$(C "$s" | X | $DISCOUNT)
|
||||
</div>
|
||||
ENDSECTION
|
||||
done
|
||||
)
|
|
@ -0,0 +1,4 @@
|
|||
+++
|
||||
title = "docs"
|
||||
sort_by = "title"
|
||||
+++
|
|
@ -0,0 +1,20 @@
|
|||
+++
|
||||
title = "breadtimer"
|
||||
author = "sauerteig"
|
||||
+++
|
||||
|
||||
`breadtimer` is a simple timer that notifies you when your bread needs
|
||||
to be taken out of the oven. Before it turns to ash.
|
||||
|
||||
|
||||
## using breadtimer
|
||||
|
||||
`breadtimer [option] time`
|
||||
|
||||
The only option is -h for help. The baking time is given in minutes.
|
||||
|
||||
|
||||
## see also
|
||||
|
||||
`man breadtimer`
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
+++
|
||||
title = "code of conduct"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
> this code of conduct is based on
|
||||
> [tilde.town's](http://tilde.town/wiki/conduct.html),
|
||||
> which is in turn based on the
|
||||
> [Citizen Code of Conduct](http://citizencodeofconduct.org/),
|
||||
> released under the
|
||||
> [CC-BY-SA](http://creativecommons.org/licenses/by-sa/3.0/<Paste>)
|
||||
> license.
|
||||
> as such, this code of conduct is released under the same terms.
|
||||
|
||||
# purpose
|
||||
|
||||
a primary goal of breadpunk.club is to be as inclusive to the largest number
|
||||
of contributors, with the most varied and diverse backgrounds, as possible. as
|
||||
such, we are committed to providing a friendly, safe and welcoming environment
|
||||
for all, regardless of gender, sexual orientation, ability, ethnicity,
|
||||
socioeconomic status, and religion (or lack thereof).
|
||||
|
||||
this code of conduct outlines our expectations for all those who participate
|
||||
in our community, as well as the consequences for unacceptable behavior.
|
||||
|
||||
we invite all those who participate in breadpunk.club to help us create safe
|
||||
and positive experiences for everyone.
|
||||
|
||||
# vision of breadpunk.club
|
||||
|
||||
**breadpunk.club exists to provide a safe, non-judgmental, and fun place to
|
||||
explore creative projects and crafts of all kinds and to see an intentional
|
||||
digital community.**
|
||||
|
||||
we are here to redefine the boundaries and meanings of community in a
|
||||
post-google era of the internet. we are here to provide and to create for each
|
||||
other a space free from the constant consumerist messaging the wider internet
|
||||
inundates us with. in the same way the simple act of making our own bread
|
||||
frees us from the market forces that cause needless suffering and
|
||||
commoditization of human life, interacting on tilde servers such as
|
||||
breadpunk.club frees us from the consumer-producer dichotomy inherent in the
|
||||
wider culture.
|
||||
|
||||
for more information on breadpunk.club's vision, refer to the
|
||||
[manifesto](/docs/manifesto).
|
||||
|
||||
to that end, breadpunk.club strives to be a radically inclusive community
|
||||
where people of all backgrounds and all technological and gastronomical
|
||||
experience levels can come together for peer education, to delight in one
|
||||
another's creations, and to make good conversation.
|
||||
|
||||
# expected behavior
|
||||
|
||||
the following behaviors are expected and requested of all community members:
|
||||
|
||||
- participate in an authentic and active way. in doing so, you contribute to
|
||||
the health and longevity of this community.
|
||||
- exercise consideration and respect in your speech and actions.
|
||||
- attempt collaboration before conflict.
|
||||
- refrain from demeaning, discriminatory, or harassing behavior and speech.
|
||||
- if anyone asks you to stop a particular kind of behavior, always err on the
|
||||
side of respecting their wishes. if you believe their request is
|
||||
unreasonable or unfair, ask an admin, but don't respond with hostility.
|
||||
- be mindful of your surroundings and of your fellow participants. alert
|
||||
community leaders if you notice a dangerous situation, someone in distress,
|
||||
or violations of this code of conduct, even if they seem inconsequential.
|
||||
|
||||
# unacceptable behavior
|
||||
|
||||
unacceptable behaviors include: intimidating, harassing, abusive,
|
||||
discriminatory, derogatory, or demeaning speech or actions by any
|
||||
breadpunk.club user online, at any related events, or in one-on-one
|
||||
communications carried out in the conduct of breadpunk.club related projects.
|
||||
community event venues -- physical or digital -- may be shared with members of
|
||||
the public, so please be respectful to everyone at those locations.
|
||||
|
||||
harassment includes the following: harmful or prejudicial verbal or written
|
||||
comments related to gender, age, sexual orientation, race, religious choices,
|
||||
or disability; inappropriate use of nudity and/or sexual images in public
|
||||
places (like your `~/public_html` pages); deliberate intimidation, stalking or
|
||||
following; harassing recording; sustained disruption of the work of others;
|
||||
and unwelcome sexual attention.
|
||||
|
||||
# consequences of unacceptable behavior
|
||||
|
||||
unacceptable behavior from any community member, including those with decision
|
||||
making authority or sudo access, will not be tolerated.
|
||||
|
||||
anyone asked to stop unacceptable behavior is expected to comply immediately.
|
||||
if a community member engages in unacceptable behavior, the breadpunk.club
|
||||
admins my take any action they deem appropriate, up to and including a
|
||||
temporary ban or permanent expulsion from breadpunk.club (meaning your account
|
||||
would be revoked and ~ deleted) without warning.
|
||||
|
||||
# if you witness or are subject to unacceptable behavior
|
||||
|
||||
if you are subject to or witness of unacceptable behavior, or have any other
|
||||
concerns, please see the contact information below.
|
||||
|
||||
additionally, help engaging with law enforcement is always available.
|
||||
|
||||
# addressing grievances
|
||||
|
||||
if you feel you have been falsely or unfairly accused of violating this code
|
||||
of conduct, use the contact information below to send a concise description of
|
||||
your grievance.
|
||||
|
||||
# scope
|
||||
|
||||
we expect all breadpunk.club members to abide by this code of conduct while
|
||||
|
||||
- engaging with others locally on the server
|
||||
- publishing content hosted on breadpunk.club
|
||||
- engaging in community activities, whether in cyber- or bread-space
|
||||
|
||||
# contact information
|
||||
|
||||
breadpunk.club admin
|
||||
- [~breadw](/~breadw) @ **breadpunk at acdw dot net**
|
||||
|
||||
volunteer and other admins
|
||||
- [~lucitoast](/~lucitoast) @ [contact info](https://tilde.town/~lucidiot/contact.html)
|
||||
|
||||
admins can be reached privately
|
||||
- on IRC using `/msg breadw hi`
|
||||
- via local breadpunk.club email, e.g. `breadw@breadpunk.club`
|
||||
- or via normal email at the addresses above
|
|
@ -1,7 +1,10 @@
|
|||
title history
|
||||
+++
|
||||
title = "history"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
breadpunk.club was envisioned by some folx over at
|
||||
[tilde.town](https://tilde.town) as a new tilde server,
|
||||
where we could talk about bread all day.
|
||||
|
||||
for more information, see our [manifesto](/manifesto/).
|
||||
for more information, see our [manifesto](/docs/manifesto/).
|
|
@ -0,0 +1,102 @@
|
|||
+++
|
||||
title = "IRC"
|
||||
author = "breadw and lucitoast"
|
||||
+++
|
||||
|
||||
## what is IRC
|
||||
|
||||
Internet Relay Chat has been around for like, a long time.
|
||||
I won't bore you with all the details; that's what
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Internet_Relay_Chat)
|
||||
is for.
|
||||
|
||||
however, here at breadpunk.club we use IRC a lot.
|
||||
we chat on it,
|
||||
we're eventually going to have bots with it,
|
||||
as well as inside jokes, and all sorts of fun stuff.
|
||||
the breadpunk club uses the InspIRCd server,
|
||||
which probably doesn't mean much,
|
||||
unless you're an admin,
|
||||
but there's the info.
|
||||
|
||||
## connecting to IRC
|
||||
|
||||
to join on IRC, just run `weechat` or `irssi` from
|
||||
your [ssh](/docs/ssh)'d terminal.
|
||||
|
||||
you might also want to set up a [magic tunnel](/docs/magic-tunnel)
|
||||
so you can use IRC from your own computer.
|
||||
|
||||
here's a list of channels we have on breadpunk.club:
|
||||
|
||||
- `#bread`
|
||||
|
||||
## registering your nick
|
||||
|
||||
to prevent others from using your nickname, and to allow registering
|
||||
channels, setting your pronouns or other contact info, or receiving memos
|
||||
from other users, you will need to register your nickname. it's easy:
|
||||
|
||||
```
|
||||
/msg NickServ REGISTER [password] [username]@breadpunk.club
|
||||
```
|
||||
|
||||
you should use your breadpunk username here as this is your local e-mail
|
||||
address, which will be used to send you a confirmation code. The e-mail with
|
||||
your confirmation code will tell you how to confirm your registration.
|
||||
|
||||
later, to log in, you can use `/msg NickServ IDENTIFY [password]`.
|
||||
|
||||
### your personal info
|
||||
|
||||
when you are registered, anyone can type in `/msg NickServ INFO [yourname]`
|
||||
and get a little bit of info about who you are. we created a few custom commands
|
||||
so that you can set some more useful metadata about you:
|
||||
|
||||
* `MSN`: your msn messenger contact info.
|
||||
if you set this, you are probably using a custom server;
|
||||
we encourage you to also put a link to your msn server so that others can join you.
|
||||
* `FEDIVERSE`: your fediverse account(s).
|
||||
* `URL`: whatever URL you want; usually a link to your personal website.
|
||||
* `PRONOUNS`: the pronouns one should use to talk about you.
|
||||
* `ICE`: **i**n **c**ase of **e**mergency - the kind of info we could use
|
||||
if we wanted to make sure you are doing okay: how to get in touch with someone
|
||||
that can find you irl or help you out in any way.
|
||||
* `GREET`: a rather well known
|
||||
|
||||
all of this information is of course optional, though the use of `PRONOUNS` and `ICE`
|
||||
is encouraged. you can set all of this using the following command:
|
||||
|
||||
```
|
||||
/msg NickServ SET PRONOUNS she/her
|
||||
```
|
||||
|
||||
same goes for all of the other items mentioned above. then, with `INFO`,
|
||||
other users will see something along the lines of `PRONOUNS: she/her`.
|
||||
use `/msg NickServ HELP` and `HELP SET` to learn more about all of this.
|
||||
|
||||
### auto-login on weechat
|
||||
|
||||
to automatically log-in to NickServ on weechat, you can set weechat to execute
|
||||
`IDENTIFY` on connect with:
|
||||
|
||||
```
|
||||
/set irc.server.[servername].command "/msg NickServ IDENTIFY [password]"
|
||||
```
|
||||
|
||||
this however poses the issue of storing your password unencrypted in your
|
||||
weechat configuration files. thankfully, weechat has a solution for this!
|
||||
First, set a passphrase that you will be required to type on each weechat startup:
|
||||
|
||||
```
|
||||
/secure passphrase [password]
|
||||
```
|
||||
|
||||
you can then set any kind of encrypted data using `/secure set` and
|
||||
use it anywhere using `sec.data` variables:
|
||||
|
||||
```
|
||||
/secure set bread_password hunter2
|
||||
/set irc.server.breadpunk.command "/msg NickServ IDENTIFY \${sec.data.bread_password}"
|
||||
```
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
+++
|
||||
title = "magic tunnel"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
if you want to use IRC to chat with your friends on breadpunk,
|
||||
but don't want to ssh in to the server every time,
|
||||
you can set up a magic tunnel.
|
||||
|
||||
all you have to do is run this command on your own computer:
|
||||
|
||||
```
|
||||
ssh -N user@breadpunk.club -L localhost:6667:localhost:6667 &
|
||||
```
|
||||
|
||||
replacing `user` with your breadpunk username
|
||||
and the first `6667` with the port you want to listen on.
|
||||
|
||||
then, in your IRC client, create a new server
|
||||
with that port and connect to it.
|
||||
in weechat, you'd do this:
|
||||
|
||||
```
|
||||
/server add breadpunk localhost/6667 -autoconnect
|
||||
/connect breadpunk
|
||||
```
|
||||
|
||||
## further reading
|
||||
|
||||
this information is a shorter version of the text found
|
||||
on [~nick's page](https://tilde.town/~nick/sshtunnel.html).
|
||||
breadw has also written a utility to make it easy
|
||||
to open tunnels, called
|
||||
[mrgrctrnl](https://git.sr.ht/~acdw/mrgrctrnl).
|
|
@ -0,0 +1,48 @@
|
|||
+++
|
||||
title = "manifesto"
|
||||
+++
|
||||
|
||||
>*Man cannot live on bread alone.*
|
||||
>— Jesus of Nazareth
|
||||
|
||||
>*They say bread is life.*
|
||||
>— Ronny Cammareri of Brooklyn
|
||||
|
||||
Bread was invented tens of thousands of years ago,
|
||||
probably by someone drunk because they had the munchies.
|
||||
It's been made continuously since then
|
||||
by people of varying degrees of sobriety
|
||||
and to varying degrees of success.
|
||||
For nearly its entire history,
|
||||
bread has been made using stale dough from earlier bread,
|
||||
or from a fresh-made pool of fermented wheat and water.
|
||||
It took time,
|
||||
but it was good,
|
||||
and we had time.
|
||||
|
||||
Of course,
|
||||
the Market came along,
|
||||
and with it hunger:
|
||||
the hunger of the working-class,
|
||||
who did not have time to
|
||||
sit and wait for bread.
|
||||
We invented instant yeast in a lab,
|
||||
we invented styrofoam bread with no taste
|
||||
but fast turnaround,
|
||||
and we called it good.
|
||||
But we knew not what we did —
|
||||
or at least, many of us didn't.
|
||||
|
||||
The alphabet, they say, was invented only once.
|
||||
Bread is invented every time, anew.
|
||||
It's life itself.
|
||||
And life is not for sale.
|
||||
|
||||
Breadpunk rejects the commoditization of life by market capitalism.
|
||||
Breadpunk is an attitude that something our ancestors made largely for free
|
||||
is not something we should be spending money on.
|
||||
Breadpunk is the idea that we have time again,
|
||||
that industrialism gives us time to bake bread.
|
||||
|
||||
Breadpunk is simple:
|
||||
**MAKE YOUR OWN DAMN BREAD.**
|
|
@ -0,0 +1,53 @@
|
|||
+++
|
||||
title = "nntp"
|
||||
author = "lucitoast"
|
||||
+++
|
||||
|
||||
breadpunk has a local-only NNTP server available. NNTP (Network News Transfer
|
||||
Protocol) is a protocol designed for the same use cases as forums and mailing
|
||||
lists, except everything is federated. It is usually better known as Usenet or
|
||||
simply as newsgroups.
|
||||
|
||||
Our NNTP server is however not connected to the rest of Usenet. Tildeverse.org
|
||||
should provide a [news server](http://news.tildeverse.org/) for interested
|
||||
tildes, but it is currently announced as down, so our server is completely
|
||||
alone. It currently has the following groups:
|
||||
|
||||
* `local.test`: A default group from our server software which you can use for
|
||||
various testing purposes.
|
||||
* `bread.general`: For all general discussions, when something does not fit any
|
||||
other group.
|
||||
* `bread.recipes`: For sharing all your bread recipes!
|
||||
* `bread.meta`: Discussions about breadpunk.club itself.
|
||||
* `bread.nomic`: Discussions about the game of Nomic
|
||||
|
||||
Before joining the news server, it is strongly recommended to read some of the
|
||||
typical [Usenet guidelines](http://lol-russ.umn.edu/webruss/WebRuss/russ1102/comphelp/netiquet.html).
|
||||
|
||||
## slrn setup
|
||||
|
||||
To reach our server using `slrn`, a rather simple news reader allowing you to
|
||||
use your own editor of choice to post, you can use a similar process as the one
|
||||
described on the Tildeverse server:
|
||||
|
||||
1. Get a sample `.slrnrc` file from the project on Sourceforge:
|
||||
`wget -qO ~/.slrnrc http://slrn.sourceforge.net/docs/slrn.rc`
|
||||
2. Edit `~/.slrnrc`
|
||||
3. Uncomment (remove the leading `%`) the line defining `username` and set it
|
||||
to your bakername
|
||||
4. Uncomment `hostname` and set it to `breadpunk.club`
|
||||
5. Uncomment `realname` and set it to whatever you want to have as your real
|
||||
name: it will be displayed in all posts as
|
||||
`From: realname <username@breadpunk.club>`
|
||||
6. If your editor of choice is Vim, uncomment the `set editor_command` line and
|
||||
set it to `vim '+set tw=72 cc=+1 +%d '%s'`. This will help you with the 72
|
||||
character line limit of newsgroups and display a visual cue of this limit;
|
||||
see `:help textwidth` and `:help colorcolumn` in Vim to learn more.
|
||||
7. Set up slrn by running `slrn --create`.
|
||||
8. Use the arrow keys to browse the list of groups and press `s` to subscribe or
|
||||
`u` to unsubscribe. Unsubscribed groups have an uppercase `U` next to them.
|
||||
9. Save your subscriptions and close by pressing `q` then `y`.
|
||||
|
||||
You can later run `slrn` to view your subscribed newsgroups and read, post or
|
||||
reply to articles. If you prefer to use a [magic tunnel](/docs/magic-tunnel/) to
|
||||
access the newsgroup from a local client, you will want to forward port **119**.
|
|
@ -0,0 +1,60 @@
|
|||
+++
|
||||
title = "ssh"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
> a lot of this has been pulled from
|
||||
> [trash.town](https://trash.town/signup.html),
|
||||
> at the permission of [~loaf](/~loaf).
|
||||
|
||||
Signing up for a breadpunk.club account requires you
|
||||
to generate a **public key** and a **private key**
|
||||
using a tool called SSH.
|
||||
|
||||
## requirements
|
||||
|
||||
- a unix-like environment, such as
|
||||
- ubuntu/linux/\*bsd
|
||||
- macOS
|
||||
- windows subsystem for linux
|
||||
- [scoop.sh](https://scoop.sh/)
|
||||
- SSH
|
||||
|
||||
## generating your public and private keys
|
||||
|
||||
much like the keys to your house,
|
||||
SSH keys prevent unknown and unwanted users from
|
||||
accessing a system.
|
||||
if you don't have your keys,
|
||||
you can't get in!
|
||||
|
||||
since computers aren't houses, though,
|
||||
they don't work exactly the same:
|
||||
instead of a key and a lock,
|
||||
you get two keys: a *private key*,
|
||||
which is only for you and should be kept secret,
|
||||
and a *public key*,
|
||||
which can be shared (and in fact must be for you to log in).
|
||||
|
||||
**make sure to run these commands inside a unix-like environment**
|
||||
|
||||
1. run `ssh-keygen -t ed25519 -f ~/.ssh/breadpunk.club`
|
||||
2. enter a password, or press enter if you don't need one
|
||||
3. enter the password again, or press enter again
|
||||
|
||||
this process has generated two files:
|
||||
|
||||
- your **private** key `~/.ssh/breadpunk.club` -- *don't* share this with anyone!
|
||||
- your **public** key `~/.ssh/breadpunk.club.pub`
|
||||
|
||||
## sending your public key to breadpunk.club
|
||||
|
||||
basically, follow the directions to [join](/join) the club,
|
||||
and attach your public key `~/.ssh/bredpunk.club.pub` to the email.
|
||||
|
||||
## more information
|
||||
|
||||
if this is still confusing you,
|
||||
peruse the information at
|
||||
[tilde.town](https://tilde.town/wiki/getting-started/ssh.html)
|
||||
or use [their key generator](https://cgi.tilde.town/users/keymachine).
|
|
@ -0,0 +1,42 @@
|
|||
+++
|
||||
title = "the bread tool"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
`bread` is a great tool to interact with some of the aspects of the town.
|
||||
here are the subcommands:
|
||||
|
||||
## news
|
||||
|
||||
`bread news` lets you read the latest news.
|
||||
typed by itself, it'll show you the latest four news items.
|
||||
you can change the number of shown items by running
|
||||
`bread news -n NUM`.
|
||||
if there's a specific word or phrase you're looking for,
|
||||
you can search all the news with `bread news -s QUERY`.
|
||||
|
||||
if you're an admin, you can write an article
|
||||
using `bread news -w`.
|
||||
the article will show up on the web site in [news](/news).
|
||||
|
||||
later, it'd be nice if users could use `bread news`
|
||||
to write their own news that could be linked from the main news feed.
|
||||
eventually, we're going to generate gopher, gemini, and RSS pages
|
||||
from the news as well.
|
||||
|
||||
## docs
|
||||
|
||||
`bread docs` lets you read breadpunk.club's [documentation](/docs).
|
||||
it's kind of like a wiki,
|
||||
except the pages aren't automatically linked.
|
||||
typed by itself, it'll let you select a document to read
|
||||
(type `q` or `CTRL-D` to quit).
|
||||
you can search for a specific phrase by running `bread docs -s QUERY`.
|
||||
you can write a new document using `bread docs -n`
|
||||
(though if it has the same name as another document, it'll fail--
|
||||
but you can still retrieve it from /tmp).
|
||||
to edit a document, run `bread docs -e QUERY`,
|
||||
and choose the one you'd like to edit.
|
||||
|
||||
docs are editable by every baker!
|
||||
so be kind.
|
|
@ -0,0 +1,40 @@
|
|||
+++
|
||||
title = "writing docs"
|
||||
author = "breadw"
|
||||
+++
|
||||
|
||||
## using `bread`
|
||||
|
||||
you can use the [`bread`](/docs/the-bread-tool) tool to write a new document.
|
||||
just run `bread docs -n`.
|
||||
if you want to edit an existing document,
|
||||
run `bread docs -e QUERY`.
|
||||
that'll search the docs for the text and let you choose which one to edit.
|
||||
|
||||
whichever you do,
|
||||
you'll edit the doc in your \$EDITOR.
|
||||
|
||||
## authoring tips
|
||||
|
||||
these documents use markdown, specifically
|
||||
[discount](http://www.pell.portland.or.us/~orc/Code/discount/),
|
||||
specifically, this command:
|
||||
`$(echo "$DISCOUNT")`.
|
||||
you can read the documentation for discount
|
||||
to see how those change your authoring process.
|
||||
|
||||
instead of YAML or Pandoc-style frontmatter,
|
||||
breadpunk.club uses a custom style
|
||||
where the first paragraph of the file is a metadata block
|
||||
with tab-delimited keys and values.
|
||||
for example, the top of this file looks like this:
|
||||
|
||||
```
|
||||
title writing docs
|
||||
|
||||
these documents use markdown, specifically
|
||||
```
|
||||
|
||||
other than that, it's pretty self-explanatory.
|
||||
if you want to link to other docs,
|
||||
use a markdown link: `[title](/docs/<doc-name>)`.
|
|
@ -0,0 +1,16 @@
|
|||
+++
|
||||
title = "join"
|
||||
+++
|
||||
|
||||
breadpunk.club is open to anyone. it's suggested that you look at our
|
||||
[manifesto](/docs/manifesto) and make sure it's something you're interested in,
|
||||
as well as our [code of conduct](/docs/code-of-conduct) to make sure you agree
|
||||
with our terms.
|
||||
|
||||
to become a baker, just send an email to [~breadw](/~breadw) with your SSH key
|
||||
(attached, please!), desired username (must be bread-oriented), realname (can
|
||||
be your "normal" username), and what shell you’d like to use.
|
||||
|
||||
we’ll see you around the bakery!
|
||||
|
||||
{{ shells() }}
|
|
@ -0,0 +1,17 @@
|
|||
+++
|
||||
title = "We're baking!"
|
||||
author = "breadw"
|
||||
date = 2020-04-11
|
||||
+++
|
||||
|
||||
Breadpunk is officially live!
|
||||
We don't have a ton of services yet,
|
||||
but if you [join us](/join)
|
||||
you can come say hi on [IRC](/docs/irc),
|
||||
build your own [web page](/docs/web),
|
||||
[gopher hole](/docs/gopher),
|
||||
[gemini constellation](/docs/gemini),
|
||||
or [email](/docs/email) other bakers.
|
||||
|
||||
We're going to be adding other stuff soon,
|
||||
so come on by!
|
|
@ -0,0 +1,26 @@
|
|||
+++
|
||||
title = "Join us in Nomic!"
|
||||
author = "breadw"
|
||||
date = 2020-04-29
|
||||
+++
|
||||
|
||||
We've been baking up a storm here at breadpunk.club,
|
||||
and one of the things we've been working on is a game of
|
||||
[nomic](//en.wikipedia.org/wiki/Nomic).
|
||||
It's a game where the rules can change any time,
|
||||
and in fact that's the point!
|
||||
Check out
|
||||
[~lucitoast's page on nomic](/~lucitoast/nomic/)
|
||||
for more information.
|
||||
When you're ready to join (if you're a baker already, that is),
|
||||
make a pull request on the
|
||||
[tildegit repo](//tildegit.org/breadpunk/nomic)
|
||||
adding your name in the `players` folder.
|
||||
|
||||
We also discuss the game on our NNTP server
|
||||
(oh, right, did you know we have an
|
||||
[NNTP server](/docs/news/)? It's pretty cool)
|
||||
at bread.nomic.
|
||||
|
||||
According to the first round of rules, a game can't start
|
||||
til there are 5 players, so come join us!
|
|
@ -0,0 +1,32 @@
|
|||
+++
|
||||
title = "We have Gemini User Capsules"
|
||||
author = "breadw"
|
||||
date = 2020-05-04
|
||||
+++
|
||||
|
||||
Thanks to a new [gemini server](https://tildegit.org/solderpunk/molly-brown),
|
||||
we have set up user capsules for everyone on breadpunk.club.
|
||||
So if you point your
|
||||
[favorite](https://git.sr.ht/~julienxx/castor)
|
||||
[gemini](https://rawtext.club/~sloum/bombadillo.html)
|
||||
[client](https://gemini.circumlunar.space/clients.html)
|
||||
at <gemini://breadpunk.club/~breadw>,
|
||||
for instance,
|
||||
you'll see individual user pages.
|
||||
You can also see a listing at <gemini://breadpunk.club>.
|
||||
|
||||
**What is Gemini?**
|
||||
|
||||
Gemini is a new texty protocol that sits somewhere between gopher and http.
|
||||
Check it out at <https://gemini.circumlunar.space/>,
|
||||
or of course <gemini://gemini.circumlunar.space>.
|
||||
|
||||
**For bakers**
|
||||
|
||||
You should have a user directory under `/var/gemini/bakers/`.
|
||||
Feel free to drop your `*.gmi` files directly under there, or
|
||||
symlink your directory to your `$HOME`.
|
||||
The server *does* have CGI capabbilities,
|
||||
but the admins haven't set any of that up yet.
|
||||
If you'd like to take a crack at some dynamic Gemini content,
|
||||
please contact one of them (`man 7 admins`).
|
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = "Ubuntu 20.04.1 upgrade"
|
||||
author = "lucitoast"
|
||||
date = 2020-11-14
|
||||
+++
|
||||
|
||||
We successfully did the first upgrade of breadpunk.club, to Ubuntu 20.04.1,
|
||||
with a little bit of downtime.
|
||||
|
||||
Please report any broken stuff to either me (~lucitoast) or ~breadw!
|
|
@ -0,0 +1,13 @@
|
|||
+++
|
||||
title = "Celebrating 40 bakers strong!"
|
||||
author = "breadw"
|
||||
date = 2021-01-30
|
||||
+++
|
||||
|
||||
breadpunk.club just welcomed its <strong>FORTIETH</strong> baker tonight!
|
||||
We've had a bit of an uptick in new registrations,
|
||||
and there's a bunch of great content they've put together.
|
||||
I'm just happy that this dumb website, started out of a joke on IRC,
|
||||
is such a fun place for so many people.
|
||||
|
||||
Anyway, happy baking everyone! See you around!
|
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = "Now accepting donations"
|
||||
author = "breadw"
|
||||
date = 2021-02-06
|
||||
+++
|
||||
|
||||
Since breadpunk.club has grown a lot since its founding last year, I've created
|
||||
a new [/donate](/donate) page. Breadpunk is, and will always be, 100% free to
|
||||
use, but we're a cooperative bunch here. 100% of donations will fund the
|
||||
operations and hosting costs of breadpunk.club. Thanks!
|
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
title = "news"
|
||||
sort_by = "date"
|
||||
template = "river.html"
|
||||
+++
|
|
@ -1,5 +0,0 @@
|
|||
4 # USERS_TOTAL
|
||||
bakers
|
||||
/
|
||||
9 # USERS_CURRENT
|
||||
baking now
|
|
@ -1,6 +0,0 @@
|
|||
<ul>
|
||||
<li><a href="/news">news</a></li>
|
||||
<li><a href="/join">join</a></li>
|
||||
<li><a href="/docs">docs</a></li>
|
||||
<li><a href="/donate">donate</a></li>
|
||||
</ul>
|
125
lib.sh
125
lib.sh
|
@ -1,125 +0,0 @@
|
|||
# UNKLIB
|
||||
# convenience functions
|
||||
|
||||
#shellcheck disable=2034
|
||||
DISCOUNT="markdown -f links,image,pants,html,autolink,fencedcode"
|
||||
|
||||
alias p=echo
|
||||
alias l='p >&2'
|
||||
N(){ f="${1:-$F}";n="${f#$UNKI/}";p "${n%.*}";}
|
||||
NN(){ f="${1:-$F}";n="${f##*/}";p "${n%%.*}";}
|
||||
N_(){ f="${1:-$F}";n="$(N "$f")";p "${n#_}";}
|
||||
M(){ sed '/^$/q' "${2:-$F}"|grep "^$1"|cut -f2-;}
|
||||
C(){ sed '1,/^$/d' "${1:-$F}";}
|
||||
X(){
|
||||
Xd=$((Xd+1));
|
||||
eval "$(p "set -e";p "cat<<$UNKZ$Xd";cat "${1:--}"|sed 's/`/\\`/g';p;p "$UNKZ$Xd")";
|
||||
}
|
||||
|
||||
modmsg()
|
||||
{ # message as to when a page was modified
|
||||
date -d "$1" \
|
||||
+'this page was updated on <time datetime="%F">'"${2:-%e %B %Y}"'</time>'
|
||||
}
|
||||
|
||||
series()
|
||||
{
|
||||
in="$(cat)"
|
||||
s="$*"
|
||||
if [ -n "$in" ]; then
|
||||
s="$s $in"
|
||||
fi
|
||||
if [ -z "$s" ]; then
|
||||
return
|
||||
fi
|
||||
tx "part of the $s series"
|
||||
}
|
||||
|
||||
wrapstr()
|
||||
{ # wrap a non-empty string
|
||||
sed -e "s_^._<$*>&_" -e "s_.\$_&</$1>_"
|
||||
}
|
||||
|
||||
addstr()
|
||||
{ # add a string after, but not after an empty string
|
||||
sed "s/^.\+\$/&$*/"
|
||||
}
|
||||
|
||||
defstr()
|
||||
{ # replace an empty string with a default
|
||||
sed "s/^\$/$*/"
|
||||
}
|
||||
|
||||
slugify()
|
||||
{ # turn a string into a slug
|
||||
if [ "$#" -gt 0 ]; then
|
||||
echo "$*"
|
||||
else
|
||||
cat
|
||||
fi |
|
||||
tr '[:upper:]' '[:lower:]' |
|
||||
sed \
|
||||
-e 's/[[:punct:]]//g' \
|
||||
-e 's/[^[:alnum:]_]/-/g' \
|
||||
-e 's/-+/-/g' \
|
||||
-e 's/^-//' -e 's/-$//'
|
||||
}
|
||||
|
||||
recent_files()
|
||||
{ # list files
|
||||
# WARNING: find -printf is NOT posix :(
|
||||
dir="$1"
|
||||
shift
|
||||
|
||||
find "$dir" -maxdepth 1 \
|
||||
-not -name '.*' "$@" \
|
||||
-printf '%T@\t%p\n' \
|
||||
| sort -nr \
|
||||
| cut -f2
|
||||
}
|
||||
|
||||
maybe_expand()
|
||||
{ # expand a file based on its metadata (or lack thereof)
|
||||
F="${1:-$F}"
|
||||
|
||||
expand="$(M expand "$F")"
|
||||
if [ -z "$expand" ] || "$expand"; then
|
||||
C "$F" | ./lht | X
|
||||
else
|
||||
C "$F"
|
||||
fi
|
||||
}
|
||||
|
||||
#shellcheck disable=2120
|
||||
build()
|
||||
{ # X on a file
|
||||
F="${1:-$F}"
|
||||
[ -f "$F" ] || return 1
|
||||
l "$F"
|
||||
dir="$UNKO/$(N)"
|
||||
rm -rf "$dir"
|
||||
mkdir -p "$dir"
|
||||
X "$UNKL" > "$dir/index.html"
|
||||
}
|
||||
|
||||
build_dir()
|
||||
{ # build a directory
|
||||
for F in "$UNKI/$1"/*; do
|
||||
build || l "$F: not a file"
|
||||
done
|
||||
}
|
||||
|
||||
listing()
|
||||
{ # print a listing
|
||||
p "<ul class='listing'>"
|
||||
for F in $(recent_files "$UNKI/$1" -type f); do
|
||||
build && {
|
||||
p "<li><a href='/$(N)/'>$(M title)</a>"
|
||||
if [ -n "$(M series)" ]; then
|
||||
p "<span class='series desc'>$(series "$(M series)")</span>"
|
||||
fi
|
||||
p "</li>"
|
||||
}
|
||||
done
|
||||
p "</ul>"
|
||||
}
|
|
@ -6,7 +6,7 @@ html {
|
|||
padding: 0;
|
||||
font: 18px/1.3 CMUTypewriterTextRegular, monospace;
|
||||
background-color: wheat;
|
||||
background: url("/S/bread.png") repeat;
|
||||
background: url("/bread.png") repeat;
|
||||
}
|
||||
#main {
|
||||
max-width: 40em;
|
||||
|
@ -39,7 +39,7 @@ html {
|
|||
.nav li:after {
|
||||
content: " (#) ";
|
||||
}
|
||||
.subtitle {
|
||||
.subtitle,blockquote,.description {
|
||||
font-style: italic;
|
||||
}
|
||||
pre,
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 759 B After Width: | Height: | Size: 759 B |
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B |
|
@ -0,0 +1,5 @@
|
|||
# THIS FILE IS AUTOGENERATED BY ../scripts/site/bin/update-data.sh
|
||||
# DO NOT HAND-EDIT
|
||||
data = [
|
||||
"sh", "bash", "rbash", "dash",
|
||||
]
|
|
@ -0,0 +1,8 @@
|
|||
# THIS FILE IS AUTOGENERATED BY ../scripts/site/bin/update-data.sh
|
||||
# DO NOT HAND-EDIT
|
||||
all = [
|
||||
"acdw",
|
||||
]
|
||||
login = [
|
||||
"acdw",
|
||||
]
|
|
@ -0,0 +1,74 @@
|
|||
{% block doctype -%}
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
{%- endblock doctype %}
|
||||
<html lang="en">
|
||||
<head>
|
||||
{% block head -%}
|
||||
{% block head_meta -%}
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="description"
|
||||
content="{%- block desc -%}
|
||||
{{ config.description }}
|
||||
{%- endblock desc -%}">
|
||||
{%- endblock head_meta %}
|
||||
<title>{% block title %}{{ config.title }}{% endblock title %}</title>
|
||||
{% block head_links -%}
|
||||
<link rel="stylesheet" media="screen" type="text/css"
|
||||
href="https://fontlibrary.org/face/cmu-typewriter" >
|
||||
<link rel="stylesheet" type="text/css" href="/breadpunk.css" >
|
||||
<link rel="icon" type="image/png" href="/breadpunk.png">
|
||||
{%- endblock head_links %}
|
||||
{%- endblock head %}
|
||||
</head>
|
||||
<body>
|
||||
{% block body -%}
|
||||
<div id="header">
|
||||
{% block header -%}
|
||||
<div class="nav">
|
||||
{% block sitenav -%}
|
||||
<ul>
|
||||
<li><a href="/">breadpunk</a></li>
|
||||
<li><a href="/join">join</a></li>
|
||||
<li><a href="/news">news</a></li>
|
||||
<li><a href="/docs">docs</a></li>
|
||||
<li><a href="/donate">donate</a></li>
|
||||
</ul>
|
||||
{%- endblock sitenav %}
|
||||
</div>
|
||||
{% block users -%}
|
||||
<marquee id="users">
|
||||
{% set user_data = load_data(path="static/users.toml") %}
|
||||
{{ user_data.all | length }} bakers /
|
||||
{{ user_data.login | length }} online now
|
||||
</marquee>
|
||||
{%- endblock users %}
|
||||
{%- endblock header -%}
|
||||
</div>
|
||||
<div id="main">
|
||||
{%- block main -%}
|
||||
<div class="header">
|
||||
{%- block main_header %}
|
||||
<h1>
|
||||
{%- if page.title -%}{{ page.title }}
|
||||
{%- elif section.title -%}{{ section.title }}
|
||||
{%- endif -%}
|
||||
</h1>
|
||||
{%- if page.description -%}
|
||||
<p class="subtitle">{{ page.description }}</p>
|
||||
{%- elif section.description -%}
|
||||
<p class="subtitle">{{ section.description }}</p>
|
||||
{%- endif -%}
|
||||
{%- endblock main_header -%}
|
||||
</div>
|
||||
{%- block main_content %}{% endblock main_content -%}
|
||||
{%- endblock main -%}
|
||||
</div>
|
||||
<div id="footer">
|
||||
{%- block footer -%}
|
||||
{%- endblock footer -%}
|
||||
</div>
|
||||
{%- endblock body %}
|
||||
</body>
|
||||
<!-- generated {{ now() | date(format="%FT%T") }} -->
|
||||
</html>
|
|
@ -0,0 +1,9 @@
|
|||
{% extends "base.html" %}
|
||||
{% block main_content %}
|
||||
{{ section.content | safe }}
|
||||
|
||||
{% include "index/news.html" %}
|
||||
{% include "index/join.html" %}
|
||||
{% include "index/bakers.html" %}
|
||||
|
||||
{% endblock main_content %}
|
|
@ -0,0 +1,8 @@
|
|||
<h2>bakers</h2>
|
||||
<p class="description">in order of their most recent bake</p>
|
||||
{% set user_data = load_data(path="static/users.toml") %}
|
||||
<ul>
|
||||
{% for u in user_data.all -%}
|
||||
<li><a href="~{{ u }}/">~{{ u }}</a></li>
|
||||
{%- endfor %}
|
||||
</ul>
|
|
@ -0,0 +1,6 @@
|
|||
<h2>join us!</h2>
|
||||
<p>
|
||||
if you like to bake, want to learn more about baking,
|
||||
or just love bread, come <a href="/join">join us</a>!
|
||||
it's easy to apply for membership and we're looking forward to having you.
|
||||
</p>
|
|
@ -0,0 +1,11 @@
|
|||
<h2>news</h2>
|
||||
<ul>
|
||||
{% set s = get_section(path="news/_index.md") %}
|
||||
{% for p in s.pages %}
|
||||
{% if loop.index > 3 %}
|
||||
<li><a href="/news#news-item-4">older news</a></li>
|
||||
{% break %}
|
||||
{% endif %}
|
||||
<li><a href="{{ p.permalink }}">{{ p.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -0,0 +1,12 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{{ page.title }} | {{ super() }}{% endblock title %}
|
||||
|
||||
{% block main_header %}
|
||||
{{ super() }}
|
||||
<p class="date">{{ page.date }}</p>
|
||||
{% endblock main_header %}
|
||||
|
||||
{% block main_content %}
|
||||
{{ page.content | safe }}
|
||||
{% endblock main_content %}
|
|
@ -0,0 +1,18 @@
|
|||
{% extends "section.html" %}
|
||||
{% block section_listing %}
|
||||
{% for page in section.pages %}
|
||||
<div class="article">
|
||||
<div class="header" id="news-item-{{ loop.index }}">
|
||||
<h2>
|
||||
<a href="{{ page.permalink }}">{{ page.title }}</a>
|
||||
</h2>
|
||||
<p class="date">
|
||||
<span class="time">
|
||||
{{ page.date }}
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
{{ page.content | safe }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endblock section_listing %}
|
|
@ -0,0 +1,17 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}{{ section.title }} | {{ super() }}{% endblock title %}
|
||||
{% block main_content %}
|
||||
<div class="section_header">
|
||||
{%- block section_header -%}
|
||||
{{ section.content }}
|
||||
{%- endblock section_header -%}
|
||||
</div>
|
||||
{% block section_listing -%}
|
||||
<ul id="section_listing">
|
||||
{% for page in section.pages -%}
|
||||
<li><a href="{{ page.permalink }}">{{ page.title }}</a></li>
|
||||
{%- endfor %}
|
||||
|
||||
</ul>
|
||||
{%- endblock section_listing %}
|
||||
{% endblock main_content %}
|
|
@ -0,0 +1,9 @@
|
|||
{% set shell_data = load_data(path="static/shells.toml") %}
|
||||
<h2>available shells</h2>
|
||||
<p>As of {{ now() | date(format="%F") }}, the following shells are installed:
|
||||
<ul id="shells">
|
||||
{% for sh in shell_data.data %}
|
||||
<li>{{ sh }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</p>
|
54
unk
54
unk
|
@ -1,54 +0,0 @@
|
|||
#!/bin/sh
|
||||
"$DEBUG" && set -x
|
||||
set -e
|
||||
|
||||
: "${UNKZ:=Z}"
|
||||
: "${UNKI:=I}"
|
||||
: "${UNKO:=O}"
|
||||
: "${UNKL:=L}"
|
||||
: "${UNKS:=$UNKI/S}"
|
||||
|
||||
. ./lib.sh
|
||||
|
||||
rm -rf "$UNKO"
|
||||
mkdir "$UNKO"
|
||||
cp -r "$UNKS" "$UNKO"||:
|
||||
|
||||
# shellcheck disable=2016
|
||||
[ -f "$UNKL" ]||p '$(X "$F")'>"$UNKL"
|
||||
|
||||
for F in "$UNKI"/*
|
||||
do [ -d "$F" ] && continue
|
||||
l "$F"
|
||||
|
||||
fo="index"
|
||||
case "$F" in
|
||||
*.md)
|
||||
fo="${fo}.html"
|
||||
;;
|
||||
*)
|
||||
fo="${fo}.${F##*.}"
|
||||
;;
|
||||
esac
|
||||
|
||||
n="$(N)"
|
||||
d="$UNKO"
|
||||
case "$n" in
|
||||
index)
|
||||
;;
|
||||
_*)
|
||||
n="${n#_}"
|
||||
d="$UNKO/$n"
|
||||
;;
|
||||
*)
|
||||
d="$UNKO/$n"
|
||||
;;
|
||||
esac
|
||||
|
||||
mkdir -p "$d"
|
||||
X "$UNKL" > "$d/$fo"
|
||||
done
|
||||
|
||||
#X "$UNKF" > "$UNKO/atom.xml"
|
||||
l "Building DP"
|
||||
X Dp > "$UNKO/tilde.json"
|
|
@ -1,10 +0,0 @@
|
|||
#!/usr/bin/awk -f
|
||||
|
||||
/USERS_TOTAL/ {
|
||||
"ls /home|wc -l" | getline $1;
|
||||
}
|
||||
/USERS_CURRENT/ {
|
||||
"users|tr ' ' '\n'|sort -u|wc -l" | getline $1;
|
||||
}
|
||||
|
||||
{ print; }
|
Loading…
Reference in New Issue