Compare commits
No commits in common. "main" and "dev" have entirely different histories.
13 changed files with 15 additions and 201 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -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.
|
||||||
|
|
|
@ -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>
|
|
|
@ -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/)
|
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
17
main.py
|
@ -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:
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue