From 07b6b0fc08d730bcf7371c8ff4a73d4aec161378 Mon Sep 17 00:00:00 2001 From: janabhumi Date: Thu, 13 Oct 2022 23:11:12 +0300 Subject: [PATCH] add mail server to magenta vps --- .gitattributes | 2 + flake.lock | 57 +++++++++++++++++++ flake.nix | 7 +++ machines/asus-gl553vd/default.nix | 6 +- machines/default.nix | 4 ++ machines/magenta/default.nix | 19 ++++++- machines/magenta/mail-accounts.nix | Bin 0 -> 865 bytes machines/modules/common.nix | 9 --- secrets.config.nix | Bin 1724 -> 1907 bytes secrets.nix | Bin 176 -> 199 bytes secrets/mailserver-users-family-passfile.age | Bin 0 -> 1469 bytes secrets/mailserver-users-jan-passfile.age | Bin 0 -> 1423 bytes users/jan/secrets.nix | Bin 1627 -> 2166 bytes 13 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 machines/magenta/mail-accounts.nix create mode 100644 secrets/mailserver-users-family-passfile.age create mode 100644 secrets/mailserver-users-jan-passfile.age diff --git a/.gitattributes b/.gitattributes index 2563acd..f3daf0d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,5 @@ secrets.config.nix filter=git-crypt diff=git-crypt **/*.age filter=git-crypt diff=git-crypt + +machines/magenta/mail-accounts.nix filter=git-crypt diff=git-crypt diff --git a/flake.lock b/flake.lock index a1e43dd..bfef15b 100644 --- a/flake.lock +++ b/flake.lock @@ -42,6 +42,22 @@ "type": "github" } }, + "blobs": { + "flake": false, + "locked": { + "lastModified": 1604995301, + "narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=", + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "repo": "blobs", + "type": "gitlab" + } + }, "cmp-luasnip": { "flake": false, "locked": { @@ -246,6 +262,31 @@ "type": "github" } }, + "mailserver": { + "inputs": { + "blobs": "blobs", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-22_05": "nixpkgs-22_05", + "utils": [ + "flake-utils" + ] + }, + "locked": { + "lastModified": 1658267644, + "narHash": "sha256-NJRe1rnlF112eZwxNASlRL8/ghwD8g+lpHIYRkWQxC8=", + "owner": "simple-nixos-mailserver", + "repo": "nixos-mailserver", + "rev": "004c229ca44c069d93c92abf67ff1619fb508c6a", + "type": "gitlab" + }, + "original": { + "owner": "simple-nixos-mailserver", + "repo": "nixos-mailserver", + "type": "gitlab" + } + }, "myneovim": { "inputs": { "cmp-luasnip": "cmp-luasnip", @@ -344,6 +385,21 @@ "type": "github" } }, + "nixpkgs-22_05": { + "locked": { + "lastModified": 1654936503, + "narHash": "sha256-soKzdhI4jTHv/rSbh89RdlcJmrPgH8oMb/PLqiqIYVQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dab6df51387c3878cdea09f43589a15729cae9f4", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-22.05", + "type": "indirect" + } + }, "nvim-cmp": { "flake": false, "locked": { @@ -451,6 +507,7 @@ "flake-utils": "flake-utils", "hardware": "hardware", "home-manager": "home-manager", + "mailserver": "mailserver", "myneovim": "myneovim", "nil": "nil", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 44769ac..79b0210 100644 --- a/flake.nix +++ b/flake.nix @@ -39,6 +39,13 @@ url = "git+https://git.pleshevski.ru/pleshevskiy/vnetod"; inputs.nixpkgs.follows = "nixpkgs"; }; + + mailserver = { + url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.utils.follows = "flake-utils"; + + }; }; outputs = inputs @ { self, flake-utils, nixpkgs, hardware, ... }: diff --git a/machines/asus-gl553vd/default.nix b/machines/asus-gl553vd/default.nix index 1a729c9..afbd5ac 100644 --- a/machines/asus-gl553vd/default.nix +++ b/machines/asus-gl553vd/default.nix @@ -20,7 +20,11 @@ in # Use the systemd-boot EFI boot loader. boot.loader = { - systemd-boot.enable = true; + systemd-boot = { + enable = true; + configurationLimit = 10; + }; + efi.canTouchEfiVariables = true; }; diff --git a/machines/default.nix b/machines/default.nix index 2f2e97d..ef936b5 100644 --- a/machines/default.nix +++ b/machines/default.nix @@ -34,5 +34,9 @@ in system = "x86_64-linux"; targetHost = "45.131.41.215"; + + extraModules = [ + inputs.mailserver.nixosModule + ]; }; } diff --git a/machines/magenta/default.nix b/machines/magenta/default.nix index 252d3e8..fe61b95 100644 --- a/machines/magenta/default.nix +++ b/machines/magenta/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, ... }: let data = import ../../data.nix; @@ -7,7 +7,9 @@ in imports = [ ./hardware-configuration.nix ./networking.nix # generated at runtime by nixos-infect + ./mail-accounts.nix ../modules/common.nix + ../modules/nix.nix ]; boot.cleanTmpDir = true; @@ -16,4 +18,19 @@ in services.openssh.enable = true; users.users.root.openssh.authorizedKeys.keys = data.publicKeys.users.jan; + + security.acme = { + acceptTerms = true; + defaults.email = "dmitriy@pleshevski.ru"; + }; + + mailserver = { + enable = true; + fqdn = "mail.pleshevski.ru"; + domains = [ "pleshevski.ru" ]; + + # Use Let's Encrypt certificates. Note that this needs to set up a stripped + # down nginx and opens port 80. + certificateScheme = 3; + }; } diff --git a/machines/magenta/mail-accounts.nix b/machines/magenta/mail-accounts.nix new file mode 100644 index 0000000000000000000000000000000000000000..a7674f9e1b923623fcb9143e6cf9655c832aa901 GIT binary patch literal 865 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 literal 1724 zcmV;t21EG(M@dveQdv+`0AtD>;FLA#!i-hT8iUjkwv%9q1t)J`mj51rKOS|5i(uH9 z3`w#r8Fm_6J z8sr3M5lXH|A+-D=6bcb{S+I-+bCc1#PO7GKNz=irk}9kyh5ao^%A;q@6)32m58m+L92T3xv%A_*+|n=x7sTY$cPTda>-hv>S9tSN7m`OSNz}w8yg!;7 z?ICqkq>;Az9a2NDPu!Jzo|n(&sfg#7~ zHV9|?0723Dg{9N2KI{92)BQ=Cq--wLC%k-xrtd#uhM!#gYiU96R8cpXXE+3TP>Xj< z#XXg8BXxhqzUq)`Ze?SbA*IS6{CKGmNuKqNe0ob=$u>_G6-xGG7k~RvHEfJNUUEYX zjNm76^tEsVTx{YjZ)5F1=)k&5a!DF__{e%RGcY2bGrnUk-d39b=a znK~|@WD6~W8+2sSft?G{)jvOhN9sgvk@i#*u=))#>Agjr{1ZkL-m#Ef`Q>%R2*Qio z#D5zA2RxP-e>1o)BS>o_&RDW1doQ+{ANy*BETGN)fI{b5=k>1H0KXr6hN=_VF?*q$ z&JD)X2~@l{&L`gK1gzU`B~Z$2XGmyi{srh6wAzDjO+FSQom3kVt1K#B#PRpKQh#r1 zh}VjM&@_5~*tp+3&`fIBBz)yHTeV4RWfOKUd4P_?H8Y%O$_;(=q-mrwWd>xPW?y;- zf2GyD_wtGJ`9d9I$O%`w5?DPPe<&J%dt8nA^x>J-0FapCxt-2skAg^fp>7@U#&@vF zbspqd_>qtJp``gb0CMM0ch1#hct~0-7#3I+FgZ=@K&;Ax#JOah!p>WHky&Qg*ckY# z52t{$8%FtSp>`$BW#Qp#6LQu7Nqs9CkL>DZ%!hMg^MA0*DyaFB4USZh4dYHgGqq>c z$13Lss9=o|dKs!+kv7?vu$wEOQN0efnBZMXj;2JG6SCTVA3qfDZbuKwmr^;m|7+oFHD;}ZP*dYaWb7&{Z_C9t&}(+1$gqp#WvQ`V3!jsQux=98yizk@Tn zT1(K{Z_QY|+n+&fs}^Z>OzE9!axA^^*HBaBJ1rG0vTfoIIr1+C9B+}K2X^jrw{ryi z=rm(&yjoMDENiWW@h>0pbN>YLe?FtC8!~^7si6Xh8cvS-PAPfdG9?6g{fv@1)<8j z&SaVqt;Z0N0duanNL@c1M#u#TW1_2WDYKc+e7F{LEg+Fa=Eb}6i^1%e{nAZhlfARk znFG&&BQ96sIVc73*mSU$O)aL#;_q!Q$bQA1p-8>H&C@WtedYdZkTgTxeO1~#{j_3% zBcX!@E7FV7tI?nLA`IpJ;tK!M`VN|QYkdY7lQhwR@9au(^DcfVie!Az_^ka(keZIR zjFbMIO0`&li6wW{%aiiv_AxI S02F@Bg;-W6I142t^$%h1)=tL& diff --git a/secrets.nix b/secrets.nix index 43ba5e04ed18f4a789d03cd1c9167b88f3fcc0f4..00bbe781ff04ae541361e0865bc53218ed49a140 100644 GIT binary patch literal 199 zcmV;&066~uM@dveQdv+`0I3eYjDA_Bl(67gvW6ie`t0xa8D5^bW`x^>PK4be<9^ z2~FyALS)kP9Vf*7SgARRjdBm4+A}zsrL&kz8XT?ZBN!?rgfC@64qtE`hIRDP6kkZb BU4Z}q literal 176 zcmV;h08jq_M@dveQdv+`0DSL1)=bp?@ZIpcuOy@95QdhiP+0<_dbJgA9b>`5tBJIM z?q@KdGiN}qSOOc<_WS`H_DEZ|rjA0yok~h^y4(}eu@9+o@kOO^z+1#Z{>mBLPfO7z z_+VkF9F{&tn~^ew+y?5;3IXk`h^|;rRN6fKaW!&KI?F#y0!w|AusLT(x%Jhx7;U) z$95OvR6OAxDbG%idB8+i(=R}?{A6Whf1rlqXx2vfEN}@0;14NFB2&E?VX@1YMKKu@&9CmFm`ad z+ZU`qmNm0tik6++@(M|;e80nu?ZfTOOqk5B6V>OIqAJUTL|^PGMK zqkv!!u*4f6Jw}6Kaz#1~odJ$$cr<=49V1=ewUxnCK;e@EMcZLXzX4AAnTm_;*=!R5 z<^>SE^$h?9K-0I>Y*;amyfQo9V+Lp=Xb&nFl=c>9!(7u3(B$#C>C%H!a@hb2cq$ec z6NfF;Ep79fnMWiaR=|U_iDFvJ7LGA$X5H2j$BR=g&uBF){g=o(T-n|>ZDkjD(`|{M z-ti%Brl~T5XV1%@e@zD#=dV5Cw14V0h9oGZKwhc5mbPx6bnd^VV> zjoSCKKHx-GotQA3_;cnGtzzoThxwteGkRP5)M?Ch$3_$L|EC{cS#c3Uxax8c*u@7wycmG#CtWRJfTtDYVIs^%40DiB5 zU*b(uyRZ}+rgqS?_ik_z?I!3?f}uj0yj4-}BWh(P(nFFg)%Q3dEC5nalb257K~!t< zp2wXxcY9`WpoFR1KC?oS*}zFadWK7RZo|*g49QqhftT)xU8R~lT6jksi>1_qkl@2r zpmc*qvxw#t7^nV!Njp=CA~0p#JD9YAN3yB6Te-RW-_r5Cq-32*`%LVOXkCtZ^be0&zZFTqrSz?<^ftVk{x~4# zeapV|OWyoMRRbFe%NjAqeTuwKl{N7c-kMA5S5~{~-I~?wMk>`^sB_Lyo0;aYu>^cn zdZ7Hs#FU=jBnYcO$ix{?vsb#{DwaEMzD3Sit-$SWgke<8PrWZ%d#Sa?>+%FJx{wxR XKs+^Q+Udsq$l@rGxs z-p&zSu0g!mS}SU)g^6GGY_f@sL z4(oT#-cqUZIX4GZ*qx8-r8zIYy39)(=zA|NOHu~&zh}r}tfLN3Jklh^{4jSi%CgIO zuq&hCzU8!Rw#gTCh>jS5QSKRQ!G@_hfr<{^F&+2AI`LbWRk5p?J`d-d&+>O&+%gB1 zt9o54pYU{eLQqjjUeImIAKF{?{~w5Lw{!=$c><>AkHa^(clPqm)im%l-=eh44F(S! zQ4`clF)MQOVyM-keII&RZrg3{WVc za;AvaBv?J|jlcqJ6Hq>?95SYwV+O;SFUdj$1F3bG%BW%U$bJiN9K;1E3xzv5Y3-Ol z+{Sk>7nl~)e=Bz~MO4+AiMOuPq-~Qx za67p~fD%g&O;Pg6^Ed2zbUnngwI7+ZDU_s`51LT&QH_N~|D#Ll;i?zI%mKcan`;+i zSTPiZQp@&5InZ_PdrrCzN*qSMHtmzl*H_IEQWFzxBRlUD#TMXdi)+(WJ%q9xy3;F( zp)VD>ZyWBGiVSksjKk)JJZPLiv4_3<$`#S$1PCJPFAp)@+7X z^*6A<0T|8_0S-HqZO`rgv*0kuND0eQv@YaP8q-e1Am>9`A4c2K$~ec(>lqldSPbUQ zts_ruF(G0D4LKR+8|kE-;NP`MA^lODZfzJmys)Fj&_A8b_QI>K7SB>LWn6mJ={GM6 z;^)0-piKd6HI3KcW6B9H4@Li&5u<4G6zdb~5G4=efo1oD&e4K>Bn-l&^brl36)J+IBAQvoOn?{okb7@SYN9icp%jpc)qGR%bHYH}}ngz!nOoSm^3mZT8f(iFClXQ;5&zL#uuhs3J4{Y@l&Gxdv9F$6AZhH>Zgnk z067i(q6~~(K->xa!_VsjR>4e0NFPK>(J*|UQr&%2MCa|F=QYl(jYR<;;CqWW%6dS! zV;sgEw;YiJY6*IoGw_Xyb)i98;}H)i zN26lacUF$wYjTvv4I)Ce7r%}Yt`=~R;80%0-hWhu9r8JYa<%qTlbblLpQVFr35tP0}#Rm6BNkc z-2!9B7Ch;HBO@R zw{U=d?Lc@^UF_ooM-pEZzH2#;I^=w6B;y!R9%9rq?k8ekjKYGFov+v%A^Z8)!v%aQ zS8!|HX$oG>4-ND1m_Pf+1wyRN%8FEj9?pRS3*YAKHj)<%`5_87Gh3~-Dv4D5(W-I9 zB*RoMIJhqH#Q5zON|u981f;ZfJL0yIP*$-A$TwiHA_UadEY#A`-Fmv=pEIrUupAlQq|kL7VG_PJlt z&6iX3vpzW7X3Wwc%wldFwdcOe$nlXWM!IBaIU#rg>KX))!>N4Xk@$Ebr`=gHz0}{J zt|j53uIgewY&k^m+&eSgDGgVa{3{xMS zM-}wtx`8w#4}Td9JTK4l(%7_lpM&lD%pw7KA??Q3R5_tG6IR-&8!C2O`VW~9zq-y{ zDfEd&>Wa?S!pe8g=1DVt50;`+U1j!u)3V2qF=kPWP%p_X(HxDk#U2=MUu!9%a9D&J z+`Jp2X-!^rhGyRej9`wY-C`0^E|0dP87Ee;`8vK}r0h%yV^kX3dn{I8YUSs}0EzW@ z>nPJWtPhFmW|Uj={XpZ69l>JtZNyLvG{oyBXl(#B>1`II3$?yo#xx#~db_SESziQH zZpG3X#636dKsZnLpKDCC{U9sSze`xNJic9Mkp_$Dx4I7j@9%z3d}(TsuRlg*X-Sc4 zvHy%*5nu{-?Rkl@%RO&`%;o#GR#F}2g*mG&534&|&tpVBIx&be0F_LCj(iX|9B(VT z(Bf-hnS-dl;5NAa-YYlgYmFJEo)HWVhBg&Biv1lC4o_%KC76}=WON6d3sO-$ClX?` zeyK;`2P>+hOjHn%PD&4LRl{aP*7`q(c3@yM`KA`(trY3yE4NaBh`>HceM*t{tzA3U ziKO+M+5>qP9ej^dQv?j38w0C3-W@oedORKkzz?=o_;tm45O1nV_~CRO$bmE@5D8qa zPGJQe9?f$zi8jE#n=(D#$J%7ld+iRQFowdhdgIQrCPBrBDtfoAk;4{h!K8*YKcvft z$A7q_8A`OUeM`jcmgru|(+zPbS{6+dLKrDh0X~;=o-hNf=n=1mB<$B2fZV_#>|fq$ z*9ctt>RV=-V$eFwVhsBouQbG_rlP(Sb~rr-^Ld@4!73cjK4}~QGN<^Sk;45 zy%0S6_i*;}*InZ+Hc{)=tAx@BA7ms*Zk#SZ--80OKJ&n%tV(x~of-^Nfj+k$*m^k$ zBrw*raj1DPp>j3M4n*lV@2(IgctH0Ak5JtqgN|8HSptE_rEAht;u>X`poBtNw;tAx zv%uUyC(d~r7NO#cj6Ja-W3e5Ei1=M6a#ZvY+Ut+YE<2Uq?Or5->+S3E9MfLTtsmU= zyBu=Kr+sTS16r=PY*FGE}@;tbHK>5U`zq=cbSB zH!9@3G%5aZ<}i_rz-eePq)<$cyYikOzq(BjeI2Zn?*D!Or1iTJg({7$-mdXx=+M=I z$KA;-ovsA-5b1tW#4)Pa;o_d-(o7RjQp~)TQFK5mo$jzeas?p6F=C_i({UyfuE4YM zwb`A7(JAs#`pDdV+Ih;+MvkuRMTEKyI@n6D2(0k9YdWE@=8T-kLO1pPEEQY?G^(hC z;%0Z*qE6?hq5>d<@jgRCTtGOHKARtqsPGC5IsHP#KJsa9y*=()PwzBI9FV_Cb$jq3(sRvWe?s7hVU`Xx^gV3V!#qs3+>33y`IsxWER|I=;x^?CjbBd literal 1627 zcmV-h2Bi4_M@dveQdv+`0DX6C!{TA&n_Xg9w?+ zj2jwgoPex~0`sR`Xq^mBmr6xkiWHC@Q4+cWD>X47UAq`6*L_Xi!3EQmFnI(< zOzq*%YtB+<5T`E)sqB1^p0RX>cby%@BoV&XmG2iKaZ?~RLUp#6|HufUM}_O15=pWc z>(@b0!EHTDVNotU3H~jPrQtnLyatb?=sK5wji0^q1t(eEmSzZ@2SS#LMXV5>uatO6 z_%gFL3S|)t4t~uMt7Po2jGoK^Fr>8>@)M=cV1-dCoK$FjU)hBT*r^?7MP#)zZ|!N* zk8OvZAk?Gb z{g6mtar(}5o!tSwV1b5ibl#{ICx!aZJ%wJ>e^bEYxlJ(v6i9Y^sa%R3 z{&R_8Gk$n?_?|ikpOj`qOgr;Iumw#3%_HR2wmQ%)De`+GjQiVzXUjssmL_spj~^N& zuZx|*h=wANt*x|GR7ohjdfeD7nT56=0RlhUfB`8klIqbJIE6e1Lz82(CiIy78EQr`XnaS z-~PQUd54YP+IOpf(_sBo-cwjAJ{9Z$$?Drrf{D83^+SJMJ22boz?`n2U*tWPg82`K z?eNtiT()4_nGz=Mrg7`eqTVpr7m)Sh!{7*;i6=FJZ-$;TB$ruX#6JV6RCCi^5SgvX z5P!FQ*cYa1Z@iKM{PuTKh*))r2J=gq?6Vky*TY}j4Y{c>3AW}v%6(?-bXuMXreIQa z@ct|A2T#p;Zkb!JcuyrXEfndiLDvcy^8b zfJHiyB zhE*1<|7ARjsNG0X=2{h&praxhq?&M8WPVOSnJt!Wk4d*6EynS#H+<`FRGp^Tc81>`_j8_XgG Zi=qB>?#Mgbb<&dLeX5jP)xr?XPT$+cBv$|c