From 8bfc60e2b324e8f948a22c977686967bd985490e Mon Sep 17 00:00:00 2001
From: Myned <dev@bjork.tech>
Date: Wed, 26 Mar 2025 20:52:43 -0500
Subject: [PATCH] containers: add open-webui

---
 options/custom/containers/open-webui.nix |  38 +++++++++++++++++++++++
 profiles/server/default.nix              |   1 +
 secrets/server/caddy/Caddyfile           | Bin 4609 -> 4688 bytes
 3 files changed, 39 insertions(+)
 create mode 100644 options/custom/containers/open-webui.nix

diff --git a/options/custom/containers/open-webui.nix b/options/custom/containers/open-webui.nix
new file mode 100644
index 0000000..79d4074
--- /dev/null
+++ b/options/custom/containers/open-webui.nix
@@ -0,0 +1,38 @@
+{
+  config,
+  lib,
+  ...
+}:
+with lib; let
+  cfg = config.custom.containers.open-webui;
+in {
+  options.custom.containers.open-webui = {
+    enable = mkOption {default = false;};
+  };
+
+  config = mkIf cfg.enable {
+    #?? arion-open-webui pull
+    environment.shellAliases.arion-open-webui = "sudo arion --prebuilt-file ${config.virtualisation.arion.projects.open-webui.settings.out.dockerComposeYaml}";
+
+    virtualisation.arion.projects.open-webui.settings.services = {
+      # https://github.com/open-webui/open-webui
+      # https://docs.openwebui.com/getting-started/quick-start/
+      open-webui.service = {
+        container_name = "open-webui";
+        dns = ["100.100.100.100"]; # Tailscale resolver
+        image = "ghcr.io/open-webui/open-webui:v0.5.20";
+        network_mode = "host";
+        restart = "unless-stopped";
+        volumes = ["${config.custom.containers.directory}/open-webui/data:/app/backend/data"];
+
+        environment = {
+          PORT = 3033; # 8080/tcp
+
+          # HACK: Offline Ollama endpoints result in an unusable interface, so cap timeout
+          # https://github.com/open-webui/open-webui/issues/11228
+          AIOHTTP_CLIENT_TIMEOUT = 5; # 300 seconds by default
+        };
+      };
+    };
+  };
+}
diff --git a/profiles/server/default.nix b/profiles/server/default.nix
index e0957af..be71cf0 100644
--- a/profiles/server/default.nix
+++ b/profiles/server/default.nix
@@ -22,6 +22,7 @@
       miniflux.enable = true;
       netbox.enable = true;
       #// nextcloud.enable = true;
+      open-webui.enable = true;
       oryx.enable = true;
       #// owncast.enable = true;
       redlib.enable = true;
diff --git a/secrets/server/caddy/Caddyfile b/secrets/server/caddy/Caddyfile
index 889b9bd999a4d37ff9a6bf2533d1c0d75f011f9d..d050cdce72cdea269e97f4e262efde231c994e79 100644
GIT binary patch
delta 4667
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

delta 4588
zcmV<I5fkpvB!MK5EPr!MR#|IjWKLr-OLJ;UbwoojO*d9`NKA2IRd`r#YI9;tP*h`1
zQ&DwmGzv>fOlD(NOiDL#I8|wKGFo~oVpnKWOf`8&FJw4uI4f&sRyAgCG<q*ucM2^&
zAaiqQEoEdfH8n9gAaiDTdT&u6D=Ri~dQy5sPgiX(Q&U7`Fh(*(Vs&;$dU;ZERC+Nl
zM@(x*aYQzBL19=h3Nll2XiIlUXlyb=QE5bNPclYtF=R1eZ)`SIaX5KwF*$8=b4XEX
zNk>{uk?|LQVPSP;Vn%moMNejKFgG}Lb#`SnLU1;5d2Cigc4=Z^aWi&8V|7_EO;TeD
zQc^T?cymj1Wm7M4G*@C(F-A{Ud2Lo>S9wrHb5&1aY+7q^c6LH}Ml?+dEiEk|WHM($
zM=^6UW-CT{NJ(~jQDSW`a9T%9Wp`_Ec1%x3cu-G&D`#wXc`<Qg3b2y&lEQZbY06aS
zj8KiZn$gi<DO`u3y8#O`gFY&pl&5FU#c9xeYChrB;J52UYo777S}V<D=qWjCE^Khf
zb5O;Z{9f0V>X`tRLunVTxL}*+h(BZ9emur%EMYF8nKL*0pS7Lo!6i@KGXQI$A|YnS
zzFwSv)WnWNpwwyKo?}t^(%)}&fyT_`eWl9=lu9l%ho?U3xeO6a19b6dLa#j4k?y7s
z#Y0DUUy9R8zP;Ns&Fm)i!G87t+xhcBF(=_jj8OKiU*SHDX>au2w5X;T1JY|BG*pnL
zD4df1^^)8G!Wk2KvLv?fT-jbxB*oP)`A$xMqIyokVkRlr#B+BvQ`}pE@i~JMMalW-
zBja_ss~(4MpP50(nhHv&oT%EN>QRBG9BV+w<1d>(m~cH?HS&^jyh=yQKX1)(N>un}
z`w`_(WG?i=c*5iOwoS2bj1FDsW(pMKIw$E;J~49(%m`BgNdmNrPa9;j=CS4`Vt-11
z-fR10v7u)D+tG%(1;d;E_C*3>Y!mzGsuWWDthupp8?7#fWF#l{EQE7dSM#EL8$V+q
z#|Po;v#o~i58Eg&jTxuFqrT`eWDRxC6ZeZaRXlh*lhT_h8H@vohEkV*aa#1%g=6Y;
z#$gVC1`(xh4@!qb_spdOvUP$mo)pA?I4}CqiNP|-XOUj*1DzO4z=~i|>>I3|;vVZC
z!FrCO)!t1F8$l{(2P1qPXoutba0KHk5wgz4|9GYDgyDcun({P~Qe0OKIf_By!sVFY
zN-P`^1_QRc<sX9|O7x#+-WEc<G7X*I;6f78R%LQvYK|t__g?L$2FLZP`{|i~VRkTN
zQybBz<DC$YGb!xOQnT>L_b-xkIELg7Fvdj3()R9q9nquR<oNS1bpCinsb5`VYdSMH
z7(4-yun42U(Tez`rK1UgG~>S9e($yM7aCupefUSa)6Zs-=AyRIzt+(?Mx!^f;2OB|
zw+l@PAi2Hbkk!O2H3c^wo=bUur+J%1P;t%`OCOZ$&@c1y^WeX!+2sBOnOlZ+jR93V
zdFef%_q%8Ek3V%qqDkXsP$q)m-e;byOitky=$kj8tFbjV!>K~~iG<V|c+#39G0la4
z3ZOzmnR0L9Go0+#>svq)q{5OM&?5+<p33r_#zjW8MHWD##7X6J%N8boN(M`I_Xz5v
z!|q&uaHV0uy+)gkaNnf@VZE9YDlAld4N98^DI_HSpf%M~xifyUz_kyM(lR@9_D&mQ
zENoQtn(%Q&$G|Xk@f3nUewk903#Dr{VWbOoQ_@0{6*2XQ=3mhl%m`sKKc#<y%&i(7
z_|#pli<2d#x|2rF>Oh%)%)O^D$W^0H%EO!arMT41KQzk!b~=FknVF<^EoTZm&}OCo
zcSj}^^w<pxE#^Um3cWW1&!UN`m9C!Uzn0b<Ad`;D`WBermj@D)$pE1#$Jpq{F!^N2
z9E#<YB^~VU)bg>L2VcEBXdJ1Ae^J9V%I18N+T;z@UH`=fC*BQzahzXpUu>U(<WbVL
zE)O^(`z>r662EvFZS&1uVuw?_$5o=>LYaP((yn5Fba3h64RKCG`s8)?IcQgQ%D+uu
zsMf_W&oP*9UT3k^Vm)`(O#5FM%ZTKIT3S`)m$szZS;UVU++wnqZE>oBjzR73x+f1P
z%Q#GC;gEf2p-i=ZlbjyWTNq{jLkcH|ZU5$B-ZF6*E#TDZqxUG<cWl<Cb*sh^=?`=Q
zb3HEaRZ6!WL=Cap2G?u0n}B?sm=r2i>^G)=dwIO1y-Vl4A6@*uf%FvRHNPF1zdJ37
zS{?HFI4mIPkY)=&<E;Uh-%xHJ;}j0_llsaub}VSRd|VEHeqf^OO}=+qhE@|nLj@J0
zdO*LBMkZ4{2P)czMd6_<|EN5`%HpV4Bq&~N0Vb{a$Tz0J@yI$VlA%Xg=M?&dTVBj>
z$MTa)mi50tETWNc8HHmieQ|Z~0WPEpo#yr`8_wR#bF&+bpGC&!wh^YfEVcs%m13*T
zDQ5?gp%T1*)`I&+P*Rs;_FXr=A+HT=Gx>shQKU<`xF)!U#%iKeHjj?gYdZO}!H8f%
zzL<Y^?Q{5-0B!Xb%}Rp1HR9WvT|2lNP1^dTA1{sBX0*jp?*Q+geix1K@RA4@8u@k^
zno){_ww_hu%`kATY{(NReY@)cc}~L9bn}MrFaY;|o&z0CIQbwR2jxOq3{->f{D>!i
zmm+RiB@#7)%=Ko;a=Lt;n{RAbZvyQpSo*kf5m-?O`XhLz@ZdR_ZX!q|q+raFB&tsN
zTCvyQ)6WN8#6TxQSGCjDm*hUpgBq%IkUCB{J3NRHm~_Yi!skuA`y+8Ol@_*V{~)4)
zyC%PX647HAleZf6%qNQ>DDF~dIW5N8Lf+R8vJNJpU}DNZ){qnr7kr3PVMLk*1(==q
zM8UCI&kyExoUZy};Q7?w#nrrKWQ>RBt*wcXhGlU=%YK}<WV=;~C;(%!gTgqhtmuqa
z?{DJXPPmPy!vM=iRA{e~`Zfksd<J(SOKJ^&)s3xN;b!?~FJYbwI0CWjYn}*gJq9e#
z3Tu<3K6l|Yl&)YbjVS{#v3wci<HFt`1IMu_lZ#;o9#~i?$Tq_rW;C>?ElU_h(t!%i
zUi6<<GH5HBjoQC_WY|#OS?HnkmlA$u%%HjD@L3-Y)y$ulV|o9AOoCu1NmK-Q2N3*!
zv=<<bXlvKkgiM3)L_$=#7IHXKDCa77ThefIaPbr_RXGMb10l7!7$j#g=u`xOUodL2
zT0GK2zu`KP##%<8#|RV=4el%buFN&<d4=77{iRZ6$>T=YQG;AS)!r@xIIib&GwhH}
zB1KA(4J@IV5VZD>;AWpUtpANa%6FcBUKENZn6X5<%qi&+0%g~{)~uf_S;_O$E<CBY
z8^Go6@@tp40D1Tgmy@_D^X*F*q6VyrpLYtqS-^_Iju1IquQW@)Ta{0m4Ki!W^NnvO
zgz^Md|8TQks=DQppON{LF@%C1N<Z00?NW<VB#~8;!IB>+<<a`QlqlC$DP-4wQfYTm
zz-6cN_Cxsbgqe9v(d)mwWORUp0>@fk`2c0QZsddJ+DpOci4171j4LgpF^yK@y467X
z5BZmPw=4@k+AX82$c_tNgS#-C4RD9*A4CurRsbvaY(Al4Wjc4YaoFWRW`q!x!IbZi
z4<nl=j$x|yyf%V0q0W?x`odU$_hqm5DaBy$En$JzJ_yY&NbPrA`Igoo428nxlN0^!
zkQH8Nd5E-6X$-|x)2G3dy1$$0<t~?11TPe&T~MY4?_mNM58&O_t$0cLQb45tEL+~d
z427fnJ!}ubpc786b<UEI*vL9D7<9MCQFa`JrK5=ugsw!CdDEo|cPQC^)_NS2zBIOj
z9drOkztqaA)}&M5?2;#_e<){OQJ5H^FSP7zi)}Y~W*l_sk&c?<g(F%!UC9|$lCrL+
zKFX!vvzXIGMGuM|POU;H!gr;tzCY#H<-*1l2ai82_h5v#Ab&d@yi$5IJb$jrs7@VY
z&@2>CBRYLr(v{WcKdoPXmrw6W1_t*E##!S;BOo9J7PB=!DC}WZN#&IV(jud|zRME?
zDs{;7RR$?<>D=Sozz&oyaM;fQ<;D*|!%X+zZh|O5OHsvSbl-l<mVo4CTQVh+umSnB
zb)v!I_<9HJIpL#;?cD8rbeeWy=3=YJZ&AL1<oe_HozngQ=j9B4u<H%O`&R_8vW!f^
zp(Z6zrKXa}tyneYEPJ^(=Rgg&k~&iQ6t=$ZPBsYd&CX&#Lkk$QPXZOr6I2jHTFXd+
zuw0E@U#&CMwe^6LnG~h|09GzwVb@nVjy3iuI*|+N&9FW<4P#`qc#(S^zR}R>2i7ia
zvSz1ha1b=efrwRq=XhxZf;VjMr-VETxu@_2Fvdz9I?i0qDO+Iu*PtRi)`6%hIQO!_
z!NR_6G_qjqGTYGM`n$1NkaJoe^rEc+3Ds|(@<w9Rm*dED3_5Bxs#n?~4w|Bp!qg-8
z4GH~=Uf^49<~?XU+d@~O+6UOG+(ABnZ_ShnzDM4PTXzV5o~l>Uql<u1rONQ$k2JVT
z{}Vzt<tOD0Zp5;SA;Id}XnDqaBiWFP*AoPPVMRcQXGFLzQ4Svoe84bAA#H^ao|JD8
zqb^X$Jur9RAi3d}KuY=%SUsDc0IT@9I<!E+{wS^(N1$gSkb8>Yt7gA>2;Hhuoi_TU
zFRAc{z!G<VeBBP*bCf1|*DPq4ng$e{dy!eC+EP55YcLZIU6?6OJcmUne!r*6xS<@!
zs6oboSVaFx+1roW=H${<hdSf20-wEpd2_XfDqG+Cm0o7Hjpf-zN4G}BQqXy-*kXIa
z0Ip9B6dwSM2LucR_5;tc)rfeNVzfA<i6$MGN&S6)ba4u@h}8R^h_&FDp2cUZo0hNM
zKTo@QV6{2CLB;W+Fv{X{zB@uUicsF^8sZwPu;wth9Q-QGlcJzI8xY0J5-J>fqU1X(
z?R`&lhb>U?pghNg?1H#TQ9y-)n0Jg;Ry)-Pe`Ta{HolSy+b;jJOy=?E5<ITdJI_Bq
z+CdI~M7A88EJp<c3UOt!)DP+_*fGxX`Lp~W#IH1@)>JkCWGwV^KZxA0xS(wpMIhn5
z=tF=N@lZP{l@W7>_%XDy=f&N7KPvRZ2EP&6E%q^%2tJonZZd*L;)5<V+t_?FRcO%x
z4yB}v%@5T8h=9M8>fP-{#GdRxEzd`M=-};ta7=AteLGcQfxd*zaen8;ZjrH;*?F+4
z2%G0F5*&CBNigdh0X-nN7BnR|-^)Ih8!L!gp7>??s-zE9M(ZsyW{P}PC2n*v8vxB4
znx5ER;v_Kk))10{E2Fo3!YFopkom^~qD+WMcc(^Yd#z13g}IAvipk`v*>O09N&#|z
z;8{*JK@oxisD@-6Nzj6x!s%#kjs7nT)qK3YRyxg6n<O!s{$$>c|G=h#y3%|s`5Z|%
zjhXh;Dn$5X@(eJP$EjLt)Xlw+7|B*uF(2c*^&u_^fkFL``5OtZq{9szx03!jjAIiN
z$q-(p8y0P$_`Wu6v<4`_+6apw50&(PPI_FOuM4%!N*^ZDi|fIb6&8}B^@0EGgez0O
zZ=V2WX7fSoe|m2W9BzsS*?%{pBLYH{WxDx`C@148;nfaA4Au?3+8&s6oJ(c-m9=}S
z%FX%VnEgUyg@fL@ffOAeUG9-0DJ}+a9uH0^C<(ae;@;qB==<Df;9ggVh%LZ>LiIfv
z^ZzhS@PHRjLt=YWAasn)D;rpLs7l+k*MQB@ik3I@5M}xD5=4ob)~&_YzLr!>2=uf0
z6PL#N&`XH8?<}=g5%%Sj<UsUvcN3X+n3n7sPOI%oKc1r>Z>@lU)l<p$hK>sk@zIzt
z;XTpcZ048GvM%^fm%$^>;)nx(ddqO8N%-JoKF(4d3L<f}bWe74*E)isj%SxRC`vw&
zOzo7qv+b3Pf^21-BePRw_?*u4W#0I0M<7I8d3-R^W1C5_n`x0R$6}L8`@&pgUDR_*
zRbR@0n=z&SVh0n}Q`V22dkHpPGMUC|<YpBw_<W>RQf@q)jN<99)g`|hc^tfRN5r?1
W)|hh3r_fc96o@gVZ-kFnjstaGjlh@y