Compare commits

..

No commits in common. "main" and "dev" have entirely different histories.
main ... dev

13 changed files with 15 additions and 201 deletions

View file

@ -22,20 +22,7 @@ jobs:
python3 -m pip install -r requirements.txt --break-system-packages python3 -m pip install -r requirements.txt --break-system-packages
- name: Generate static site - name: Generate static site
run: python3 main.py --theme dark --is-primary --domains dark.private.coffee run: python3 main.py --theme dark --domains dark.private.coffee
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -t ed25519 git.private.coffee >> ~/.ssh/known_hosts
# Create SSH config file to ensure the correct identity file is used
echo "Host git.private.coffee" > ~/.ssh/config
echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Deploy to pages-dark branch - name: Deploy to pages-dark branch
run: | run: |
@ -62,7 +49,7 @@ jobs:
git commit -m "Deploy static site" git commit -m "Deploy static site"
# Set the URL again # Set the URL again
git remote set-url origin "git@git.private.coffee:PrivateCoffee/privatecoffee-website.git" git remote set-url origin "https://${{ secrets.FORGEJO_USER }}:${{ secrets.FORGEJO_TOKEN }}@git.private.coffee/PrivateCoffee/privatecoffee-website.git"
# Force push to the 'pages-dark' branch # Force push to the 'pages-dark' branch
git push origin pages-dark --force git push origin pages-dark --force

View file

@ -26,19 +26,6 @@ jobs:
- name: Generate static site - name: Generate static site
run: python3 main.py --dev --domains dev.private.coffee run: python3 main.py --dev --domains dev.private.coffee
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -t ed25519 git.private.coffee >> ~/.ssh/known_hosts
# Create SSH config file to ensure the correct identity file is used
echo "Host git.private.coffee" > ~/.ssh/config
echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Deploy to pages-dev branch - name: Deploy to pages-dev branch
run: | run: |
# Configure Git # Configure Git
@ -64,7 +51,7 @@ jobs:
git commit -m "Deploy static site" git commit -m "Deploy static site"
# Set the URL again # Set the URL again
git remote set-url origin "git@git.private.coffee:PrivateCoffee/privatecoffee-website.git" git remote set-url origin "https://${{ secrets.FORGEJO_USER }}:${{ secrets.FORGEJO_TOKEN }}@git.private.coffee/PrivateCoffee/privatecoffee-website.git"
# Force push to the 'pages-dev' branch # Force push to the 'pages-dev' branch
git push origin pages-dev --force git push origin pages-dev --force

View file

@ -24,19 +24,6 @@ jobs:
- name: Generate static site - name: Generate static site
run: python3 main.py --theme pride --domains pride.coffee,www.pride.coffee run: python3 main.py --theme pride --domains pride.coffee,www.pride.coffee
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -t ed25519 git.private.coffee >> ~/.ssh/known_hosts
# Create SSH config file to ensure the correct identity file is used
echo "Host git.private.coffee" > ~/.ssh/config
echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Deploy to pages-pride branch - name: Deploy to pages-pride branch
run: | run: |
# Configure Git # Configure Git
@ -62,7 +49,7 @@ jobs:
git commit -m "Deploy static site" git commit -m "Deploy static site"
# Set the URL again # Set the URL again
git remote set-url origin "git@git.private.coffee:PrivateCoffee/privatecoffee-website.git" git remote set-url origin "https://${{ secrets.FORGEJO_USER }}:${{ secrets.FORGEJO_TOKEN }}@git.private.coffee/PrivateCoffee/privatecoffee-website.git"
# Force push to the 'pages-pride' branch # Force push to the 'pages-pride' branch
git push origin pages-pride --force git push origin pages-pride --force

View file

@ -22,20 +22,7 @@ jobs:
python3 -m pip install -r requirements.txt --break-system-packages python3 -m pip install -r requirements.txt --break-system-packages
- name: Generate static site - name: Generate static site
run: python3 main.py --is-primary run: python3 main.py
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -t ed25519 git.private.coffee >> ~/.ssh/known_hosts
# Create SSH config file to ensure the correct identity file is used
echo "Host git.private.coffee" > ~/.ssh/config
echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Deploy to pages branch - name: Deploy to pages branch
run: | run: |
@ -62,7 +49,7 @@ jobs:
git commit -m "Deploy static site" git commit -m "Deploy static site"
# Set the URL again # Set the URL again
git remote set-url origin "git@git.private.coffee:PrivateCoffee/privatecoffee-website.git" git remote set-url origin "https://${{ secrets.FORGEJO_USER }}:${{ secrets.FORGEJO_TOKEN }}@git.private.coffee/PrivateCoffee/privatecoffee-website.git"
# Force push to the 'pages' branch # Force push to the 'pages' branch
git push origin pages --force git push origin pages --force

View file

@ -1,19 +0,0 @@
/* Disability pride flag theme */
:root {
/* Override gradient colors */
--gradient-start: #4A4A4A;
--gradient-end: #4A4A4A;
}
header.bg-primary-gradient {
background: linear-gradient(to bottom right, #4A4A4A, #FF0000, #FFD700, #D3D3D3, #ADD8E6, #008000, #4A4A4A);
}
#logoContainer {
background-image: url(../../img/logo-white.svg);
}
#smallLogoContainer {
background-image: url(../../img/logo-inv_grad.svg);
}

View file

@ -15,7 +15,7 @@ The [Grazer Linuxtage](blog/20250101-board_meeting/index.md) is conference about
Naturally we felt like it was the perfect place to give a quick overview about private.coffee and it's services. Naturally we felt like it was the perfect place to give a quick overview about private.coffee and it's services.
You can find the _lightning talk_ here (in german): You can find the _lightning talk_ here (in german):
<iframe title="Lightning Talks" width="560" height="315" src="https://cuddly.tube/videos/embed/7MT1n4H2xU3GwmP2SUT3N1?start=2107s" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe> <iframe width="1024" height="576" src="https://media.ccc.de/v/glt25-491-lightning-talks/oembed#t=2107" frameborder="0" allowfullscreen></iframe>
We met quite a few people who actually already knew us and our services which was pretty cool! We met quite a few people who actually already knew us and our services which was pretty cool!
A lesson that we learned is that we should probably reach out more to other similar associations and collectives to coordinate our efforts. A lesson that we learned is that we should probably reach out more to other similar associations and collectives to coordinate our efforts.

View file

@ -1,28 +0,0 @@
---
title: Transfer.coffee Peer-to-peer file sharing
date: 2025-05-30 17:00:00
author: jupfi
license: CC BY-SA 4.0
license_url: https://creativecommons.org/licenses/by-sa/4.0/
tags: services
excerpt: Transfer.coffee is a simple web application that allows users to share files.
---
Have you ever been annoyed by one of your colleagues sending you links to WeTransfer and the likes for sharing files?
Then you had to suffer through huge ad banners that companies will actually advertise as the most notable on the internet [1].
Worry no longer - [private.coffee](private.coffee) has got you covered. Transfer.coffee is a simple web application that allows users to share files. It's really easy to use and ad-free:
1. Upload your file to the [Transfer.coffee](transfer.coffee) web interface
2. [Transfer.coffee](transfer.coffee) generates a simple mnemonic seed (a series of easy-to-remember words)
3. Share this seed with your recipient
4. They enter the seed on [Transfer.coffee](transfer.coffee) to download the file directly from your device
The files are shared using WebTorrent, a peer-to-peer file sharing protocol [2]. This means that the files are not stored on a central server and are instead shared directly between the sender and the recipient.
You can find the source code [here](https://git.private.coffee/PrivateCoffee/transfer.coffee), including some instructions on how to host your own instance!
---
- [1] <https://wetransfer.com/explore/advertising>
- [2] <https://en.wikipedia.org/wiki/WebTorrent>

View file

@ -1,16 +0,0 @@
---
title: Statement on the draft of the Bundestrojaner (state-sponsored trojan horse) law 2025
date: 2025-06-02 17:00:00
author: jupfi
license: CC BY-SA 4.0
license_url: https://creativecommons.org/licenses/by-sa/4.0/
tags: statement
excerpt: Private.coffee has issued a statement on the draft of the Bundestrojaner (state-sponsored trojan horse) law 2025. We urgently request that this draft in its current form and the concept of state surveillance software as a whole not be pursued further.
---
Private.coffee has issued a statement on the draft of the Bundestrojaner (state-sponsored trojan horse) law 2025.
We urgently request that this draft in its current form and the concept of state surveillance software as a whole not be pursued further.
You can find the (german) statement here:
[https://www.parlament.gv.at/gegenstand/XXVIII/SNME/610/](https://www.parlament.gv.at/gegenstand/XXVIII/SNME/610/)

View file

@ -179,7 +179,7 @@
}, },
"05": { "05": {
"Membership Fees": { "Membership Fees": {
"EUR": 473.46 "EUR": 453.46
}, },
"Donations": { "Donations": {
"EUR": 112 "EUR": 112
@ -192,42 +192,10 @@
"Notes": "Reimbursements for hoodies" "Notes": "Reimbursements for hoodies"
}, },
"Server Rent": { "Server Rent": {
"EUR": -386.53 "EUR": -237.24
}, },
"Domains": { "Domains": {
"EUR": -73.66 "EUR": -9
}
},
"06": {
"Membership Fees": {
"EUR": 438.46
},
"Donations": {
"EUR": 1
},
"Server Rent": {
"EUR": -480.85
},
"Domains": {
"EUR": -53.55
},
"Bank Fees": {
"EUR": -60.6
},
"Marketing": {
"EUR": -126,
"Notes": "Embroidery for branded shirts (see April 2025)"
}
},
"07": {
"Membership Fees": {
"EUR": 420.23
},
"Donations": {
"EUR": 75
},
"Server Rent": {
"EUR": -10.10
} }
} }
} }

View file

@ -665,26 +665,6 @@
"exclude_from_index": false, "exclude_from_index": false,
"exclude_from_simple": false "exclude_from_simple": false
}, },
{
"name": "FreeDOI",
"url": "https://freedoi.org",
"category": "Media & Content",
"homemade": "https://git.private.coffee/PrivateCoffee/freedoi",
"fork": false,
"tiny_description": "Permanent identifiers for digital objects",
"short_description": "FreeDOI is a service for creating and resolving DOI-like identifiers.",
"long_description": "FreeDOI is a service for creating and resolving DOI-like identifiers. It allows you to create permanent URLs for digital objects, such as research papers, datasets, and more.",
"status": "OK",
"links": [
{
"name": "Go to FreeDOI",
"url": "https://freedoi.org"
}
],
"icon": "link",
"exclude_from_index": false,
"exclude_from_simple": false
},
{ {
"name": "BiblioReads", "name": "BiblioReads",
"url": "https://biblioreads.private.coffee", "url": "https://biblioreads.private.coffee",

View file

@ -18,7 +18,7 @@
"start": "1970-03-30", "start": "1970-03-30",
"end": "1970-04-01" "end": "1970-04-01"
}, },
{ {
// 4/20 // 4/20
"name": "weed", "name": "weed",
"start": "1970-04-20", "start": "1970-04-20",
@ -47,11 +47,5 @@
"name": "pride", "name": "pride",
"start": "1970-06-01", "start": "1970-06-01",
"end": "1970-06-30" "end": "1970-06-30"
},
{
// Disability Pride Month
"name": "disability",
"start": "1970-07-01",
"end": "1970-07-31"
} }
] ]

17
main.py
View file

@ -78,7 +78,7 @@ def render_template_to_file(template_name, output_name, **kwargs):
template = env.get_template(template_name) template = env.get_template(template_name)
output_path = output_dir / output_name output_path = output_dir / output_name
kwargs.setdefault("theme", "plain") kwargs.setdefault("theme", "plain")
path = "/" + output_name path = "/" + output_name
if path.endswith("/index.html"): if path.endswith("/index.html"):
path = path[:-10] path = path[:-10]
@ -485,7 +485,6 @@ def generate_static_site(
development_mode: bool = False, development_mode: bool = False,
theme: Optional[str] = None, theme: Optional[str] = None,
domains: Optional[str] = None, domains: Optional[str] = None,
is_primary: bool = False,
): ):
if not theme: if not theme:
theme = autoselect_theme() theme = autoselect_theme()
@ -494,7 +493,6 @@ def generate_static_site(
template_kwargs = { template_kwargs = {
"timestamp": int(datetime.datetime.now().timestamp()), "timestamp": int(datetime.datetime.now().timestamp()),
"theme": theme, "theme": theme,
"is_primary": is_primary,
} }
if development_mode: if development_mode:
@ -597,11 +595,6 @@ if __name__ == "__main__":
type=str, type=str,
help="Domains to use for Forgejo Pages (default: domains from data/domains.txt)", help="Domains to use for Forgejo Pages (default: domains from data/domains.txt)",
) )
parser.add_argument(
"--is-primary",
action="store_true",
help="This is the primary instance",
)
parser.add_argument("--debug", action="store_true", help="Enable debug output") parser.add_argument("--debug", action="store_true", help="Enable debug output")
args = parser.parse_args() args = parser.parse_args()
@ -622,14 +615,8 @@ if __name__ == "__main__":
if os.environ.get("PRIVATECOFFEE_DEBUG"): if os.environ.get("PRIVATECOFFEE_DEBUG"):
logging.getLogger().setLevel(logging.DEBUG) logging.getLogger().setLevel(logging.DEBUG)
if os.environ.get("PRIVATECOFFEE_IS_PRIMARY"):
args.is_primary = True
generate_static_site( generate_static_site(
development_mode=args.dev, development_mode=args.dev, theme=args.theme, domains=args.domains
theme=args.theme,
domains=args.domains,
is_primary=args.is_primary,
) )
if args.serve: if args.serve:

View file

@ -80,7 +80,7 @@
<a class="nav-link" href="https://status.private.coffee/">Status</a> <a class="nav-link" href="https://status.private.coffee/">Status</a>
</li> </li>
</ul> </ul>
{% if is_primary %} {% if theme == 'plain' or theme == 'dark' %}
<div class="theme-toggle-container me-2"> <div class="theme-toggle-container me-2">
{% if theme == 'dark' %} {% if theme == 'dark' %}
<a href="https://private.coffee{{ request.path }}" <a href="https://private.coffee{{ request.path }}"
@ -147,7 +147,7 @@
</div> </div>
</div> </div>
</footer> </footer>
{% if is_primary and not theme == "dark" %} {% if theme == "plain" %}
<script src="{{ relative_path }}assets/js/theme-toggle.js?v={{ timestamp }}"></script> <script src="{{ relative_path }}assets/js/theme-toggle.js?v={{ timestamp }}"></script>
{% endif %} {% endif %}
</body> </body>