Compare commits
58 Commits
vaultwarde
...
nixpkgs_bu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02cabbbc8d | ||
|
5634919fa6
|
|||
| 394c0610ce | |||
| 6dee590206 | |||
| b6cd2b57f8 | |||
|
c80628a1a9
|
|||
|
8cd2eafaa5
|
|||
|
ed19426eb7
|
|||
| 7ff64a5c16 | |||
| 1e540bb39c | |||
| d7278d18dd | |||
| e32ee42ed1 | |||
| 696f1aeb90 | |||
| f385b0318b | |||
| 83c11bb06e | |||
| cd5db6a616 | |||
| e32e4d7774 | |||
| c3474f9c27 | |||
| e021f46b4d | |||
| ff340d69fb | |||
| 56c1ae5332 | |||
| bbf8decea1 | |||
| a1bfa0120c | |||
|
|
344eeb437b | ||
| d5767508ef | |||
| a07b8ffd68 | |||
| 9d7ab9f901 | |||
| a55b498eaa | |||
|
8afc42d46f
|
|||
|
e32c1f31bc
|
|||
| 66a0433148 | |||
| 04ee3105c1 | |||
| 5a35febf77 | |||
| 5403d97506 | |||
| dabda0ccb9 | |||
| f6dc3d46e9 | |||
| 79fef44bcf | |||
|
6182318a29
|
|||
| 5a517d57fb | |||
|
329305a916
|
|||
| f28125c9a4 | |||
| e46c6bef00 | |||
| 6661357f05 | |||
| b012b89a48 | |||
| 4d101aee29 | |||
| 93fb64b2c6 | |||
| a92336fb30 | |||
|
a90960d7a1
|
|||
|
c73ffe95c5
|
|||
| 7464e0b710 | |||
| 5a12803694 | |||
| 0347fa68c7 | |||
| f0e1f07c3e | |||
| b4d199d00c | |||
| bec232a023 | |||
| 62c92821b4 | |||
| eb1ec22605 | |||
| cb5e68ef16 |
110
.gitea/workflows/autoupdate.yml
Normal file
110
.gitea/workflows/autoupdate.yml
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
name: Weekly Flake Update
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * 4"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_and_check_flake:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
NIXPKGS_ALLOW_UNFREE: 1
|
||||||
|
steps:
|
||||||
|
- name: Install sudo
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y sudo
|
||||||
|
- name: Install Tea
|
||||||
|
env:
|
||||||
|
TEA_DL_URL: "https://dl.gitea.com/tea/0.9.2/tea-0.9.2-linux-amd64"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
TEA_DIR=$(mktemp -d -t tmp.XXXX)
|
||||||
|
pushd $TEA_DIR
|
||||||
|
wget "$TEA_DL_URL"
|
||||||
|
wget "${TEA_DL_URL}.sha256"
|
||||||
|
if $(sha256sum --quiet -c "tea-0.9.2-linux-amd64.sha256"); then
|
||||||
|
mv "tea-0.9.2-linux-amd64" /usr/bin/tea
|
||||||
|
chmod +x /usr/bin/tea
|
||||||
|
popd
|
||||||
|
rm -rf $TEA_DIR
|
||||||
|
else
|
||||||
|
popd
|
||||||
|
rm -rf $TEA_DIR
|
||||||
|
echo "::error title=⛔ error hint::Tea v0.9.2 Checksum Failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
- uses: https://code.forgejo.org/actions/checkout@v6
|
||||||
|
- name: Set up Nix
|
||||||
|
uses: https://github.com/cachix/install-nix-action@v31
|
||||||
|
with:
|
||||||
|
github_access_token: ${{ secrets.AHTLONS_GITHUB_TOKEN }} #Fuck github
|
||||||
|
|
||||||
|
- name: Run nix flake update
|
||||||
|
run: nix flake update
|
||||||
|
|
||||||
|
- name: Commit flake.lock
|
||||||
|
run: |
|
||||||
|
git config user.name "malobot"
|
||||||
|
git config user.email "malobot@systemli.org"
|
||||||
|
git stash push
|
||||||
|
git branch nixpkgs_bump_$(date +%Y%m%d)
|
||||||
|
git checkout nixpkgs_bump_$(date +%Y%m%d)
|
||||||
|
git stash pop
|
||||||
|
git add flake.lock
|
||||||
|
git diff --staged --quiet || git commit -m "Update flake.lock"
|
||||||
|
|
||||||
|
- name: Check for eval warnings
|
||||||
|
id: commit
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
{
|
||||||
|
echo "COMMIT_DESC<<EOF"
|
||||||
|
echo "Date: $(date)"
|
||||||
|
echo "Evaluation warnings:"
|
||||||
|
nix flake check --all-systems --no-build 2>&1 | grep evaluation | awk '!seen[$0]++' || echo "None :)"
|
||||||
|
echo EOF
|
||||||
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Login to Gitea
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GIT_SERVER_URL: https://git.dynamicdiscord.de
|
||||||
|
GIT_SERVER_TOKEN: ${{ secrets.AHTLONS_GITEA_TOKEN }}
|
||||||
|
run: >-
|
||||||
|
tea login add
|
||||||
|
-u "$GIT_SERVER_URL"
|
||||||
|
-t "$GIT_SERVER_TOKEN"
|
||||||
|
- name: Check for existing pull request
|
||||||
|
id: no-pr
|
||||||
|
continue-on-error: true
|
||||||
|
shell: bash
|
||||||
|
run: >-
|
||||||
|
tea pr -f head -o simple |
|
||||||
|
grep -q ${{ github.ref_name }} &&
|
||||||
|
exit 1 ||
|
||||||
|
exit 0
|
||||||
|
- name: Force push branch
|
||||||
|
run: git push --force -u origin nixpkgs_bump_$(date +%Y%m%d)
|
||||||
|
- name: Create pull request
|
||||||
|
if: steps.no-pr.outcome == 'success'
|
||||||
|
env:
|
||||||
|
COMMIT_MSG: Automatic Nixpkgs update
|
||||||
|
COMMIT_DESC: ${{ steps.commit.outputs.COMMIT_DESC }}
|
||||||
|
shell: bash
|
||||||
|
run: >-
|
||||||
|
tea pr create
|
||||||
|
-L "bump"
|
||||||
|
-t "$COMMIT_MSG"
|
||||||
|
-d "$COMMIT_DESC"
|
||||||
|
- name: Skip pull request
|
||||||
|
if: steps.no-pr.outcome == 'failure'
|
||||||
|
shell: bash
|
||||||
|
run: >
|
||||||
|
echo "::error title=⛔ error hint::
|
||||||
|
A PR already exists for this branch: ${{ github.ref_name }}"
|
||||||
33
.gitea/workflows/comment-diff.yml
Normal file
33
.gitea/workflows/comment-diff.yml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Weekly Flake Update
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- edited
|
||||||
|
- reopened
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Explore-Gitea-Actions:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
|
||||||
|
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||||||
|
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
|
||||||
|
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
||||||
|
- name: List files in the repository
|
||||||
|
run: |
|
||||||
|
ls ${{ github.workspace }}
|
||||||
|
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||||
|
- name: Check for string parsing
|
||||||
|
run: |
|
||||||
|
var=$(echo "${{ github.ref }}" | cut -d / -f 3)
|
||||||
|
echo "$var"
|
||||||
|
|
||||||
75
.hydra/declarative-jobsets.nix
Normal file
75
.hydra/declarative-jobsets.nix
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
{ nixpkgs, pulls, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { };
|
||||||
|
|
||||||
|
prs = builtins.fromJSON (builtins.readFile pulls);
|
||||||
|
prJobsets = pkgs.lib.mapAttrs (num: info: {
|
||||||
|
enabled = 1;
|
||||||
|
hidden = false;
|
||||||
|
description = "PR ${num}: ${info.title}";
|
||||||
|
checkinterval = 300;
|
||||||
|
schedulingshares = 20;
|
||||||
|
enableemail = false;
|
||||||
|
emailoverride = "";
|
||||||
|
keepnr = 1;
|
||||||
|
type = 1;
|
||||||
|
flake = "${info.head.repo.html_url}/archive/${info.head.ref}.tar.gz";
|
||||||
|
inputs = {
|
||||||
|
gitea_repo_name = {
|
||||||
|
type = "string";
|
||||||
|
value = "${info.head.repo.name}";
|
||||||
|
emailresponsible = false;
|
||||||
|
};
|
||||||
|
gitea_repo_owner = {
|
||||||
|
type = "string";
|
||||||
|
value = "${info.head.repo.owner.username}";
|
||||||
|
emailresponsible = false;
|
||||||
|
};
|
||||||
|
gitea_http_url = {
|
||||||
|
type = "string";
|
||||||
|
value = "https://git.dynamicdiscord.de";
|
||||||
|
emailresponsible = false;
|
||||||
|
};
|
||||||
|
gitea_status_repo = {
|
||||||
|
type = "string";
|
||||||
|
value = "${info.head.ref}";
|
||||||
|
emailresponsible = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}) prs;
|
||||||
|
mkFlakeJobset = branch: {
|
||||||
|
description = "Build ${branch} branch of the Malobeo Infrastructure repo";
|
||||||
|
checkinterval = 300;
|
||||||
|
enabled = "1";
|
||||||
|
schedulingshares = 100;
|
||||||
|
enableemail = false;
|
||||||
|
emailoverride = "";
|
||||||
|
keepnr = 3;
|
||||||
|
hidden = false;
|
||||||
|
type = 1;
|
||||||
|
flake = "https://git.dynamicdiscord.de/malobeo/infrastructure/archive/${branch}.tar.gz";
|
||||||
|
};
|
||||||
|
|
||||||
|
desc = prJobsets // {
|
||||||
|
"master" = mkFlakeJobset "master";
|
||||||
|
};
|
||||||
|
|
||||||
|
log = {
|
||||||
|
pulls = prs;
|
||||||
|
jobsets = desc;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
jobsets = pkgs.runCommand "spec-jobsets.json" { } ''
|
||||||
|
cat >$out <<'EOF'
|
||||||
|
${builtins.toJSON desc}
|
||||||
|
EOF
|
||||||
|
# This is to get nice .jobsets build logs on Hydra
|
||||||
|
cat >tmp <<'EOF'
|
||||||
|
${builtins.toJSON log}
|
||||||
|
EOF
|
||||||
|
${pkgs.jq}/bin/jq . tmp
|
||||||
|
'';
|
||||||
|
}
|
||||||
30
.hydra/spec.json
Normal file
30
.hydra/spec.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"enabled": 1,
|
||||||
|
"hidden": false,
|
||||||
|
"description": "Malobeo infrastructure repo",
|
||||||
|
"nixexprinput": "nixexpr",
|
||||||
|
"nixexprpath": ".hydra/declarative-jobsets.nix",
|
||||||
|
"checkinterval": 60,
|
||||||
|
"schedulingshares": 100,
|
||||||
|
"enableemail": false,
|
||||||
|
"emailoverride": "",
|
||||||
|
"keepnr": 5,
|
||||||
|
"type": 0,
|
||||||
|
"inputs": {
|
||||||
|
"nixexpr": {
|
||||||
|
"value": "https://git.dynamicdiscord.de/ahtlon/infrastructure master",
|
||||||
|
"type": "git",
|
||||||
|
"emailresponsible": false
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"value": "https://github.com/NixOS/nixpkgs nixos-25.11",
|
||||||
|
"type": "git",
|
||||||
|
"emailresponsible": false
|
||||||
|
},
|
||||||
|
"pulls": {
|
||||||
|
"type": "path",
|
||||||
|
"value": "http://127.0.0.1:27364/gitea-pulls-sorted.json",
|
||||||
|
"emailresponsible": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
- [musik](./projekte/musik.md)
|
- [musik](./projekte/musik.md)
|
||||||
- [TODO](./todo.md)
|
- [TODO](./todo.md)
|
||||||
- [Modules]()
|
- [Modules]()
|
||||||
|
- [Gitea-translator](./module/gitea-translator.md)
|
||||||
- [Initrd-ssh](./module/initssh.md)
|
- [Initrd-ssh](./module/initssh.md)
|
||||||
- [Disks](./module/disks.md)
|
- [Disks](./module/disks.md)
|
||||||
- [How-to]()
|
- [How-to]()
|
||||||
|
|||||||
21
doc/src/module/gitea-translator.md
Normal file
21
doc/src/module/gitea-translator.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Gitea-tanslator
|
||||||
|
The module can be used by importing `inputs.self.nixosModules.malobeo.gitea-translator`
|
||||||
|
|
||||||
|
This module starts a python server that fetches the gitea pull request api and translates it to a file that hydra understands.
|
||||||
|
To use, just set the parameters of the gitea server, then send a GET request to either `http://${host}:${port}/` or `http://${host}:${port}/gitea-pulls-sorted.json`
|
||||||
|
|
||||||
|
## Module config
|
||||||
|
##### enable (default = false) - enables the module
|
||||||
|
##### baseurl (default = "git.dynamicdiscord.de") - Base URL of the Gitea instance
|
||||||
|
##### owner (default = "malobeo") - Repository owner
|
||||||
|
##### repo (default = "infrastructure") - Repository name
|
||||||
|
##### host (default = "127.0.0.1") - Address the server binds to
|
||||||
|
##### port (default = 27364) - Port the server listens on
|
||||||
|
|
||||||
|
## Hydra config
|
||||||
|
If you change the default port or host, the file `.hydra/spec.json` has to be modified accordingly.
|
||||||
|
With the module running on the hydra host, create a new hydra project, then:
|
||||||
|
|
||||||
|
- Set `Declarative spec file` to `.hydra/spec.json`
|
||||||
|
- Change declaritive input type to `Git checkout`
|
||||||
|
- Set your git repo location in the field below that
|
||||||
101
flake.lock
generated
101
flake.lock
generated
@@ -7,11 +7,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746728054,
|
"lastModified": 1768920986,
|
||||||
"narHash": "sha256-eDoSOhxGEm2PykZFa/x9QG5eTH0MJdiJ9aR00VAofXE=",
|
"narHash": "sha256-CNzzBsRhq7gg4BMBuTDObiWDH/rFYHEuDRVOwCcwXw4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "ff442f5d1425feb86344c028298548024f21256d",
|
"rev": "de5708739256238fb912c62f03988815db89ec9a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -21,6 +21,27 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dns": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768143854,
|
||||||
|
"narHash": "sha256-E5/kyPz4zAZn/lZdvqlF83jMgCWNxmqYjjWuadngCbk=",
|
||||||
|
"owner": "kirelagin",
|
||||||
|
"repo": "dns.nix",
|
||||||
|
"rev": "a97cf4156e9f044fe4bed5be531061000dfabb07",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kirelagin",
|
||||||
|
"repo": "dns.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ep3-bs": {
|
"ep3-bs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -43,15 +64,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
|
||||||
"systems": "systems_3"
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1614513358,
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
"narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
"rev": "5466c5bbece17adaab2d82fae80b46e807611bf3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -102,18 +120,17 @@
|
|||||||
},
|
},
|
||||||
"microvm": {
|
"microvm": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"spectrum": "spectrum"
|
"spectrum": "spectrum"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764549796,
|
"lastModified": 1773872447,
|
||||||
"narHash": "sha256-Mswg665P92EoHkBwCwPr/7bdnj04g2Qfb+t02ZEYTHA=",
|
"narHash": "sha256-IWTp4EMUfZwnuF5S/AjWfOFzCbbgkMzRwNd0qHC/EMg=",
|
||||||
"owner": "astro",
|
"owner": "astro",
|
||||||
"repo": "microvm.nix",
|
"repo": "microvm.nix",
|
||||||
"rev": "030d055e877cc13d7525b39f434150226d5e4482",
|
"rev": "b202882536b018a76f0b6e71a48677f41f4de9d8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -145,11 +162,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764234087,
|
"lastModified": 1769813415,
|
||||||
"narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=",
|
"narHash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixos-generators",
|
"repo": "nixos-generators",
|
||||||
"rev": "032a1878682fafe829edfcf5fdfad635a2efe748",
|
"rev": "8946737ff703382fda7623b9fab071d037e897d5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -160,11 +177,11 @@
|
|||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764440730,
|
"lastModified": 1773533765,
|
||||||
"narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=",
|
"narHash": "sha256-qonGfS2lzCgCl59Zl63jF6dIRRpvW3AJooBGMaXjHiY=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3",
|
"rev": "f8e82243fd601afb9f59ad230958bd073795cbfe",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -192,11 +209,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764517877,
|
"lastModified": 1773734432,
|
||||||
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
|
"narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
|
"rev": "cda48547b432e8d3b18b4180ba07473762ec8558",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -208,11 +225,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764522689,
|
"lastModified": 1773814637,
|
||||||
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=",
|
"narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f",
|
"rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -225,6 +242,7 @@
|
|||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
|
"dns": "dns",
|
||||||
"ep3-bs": "ep3-bs",
|
"ep3-bs": "ep3-bs",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"mfsync": "mfsync",
|
"mfsync": "mfsync",
|
||||||
@@ -246,11 +264,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764483358,
|
"lastModified": 1773698643,
|
||||||
"narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
|
"narHash": "sha256-VCiDjE8kNs8uCAK73Ezk1r3fFuc4JepvW07YFqaN968=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "5aca6ff67264321d47856a2ed183729271107c9c",
|
"rev": "8237de83e8200d16fe0c4467b02a1c608ff28044",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -262,11 +280,11 @@
|
|||||||
"spectrum": {
|
"spectrum": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1759482047,
|
"lastModified": 1772189877,
|
||||||
"narHash": "sha256-H1wiXRQHxxPyMMlP39ce3ROKCwI5/tUn36P8x6dFiiQ=",
|
"narHash": "sha256-i1p90Rgssb//aNiTDFq46ZG/fk3LmyRLChtp/9lddyA=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "c5d5786d3dc938af0b279c542d1e43bce381b4b9",
|
"rev": "fe39e122d898f66e89ffa17d4f4209989ccb5358",
|
||||||
"revCount": 996,
|
"revCount": 1255,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://spectrum-os.org/git/spectrum"
|
"url": "https://spectrum-os.org/git/spectrum"
|
||||||
},
|
},
|
||||||
@@ -335,21 +353,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems_5": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tasklist": {
|
"tasklist": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -408,7 +411,7 @@
|
|||||||
},
|
},
|
||||||
"utils_3": {
|
"utils_3": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_4"
|
"systems": "systems_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1731533236,
|
||||||
@@ -426,7 +429,7 @@
|
|||||||
},
|
},
|
||||||
"utils_4": {
|
"utils_4": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_5"
|
"systems": "systems_4"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1731533236,
|
||||||
|
|||||||
@@ -13,6 +13,11 @@
|
|||||||
disko.url = "github:nix-community/disko/latest";
|
disko.url = "github:nix-community/disko/latest";
|
||||||
disko.inputs.nixpkgs.follows = "nixpkgs";
|
disko.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
dns = {
|
||||||
|
url = "github:kirelagin/dns.nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
utils = {
|
utils = {
|
||||||
url = "github:numtide/flake-utils";
|
url = "github:numtide/flake-utils";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ keys:
|
|||||||
- &machine_vpn age1v6uxwej4nlrpfanr9js7x6059mtvyg4fw50pzt0a2kt3ahk7edlslafeuh
|
- &machine_vpn age1v6uxwej4nlrpfanr9js7x6059mtvyg4fw50pzt0a2kt3ahk7edlslafeuh
|
||||||
- &machine_fanny age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk
|
- &machine_fanny age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk
|
||||||
- &machine_nextcloud age1g084sl230x94mkd2wq92s03mw0e8mnpjdjfx9uzaxw6psm8neyzqqwpnqe
|
- &machine_nextcloud age1g084sl230x94mkd2wq92s03mw0e8mnpjdjfx9uzaxw6psm8neyzqqwpnqe
|
||||||
|
- &machine_vaultwarden age1zs9puemeevc5kt84w9d2mc5396w0t9p60qxymkpatwvwxunzs5usmxr3an
|
||||||
|
- &machine_pretalx age1y04q8n7mgk82c87rfddm0u72h0ny6sfzktjsk0cc3gu93kezudfqdp9v9g
|
||||||
#this dummy key is used for testing.
|
#this dummy key is used for testing.
|
||||||
- &machine_dummy age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
|
- &machine_dummy age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
|
||||||
creation_rules:
|
creation_rules:
|
||||||
@@ -103,6 +105,15 @@ creation_rules:
|
|||||||
- *admin_kalipso_dsktp
|
- *admin_kalipso_dsktp
|
||||||
age:
|
age:
|
||||||
- *admin_atlan
|
- *admin_atlan
|
||||||
|
- *machine_vaultwarden
|
||||||
|
- path_regex: pretalx/secrets.yaml$
|
||||||
|
key_groups:
|
||||||
|
- pgp:
|
||||||
|
- *admin_kalipso
|
||||||
|
- *admin_kalipso_dsktp
|
||||||
|
age:
|
||||||
|
- *admin_atlan
|
||||||
|
- *machine_pretalx
|
||||||
- path_regex: .*/secrets/.*
|
- path_regex: .*/secrets/.*
|
||||||
key_groups:
|
key_groups:
|
||||||
- pgp:
|
- pgp:
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ with lib;
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = true;
|
logNginx = true;
|
||||||
lokiHost = "10.0.0.14";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.malobeo-tasklist.enable = true;
|
services.malobeo-tasklist.enable = true;
|
||||||
|
|||||||
@@ -43,20 +43,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.nginx.virtualHosts."cloud.malobeo.org" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME= true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://10.0.0.10";
|
|
||||||
extraConfig = ''
|
|
||||||
client_max_body_size 10G;
|
|
||||||
client_body_timeout 3600s;
|
|
||||||
send_timeout 3600s;
|
|
||||||
fastcgi_buffers 64 4K;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."keys.malobeo.org" = {
|
services.nginx.virtualHosts."keys.malobeo.org" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME= true;
|
enableACME= true;
|
||||||
@@ -67,7 +53,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."grafana.malobeo.org" = {
|
services.nginx.virtualHosts."grafana.malobeo.org" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME= true;
|
enableACME= true;
|
||||||
@@ -78,6 +63,16 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."events.malobeo.org" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME= true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://10.0.0.10";
|
||||||
|
extraConfig = ''
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
services.nginx.virtualHosts."tasklist.malobeo.org" = {
|
services.nginx.virtualHosts."tasklist.malobeo.org" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME= true;
|
enableACME= true;
|
||||||
@@ -88,24 +83,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."zines.malobeo.org" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME= true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://10.0.0.10";
|
|
||||||
extraConfig = ''
|
|
||||||
client_body_in_file_only clean;
|
|
||||||
client_body_buffer_size 32K;
|
|
||||||
|
|
||||||
client_max_body_size 500M;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
send_timeout 300s;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."status.malobeo.org" = {
|
services.nginx.virtualHosts."status.malobeo.org" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME= true;
|
enableACME= true;
|
||||||
|
|||||||
@@ -2,11 +2,13 @@
|
|||||||
let
|
let
|
||||||
sshKeys = import ../ssh_keys.nix;
|
sshKeys = import ../ssh_keys.nix;
|
||||||
peers = import ../modules/malobeo/peers.nix;
|
peers = import ../modules/malobeo/peers.nix;
|
||||||
|
hosts = import ../hosts.nix {};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.defaultSopsFile = ./secrets.yaml;
|
sops.defaultSopsFile = ./secrets.yaml;
|
||||||
sops.secrets.wg_private = {};
|
sops.secrets.wg_private = {};
|
||||||
sops.secrets.shop_auth = {};
|
sops.secrets.shop_auth = {};
|
||||||
|
sops.secrets.njala_api_key = {};
|
||||||
|
|
||||||
imports =
|
imports =
|
||||||
[ # Include the results of the hardware scan.
|
[ # Include the results of the hardware scan.
|
||||||
@@ -21,6 +23,7 @@ in
|
|||||||
inputs.self.nixosModules.malobeo.metrics
|
inputs.self.nixosModules.malobeo.metrics
|
||||||
inputs.self.nixosModules.malobeo.users
|
inputs.self.nixosModules.malobeo.users
|
||||||
inputs.self.nixosModules.malobeo.backup
|
inputs.self.nixosModules.malobeo.backup
|
||||||
|
./dyndns.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
virtualisation.vmVariantWithDisko = {
|
virtualisation.vmVariantWithDisko = {
|
||||||
@@ -34,7 +37,7 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = true;
|
logNginx = true;
|
||||||
lokiHost = "10.0.0.14";
|
lokiHost = hosts.malobeo.hosts.overwatch.network.address;
|
||||||
};
|
};
|
||||||
|
|
||||||
malobeo.autoUpdate = {
|
malobeo.autoUpdate = {
|
||||||
@@ -128,7 +131,13 @@ in
|
|||||||
privateKeyFile = config.sops.secrets.wg_private.path;
|
privateKeyFile = config.sops.secrets.wg_private.path;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.malobeo.microvm.enableHostBridge = true;
|
services.malobeo.microvm = {
|
||||||
|
enableHostBridge = true;
|
||||||
|
interface = "enp1s0";
|
||||||
|
gateway = "192.168.1.1";
|
||||||
|
address = "192.168.1.103/24";
|
||||||
|
};
|
||||||
|
|
||||||
services.malobeo.microvm.deployHosts = [
|
services.malobeo.microvm.deployHosts = [
|
||||||
"overwatch"
|
"overwatch"
|
||||||
"infradocs"
|
"infradocs"
|
||||||
@@ -136,6 +145,7 @@ in
|
|||||||
"durruti"
|
"durruti"
|
||||||
"zineshop"
|
"zineshop"
|
||||||
"vaultwarden"
|
"vaultwarden"
|
||||||
|
"pretalx"
|
||||||
];
|
];
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
@@ -146,7 +156,17 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
firewall = {
|
firewall = {
|
||||||
allowedTCPPorts = [ 80 ];
|
allowedTCPPorts = [ 80 443 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
defaults.email = "malobeo@systemli.org";
|
||||||
|
defaults = {
|
||||||
|
dnsProvider = "njalla";
|
||||||
|
credentialsFile = config.sops.secrets.njala_api_key.path;
|
||||||
|
dnsPropagationCheck = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -154,16 +174,34 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
virtualHosts."docs.malobeo.org" = {
|
virtualHosts."docs.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.11:9000";
|
proxyPass = "http://${hosts.malobeo.hosts.infradocs.network.address}:9000";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualHosts."cloud.malobeo.org" = {
|
virtualHosts."cloud.hq.malobeo.org" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
acmeRoot = null;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.13";
|
proxyPass = "http://${hosts.malobeo.hosts.nextcloud.network.address}";
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize};
|
||||||
|
client_body_timeout 3600s;
|
||||||
|
send_timeout 3600s;
|
||||||
|
fastcgi_buffers 64 4K;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualHosts."cloud.malobeo.org" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${hosts.malobeo.hosts.nextcloud.network.address}";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize};
|
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize};
|
||||||
@@ -176,7 +214,7 @@ in
|
|||||||
|
|
||||||
virtualHosts."keys.malobeo.org" = {
|
virtualHosts."keys.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.16";
|
proxyPass = "http://${hosts.malobeo.hosts.vaultwarden.network.address}";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
'';
|
'';
|
||||||
@@ -185,7 +223,16 @@ in
|
|||||||
|
|
||||||
virtualHosts."grafana.malobeo.org" = {
|
virtualHosts."grafana.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.14";
|
proxyPass = "http://${hosts.malobeo.hosts.overwatch.network.address}";
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualHosts."events.malobeo.org" = {
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${hosts.malobeo.hosts.pretalx.network.address}";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
'';
|
'';
|
||||||
@@ -194,19 +241,38 @@ in
|
|||||||
|
|
||||||
virtualHosts."tasklist.malobeo.org" = {
|
virtualHosts."tasklist.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.5:8080";
|
proxyPass = "http://${hosts.malobeo.hosts.durruti.network.address}:8080";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualHosts."zines.malobeo.org" = {
|
virtualHosts."zines.hq.malobeo.org" = {
|
||||||
# created with: nix-shell --packages apacheHttpd --run 'htpasswd -B -c foo.txt malobeo'
|
forceSSL = true;
|
||||||
# then content of foo.txt put into sops
|
enableACME = true;
|
||||||
# basicAuthFile = config.sops.secrets.shop_auth.path;
|
acmeRoot = null;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.0.0.15:8080";
|
proxyPass = "http://${hosts.malobeo.hosts.zineshop.network.address}:8080";
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
|
||||||
|
client_body_in_file_only clean;
|
||||||
|
client_body_buffer_size 32K;
|
||||||
|
|
||||||
|
client_max_body_size 50M;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
send_timeout 300s;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualHosts."zines.malobeo.org" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${hosts.malobeo.hosts.zineshop.network.address}:8080";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
wg_private: ENC[AES256_GCM,data:YEmIfgtyHE9msYijva0Ye2w7shVmYBPZ3mcKRF7Cy20xa6yHEUQ0kC2OWnM=,iv:ouK6fHcrxrEtsmiPmtCz9Ca8Ec1algOifrgZSBNHi74=,tag:524e/SQt++hwVyeWruCsLg==,type:str]
|
wg_private: ENC[AES256_GCM,data:YEmIfgtyHE9msYijva0Ye2w7shVmYBPZ3mcKRF7Cy20xa6yHEUQ0kC2OWnM=,iv:ouK6fHcrxrEtsmiPmtCz9Ca8Ec1algOifrgZSBNHi74=,tag:524e/SQt++hwVyeWruCsLg==,type:str]
|
||||||
|
njala_api_key: ENC[AES256_GCM,data:uEzx7KeI7ZZP63Igu5vHmuvASVxJai8bezM40UZVobQMr7r6opjnVTc0BPyIGfnG2mx/6Bo=,iv:lch04oGn6bkqtBGVzYlz6B97FGXlGOoxkiT1IplSxm4=,tag:bzXx2jSqFBv1hgJO1r5i+w==,type:str]
|
||||||
|
njalacloud: ENC[AES256_GCM,data:Xg85D9LMMYd8po8vrpxHZA==,iv:L5Gsm3bX61WW1PAdWswFNrScFoBipS2qDGU7iTubt1U=,tag:M2PCfE1h4IkW/iFq8XeIrA==,type:str]
|
||||||
|
njalazines: ENC[AES256_GCM,data:ooDRj4HqKVFrgRyzgFGQjg==,iv:9X8r1eY+6FqXv19mO0uMRd5A2tpvtmT11P77t9BQaCk=,tag:4BE55c8x66/UxyTCpCmdUg==,type:str]
|
||||||
sops:
|
sops:
|
||||||
kms: []
|
|
||||||
gcp_kms: []
|
|
||||||
azure_kv: []
|
|
||||||
hc_vault: []
|
|
||||||
age:
|
age:
|
||||||
- recipient: age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
|
- recipient: age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
|
||||||
enc: |
|
enc: |
|
||||||
@@ -23,8 +22,8 @@ sops:
|
|||||||
NjJ5cFdTVS9NZmVWMjcrcHo2WDZEZDgKiDwkuUn90cDmidwYGZBb5qp+4R1HafV0
|
NjJ5cFdTVS9NZmVWMjcrcHo2WDZEZDgKiDwkuUn90cDmidwYGZBb5qp+4R1HafV0
|
||||||
vMQfjT9GrwB5K/O1GumOmvbzLNhvO2vRZJhfVHzyHLzQK64abQgF5Q==
|
vMQfjT9GrwB5K/O1GumOmvbzLNhvO2vRZJhfVHzyHLzQK64abQgF5Q==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-01-19T22:46:09Z"
|
lastmodified: "2026-02-20T19:26:21Z"
|
||||||
mac: ENC[AES256_GCM,data:eU3SIqAGrgbO2tz4zH1tgYcif7oe5j+/wmdYl2xXXI+D6IhiKrTJGvzE3rd3ElEpb+Bg0UQId952U2Ut0yPTfxGLtdlbJA66CmhLAksByoJ8lOXUcp/qDyA4yMRSuwYG2v7uF2crvue9fyRfZ7hl7abE/Q7Z2UjOKqhSZC5cO3U=,iv:NmCVvtBWZRzhpr5nMLy+98VuQZWoUms7xFSxq8PMvBA=,tag:UWjA7oqoNWh4wb0myNg7FA==,type:str]
|
mac: ENC[AES256_GCM,data:D8ZOgcDCY+I2rFc6+GSRj53QjnhZP0oz5wPgG2x4dOfVRWYMEgR2pnb/IIF95Dq0XR6ja9PLgw42PfdI1dS7vITb1jW5IExcnkB/Pa/RjB3GFeXPFTV6QCAQcK9cLct6yhB/pPbHdt8qHQt7kddiN162RlMHDyR6BAh4gO0Rf3w=,iv:f1RWrxbqNNUdANDR6V+OFuEYJ2ZLVde+5GTcFmSXYSQ=,tag:IBEdkSEz/w4Rxwb6uSBpTw==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2025-01-19T22:45:26Z"
|
- created_at: "2025-01-19T22:45:26Z"
|
||||||
enc: |-
|
enc: |-
|
||||||
@@ -65,4 +64,4 @@ sops:
|
|||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.9.2
|
version: 3.11.0
|
||||||
|
|||||||
25
machines/fanny/dyndns.nix
Normal file
25
machines/fanny/dyndns.nix
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
{
|
||||||
|
sops.secrets.njalacloud = {};
|
||||||
|
sops.secrets.njalazines = {};
|
||||||
|
systemd.services."dyndns" = {
|
||||||
|
script = ''
|
||||||
|
KEYCLOUD=$(cat /run/secrets/njalacloud)
|
||||||
|
KEYZINES=$(cat /run/secrets/njalazines)
|
||||||
|
${pkgs.curl}/bin/curl --fail --silent --show-error "https://njal.la/update/?h=cloud.malobeo.org&k="$KEYCLOUD"&auto"
|
||||||
|
${pkgs.curl}/bin/curl --fail --silent --show-error "https://njal.la/update/?h=zines.malobeo.org&k="$KEYZINES"&auto"
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = "root";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.timers."dyndns" = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = "100s";
|
||||||
|
OnUnitActiveSec = "10m";
|
||||||
|
Unit = "dyndns.service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
wg_private: ENC[AES256_GCM,data:kFuLzZz9lmtUccQUIYiXvJRf7WBg5iCq1xxCiI76J3TaIBELqgbEmUtPR4g=,iv:0S0uzX4OVxQCKDOl1zB6nDo8152oE7ymBWdVkPkKlro=,tag:gg1n1BsnjNPikMBNB60F5Q==,type:str]
|
wg_private: ENC[AES256_GCM,data:kFuLzZz9lmtUccQUIYiXvJRf7WBg5iCq1xxCiI76J3TaIBELqgbEmUtPR4g=,iv:0S0uzX4OVxQCKDOl1zB6nDo8152oE7ymBWdVkPkKlro=,tag:gg1n1BsnjNPikMBNB60F5Q==,type:str]
|
||||||
shop_cleartext: ENC[AES256_GCM,data:sifpX/R6JCcNKgwN2M4Dbflgnfs5CqB8ez5fULPohuFS6k36BLemWzEk,iv:1lRYausj7V/53sfSO9UnJ2OC/Si94JXgIo81Ld74BE8=,tag:5osQU/67bvFeUGA90BSiIA==,type:str]
|
shop_cleartext: ENC[AES256_GCM,data:sifpX/R6JCcNKgwN2M4Dbflgnfs5CqB8ez5fULPohuFS6k36BLemWzEk,iv:1lRYausj7V/53sfSO9UnJ2OC/Si94JXgIo81Ld74BE8=,tag:5osQU/67bvFeUGA90BSiIA==,type:str]
|
||||||
shop_auth: ENC[AES256_GCM,data:0NDIRjmGwlSFls12sCb5OlgyGTCHpPQIjycEJGhYlZsWKhEYXV2u3g1RHMkF8Ny913jarjf0BgwSq5pBD9rgPL9t8X8=,iv:3jgCv/Gg93Mhdm4eYzwF9QrK14QL2bcC4wwSajCA88o=,tag:h8dhMK46hABv9gYW4johkA==,type:str]
|
shop_auth: ENC[AES256_GCM,data:0NDIRjmGwlSFls12sCb5OlgyGTCHpPQIjycEJGhYlZsWKhEYXV2u3g1RHMkF8Ny913jarjf0BgwSq5pBD9rgPL9t8X8=,iv:3jgCv/Gg93Mhdm4eYzwF9QrK14QL2bcC4wwSajCA88o=,tag:h8dhMK46hABv9gYW4johkA==,type:str]
|
||||||
|
njalacloud: ENC[AES256_GCM,data:sp79Ij1vd9pQZuPUR1phmw==,iv:AWKZoOfBA/n16pWQCfA0dZmH1KajCztnLvYItoZZbgA=,tag:BIUrobBoO96pxUz1sjIYIw==,type:str]
|
||||||
|
njalazines: ENC[AES256_GCM,data:fnObUEnXYvdj9HtkZNzXVA==,iv:0Zj2n2we9w4fj/n7e1ayd9XgFEMAGCHk4QLTu1IlRnQ=,tag:zeOLAB0oE6XbxqdqhdRNxw==,type:str]
|
||||||
|
njala_api_key: ENC[AES256_GCM,data:ohSVzQUvFjia/s9WceqnZCdLyk3N1Lm2BCBmXeBlkWD2dyrohKCnd9GiJ499IORpuYcOXyM=,iv:Uczk8op5mgqe8gefxgU9YuTqOsYvjzHCKvzA7GDsgio=,tag:XA7JRq/LsGkpHcQSO36Whg==,type:str]
|
||||||
sops:
|
sops:
|
||||||
kms: []
|
|
||||||
gcp_kms: []
|
|
||||||
azure_kv: []
|
|
||||||
hc_vault: []
|
|
||||||
age:
|
age:
|
||||||
- recipient: age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk
|
- recipient: age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk
|
||||||
enc: |
|
enc: |
|
||||||
@@ -25,8 +24,8 @@ sops:
|
|||||||
QVZyNWVOMTh3ejBha21Qb2xCRkFERGMKH9nMQUoS5bGcLUx2T1dOmKd9jshttTrP
|
QVZyNWVOMTh3ejBha21Qb2xCRkFERGMKH9nMQUoS5bGcLUx2T1dOmKd9jshttTrP
|
||||||
SKFx7MXcjFRLKS2Ij12V8ftjL3Uod6be5zoMibkxK19KmXY/514Jww==
|
SKFx7MXcjFRLKS2Ij12V8ftjL3Uod6be5zoMibkxK19KmXY/514Jww==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-04-14T10:34:55Z"
|
lastmodified: "2026-02-20T19:25:05Z"
|
||||||
mac: ENC[AES256_GCM,data:vcDXtTi0bpqhHnL6XanJo+6a8f5LAE628HazDVaNO34Ll3eRyhi95eYGXQDDkVk2WUn9NJ5oCMPltnU82bpLtskzTfQDuXHaPZJq5gtOuMH/bAKrY0dfShrdyx71LkA4AFlcI1P5hchpbyY1FK3iqe4D0miBv+Q8lCMgQMVrfxI=,iv:1lMzH899K0CnEtm16nyq8FL/aCkSYJVoj7HSKCyUnPg=,tag:mEbkmFNg5VZtSKqq80NrCw==,type:str]
|
mac: ENC[AES256_GCM,data:g+bFYqJN1X8F52tpIO60S2WKxLG27ZrP399fsfE6o7rPtIMimZou/4oUo7i+kpNtygEuCr3+suP8TPas4x5zMXhRjnjJuwJwL/NwdciHZU0O3rPJgucCEWqr9OdAtxezDM9c2vv+jzqZxWT9t0fIpB9RxO5oy1pHZs0RCgjAJR4=,iv:v6RdTMeQUxSdjIVNFbx2HtxCsdVgFTQTzMXS5Fj62is=,tag:pLoZMBRIXYElO5rY+xX9zg==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2025-02-11T18:32:49Z"
|
- created_at: "2025-02-11T18:32:49Z"
|
||||||
enc: |-
|
enc: |-
|
||||||
@@ -67,4 +66,4 @@ sops:
|
|||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.9.4
|
version: 3.11.0
|
||||||
|
|||||||
@@ -1,90 +1,112 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
createMaloNet = hostId: mac: {
|
||||||
|
local = true;
|
||||||
|
hostId = hostId;
|
||||||
|
address = "192.168.1.${hostId}";
|
||||||
|
gateway = "192.168.1.1";
|
||||||
|
nameservers = [ "192.168.1.1" "1.1.1.1" ]; #setting ns1 as nameserver
|
||||||
|
mac = mac;
|
||||||
|
};
|
||||||
|
|
||||||
|
createOffsiteNet = hostId: mac: {
|
||||||
|
local = false;
|
||||||
|
hostId = hostId;
|
||||||
|
address = "10.0.0.${hostId}";
|
||||||
|
gateway = "10.0.0.1";
|
||||||
|
nameservers = [ "1.1.1.1" ];
|
||||||
|
mac = mac;
|
||||||
|
};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
|
#TODO: fix local 192.168.1.0/24 addresses they are just palceholders!
|
||||||
malobeo = {
|
malobeo = {
|
||||||
hosts = {
|
hosts = {
|
||||||
louise = {
|
louise = {
|
||||||
type = "host";
|
type = "host";
|
||||||
|
network = {
|
||||||
|
local = true;
|
||||||
|
hostId = "11";
|
||||||
|
address = "192.168.1.101";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
bakunin = {
|
bakunin = {
|
||||||
type = "host";
|
type = "host";
|
||||||
|
network = {
|
||||||
|
local = true;
|
||||||
|
hostId = "12";
|
||||||
|
address = "192.168.1.102";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
fanny = {
|
fanny = {
|
||||||
type = "host";
|
type = "host";
|
||||||
|
network = {
|
||||||
|
local = true;
|
||||||
|
hostId = "13";
|
||||||
|
address = "192.168.1.103";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
lucia = {
|
lucia = {
|
||||||
type = "rpi";
|
type = "rpi";
|
||||||
|
network = {
|
||||||
|
local = true;
|
||||||
|
hostId = "15";
|
||||||
|
address = "192.168.1.105";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
durruti = {
|
durruti = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "5" "52:DA:0D:F9:EF:F9";
|
||||||
address = "10.0.0.5";
|
|
||||||
mac = "52:DA:0D:F9:EF:F9";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
vpn = {
|
vpn = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createOffsiteNet "10" "52:DA:0D:F9:EF:E6";
|
||||||
address = "10.0.0.10";
|
|
||||||
mac = "D0:E5:CA:F0:D7:E6";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
infradocs = {
|
infradocs = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "11" "52:DA:0D:F9:EF:E7";
|
||||||
address = "10.0.0.11";
|
|
||||||
mac = "D0:E5:CA:F0:D7:E7";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uptimekuma = {
|
uptimekuma = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createOffsiteNet "12" "52:DA:0D:F9:EF:E8";
|
||||||
address = "10.0.0.12";
|
|
||||||
mac = "D0:E5:CA:F0:D7:E8";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nextcloud = {
|
nextcloud = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "13" "52:DA:0D:F9:EF:E9";
|
||||||
address = "10.0.0.13";
|
|
||||||
mac = "D0:E5:CA:F0:D7:E9";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
overwatch = {
|
overwatch = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "14" "52:DA:0D:F9:EF:E0";
|
||||||
address = "10.0.0.14";
|
|
||||||
mac = "D0:E5:CA:F0:D7:E0";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
zineshop = {
|
zineshop = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "15" "52:DA:0D:F9:EF:F1";
|
||||||
address = "10.0.0.15";
|
|
||||||
mac = "D0:E5:CA:F0:D7:F1";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
vaultwarden = {
|
vaultwarden = {
|
||||||
type = "microvm";
|
type = "microvm";
|
||||||
network = {
|
network = createMaloNet "16" "D0:E5:CA:F0:D7:F2";
|
||||||
address = "10.0.0.16";
|
|
||||||
mac = "D0:E5:CA:F0:D7:F2";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
testvm = {
|
ns1 = {
|
||||||
type = "host";
|
type = "microvm";
|
||||||
|
network = createMaloNet "17" "52:DA:0D:F9:EF:F3";
|
||||||
|
};
|
||||||
|
|
||||||
|
pretalx = {
|
||||||
|
type = "microvm";
|
||||||
|
network = createMaloNet "18" "52:DA:0D:F9:EF:F4";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ with lib;
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = true;
|
logNginx = true;
|
||||||
lokiHost = "10.0.0.14";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
mpv
|
mpv
|
||||||
vlc
|
vlc
|
||||||
simple-scan
|
simple-scan
|
||||||
|
bitwarden-desktop
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ rec {
|
|||||||
];
|
];
|
||||||
defaultModules = baseModules;
|
defaultModules = baseModules;
|
||||||
|
|
||||||
makeMicroVM = hostName: ipv4Addr: macAddr: modules: [
|
makeMicroVM = hostName: network: modules: [
|
||||||
{
|
{
|
||||||
microvm = {
|
microvm = {
|
||||||
hypervisor = "cloud-hypervisor";
|
hypervisor = "cloud-hypervisor";
|
||||||
@@ -83,7 +83,7 @@ rec {
|
|||||||
{
|
{
|
||||||
type = "tap";
|
type = "tap";
|
||||||
id = "vm-${hostName}";
|
id = "vm-${hostName}";
|
||||||
mac = "${macAddr}";
|
mac = "${network.mac}";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -93,9 +93,9 @@ rec {
|
|||||||
systemd.network.networks."20-lan" = {
|
systemd.network.networks."20-lan" = {
|
||||||
matchConfig.Type = "ether";
|
matchConfig.Type = "ether";
|
||||||
networkConfig = {
|
networkConfig = {
|
||||||
Address = [ "${ipv4Addr}/24" ];
|
Address = [ "${network.address}/24" ];
|
||||||
Gateway = "10.0.0.1";
|
Gateway = "${network.gateway}";
|
||||||
DNS = ["1.1.1.1"];
|
DNS = network.nameservers;
|
||||||
DHCP = "no";
|
DHCP = "no";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -165,6 +165,16 @@ rec {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.network.networks."20-lan" = pkgs.lib.mkForce {
|
||||||
|
matchConfig.Type = "ether";
|
||||||
|
networkConfig = {
|
||||||
|
Address = [ "10.0.0.${hosts.malobeo.hosts.${hostname}.network.hostId}/24" ];
|
||||||
|
Gateway = "10.0.0.1";
|
||||||
|
DNS = [ "1.1.1.1" ];
|
||||||
|
DHCP = "no";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
boot.isContainer = pkgs.lib.mkForce false;
|
boot.isContainer = pkgs.lib.mkForce false;
|
||||||
services.timesyncd.enable = false;
|
services.timesyncd.enable = false;
|
||||||
users.users.root.password = "";
|
users.users.root.password = "";
|
||||||
@@ -210,8 +220,7 @@ rec {
|
|||||||
specialArgs.self = self;
|
specialArgs.self = self;
|
||||||
config = {
|
config = {
|
||||||
imports = (makeMicroVM "${name}"
|
imports = (makeMicroVM "${name}"
|
||||||
"${hosts.malobeo.hosts.${name}.network.address}"
|
hosts.malobeo.hosts.${name}.network [
|
||||||
"${hosts.malobeo.hosts.${name}.network.mac}" [
|
|
||||||
../${name}/configuration.nix
|
../${name}/configuration.nix
|
||||||
(vmMicroVMOverwrites name {
|
(vmMicroVMOverwrites name {
|
||||||
withNetworking = true;
|
withNetworking = true;
|
||||||
@@ -250,7 +259,7 @@ rec {
|
|||||||
modules = (if (settings.type != "microvm") then
|
modules = (if (settings.type != "microvm") then
|
||||||
defaultModules ++ [ ../${host}/configuration.nix ]
|
defaultModules ++ [ ../${host}/configuration.nix ]
|
||||||
else
|
else
|
||||||
makeMicroVM "${host}" "${settings.network.address}" "${settings.network.mac}" [
|
makeMicroVM "${host}" settings.network [
|
||||||
inputs.microvm.nixosModules.microvm
|
inputs.microvm.nixosModules.microvm
|
||||||
../${host}/configuration.nix
|
../${host}/configuration.nix
|
||||||
]);
|
]);
|
||||||
|
|||||||
78
machines/modules/malobeo/gitea_translator.nix
Normal file
78
machines/modules/malobeo/gitea_translator.nix
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{ config, self, lib, inputs, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.malobeo.gitea-translator;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
services.malobeo.gitea-translator = {
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = lib.mdDoc "Start a webserver for hydra to use the gitea pull request api.";
|
||||||
|
};
|
||||||
|
|
||||||
|
baseurl = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "git.dynamicdiscord.de";
|
||||||
|
description = lib.mdDoc "Base URL of the Gitea instance.";
|
||||||
|
};
|
||||||
|
|
||||||
|
owner = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "malobeo";
|
||||||
|
description = lib.mdDoc "Repository owner on the Gitea instance.";
|
||||||
|
};
|
||||||
|
|
||||||
|
repo = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "infrastructure";
|
||||||
|
description = lib.mdDoc "Repository name on the Gitea instance.";
|
||||||
|
};
|
||||||
|
|
||||||
|
host = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "127.0.0.1";
|
||||||
|
description = lib.mdDoc "Address the server binds to.";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 27364;
|
||||||
|
description = lib.mdDoc "Port the server listens on.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.gitea-translator = {
|
||||||
|
description = "Gitea Pull Request Translator for Hydra";
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
wants = [ "network-online.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = ''
|
||||||
|
${pkgs.python3}/bin/python3 ${inputs.self + /scripts/gitea_hydra_server.py} \
|
||||||
|
--baseurl ${cfg.baseurl} \
|
||||||
|
--owner ${cfg.owner} \
|
||||||
|
--repo ${cfg.repo} \
|
||||||
|
--host ${cfg.host} \
|
||||||
|
--port ${toString cfg.port}
|
||||||
|
'';
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 5;
|
||||||
|
|
||||||
|
# Hardening because why not
|
||||||
|
DynamicUser = true;
|
||||||
|
NoNewPrivileges = true;
|
||||||
|
ProtectSystem = "strict";
|
||||||
|
ProtectHome = true;
|
||||||
|
PrivateTmp = true;
|
||||||
|
PrivateDevices = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.malobeo.metrics;
|
cfg = config.malobeo.metrics;
|
||||||
|
hosts = import ../../hosts.nix {};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.malobeo.metrics = {
|
options.malobeo.metrics = {
|
||||||
@@ -21,7 +22,7 @@ in
|
|||||||
};
|
};
|
||||||
lokiHost = lib.mkOption {
|
lokiHost = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "10.0.0.14";
|
default = hosts.malobeo.hosts.overwatch.network.address;
|
||||||
description = "Address of loki host";
|
description = "Address of loki host";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,6 +14,32 @@ in
|
|||||||
description = lib.mdDoc "Setup bridge device for microvms.";
|
description = lib.mdDoc "Setup bridge device for microvms.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testHost = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = lib.mdDoc "Enable when the host is used for development and testing using run-vm";
|
||||||
|
};
|
||||||
|
|
||||||
|
interface = mkOption {
|
||||||
|
default = "eno1";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
gateway = mkOption {
|
||||||
|
default = "10.0.0.1";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
address = mkOption {
|
||||||
|
default = "10.0.0.1/24";
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
dns = mkOption {
|
||||||
|
default = [ "1.1.1.1" ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
};
|
||||||
|
|
||||||
enableHostBridgeUnstable = mkOption {
|
enableHostBridgeUnstable = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
@@ -47,14 +73,31 @@ in
|
|||||||
|
|
||||||
systemd.network = mkIf (cfg.enableHostBridge || cfg.enableHostBridgeUnstable) {
|
systemd.network = mkIf (cfg.enableHostBridge || cfg.enableHostBridgeUnstable) {
|
||||||
enable = true;
|
enable = true;
|
||||||
# create a bride device that all the microvms will be connected to
|
networks."10-lan" = {
|
||||||
netdevs."10-microvm".netdevConfig = {
|
matchConfig.Name = ["vm-*"] ++ (if !cfg.testHost then [ "${cfg.interface}" ] else [ ]);
|
||||||
Kind = "bridge";
|
networkConfig = {
|
||||||
Name = "microvm";
|
Bridge = "malobeo0";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networks."10-microvm" = {
|
netdevs."malobeo0" = {
|
||||||
matchConfig.Name = "microvm";
|
netdevConfig = {
|
||||||
|
Name = "malobeo0";
|
||||||
|
Kind = "bridge";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networks."10-lan-bridge" = if !cfg.testHost then {
|
||||||
|
matchConfig.Name = "malobeo0";
|
||||||
|
networkConfig = {
|
||||||
|
Address = [ "${cfg.address}" ];
|
||||||
|
Gateway = "${cfg.gateway}";
|
||||||
|
DNS = cfg.dns;
|
||||||
|
IPv6AcceptRA = true;
|
||||||
|
};
|
||||||
|
linkConfig.RequiredForOnline = "routable";
|
||||||
|
} else {
|
||||||
|
matchConfig.Name = "malobeo0";
|
||||||
networkConfig = {
|
networkConfig = {
|
||||||
DHCPServer = true;
|
DHCPServer = true;
|
||||||
IPv6SendRA = true;
|
IPv6SendRA = true;
|
||||||
@@ -65,12 +108,6 @@ in
|
|||||||
{ Address = "10.0.0.1/24"; }
|
{ Address = "10.0.0.1/24"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# connect the vms to the bridge
|
|
||||||
networks."11-microvm" = {
|
|
||||||
matchConfig.Name = "vm-*";
|
|
||||||
networkConfig.Bridge = "microvm";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
microvm.vms =
|
microvm.vms =
|
||||||
@@ -81,7 +118,7 @@ in
|
|||||||
# under nixosConfigurations
|
# under nixosConfigurations
|
||||||
flake = inputs.malobeo;
|
flake = inputs.malobeo;
|
||||||
# Specify from where to let `microvm -u` update later on
|
# Specify from where to let `microvm -u` update later on
|
||||||
updateFlake = "git+https://git.dynamicdiscord.de/kalipso/infrastructure";
|
updateFlake = "git+https://git.dynamicdiscord.de/malobeo/infrastructure";
|
||||||
}; };
|
}; };
|
||||||
in
|
in
|
||||||
builtins.listToAttrs (map mapperFunc cfg.deployHosts);
|
builtins.listToAttrs (map mapperFunc cfg.deployHosts);
|
||||||
|
|||||||
41
machines/modules/malobeo/zones.nix
Normal file
41
machines/modules/malobeo/zones.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{ inputs }:
|
||||||
|
|
||||||
|
let
|
||||||
|
vpnNS = "vpn";
|
||||||
|
localNS = "hq";
|
||||||
|
peers = import ./peers.nix;
|
||||||
|
hosts = ((import ../../hosts.nix ) {}).malobeo.hosts;
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
SOA = {
|
||||||
|
nameServer = "ns1";
|
||||||
|
adminEmail = "admin@malobeo.org";
|
||||||
|
serial = 2019030801;
|
||||||
|
};
|
||||||
|
useOrigin = false;
|
||||||
|
|
||||||
|
NS = [
|
||||||
|
"ns1.malobeo.org."
|
||||||
|
];
|
||||||
|
|
||||||
|
subdomains = {
|
||||||
|
ns1 = {
|
||||||
|
A = [ hosts.ns1.network.address ];
|
||||||
|
};
|
||||||
|
|
||||||
|
${localNS} = {
|
||||||
|
A = [ hosts.fanny.network.address ];
|
||||||
|
subdomains = builtins.mapAttrs (name: value: if value.network.local == true then {
|
||||||
|
A = [ value.network.address ];
|
||||||
|
} else {}) hosts;
|
||||||
|
};
|
||||||
|
|
||||||
|
${vpnNS} = {
|
||||||
|
A = [ peers.vpn.address ];
|
||||||
|
subdomains = builtins.mapAttrs (name: value: if value.role != "server" then {
|
||||||
|
A = [ value.address ];
|
||||||
|
} else {}) peers;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
hosts = import ../hosts.nix {};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
sops.defaultSopsFile = ./secrets.yaml;
|
sops.defaultSopsFile = ./secrets.yaml;
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
@@ -28,7 +31,6 @@ with lib;
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = true;
|
logNginx = true;
|
||||||
lokiHost = "10.0.0.14";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.postgresqlBackup = {
|
services.postgresqlBackup = {
|
||||||
@@ -59,8 +61,8 @@ with lib;
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
trusted_domains = ["10.0.0.13"];
|
trusted_domains = [ "cloud.malobeo.org" "cloud.hq.malobeo.org" ];
|
||||||
trusted_proxies = [ "10.0.0.1" ];
|
trusted_proxies = [ hosts.malobeo.hosts.fanny.network.address ];
|
||||||
"maintenance_window_start" = "1";
|
"maintenance_window_start" = "1";
|
||||||
"default_phone_region" = "DE";
|
"default_phone_region" = "DE";
|
||||||
};
|
};
|
||||||
|
|||||||
52
machines/ns1/configuration.nix
Normal file
52
machines/ns1/configuration.nix
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{ config, self, lib, inputs, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
with inputs;
|
||||||
|
|
||||||
|
let
|
||||||
|
dns = inputs.dns;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
hostName = mkDefault "ns1";
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
../modules/malobeo_user.nix
|
||||||
|
../modules/sshd.nix
|
||||||
|
../modules/minimal_tools.nix
|
||||||
|
../modules/autoupdate.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
enable = true;
|
||||||
|
allowedTCPPorts = [ 53 ];
|
||||||
|
allowedUDPPorts = [ 53 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.bind = {
|
||||||
|
enable = true;
|
||||||
|
forwarders = [
|
||||||
|
"1.1.1.1"
|
||||||
|
"1.0.0.1"
|
||||||
|
];
|
||||||
|
|
||||||
|
cacheNetworks = [
|
||||||
|
"127.0.0.0/24"
|
||||||
|
"10.0.0.0/24"
|
||||||
|
"192.168.1.0/24"
|
||||||
|
"10.100.0.0/24"
|
||||||
|
];
|
||||||
|
|
||||||
|
zones = {
|
||||||
|
"malobeo.org" = {
|
||||||
|
master = true;
|
||||||
|
file = pkgs.writeText "zone-malobeo.org" (dns.lib.toString "malobeo.org" (import ../modules/malobeo/zones.nix { inherit inputs; }));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
hosts = import ../hosts.nix {};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
sops.defaultSopsFile = ./secrets.yaml;
|
sops.defaultSopsFile = ./secrets.yaml;
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
@@ -29,7 +32,6 @@ with lib;
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = false;
|
logNginx = false;
|
||||||
lokiHost = "10.0.0.14";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.grafana = {
|
services.grafana = {
|
||||||
@@ -121,31 +123,43 @@ with lib;
|
|||||||
{
|
{
|
||||||
job_name = "durruti";
|
job_name = "durruti";
|
||||||
static_configs = [{
|
static_configs = [{
|
||||||
targets = [ "10.0.0.5:9002" ];
|
targets = [ "${hosts.malobeo.hosts.durruti.network.address}:9002" ];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
job_name = "infradocs";
|
job_name = "infradocs";
|
||||||
static_configs = [{
|
static_configs = [{
|
||||||
targets = [ "10.0.0.11:9002" ];
|
targets = [ "${hosts.malobeo.hosts.infradocs.network.address}:9002" ];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
job_name = "nextcloud";
|
job_name = "nextcloud";
|
||||||
static_configs = [{
|
static_configs = [{
|
||||||
targets = [ "10.0.0.13:9002" ];
|
targets = [ "${hosts.malobeo.hosts.nextcloud.network.address}:9002" ];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
job_name = "zineshop";
|
job_name = "zineshop";
|
||||||
static_configs = [{
|
static_configs = [{
|
||||||
targets = [ "10.0.0.15:9002" ];
|
targets = [ "${hosts.malobeo.hosts.zineshop.network.address}:9002" ];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
job_name = "vaultwarden";
|
||||||
|
static_configs = [{
|
||||||
|
targets = [ "${hosts.malobeo.hosts.vaultwarden.network.address}:9002" ];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
job_name = "pretalx";
|
||||||
|
static_configs = [{
|
||||||
|
targets = [ "${hosts.malobeo.hosts.pretalx.network.address}:9002" ];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
job_name = "fanny";
|
job_name = "fanny";
|
||||||
static_configs = [{
|
static_configs = [{
|
||||||
targets = [ "10.0.0.1:9002" ];
|
targets = [ "${hosts.malobeo.hosts.fanny.network.address}:9002" ];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
# add vpn - check how to reach it first. most probably 10.100.0.1
|
# add vpn - check how to reach it first. most probably 10.100.0.1
|
||||||
|
|||||||
@@ -23750,8 +23750,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "10.0.0.13:9002",
|
"text": "192.168.1.13:9002",
|
||||||
"value": "10.0.0.13:9002"
|
"value": "192.168.1.13:9002"
|
||||||
},
|
},
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ positions:
|
|||||||
filename: /tmp/positions.yaml
|
filename: /tmp/positions.yaml
|
||||||
|
|
||||||
clients:
|
clients:
|
||||||
- url: http://10.0.0.13:3100/loki/api/v1/push
|
- url: http://192.168.1.13:3100/loki/api/v1/push
|
||||||
|
|
||||||
|
|
||||||
scrape_configs:
|
scrape_configs:
|
||||||
|
|||||||
99
machines/pretalx/configuration.nix
Normal file
99
machines/pretalx/configuration.nix
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{ config, self, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
hosts = import ../hosts.nix {};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
sops.defaultSopsFile = ./secrets.yaml;
|
||||||
|
sops.secrets = {
|
||||||
|
pretalx_smtp = {
|
||||||
|
owner = "pretalx";
|
||||||
|
group = "pretalx";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = mkDefault "pretalx";
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
self.nixosModules.malobeo.metrics
|
||||||
|
self.nixosModules.malobeo.users
|
||||||
|
../modules/sshd.nix
|
||||||
|
../modules/minimal_tools.nix
|
||||||
|
../modules/autoupdate.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
malobeo.metrics = {
|
||||||
|
enable = true;
|
||||||
|
enablePromtail = true;
|
||||||
|
logNginx = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
malobeo.users = {
|
||||||
|
admin = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
services.postgresqlBackup = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
commonHttpConfig = /* nginx */ ''
|
||||||
|
proxy_headers_hash_bucket_size 64;
|
||||||
|
'';
|
||||||
|
virtualHosts = {
|
||||||
|
"events.malobeo.org" = {
|
||||||
|
forceSSL = false;
|
||||||
|
enableACME = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
services.pretalx = {
|
||||||
|
enable = true;
|
||||||
|
celery.extraArgs = [
|
||||||
|
"--concurrency=${toString config.microvm.vcpu}"
|
||||||
|
];
|
||||||
|
gunicorn.extraArgs = [
|
||||||
|
# https://docs.pretalx.org/administrator/installation/#step-6-starting-pretalx-as-a-service
|
||||||
|
"--log-level=info"
|
||||||
|
"--max-requests-jitter=50"
|
||||||
|
"--max-requests=1200"
|
||||||
|
"--workers=${toString config.microvm.vcpu}"
|
||||||
|
|
||||||
|
# TODO: 25.11 upstream
|
||||||
|
"--name=pretalx"
|
||||||
|
"--preload"
|
||||||
|
];
|
||||||
|
nginx.domain = "events.malobeo.org";
|
||||||
|
environmentFiles = [
|
||||||
|
config.sops.secrets.pretalx_smtp.path
|
||||||
|
];
|
||||||
|
settings = {
|
||||||
|
locale = {
|
||||||
|
language_code = "de";
|
||||||
|
};
|
||||||
|
mail = {
|
||||||
|
from = "malobot@systemli.org";
|
||||||
|
user = "malobot@systemli.org";
|
||||||
|
host = "mail.systemli.org";
|
||||||
|
port = "465";
|
||||||
|
ssl = true;
|
||||||
|
tls = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
|
|
||||||
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
}
|
||||||
|
|
||||||
64
machines/pretalx/dummy.yaml
Normal file
64
machines/pretalx/dummy.yaml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
pretalx_smtp: ENC[AES256_GCM,data:zYnhuulpJAEEacXxpqNG2GEVrV21H0UZfx3sqZaZxWYL2HW6WwFMZ2PeGL8bWCv92+iZ2DGkhg==,iv:kMJLfeQ+9ZZFc6T+HnS64p9BJUy38nXrakAOXdQ0gIU=,tag:l8/eSrcOtt9MLnqcif5v2A==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNZXExRE14NDF6cnFRSE9G
|
||||||
|
RjdxV09UMXUvczBQai9GQW5PT2g0eUZhSUVvClRZL1dJVlpKUTArTkhhR2JCV1VG
|
||||||
|
cktFb21wNDZiZC9oc2l5VS9hdzVhbFUKLS0tIGZZa2Z2R0Nvd3RUbWRHMkFJMjVK
|
||||||
|
QXdRdkVwSFg2TVRBYU1qWFJ2bE9hWFUK8HuJ9ErFU0yH3QlXl1tnmawNX0fHDOFb
|
||||||
|
g+DpDYKccGcC6PxNOE/CsftJqGLtFlToYHOYWG18bFjNZawUoaOfLQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1ljpdczmg5ctqyeezn739hv589fwhssjjnuqf7276fqun6kc62v3qmhkd0c
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3S0s4UlZuSWc3K3cvTDBR
|
||||||
|
WEt2L3hYSGRVWHBYbEtoci9rYkJEK1hYSkRZCkM5S25YNGM2Y3R0MG9lWUNJem9P
|
||||||
|
bnJXbTRFZUpUVmhWVVVqeVhjdDV2SWMKLS0tIEdXbXU0RkJ6ZzBTcTdiZlJPbG83
|
||||||
|
RW8zUzBkNjViYnVFY3MyM1ZENmZXVmcK4144dF921EuNaofNhaYw9Yh56KHdfQD/
|
||||||
|
vxPkp5jC02Wbb6hjImd+oMUg3jgCbWC4j3Qpvaky8Ig2AaJRhtqlxg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2026-03-09T11:58:41Z"
|
||||||
|
mac: ENC[AES256_GCM,data:n11H0rFtXvCeleTKXnQ8tORm3YH11tvjRd/PYSRof8EIUpQ7ZtyVqdYqPZCUuck12LG8hh9+GBBpXIRDhwEJlteC61Vl0syW9bQvCbfETvIgRZsoIZr+mofYHe1twm73sd7YaGzC6xxVm5HZG/qS1LflHah6jFO6NkgQ0GpLPTE=,iv:np3bKJIbVwn96rMBeedLmw6f1him35waUWN6LJ5MLNk=,tag:fs8rmrSkK1REaUKJHxeSbw==,type:str]
|
||||||
|
pgp:
|
||||||
|
- created_at: "2026-03-09T11:58:34Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQGMA5HdvEwzh/H7AQv/VMIZlsBZPEolTd0yUfHyZ5PRsQDirt4hOuVFGXdKi8tb
|
||||||
|
Pk+L3y69ynfF+ZJsu41+GdVgaNX58bbdqJfnEgE+k35IrJxYmVlNuUmd5s79rOHQ
|
||||||
|
b1dn6SdoVrKTAgtrnicO0n0F41XZBSpqP4wKVHigsWgfHkaUUsI+5d/T/2F+VCcS
|
||||||
|
slhvveCMKNjDlK9sukp5TBiX+xrWTq4QIbMS7L6VSlwHod72bp73o7RV9PgoO4vy
|
||||||
|
aodYiPmJqDjF0Az7JXdu2UdWJGUYxNWb5jHCT3qpcZyX1kVSmZvcRjxtVVCySFx+
|
||||||
|
agcavtdlEV3t8JOOvVmYoxwNOGjDvJ83k6wdueFpoJFE4Z1pHy/XCVCHykmWH/+m
|
||||||
|
nYADzmg+GiOSrTR2xWEmkesrByOMucYiZngDV3RLuZraE+8PJbqX2aAAip1Ol6AX
|
||||||
|
eYGCtLw/cXvDM1ngdj/4vaelek/TMLRRmuDyzVHevnqMGhdgAp4Ns6+ihZajSYkK
|
||||||
|
4YqUSKOMHrfEwbZgGYGW0lgB4cv1uzPgyufcPWzg8oAS0/2jW6KjZPLIx4SYcp41
|
||||||
|
C3BE/osbnyzGhzmabNstFbVmBYF1iK73O/Np2PGj3glBsE7PNMmcDu4ASaEI1nNw
|
||||||
|
CpOmQCR9jRGi
|
||||||
|
=6itD
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: c4639370c41133a738f643a591ddbc4c3387f1fb
|
||||||
|
- created_at: "2026-03-09T11:58:34Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMA98TrrsQEbXUAQ//aQNOD855rikMtrXENG/XA5dZeKGaLQAv0kWUHuJbRddn
|
||||||
|
IB9pW+Y8AgyB6xc9A4oKOKgjT8TCSYvGI6zDchf5tjrvQwmiMlpQouflcjR+UgDy
|
||||||
|
mANqL2+7GLFVcTuQfRPbEdK54Q78KciQ2bxMeh0WDZ5vV8fCTz+aPsvlNT8AJBcq
|
||||||
|
BO4dyG1oqCT13ln7g7LoHPn22wAj+H93F8aqyFk6YjgomKRf0j9gAW/NI1w8TIsg
|
||||||
|
etgMBrn0AupANrADQHAij1zSS+GaK8ZMBVgCoInc9gAQl97ytMLp/eQj4Ll69r+z
|
||||||
|
JRhFdFDZgP0UIIFurAU5eFixNq8IZnFYvFRGpR/XzAiOh8JfgWUDs5HSLyRcADi9
|
||||||
|
XxLsEnTFm1kfoI+lpma0WtlAIXg2WpCoaU3B2kB15T4giVs6LWGmssux5t8uKTFR
|
||||||
|
DySHvdl9o78zBFPVxhW+j9h04fAeUmCWZYKpnEdFwKpBmGWtnC5rvz22Xwu3Q/wT
|
||||||
|
HioLzvETqVn+knc/ErR6Axw4A9zeLi1AccJdceVopR7rEq+0DjpLV/zYqwGruQaa
|
||||||
|
q1qtQIgPf888TKtNgAGSxQ2nUfkMM2oK2cC6r2juhxwbmTFcz6FUV41To9/hCo1c
|
||||||
|
1SE4ZiRu7R8i+KFn4K2y6RGRkJo75trJkxuwGvAYuo6gGUmj50EeimFx0rKRddfS
|
||||||
|
WAH8JPQH6ohAqaA1hdrQRM7lPtwjPCfJW/fUqPHAR5Ytwn9xmt0A+jQYvmubH9dR
|
||||||
|
UT8OMUOIh2XC2JDYt4P4pFXXODB6WPb3Fdft6S95+vLhx6eHuo7PvVM=
|
||||||
|
=KkYj
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.11.0
|
||||||
64
machines/pretalx/secrets.yaml
Normal file
64
machines/pretalx/secrets.yaml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
pretalx_smtp: ENC[AES256_GCM,data:Jrgx1/AsgTb1KxtgiTPGRkgtl5EHPWHPde4ItwOHH9lcmakAb1b2n4JP70vF53uuKIfiyCPeVQ==,iv:fcVFgjKSGTaFxC1DAX2Sb6WD/IbJO0s1A63wrQkLWbg=,tag:NjcNwa+6h/boRemEg1j9ng==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1ljpdczmg5ctqyeezn739hv589fwhssjjnuqf7276fqun6kc62v3qmhkd0c
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxb1dGalUyNzVtYjFFNm9T
|
||||||
|
a3ord2NSTEE3UkhrTm1TbHdMV3lITHJRLzJvCnAxeUZib0d0dCtUZ0x3NUtsdzdD
|
||||||
|
SjVYY0Y4MXhGRVZGZTRiNHJHSHNkb0kKLS0tIGtCL0puTDRZcUsrc2VRUU1URERs
|
||||||
|
Y084Z0tGR3JPZkw5ci9icFVSd051bE0KXaT1mPUBFUorZ/zgYjDyqWGbnHAkcjmZ
|
||||||
|
KVZJae9HC35+mq9mme7XOH96NX6tq69Hg+TUFoQg1m2Ifz27GKD3bQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1y04q8n7mgk82c87rfddm0u72h0ny6sfzktjsk0cc3gu93kezudfqdp9v9g
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWVVJyZFZCTVZhUXN0WFJu
|
||||||
|
UWU2UWxTY3ErWHVhMGNGU0t3N0c2ekM5a0NvCkVtTDdyeEVMQzY5RUg1NnVZVHd1
|
||||||
|
a1U4cytPSjU3K0NaSmJDdk5peHM5emMKLS0tIGhTemxzbjBzNkFILy9QRG53V0lX
|
||||||
|
dEZTQVpCOUNDSW0yRS9rYkZkVjZPRG8K/Hea01veMQ0Gxo//24PRhDcncYUuExpQ
|
||||||
|
T4ff4CNXF2vDYDsSIPDlhHdmSRGmoCw00ChCZ8vvIlHl2O86Qmd0Ng==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2026-03-09T11:58:07Z"
|
||||||
|
mac: ENC[AES256_GCM,data:QWFdEg+I1YUH65qPUQvOwwb7i+X+HYKdhYJiLoku+XcvYq4xFaoBvFTW3eZ/S2i20yK1SQcAVjUe7JQEgZDtqzPdZH6w4YIZJVvQdDMPy99xdXXEZrnW+rHOy60XFS7WiyeUdLA3TQ4+Ec1f2kkQw7MhbDbOoOh0obsvfhtz3OE=,iv:h4Qn/LpayhXCWWsO/nm18Rapz6WXQcjItF9YwyiFJJ0=,tag:bxtQQMNgVyFkHp+pbSP3UQ==,type:str]
|
||||||
|
pgp:
|
||||||
|
- created_at: "2026-03-09T11:57:24Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQGMA5HdvEwzh/H7AQwAkahLpq8vqQn6N5EyrbC+33Ohl61ZbBPR6NnQaLvU3s+i
|
||||||
|
WJ3xe7T+LP0jv2C2t//VhYvVNolQ2LBA+yLE3Cvjw6JCyVhu54ZRDJciY2w/wY5J
|
||||||
|
MN++Bqac6avoEYHkvoN6m1/F8JK46fzgQT7xXFTGix+g1W48aSC70GRZUmsg469p
|
||||||
|
ZFYbj/mEseG1ICxhZANU2NgRgW7kA/La/fe3/+YE8tkNHSXF2ZevQvluarm7kXT9
|
||||||
|
KWani1wMlUMwZoCpwbfNwKpXPL0jW48FJsFIlxPbDrDCkR1gih1PHFVyqd45am9g
|
||||||
|
Uo0hJ1NOKzm5Cy5c/3xJzaP62UWyNJf+v5VojEg2XfSGqtaZDFQsLK0of5G/XArn
|
||||||
|
C7k7UbQJqz15rHWPznIppv2h+cTIsVDQcz77es1/qaOQyCMHdYqdkzi5YV7DJBZS
|
||||||
|
K6PP3Nt77uL4LGRL0vFtBgdhKFtXAAf8lhRfZJcJ2P9BYvaFdRUfjm/r0TNfCref
|
||||||
|
k2WCesk4F/pQSyB3ofuR0lYBJzlZ3iNpl7DlfyZ6DRZ/+aVFceRf9A8QKtkVmdMt
|
||||||
|
noqBJfLzhWgVmUUh3DO97mJV5pNOx8238vqVTxWrUqZXjXdXaUDaFUDXvgwg3GOA
|
||||||
|
N28ZjLy1XA==
|
||||||
|
=mIVi
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: c4639370c41133a738f643a591ddbc4c3387f1fb
|
||||||
|
- created_at: "2026-03-09T11:57:24Z"
|
||||||
|
enc: |-
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQIMA98TrrsQEbXUAQ//cnVHHJEwQn+W8Jkt+jwgnKCgbRutvG3U8hlXizzdk2RI
|
||||||
|
j6nVPpv2DwuXvX3ktnng8XrmWwXf9rFRRltVs7alenEnHLxiDd5w+WYeH4NCHOFr
|
||||||
|
+vvFwxNOxzLDj5B2Fjod4El70jUdrP6Mqzy37DPu1Gb2qIUEwdF1LEzM4FMWdeWL
|
||||||
|
BA0wCJzlTXzdlb0shw7xEsqvmnL11u+aQ8AVU3kgWxSkn0VZJIYYkwegUYfflSIr
|
||||||
|
wZsNsh8k+wG58f5IVr8SqnzkfxRfJSoxNKWV9dK3a9hJnnD3DUhqnOgvCnPCRKSP
|
||||||
|
drH+7KxqmNBxqQK3f2iJvgcyLQwyEEqF2Rt6gXwyDByHy3ewupAQD0aQwi5HMWcK
|
||||||
|
iEUVSQVZ6jRfAIyDs3sBnBHceB9BShFr+NN9eUjKJWm2QD4TdQamnpMLsQGpdZv5
|
||||||
|
Lomk9VfdZPNw7DAKJs1oDeBRmhAP/crlOW/ZZho9mewKHr7Htu3VZP812GVupJns
|
||||||
|
IK9mMnpwAhgCtChcOj/ule9NcA/AWKcrtdAyId11SvjtMO+ZjRFrOCK1wKgIif3p
|
||||||
|
ogjaK38v/7gy4/8CDyVgru+luNklsRHfZr+BuPGBDDL8M7umXilK+GyGO1CnrjxW
|
||||||
|
DJXdvMe+u75OsYvGv7eX0tqd+ePanCEoDXxFJbMc2QZigD2kZgq+qRM9CxJ2jCXS
|
||||||
|
VgEEHybyGrOo5RcJkpk+UQpb2aTMLgFNqkTn0PRQSMFeXVQIt584a9xZs1TQ7ZsT
|
||||||
|
5H4jaFXFcS+GG09CORbkf2fkQI2KpaqBAGFct21K2hY17Tpm7kgC
|
||||||
|
=yGms
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.11.0
|
||||||
@@ -18,10 +18,17 @@ with lib;
|
|||||||
imports = [
|
imports = [
|
||||||
../modules/malobeo_user.nix
|
../modules/malobeo_user.nix
|
||||||
../modules/sshd.nix
|
../modules/sshd.nix
|
||||||
|
inputs.self.nixosModules.malobeo.metrics
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||||
|
|
||||||
|
malobeo.metrics = {
|
||||||
|
enable = true;
|
||||||
|
enablePromtail = true;
|
||||||
|
logNginx = true;
|
||||||
|
};
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
virtualHosts."keys.malobeo.org" = {
|
virtualHosts."keys.malobeo.org" = {
|
||||||
@@ -38,7 +45,7 @@ with lib;
|
|||||||
backupDir = "/var/local/vaultwarden/backup";
|
backupDir = "/var/local/vaultwarden/backup";
|
||||||
environmentFile = config.sops.secrets.vaultwarden_env.path;
|
environmentFile = config.sops.secrets.vaultwarden_env.path;
|
||||||
config = {
|
config = {
|
||||||
DOMAIN = "http://keys.malobeo.org";
|
DOMAIN = "https://keys.malobeo.org";
|
||||||
SIGNUPS_ALLOWED = true;
|
SIGNUPS_ALLOWED = true;
|
||||||
#WEBSERVER
|
#WEBSERVER
|
||||||
ROCKET_ADDRESS = "127.0.0.1";
|
ROCKET_ADDRESS = "127.0.0.1";
|
||||||
|
|||||||
@@ -4,51 +4,60 @@ sops:
|
|||||||
- recipient: age1ljpdczmg5ctqyeezn739hv589fwhssjjnuqf7276fqun6kc62v3qmhkd0c
|
- recipient: age1ljpdczmg5ctqyeezn739hv589fwhssjjnuqf7276fqun6kc62v3qmhkd0c
|
||||||
enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYRnd3NGpkWjZVZjYxZ2VP
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsMk9xN1ZLSFc2QWQza3Zp
|
||||||
QUpTMjNwTml3NW8zL2o2c2R0TE53aEtlK0JNCi9jTjhZVXNMZ29oNDIrbFJBenkz
|
R0ladFBENFpXYWdjOE9XZm9Eek91dGxGOGdvCnpVaXU1RTZpVXYrZThGOEdnNytn
|
||||||
UkVBKzBQVUlYREc3bkxRb1R6RE5MaUUKLS0tIDJmdmlidmZCOXU5dDdFRmY2Q2pu
|
Vi95MTJNS09EMU5WMWwvRGlLUUdudEEKLS0tIGtUOWlWSSs0STA5ZkU0RzZpQ1c1
|
||||||
bWhRZS9oamtQYnRZVnI1clVGNytHWlkKb1hYwkqfSiMCVFOWraCiWoAU1Ua/U0Kc
|
bGpVcVJJWk0vMUNoaEJvY3ZLNTRacWcKLkRr+vi2oIPiB1BbSTX71FFKuxysxE0n
|
||||||
2UnXRByOST5hfKkTnpJ0765UATUny0K53H/ieMR0cyQxE3aCbk5AfA==
|
0+0aHEFAj8LX3hyEiDzQA3IkX9GP9ba/x+XUMBdWwyw25MnUMVFKTQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1zs9puemeevc5kt84w9d2mc5396w0t9p60qxymkpatwvwxunzs5usmxr3an
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwS0ZHOXJSUTdlMGIzU0Nh
|
||||||
|
SzJDcHdvb3dmZ3dTWFJkaE9wZXFmVE9ZUkJBCjk4eTRhb3RkTlJRSUVSK2RWbDc0
|
||||||
|
cEtycnFOZlU5ellTSFZXc2ZVZ3lwZU0KLS0tIHpyQ1NCR2dWNURxT0pxcmxMWTlo
|
||||||
|
NGJqai9HNjdkc1NOTGRtSFZWWDIvQkEKe3GqRFTdMQwPbavO6bDobWMf7FwJx1OA
|
||||||
|
7JufIAMJORTfDTyC2fN3bpcZ+UcbPm2pplyzJ6T5p4wOFqQhRrHHyQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2026-02-03T20:58:16Z"
|
lastmodified: "2026-02-03T20:58:16Z"
|
||||||
mac: ENC[AES256_GCM,data:zxM4GRwlcYoJF51Hbe0VfWvO9PrHQeCUTrGgiVgrP91qX51WTGWfCQfAVAouT3sEvE6Ie5bnAMUWjVjIrnRS6WUCQwUBwFYYUKIkJPooKwlvXRAuZ9UGZERi0/i43WKwB3/xSyVqRb9T5M6exjlkYCuE4Yv3lSEUiIn8fu/Zaas=,iv:D6f3V19E+4qukW8i9wKtNPKfYgD3OXztkICMhD24IzY=,tag:e97txZiaqDPxCLQUbNHwwg==,type:str]
|
mac: ENC[AES256_GCM,data:zxM4GRwlcYoJF51Hbe0VfWvO9PrHQeCUTrGgiVgrP91qX51WTGWfCQfAVAouT3sEvE6Ie5bnAMUWjVjIrnRS6WUCQwUBwFYYUKIkJPooKwlvXRAuZ9UGZERi0/i43WKwB3/xSyVqRb9T5M6exjlkYCuE4Yv3lSEUiIn8fu/Zaas=,iv:D6f3V19E+4qukW8i9wKtNPKfYgD3OXztkICMhD24IzY=,tag:e97txZiaqDPxCLQUbNHwwg==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2025-12-18T17:32:21Z"
|
- created_at: "2026-02-05T17:22:42Z"
|
||||||
enc: |-
|
enc: |-
|
||||||
-----BEGIN PGP MESSAGE-----
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
hQGMA5HdvEwzh/H7AQv/X02f2/84Twa9Sgj7husyP8ZOva1gsUnakZRd670K1Vxe
|
hQGMA5HdvEwzh/H7AQv/XLqprcMEI3EYKJw/DA5w64lHAXKzkf8bKpFPWYSnbqMT
|
||||||
Z7eY4THMkP59qtbzCDkop0GulM1WNXd3jocT169WKYA5+myjNl131Ppn/DfAHMCk
|
ajDkcOhA+KMRt1Qgr8aCW7cnWLfy6Ff7U2rSFQ4uBgGKChmYSiMiPdEokYQuYbFE
|
||||||
QqguILH7K8X7zQkDU6Y4LE2sLuxYeoYz7aptdwoZpWZRKJjX6Q0pFrbFLZP54CJD
|
pJh/j4qGcewVpQDVe6N+obqZ0n5oQImn0mO8KkXjrcBhrhuLThAeNxFl7RILOfD0
|
||||||
BXqcRAGHXSmr8lMJVmaQolzyn9B08Vv/D1LTfgI9qA+K+sxjKQopOjvv03NFSM67
|
HPFYwy6vMIVPFYCAm4CqIjsMo4feCPYcpxJJwO4aRISkR8vcGAgu9/wWhQIxvdPf
|
||||||
PbNNqjQpToM2LaFJTfxXrwljRUkt1BN98wxKlFRIKVbb4spezYHFU+zf5XqM8+sg
|
O4gTcRshfX6C+TwnwW6Ac7D1rDS5HBnQF4pD4wfYEI00qHKHgeYC4TrEnmta6MG2
|
||||||
V9mIGw/5lhYPfSB9EN/2mcqabaWFEqmhBRKRHVirXWBrUmvb5+cKTRQ93zM7Lipr
|
bvOQBbAUDSf3heEcQ3CwqcRDHzIssAlbW3p9nBRUVOuOta+3rV29lSuz8cbEqVOs
|
||||||
prz7MK+1DRxB5BgKxOiLTz+q/1JlmwpulxBBSSd8o3nHhpjEyaMBoa30TYuUWAVl
|
MOwN/atluA1jhWgZbt+8SuoleHnbR+hJNJnplvoKN2PmJ3tEbpSCaRaZVaaRFEhm
|
||||||
lW8zCC9H0H8vnqam2OXalu6tu8jvQ6AIquQGOKb3NtWf6pCTQNv0F7t0AWK2zkUL
|
K1tLG2B5IaKMY4n0N1bPnFcvL7s1xS0INPodXzJITyvuJssEL5Dc+YEWxNvEmHGJ
|
||||||
WjrkEiG3lv3vGJeVGq9U0lgBj8HtXnnHsDMJkhPGClQeJcWiv7Tj8f79+Mni8QhM
|
ttlyHBJCxWOHsPMh2UcB0lgBBtJt+O2lcAIpwky9T2ufj1EFzLkXV4Sf39S6J/PI
|
||||||
dVWXVesg+dsUazptP35n2S2XlLY8Jk3tyD1KTLrt5R/MMGhAZOmgPS4I4q+zrZSj
|
814IQE1Bmuy1qqkGhc6WthiooVf/udtWgehwQFwrpY+35GaNQHluFJOrthqraYXK
|
||||||
S0Dj9iTJcJ/F
|
shMbX3AZdLuu
|
||||||
=YEYS
|
=w602
|
||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
fp: c4639370c41133a738f643a591ddbc4c3387f1fb
|
fp: c4639370c41133a738f643a591ddbc4c3387f1fb
|
||||||
- created_at: "2025-12-18T17:32:21Z"
|
- created_at: "2026-02-05T17:22:42Z"
|
||||||
enc: |-
|
enc: |-
|
||||||
-----BEGIN PGP MESSAGE-----
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
hQIMA98TrrsQEbXUAQ/+LMZHO0oxmlivnL1qKaDz5JKAL718pHmjshxc53gUo4aN
|
hQIMA98TrrsQEbXUARAAiZsUiicVpIDdSF/XSuZOITPwmL0P1Nyc1LI9QpyQw2fj
|
||||||
x9WC4USniK8IMV4MTZUxti/ekJ5Bxd+myMMIORHE4R1q1FNO1tWx9n8PXAVhIrDx
|
uaoJV3xO+MW4ovDcJRms/6T5b4IG740s19l/iryd2jhPwn+94EkzhR1cRydvCimU
|
||||||
XF/2NZKzUzCHd3OE3GvS+LSTITLnJdtSuAOPA9MjOeC2TU52r3CkNxUfYMjLYIuk
|
Zexf+y793kKe0TbcNvakAnpArI5RPdAIoPB7V2aa0vweABaxE5XoDedJA646wMbl
|
||||||
soZi8HfTWVfXKyEq300CLdEqoiaN6lqaxY+e0LoiQjPTpZSs0KhpcjvvmKBpZI0x
|
+pgzVxoE7i6+uxWHGw3MitCneiBcljg9g04FVj9doJfG6LQxfpx01pjiRLVsTGfV
|
||||||
temAZ+VbEU93DuCVxsXQAQria5GUYs66237goctBjto6G0uOyzJ3lOE17ThDkL8J
|
LXPLKVJOToEusFz1hLaFMLxPkvFbgQD1YQz82OOJasHr9YGCzitqhA+EV4U4Y9AH
|
||||||
PpbmoR+CkT++lJnSeeRuhF5FYaVWPl0LDGVLAQrkeblGUjhLtzSrN/ZNyjhGaYdk
|
bzPlz1qractUIz8pawhKcTUd8Xw+WOZ6kFX3EdUUnD46jMf12j2fe9Axw8v+Cujx
|
||||||
zlUOFUNVlaok1fcC+8PNsfcna7keLW+N4YPTeZQljjH1uWvdzIZaJto1TaDYrSyu
|
jb8+mSbRNH8Tx/phbhWyBhTNhNXoMLW/2nTSJjTUvdjNlIJi3Ntu4AyPpZ9Z2LwM
|
||||||
EVF4J0FDThMCu7fyf0TrbqE8n7xs/1F7BBfhUC0wWztX4sNo9mNBZK1d96ihFlzB
|
azvzHRC20gEsf25YKAv2/EnOAi7/jx9uknj3pATdaAAS5hKcMutVdiBAPS37695W
|
||||||
FRBjrAKCGSD4eZcwaJZB/4NoipFDUh9kmQemmSalDNaHjvdXsT4euY4JNqwKw2iK
|
Fh8aaoCb4ieuHmHFAt0SQ30z/oR2psurwaurGcLQz9IR9uUlCFU9uVifDaSCNiwF
|
||||||
76EYBym1fvEaOeYvoOotLU3vrW6dH0YNEf0+Zvtl8XiUHlDCnxeLaBoVybA7p+Rt
|
EVsRQZAslLqGPDf7c/r8efsMcHRfVVCJvvuvyRZNSHIpOnR/QGLOeNY+B59IdTCJ
|
||||||
0J/S3wPMubikTuq3mSsJcUM8c25sRBD90LjZsAcwKbmfDZntkTNGUr3AEaBdEyTS
|
fk2dMvZpyM1AdLkW2jT0qXj4vKAvVPlEbIXmq9bu/jJER35MzMRWfMmbBzek9t3S
|
||||||
WAGKfeJiKoH24BQrslUV8V4i4Fcz6xh1tb11Dmg9XcEiZm4+IF/P+UvjHgXanVdu
|
WAGL4Zf96omkP7Z9j1UYGv4xcGksajbA6HvCHfjI+mUKV4QxGieeJhicaPYLuo7x
|
||||||
GvEauo1dOpGu+L8xc68fSFfMNQcWDJ1UmZIyJ3FLDbaxI/66H041peA=
|
wKZqzMZGPpy1dPq75t0RAmnRzHaB9VEUWfO+KYIY/+1qRxOANYl+uZA=
|
||||||
=YUFg
|
=K3Hh
|
||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
|
|||||||
@@ -40,19 +40,6 @@ with lib;
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualHosts."cloud.malobeo.org" = {
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://10.100.0.101";
|
|
||||||
extraConfig = ''
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize};
|
|
||||||
client_body_timeout 3600s;
|
|
||||||
send_timeout 3600s;
|
|
||||||
fastcgi_buffers 64 4K;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualHosts."keys.malobeo.org" = {
|
virtualHosts."keys.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.100.0.101";
|
proxyPass = "http://10.100.0.101";
|
||||||
@@ -71,6 +58,15 @@ with lib;
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
virtualHosts."events.malobeo.org" = {
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://10.100.0.101";
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
virtualHosts."tasklist.malobeo.org" = {
|
virtualHosts."tasklist.malobeo.org" = {
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://10.100.0.101";
|
proxyPass = "http://10.100.0.101";
|
||||||
@@ -79,28 +75,6 @@ with lib;
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualHosts."zines.malobeo.org" = {
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://10.100.0.101";
|
|
||||||
extraConfig = ''
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
proxy_set_header Authorization $http_authorization; # Pass the Authorization header
|
|
||||||
proxy_pass_header Authorization;
|
|
||||||
|
|
||||||
client_body_in_file_only clean;
|
|
||||||
client_body_buffer_size 32K;
|
|
||||||
|
|
||||||
client_max_body_size 500M;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
send_timeout 300s;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ with lib;
|
|||||||
enable = true;
|
enable = true;
|
||||||
enablePromtail = true;
|
enablePromtail = true;
|
||||||
logNginx = true;
|
logNginx = true;
|
||||||
lokiHost = "10.0.0.14";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.printing.enable = true;
|
services.printing.enable = true;
|
||||||
|
|||||||
107
scripts/gitea_hydra_server.py
Normal file
107
scripts/gitea_hydra_server.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
#imports
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
def _get_api_response(baseurl, owner, repo):
|
||||||
|
###https://docs.gitea.com/api/1.21/#tag/repository/operation/repoListPullRequests
|
||||||
|
###GET /api/v1/repos/{owner}/{repo}/pulls
|
||||||
|
url=(f"https://{baseurl}/api/v1/repos/{owner}/{repo}/pulls?state=open")
|
||||||
|
headers={"Accept": "application/json"}
|
||||||
|
req=urllib.request.Request(url, headers=headers)
|
||||||
|
with urllib.request.urlopen(req) as resp:
|
||||||
|
return json.loads(resp.read().decode("utf-8"))
|
||||||
|
|
||||||
|
def _parse_response(baseurl, owner, repo):
|
||||||
|
target_repo_url=f"https://{baseurl}/{owner}/{repo}.git"
|
||||||
|
pulls: dict={}
|
||||||
|
response=_get_api_response(baseurl, owner, repo)
|
||||||
|
for pr in response:
|
||||||
|
pr["target_repo_url"]=target_repo_url
|
||||||
|
pulls[str(pr["number"])]=pr
|
||||||
|
return pulls
|
||||||
|
|
||||||
|
class PullsHandler(BaseHTTPRequestHandler):
|
||||||
|
_VALID_PATHS={"/", "/gitea-pulls-sorted.json"}
|
||||||
|
|
||||||
|
# Class variables to store configuration
|
||||||
|
baseurl = None
|
||||||
|
owner = None
|
||||||
|
repo = None
|
||||||
|
|
||||||
|
def do_GET(self):
|
||||||
|
if self.path not in self._VALID_PATHS:
|
||||||
|
self.send_error(404, "Not Found")
|
||||||
|
return
|
||||||
|
|
||||||
|
answer=dict(_parse_response(self.baseurl, self.owner, self.repo))
|
||||||
|
|
||||||
|
body=json.dumps(answer, indent=2, sort_keys=True).encode("utf-8")
|
||||||
|
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header("Content-Type", "application/json; charset=utf-8")
|
||||||
|
self.send_header("Content-Length", str(len(body)))
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(body)
|
||||||
|
|
||||||
|
def log_message(self, fmt, *args):
|
||||||
|
print(
|
||||||
|
f"[gitea-translator] {self.address_string()} - {fmt % args}",
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Hydra Server to Gitea-pull-request translator"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--baseurl",
|
||||||
|
default="git.dynamicdiscord.de",
|
||||||
|
help="Base URL of Gitea instance (default: git.dynamicdiscord.de)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--owner",
|
||||||
|
default="malobeo",
|
||||||
|
help="Repository owner (default: malobeo)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--repo",
|
||||||
|
default="infrastructure",
|
||||||
|
help="Repository name (default: infrastructure)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--host",
|
||||||
|
default="127.0.0.1",
|
||||||
|
help="Host to bind to (default: 127.0.0.1)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--port",
|
||||||
|
type=int,
|
||||||
|
default=27364,
|
||||||
|
help="Port to bind to (default: 27364)"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Set class variables so they're accessible in request handlers
|
||||||
|
PullsHandler.baseurl = args.baseurl
|
||||||
|
PullsHandler.owner = args.owner
|
||||||
|
PullsHandler.repo = args.repo
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"[gitea-translator] Starting, pulling from {args.baseurl}/{args.owner}/{args.repo}",
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
server=HTTPServer((args.host, args.port), PullsHandler)
|
||||||
|
print(
|
||||||
|
f"[gitea-translator] online @ {args.host}:{args.port}",
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user