From 4fda94b98495c054503d881c03f92beee181c549 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Gro=C3=9Fmann?= Date: Sat, 16 Dec 2023 22:41:06 +0100 Subject: [PATCH] feat: acme/ddclient/nextcloud container --- flake.nix | 3 +- hosts/testienix/fs.nix | 1 + .../secrets/generated/dhparams.pem.age | Bin 0 -> 1331 bytes lib/containers.nix | 14 ++++- lib/test.nix | 9 +++ modules/config/home-manager.nix | 1 + modules/config/impermanence/default.nix | 40 +++++++++---- modules/config/impermanence/users.nix | 2 + modules/config/net.nix | 6 +- modules/config/users.nix | 1 + modules/services/acme.nix | 29 ++++++++++ modules/services/ddclient.nix | 14 +++++ modules/services/nextcloud.nix | 54 +++++++++++++++++- modules/services/nginx.nix | 2 + nix/hosts.nix | 1 - secrets/cloudflare/api_token.age | 13 +++++ secrets/secrets.nix.age | Bin 4204 -> 4262 bytes 17 files changed, 169 insertions(+), 21 deletions(-) create mode 100644 hosts/testienix/secrets/generated/dhparams.pem.age create mode 100644 lib/test.nix create mode 100644 modules/services/acme.nix create mode 100644 modules/services/ddclient.nix create mode 100644 secrets/cloudflare/api_token.age diff --git a/flake.nix b/flake.nix index 1794d4c..485b432 100644 --- a/flake.nix +++ b/flake.nix @@ -122,11 +122,10 @@ inherit (import ./nix/hosts.nix inputs) hosts - microvmConfigurations nixosConfigurations minimalConfigurations ; - nodes = self.nixosConfigurations // self.microvmConfigurations; + nodes = self.nixosConfigurations; inherit (lib.foldl' lib.recursiveUpdate {} diff --git a/hosts/testienix/fs.nix b/hosts/testienix/fs.nix index 5969322..e1f539c 100644 --- a/hosts/testienix/fs.nix +++ b/hosts/testienix/fs.nix @@ -115,6 +115,7 @@ }; fileSystems."/state".neededForBoot = true; + fileSystems."/persist".neededForBoot = true; fileSystems."/panzer/state".neededForBoot = true; fileSystems."/panzer/persist".neededForBoot = true; boot.initrd.luks.devices.enc-rpool.allowDiscards = true; diff --git a/hosts/testienix/secrets/generated/dhparams.pem.age b/hosts/testienix/secrets/generated/dhparams.pem.age new file mode 100644 index 0000000000000000000000000000000000000000..1e96e67f08932fd6aeaeee076e1b37eaf869cb0d GIT binary patch literal 1331 zcmZwA`B%~h008jvr6tR>tSp;K`m&Uv9D*{_jZ-cK6$DI7?k^yxz!%UwvsX(ywAQlL zvQqP5tvu>Aon6+ZGjdb%%DI_V>PlB;`Lwmyk9%*Qf8Zlh$lx-q#Awr-lsavM&ZvmA zAR+L0C?AEvAaPKlz^qBvb7UwLf`!r}aRv>5WsnVg7}r2j0#psnuBPJDc9ejCfEdI$ zyv%GcSgb^TB%W_cp$N#DWOEXpK~J?%tT-D^%_j0VV0L=)$3d^O!1X8$7Ru)&tGRe6 z9tn#{lhGyA9F-2RlhSlNrcp{HCreWp@+g*`Yyr_}DwF`HfNI zWrp$7Y$O1%VTmL%n#}|BN-9B&RY?FfTJoPOouW|EKq%g#6=8`g89@z3M_Q9PQj5(V zMIj@s7@Lf3)S*%p2(d;Ng&`vuAVe-s<;i(OCQJ`fvuy^k3?%SWIgye?Hp-;Mu>~TS zR7XW|Ni;0te=ks(q|Oo30Ga|M$`N2TK1Hs?;eZ%~gdQmpB(OzNtul%Nq@qk52#AfA z(xnoqnS-OzO*W%GNgNfOBju`+kR(7ajs);%0yTl5HlVp5FRsuCR~TiY92qoyXDp0m zRnj2|NGXB?i!sPxI*S~Hz~OLcWCDytAanGB=tK>UATYBe3^ZAiZsBnhXeq^-AmdB$ zJU)SB>qTge3 zez`74nA$)oIn@G&S1+)0@3k-0PBt-PC-|3BDn<{P%?Xt!CKua2$A%S-o$Q??BVSgv zEY**5re_PXtd6%KYM33JMPK2emP}_p+kj78&R#h?QqvH09rY@3aSv+nd5Jj>EMEYa z@l%1l?~V*q+iwS)zjXJG=@MkZbnx~{Z{Hcl`nsiK@jac21~p%{p{kW}cU{@Os@Fw% z;Mt)A=X%|$k)}eoJ==Z7`x6h(Z@c(sZg_st;3Wgrb*lMG;>DdARr?Ez?%bSQx9A;E zpGfKZCrmZBr0~cM(gZq@!x0NTdr$~OpTpHyu*)#J_1yWnjNAnn;=bu=^Nzai2ZmdPd5^aqm;5%c(zN^A{Na!r z;n#n67Ojn`%epz#jhOHO;ggh(J_>J!TgUQ>>l5JB)@A!Zd zQ0VvQ7uCc@sP9?K#jeMh-Id%AutAnCX7tST_)lG#m)rAtYEoLC|7G%nMLcSEg(c=9 zeR{@s%-YK*rgBU7j(Sa1cpln}`Slk?*Yf(f#=VXTm;XbWaLfnwUKDiS7|`TgD1Gxh z9q0ebQM`JvY~#eBVDic85?y)bT!w2@?Kgt04V8!S2ZVpa(ws-HM$;Y&OEYW63$nFb z>&Ogw{)xlAamKSetjh-gTegoa&`SH7Tyg!i%%rx0H{~~;E+@kbg?@V4Do+`eRbdi5`rtZLoVeRO63x*oHZA4>k_bYI?9$U;q X25519 j1vdwUZ+o5coMFAaOCyiS42rLq7FPX6xwuWmoHcN61U +m1QEYj4NW5IdNsFh26Uhwe2Sg1ggkvTYB92S4B2lC8M +-> piv-p256 XTQkUA AhjsxoVBz3h/1Sj+cwnT7gpcE6SDMhNOBMU9nP+gfC5G +a7E3dolF4QaxTVpJBOKA314INK32eTdDykDyRT+/8XQ +-> piv-p256 ZFgiIw Ah49xwjTzvroi4R90URbbE0yY15w+OvUsWZ2cQdYHs/w +4i6XZ8lwOeWinlU1IiCgUBTSWMzxuPyvYKRbz6GqNUk +-> piv-p256 ZFgiIw A49Cv751h0WJYL6qPceFVwjbGVpF668SGKVjHq/lQ4Rs +AAGD0jOCHIOAIBk872SJwe2mCx69xn/1ZjiswebgU0w +-> K("0$@8-grease z`/W }"_xiVH <~Bj._ + +--- /NUrs98fD72LqCIYVOzrUhFNhxGivAEOZ9pob65I2fI +8î:(#­–¥aô[8@BÊ4èÝ|ÍC7!³>Ù?¬Œ›`5á‰o‡Þr õB´ˆ°y`óAIJ;)÷Å&“)@ÝÎB²¹Ï¡ñ´¾Q \ No newline at end of file diff --git a/secrets/secrets.nix.age b/secrets/secrets.nix.age index b7d4eb4b59b5652946d24dcb1a10918c8630ea8c..31c01ea685b719bf16d451978c5507d316c08a7c 100644 GIT binary patch delta 4235 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 delta 4176 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 a2XFz0n&($kYWDg<(7;#|K{@gp8OLeuZn;MQ