Compare commits

...

48 Commits

Author SHA1 Message Date
9de5daa2ad hippocampus: dawarich fix 2026-02-15 21:17:42 -05:00
7fd9daa5d1 hippocampus: dawarich: update from nixpkgs#485771 2026-02-15 20:53:14 -05:00
91fdc07d18 hippocampus: dawarich: fix smtp timeout 2026-02-15 20:47:52 -05:00
712d6a1fd9 hippocampus: dawarich: configure smtp password 2026-02-15 19:04:33 -05:00
cf4f409884 hippocampus: dawarich: configure smtp 2026-02-15 19:03:13 -05:00
0a0c45cc96 hippocampus: dawarich: fix 2026-02-15 19:00:25 -05:00
3cec2ea181 hippocampus: dawarich: enable 2026-02-15 18:23:06 -05:00
bf4003693a hippocampus: immich: enable 2026-02-15 17:58:56 -05:00
f389799652 hippocampus: matrix: client: element conf 2026-02-14 20:22:28 -05:00
f9fbba0e8d hippocampus: matrix: server well known 2026-02-14 20:22:05 -05:00
60a26ca5c3 hippocampus: matrix: turn: security 2026-02-14 20:21:31 -05:00
1ccf2f03d8 hippocampus: matrix: client: cinny -> element 2026-02-14 18:16:07 -05:00
a188c3761b hippocampus: matrix: rtc: whoops, start<->end 2026-02-14 18:08:14 -05:00
28e3b5d06c hippocampus: matrix: livekit: bind/ports 2026-02-14 17:42:51 -05:00
fd0a173666 hippocampus: matrix: turn: lower port range 2026-02-14 17:38:02 -05:00
9957f14e2a hippocampus: matrix: client redir to proxy 2026-02-14 17:01:44 -05:00
5bfc75913e hippocampus: matrix: sfu/turn secrets 2026-02-14 17:01:22 -05:00
998ea1b3b1 hippocampus: matrix; turn: mini-fix 2026-02-14 17:01:07 -05:00
a29359b79e Merge branch 'main' of https://git.syzygial.cc/Syzygial/NixMachines 2026-02-14 16:31:14 -05:00
2096c7213f hippocampus: matrix: server: enable turn 2026-02-14 16:30:43 -05:00
720de41020 Merge branch 'main' of https://git.syzygial.cc/Syzygial/NixMachines 2026-02-14 16:16:12 -05:00
6e44d99e07 hippocampus: matrix: turn: secret perms 2026-02-14 16:16:03 -05:00
40cfe3b99d hippocampus: matrix: turn: cert/key 2026-02-14 16:14:53 -05:00
5bf80573dc hippocampus: matrix: turn: declare secret 2026-02-14 15:10:48 -05:00
a422d4a083 hippocampus: matrix: sfu: toString 2026-02-14 15:08:46 -05:00
f72ab4d4e4 hippocampus: matrix: sfu: use array right 2026-02-14 15:07:23 -05:00
5ce622865f hippocampus: matrix: sfu missing semicolon 2026-02-14 15:06:15 -05:00
785319fdb4 hippocampus: matrix: turn/sfu prep 2026-02-14 15:05:08 -05:00
1b1755b498 universe: enable nvidia-container-toolkit 2026-02-14 12:46:12 -05:00
e7c94e2b1a hippocampus: oci: jellyfin: todo: jellystat/jellysweep 2026-02-14 12:45:32 -05:00
af037e849c hippocampus: minio: rejig 2026-02-14 12:13:32 -05:00
9b6b4bb41a hippocampus: minio server url change 2026-02-12 22:46:48 -05:00
59d5edc2bf hippocampus: matrix: client: cinny config 2026-02-12 20:35:08 -05:00
fd52ee4918 hippocampus: matrix: glia.club redir to chat.glia.club 2026-02-12 20:25:44 -05:00
d97e7ff863 hippocampus: matrix: registration seccret 2026-02-12 01:19:34 -05:00
a014a172a3 hippocampus: enable registration 2026-02-12 01:18:32 -05:00
bf8edd371d hippocampus: caddy/nginx shared group 2026-02-12 00:58:09 -05:00
041462321a hippocampus: matrix: client: fix listen 2026-02-11 23:34:30 -05:00
2c144676df hippocampus: matrix client/server prep 2026-02-11 23:32:49 -05:00
3ad59a986a hippocampus: perfect pitch: net tun device 2026-02-11 22:20:03 -05:00
9291300cbd hippocampus: glia.club domain prep 2026-02-11 21:49:21 -05:00
d2d479ab43 flake.lock: Update
Flake lock file updates:

• Updated input 'deploy-rs':
    'github:serokell/deploy-rs/d5eff7f948535b9c723d60cd8239f8f11ddc90fa?narHash=sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik%3D' (2025-12-18)
  → 'github:serokell/deploy-rs/77c906c0ba56aabdbc72041bf9111b565cdd6171?narHash=sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY%3D' (2026-02-02)
• Updated input 'home-manager':
    'github:nix-community/home-manager/475921375def3eb930e1f8883f619ff8609accb6?narHash=sha256-9ABv9Lo9t6MrFjlnRnU8Zw1C6LVj2%2BR8PipQ/rxGLHk%3D' (2026-01-30)
  → 'github:nix-community/home-manager/6cee0821577643e0b34e2c5d9a90d0b1b5cdca70?narHash=sha256-cyxgVsNfHnJ4Zn6G1EOzfTXbjTy7Ds9zMOsZaX7VZWs%3D' (2026-02-07)
• Updated input 'microvm':
    'github:astro/microvm.nix/43406f57d740f96428a8df14d2fba80f437ca79a?narHash=sha256-qeXiVWfblS5w/gxwklncxfXPrdpyPJ3OGvgXKekXzaM%3D' (2026-01-28)
  → 'github:astro/microvm.nix/68c9f9c6ca91841f04f726a298c385411b7bfcd5?narHash=sha256-lyWAs4XKg3kLYaf4gm5qc5WJrDkYy3/qeV5G733fJww%3D' (2026-02-05)
• Updated input 'nix-darwin':
    'github:LnL7/nix-darwin/0fc4e7ac670a0ed874abacf73c4b072a6a58064b?narHash=sha256-5ulSDyOG1U%2B1sJhkJHYsUOWEsmtLl97O0NTVMvgIVyc%3D' (2026-01-18)
  → 'github:LnL7/nix-darwin/0d7874ef7e3ba02d58bebb871e6e29da36fa1b37?narHash=sha256-DsqnN6LvXmohTRaal7tVZO/AKBuZ02kPBiZKSU4qa/k%3D' (2026-02-04)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/bfc1b8a4574108ceef22f02bafcf6611380c100d?narHash=sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI%3D' (2026-01-26)
  → 'github:NixOS/nixpkgs/00c21e4c93d963c50d4c0c89bfa84ed6e0694df2?narHash=sha256-AYqlWrX09%2BHvGs8zM6ebZ1pwUqjkfpnv8mewYwAo%2BiM%3D' (2026-02-04)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/c5eebd4eb2e3372fe12a8d70a248a6ee9dd02eff?narHash=sha256-wFcr32ZqspCxk4%2BFvIxIL0AZktRs6DuF8oOsLt59YBU%3D' (2026-01-26)
  → 'github:Mic92/sops-nix/17eea6f3816ba6568b8c81db8a4e6ca438b30b7c?narHash=sha256-ktjWTq%2BD5MTXQcL9N6cDZXUf9kX8JBLLBLT0ZyOTSYY%3D' (2026-02-03)
• Updated input 'sops-nix/nixpkgs':
    'github:NixOS/nixpkgs/ab9fbbcf4858bd6d40ba2bbec37ceb4ab6e1f562?narHash=sha256-mAdJpV0e5IGZjnE4f/8uf0E4hQR7ptRP00gnZKUOdMo%3D' (2026-01-24)
  → 'github:NixOS/nixpkgs/6308c3b21396534d8aaeac46179c14c439a89b8a?narHash=sha256-xKPyJoMoXfXpDM5DFDZDsi9PHArf2k5BJjvReYXoFpM%3D' (2026-01-30)
2026-02-07 13:25:27 -05:00
c2496e426a universedesktop: wifi secret fix 2026-02-07 13:24:52 -05:00
f13b29af0b universedesktop: adb.enable -> pkgs.android-tools 2026-01-31 00:12:28 -05:00
05ff432e29 flake.lock: Update
Flake lock file updates:

• Updated input 'deploy-rs':
    'github:serokell/deploy-rs/9c870f63e28ec1e83305f7f6cb73c941e699f74f?narHash=sha256-9I2H9x5We6Pl%2BDBYHjR1s3UT8wgwcpAH03kn9CqtdQc%3D' (2025-11-04)
  → 'github:serokell/deploy-rs/d5eff7f948535b9c723d60cd8239f8f11ddc90fa?narHash=sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik%3D' (2025-12-18)
• Updated input 'home-manager':
    'github:nix-community/home-manager/f35d0cb75f0669ac8de18d774b336d3d3560bcde?narHash=sha256-O8NI0pOf1GxPaBRhyspWZmtXLo0tzEEvOfMxNh3/8Jo%3D' (2025-11-06)
  → 'github:nix-community/home-manager/475921375def3eb930e1f8883f619ff8609accb6?narHash=sha256-9ABv9Lo9t6MrFjlnRnU8Zw1C6LVj2%2BR8PipQ/rxGLHk%3D' (2026-01-30)
• Updated input 'lix-module':
    'b90bf629bb.tar.gz?narHash=sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7%2Bb8%3D&rev=b90bf629bbd835e61f1317b99e12f8c831017006' (2025-01-18)
  → 'b90bf629bb.tar.gz?narHash=sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7%2Bb8%3D' (2025-01-18)
• Updated input 'me-emacs':
    'git+https://git.syzygial.cc/Syzygial/EmacsConfig.git?ref=refs/heads/master&rev=71bb31643363b4a42948505d41f4e1c83a21c868' (2025-09-04)
  → 'git+https://git.syzygial.cc/Syzygial/EmacsConfig.git?ref=refs/heads/master&rev=a82da456bdd9064a0395252935a66c8e2864a4db' (2026-01-20)
• Updated input 'microvm':
    'github:astro/microvm.nix/1d05a3c26dbb9d4b1cd644e10713a70d8740cb6a?narHash=sha256-Bv4ZKRPsIc6W7qF1I2fevxFETqRNuG3XOsiRIfJ7YlQ%3D' (2025-11-03)
  → 'github:astro/microvm.nix/43406f57d740f96428a8df14d2fba80f437ca79a?narHash=sha256-qeXiVWfblS5w/gxwklncxfXPrdpyPJ3OGvgXKekXzaM%3D' (2026-01-28)
• Removed input 'microvm/flake-utils'
• Removed input 'microvm/flake-utils/systems'
• Updated input 'nix-darwin':
    'github:LnL7/nix-darwin/b8c7ac030211f18bd1f41eae0b815571853db7a2?narHash=sha256-ikVIPB/ea/BAODk6aksgkup9k2jQdrwr4%2BZRXtBgmSs%3D' (2025-11-05)
  → 'github:LnL7/nix-darwin/0fc4e7ac670a0ed874abacf73c4b072a6a58064b?narHash=sha256-5ulSDyOG1U%2B1sJhkJHYsUOWEsmtLl97O0NTVMvgIVyc%3D' (2026-01-18)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/b3d51a0365f6695e7dd5cdf3e180604530ed33b4?narHash=sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw%3D' (2025-11-02)
  → 'github:NixOS/nixpkgs/bfc1b8a4574108ceef22f02bafcf6611380c100d?narHash=sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI%3D' (2026-01-26)
• Updated input 'sops-nix':
    'github:Mic92/sops-nix/5a7d18b5c55642df5c432aadb757140edfeb70b3?narHash=sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY%3D' (2025-10-20)
  → 'github:Mic92/sops-nix/c5eebd4eb2e3372fe12a8d70a248a6ee9dd02eff?narHash=sha256-wFcr32ZqspCxk4%2BFvIxIL0AZktRs6DuF8oOsLt59YBU%3D' (2026-01-26)
• Updated input 'sops-nix/nixpkgs':
    'github:NixOS/nixpkgs/3cbe716e2346710d6e1f7c559363d14e11c32a43?narHash=sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM%3D' (2025-10-16)
  → 'github:NixOS/nixpkgs/ab9fbbcf4858bd6d40ba2bbec37ceb4ab6e1f562?narHash=sha256-mAdJpV0e5IGZjnE4f/8uf0E4hQR7ptRP00gnZKUOdMo%3D' (2026-01-24)
2026-01-31 00:10:30 -05:00
c89318349d Catchup 2026-01-31 00:09:45 -05:00
987df4ff14 pericyte: add mirotalk to env 2026-01-31 00:08:46 -05:00
32e806e54e universedesktop: game: shattered-pixel-dungeon 2026-01-31 00:08:46 -05:00
38 changed files with 4455 additions and 115 deletions

86
flake.lock generated
View File

@@ -7,11 +7,11 @@
"utils": "utils" "utils": "utils"
}, },
"locked": { "locked": {
"lastModified": 1762286984, "lastModified": 1770019181,
"narHash": "sha256-9I2H9x5We6Pl+DBYHjR1s3UT8wgwcpAH03kn9CqtdQc=", "narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=",
"owner": "serokell", "owner": "serokell",
"repo": "deploy-rs", "repo": "deploy-rs",
"rev": "9c870f63e28ec1e83305f7f6cb73c941e699f74f", "rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -72,24 +72,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": {
"inputs": {
"systems": "systems_4"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flakey-profile": { "flakey-profile": {
"locked": { "locked": {
"lastModified": 1712898590, "lastModified": 1712898590,
@@ -112,11 +94,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762458864, "lastModified": 1770476834,
"narHash": "sha256-O8NI0pOf1GxPaBRhyspWZmtXLo0tzEEvOfMxNh3/8Jo=", "narHash": "sha256-cyxgVsNfHnJ4Zn6G1EOzfTXbjTy7Ds9zMOsZaX7VZWs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "f35d0cb75f0669ac8de18d774b336d3d3560bcde", "rev": "6cee0821577643e0b34e2c5d9a90d0b1b5cdca70",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -153,7 +135,7 @@
"narHash": "sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7+b8=", "narHash": "sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7+b8=",
"rev": "b90bf629bbd835e61f1317b99e12f8c831017006", "rev": "b90bf629bbd835e61f1317b99e12f8c831017006",
"type": "tarball", "type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/b90bf629bbd835e61f1317b99e12f8c831017006.tar.gz?rev=b90bf629bbd835e61f1317b99e12f8c831017006" "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/b90bf629bbd835e61f1317b99e12f8c831017006.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -168,11 +150,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1757014957, "lastModified": 1768875255,
"narHash": "sha256-iPw1uXPUb4mPSZ/Uneop+1veSN5fEYCrsJwq71zLADs=", "narHash": "sha256-H2fNon/y6RH+PlMxGY6X/7Qvty+LVCrjCkw8Ee15Iis=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "71bb31643363b4a42948505d41f4e1c83a21c868", "rev": "a82da456bdd9064a0395252935a66c8e2864a4db",
"revCount": 88, "revCount": 89,
"type": "git", "type": "git",
"url": "https://git.syzygial.cc/Syzygial/EmacsConfig.git" "url": "https://git.syzygial.cc/Syzygial/EmacsConfig.git"
}, },
@@ -183,18 +165,17 @@
}, },
"microvm": { "microvm": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"spectrum": "spectrum" "spectrum": "spectrum"
}, },
"locked": { "locked": {
"lastModified": 1762200934, "lastModified": 1770310890,
"narHash": "sha256-Bv4ZKRPsIc6W7qF1I2fevxFETqRNuG3XOsiRIfJ7YlQ=", "narHash": "sha256-lyWAs4XKg3kLYaf4gm5qc5WJrDkYy3/qeV5G733fJww=",
"owner": "astro", "owner": "astro",
"repo": "microvm.nix", "repo": "microvm.nix",
"rev": "1d05a3c26dbb9d4b1cd644e10713a70d8740cb6a", "rev": "68c9f9c6ca91841f04f726a298c385411b7bfcd5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -210,11 +191,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762304480, "lastModified": 1770184146,
"narHash": "sha256-ikVIPB/ea/BAODk6aksgkup9k2jQdrwr4+ZRXtBgmSs=", "narHash": "sha256-DsqnN6LvXmohTRaal7tVZO/AKBuZ02kPBiZKSU4qa/k=",
"owner": "LnL7", "owner": "LnL7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "b8c7ac030211f18bd1f41eae0b815571853db7a2", "rev": "0d7874ef7e3ba02d58bebb871e6e29da36fa1b37",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -242,11 +223,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1762111121, "lastModified": 1770197578,
"narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -258,11 +239,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1760596604, "lastModified": 1769740369,
"narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", "narHash": "sha256-xKPyJoMoXfXpDM5DFDZDsi9PHArf2k5BJjvReYXoFpM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", "rev": "6308c3b21396534d8aaeac46179c14c439a89b8a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -289,11 +270,11 @@
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1760998189, "lastModified": 1770145881,
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", "narHash": "sha256-ktjWTq+D5MTXQcL9N6cDZXUf9kX8JBLLBLT0ZyOTSYY=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", "rev": "17eea6f3816ba6568b8c81db8a4e6ca438b30b7c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -363,21 +344,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": { "utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"

View File

@@ -127,6 +127,36 @@
]; ];
}; };
# TODO: Usage monitoring and data analytics for media removal
#
# jellystat = {
# image = "fallenbagel/jellyseerr:latest";
# volumes = [
# "${dataDir}:/data"
# "${configDir}/jellyseerr:/app/config"
# ];
# environment = baseEnv // {
# };
# extraOptions = [
# "--pull=newer"
# ];
# };
# jellysweep = {
# image = "fallenbagel/jellyseerr:latest";
# volumes = [
# "${dataDir}:/data"
# "${configDir}/jellyseerr:/app/config"
# ];
# environment = baseEnv // {
# };
# extraOptions = [
# "--pull=newer"
# ];
# };
radarr = { radarr = {
image = "linuxserver/radarr:latest"; image = "linuxserver/radarr:latest";
volumes = [ volumes = [

View File

@@ -13,6 +13,12 @@ restic:
repo: ENC[AES256_GCM,data:7sy35DPRrhGudRorlGb2OSQzXgeKBXlC5KEYCAtw0VgCu5K2A4XjS8mSlDdf4Tz/4tun6nmH,iv:X+JOQVHL9t8Nc7zuSUrYKkUUV/lqlav9RehZf4bs8pw=,tag:roC7vneozMbnO40713tUkQ==,type:str] repo: ENC[AES256_GCM,data:7sy35DPRrhGudRorlGb2OSQzXgeKBXlC5KEYCAtw0VgCu5K2A4XjS8mSlDdf4Tz/4tun6nmH,iv:X+JOQVHL9t8Nc7zuSUrYKkUUV/lqlav9RehZf4bs8pw=,tag:roC7vneozMbnO40713tUkQ==,type:str]
passwd: ENC[AES256_GCM,data:vUsAP5+iZo7U55xnUP7Cnk1OxnrO+paHKmT2cuc=,iv:GF7fybEQZIxHPm1Z6Sj5dn/zOR5dRVgikH8LILsTMIs=,tag:Mh61boRPsfHeiSfXmrEx5Q==,type:str] passwd: ENC[AES256_GCM,data:vUsAP5+iZo7U55xnUP7Cnk1OxnrO+paHKmT2cuc=,iv:GF7fybEQZIxHPm1Z6Sj5dn/zOR5dRVgikH8LILsTMIs=,tag:Mh61boRPsfHeiSfXmrEx5Q==,type:str]
backblaze: ENC[AES256_GCM,data:IfWzuIYUrCGYpP68CPFi2vLqq9NVmiVyCE+Z8yi+cnaQwgwNL40lJEPL/U3d0lgsmrsV4GheNJ0oQ9tnrrJeBgZgwMl/CwXMctuUHo+cvVot/cNRd1vCdjRr7WUnw8737uxyW45OaaYbkZRa3NWEGDll1iFDWB2w4n5DTsomyO03tFZB5gckwQYmpjYmK4DcIWyTaEiDrznmkyM+sxoWv9pcTHZIIN7TCHHkzmlMzXXqJnoRfCpdVm/QF9jbrAYs,iv:tOa1FFyggm0ScoRdFk6tACOnQVcZMYaDqeJyX5SMKXc=,tag:EY5jQhZnLP6IzqY9garoEQ==,type:str] backblaze: ENC[AES256_GCM,data:IfWzuIYUrCGYpP68CPFi2vLqq9NVmiVyCE+Z8yi+cnaQwgwNL40lJEPL/U3d0lgsmrsV4GheNJ0oQ9tnrrJeBgZgwMl/CwXMctuUHo+cvVot/cNRd1vCdjRr7WUnw8737uxyW45OaaYbkZRa3NWEGDll1iFDWB2w4n5DTsomyO03tFZB5gckwQYmpjYmK4DcIWyTaEiDrznmkyM+sxoWv9pcTHZIIN7TCHHkzmlMzXXqJnoRfCpdVm/QF9jbrAYs,iv:tOa1FFyggm0ScoRdFk6tACOnQVcZMYaDqeJyX5SMKXc=,tag:EY5jQhZnLP6IzqY9garoEQ==,type:str]
oinkapi: ENC[AES256_GCM,data:bk4tLEYGpPnTgiSz9KAAwykjIFRMOL+GK9/VP/C/WGXSYyGq245w+EJuC/4+XNyic0dniGFtJOOGy9reIWj1ZIDXZY4=,iv:a85CCgy27ByGnMS/0ForMY25xkU1kgahyis0yLs5hTs=,tag:AsXxzQgyvBmpP/I0f0wApQ==,type:str]
oinkSapi: ENC[AES256_GCM,data:SXfowRHpuhDMVoeqWPkfbnj/9+uGlBCg3MwUHCADeuLgaZImSnEiYLyjQfruhzoul9E+F1Uj4QxG8KeOY7nAFqkl/Ns=,iv:GYEiAQDylHxu9CW5DB0so9QY8Ou4fZT3+wk7ZrgoP+o=,tag:W/Q+tSfDsEcSYcI+oLuxxA==,type:str]
tuwunelreg: ENC[AES256_GCM,data:5NJL1W6iVEwLwAUGlmCOHgVzV+9aLMrp8OXu8uVUw3SpCR5ffUuPsFtEHvJ2UkV1DPtJ2mz+EmqgWYOt7aY2xdtT5CTQJVlFcxQOOhJ2IYy5OpPHNtHLTWtKR1p0a3V38aBq98hZRL1JgdY1lrTtQPtV9u13zH+A2TZVmYxdG8Y=,iv:cltmxwdE0A7EYqdtaPXs2FALmO8YPydIOrNHfv7Pu9Q=,tag:ppnBVeL+t8sHhCXWOzLtjw==,type:str]
coturn-secret: ENC[AES256_GCM,data:9lPM14VVk/VlmYPy4XgIaKDQgRKcoaCaszcaETCBQMmMIGSuq+G2aHqa8dtXf6Tg/Llcza+VROZYBuC9bsFwoEDtcbhFoE9S7OKrJ8bWDDI1AGTwP3j9tgExvmd0HMyqkNrb3l1cPj4/CLcSlZxxWcYVWZL2sSzKpqhKNXGeYCM=,iv:zckUJK+F95lVKZz/XoD4nmuC14FiIU1gIxe5U4abvrg=,tag:nSPxlCMS4QXBvkb6jn4EQg==,type:str]
lk-jwt: ENC[AES256_GCM,data:6EXQbXUWsXzYwHU+KYh8FfVKoMScrbX/ITx/x128UdU1r0PmqEZ39TewmDUSlNlMsaWYRffNd8lmfF3sPZDOZzL/jNJNaTSqUKy8cPX8XF+LJqq08ZDWihvgKjcyHy6BORpe07fGp6v/otJW9XE9qujJ2QC/0MA+dJpckpfibaswfWwkL2BfmDfcq2H8Tudohg==,iv:Rm5uWOKGBKlnivGkxWokpG1YR1dxeTV+cVrDZ/3i8yE=,tag:bSeOZ7SEelDIeSGTdzRVng==,type:str]
dawarich_smtp: ENC[AES256_GCM,data:v4VU5XGGR2rLfQZsMvbXCA==,iv:jD3EFKab7/oxxqX6O1Mfz5tA/xUOGEaBtMsHnENouBQ=,tag:JWyrensx9v97blQv49jsLQ==,type:str]
sops: sops:
age: age:
- recipient: age1crymppz88etsdjpckmtdhr397x5xg5wv8jt6tcj23gt2snq73pzs04fuve - recipient: age1crymppz88etsdjpckmtdhr397x5xg5wv8jt6tcj23gt2snq73pzs04fuve
@@ -24,7 +30,7 @@ sops:
RVUzMlFya3Z0amdTUTJ5YjFRck5kZzQKoWZzExqzPRpQPL4CdqBalc1/dYtjBH6J RVUzMlFya3Z0amdTUTJ5YjFRck5kZzQKoWZzExqzPRpQPL4CdqBalc1/dYtjBH6J
LGR0oImfOWlIJwcaJLv/fc470UvXHHwIji9v/pbV7xMkgMjlJthaYg== LGR0oImfOWlIJwcaJLv/fc470UvXHHwIji9v/pbV7xMkgMjlJthaYg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-07-19T19:15:37Z" lastmodified: "2026-02-16T00:04:12Z"
mac: ENC[AES256_GCM,data:RPGKe5f+5GUnGK3zybRrTnd8N4TprLWBEWLI2HI68Acf1MlJ1AMOWOhpi5xa0Hkxpah8D/d0CEH2ymaO5EBSUamPdYThI4g/4cxNBXboKnALSf91ZUty86/1+14TbI6vFCZ5ghjB4THxszGf47ajIDa/TjHx0yHFWDi7rpApmcw=,iv:ep/NlJfkIkQe5RJ4U2YfZ7/0S4vWqxjg+xrLLnJwfwI=,tag:c01jey2juzoPKux7n/0rug==,type:str] mac: ENC[AES256_GCM,data:W17ieIGhzDXcjT8xJn72K0274QN9FcMOXdB4YWeSAyxSwRmwUkuF9NzbAWZ8rH/Yva8mUgOh+OC1x4xavHI5UGBsSoUk+q9vevRd13qVE328o3JW0ZRsi3PunpmmzEYoz//z3UUxpepgcBKGTui8Fj1z5tOoNtXfEtxnHv/JY0w=,iv:8TSc+cMa+bbFqoPObnBE5KUhysmZnr1iTksc4tvUcDw=,tag:6LxuWGLQv7fSpJN0spuQ5Q==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.10.2 version: 3.11.0

View File

@@ -10,7 +10,7 @@
./private/prometheus.nix ./private/prometheus.nix
# Pretty Visuals # Pretty Visuals
# ./private/grafana.nix ./private/grafana.nix
# Home Monitoring and Control # Home Monitoring and Control
# ./private/homeassistant.nix # ./private/homeassistant.nix

View File

@@ -4,7 +4,9 @@
services.grafana = { services.grafana = {
enable = true; enable = true;
http_addr = "0.0.0.0"; settings.server = {
http_port = 9998; http_addr = "0.0.0.0";
http_port = 9998;
};
}; };
} }

View File

@@ -58,8 +58,8 @@
MINIO_VOLUMES = "/mnt/disk1/minio"; MINIO_VOLUMES = "/mnt/disk1/minio";
# Expandable later, but each pool must have more than 1 disk. # Expandable later, but each pool must have more than 1 disk.
# https://github.com/minio/minio/issues/16711 # https://github.com/minio/minio/issues/16711
MINIO_SERVER_URL = "http://minio1.minio1.tailnet:9000"; MINIO_SERVER_URL = "http://100.64.0.4:9000";
MINIO_PROMETHEUS_URL = "http://100.64.0.5:9999"; MINIO_PROMETHEUS_URL = "http://100.64.0.4:9999";
MINIO_PROMETHEUS_JOB_ID = "minio-job"; MINIO_PROMETHEUS_JOB_ID = "minio-job";
}; };
}; };

View File

@@ -50,5 +50,14 @@
# Perfect Pitch Project # Perfect Pitch Project
./public/perfect_pitch.nix ./public/perfect_pitch.nix
# Matrix services
./public/matrix.nix
# Immich Photo Backups
./public/immich.nix
# Dawarich location tracking
./public/dawarich.nix
]; ];
} }

View File

@@ -6,6 +6,7 @@
# acmeCA = "https://acme-staging-v02.api.letsencrypt.org/directory"; # acmeCA = "https://acme-staging-v02.api.letsencrypt.org/directory";
email = "davidcrompton1192@gmail.com"; email = "davidcrompton1192@gmail.com";
}; };
services.nginx.group = "caddy";
services.caddy.virtualHosts = { services.caddy.virtualHosts = {
"star.zlinger.syzygial.cc" = { "star.zlinger.syzygial.cc" = {
extraConfig = '' extraConfig = ''

View File

@@ -0,0 +1,38 @@
{ config, pkgs, lib, ... }: {
sops.secrets.dawarich_smtp = {
owner = config.services.dawarich.user;
group = config.services.dawarich.group;
};
services.dawarich = {
enable = true;
package = (pkgs.callPackage ./dawarich/package.nix { }).overrideAttrs (old: {
# https://github.com/Freika/dawarich/issues/1469
postInstall = (old.postInstall or "") + ''
cp ${./dawarich_smtp_config.rb} $out/config/initializers/smtp_settings.rb
'';
});
webPort = 7392;
configureNginx = false;
localDomain = "location.crompton.cc";
smtp = {
fromAddress = "automated@syzygial.cc";
user = "automated@syzygial.cc";
passwordFile = config.sops.secrets.dawarich_smtp.path;
host = "smtp.protonmail.ch";
port = 587;
};
};
services.caddy.virtualHosts = {
${config.services.dawarich.localDomain} = {
extraConfig = ''
reverse_proxy localhost:${toString config.services.dawarich.webPort}
encode brotli {
match {
content_type text/css text/plain text/xml text/x-component text/javascript application/x-javascript application/javascript application/json application/manifest+json application/vnd.api+json application/xml application/xhtml+xml application/rss+xml application/atom+xml application/vnd.ms-fontobject application/x-font-ttf application/x-font-opentype application/x-font-truetype image/svg+xml image/x-icon image/vnd.microsoft.icon font/ttf font/eot font/otf font/opentype
}
}
'';
};
};
}

View File

@@ -0,0 +1,18 @@
diff --git a/Gemfile.lock b/Gemfile.lock
index d45a7657..d0a7b750 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -172,12 +172,7 @@ GEM
railties (>= 6.1.0)
fakeredis (0.1.4)
ffaker (2.25.0)
- ffi (1.17.2-aarch64-linux-gnu)
- ffi (1.17.2-arm-linux-gnu)
- ffi (1.17.2-arm64-darwin)
- ffi (1.17.2-x86-linux-gnu)
- ffi (1.17.2-x86_64-darwin)
- ffi (1.17.2-x86_64-linux-gnu)
+ ffi (1.17.2)
foreman (0.90.0)
thor (~> 1.4)
fugit (1.11.1)

View File

@@ -0,0 +1,32 @@
diff --git a/Gemfile b/Gemfile
index 36cf0d9c..fc914849 100644
--- a/Gemfile
+++ b/Gemfile
@@ -28,6 +28,7 @@ gem 'omniauth-github', '~> 2.0.0'
gem 'omniauth-google-oauth2'
gem 'omniauth_openid_connect'
gem 'omniauth-rails_csrf_protection'
+gem 'openssl'
gem 'parallel'
gem 'pg'
gem 'prometheus_exporter'
diff --git a/Gemfile.lock b/Gemfile.lock
index a32eb801..b2fc45bc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -348,6 +348,7 @@ GEM
tzinfo
validate_url
webfinger (~> 2.0)
+ openssl (3.3.1)
optimist (3.2.1)
orm_adapter (0.5.0)
ostruct (0.6.1)
@@ -665,6 +666,7 @@ DEPENDENCIES
omniauth-google-oauth2
omniauth-rails_csrf_protection
omniauth_openid_connect
+ openssl
parallel
pg
prometheus_exporter

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,142 @@
{
lib,
applyPatches,
bundlerEnv,
fetchFromGitHub,
fetchNpmDeps,
nixosTests,
nodejs,
npmHooks,
ruby_3_4,
stdenv,
tailwindcss_3,
gemset ? import ./gemset.nix,
sources ? lib.importJSON ./sources.json,
unpatchedSource ? fetchFromGitHub {
owner = "Freika";
repo = "dawarich";
tag = sources.version;
inherit (sources) hash;
},
}:
let
ruby = ruby_3_4;
in
stdenv.mkDerivation (finalAttrs: {
pname = "dawarich";
inherit (sources) version;
# Use `applyPatches` here because bundix in the update script (see ./update.sh)
# needs to run on the already patched Gemfile and Gemfile.lock.
# Only patches changing these two files should be here;
# patches for other parts of the application should go directly into mkDerivation.
src = applyPatches {
src = unpatchedSource;
patches = [
# bundix and bundlerEnv fail with system-specific gems
./0001-build-ffi-gem.diff
# openssl 3.6.0 breaks ruby openssl gem
# See https://github.com/NixOS/nixpkgs/issues/456753
# and https://github.com/ruby/openssl/issues/949#issuecomment-3370358680
./0002-openssl-hotfix.diff
];
postPatch = ''
substituteInPlace ./Gemfile \
--replace-fail "ruby File.read('.ruby-version').strip" "ruby '>= 3.4.0'"
'';
};
postPatch = ''
# move import directory to a more convenient place, otherwise its behind systemd private tmp
substituteInPlace ./app/services/imports/watcher.rb \
--replace-fail 'tmp/imports/watched' 'storage/imports/watched'
'';
dawarichGems = bundlerEnv {
name = "${finalAttrs.pname}-gems-${finalAttrs.version}";
inherit gemset ruby;
inherit (finalAttrs) version;
gemdir = finalAttrs.src;
};
npmDeps = fetchNpmDeps {
inherit (finalAttrs) src;
hash = sources.npmHash;
};
RAILS_ENV = "production";
NODE_ENV = "production";
REDIS_URL = ""; # build error if not defined
TAILWINDCSS_INSTALL_DIR = "${tailwindcss_3}/bin";
nativeBuildInputs = [
nodejs
npmHooks.npmConfigHook
finalAttrs.dawarichGems
finalAttrs.dawarichGems.wrappedRuby
];
propagatedBuildInputs = [
finalAttrs.dawarichGems.wrappedRuby
];
buildInputs = [
finalAttrs.dawarichGems
];
buildPhase = ''
runHook preBuild
patchShebangs bin/
for b in $(ls $dawarichGems/bin/)
do
if [ ! -f bin/$b ]; then
ln -s $dawarichGems/bin/$b bin/$b
fi
done
SECRET_KEY_BASE_DUMMY=1 bundle exec rake assets:precompile
rm -rf node_modules tmp log storage
ln -s /var/log/dawarich log
ln -s /var/lib/dawarich storage
ln -s /tmp tmp
# delete more files unneeded at runtime
rm -rf docker docs screenshots package.json package-lock.json *.md *.example
runHook postBuild
'';
installPhase = ''
runHook preInstall
# tests are not needed at runtime
rm -rf spec e2e
# delete artifacts from patching
rm *.orig
mkdir -p $out
mv .{ruby*,app_version} $out/
mv * $out/
runHook postInstall
'';
passthru = {
tests = {
inherit (nixosTests) dawarich;
};
# run with: nix-shell ./maintainers/scripts/update.nix --argstr package dawarich
updateScript = ./update.sh;
};
meta = {
changelog = "https://github.com/Freika/dawarich/blob/${finalAttrs.version}/CHANGELOG.md";
description = "Self-hostable alternative to Google Location History (Google Maps Timeline)";
homepage = "https://dawarich.app/";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
diogotcorreia
];
platforms = lib.platforms.linux;
};
})

View File

@@ -0,0 +1,5 @@
{
"version": "1.1.0",
"hash": "sha256-oL1XLBaSYCeP+Fn+6BlGMEgCTkwZhT1VZNamrcRXrgI=",
"npmHash": "sha256-doBsDBsO7npHs/jyeg4xWzdauWoK6dPe8z+97IP2zxI="
}

View File

@@ -0,0 +1,5 @@
Rails.application.config.action_mailer.smtp_settings.merge!(
authentication: ENV.fetch('SMTP_AUTHENTICATION', 'login').to_sym,
open_timeout: ENV.fetch('SMTP_OPEN_TIMEOUT', '25').to_i,
read_timeout: ENV.fetch('SMTP_READ_TIMEOUT', '25').to_i
)

View File

@@ -0,0 +1,13 @@
{ config, pkgs, lib, ... }: {
services.immich = {
enable = true;
mediaLocation = "/mass/immich";
};
services.caddy.virtualHosts = {
"photos.crompton.cc" = {
extraConfig = ''
reverse_proxy localhost:${toString config.services.immich.port}
'';
};
};
}

View File

@@ -0,0 +1,6 @@
{ ... }: {
imports = [
./matrix/server.nix
./matrix/client.nix
];
}

View File

@@ -0,0 +1,103 @@
{ config, pkgs, lib, ... }: {
services.nginx.virtualHosts.cinny = {
listen = [{
addr = "unix:/run/nginx/cinny.sock";
}];
locations."/" = {
root = pkgs.element-web.override {
conf = {
default_server_name = "glia.club";
default_server_config = {
m.homeserver = {
base_url = "https://chat.glia.club";
server_name = "glia.club";
};
};
disable_custom_urls = false;
disable_guests = true;
disable_login_language_selector = false;
disable_3pid_login = false;
force_verification = false;
brand = "Element";
integrations_ui_url = "https://scalar.vector.im/";
integrations_rest_url = "https://scalar.vector.im/api";
integrations_widgets_urls = [
"https://scalar.vector.im/_matrix/integrations/v1"
"https://scalar.vector.im/api"
"https://scalar-staging.vector.im/_matrix/integrations/v1"
"https://scalar-staging.vector.im/api"
];
default_widget_container_height = 280;
default_country_code = "GB";
show_labs_settings = true;
features = {
threadsActivityCentre = true;
feature_video_rooms = true;
feature_group_calls = true;
feature_element_call_video_rooms = true;
};
default_federate = false;
default_theme = "light";
room_directory = {
servers = ["glia.club"];
};
enable_presence_by_hs_url = {
"https://glia.club" = true;
"https://chat.glia.club" = true;
"https://matrix.org" = false;
"https://matrix-client.matrix.org" = false;
};
setting_defaults = {
breadcrumbs = false;
};
jitsi = {
preferred_domain = "meet.element.io";
};
element_call = {
url = "https://call.element.io";
brand = "Element Call";
};
map_style_url = "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx";
};
};
extraConfig = ''
index index.html;
# Set no-cache for the version, config and index.html
# so that browsers always check for a new copy of Element Web.
# NB http://your-domain/ and http://your-domain/? are also covered by this
location = /index.html {
add_header Cache-Control "no-cache";
}
location = /version {
add_header Cache-Control "no-cache";
}
# covers config.json and config.hostname.json requests as it is prefix.
location /config {
add_header Cache-Control "no-cache";
}
location /modules/ {
alias /modules/;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
'';
};
};
services.caddy.virtualHosts = {
"glia.club, glia.club:8448" = {
extraConfig = lib.mkAfter ''
reverse_proxy unix//run/nginx/cinny.sock
'';
};
"chat.glia.club" = {
extraConfig = ''
reverse_proxy unix//run/nginx/cinny.sock
'';
};
};
}

View File

@@ -0,0 +1,62 @@
{ config, pkgs, lib, ... }: {
imports = [
./turn.nix
];
# Shared between lk-jwt-service and livekit
# TODO: Generate it
sops.secrets.lk-jwt = {};
services.lk-jwt-service = {
enable = true;
port = 7374;
livekitUrl = "wss://matrix-rtc.glia.club";
keyFile = config.sops.secrets.lk-jwt.path;
};
services.livekit = {
enable = true;
keyFile = config.sops.secrets.lk-jwt.path;
# Ingress of other video streams
# for RTC usage, e.g. RTMP, WHIP, etc.
ingress = { enable = false; };
# Redis is used if we were to use ingress
# redis = { };
settings = {
port = 7375;
bind_addresses = [""];
rtc = {
tcp_port = 7376;
port_range_start = 50100;
port_range_end = 50200;
use_external_ip = true;
enable_loopback_candidate = false;
};
};
};
services.matrix-tuwunel.settings = {
global.well_known = {
rtc_transports = [{
type = "livekit";
livekit_service_url = "https://matrix-rtc.glia.club";
}];
};
};
services.caddy.virtualHosts = {
"matrix-rtc.glia.club" = {
extraConfig = ''
# This is matrix-rtc-jwt
@jwt_service {
path /sfu/get* /healthz*
}
handle @jwt_service {
reverse_proxy localhost:${toString config.services.lk-jwt-service.port}
}
# This is livekit
handle {
reverse_proxy localhost:${toString config.services.livekit.settings.port} {
header_up Connection "upgrade"
header_up Upgrade {http.request.header.Upgrade}
}
}
'';
};
};
}

View File

@@ -0,0 +1,48 @@
{ config, pkgs, lib, ... }: {
imports = [
# Real Time Communication
./rtc.nix
];
sops.secrets.tuwunelreg = {
owner = config.services.matrix-tuwunel.user;
};
services.matrix-tuwunel = {
enable = true;
stateDirectory = "tuwunel";
# Must be equal to whatever reverse proxy is used for the unix
# socket path to work
group = config.services.caddy.group;
settings = {
global = {
address = null;
unix_socket_path = "/run/tuwunel/tuwunel.sock";
server_name = "glia.club";
allow_federation = false;
allow_encryption = true;
new_user_displayname_suffix = "🌱";
allow_registration = true;
registration_token_file = config.sops.secrets.tuwunelreg.path;
well_known = {
client = "https://glia.club";
server = "glia.club:443";
};
};
};
};
services.caddy.virtualHosts = {
"glia.club, glia.club:8448" = {
extraConfig = let
proxy = "unix/${config.services.matrix-tuwunel.settings.global.unix_socket_path}";
in ''
reverse_proxy /_matrix/* ${proxy}
reverse_proxy /_tuwunel/* ${proxy}
reverse_proxy /.well-known/matrix/client ${proxy}
reverse_proxy /.well-known/matrix/server ${proxy}
reverse_proxy /.well-known/matrix/support ${proxy}
'';
};
};
}

View File

@@ -0,0 +1,88 @@
{ config, pkgs, lib, ... }: {
# TODO: Generate coturn secret
sops.secrets.coturn-secret = {
owner = "turnserver";
group = config.services.matrix-tuwunel.group;
mode = "0440";
};
# TODO: patch coturn service to specify user/group
systemd.services.coturn.serviceConfig.Group = lib.mkForce config.services.caddy.group;
services.coturn = {
enable = true;
realm = "turn.glia.club";
listening-port = 3478;
tls-listening-port = 5349;
min-port = config.services.livekit.settings.rtc.port_range_start+1;
max-port = 52000;
use-auth-secret = true;
static-auth-secret-file = config.sops.secrets.coturn-secret.path;
cert = "/var/lib/caddy/.local/share/caddy/certificates/acme.zerossl.com-v2-dv90/turn.glia.club/turn.glia.club.crt";
pkey = "/var/lib/caddy/.local/share/caddy/certificates/acme.zerossl.com-v2-dv90/turn.glia.club/turn.glia.club.key";
extraConfig = ''
# VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
no-tcp-relay
# don't let the relay ever try to connect to private IP address ranges within your network (if any)
# given the turn server is likely behind your firewall, remember to include any privileged public IPs too.
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
# recommended additional local peers to block, to mitigate external access to internal services.
# https://www.enablesecurity.com/blog/slack-webrtc-turn-compromise-and-bug-bounty/#how-to-fix-an-open-turn-relay-to-address-this-vulnerability
# https://www.enablesecurity.com/blog/cve-2020-26262-bypass-of-coturns-access-control-protection/#further-concerns-what-else
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# special case the turn server itself so that client->TURN->TURN->client flows work
# this should be one of the turn server's listening IPs
allowed-peer-ip=10.0.0.1
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
total-quota=1200
'';
};
services.matrix-tuwunel.settings = {
global = {
turn_uris = [
"turn:turn.glia.club?transport=udp"
"turn:turn.glia.club?transport=tcp"
];
turn_secret_file = config.sops.secrets.coturn-secret.path;
};
};
services.caddy.virtualHosts = {
"turn.glia.club" = {
# Use ZeroSSL
# as WebRTC clients misbehave with LetsEncrypt:
# https://github.com/element-hq/element-android/issues/1533
# https://github.com/element-hq/element-ios/issues/2712
# https://bugs.chromium.org/p/webrtc/issues/detail?id=11710
extraConfig = ''
tls {
ca https://acme.zerossl.com/v2/DV90
}
respond "You ~~spin~~ turn me right round!"
'';
};
};
}

View File

@@ -10,7 +10,7 @@
}; };
script = '' script = ''
exec ${config.systemd.package}/bin/systemd-nspawn --hostname perfectpitch \ exec ${config.systemd.package}/bin/systemd-nspawn --hostname perfectpitch \
--resolv-conf=off --system-call-filter="add_key keyctl bpf" --bind /dev/fuse \ --resolv-conf=off --system-call-filter="add_key keyctl bpf" --bind /dev/fuse --bind /dev/net/tun \
-nbD /var/lib/machines/perfectpitch --machine perfectpitch -nbD /var/lib/machines/perfectpitch --machine perfectpitch
''; '';
postStart = '' postStart = ''
@@ -22,7 +22,10 @@
Type = "notify"; Type = "notify";
Slice = "machine.slice"; Slice = "machine.slice";
Delegate = true; Delegate = true;
DeviceAllow = "/dev/fuse rwm"; DeviceAllow = [
"/dev/fuse rwm"
"/dev/net/tun rwm"
];
}; };
}; };
networking.nat = { networking.nat = {

View File

@@ -11,4 +11,18 @@
"@" "@"
]; ];
}; };
sops.secrets.oinkapi = {};
sops.secrets.oinkSapi = {};
services.oink = {
enable = true;
apiKeyFile = config.sops.secrets.oinkapi.path;
secretApiKeyFile = config.sops.secrets.oinkSapi.path;
domains = [
{
domain = "glia.club";
subdomain = "";
ttl = 1200;
}
];
};
} }

View File

@@ -4,6 +4,7 @@
"${inputs.nixpkgs}/nixos/modules/profiles/headless.nix" "${inputs.nixpkgs}/nixos/modules/profiles/headless.nix"
"${inputs.nixpkgs}/nixos/modules/profiles/minimal.nix" "${inputs.nixpkgs}/nixos/modules/profiles/minimal.nix"
./servers.nix
./podman.nix ./podman.nix
./container-registry.nix ./container-registry.nix
# ./microvm-configuration.nix # ./microvm-configuration.nix

View File

@@ -0,0 +1,5 @@
{ ... }: {
imports = [
./servers/public.nix
];
}

View File

@@ -0,0 +1,5 @@
{ ... }: {
imports = [
./public/mirotalk.nix
];
}

View File

@@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
services.caddy = {
enable = true;
email = "davidcrompton1192@gmail.com";
};
}

View File

@@ -0,0 +1,20 @@
{ config, pkgs, lib, ... }: {
nixpkgs.overlays = [(final: prev: {
mirotalk = prev.buildNpmPackage {
pname = "mirotalk";
version = "2025-11-01";
src = prev.fetchFromGitHub {
owner = "miroslavpejic85";
repo = "mirotalk";
rev = "168f4ce2675f6691dfceec352b72e7a53372c9a7";
hash = "sha256-4HC25RM8GenHgNCYoJDWmtaUxnoSorr692RLa7PpW5s=";
};
npmDepsHash = "sha256-B0eHRkBThLgZ4SNA38uW1T4auCsUvS1ULOIR1iEoPqk=";
dontNpmBuild = true;
};
})];
environment.systemPackages = with pkgs; [
mirotalk
];
}

View File

@@ -60,11 +60,14 @@
#services.resolved.enable = true; #services.resolved.enable = true;
networking.resolvconf.enable = true; networking.resolvconf.enable = true;
sops.secrets.wireless = { }; sops.secrets.wireless = {
owner = "wpa_supplicant"; # TODO Use systemd service variable
};
networking.wireless.secretsFile = config.sops.secrets.wireless.path; networking.wireless.secretsFile = config.sops.secrets.wireless.path;
networking.wireless.enable = true; networking.wireless.enable = true;
networking.wireless.networks = { networking.wireless.networks = {
"BELL422 5G".pskRaw = "ext:PSK_HOME";
"BELL422".pskRaw = "ext:PSK_HOME"; "BELL422".pskRaw = "ext:PSK_HOME";
}; };
@@ -118,8 +121,6 @@
services.fwupd.enable = true; services.fwupd.enable = true;
programs.adb.enable = true;
# GTK Support # GTK Support
programs.dconf.enable = true; programs.dconf.enable = true;
@@ -136,6 +137,7 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
direnv direnv
nix-direnv nix-direnv
android-tools
]; ];
documentation.dev.enable = true; documentation.dev.enable = true;

View File

@@ -7,6 +7,9 @@ in {
imports = [ imports = [
./wayland.nix ./wayland.nix
]; ];
services.displayManager.ly = {
enable = true;
};
services.displayManager.sessionPackages = [ pkgs.dwl ]; services.displayManager.sessionPackages = [ pkgs.dwl ];
#services.gnome.gnome-keyring.enable = lib.mkDefault true; #services.gnome.gnome-keyring.enable = lib.mkDefault true;
@@ -14,20 +17,21 @@ in {
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (final: prev: {
wlroots_0_19 = prev.wlroots_0_18.overrideAttrs (old: { # wlroots_0_19 = prev.wlroots_0_18.overrideAttrs (old: {
src = final.fetchFromGitLab { # version = "0.20.0-dev";
domain = "gitlab.freedesktop.org"; # src = final.fetchFromGitLab {
owner = "wlroots"; # domain = "gitlab.freedesktop.org";
repo = "wlroots"; # owner = "wlroots";
rev = "d305934ebe6852785a1f425ee96861f0b7280d76"; # 0.19-prev # 25-01-25 # repo = "wlroots";
hash = "sha256-NnPSC5p/phTFe+nWp9vl8LUbmBO/RXSSUuDZ2boucXY="; # rev = "106f0f950639924d706df21f48545b09db8197ed"; # 0.20.0-dev # 2025-11-14
}; # hash = "sha256-Xybhb4hdvrfLCa0HopnKa6HP4b5gaepK5Y54YUg/TKM=";
}); # };
# });
dwl = (prev.dwl.override { wlroots = final.wlroots_0_19; }).overrideAttrs (old: let dwl = (prev.dwl.override { wlroots = final.wlroots_0_19; }).overrideAttrs (old: let
dwl-patches = pkgs.fetchgit { dwl-patches = pkgs.fetchgit {
url = "https://codeberg.org/dwl/dwl-patches.git"; url = "https://codeberg.org/dwl/dwl-patches.git";
rev = "4a869141fa643d9be792a9aa44a42cf7f7f882ad"; rev = "46021333a10ecb9179c8477588fafd75c7cc7a05";
hash = "sha256-xlaK9xMrc+KDNecsyByRIxXmPEZ2dmP4FQ0bMojsyws="; hash = "sha256-Q39EYfGNTSsfViTxW9ZFLqaw/udqkBc1hb7hEfjmsgY=";
}; };
patches = let patches = let
dwl-patch = p: "${dwl-patches}/patches/${p}/${p}.patch"; dwl-patch = p: "${dwl-patches}/patches/${p}/${p}.patch";
@@ -38,14 +42,14 @@ in {
(dwl-patch "autostart") (dwl-patch "autostart")
]; ];
in { in {
version = "21-09-2024"; version = "28-09-2025";
src = final.fetchFromGitea { src = final.fetchFromGitea {
domain = "codeberg.org"; domain = "codeberg.org";
owner = "dwl"; owner = "dwl";
repo = "dwl"; repo = "dwl";
rev = "d1c2f434983562bd7d2ace15ab0c05155be603bc"; rev = "6cd26568d5b8be2252ac0def36cd194b4fb2d7c3";
hash = "sha256-SpfjQfzvbpDiihziyKGPoBwvp3evgCQQhhjldAE/MwY="; hash = "sha256-ihxF9Z4uT0K3omO4mbzkeICY/RyqvuD+C5JSGWIf6MI=";
}; };
patches = (old.patches or []) ++ patches; patches = (old.patches or []) ++ patches;

View File

@@ -7,7 +7,7 @@
static const int sloppyfocus = 1; /* focus follows mouse */ static const int sloppyfocus = 1; /* focus follows mouse */
static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */ static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
static const unsigned int borderpx = 3; /* border pixel of windows */ static const unsigned int borderpx = 3; /* border pixel of windows */
static const float rootcolor[] = COLOR(0x222222ff); static const float rootcolor[] = COLOR(0x000000ff);
static const float bordercolor[] = COLOR(0x233e5dff); static const float bordercolor[] = COLOR(0x233e5dff);
static const float focuscolor[] = COLOR(0x005577ff); static const float focuscolor[] = COLOR(0x005577ff);
static const float urgentcolor[] = COLOR(0xff0000ff); static const float urgentcolor[] = COLOR(0xff0000ff);

View File

@@ -1,8 +1,8 @@
diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp diff --git a/frontend/widgets/OBSProjector.cpp b/frontend/widgets/OBSProjector.cpp
index e61f23182..a405e9f17 100644 index cc214ea..79b0120 100644
--- a/UI/window-projector.cpp --- a/frontend/widgets/OBSProjector.cpp
+++ b/UI/window-projector.cpp +++ b/frontend/widgets/OBSProjector.cpp
@@ -37,11 +37,6 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, @@ -36,11 +36,6 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
// can skip it // can skip it
windowHandle()->setProperty("isOBSProjectorWindow", true); windowHandle()->setProperty("isOBSProjectorWindow", true);
@@ -12,5 +12,5 @@ index e61f23182..a405e9f17 100644
-#endif -#endif
- -
type = type_; type = type_;
#ifdef __APPLE__ #ifndef __APPLE__
setWindowIcon( setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));

View File

@@ -11,11 +11,11 @@
in { in {
glfw3-minecraft = prev.glfw3-minecraft.overrideAttrs (old: { glfw3-minecraft = prev.glfw3-minecraft.overrideAttrs (old: {
patches = [ (builtins.head old.patches) ] ++ [ patches = [ (builtins.head old.patches) ] ++ [
(patch' "0001-Key-Modifiers-Fix") # (patch' "0001-Key-Modifiers-Fix")
(patch' "0002-Fix-duplicate-pointer-scroll-events") # (patch' "0002-Fix-duplicate-pointer-scroll-events")
(patch' "0003-Implement-glfwSetCursorPosWayland") # (patch' "0003-Implement-glfwSetCursorPosWayland")
(patch' "0004-Fix-Window-size-on-unset-fullscreen") # (patch' "0004-Fix-Window-size-on-unset-fullscreen")
(patch' "0005-Avoid-error-on-startup") # (patch' "0005-Avoid-error-on-startup")
./0006-DontCrashWindowPos.patch ./0006-DontCrashWindowPos.patch
]; ];
}); });

View File

@@ -69,16 +69,6 @@
# morphio # morphio
# # TODO add BluePy support? # # TODO add BluePy support?
# ]); # ]);
# Update RX and Aseprite
rx = prev.rx.overrideAttrs (old: {
version = "git";
src = prev.fetchFromGitHub {
owner = "cloudhead";
repo = old.pname;
rev = "18625a68921873ebe21a7ea8096409a9f0314541";
sha256 = "sha256-LTpaV/fgYUgA2M6Wz5qLHnTNywh13900g+umhgLvciM=";
};
});
})]; })];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -86,8 +76,7 @@
# GTK theme support (basic) for GTK apps e.g. inkscape # GTK theme support (basic) for GTK apps e.g. inkscape
adwaita-icon-theme adwaita-icon-theme
rx aseprite
aseprite-unfree
pixelorama pixelorama
gimp gimp

View File

@@ -18,11 +18,11 @@
firefox firefox
chromium chromium
bitwarden bitwarden-desktop
bitwarden-cli bitwarden-cli
nextcloud-client nextcloud-client
libsForQt5.kdeconnect-kde kdePackages.kdeconnect-kde
discord discord
zoom-us zoom-us

View File

@@ -10,9 +10,31 @@
# Game compat # Game compat
programs.gamemode.enable = true; programs.gamemode.enable = true;
nixpkgs.overlays = [(final: prev: {
shattered-pixel-dungeon = prev.shattered-pixel-dungeon.overrideAttrs (old: rec {
version = "3.2.5";
patches = [];
mitmCache = final.gradle_8.fetchDeps {
inherit (old) pname;
data = ./shattered-pixel-dungeon/deps.json;
};
src = pkgs.fetchFromGitHub {
owner = "00-Evan";
repo = "shattered-pixel-dungeon";
rev = "v${version}";
hash = "sha256-ltCKM46nzZZVJqHzo3V0Igyd4q+uD95fuLMWCi18jbQ=";
};
});
})];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# For Steam # For Steam
protontricks protontricks
gamescope
gamescope-wsi
# Minecraft # Minecraft
openjdk17 openjdk17
@@ -20,5 +42,8 @@
# PS2 Games # PS2 Games
pcsx2 pcsx2
# Standalone
shattered-pixel-dungeon
]; ];
} }

View File

@@ -10,6 +10,7 @@ in {
enable = true; enable = true;
}; };
}; };
hardware.nvidia-container-toolkit.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
godot_4 godot_4

View File

@@ -0,0 +1,289 @@
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://central.sonatype.com/repository/maven-snapshots/com/badlogicgames": {
"gdx#gdx-backend-lwjgl3/1.13.6-20251016.105554-34/SNAPSHOT": {
"jar": "sha256-unqPp0fol5ow2OPp46AmljGbt/b/zaDG8AP2QcKrVjU=",
"module": "sha256-3lbjdtsywfNKS5fxEeIEh8f8EunPNrEHieih8rqJXpE=",
"pom": "sha256-P7DA/UDAWmA+/t4H3EJkktKK/e9+pX0gH4fpljqZXWQ="
},
"gdx#gdx-freetype-platform/1.13.6-20251016.105554-35/SNAPSHOT": {
"pom": "sha256-kTnggHqjEcoBlUTM+K15WHCqKodiKvGPrgnTHuTKU4o="
},
"gdx#gdx-freetype-platform/1.13.6-20251016.105554-35/SNAPSHOT/natives-desktop": {
"jar": "sha256-TJvhHfQ9qRTZCDnOvymAn4PXmS6CziqEKN7yv5ioIQU="
},
"gdx#gdx-freetype/1.13.6-20251016.105554-35/SNAPSHOT": {
"jar": "sha256-qZWM1tkaKatC6U1h/Jgo9fV6/Six9XOuNU4qpVYhzsg=",
"module": "sha256-tyz5DG0UTrK0tt4ZK1BgJb35T5EBuNpj1gZLe6zoCTI=",
"pom": "sha256-wi92v9kAtTv++AZjKT3wJYBeISF98NLNy26X9kEVFSk="
},
"gdx#gdx-platform/1.13.6-20251016.105554-34/SNAPSHOT": {
"pom": "sha256-UW0w1+UTHDD4HaYruY6QVmd/ur/0vHS4wYDZ5hDCEuQ="
},
"gdx#gdx-platform/1.13.6-20251016.105554-34/SNAPSHOT/natives-desktop": {
"jar": "sha256-hCVxiuw/clRgnObDu+eM/OhDnTXEHhVt/gUmHTyzcgU="
},
"gdx#gdx/1.13.6-20251016.105554-34/SNAPSHOT": {
"jar": "sha256-40W5tyVSTXgmSdHtQQoll9OiGhDLhDqRPPWjrrspunM=",
"module": "sha256-4xOqM5QcQy7HCliD3TZNk+QvjI0FWI62x1pKpRNzwVs=",
"pom": "sha256-aDtJJZT/VHJyxd5RKFrQbc32IFT2wk9R7LeDvhBt8v4="
},
"gdx/gdx-backend-lwjgl3/1.13.6-SNAPSHOT/maven-metadata": {
"xml": {
"groupId": "com.badlogicgames.gdx",
"lastUpdated": "20251017222916"
}
},
"gdx/gdx-freetype-platform/1.13.6-SNAPSHOT/maven-metadata": {
"xml": {
"groupId": "com.badlogicgames.gdx",
"lastUpdated": "20251021160202"
}
},
"gdx/gdx-freetype/1.13.6-SNAPSHOT/maven-metadata": {
"xml": {
"groupId": "com.badlogicgames.gdx",
"lastUpdated": "20251017222931"
}
},
"gdx/gdx-platform/1.13.6-SNAPSHOT/maven-metadata": {
"xml": {
"groupId": "com.badlogicgames.gdx",
"lastUpdated": "20251017222936"
}
},
"gdx/gdx/1.13.6-SNAPSHOT/maven-metadata": {
"xml": {
"groupId": "com.badlogicgames.gdx",
"lastUpdated": "20251017222908"
}
}
},
"https://plugins.gradle.org/m2/org": {
"beryx#badass-runtime-plugin/1.13.1": {
"jar": "sha256-IW3RL1SacHD31B2wTupXAaF5Z0mzVerAzkMVLs0DGBc=",
"module": "sha256-Jf4I7QwECTJuc38vDJ/7BhyFQihl53ATdMOVyjpy9PA=",
"pom": "sha256-qZgenE/Me3hqUL+/IW93EBgs27ECjqsGiavMYeS37XI="
},
"beryx/runtime#org.beryx.runtime.gradle.plugin/1.13.1": {
"pom": "sha256-7SsiPX22wuiujLyvq8E96b0kKfwfNMtEFVh0jJCBu+U="
},
"slf4j#slf4j-api/1.7.32": {
"jar": "sha256-NiT4R0wa9G11+YvAl9eGSjI8gbOAiqQ2iabhxgHAJ74=",
"pom": "sha256-ABzeWzxrqRBwQlz+ny5pXkrri8KQotTNllMRJ6skT+U="
},
"slf4j#slf4j-parent/1.7.32": {
"pom": "sha256-WrNJ0PTHvAjtDvH02ThssZQKL01vFSFQ4W277MC4PHA="
}
},
"https://repo.maven.apache.org/maven2": {
"com/badlogicgames/gdx#gdx-jnigen-loader/2.5.2": {
"jar": "sha256-34HyPP1nhcUtNeEI7qo5MPVZ1NJ3CmEC51ynv6b58no=",
"module": "sha256-jwtii5G9Ez24XxUuFZMprPf0tmeDvR32AcNZfcJRIiQ=",
"pom": "sha256-i0dgu2bbPz+ZuEBj7z6ZDWOhzZx81XSlatf07kvRdoc="
},
"com/badlogicgames/gdx-controllers#gdx-controllers-core/2.2.4": {
"jar": "sha256-BNpnYnsaNkbvjyFMkdKWdCp8BVl9vCFnqqsJy9zHdHA=",
"module": "sha256-dxOP5TsOdeRf4dOROsublicWFxCuVPJUR0sizmp6pIA=",
"pom": "sha256-k7HO3nAet8GNZfFei7eds5zzGk6u5pMceIl84NgOMlQ="
},
"com/badlogicgames/gdx-controllers#gdx-controllers-desktop/2.2.4": {
"jar": "sha256-jjkOWcYhHtI+Cm/UAYzvo3+LmGXe5pmVaZBTSWuAHWw=",
"module": "sha256-zhrDRlPnkWGq8Nycm+vdDb1zQW0pHSz8ljavonod9mU=",
"pom": "sha256-2pO01ZTa8EMd+Q7bPPEOHjpGnCgCDHZb5P+fYKD6bTY="
},
"com/badlogicgames/jamepad#jamepad/2.26.5.0": {
"jar": "sha256-sO+RC6Uxyt/gQYSWow2Hy6xGAhsGJUf1tZR+A1Q1cRo=",
"module": "sha256-KGmFPVwJdU2vuY9u6veZLc2Q6K3uFxL/bgjmUgBKflA=",
"pom": "sha256-Up7mQ8lbw+6SfuSnRqwFaOQSnbb5dscD82IjN9/6Inc="
},
"com/badlogicgames/jlayer#jlayer/1.0.1-gdx": {
"jar": "sha256-qrze3C4/pBxOE4hwUj10MzfxiZMQgGMLoaIoVTjNAPs=",
"pom": "sha256-nGCRe2JnOIvFeWpSDswPF8ed2hVGUM0FQdTEE4ghv0k="
},
"org/jcraft#jorbis/0.0.17": {
"jar": "sha256-4GfymjcBQmtn7ZcwNpScbljKW7U+73JAsuceKG0lKp4=",
"pom": "sha256-GN47DZMq+Zgy202DL2g1B/vdWgsMJN1oDoTOb1cYLiQ="
},
"org/json#json/20170516": {
"jar": "sha256-gT835IIPGFTopOtPgN+UvxsfLsbDtyaS8jq5pVYlavY=",
"pom": "sha256-ZMFVQ6PV2yeaIK6w36A0oqecIVn4zUAd6kj/DyNMGN0="
},
"org/lwjgl#lwjgl-glfw/3.3.3": {
"jar": "sha256-vtx1f9KxslUUbbJrdLnL0fz1ZEuJtHsQT6chx0FgQlk=",
"pom": "sha256-fJuPWGrEz36esvNnrphUzK7i2Nf2LiOHxJ0sGvrtirM="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-linux": {
"jar": "sha256-uDBgYrF3QfNCaQiHUUIfGsIaWXv7vQxsYSJjAc3nRLg="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-linux-arm32": {
"jar": "sha256-3Z1NZxT8k1nUfdoNR8HYyLvkmQG393wj/Kepyb/CmFg="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-linux-arm64": {
"jar": "sha256-zGE5yD95nQ4UhOpMIByM5tV8jHokSlIXEWqAax60F5s="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-macos": {
"jar": "sha256-qJtVNirsnlo7vRNkYBu4WxR9trrmiJHKmiMtbPstVew="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-macos-arm64": {
"jar": "sha256-uUUdZ7wXyQb7goKlUi8liwIvMFaeC2LaAB1ZChe0Xhk="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-windows": {
"jar": "sha256-mBVbRR38b1hQid7HehL5wFeJxNzrjaRy+dMIFgEBpw0="
},
"org/lwjgl#lwjgl-glfw/3.3.3/natives-windows-x86": {
"jar": "sha256-lkZVXUBfDSo6lXa1BvV8FjKvZPaaiuWMsESK4EqceCQ="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3": {
"jar": "sha256-6Z4xJp5meKS/xi7yTFCkgcAcvdAEhh7Omlm6EnaMZRY=",
"pom": "sha256-IJuMfX+cGXLVyNX5zhmjUW/5BxRD0N+Khm2hNDvS46k="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-linux": {
"jar": "sha256-TkoT1wFdQmBbvPfvn66tRt6sZAnkN3qO1K6oFfFGNLM="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-linux-arm32": {
"jar": "sha256-5IM/wmIeLnMCBXPmKZcJIPHNHfmE/hyc7bszSNzDeG8="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-linux-arm64": {
"jar": "sha256-44PVJBwNR/QBKnU+C//+Ra/DDQBiGbm9iQN1ahA3ibU="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-macos": {
"jar": "sha256-ICTapcaqQHhmQUi3OQ+4sjHyNw6g4X1AeJTbp+nlZOw="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-macos-arm64": {
"jar": "sha256-Y5Vuokb/ZKqpzg4dbjzK1obPv5N9H81suNX0T2OCFgw="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-windows": {
"jar": "sha256-mUnI5JmYvQyHjYQohAEfE4PihRAFCR4LK897dnG4SOs="
},
"org/lwjgl#lwjgl-jemalloc/3.3.3/natives-windows-x86": {
"jar": "sha256-2bTgbiqEIFWD+wVEDSI4OFqRywGgYN2x03YiOuIl8Uo="
},
"org/lwjgl#lwjgl-openal/3.3.3": {
"jar": "sha256-rg6Cdnys8Ikh9Xj7qdhHU93rAM6toFEKK0qIK+KPv5U=",
"pom": "sha256-f6aiEbvk5FuCmHU31kN6e1KUM07TrBbLhElV70PV5w8="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-linux": {
"jar": "sha256-kDD+2SinHqwv30zhZDzE7HJNhxDjtDe9znUL3J6YKyo="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-linux-arm32": {
"jar": "sha256-xyXRfh5GJsf0O29NCKRnSW4JECXnHxn0+x8xN8Tabmc="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-linux-arm64": {
"jar": "sha256-q/OSSHs1h9qJtlUlAAjfSjYKL9Xh7gCr1h9/UpFSBaE="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-macos": {
"jar": "sha256-gmSuMqyfQTxPRQGGPF9udXam/avcXQUtMoG7rMM3fx0="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-macos-arm64": {
"jar": "sha256-OZJGOhao3xn2MRewiD6tDtko3U3wF/VbXk4St6JwSJo="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-windows": {
"jar": "sha256-49p8PbJcgduNQl7x49v6FQALBA1mnwCLCBPJQzOslsg="
},
"org/lwjgl#lwjgl-openal/3.3.3/natives-windows-x86": {
"jar": "sha256-hSyk42sf390++2zkLwi30PlXsExLz714BXsMeZ85kjE="
},
"org/lwjgl#lwjgl-opengl/3.3.3": {
"jar": "sha256-UGLadQ5ffsieJ+i2e31A+oxLFokBWeNfgoEWzmyOyh4=",
"pom": "sha256-RDkltWQq0xjUnfrpe66c3QnkkCWzAqlLAQf8iIm+bN0="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-linux": {
"jar": "sha256-2COpLGooELURLaME3MarzUyxAnBvdPfpNKIjzqIFElA="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-linux-arm32": {
"jar": "sha256-BbGiXD+3Ipdao78siIQ3I9puEFmhktVo3e/AGkV/qkc="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-linux-arm64": {
"jar": "sha256-Cyt1Mn1HRRY0EjNI1VUDrgPlFVGwyIea6QyOS04aT5w="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-macos": {
"jar": "sha256-TBBz0OWumZZtDvHWp3lXWEdtJH2TD9xewYZeOMuEfM4="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-macos-arm64": {
"jar": "sha256-8bPx3oP5c6uuOkvDLbWyKa5dVcyA27xffIQYEv4gtf4="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-windows": {
"jar": "sha256-9F5fYFlrA7Lj2LmKEjyFXr0LUVTIFV3CpWuJDMyQdHc="
},
"org/lwjgl#lwjgl-opengl/3.3.3/natives-windows-x86": {
"jar": "sha256-nZnSA95OMShsrnU6HfuYE2fJNzTxlEZEunG+Uhs68sw="
},
"org/lwjgl#lwjgl-stb/3.3.3": {
"jar": "sha256-DP96pG6p1w/MIIVwFSk+qA+/Ia3Kw0YAyE2puBpEypM=",
"pom": "sha256-jR2kP3mIdcV5yokH95rk/D6tFVQl6pVVxvqqsT1Q5J0="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-linux": {
"jar": "sha256-xEiQaN3G3ESxAwcZQ/gBotB2Y01LdNtHCSf4SjCCGeE="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-linux-arm32": {
"jar": "sha256-/WYDpBauUJJiAxV7ajQOiPX60GyAjvQcsDUBcTn+Lzw="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-linux-arm64": {
"jar": "sha256-F/DPG45SLuprS5fBkHCznlT1+H7YT7iVhXR+QPkF4ds="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-macos": {
"jar": "sha256-MpN6NS20usPpKqG72uKYipWOS5B6tbVXdky6gtsgupc="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-macos-arm64": {
"jar": "sha256-sfZYdf2d3SgJe+YHYCniuPq168FibiHO92FhHfynFcI="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-windows": {
"jar": "sha256-0Sq4Zv4RaekkrFtNa7d2eueEKp/IZSeYaCwAabtz/PI="
},
"org/lwjgl#lwjgl-stb/3.3.3/natives-windows-x86": {
"jar": "sha256-RkJORUWXM7JsSnsN0mlSCctpONr6OpASxqVoLJSixA4="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3": {
"jar": "sha256-7gUVBU7hmj9AiEJv7p2HnrLuZXsH5QZOTiyFH2rc8Us=",
"pom": "sha256-LBvRGfQeZaVEYT+R5xYOAGuBkW5zpu919UkkLMTzvvI="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3/natives-linux": {
"jar": "sha256-oHb6BaTRdHYuq1hS7nLCnRSrEKVlTyf7AGZO8bUsDAU="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3/natives-linux-arm64": {
"jar": "sha256-gNNOdtFcBJUXRBSIMpCDkdqLFPaKAwtksLQHAqNzkdc="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3/natives-macos": {
"jar": "sha256-RGXdRv35MJwM5kw1KaDaZ5L7ZxHDKB6MXbqTXmqb/Dw="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3/natives-macos-arm64": {
"jar": "sha256-b32XlBRlHjQ9yLiz+q3g4tnk/fmdVl1WI+EtQNuuSiI="
},
"org/lwjgl#lwjgl-tinyfd/3.3.3/natives-windows": {
"jar": "sha256-AihZEfHIgXNfpNDrFB/+qv2aK7k0nZj3wfuKnLScD1g="
},
"org/lwjgl#lwjgl/3.3.3": {
"jar": "sha256-3Jx7LUjoOW1oiV+JAv+gHkYlPeRN/pJ1M/8JRX6/7sQ=",
"pom": "sha256-gx1Gb8AWKUUrRhNzEeFYI8CWx9b66VKYxke5+/XWgfQ="
},
"org/lwjgl#lwjgl/3.3.3/natives-linux": {
"jar": "sha256-5mNzjFGaBvbWWYgvqOTgmvfxDpIZKe5cxUp1h/Yu1Mk="
},
"org/lwjgl#lwjgl/3.3.3/natives-linux-arm32": {
"jar": "sha256-cNP3SNRawTWDKplV6lGcpv7Tqn0dR+tnR8uHk2hGyUE="
},
"org/lwjgl#lwjgl/3.3.3/natives-linux-arm64": {
"jar": "sha256-OXp5pdiQcobUAY0CbLw3NYxTu7aqvDoVNPGf8jt/hVg="
},
"org/lwjgl#lwjgl/3.3.3/natives-macos": {
"jar": "sha256-ApTuTi3X72vvr/r8C7maKom3YHC1zYMC89dWJLZ4bQM="
},
"org/lwjgl#lwjgl/3.3.3/natives-macos-arm64": {
"jar": "sha256-UKycoJ5Z8FHcrPTcCyFF6ekW5qsUYzt1aUIxv+WTFKg="
},
"org/lwjgl#lwjgl/3.3.3/natives-windows": {
"jar": "sha256-XuY6GRh+/lu4dH/ST3sTJX2zSN9a1kEROjaV5D8hOVk="
},
"org/lwjgl#lwjgl/3.3.3/natives-windows-x86": {
"jar": "sha256-IqIjOCYlVOteEzyEQd7u2shNoILrO6yE0DLaT682l0k="
},
"org/sonatype/oss#oss-parent/7": {
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
"org/sonatype/oss#oss-parent/9": {
"pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno="
}
}
}