diff --git a/.tangled/assets/anything-but-windows.gif b/.tangled/assets/anything-but-windows.gif deleted file mode 100644 index cf0827179ff92a431ec829ea560a77da6a36b0d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1816 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 diff --git a/.tangled/assets/powered-by-nixos.gif b/.tangled/assets/powered-by-nixos.gif deleted file mode 100644 index f293610efa5aef6bab1009f9ad67b7166850b15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3495 zcmZ?wbhEHbj9`#wxN6TZXXU9?TQ3+yZ1l4unU%vgESUfSPY=30S+L*Q@i%!4Xb?ZG73%9)8MElqowt1I2_C3A!?_cevduuPh zUA$($ec`qKIeSlEemZr}t@}^kSG6vf^XN~`+$++W&in6uC|q*6xNgpYQx61{{ACSe zx1E2?!Y=e53>5!!`?-b$J39ur8tEA@GcqtRDE?$&HDa)5&|zR;U;ufOf$jf+X&+ov zqWVrO35vAgoPS|OiPzew=)KQ4D}z?@HEme1aAPl9V!P#$tGn)h*b#H@^gN>>EM+lokrHCi=HU^Z zH)oF3maW^i@7TF(_fE-D_u2F2u`tV<*DsUSP)<|k<>5OdxM}lNyX)8Nw%odHb^X@; z+czFQx^w5A)jnHy>q|>bO|Vzx2|TO?DQnJRFG$2b)>=l~^=3EOcrX zxU%u{mcxy%-Jf*sS%^8caEPqqyOJ&bTHdjPEjX?^qTs1#qqbzxB#nf|<@_dQmn;r^ zX6XGtm)(x1;HZNuOR#XpkHz24CZ1|Fh_{;i${=a3fmwOYjZ;%!H>^*P-66Db;e1!l zOUpuAPkvZ(y3KdCTdG#}!B9p{4jY4m+uvW`*Pz|cGuR|*Ehu8Uz)R1ghw#$RFPW1c)x5+VQnpU7jYg*lhW=>9$D6c|Mc&j#Qh2EPNJy`V$T~GQMJ$VCv|f zd%&52hf8kDv;_)#+aH&D&2Tud|9^*Q+?9a2nqs^kgn1QIEDkU)f7#H;$mY`!#l+#j z(a5LcpmDHjt?GyW4(tMLCk_>IY6vK`=)Vw%ICk!o6! z`i$N0mxMEq?1lrKJPuuw2buX@7BJ7{ndhdSD#IY@pvk}C=0OuK21`dx@t6i?mY>FEDjfe zEFPUJ$?0{HG2a*h7q>7p&FQo)V2GGARfLgSKVd=!pWuTDD`v>~bl==8q~gW6NW8#c z6`#B6tk-P%Dpic!LLDprr}C?QiR$7wZ=f(mW18x*%i&C~R)w+1JaK4b(%;j-z{eOI z{UMNr{f`r0>crnoJl;WW4t)B5JR4XV51|}3y_ts?6?qa4<((>W zI5=PA$pmI5qu}Ubb(ReZ#eBwcs>Q2$f6Z`SH{Dm@z&RO%Q|oreOjDZD*N~&|mCd@L z;S;;`l?7X`73IBhV%VAFbMVG(H-m#WSiV$zJ6$AXV8$-^dc(mRTpW{q7?Rx&ybkQ! z7u3bcX4P=0TUlh?!R~f(yCyaz8HF>;xL6n*G$*nr?405D|K{SS)2?$dGBQN$Ys?fl zkzlFwSO$W0f&Y+j?3kEIK09?d||lrmf8Qvt_#lv0_JTy$x!!h z@;vTq;a$JBt`ZS{GoSmCX%BDChWhW9rFU;BcVKEru!vpgxNniM7}F&W-SZ1CE-Nur zm=?=s{PNXtKImnWlceVVp)&QiVdlip!$jNpQo6;$y0Fz_&NGVn1lu$dj0 zU!Wl^Rl9FSV8@rhY4*sWbJd$Q zPl5$uloJCFgD}{rf&=plJVgAuJmgzXeB$KwSm>WwB4+8*pQyzX(Jmfy(VN$0@#WL+ ze+2(md7j(zLug;b#a#7SrxQDcGCiajMZ61~B!biI>z(8n(_}4#M1liiouv6?(t_s) zGdS@(Gb~#qzJN{7WBDRyVXky1p(Rd^2uD~j@G!`L9We*wh(9MaToA)b z!uG;J9xj&pjIR1kb#_x{dWu+fISDgbb{Bg}i->U5+6URqDClr9Vr1-fs&=)L4ch5k zYA?5y!G&?(+RVU;BTfwGw%eaO6Oz~HY;=}EFV#s}Z%y=_2S^UqgFCnh1OF_Iekili-_yI_KrDD*)9wV7j-RJBIL$z?d`;{c=@Kb zWei)Lie(n-CGGTe-nrtale8<6vy{Qk;%8uB>pn2Qz+w(d#E~UMmMK4LT$qckcx+Zi z$h&2*ZVpTXg0m%9JmB%yBJ+dE!tp1kj$&5^TDjrIggV$=7R5Gkv0vCwz6lyE8+5=>|F1~=qWqHNxaNufhQv)hs&Z8r=XQ9T=X{E3$An4b7F92*z1xZ zXMC{wYjTm`R~rV$IeCna5$f~C4RSN_t7QwzD*KNmi89n=}w(ZO(IVE z92WZe&Qp3l`&%tJ+MMJp=Q;E9OZ$4*3yG|D5uW92x6#bg$C-<9g_H13r;T>jTU;4j zgiI&w7zu&d0#aAkQGp zz`%A7}NUY_=(P) z=Avf5*xAsq&6_#Pm^V;d+?RD*h#!}}k9n1`Rv_aNPaz?GWmeW|dsCm~o~1W#I4S!u zGI-s*<)q=X-j$)nmF;1v6ORuEgPy0T!Z-G}PW!z$Ub={CuH%S&=*+=n#}KR{cu=Kj zQV4^yNTqo@n@eU*$C(C?wI2Ltj*!+JxR7CEU}TVCkYxb1?&cSG{Q23ZsCYg+$Ewvm z{>}FUyY+|tLJBwfZSW7ilE9k0JMiJ*7@wWo7e5uGm+em9yx72K&V@4-jl68Wf_!{J z5xiPG?R@4=O3n&=?D7$sY0^`thubmxYk8S#nauTPP2=m0u#-;UV>a3B%$)6_oyIJ` z$JuJ$s#wIkU}-P>^R{aQuY5rl{sle}4A!7yLzyubTR^-(r5~Z&q=2r60Q@ zvs%Q%dwB}Z>+KcZF1I&*=EUn1a>m2a?L>#7wn@g0Z_dpf%y&8X7=JjkHg~%i_(?4~ z)F;3$qi-ZpG%;FGUNep7<(CJIu1dOrfx$nM@ALC3n=V}vX?#yqA^(1hO5kM{)+Orq zwM>2*Oi^jBvY#r%={S`^P#|D73sT9<$iT=T2@kX%))Fc&?^BrGK>UW9cmt|{luXa&XQqtgwG)|sS zU~l5YF3-%<817IV(wRiEP&@Qz{Lz+3KXA z)gUh-A)&7?Zs)Wohh?$7tlhQihnzRqU%z|)X71f{58@RcPq9~c;^gim?_?tI#OCp< zsqB$!yxQ$qeA&(A1a5A4+&w+Up6xeLT;6SyY|J!=^TY)_Zl70Puzzlevision
Non-stop entertainment! The wackiest NixOS configuration to-date.

-
- - - -
-
- -## πŸ’‘ Welcome to the 3rd iteration of this flake (new version again, yay :3) -Any and all changes on this branch are officially part of the 3rd iteration of these NixOS dotfiles. -NOTHING here is stable or in any way ready for production use, please keep that in mind, if you ever find yourself looking through the structure/code. +> [!CAUTION] +> Any and all changes on this branch are officially part of the 3rd iteration of these NixOS dotfiles. +> NOTHING here is stable or in any way ready for production use, please keep that in mind, if you ever find yourself looking through the structure/code. ## πŸš€ Deployment To deploy a system run the following command in your terminal of choice. @@ -30,56 +23,11 @@ you may use the following command to build a VM. sudo nixos-rebuild build-vm --flake .#hostname --accept-flake-config ``` -## πŸ”‘ Secrets Management -Secrets are managed by the [sops-nix](https://github.com/Mic92/sops-nix) nixos/home-manager modules respectively. - -- General secrets are stored within the `secrets` directory. -- System specific secrets are stored within their respective `systems///secrets` directory. -- User secrets are stored within their respective `homes///secrets` directory. - -The following command may be used to convert the SSH host key of a new machine to an age key: - -```sh -nix-shell -p ssh-to-age --run 'ssh-keyscan example.com | ssh-to-age' -``` - -Additionally, the following command may be used to create a new sops secret file: - -```sh -nix-shell -p sops --run "sops secrets/example.yaml" -``` - -You may also encrypt arbitrary binary formats, like .cfg, using the following command: - -> [!IMPORTANT] -> The original file location also HAS to match one of the sops creation rules, not just the output. -> Yes, I know this is stupid, and yes, I've wasted way too much time dealing with this :3 - -```sh -nix-shell -p sops --run "sops -e original_file.cfg > secrets/encrypted_file.cfg" -``` - -Finally, when adding new systems, make sure to update any required secret files with the following command: - -```sh -nix-shell -p sops --run "sops updatekeys secrets/example.yaml" -``` - ## πŸ‘· CI/CD coverage There will be CI/CD coverage based on the Spindle-Pipeline-Systemβ„’, when I find the time. ## πŸ—οΈ Structure -This flake follows an opinionated directory structure, described below. - -``` -flake.nix --> The flake. -/systems --> NixOS configurations for various types of systems, using easy-hosts. -/modules --> Modules that are mapped to their corresponding easy-hosts class (and home modules). - /nixos --> (example) Modules specific to the nixos class configured in easy-hosts. -/homes --> Directory for home-manager configurations, not specific to the system type. -/lib --> A place for custom lib attributes exposed on the flake namespace (lib.puzzlevision.mkOpt). -(more...) --> Additional directories have been considered (e.g. shells), but as of right now, they serve no use to me. -``` +The folder structure of this flake will be documented here, once finalised. ## 🎨 Credits Parts of this flake were inspired by the likes of: