dripfetch 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. dripfetch/__init__.py +1 -0
  2. dripfetch/__main__.py +4 -0
  3. dripfetch/app.py +111 -0
  4. dripfetch/assets/logos/adelie.txt +16 -0
  5. dripfetch/assets/logos/aeon.txt +14 -0
  6. dripfetch/assets/logos/aeros.txt +21 -0
  7. dripfetch/assets/logos/aerynos.txt +16 -0
  8. dripfetch/assets/logos/afterglow.txt +15 -0
  9. dripfetch/assets/logos/aix.txt +20 -0
  10. dripfetch/assets/logos/almalinux.txt +20 -0
  11. dripfetch/assets/logos/alpine.txt +20 -0
  12. dripfetch/assets/logos/alpine2.txt +16 -0
  13. dripfetch/assets/logos/alpine2_small.txt +6 -0
  14. dripfetch/assets/logos/alpine3_small.txt +6 -0
  15. dripfetch/assets/logos/alpine_small.txt +6 -0
  16. dripfetch/assets/logos/alter.txt +20 -0
  17. dripfetch/assets/logos/altlinux.txt +22 -0
  18. dripfetch/assets/logos/amazon.txt +19 -0
  19. dripfetch/assets/logos/amazon_linux.txt +10 -0
  20. dripfetch/assets/logos/amogos.txt +19 -0
  21. dripfetch/assets/logos/anarchy.txt +28 -0
  22. dripfetch/assets/logos/android.txt +18 -0
  23. dripfetch/assets/logos/android_small.txt +6 -0
  24. dripfetch/assets/logos/anduinos.txt +19 -0
  25. dripfetch/assets/logos/antergos.txt +19 -0
  26. dripfetch/assets/logos/antix.txt +12 -0
  27. dripfetch/assets/logos/anushos.txt +20 -0
  28. dripfetch/assets/logos/aoscos.txt +17 -0
  29. dripfetch/assets/logos/aoscos_old.txt +20 -0
  30. dripfetch/assets/logos/aoscosretro.txt +18 -0
  31. dripfetch/assets/logos/aoscosretro_small.txt +9 -0
  32. dripfetch/assets/logos/aperture.txt +20 -0
  33. dripfetch/assets/logos/apricity.txt +18 -0
  34. dripfetch/assets/logos/arch.txt +19 -0
  35. dripfetch/assets/logos/arch2.txt +19 -0
  36. dripfetch/assets/logos/arch3.txt +19 -0
  37. dripfetch/assets/logos/arch_old.txt +16 -0
  38. dripfetch/assets/logos/arch_small.txt +7 -0
  39. dripfetch/assets/logos/archbox.txt +19 -0
  40. dripfetch/assets/logos/archcraft.txt +20 -0
  41. dripfetch/assets/logos/archcraft2.txt +20 -0
  42. dripfetch/assets/logos/archlabs.txt +21 -0
  43. dripfetch/assets/logos/archstrike.txt +17 -0
  44. dripfetch/assets/logos/arco.txt +20 -0
  45. dripfetch/assets/logos/arco_small.txt +11 -0
  46. dripfetch/assets/logos/arkane.txt +23 -0
  47. dripfetch/assets/logos/armbian.txt +22 -0
  48. dripfetch/assets/logos/armbian2.txt +14 -0
  49. dripfetch/assets/logos/arselinux.txt +15 -0
  50. dripfetch/assets/logos/artix.txt +20 -0
  51. dripfetch/assets/logos/artix2_small.txt +13 -0
  52. dripfetch/assets/logos/artix_small.txt +7 -0
  53. dripfetch/assets/logos/arya.txt +15 -0
  54. dripfetch/assets/logos/asahi.txt +18 -0
  55. dripfetch/assets/logos/asahi2.txt +18 -0
  56. dripfetch/assets/logos/aster.txt +18 -0
  57. dripfetch/assets/logos/asteroidos.txt +17 -0
  58. dripfetch/assets/logos/astos.txt +23 -0
  59. dripfetch/assets/logos/astra_linux.txt +22 -0
  60. dripfetch/assets/logos/athenaos.txt +29 -0
  61. dripfetch/assets/logos/athenaos_old.txt +24 -0
  62. dripfetch/assets/logos/aurora.txt +28 -0
  63. dripfetch/assets/logos/axos.txt +16 -0
  64. dripfetch/assets/logos/azos.txt +17 -0
  65. dripfetch/assets/logos/bedrock.txt +17 -0
  66. dripfetch/assets/logos/bedrock_small.txt +6 -0
  67. dripfetch/assets/logos/biglinux.txt +19 -0
  68. dripfetch/assets/logos/bitrig.txt +17 -0
  69. dripfetch/assets/logos/blackarch.txt +21 -0
  70. dripfetch/assets/logos/blackmesa.txt +20 -0
  71. dripfetch/assets/logos/blackpanther.txt +23 -0
  72. dripfetch/assets/logos/blag.txt +17 -0
  73. dripfetch/assets/logos/blankon.txt +17 -0
  74. dripfetch/assets/logos/bluelight.txt +19 -0
  75. dripfetch/assets/logos/bodhi.txt +18 -0
  76. dripfetch/assets/logos/bonsai.txt +16 -0
  77. dripfetch/assets/logos/bredos.txt +9 -0
  78. dripfetch/assets/logos/bsd.txt +19 -0
  79. dripfetch/assets/logos/bunsenlabs.txt +20 -0
  80. dripfetch/assets/logos/cachyos.txt +22 -0
  81. dripfetch/assets/logos/cachyos_small.txt +8 -0
  82. dripfetch/assets/logos/calculate.txt +20 -0
  83. dripfetch/assets/logos/calinixos.txt +25 -0
  84. dripfetch/assets/logos/calinixos_small.txt +15 -0
  85. dripfetch/assets/logos/carbs.txt +18 -0
  86. dripfetch/assets/logos/cbl_mariner.txt +18 -0
  87. dripfetch/assets/logos/celos.txt +15 -0
  88. dripfetch/assets/logos/center.txt +13 -0
  89. dripfetch/assets/logos/centos.txt +19 -0
  90. dripfetch/assets/logos/centos_small.txt +7 -0
  91. dripfetch/assets/logos/cereus.txt +27 -0
  92. dripfetch/assets/logos/chakra.txt +18 -0
  93. dripfetch/assets/logos/chaletos.txt +20 -0
  94. dripfetch/assets/logos/chapeau.txt +18 -0
  95. dripfetch/assets/logos/chimera_linux.txt +18 -0
  96. dripfetch/assets/logos/chonkysealos.txt +21 -0
  97. dripfetch/assets/logos/chrom.txt +18 -0
  98. dripfetch/assets/logos/cleanjaro.txt +12 -0
  99. dripfetch/assets/logos/cleanjaro_small.txt +7 -0
  100. dripfetch/assets/logos/clear_linux.txt +20 -0
  101. dripfetch/assets/logos/clearos.txt +20 -0
  102. dripfetch/assets/logos/clover.txt +20 -0
  103. dripfetch/assets/logos/cobalt.txt +16 -0
  104. dripfetch/assets/logos/codex.txt +12 -0
  105. dripfetch/assets/logos/condres.txt +17 -0
  106. dripfetch/assets/logos/cosmic.txt +11 -0
  107. dripfetch/assets/logos/crux.txt +18 -0
  108. dripfetch/assets/logos/crux_small.txt +7 -0
  109. dripfetch/assets/logos/crystal.txt +20 -0
  110. dripfetch/assets/logos/cucumber.txt +20 -0
  111. dripfetch/assets/logos/cuerdos.txt +13 -0
  112. dripfetch/assets/logos/cutefishos.txt +9 -0
  113. dripfetch/assets/logos/cuteos.txt +14 -0
  114. dripfetch/assets/logos/cyberos.txt +15 -0
  115. dripfetch/assets/logos/cycledream.txt +21 -0
  116. dripfetch/assets/logos/dahlia.txt +17 -0
  117. dripfetch/assets/logos/darkos.txt +20 -0
  118. dripfetch/assets/logos/debian.txt +17 -0
  119. dripfetch/assets/logos/debian_small.txt +6 -0
  120. dripfetch/assets/logos/deepin.txt +18 -0
  121. dripfetch/assets/logos/desaos.txt +16 -0
  122. dripfetch/assets/logos/devuan.txt +15 -0
  123. dripfetch/assets/logos/devuan_small.txt +7 -0
  124. dripfetch/assets/logos/dietpi.txt +19 -0
  125. dripfetch/assets/logos/dracos.txt +13 -0
  126. dripfetch/assets/logos/dragonfly.txt +15 -0
  127. dripfetch/assets/logos/dragonfly_old.txt +17 -0
  128. dripfetch/assets/logos/dragonfly_small.txt +7 -0
  129. dripfetch/assets/logos/drauger.txt +16 -0
  130. dripfetch/assets/logos/droidian.txt +15 -0
  131. dripfetch/assets/logos/elbrus.txt +14 -0
  132. dripfetch/assets/logos/elementary.txt +17 -0
  133. dripfetch/assets/logos/elementary_small.txt +6 -0
  134. dripfetch/assets/logos/elive.txt +17 -0
  135. dripfetch/assets/logos/encryptos.txt +13 -0
  136. dripfetch/assets/logos/endeavouros.txt +15 -0
  137. dripfetch/assets/logos/endeavouros_small.txt +7 -0
  138. dripfetch/assets/logos/endless.txt +20 -0
  139. dripfetch/assets/logos/enso.txt +19 -0
  140. dripfetch/assets/logos/eshanizedos.txt +27 -0
  141. dripfetch/assets/logos/eurolinux.txt +18 -0
  142. dripfetch/assets/logos/evolutionos.txt +21 -0
  143. dripfetch/assets/logos/evolutionos_old.txt +18 -0
  144. dripfetch/assets/logos/evolutionos_small.txt +9 -0
  145. dripfetch/assets/logos/eweos.txt +15 -0
  146. dripfetch/assets/logos/exherbo.txt +22 -0
  147. dripfetch/assets/logos/exodia_predator.txt +24 -0
  148. dripfetch/assets/logos/fastfetch.txt +11 -0
  149. dripfetch/assets/logos/fedora.txt +19 -0
  150. dripfetch/assets/logos/fedora2_small.txt +5 -0
  151. dripfetch/assets/logos/fedora_coreos.txt +20 -0
  152. dripfetch/assets/logos/fedora_kinoite.txt +18 -0
  153. dripfetch/assets/logos/fedora_old.txt +17 -0
  154. dripfetch/assets/logos/fedora_sericea.txt +17 -0
  155. dripfetch/assets/logos/fedora_silverblue.txt +17 -0
  156. dripfetch/assets/logos/fedora_small.txt +9 -0
  157. dripfetch/assets/logos/femboyos.txt +20 -0
  158. dripfetch/assets/logos/feren.txt +16 -0
  159. dripfetch/assets/logos/filotimo.txt +20 -0
  160. dripfetch/assets/logos/finnix.txt +17 -0
  161. dripfetch/assets/logos/floflis.txt +19 -0
  162. dripfetch/assets/logos/freebsd.txt +15 -0
  163. dripfetch/assets/logos/freebsd_small.txt +6 -0
  164. dripfetch/assets/logos/freemint.txt +15 -0
  165. dripfetch/assets/logos/frugalware.txt +23 -0
  166. dripfetch/assets/logos/funtoo.txt +10 -0
  167. dripfetch/assets/logos/furreto.txt +22 -0
  168. dripfetch/assets/logos/galliumos.txt +19 -0
  169. dripfetch/assets/logos/garuda.txt +18 -0
  170. dripfetch/assets/logos/garuda_dragon.txt +24 -0
  171. dripfetch/assets/logos/garuda_small.txt +5 -0
  172. dripfetch/assets/logos/gentoo.txt +18 -0
  173. dripfetch/assets/logos/gentoo_small.txt +7 -0
  174. dripfetch/assets/logos/ghostbsd.txt +13 -0
  175. dripfetch/assets/logos/ghostfreak.txt +19 -0
  176. dripfetch/assets/logos/glaucus.txt +12 -0
  177. dripfetch/assets/logos/gnewsense.txt +12 -0
  178. dripfetch/assets/logos/gnome.txt +21 -0
  179. dripfetch/assets/logos/gnu.txt +18 -0
  180. dripfetch/assets/logos/gobolinux.txt +6 -0
  181. dripfetch/assets/logos/goldendoglinux.txt +19 -0
  182. dripfetch/assets/logos/grapheneos.txt +23 -0
  183. dripfetch/assets/logos/grombyang.txt +18 -0
  184. dripfetch/assets/logos/guix.txt +10 -0
  185. dripfetch/assets/logos/guix_small.txt +7 -0
  186. dripfetch/assets/logos/haiku.txt +12 -0
  187. dripfetch/assets/logos/haiku2.txt +17 -0
  188. dripfetch/assets/logos/haiku_small.txt +8 -0
  189. dripfetch/assets/logos/hamonikr.txt +23 -0
  190. dripfetch/assets/logos/hardclanz.txt +19 -0
  191. dripfetch/assets/logos/harmonyos.txt +19 -0
  192. dripfetch/assets/logos/hash.txt +13 -0
  193. dripfetch/assets/logos/hce.txt +24 -0
  194. dripfetch/assets/logos/heliumos.txt +20 -0
  195. dripfetch/assets/logos/huayra.txt +17 -0
  196. dripfetch/assets/logos/hybrid.txt +16 -0
  197. dripfetch/assets/logos/hydrapwk.txt +11 -0
  198. dripfetch/assets/logos/hydroos.txt +8 -0
  199. dripfetch/assets/logos/hyperbola.txt +16 -0
  200. dripfetch/assets/logos/hyperbola_small.txt +7 -0
  201. dripfetch/assets/logos/hypros.txt +17 -0
  202. dripfetch/assets/logos/iglunix.txt +12 -0
  203. dripfetch/assets/logos/instantos.txt +20 -0
  204. dripfetch/assets/logos/interix.txt +17 -0
  205. dripfetch/assets/logos/irix.txt +19 -0
  206. dripfetch/assets/logos/ironclad.txt +11 -0
  207. dripfetch/assets/logos/itc.txt +10 -0
  208. dripfetch/assets/logos/januslinux.txt +24 -0
  209. dripfetch/assets/logos/kaisen.txt +17 -0
  210. dripfetch/assets/logos/kali.txt +21 -0
  211. dripfetch/assets/logos/kali_small.txt +16 -0
  212. dripfetch/assets/logos/kalpa_desktop.txt +22 -0
  213. dripfetch/assets/logos/kaos.txt +16 -0
  214. dripfetch/assets/logos/kdelinux.txt +14 -0
  215. dripfetch/assets/logos/kdeneon.txt +19 -0
  216. dripfetch/assets/logos/kernelos.txt +19 -0
  217. dripfetch/assets/logos/kibojoe.txt +13 -0
  218. dripfetch/assets/logos/kiss.txt +7 -0
  219. dripfetch/assets/logos/kogaion.txt +20 -0
  220. dripfetch/assets/logos/korora.txt +16 -0
  221. dripfetch/assets/logos/krassos.txt +19 -0
  222. dripfetch/assets/logos/kslinux.txt +11 -0
  223. dripfetch/assets/logos/kubuntu.txt +20 -0
  224. dripfetch/assets/logos/kylin.txt +22 -0
  225. dripfetch/assets/logos/lainos.txt +20 -0
  226. dripfetch/assets/logos/langitketujuh.txt +11 -0
  227. dripfetch/assets/logos/laxeros.txt +20 -0
  228. dripfetch/assets/logos/lede.txt +9 -0
  229. dripfetch/assets/logos/lfs.txt +18 -0
  230. dripfetch/assets/logos/libreelec.txt +20 -0
  231. dripfetch/assets/logos/lilidog.txt +16 -0
  232. dripfetch/assets/logos/lingmo.txt +20 -0
  233. dripfetch/assets/logos/linspire.txt +12 -0
  234. dripfetch/assets/logos/linux.txt +12 -0
  235. dripfetch/assets/logos/linux_small.txt +7 -0
  236. dripfetch/assets/logos/linuxlite.txt +20 -0
  237. dripfetch/assets/logos/linuxlite_small.txt +7 -0
  238. dripfetch/assets/logos/linuxmint.txt +19 -0
  239. dripfetch/assets/logos/linuxmint_old.txt +16 -0
  240. dripfetch/assets/logos/linuxmint_small.txt +7 -0
  241. dripfetch/assets/logos/live_raizo.txt +20 -0
  242. dripfetch/assets/logos/lliurex.txt +16 -0
  243. dripfetch/assets/logos/lmde.txt +17 -0
  244. dripfetch/assets/logos/locos.txt +18 -0
  245. dripfetch/assets/logos/lubuntu.txt +20 -0
  246. dripfetch/assets/logos/lunar.txt +13 -0
  247. dripfetch/assets/logos/macos.txt +17 -0
  248. dripfetch/assets/logos/macos2.txt +17 -0
  249. dripfetch/assets/logos/macos2_small.txt +7 -0
  250. dripfetch/assets/logos/macos3.txt +16 -0
  251. dripfetch/assets/logos/macos_small.txt +7 -0
  252. dripfetch/assets/logos/mageia.txt +19 -0
  253. dripfetch/assets/logos/mageia_small.txt +7 -0
  254. dripfetch/assets/logos/magix.txt +19 -0
  255. dripfetch/assets/logos/magpieos.txt +20 -0
  256. dripfetch/assets/logos/mainsailos.txt +18 -0
  257. dripfetch/assets/logos/mainsailos_small.txt +7 -0
  258. dripfetch/assets/logos/mandriva.txt +15 -0
  259. dripfetch/assets/logos/manjaro.txt +14 -0
  260. dripfetch/assets/logos/manjaro_small.txt +7 -0
  261. dripfetch/assets/logos/massos.txt +18 -0
  262. dripfetch/assets/logos/matuusos.txt +20 -0
  263. dripfetch/assets/logos/maui.txt +20 -0
  264. dripfetch/assets/logos/mauna.txt +15 -0
  265. dripfetch/assets/logos/meowix.txt +10 -0
  266. dripfetch/assets/logos/mer.txt +27 -0
  267. dripfetch/assets/logos/midnightbsd.txt +16 -0
  268. dripfetch/assets/logos/midos.txt +20 -0
  269. dripfetch/assets/logos/midos_old.txt +20 -0
  270. dripfetch/assets/logos/minimal.txt +18 -0
  271. dripfetch/assets/logos/minix.txt +17 -0
  272. dripfetch/assets/logos/miracle_linux.txt +16 -0
  273. dripfetch/assets/logos/mos.txt +18 -0
  274. dripfetch/assets/logos/msys2.txt +25 -0
  275. dripfetch/assets/logos/mx.txt +17 -0
  276. dripfetch/assets/logos/mx2.txt +18 -0
  277. dripfetch/assets/logos/mx_small.txt +7 -0
  278. dripfetch/assets/logos/namib.txt +20 -0
  279. dripfetch/assets/logos/nekos.txt +23 -0
  280. dripfetch/assets/logos/neptune.txt +17 -0
  281. dripfetch/assets/logos/netbsd.txt +17 -0
  282. dripfetch/assets/logos/netbsd2.txt +20 -0
  283. dripfetch/assets/logos/netbsd_small.txt +8 -0
  284. dripfetch/assets/logos/netrunner.txt +20 -0
  285. dripfetch/assets/logos/nexalinux.txt +19 -0
  286. dripfetch/assets/logos/nitrux.txt +18 -0
  287. dripfetch/assets/logos/nixos.txt +20 -0
  288. dripfetch/assets/logos/nixos_old.txt +28 -0
  289. dripfetch/assets/logos/nixos_old_small.txt +7 -0
  290. dripfetch/assets/logos/nixos_small.txt +7 -0
  291. dripfetch/assets/logos/nobara.txt +17 -0
  292. dripfetch/assets/logos/nomadbsd.txt +13 -0
  293. dripfetch/assets/logos/nuros.txt +12 -0
  294. dripfetch/assets/logos/nurunner.txt +19 -0
  295. dripfetch/assets/logos/nutyx.txt +23 -0
  296. dripfetch/assets/logos/obarun.txt +19 -0
  297. dripfetch/assets/logos/obrevenge.txt +18 -0
  298. dripfetch/assets/logos/obsidianos.txt +16 -0
  299. dripfetch/assets/logos/omnios.txt +8 -0
  300. dripfetch/assets/logos/opak.txt +13 -0
  301. dripfetch/assets/logos/openbsd.txt +23 -0
  302. dripfetch/assets/logos/openbsd_small.txt +7 -0
  303. dripfetch/assets/logos/openeuler.txt +23 -0
  304. dripfetch/assets/logos/openindiana.txt +16 -0
  305. dripfetch/assets/logos/openkylin.txt +18 -0
  306. dripfetch/assets/logos/openmamba.txt +21 -0
  307. dripfetch/assets/logos/openmandriva.txt +22 -0
  308. dripfetch/assets/logos/openstage.txt +17 -0
  309. dripfetch/assets/logos/opensuse.txt +18 -0
  310. dripfetch/assets/logos/opensuse_leap.txt +18 -0
  311. dripfetch/assets/logos/opensuse_leap_old.txt +16 -0
  312. dripfetch/assets/logos/opensuse_microos.txt +10 -0
  313. dripfetch/assets/logos/opensuse_slowroll.txt +20 -0
  314. dripfetch/assets/logos/opensuse_small.txt +7 -0
  315. dripfetch/assets/logos/opensuse_tumbleweed.txt +22 -0
  316. dripfetch/assets/logos/opensuse_tumbleweed_old.txt +13 -0
  317. dripfetch/assets/logos/opensuse_tumbleweed_small.txt +9 -0
  318. dripfetch/assets/logos/openwrt.txt +9 -0
  319. dripfetch/assets/logos/opnsense.txt +20 -0
  320. dripfetch/assets/logos/oracle.txt +11 -0
  321. dripfetch/assets/logos/orchid.txt +20 -0
  322. dripfetch/assets/logos/orchid_small.txt +13 -0
  323. dripfetch/assets/logos/oreon.txt +22 -0
  324. dripfetch/assets/logos/os_elbrus.txt +14 -0
  325. dripfetch/assets/logos/osmc.txt +20 -0
  326. dripfetch/assets/logos/pacbsd.txt +24 -0
  327. dripfetch/assets/logos/panwah.txt +21 -0
  328. dripfetch/assets/logos/parabola.txt +16 -0
  329. dripfetch/assets/logos/parabola_small.txt +6 -0
  330. dripfetch/assets/logos/parch.txt +25 -0
  331. dripfetch/assets/logos/pardus.txt +18 -0
  332. dripfetch/assets/logos/parrot.txt +24 -0
  333. dripfetch/assets/logos/parsix.txt +21 -0
  334. dripfetch/assets/logos/pcbsd.txt +27 -0
  335. dripfetch/assets/logos/pclinuxos.txt +19 -0
  336. dripfetch/assets/logos/pearos.txt +21 -0
  337. dripfetch/assets/logos/pengwin.txt +15 -0
  338. dripfetch/assets/logos/pentoo.txt +20 -0
  339. dripfetch/assets/logos/peppermint.txt +21 -0
  340. dripfetch/assets/logos/peropesis.txt +5 -0
  341. dripfetch/assets/logos/phyos.txt +17 -0
  342. dripfetch/assets/logos/pikaos.txt +18 -0
  343. dripfetch/assets/logos/pisi.txt +19 -0
  344. dripfetch/assets/logos/pnm_linux.txt +19 -0
  345. dripfetch/assets/logos/pop.txt +20 -0
  346. dripfetch/assets/logos/pop_small.txt +8 -0
  347. dripfetch/assets/logos/porteus.txt +23 -0
  348. dripfetch/assets/logos/postmarketos.txt +18 -0
  349. dripfetch/assets/logos/postmarketos_small.txt +9 -0
  350. dripfetch/assets/logos/proxmox.txt +20 -0
  351. dripfetch/assets/logos/puffos.txt +12 -0
  352. dripfetch/assets/logos/puppy.txt +18 -0
  353. dripfetch/assets/logos/pureos.txt +12 -0
  354. dripfetch/assets/logos/pureos_small.txt +6 -0
  355. dripfetch/assets/logos/q4os.txt +19 -0
  356. dripfetch/assets/logos/qts.txt +14 -0
  357. dripfetch/assets/logos/qubes.txt +21 -0
  358. dripfetch/assets/logos/qubyt.txt +15 -0
  359. dripfetch/assets/logos/quibian.txt +18 -0
  360. dripfetch/assets/logos/quirinux.txt +17 -0
  361. dripfetch/assets/logos/radix.txt +18 -0
  362. dripfetch/assets/logos/raspbian.txt +23 -0
  363. dripfetch/assets/logos/raspbian_small.txt +10 -0
  364. dripfetch/assets/logos/ravynos.txt +20 -0
  365. dripfetch/assets/logos/rebornos.txt +20 -0
  366. dripfetch/assets/logos/rebornos_small.txt +7 -0
  367. dripfetch/assets/logos/redcore.txt +16 -0
  368. dripfetch/assets/logos/redos.txt +18 -0
  369. dripfetch/assets/logos/redos_small.txt +8 -0
  370. dripfetch/assets/logos/redstar.txt +18 -0
  371. dripfetch/assets/logos/refracted_devuan.txt +18 -0
  372. dripfetch/assets/logos/regata.txt +20 -0
  373. dripfetch/assets/logos/regolith.txt +18 -0
  374. dripfetch/assets/logos/rhaymos.txt +14 -0
  375. dripfetch/assets/logos/rhel.txt +18 -0
  376. dripfetch/assets/logos/rhel_old.txt +16 -0
  377. dripfetch/assets/logos/rhel_small.txt +9 -0
  378. dripfetch/assets/logos/rhino.txt +12 -0
  379. dripfetch/assets/logos/rocky.txt +19 -0
  380. dripfetch/assets/logos/rocky_small.txt +12 -0
  381. dripfetch/assets/logos/rosa.txt +18 -0
  382. dripfetch/assets/logos/sabayon.txt +18 -0
  383. dripfetch/assets/logos/sabotage.txt +11 -0
  384. dripfetch/assets/logos/sailfish.txt +13 -0
  385. dripfetch/assets/logos/salentos.txt +20 -0
  386. dripfetch/assets/logos/salientos.txt +20 -0
  387. dripfetch/assets/logos/salix.txt +18 -0
  388. dripfetch/assets/logos/sambabox.txt +19 -0
  389. dripfetch/assets/logos/sasanqua.txt +18 -0
  390. dripfetch/assets/logos/scientific.txt +20 -0
  391. dripfetch/assets/logos/semc.txt +9 -0
  392. dripfetch/assets/logos/septor.txt +20 -0
  393. dripfetch/assets/logos/serene.txt +20 -0
  394. dripfetch/assets/logos/serpent_os.txt +18 -0
  395. dripfetch/assets/logos/sharklinux.txt +15 -0
  396. dripfetch/assets/logos/shastraos.txt +19 -0
  397. dripfetch/assets/logos/shebang.txt +20 -0
  398. dripfetch/assets/logos/siduction.txt +20 -0
  399. dripfetch/assets/logos/skiffos.txt +9 -0
  400. dripfetch/assets/logos/slackel.txt +22 -0
  401. dripfetch/assets/logos/slackware.txt +21 -0
  402. dripfetch/assets/logos/slackware_small.txt +7 -0
  403. dripfetch/assets/logos/sleeperos.txt +16 -0
  404. dripfetch/assets/logos/sleeperos_small.txt +7 -0
  405. dripfetch/assets/logos/slitaz.txt +17 -0
  406. dripfetch/assets/logos/smartos.txt +17 -0
  407. dripfetch/assets/logos/snigdhaos.txt +20 -0
  408. dripfetch/assets/logos/soda.txt +15 -0
  409. dripfetch/assets/logos/solaris.txt +8 -0
  410. dripfetch/assets/logos/solaris_small.txt +5 -0
  411. dripfetch/assets/logos/solus.txt +20 -0
  412. dripfetch/assets/logos/source_mage.txt +21 -0
  413. dripfetch/assets/logos/sparky.txt +20 -0
  414. dripfetch/assets/logos/spoinkos.txt +5 -0
  415. dripfetch/assets/logos/star.txt +19 -0
  416. dripfetch/assets/logos/steamdeck.txt +24 -0
  417. dripfetch/assets/logos/steamdeck_small.txt +5 -0
  418. dripfetch/assets/logos/steamos.txt +18 -0
  419. dripfetch/assets/logos/stock_linux.txt +19 -0
  420. dripfetch/assets/logos/sulin.txt +20 -0
  421. dripfetch/assets/logos/summitos.txt +22 -0
  422. dripfetch/assets/logos/suse.txt +11 -0
  423. dripfetch/assets/logos/swagarch.txt +15 -0
  424. dripfetch/assets/logos/t2.txt +14 -0
  425. dripfetch/assets/logos/t2_small.txt +6 -0
  426. dripfetch/assets/logos/tails.txt +19 -0
  427. dripfetch/assets/logos/tatra.txt +15 -0
  428. dripfetch/assets/logos/tearch.txt +21 -0
  429. dripfetch/assets/logos/templeos.txt +20 -0
  430. dripfetch/assets/logos/tileos.txt +20 -0
  431. dripfetch/assets/logos/torizoncore.txt +29 -0
  432. dripfetch/assets/logos/trisquel.txt +17 -0
  433. dripfetch/assets/logos/truenas_scale.txt +18 -0
  434. dripfetch/assets/logos/tuxedo_os.txt +16 -0
  435. dripfetch/assets/logos/twister.txt +23 -0
  436. dripfetch/assets/logos/ublinux.txt +19 -0
  437. dripfetch/assets/logos/ublinux_small.txt +11 -0
  438. dripfetch/assets/logos/ubuntu.txt +20 -0
  439. dripfetch/assets/logos/ubuntu_budgie.txt +20 -0
  440. dripfetch/assets/logos/ubuntu_cinnamon.txt +20 -0
  441. dripfetch/assets/logos/ubuntu_gnome.txt +16 -0
  442. dripfetch/assets/logos/ubuntu_kylin.txt +20 -0
  443. dripfetch/assets/logos/ubuntu_mate.txt +20 -0
  444. dripfetch/assets/logos/ubuntu_old.txt +20 -0
  445. dripfetch/assets/logos/ubuntu_old2.txt +18 -0
  446. dripfetch/assets/logos/ubuntu_old2_small.txt +6 -0
  447. dripfetch/assets/logos/ubuntu_small.txt +11 -0
  448. dripfetch/assets/logos/ubuntu_studio.txt +20 -0
  449. dripfetch/assets/logos/ubuntu_sway.txt +20 -0
  450. dripfetch/assets/logos/ubuntu_touch.txt +7 -0
  451. dripfetch/assets/logos/ubuntu_unity.txt +25 -0
  452. dripfetch/assets/logos/ultramarine.txt +20 -0
  453. dripfetch/assets/logos/ultramarine_small.txt +14 -0
  454. dripfetch/assets/logos/unifi.txt +6 -0
  455. dripfetch/assets/logos/univalent.txt +18 -0
  456. dripfetch/assets/logos/univention.txt +20 -0
  457. dripfetch/assets/logos/unknown.txt +18 -0
  458. dripfetch/assets/logos/uos.txt +20 -0
  459. dripfetch/assets/logos/urukos.txt +20 -0
  460. dripfetch/assets/logos/uwuntu.txt +20 -0
  461. dripfetch/assets/logos/valhalla.txt +10 -0
  462. dripfetch/assets/logos/vanilla.txt +18 -0
  463. dripfetch/assets/logos/vanilla2.txt +16 -0
  464. dripfetch/assets/logos/vanilla_small.txt +7 -0
  465. dripfetch/assets/logos/venom.txt +19 -0
  466. dripfetch/assets/logos/venom_small.txt +11 -0
  467. dripfetch/assets/logos/vnux.txt +20 -0
  468. dripfetch/assets/logos/void.txt +18 -0
  469. dripfetch/assets/logos/void2.txt +25 -0
  470. dripfetch/assets/logos/void2_small.txt +7 -0
  471. dripfetch/assets/logos/void_small.txt +7 -0
  472. dripfetch/assets/logos/vzlinux.txt +20 -0
  473. dripfetch/assets/logos/wii_linux.txt +16 -0
  474. dripfetch/assets/logos/windows.txt +16 -0
  475. dripfetch/assets/logos/windows_11.txt +17 -0
  476. dripfetch/assets/logos/windows_11_small.txt +7 -0
  477. dripfetch/assets/logos/windows_2025.txt +17 -0
  478. dripfetch/assets/logos/windows_8.txt +19 -0
  479. dripfetch/assets/logos/windows_95.txt +18 -0
  480. dripfetch/assets/logos/wolfos.txt +5 -0
  481. dripfetch/assets/logos/xcp_ng.txt +15 -0
  482. dripfetch/assets/logos/xenia.txt +15 -0
  483. dripfetch/assets/logos/xenia_old.txt +21 -0
  484. dripfetch/assets/logos/xeroarch.txt +19 -0
  485. dripfetch/assets/logos/xferience.txt +19 -0
  486. dripfetch/assets/logos/xray_os.txt +21 -0
  487. dripfetch/assets/logos/xubuntu.txt +19 -0
  488. dripfetch/assets/logos/yiffos.txt +19 -0
  489. dripfetch/assets/logos/zorin.txt +17 -0
  490. dripfetch/assets/logos/zos.txt +7 -0
  491. dripfetch/box/__init__.py +5 -0
  492. dripfetch/box/base.py +24 -0
  493. dripfetch/box/borders.py +41 -0
  494. dripfetch/box/colors.py +110 -0
  495. dripfetch/box/manager.py +181 -0
  496. dripfetch/box/placement.py +40 -0
  497. dripfetch/box/types/__init__.py +5 -0
  498. dripfetch/box/types/clock.py +487 -0
  499. dripfetch/box/types/logo.py +62 -0
  500. dripfetch/box/types/sysinfo.py +570 -0
  501. dripfetch/box/types/text.py +16 -0
  502. dripfetch/box/types/weather.py +181 -0
  503. dripfetch/cli.py +58 -0
  504. dripfetch/config.py +405 -0
  505. dripfetch/default_config.yaml +80 -0
  506. dripfetch/rain/__init__.py +3 -0
  507. dripfetch/rain/collision.py +23 -0
  508. dripfetch/rain/colors.py +51 -0
  509. dripfetch/rain/drop.py +16 -0
  510. dripfetch/rain/engine.py +190 -0
  511. dripfetch/rain/movement.py +46 -0
  512. dripfetch/rain/spawning.py +59 -0
  513. dripfetch/terminal.py +193 -0
  514. dripfetch-0.1.0.dist-info/METADATA +47 -0
  515. dripfetch-0.1.0.dist-info/RECORD +519 -0
  516. dripfetch-0.1.0.dist-info/WHEEL +5 -0
  517. dripfetch-0.1.0.dist-info/entry_points.txt +2 -0
  518. dripfetch-0.1.0.dist-info/licenses/LICENSE +21 -0
  519. dripfetch-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,570 @@
