From d08ad6e38e9918ea04a067dd726d939577c4dbef Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 12 Jan 2026 10:36:52 +0300 Subject: [PATCH 1/3] docs: move README & asset to docs dir; update demo img Signed-off-by: NotAShelf Change-Id: I47770f97a8ddc10f66d22acf2f2d26836a6a6964 --- .github/assets/demo.png | Bin 21010 -> 0 bytes README.md => docs/README.md | 62 +++++++++++++++++++++++++----------- docs/assets/demo.png | Bin 0 -> 36133 bytes 3 files changed, 43 insertions(+), 19 deletions(-) delete mode 100644 .github/assets/demo.png rename README.md => docs/README.md (83%) create mode 100644 docs/assets/demo.png diff --git a/.github/assets/demo.png b/.github/assets/demo.png deleted file mode 100644 index 137b84523c9ce01d2015e020926ae200c44b5957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21010 zcmZ^~by!=`(mf0niWD!<;_mKFafjj(pg{2iC{WxA1q#L5;+o<`f+sk%6e;cjg1ZKH z{iW@__j~{Oo+nQ@+2ow;*=P35nziOcz0y*~#U{r_Lqo$=RZ-AILwgX9I)-CDK)uWC z-ixE5=}fCC$m;tbb|=);6Lp^dIF#zTzmPbS5 zpTTHDLmMYYdj>CgJS%7p@#mAqK5u6`oE#SUo--~-JY)|=Kpb6RZKF_*!uW~ z+IP=aKq$sb$UW|#_lYaAKYxtmA@?F=+JXyG3*>ilRzZXD8y^g86_?^QWAbx3MlwOJ zPt{}akayx^_v?1bfu5==(QE73km7~}l^FO0w8I*P0aSpBQ;T=Bq}rHa_ZTylJ{wZDx++BRSJVQ^y1jm9YjuYFj_ue)v{uoL7YL@hIQVwm zUxl=?2=wfU20m$(qPjTwz9FYQw(O0+KX>GEv$;Qidr>KICCvf6H1#fUdL0M*sCZOe z!}7J~>+Edd@-hW3?npyTE`5Hd8qU?A(Cfx5a%yMC+hRs_tjbIGqfuf*rN&DNxW>tj z=`+$~&|{slGUmxPdR=pM^ma`)x0pVtyg-q!-RI!iv<}wikMrI?;57xr!{K>Qp(TW$ zQUN%oHZiXOzC#t>8aHf;>~Bwed@74!swT^gF$7!fzDSkpFi5gtdFKD{NoL5(=u1W} z+>*Wbp4%UA8=S@V{K!AepZUcLueSr;EGx)Fi=RI8t{d^K7UOCE_1tCuYoX;Esx@O8 zJxlXA(0)FV>o-4bz+4lsrl!4&4+vacI@|yphZtOUw=liLAV62{`~utw;wV+&g6J|Z z_&A$S>{BFJ<>fNlgL392Iet$Jp;-XB*QQie)wd~1-|^rHKqCf&Q@s8C!=HaJ{z?S# z2!&+TF0C_?h<$hZ4VZHD;>3h{PW+@9uXZ1mUSdXEsS&`!TS$k0=ps@*Ypt&!enMds@%8VA$N7$G>a~vPVWCX=s+z#@Z=_Gva3ZEY={$?p zkL=7<3gbyJ{0^RmR zt&Gpi@_!2kHFGV|G9?{AWE`C-1m9Qh%&?KyfeVj02&3S-ofMcu>w$va)H9mU3398e zaZD?~Ck9M*KZUi-<=rCml&Uky59Sk_FtL{k0(j5nC_rl=ccF`Rm zr2633nRDzcp9>kt8zHQCJshU+=oOke?UiJN9lR$S=U{~dH(d8tEHf!<>8Q0c6@WtWm#^2G1HzpS3szvSbR&)9>EQ zFY|v`q`f|C-1GoA6-42mK6dxdnKie-{6!TJ#NMn(NiSHonAHBS>(} z8JiDk)yG}JIB?I7Iuldi*Qci2bru84d?QX_!nKB_`rn{=b>0Xk=P)_#2k8A<6B7vi z97-X;bqC>bta8t0qIxp?F7j53;X~{RYeT;~*#l7xQ(=$3i57ghDO?-jL_Jj9_c(v&k?h#$lL&sFVxsO?PpEW4uWu#2 zI#9H4ktYwvt*T7fwt{v!`?J&9Q&R(on#R?u9>|#U)vZdIcc|=BSy@)&eoH}O<$;@u zYGcMiPy9dLv7P++RfZ6GlVNlYW1NW1eb2n_TLU*p{55b_Wxqw8kl;(ncNLvyj=GPZ zVOlp3fu@?KekK!8oF!MgXb6fhi!_KF7D5ms}=E|g{sj4!Vp|T)I2izJcOYle*#04V- z;Dpj@U{*n^>DOVwQ8|xM<5i~$gnx!Ht$|h0DN};55iDHXxq7#}^zzm9bwhpq-`$L; z6Qd#B%J6NHq-$8sUQ`|U^<2+~zQ)O#7Qg+o{!hAFl=#D=qeL%Wu-)>SC@3ojpH3KU z41v#=mRcNDb#z98?~ZBqSXO`inO-M+h1PS+`tC(Phe@xO>@i|MTRGVaI`UOl|63;E zb82YyzQay|GH#KJjgfFM)@QvL!`T+S7Ig&$1ySE@30m64incrPw~J^qZ;w`c=9;`S zyl-!B+b-8LZm-Wdp5*7}&o+2$)GY*EpUt?6xXyzRE6d9+v-Psq-V1?6GsrXv?>z{h z?!?V(ZUu?FJ)L|#IWfWZ(Gk!nNPr*V@x3s6=>YE(4fk(9Olk*4S=a zz@>Z4Z*AM0hK9>Np0<;tBl59|*%!@zr`s#>GF`pGNUiS`6&r9mQPHW|i_6Q~yX$>N zM@P`F#YNf{n=x1F57!tj3iTS7r2p>H8v_R5f zNAsCtCr&CL`kBuIc^kX^lLN@pA<5aUkhITYKW9nU2i@- z8OTgGJWWsjc@5X@?b!UOQ^j!|2chu$L1P_!S~s&?eUv`50FiPpxLSPWGUo?NI7%*g zfobuM8bJJ*S~_5A3egeW{Fp)*RN0ltm^)eVy5hKn=XI-DolBP1hngZRUoqOl+Ii-; zlWs7IOeudjc}}kJ1La#IO6xMvg3E$p@Xg`Jh9zFg3yQ!uC#YM0G*-Bv5dqc^qMDkY zcR}7?T=?v$ggI`shQ&NSgL=uy%A$uzd}(>%#+ypKxwDhNL;u$koj=xrD_kw#$G0sk zpRH$i*R>O^3;+mwRL#Amovt_KuDd^=FIlmgO@D=zSnp-%$gO1yY%wK?zmn@e z#KBH<*_WxQ_Y@G1*U)km_n)b~zId`a>79IXf;u>&cbY^RJi$1oXu6q}Vaf|yGSW1`B@pL`|^-y`0`eM(xgK8{S1A)5PUC1DhM0qXFiX%oUhcfwPlKO znMX8wa>$CQ8uhS;q&sFz#;m zg9Z8tNl21XQo4)Q#jAfbrEr^n-T%*8DfboVtuMUnfuEBYvu+#P&pS7~GmTX|%Kchc z!%*sl`$)Mvt!r0kz!q>`LztbaX0yA7%$vcABy65%zBt2u3hN1b5~g@i?0b2^j)X-F zGEuc4;Heq7*1%jRyn4TLHlc?mFp!C*;-|?W?sYk4DjFJ$uhs)#plNsYg^)C%!kH?bV8!^Rp$rlH@Qg2^$eB8h${&#a-@hXR z$TYnH6n(8V6;Y`(2@zgm8zyqPL3l$hP<(tMB@f3C!liYt2QK_etG@({68kGy)%ynw z@o34Jt(ixeFb%Okzr+5Ty@DK2aDzB&_AZZllF=lC5CRoGNp%(A+j>tG4M{L$aMw92GZS>xZRrY}^zumg z@xdlWme)2upx#mBotGCs)@!W45dlH1RM_yndY;U7L0N&VT2Vbs{36RV>Nt9u=-Qsp1#z0`kZF zUe<#K?A1a;u1VTm=4~Sp6L1NyUCZYG%@Ho+NG;iOP}$nJ{p;4?qt~%h>Yo1+-si7qLiXxeJB;PpXWAMG zT|fR9!BS8zB@ODTq_eW3BZkXa6Cc4{jBCy_T~;S`d|nze){I^N7)Mc-UdnBJc%A}z zv2QaIaGhr%1;A#h3UPC`OH12;sJ;V$>(=X18=HZX+_eKXc6N$<5fIQ4^S9<^$qOOL zrZUc$bSxH+!8DHt2`)f^KELr<2@#I^WNuyZnV>hxFUB5hJ{iTp4B8qkup>hIHM*H; z|3d{bGm~zd`SYl}ock(mqkGeS&cza4LW@mE$lyQrV|kFRW#E{NPOIU_5PGSAV%(J! zbjb_HfoVBbwjtA2Pt6k+3`sxxO|%|6r+|6sGL17A=eOP4-ISm^aTc8ejj@6ky~yt8 zRZ6QkrIT!_im-J$j@J5aTcEXD>*he63_kg-ZHSId21`AfJi$amxk*>POY`>`!shDm zmHWq}qF_`wOcdl_?U>cG0Wwc{+-+@bmHUGHV)|?NW8kjLFUqe!YQ0H*FElo&iGR1= z_}dtj#rk3L+h#mmtIyvxg`i`$`!PkL5S#Umo4KX2T;}`%eFrAyCS`-}6yh86Q@wtl zPvZPc=2)(;-w_|H%4m@0<4Rxe3J~2nk^j;}Bi(?#l;-&dkP^TBj;w#222$wP)ZpNj zn*iP4ra~*ydEIc1dSVl{4B7#-5VZhi6ny0Up)u9Fy)XtVd9t(g`MLdbIcd(n*N`%| zyyZ9KO9jLF6mma?M#AnSG+^9SEnL1{5VsjPua{~#{r*a+NubIWnB_#&ob_W#4S zk7Nn{0#Mgt9V)OCI9#QLRStEcvSp{Bd91(R*NhB+j!uqbJPOfq!Gb7kXN0$-t?6_L zVINUI$;$KD)<KZK?ocj^F%Bj?qo89}uO9)EI1MIDMZ(%g+xg?xSZfiw~ZCg@h zNiy{jpQgGnBOzXzjxOXb=Mx!6UR7DI!qvj=ex(eXYP+J&2B0DO?>w_tr_$XgIYkkY zf|Zr9QD;C+y@+CAQW0Fv%0#dCo#C#iw1=~EiJ!(WylmulwTIXo*_#md@nemtD4y3c zi=kNH={Ctk%Y3C!#7bkNkjcPx+x;!iw9&^TCANVcQ&#F4p*jUWb2kvOahWZp>r+vp z+z83gZt)-N8J5TP#H`5+*&dElHfU&O)-R>0r4>hU>sr$m80>!EflEpQcE|sBx1&~t z;22@yU0kWJy^kypyKwiW#YM&An0^*JLL~b>;l~X+00extlt5CNmPjDI)<-5A(cokR zto+*9$zTMlkoo!KCSzsL;qv1_y+uO6%%nI2W8lGJ$Y3Htd`VTk_kQ*<=L3t^Fi_fj z;STHVmeT#quImCAg)a%|ILc?`{?<#{>(2z#%!au7V|y~|oU|7rC{hA$Zf7fn9&?*C zXqaFYk}EIpJ=225qrfAv$JpSL#LqRU56n(kWb8=XvJ{K>JbONE%aZ}PXY&Xm2i)uu zASNG2W2X?(@<33>InU#Y3)qBJohAu(20N{=Sbzv=lQ7H+QWrZ?eBR%fqlG8;V}rMn zSqM`4?z8G15(zzfDD<=SVi^Z`|58_XbRa{7tyR^N_-v!Bt5%3aww`rE1UvEhQkUWj z&^5UI_01!-)AfHT9)Y)ww(&I z+dvhFdP^lOEm_MsPMnc`FZ2uDnO<0Oe-5A4lzF8Vy%^N_iR8w7PUfJ81$=UTUL%u` zTgB{#n#)$evq%IXFU5~1;_D^fcR@&t>$~oXcl?umQr+27{wQNJZnI8U+I~}gAQ$;p zCLBeoY1)+`(kmEWwB8|Jb$$BkHl2=F%wqDe%_?h&gWDg*lnoX z6fX=f8r&zG2%67mDV$yxt?7a@im|yNvmwr$xy}ldcFQ$f02nG_Ccag&eCo^}R@N12 zHHa^B^Z6&Dq=fyQ;!n*w=Yf59!NIWH=rQ?1K`ZUm zbZ>rMx24U&8en6ips800cXobb>;D(9 zRSxw?vSoI=sgT#;YPd2}d(OapRJ6I}tIl9b?8Z-ird~}O0!^{7uyUxJoSagp0uGlI z8_98J&hbMykxG~1aPX{#sH~*2A?fZl_`{oX#b{EuuN|{yp%k|=+jqjZjs-O}$6c`$ zy&kA4k{%Xh4?>br>IYx($}FVfjk|9Nl94Fy#5_L2v@|qUMf0bpF|3!zinN=YfkEtVErF$) zI&7k8SVM=?u?HzSPV0*Cj==IkWAH7@Bs|9Wn58V4 z);4gbb(N5nru|Lw;}n9;ddIsHuKHN4^!)7d(FF$%T@_#KMm)prkH`bJ0e<=8r@Z#b zMgW1OkR=_Ee1Mm%nPD~s3?>#=1(p1X0+a#QD-VGfQ%*plY&?M_n|-l3G3hqjSmXhA z=ud((n6O8C)CY)1yK~$J*BE6if+rXl7v|S2-Kn;PT#7dX!>-=mb(;5^8lv{LCGp3z z<2KU>%v6Qi9Zulnoi`F3czu>7>ek+RpA~F@cRltly_*0ap$NL=o)VYj3)!6Rn=HEe zon6`CGd4(+4}5}0B3OY7&JdLbG_btqq%wFX;_8MhW6V-CW;&KgmGMK?9rNjKR>@IT8EmdFVvK_&ndWa=yiu( zhWMM@*RX5CeerxQkJkFF`}+C>T=^!`+Xg|*6o4jaSIuf88CT@0XmUS<>V#|ZH;J2i zhZOd4xfuHO9o-`q=Rr?Cj@Y6iCm_)IY8n^t@YYVsBjawP;_aOuoI=|a#d~~3fuK9@ zmE-DtZBm5%adC0+A6Lpkxe^PADw&{2#F~Gd3+XgA^M%dBcMCb}^L5B-r5cJ?A)q$7 z=`}jZQAhJ8KW%II56pUA1VP6CdT0sP&IC25hkTw|#Tm(g+*e!L$ym_>CDtqJ2-A#h zew+&}3~nwUS?Zr-cV1C`v>iVY7L)7NP)1nDq5ib~^*)QC0c_C9(R?(u}px zeHuC6KL(~?qk{?0m?Uvvn{JzofL4C(AeJTFV@qrY-s1o8=35va#os4aj-#Y2ewkm& zjMda|xYsUMv`*+eLS&>G1t?nXrp6NLWLH!Ne~+m*$zBv(K@^@j3p_s!lHm07FiInfrZiIw-9VhSZ#^ zU%QG-0#;%-At0Wj3VNIpApRF@p}0oOP}+Va|Yb+uqJ+zqiu00)PNPav}4stii=x6KmzdGIMY+MjV);!Hl z7~zQ5;cGO@|$qQ2!xD0rv|GuruCu#N_KX(d~%|uy|SK;U9YI?H_vU2mO)mXB1lNGUbpyl zT92p^{8;(7GUt4g7PDhZG(<6#EY>@GlV7Jh$3=8lL!uAIgKo3er?k!hn)qD9+t2{(M-%qNDTW0UhUVfBQ-o zJaH=b<7vE@X3mDkLP-c6YUd;vU5k zvBs1u7C12%9skt^O{qbfL2qNh6fR~?qW+1KjeYjBHPD>q^S4@>Gv8s%F~Wb!|23}L zBOGks6lW@8;=GBSu-sgFj3RRmhJyTjUjEyYEj^{;U%!5J!rR~db7YAhEkSQxfcL`( zYbeR(@W_q=JAIzVv~8dZE>1jX33G`b;*RX=^>EnnzQN-5`ol(_R@S1A3H0^P%m5~Z z?HWx`L43+IRp}obiyHRaV94Nrh}Qzd9%>6fB`R7OXa(uTxk?ZFxw7|ofdR>q{Mjjuny7L-HEvLBMMZ@R3t}Ec zwQ<`gUhP!0xqv{=061e0|6y#a2Mq0bV|oi`M_8Dz;-Xa40CT~O1{Jo36Jixc)&ajSibQQMf-p9y(AU(_ zl;;R30%T(AD&9+iM^>T#u8I2Z*1uDzGp71a$_&;XbDiGU0I))7eMtXW<*aP#_Qis_ z`T7oe7XRe3N0_UY!)p6K72K2mmVo91)joPpHeOZv1IC-5-RX%`n^!fZc+F453Qv`p z*vV@-XRx){hO4EYvQ&@=yXx;hEqh*KMD2;G9$M4vU~Zl@M{d6-hgIR)dTDomck5*R z%6b(gJg5#Wlw6G)BpZ@+?R}8oOv^Ob^z6skcSuVhd{?5P)Mr3< zwqo0g9TarAmg48Dqgfd~Bz+x2mDp5yc9FoM{TA{7#~S#P;h*hf-$5-~TbK_g3Ypls z!jG4V9N9q5Qzxs2#&Waz)26T31qBnQ5WbeT%bn3zSAIg|W!QsGOL||7$N)ImFaH)a zP1Uuf&bO!07W4DMu(PAXoD-qTw;~|Oj9yClcjX)+cS8Z0%xPyqlk zj;GSEOkW3{CgGKtZ*6YY`=6Ir7u45Z6oG^M&URnuT*OgHOj$skNRYguqTfBXP{g@U zUOMLa6EKR&Ma77BQ_io2R#80oU7wtzW3h|2np&gp@j6f2&C#6q0xDpp`#)n3(%n2p z2|anK&yi{<@2SB=iCHLKtsy{v6j)4>b4Gp;G{Qx5j0i&-uRXI;=f$B-rZL+ ziBwsj`HN#*0E0jH{g19O5rN(kGDB$MIdvgb3EtCn5wFXSVTy$|Y)3?cXpBbw|tYg8#;^ z%h8^kcFO-rOibKed)k-6GffL)E@3uq3%+lyetUc6X#}vhv8lvGQRj$i+h_>?yVIExz;`g)A1crf;;Mibh!K@@WKSxo{orPm8F?QR8CV* zz(r$zOaD82CAU*i2n6lwcUiujXw?h=7IMHUATSE?qI8s==;LYH zb~~^lQga*0yFKf5scJ08Kl7^5mq)&@3%;aU+?Zuz2iFk2Mg{IX`%g)(5~~pqPi9G8 z$xqIaL)@0yLSt|59+Ca(>hiE3%zW|ux#jM3vpP3ba6-jdDkSPuwb|a*cIynaAx2$V zSgmcPYCt|dQ#S1=NmIkXbubKfPe0YRYocnPS)ee()7$&+GFYOP0Sku1)M;Klv6oR* zR#$XA-~Agf9r8M!bD^FhaJdh~-YXT@kpp<9hbd6$B%!MEa+XS@SD0L>rQbvV`O47n>=(XFeqrI>Y{T*4N_XRz;TPfE zU0wVcyECqB5C~)wp9e?SI;~a^W08! zoWv{qGUCvMaI0})#2tj7iJ>X9I?o8#c%V`rJ&Ufr+{Jv0e-t8#HWFgbYrVr}X*IBo zQr@1Y+0~;MtI_U-crfTVfDAc3QJTaR*H!Zv@Hq_(2A_QRa{`X_PBERhl=Hw(^D>~F zR=l%m?wDRuH9ahwNQHs8O${aDPx--65kT#Erq*whmoAxLP^k_9O0wq-|9d(L!=l7} zseykgz8CCFQqOAB`zNLKD^#j<4E;aZbqu2lYQLzux!UFE;`(Tvdc*C4wmHMG9uNq^ z7QiF*Nvls6)gZA_LOu2qo;WeO6Xrh;KRrDyqa1uK!UcqvHK0-y6#GKv{&Hw5z`O&# zicybz725OuETgSM&YNvG$l2)4+!(`02N(j3s@4h!Q!%Q?$aF;5+e z-=v3lw9mmu`45w&W$K;op^WVbrbra6jGdI;=P-YqCe2$=7CA_rzeAASQ3Le)S4J|a#p#6Bz!GWin zpjsrmRlq;LsJe1m$)nJ?@e0&Azj8&fWs#6CtVj##RyB#@91m6Hiuu9_W`nOFZ5LH5-RPXCHUmAR^Ugke ztcdmx|MG>9$p;O83h^rVmIdJQ{{SZPv64LX6JN?n)AC(Nf=wFq+45tq*~iNnfys?77&u%Lp92}$&abf)#_@5FFW-$&wxtp^R>4HEtKjd2bs{hIKoaLIoiycc* zWY*blTSP46)Kd7%dD9zUsPJ+#)*!#USjVRK-t5m?JZEQIDdd}B6eXRf(XJVo!n=ji zGSgqX1@@;CGavVpd|6&E6RjS&tUvp(Q333Zqe68c7=&K`gXMLgmh~UyD6H?Z>PP9( zE+K6^KKh1#0>%6_N=Y}-a&u_MlkxX~;!;wmCC#9~_gL0l@aZJYr!oSV1K(lQm6avo z#%4pD91C6!{Te<#x+RY10nD?<+Hb9>I+Wf=UPG=Ei0vrwsKgbRXK?}Dot;%RJrnr& z_%p@>EgGWOjBZHr48O^8bCh7thLj9Aowf&GUS3XT#sg)1?i%aW7x~q}jgS!# z4=0X|B+kxat?W8x1ub)3tu6__`3H!Q;TN44VT$}2G1C@|KTvglc1>xzuQWx`9|e}) zQGg}jvTLrNO^@{dVuX;neog@mN&<4igw}6cv(7u5HB1zKmrZ=ZL(&=RHT?u#9pFXl zh-Wob+0ubmU3a@(t4?9c)hPM;F9;qTVmd!Lsm%FcPPATjJu)%T2`X!B6km5lS=QgR zJop~kLpjL*P!6C}Xl~!yY9UZijML_>CX*xI^bfw*!?I(R?jpH}>2ZL!3ev1~s0 zLmQnba?Oo54yk7mP^BGot1N%9G(w?YBM*!CZM86)$I>^Gmm5nd-k@;tvVR)^OGu1k>t?h}jogEN(T77+h&TMZVtgWJ0&(DLEUig!b{)I75JH3h) z_>H&frdJcIcOFq?wy#QxT@BXG#<8y~kt|>gUVDn&Rpd=5;BnMFXpLk-ADuCs^h`Bi z%+oEV<%_ZX-V7VG;Wy6KD$;xIjeGo={`*wk=eR*HSt7Z=Co2}&>`@FE^7tne)xlhG zOjKNem$JlZD07lLOkM(J$=B)3hZ(=KexmKkfj9yY=>&4+Scr63Aq0yqEZ=hH9WE8F zrV=Kd0vf_}7#>C-hv}>dAeM7spKwZ2R#2u4-vd8rwfM{+@>Cv#hca37H->J-WR(Q= z#?L2M+~$*F_@%6$_^IQaXIf3$xvriHG7jJDqf?-xu9D!V)Q8iN;S4j5qVWipzdnk?m-x-*?2beT?N@x_kdD*18*icVdDm3mFz-kc;I+^Y zBcX~V(5rqXll{W)?)|&=Pv{`$?N*^J$?#F;RV&Y?IVW2c2d-MumfW{S`hF&Er!Pee zVEpWA_`zqGmSb|)a*pQn>m&YIJu>XIcm*XN)3~8fD4$H!JNjf2vEcKj1z+!=%Oj?> z%$_z)Zop^$?OJ9 zmZ+(y412T1grvEEhccrcsE_n&wcR3JJ+}xyJTKKN($cZ1si`40{m3uf*rs`19Y2I3 z6K-2*zln><7=cBys24_O_J+lwybDFgd){%nx1^u^sb^y})tBt|640?yFg(5`5em}Q zlA1XtKc z+vF;lw~C?7=1Q?BS(DpU6nwoZZ(i`raRWy?iVNEdsvVS?nx)OaBqZhC>QkU=zaMED z-u|N<7Nl8=;rLtwW9PG9KjH`{e|HyDR9+Lj#7QlupZipS0d01CJfBkmLdb6JbUdQe z_j1RUoF+STCKKyZj`p!XOYg!I@SEq{)ECILe|3rQ`9em?uH%Bh-Fma@^YaK(bRtt6 zh@wn|fk4B$Uc`Wy&_w1A15o`jSFMK@jk>7_xD~xfKx7ilviG$duqbzJeNeVCJ+-Cy zcKcT*#AOaVYP?kLux;n!UiYfL(dDFhEO_Sb&9ic?TVR3u!LH`c0P@M_T%TqbG7+>v$K@Z!}?(z7|@>P+X0b|3E`P6Gt(u64h^Inj{k1R}8u@=)YT7sl`cpZ!Q}W{QHg#3uBOGEh z=tDib-RK+6+1~gCe3_$7bJSFR_D-+iZv|I4s2cV{|7=+B9PGM^M70 zC2q31`hh4>21~^j_AapFCsRVx+cf1Q*}gA133ZIhnBWojt`u~;2MR(Ev88f(U|@=L za_zi#kYRTUAy6sANfVgb>#(>9e`4?*h))GhfzRJ&nU32+ZlUtsRHhP(=R}_eF-C#y z?P}?bf-s}J$OkniVIR=jxJ@b(0M| zHHP7&FJD69Qyz>8TMfmatuvHv(G4S<0{U-pk$s}l`sda}-yS%aFZ;0{Qf4+~WTxZ+ zO0Fc>boM!oTq$-ZHwZ^Y=EjV0&UUw(B$BGx;&J@-&B~65(2?;pGKSF!!=|Xf5=5o; zyO;KxhJSlaoq=0PkT?eL&j;BH>OXz?z&DL5&m1~Qn@y7N`n#1#I-&W*J;d-C0S zfi6zpv~aS~%s0cLm*eyg+`7BF(W7!6LX&esVP{ijVedb$m~`4OJ_{h+sZK~p5EgWY z+bSz5+1cA0@OpZBw)h;%9TZ)>sVLu^2?lLA~VV=SC*RhMtjIR2S!-!YOpX{NS%;5I{U zf9PoX>Cv6U>w}NuB_z@CWQqC%UF$0pUu8{tzoi{qQdV|y2Kt5eASMZXBeit#V`qEY zI*5qd>^QD?zx6uqw&McrVEXIuuN=b2Q5}5{VENI?kiQIH!b7xQ+)MNG^WXS}QtymE zqdd&(zaA!TI%CiEMsvy(o(;sf&YNV(f3|wM(53^2Ye+np2@6=E8=5s!vN3TQVQ#rl zq)y78-OWT!wA4&ab##W$g^1JVP)8H`VOfs+iK5}~3Jy3(UX`wi7mH)&mFc4rRVO8N zW1H2l!{j0t+1}h$)^ncD<+TMybPSL;U&pq)dB$jJB_!(mYwh?l3V^fgP7|L*8T$J3 z4n8E(zK=aIF7vt$i&;ACiojFb`ThHMTQmD6(Yv{m(u&s5Lte*s@5Z;Z$7|1bDzWzx zN~7_7{5}jSVy;_9ng4M-G3kiAh_f{+nijYB=LukNMRQ_m4IxL`mQXaDQ%j;$<*ncT zCDxSW!P~~~Ia(q_ltGIwIj%@M7U!}ICUi*xvNXpye(EBsJDDn*M6~9ajh^Sy(hI?coDY7if~Ci;e94 zZq1O2@-L&oruM>f5@|^NtGa}&M0NBOOx?`ny1LD-m?NS+-NK48XjD@HM02i=c|w~$ zZyS7nV_!G($H#CWDH=CjtcGAcJ;e#hCpypJH-;42v9d0`7_1T#G;I&Q<`EP1?9WM^ z@-;LWQ9(RlNV^h3Y7(io=!%J&l}guYu7LHaWsKnn-HBgjRtb_>S|cn9CXpE;u3y(m zU@#O~)QeAxz9>*nsVpcdEe*a{deWRIo1k;7o7nopbS)hxGh+Qo^G9T)r7fl%L7*Mk zQOL1(gL%h2&i!{~xfZ9dN#eB@RV(oM`N8q9{55Rfk#xT^!V&I3(H9yLMcg{i6gDV| zSZV46|9?R8Ij@_QaTpxs@28`Y@wzGK2S&OUXRnK<9{0-Kz+Qw*jXw?a9xGojEI3P>^yF_p5?n}AGQ;;oLMc* z>JnHe-8u4JM$2EJ9?#;9<*m&C>M}7hZZWuV%pF;dp-_3oXIWOi$-^#19V%*_&hZOt}{vQ`C`%1Ac( zpL0{Y`8>sziUOBOis} zD{%3!TfN zukAY-9!H&B9dh*2N(kyMo0?!!%LBPL8y^%7oqhp|=-8!h%^L+{hQ&Xl;Snxig2>`& zcTBrD)aBsS5DUyN<$o5#7QGhS5qX$=Abt?^Hv2jZ)d~Fr zQFD0@Ejs-~CDJ^GBF9_gf@-_+l0T>6Md1fuMaI%e?^xfSySnT-d6>eL!t}fnW(vnv z6fzC)FGxw&Jkl~UuA#$MDU9zNhRlO{q_>h@0>e&YWMimebb#N4p4zQm63ci$7vIwa zzT6RkYTLds=$=r1zARdRUU|Rs-e&&{#SWdwLU+I6Z1nhcp6DO5@iUhPpLy7!IZ2c3 zxiCGq2xrdidRZ20h3kzjydhm%_?F*j3Dsizw0q%ZT_n|daDpaiXOW-#Ho3NI_>m;2 zla9T2)};_HM8`NtR56X?Q2}10wd0G|+^$p1&1r0^Jd z)443Q>BMemsEWZF(*p#JOi&pq%is7R1!ieR*A^wVDH%KO4;be2jAHW|`23N8=pkgF zghJ{ytU`v-^kew71{H#P&Yqf}jgG@FkYBx1xEAB!9SZ+9@_!-_%WlVj_-5T`vQ(6! zvAa@CNeh-GKq^*QIBbIz!v^1dSTe=6R0V0^)H34x^2IbH`hHp?4zs127m!TP#)uR5fm{&9-ed*%A!SA zRN!F#MZjD|_5yHV6xi(_&$7q+pJVb;JwwCUq*L0Xl)zWK109Wd?Wk)7nXzfZY8<1m zW@NR3SDn{f`cqH$D3Z1z|1)UPaVXgRo(MqgfzvdqgaY2AlIvSAt!m=8q@sYaoTi6~fhCQO$jZPOX_D;z7z zkIb-HZQq|UGc(~Byh}o^yMzV|^y}-U^SH)3W@?Cr1r7UPUA+CP)XpTMBoy}4+&&_0 zBjwfo5-+`w(z*h7)B-k+3FepWD=jxp?|h1)7_f3k5qDZ{5}OKj*rUnJ!?;BXV>o@_ zwJSV{2?>L8>%a#x74CCY-+4iGq!15{W@{>=C~Z8j)#UPve(Z*nq$K2m5I?^nj;|Cl zero6Se4Ka6=EQA!j(OKhco6)9RM0Y?v%^V)->`;;hHH*UxXj$3bC59@oc%9c=P{#D z;JthIy1^gl9{dh{+TLSCO;+^+I1K2=$#bww|*63SZ--R+icTQ<{HA&Q(@Hr(^}~n7`9@x|Pp{en9Q_Ck_Q1 zazMXndqE1q5OhOdUtr2(zQtr@@SfgKDZul9;l%6Fyb&Vyu) zuBSh-zu1^%o#kFw9R=rMOOMtMw`gPv;{c=n#`Bgjzn!P#G6p`Ytva1+rB#FV)Q(G< zrVyM@M@_v-tlkptO@uk=#I6OFkUaDf0cADCa`{TcS3eUIO@u=-kC>B*v&sgq?hlx= zf)Tp~!!h|dSr^V@{57w`|B2!HyK|iu5w0Sh$YeKZ&j$oK=*kS#3>KgOVZ{vSqdyA7qWiBVSj&rv&r_?JHe@~mgr~USHmQZ zIhKle0;+({mQzKx^W=VPIGqR9Kz{_}iWwbL5nVmD>189U3i5gMcsWL(xryUZ-(P1$On`$ZqK z)FB)5TkXq*BX!fkj_xtg+5{2d_jk;`57n;f*a+5S_En}0L>e!Y4y%v@r-F9~qrO=j zi4wL=0{|BUV1j^w=sIX@V&c>0#;n1x>F3#aG((6~FVzwZj(ZxwAx|(B?f08y&i0m* z!L6Yy%^dT8Seu;vV%|4x6o z&Cj5UZVg_pdEw%Blj`-G>ny0-W77D6#4_RvtnlmOK=T5o!VWaHw`;`SFNZQXy?8FZ z<+%Wb>0r`^+w;uBUCJ2Izii@J476&-Jwyw*Vl*?`2l`EYrEfE@b_#h)AXOc#|JqOo zDVBVMv6Rs{A>2azIPy(Xs2oc03GFJf-@J`-QF8Ikv)goijcW?u_Pi75Vsv^nRk9OH zMA6R;9vdgbF=1FNG*4IYw_bBIJ72^4uwyR2hJ>>j3e$!ur zcuC#1AIJBK8V>0)zcJ5iWnyv5)1&BJxD^0lC2%+3aJVvFskl$Nsk4~wejyaBhm;QO zoxlIFkSPnv_N<~O9_E=5?I~w`s$E(Cp5A-61s(yGm5b@|^&D>h`pQhz$l^z=8ScG-CLq=#AN%a^|l zkJ?)9={4Tq8_6h`-j3$Yd)yGTi{6j8 zu2>#~NO3zK?rNj0RSj$XS9fh2({02;Iom_cC(tX!e5~J}KK6!XA${vaoCK)9aN|I+ zs^;#m+xIv5GR^W_;J8A0@mw%RX8Uy$;sYO#oa)@BLM1xo-%?2Ss&BS`TwcR+)I#<#B?gUd7;5?>=(DOo;W9jG7td$x;-UR!&EAiy$&R8 zvsls18Ils%f(;}4T&7ZL1GluBrsm~hUBhGT=E2#J<^3HMvUhjsoG0MiSbi(qtr(L^ z@*#E#yRtlVi;FFs0ApB$Lt4`j$M|% z%UeFOuP2)@EtfHNQW7hx?vUYz3IN? za-J`Z7@wH5&JZ18USc*jHm02AHRDc}Bo;!!?sBqf5z7Cf_Aja#LbC}q`gG)` zrg3d2t``M?&KB#zBhfJ1IQ)7*ns(dxkOx4Vn5^1f>6b?L zK8i-F`Qg9GB!fn;dN_QKkQZ6YXl#A$Es%zP@6_~?`QW)2hIs*MZpW!yD--%rOh%kF zAX&XNfvm)0B`!o7*D-`Pee{^P3jFi0aK{p`jm?W{)6?`gM za122jJiFw}gSX+>eYaM9{;Xzj8NW+$sS+mCg?! zIs5-Wue<8B7}5gF9;jVZ2={?Eylz-%%d74=BWu0a)=Iy3OX1AAVj(1QB{)!O4m`Lv zA+FhD)h+Jz{$<|w7$0HIjp#rlku}82}Ma<0eZru)C@Gb=&j&CZO zsq?_QdMvXq7IlBFj3;G33H6!cxA-UBFTJP!LaLSN%K>7^l;RsBgaX;RfyFlB$KEBo zXufSejmgeBJ*VY`?7hrqE1%0QF6!C(^PWGC?bf(8r~cA2MlPsAOA1V9<{Lu9j=Kv@ zO!OAidvY4_sKQeP(;a#O6*bkBYmr44wwfAwm2)!mrBuXI>-tNg)l}%+T z%$$mi3wJqKKf3ND)T3*IssFI99H1b^- zjX6pibRjiYTI$h21JglLKvzgnVBbWT=Xc6@zzbpo+cH5tEZn+%DzzUtD1GmIF!{q8 zSTc=P!ip-tGK>3C#+8Sz9h7-0;Q5X=ZfDHA=zcK@5j)ry|HyZE(I>+X>T1bsddIpy zh#tR7T{{`xm)WO7fJQj9eo!;J<6NKCqbh@w`{|$Opoag66s%o1x+PT(^99O?={bZH zh!6SJuiE@dblB~g`t2!q!wL;7A$OpPHIj-SZ-mdf92O;d^km>V47@B{g*$|0w8CIp zpWPTS$zO)0bE^#infP#O0E#dhUHq|XEc}1=xL6lhyAG@Uzdf!Usr$#iA|L9>ht2$# xWyI(m<^R_n;~>#LcnDarfrbIZl)0^4Tz>WK;BOU0;9rj?Zt9unmg(5N_z$Tch=BkA diff --git a/README.md b/docs/README.md similarity index 83% rename from README.md rename to docs/README.md index 8f59640..40fd43b 100644 --- a/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@

Microscopic fetch tool in Rust, for NixOS systems, with special emphasis on speed


Synopsis
- Features | Motivation
| Benchmarks
+ Features | Motivation | Benchmarks
Installation
@@ -27,11 +27,13 @@ communities. Aims to replace [fastfetch] on my personal system, but on your system: it is pretty _[fast](#benchmarks)_...

+
latest demo +

## Features @@ -55,10 +57,14 @@ on your system: it is pretty _[fast](#benchmarks)_... - Shell Colors - Did I mention fast? - Respects [`NO_COLOR` spec](https://no-color.org/) +- Funny [^2] [^1]: With the Mold linker, which is enabled by default in the Flake package, the binary size is roughly 350kb. That's nearly 20kb reduction in size :) +[^2]: I don't know how else to describe the (unhealthy) amount of handwritten + assembly that was written in order to make Microfetch faster. + ## Motivation [Rube-Goldmark Machine]: https://en.wikipedia.org/wiki/Rube_Goldberg_machine @@ -87,14 +93,15 @@ solve a technical problem. The "problem" Microfetch solves is entirely self-imposed. On the matter of _size_, the project is written in Rust, which comes at the cost of "bloated" dependency trees and the increased build times, but we make an extended effort to keep the dependencies minimal and build times -managable. The latter is also very easily mitigated with Nix's binary cache +manageable. The latter is also very easily mitigated with Nix's binary cache systems. Since Microfetch is already in Nixpkgs, you are recommended to use it to utilize the binary cache properly. The usage of Rust _is_ nice, however, since it provides us with incredible tooling and a very powerful language that allows for Microfetch to be as fast as possible. ~~Sure C could've been used here as well, but do you think I hate myself?~~ Microfetch now features handwritten assembly to unsafely optimize some areas. In hindsight you all -should have seen this coming. Is it faster? Yes. +should have seen this coming. Is it faster? Yes. Should you use this? If you +want to. Also see: [Rube-Goldmark Machine] @@ -128,9 +135,19 @@ up to date, but I will try to update the numbers as I make Microfetch faster. The point stands that Microfetch is significantly faster than every other fetch tool I have tried. This is to be expected, of course, since Microfetch is -designed _explicitly_ for speed and makes some tradeoffs to achieve it's +designed _explicitly_ for speed and makes some tradeoffs to achieve its signature speed. +> [!IMPORTANT] +> Some tools are excluded. Yes, I know. If you think they are important and thus +> should be covered in the benchmarks, feel free to create an issue. The purpose +> of this benchmarks section is not to badmouth other projects, but to +> demonstrate how much faster Microfetch is in comparison. Obviously Microfetch +> is designed to be small (in the sense of scope) and fast (in every definition +> of the word) so I speak of Microfetch's speed as a fact rather than an +> advantage. Reddit has a surprising ability to twist words and misunderstand +> ideals. + ### Benchmarking Individual Functions [Criterion.rs]: https://github.com/bheisler/criterion.rs @@ -169,21 +186,27 @@ performance regressions. ## Installation > [!NOTE] -> You will need a Nerdfonts patched font installed, and for your terminal -> emulator to support said font. Microfetch uses nerdfonts glyphs by default, +> You will need a Nerd Fonts patched font installed, and for your terminal +> emulator to support said font. Microfetch uses Nerd Fonts glyphs by default, > but this can be changed by [patching the program](#customizing). Microfetch is packaged in [nixpkgs](https://github.com/nixos/nixpkgs). It can be installed by adding `pkgs.microfetch` to your `environment.systemPackages`. -Additionally, you can try out Microfetch in a Nix shell. +Additionally, you can try out Microfetch in a Nix shell or install it using +flakes on non-NixOS systems. ```bash +# Enter a Nix shell with Microfetch; this will be lost on the next GC nix shell nixpkgs#microfetch + +# Install Microfetch globally; this will be kept on GC +nix profile add nixpkgs#microfetch ``` Or run it directly with `nix run` ```bash +# Run Microfetch from Nixpkgs. Subsequent runs will be faster. nix run nixpkgs#microfetch ``` @@ -200,15 +223,16 @@ have to be? ## Customizing -You can't. +You can't*. ### Why? -Customization, of most kinds, are expensive: I could try reading environment +Customization, of most kinds, is "expensive": I could try reading environment variables, parse command-line arguments or read a configuration file to allow configuring various fields but those inflate execution time and the resource consumption by a lot. Since Microfetch is closer to a code golf challenge than a -program that attempts to fill a gap, I have elected not to make this trade. +program that attempts to fill a gap, I have elected not to make this trade. This +is, of course, not without a solution. ### Really? @@ -217,13 +241,13 @@ program that attempts to fill a gap, I have elected not to make this trade. To be fair, you _can_ customize Microfetch by, well, patching it. It is certainly not the easiest way of doing so but if you are planning to change -something in Microfetch, patching is the best way to go. It will also the only -way that does not compromise on speed, unless you patch in bad code. Various -users have adapted Microfetch to their distribution by patching the -[main module] and inserting the logo of their choice. This is also the best way -to go if you plan to make small changes. If your changes are not small, you -might want to look for a program that is designed to be customizable; Microfetch -is built for maximum performance. +something in Microfetch, patching is the best way to go. It will also be the +only way that does not compromise on speed, unless you patch in bad code. +Various users have adapted Microfetch to their distribution of choice by +patching the [main module] and inserting the logo of their choice. This is also +the best way to go if you plan to make small changes. If your changes are not +small, you might want to look for a program that is designed to be customizable; +Microfetch is built for maximum performance and little else. The Nix package allows passing patches in a streamlined manner by passing `.overrideAttrs` to the derivation. You can apply your patches in `patches` and diff --git a/docs/assets/demo.png b/docs/assets/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..744f25d697d9c1c3eeef40b8e822658382b705b2 GIT binary patch literal 36133 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 ZhqO)GL^{;zGQZj~r0ZEk&B+U?e*t7VvBdxY literal 0 HcmV?d00001 From 303c09e51352b36892565201a895652faa18d032 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 12 Jan 2026 10:55:32 +0300 Subject: [PATCH 2/3] chore: add missing manifest fields for Cargo Signed-off-by: NotAShelf Change-Id: Ic5e6f6611b7e8db8c1b6680adb8e4f646a6a6964 --- Cargo.toml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0b62847..109f89b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,13 @@ [package] -name = "microfetch" -version = "0.4.13" -edition = "2024" +name = "microfetch" +description = "Microscopic fetch tool in Rust, for NixOS systems, with special emphasis on speed" +version = "0.4.13" +edition = "2024" +authors = [ "NotAShelf " ] +rust-version = "1.90" +readme = "./docs/README.md" +repository = "https://github.com/notashelf/microfetch" +license = "GPL-3.0" [lib] name = "microfetch_lib" From 3de8b5ef8e9bf9ad081fe143ab66158e09cee694 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 12 Jan 2026 11:01:00 +0300 Subject: [PATCH 3/3] docs: add `cargo install` instructions to README Signed-off-by: NotAShelf Change-Id: I2ff7d28036ef717fb8a5a29c0f98e3e86a6a6964 --- docs/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 40fd43b..2e8830b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -210,16 +210,25 @@ Or run it directly with `nix run` nix run nixpkgs#microfetch ``` -Non-Nix users will have to build Microfetch with `cargo`. It is not published -anywhere but I imagine you can use `cargo install --git` to install it from -source. +[crates.io]: https://crates.io/crates/microfetch + +Non-Nix users, if they plan to run this for some reason, will need to build +Microfetch from source or install it with `cargo`. Microfetch is published on +[crates.io] and can be installed with `cargo install`. ```bash -cargo install --git https://github.com/notashelf/microfetch.git +# Get Microfetch from crates.io +cargo install microfetch ``` -Microfetch is _currently_ not available anywhere else. Though, does it _really_ -have to be? +### Other Distros + + + +To my knowledge, there is no package for (nor a reason to package) Microfetch +but if you run a patched version for your distribution, feel free to leave your +repository (AUR, COPR, etc.) here as reference for those that might be +interested in Microfetch tailored to their distributions. ## Customizing