1
+ import ipaddress
2
+ import os
3
+ import platform
4
+ import socket
5
+ import subprocess
6
+ import threading
7
+ import time
8
+
9
+ import psutil
10
+
11
+ from ..base import BaseBox
12
+
13
+
14
+ class SysInfoBox(BaseBox):
15
+ LINE_CHARS = set("┌─│├└┐┘┤┬┴┼")
16
+ TITLES = {"SYSTEM", "DISPLAY", "HARDWARE", "DISK", "CONNECTIVITY"}
17
+
18
+ def __init__(self, stdscr, config, boxes_config, colors, renderer):
19
+ super().__init__(stdscr, config, boxes_config, colors, renderer)
20
+ self.lock = threading.Lock()
21
+ self.stop_event = threading.Event()
22
+ self.static = {
23
+ "os": f"macOS {platform.mac_ver()[0]} {platform.machine()}",
24
+ "host": "Loading...",
25
+ "kernel": f"Darwin {platform.release()}",
26
+ "packages": "Loading...",
27
+ "shell": "Loading...",
28
+ "displays": [],
29
+ "de": "Liquid Glass",
30
+ "terminal": self._terminal(),
31
+ "cpu_brand": "Loading...",
32
+ "cpu_cores": "Loading...",
33
+ "memory_total": 0,
34
+ }
35
+ self.lines = self._build_lines(
36
+ "Loading...",
37
+ "Loading...",
38
+ [],
39
+ "Loading...",
40
+ "Loading",
41
+ False,
42
+ "Loading...",
43
+ )
44
+ self.thread = threading.Thread(
45
+ target=self._initialize,
46
+ daemon=True,
47
+ )
48
+ self.thread.start()
49
+
50
+ def _command(self, *args):
51
+ try:
52
+ return subprocess.check_output(
53
+ args,
54
+ text=True,
55
+ stderr=subprocess.DEVNULL,
56
+ ).strip()
57
+ except (OSError, subprocess.CalledProcessError):
58
+ return ""
59
+
60
+ def _bytes(self, value):
61
+ value = float(value)
62
+
63
+ for unit in ("B", "KiB", "MiB", "GiB", "TiB"):
64
+ if value < 1024:
65
+ return f"{value:.2f} {unit}"
66
+ value /= 1024
67
+
68
+ return f"{value:.2f} PiB"
69
+
70
+ def _uptime(self):
71
+ try:
72
+ seconds = int(time.time() - psutil.boot_time())
73
+ except (OSError, RuntimeError):
74
+ return "Unknown"
75
+
76
+ days, seconds = divmod(seconds, 86400)
77
+ hours, seconds = divmod(seconds, 3600)
78
+ minutes = seconds // 60
79
+
80
+ if days:
81
+ return f"{days}d {hours}h {minutes}m"
82
+ if hours:
83
+ return f"{hours}h {minutes}m"
84
+ return f"{minutes}m"
85
+
86
+ def _host(self):
87
+ identifier = self._command("sysctl", "-n", "hw.model")
88
+
89
+ if identifier == "MacBookPro18,1":
90
+ return "MacBook Pro (16-inch, 2021)"
91
+
92
+ model = "Unknown"
93
+
94
+ for line in self._command(
95
+ "system_profiler",
96
+ "SPHardwareDataType",
97
+ ).splitlines():
98
+ line = line.strip()
99
+
100
+ if line.startswith("Model Name:"):
101
+ model = line.split(":", 1)[1].strip()
102
+ break
103
+
104
+ return model
105
+
106
+ def _packages(self):
107
+ output = self._command("brew", "list", "--formula")
108
+ return f"{len(output.splitlines()) if output else 0} brew formulas"
109
+
110
+ def _shell(self):
111
+ shell = os.path.basename(os.environ.get("SHELL", ""))
112
+
113
+ if not shell:
114
+ return "Unknown"
115
+
116
+ version = self._command(shell, "--version")
117
+
118
+ if version:
119
+ version = version.splitlines()[0]
120
+
121
+ if " " in version:
122
+ version = version.split(" ", 1)[1]
123
+
124
+ version = version.split(" (", 1)[0]
125
+
126
+ return f"{shell} {version}".strip()
127
+
128
+ def _format_displays(self):
129
+ displays = []
130
+ current = None
131
+
132
+ for raw in self._command(
133
+ "system_profiler",
134
+ "SPDisplaysDataType",
135
+ ).splitlines():
136
+ line = raw.strip()
137
+
138
+ if raw.startswith(" ") and line.endswith(":"):
139
+ name = line[:-1]
140
+
141
+ if name not in {"Displays", "Apple M1 Pro"}:
142
+ current = {"name": name}
143
+ displays.append(current)
144
+
145
+ elif current and line.startswith("Resolution:"):
146
+ current["resolution"] = line.split(":", 1)[1].strip()
147
+
148
+ elif current and line.startswith("UI Looks like:"):
149
+ current["ui"] = line.split(":", 1)[1].strip()
150
+
151
+ lines = []
152
+
153
+ for display in displays:
154
+ name = "MacBook Pro" if display["name"] == "Color LCD" else display["name"]
155
+ resolution = display.get("resolution", "")
156
+ ui = display.get("ui")
157
+
158
+ if ui:
159
+ lines.append(f"{name}: {ui.replace('.00Hz', ' Hz')}")
160
+ elif name == "MacBook Pro":
161
+ lines.append(f"{name}: {resolution.replace(' Retina', '')} @ 120 Hz")
162
+ elif resolution:
163
+ lines.append(f"{name}: {resolution}")
164
+
165
+ return lines
166
+
167
+ def _cpu(self):
168
+ brand = self.static["cpu_brand"]
169
+ cores = self.static["cpu_cores"]
170
+
171
+ try:
172
+ frequency = psutil.cpu_freq()
173
+
174
+ if frequency:
175
+ frequency = f"{frequency.current / 1000:.2f} GHz"
176
+ else:
177
+ frequency = "Unknown"
178
+ except (AttributeError, OSError, RuntimeError, TypeError):
179
+ frequency = "Unknown"
180
+
181
+ try:
182
+ usage = psutil.cpu_percent()
183
+ except (OSError, RuntimeError):
184
+ usage = 0
185
+
186
+ return f"{brand} ({cores}) @ {frequency} ({usage:.0f}%)"
187
+
188
+ def _memory(self):
189
+ values = {}
190
+
191
+ for line in self._command("vm_stat").splitlines():
192
+ if ":" not in line:
193
+ continue
194
+
195
+ key, value = line.split(":", 1)
196
+
197
+ try:
198
+ values[key] = int(value.strip().rstrip("."))
199
+ except ValueError:
200
+ pass
201
+
202
+ total = self.static["memory_total"]
203
+
204
+ if not total:
205
+ return "Unknown"
206
+
207
+ available = (
208
+ sum(
209
+ values.get(key, 0)
210
+ for key in (
211
+ "Pages free",
212
+ "Pages inactive",
213
+ "Pages speculative",
214
+ )
215
+ )
216
+ * 4096
217
+ )
218
+
219
+ used = max(0, total - available)
220
+
221
+ return f"{self._bytes(used)} / {self._bytes(total)} ({used / total * 100:.0f}%)"
222
+
223
+ def _disks(self):
224
+ results = []
225
+ seen = set()
226
+
227
+ for line in self._command("df", "-k").splitlines()[1:]:
228
+ parts = line.split()
229
+
230
+ if len(parts) < 6:
231
+ continue
232
+
233
+ mount = " ".join(parts[8:]) if len(parts) > 8 else parts[5]
234
+
235
+ if mount != "/" and not mount.startswith("/Volumes/RYX "):
236
+ continue
237
+
238
+ if mount in seen:
239
+ continue
240
+
241
+ try:
242
+ used = int(parts[2]) * 1024
243
+ total = int(parts[1]) * 1024
244
+ percent = int(parts[4].rstrip("%"))
245
+ except ValueError:
246
+ continue
247
+
248
+ seen.add(mount)
249
+ results.append((mount, self._bytes(used), self._bytes(total), percent))
250
+
251
+ return results
252
+
253
+ def _network(self):
254
+ try:
255
+ addresses = psutil.net_if_addrs().get("en0", [])
256
+ except (OSError, RuntimeError):
257
+ return "Unknown"
258
+
259
+ for address in addresses:
260
+ if address.family != socket.AF_INET:
261
+ continue
262
+
263
+ try:
264
+ prefix = ipaddress.IPv4Network(f"0.0.0.0/{address.netmask}").prefixlen
265
+ except ValueError:
266
+ continue
267
+
268
+ return f"{address.address}/{prefix}"
269
+
270
+ return "Unknown"
271
+
272
+ def _battery(self):
273
+ percent = "Unknown"
274
+ connected = False
275
+ adapter = "Unknown"
276
+
277
+ for line in self._command(
278
+ "system_profiler",
279
+ "SPPowerDataType",
280
+ ).splitlines():
281
+ line = line.strip()
282
+
283
+ if line.startswith("State of Charge (%):"):
284
+ percent = line.split(":", 1)[1].strip()
285
+
286
+ elif line.startswith("Connected:"):
287
+ connected = line.split(":", 1)[1].strip() == "Yes"
288
+
289
+ elif line.startswith("Wattage (W):"):
290
+ adapter = f"{line.split(':', 1)[1].strip()}W USB-C Power Adapter"
291
+
292
+ return percent, connected, adapter
293
+
294
+ def _terminal(self):
295
+ name = os.environ.get("TERM_PROGRAM", "Unknown")
296
+ version = os.environ.get("TERM_PROGRAM_VERSION", "")
297
+
298
+ if name == "iTerm.app":
299
+ name = "iTerm"
300
+
301
+ return f"{name} {version}".strip()
302
+
303
+ def _set_static(self, key, value):
304
+ with self.lock:
305
+ self.static[key] = value
306
+
307
+ def _collect_static(self):
308
+ values = {
309
+ "host": self._host(),
310
+ "packages": self._packages(),
311
+ "shell": self._shell(),
312
+ "cpu_brand": self._command(
313
+ "sysctl",
314
+ "-n",
315
+ "machdep.cpu.brand_string",
316
+ )
317
+ or "Unknown",
318
+ "cpu_cores": self._command(
319
+ "sysctl",
320
+ "-n",
321
+ "hw.ncpu",
322
+ )
323
+ or "Unknown",
324
+ "displays": self._format_displays(),
325
+ }
326
+
327
+ try:
328
+ values["memory_total"] = int(
329
+ self._command(
330
+ "sysctl",
331
+ "-n",
332
+ "hw.memsize",
333
+ )
334
+ )
335
+ except (TypeError, ValueError):
336
+ values["memory_total"] = 0
337
+
338
+ with self.lock:
339
+ self.static.update(values)
340
+
341
+ def _section(self, title, items):
342
+ lines = [f"├─ {title}"]
343
+
344
+ for index, item in enumerate(items):
345
+ prefix = "└─" if index == len(items) - 1 else "├─"
346
+ lines.append(f"│ {prefix} {item}")
347
+
348
+ return lines
349
+
350
+ def _build_lines(
351
+ self,
352
+ cpu,
353
+ memory,
354
+ disks,
355
+ ip,
356
+ battery,
357
+ connected,
358
+ adapter,
359
+ ):
360
+ lines = [
361
+ "┌─ SYSTEM",
362
+ f"│ ├─ OS {self.static['os']}",
363
+ f"│ ├─ Host {self.static['host']}",
364
+ f"│ ├─ Kernel {self.static['kernel']}",
365
+ f"│ ├─ Uptime {self._uptime()}",
366
+ f"│ ├─ Packages {self.static['packages']}",
367
+ f"│ ├─ Shell {self.static['shell']}",
368
+ f"│ ├─ Terminal {self.static['terminal']}",
369
+ f"│ └─ DE {self.static['de']}",
370
+ "│",
371
+ ]
372
+
373
+ displays = self.static["displays"]
374
+
375
+ lines.extend(
376
+ self._section("DISPLAY", displays)
377
+ if displays
378
+ else ["├─ DISPLAY", "│ └─ Loading..."]
379
+ )
380
+
381
+ lines.extend(
382
+ [
383
+ "│",
384
+ "├─ HARDWARE",
385
+ f"│ ├─ CPU {cpu}",
386
+ f"│ └─ Memory {memory}",
387
+ "│",
388
+ "├─ DISK",
389
+ ]
390
+ )
391
+
392
+ if disks:
393
+ for index, (mount, used, total, percent) in enumerate(disks):
394
+ name = "/" if mount == "/" else mount.removeprefix("/Volumes/RYX ")
395
+ prefix = "└─" if index == len(disks) - 1 else "├─"
396
+
397
+ lines.append(f"│ {prefix} {name:<10} {used} / {total} ({percent}%)")
398
+ else:
399
+ lines.append("│ └─ Loading...")
400
+
401
+ lines.extend(
402
+ [
403
+ "│",
404
+ "├─ CONNECTIVITY",
405
+ f"│ ├─ Network {ip}",
406
+ f"│ ├─ Battery {battery}% "
407
+ f"[{'AC connected' if connected else 'Battery'}]",
408
+ f"│ └─ Adapter {adapter}",
409
+ ]
410
+ )
411
+
412
+ return lines
413
+
414
+ def _refresh(self):
415
+ with self.lock:
416
+ cpu_brand = self.static["cpu_brand"]
417
+ cpu_cores = self.static["cpu_cores"]
418
+ memory_total = self.static["memory_total"]
419
+ static = self.static.copy()
420
+
421
+ try:
422
+ frequency = psutil.cpu_freq()
423
+
424
+ if frequency:
425
+ frequency = f"{frequency.current / 1000:.2f} GHz"
426
+ else:
427
+ frequency = "Unknown"
428
+ except (AttributeError, OSError, RuntimeError, TypeError):
429
+ frequency = "Unknown"
430
+
431
+ try:
432
+ usage = psutil.cpu_percent()
433
+ except (OSError, RuntimeError):
434
+ usage = 0
435
+
436
+ cpu = f"{cpu_brand} ({cpu_cores}) @ {frequency} ({usage:.0f}%)"
437
+
438
+ values = {}
439
+
440
+ for line in self._command("vm_stat").splitlines():
441
+ if ":" not in line:
442
+ continue
443
+
444
+ key, value = line.split(":", 1)
445
+
446
+ try:
447
+ values[key] = int(value.strip().rstrip("."))
448
+ except ValueError:
449
+ pass
450
+
451
+ if memory_total:
452
+ available = (
453
+ sum(
454
+ values.get(key, 0)
455
+ for key in (
456
+ "Pages free",
457
+ "Pages inactive",
458
+ "Pages speculative",
459
+ )
460
+ )
461
+ * 4096
462
+ )
463
+ used = max(0, memory_total - available)
464
+ memory = (
465
+ f"{self._bytes(used)} / {self._bytes(memory_total)} "
466
+ f"({used / memory_total * 100:.0f}%)"
467
+ )
468
+ else:
469
+ memory = "Unknown"
470
+
471
+ disks = self._disks()
472
+ ip = self._network()
473
+ battery, connected, adapter = self._battery()
474
+
475
+ with self.lock:
476
+ old_static = self.static
477
+ self.static = static
478
+ self.lines = self._build_lines(
479
+ cpu,
480
+ memory,
481
+ disks,
482
+ ip,
483
+ battery,
484
+ connected,
485
+ adapter,
486
+ )
487
+ self.static = old_static
488
+
489
+ def _initialize(self):
490
+ try:
491
+ self._collect_static()
492
+ self._refresh()
493
+ except Exception:
494
+ pass
495
+
496
+ while not self.stop_event.wait(1):
497
+ try:
498
+ self._refresh()
499
+ except Exception:
500
+ pass
501
+
502
+ def _line_type(self, line):
503
+ stripped = line.lstrip("│ ")
504
+
505
+ if stripped.startswith(("┌─", "├─")):
506
+ if stripped[2:].strip() in self.TITLES:
507
+ return "title"
508
+
509
+ return "text"
510
+
511
+ def _draw_line(self, x, y, line):
512
+ if not line:
513
+ return
514
+
515
+ if self._line_type(line) == "title":
516
+ self.renderer.draw(x, y, line, self.colors.title)
517
+ return
518
+
519
+ index = 0
520
+
521
+ while index < len(line):
522
+ if line[index] in self.LINE_CHARS:
523
+ start = index
524
+
525
+ while index < len(line) and line[index] in self.LINE_CHARS:
526
+ index += 1
527
+
528
+ self.renderer.draw(
529
+ x + start,
530
+ y,
531
+ line[start:index],
532
+ self.colors.line,
533
+ )
534
+ else:
535
+ start = index
536
+
537
+ while index < len(line) and line[index] not in self.LINE_CHARS:
538
+ index += 1
539
+
540
+ self.renderer.draw(
541
+ x + start,
542
+ y,
543
+ line[start:index],
544
+ self.colors.text,
545
+ )
546
+
547
+ def dimensions(self):
548
+ with self.lock:
549
+ lines = self.lines[:]
550
+
551
+ return (
552
+ max((len(line) for line in lines), default=0),
553
+ len(lines),
554
+ )
555
+
556
+ def draw_content(self, x, y, width, height):
557
+ with self.lock:
558
+ lines = self.lines[:]
559
+
560
+ for index, line in enumerate(lines[:height]):
561
+ self._draw_line(x, y + index, line[:width])
562
+
563
+ def update(self):
564
+ pass
565
+
566
+ def close(self):
567
+ self.stop_event.set()
568
+
569
+ if self.thread.is_alive():
570
+ self.thread.join(timeout=1)
@@ -0,0 +1,16 @@
1
+ from ..base import BaseBox
2
+
3
+
4
+ class TextBox(BaseBox):
5
+ def _lines(self):
6
+ return str(self.config.get("text", "")).splitlines()
7
+
8
+ def dimensions(self):
9
+ lines = self._lines()
10
+ return max((len(line) for line in lines), default=0), len(lines)
11
+
12
+ def draw_content(self, x, y, width, height):
13
+ for index, line in enumerate(self._lines()[:height]):
14
+ line = line[:width]
15
+ column = x + max(0, (width - len(line)) // 2)
16
+ self.renderer.draw(column, y + index, line, self.colors.text)