machineconfig 1.92__py3-none-any.whl → 1.94__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.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (694) hide show
  1. machineconfig/__init__.py +0 -8
  2. machineconfig/cluster/__init__.py +0 -0
  3. machineconfig/cluster/cloud_manager.py +359 -0
  4. machineconfig/cluster/data_transfer.py +56 -0
  5. machineconfig/cluster/distribute.py +280 -0
  6. machineconfig/cluster/file_manager.py +238 -0
  7. machineconfig/cluster/job_params.py +148 -0
  8. machineconfig/cluster/loader_runner.py +150 -0
  9. machineconfig/cluster/remote_machine.py +281 -0
  10. machineconfig/cluster/script_execution.py +209 -0
  11. machineconfig/cluster/script_notify_upon_completion.py +63 -0
  12. machineconfig/cluster/self_ssh.py +59 -0
  13. machineconfig/cluster/session_managers.py +183 -0
  14. machineconfig/cluster/templates/__init__.py +0 -0
  15. machineconfig/cluster/templates/cli_click.py +104 -0
  16. machineconfig/cluster/templates/cli_gooey.py +119 -0
  17. machineconfig/cluster/templates/cli_trogon.py +21 -0
  18. machineconfig/cluster/templates/f.py +4 -0
  19. machineconfig/cluster/templates/run_cloud.py +52 -0
  20. machineconfig/cluster/templates/run_cluster.py +69 -0
  21. machineconfig/cluster/templates/run_remote.py +67 -0
  22. machineconfig/cluster/templates/utils.py +37 -0
  23. machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
  24. machineconfig/jobs/linux/msc/lid.sh +26 -0
  25. machineconfig/jobs/linux/msc/network.sh +39 -0
  26. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  27. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  28. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  29. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  30. machineconfig/jobs/python/archive/python_tools.txt +12 -0
  31. machineconfig/jobs/python/check_installations.py +26 -11
  32. machineconfig/jobs/python/checkout_version.py +24 -13
  33. machineconfig/jobs/python/create_zellij_template.py +4 -4
  34. machineconfig/jobs/python/python_cargo_build_share.py +13 -4
  35. machineconfig/jobs/python/python_ve_symlink.py +15 -4
  36. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  37. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  38. machineconfig/jobs/python/vscode/api.py +48 -0
  39. machineconfig/jobs/python/vscode/link_ve.py +64 -0
  40. machineconfig/jobs/python/vscode/select_interpreter.py +84 -0
  41. machineconfig/jobs/python/vscode/sync_code.py +60 -0
  42. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  43. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  44. machineconfig/jobs/python_custom_installers/archive/ngrok.py +62 -0
  45. machineconfig/jobs/python_custom_installers/dev/aider.py +37 -0
  46. machineconfig/jobs/python_custom_installers/dev/alacritty.py +72 -0
  47. machineconfig/jobs/python_custom_installers/dev/brave.py +67 -0
  48. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +50 -0
  49. machineconfig/jobs/python_custom_installers/dev/code.py +62 -0
  50. machineconfig/jobs/python_custom_installers/dev/cursor.py +67 -0
  51. machineconfig/jobs/python_custom_installers/dev/docker.py +70 -0
  52. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +77 -0
  53. machineconfig/jobs/python_custom_installers/dev/espanso.py +82 -0
  54. machineconfig/jobs/python_custom_installers/dev/goes.py +59 -0
  55. machineconfig/jobs/python_custom_installers/dev/lvim.py +76 -0
  56. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +67 -0
  57. machineconfig/jobs/python_custom_installers/dev/redis.py +69 -0
  58. machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +31 -0
  59. machineconfig/jobs/python_custom_installers/dev/warp-cli.py +71 -0
  60. machineconfig/jobs/python_custom_installers/dev/wezterm.py +71 -0
  61. machineconfig/jobs/python_custom_installers/gh.py +46 -4
  62. machineconfig/jobs/python_custom_installers/hx.py +103 -18
  63. machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +52 -0
  64. machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +140 -0
  65. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +48 -0
  66. machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +47 -0
  67. machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +64 -0
  68. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +53 -0
  69. machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +76 -0
  70. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +91 -0
  71. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +66 -0
  72. machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +77 -0
  73. machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +43 -0
  74. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  75. machineconfig/jobs/python_generic_installers/config.json +267 -0
  76. machineconfig/jobs/python_generic_installers/dev/config.archive.json +18 -0
  77. machineconfig/jobs/python_generic_installers/dev/config.json +394 -0
  78. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  79. machineconfig/jobs/python_linux_installers/archive/config.json +10 -0
  80. machineconfig/jobs/python_linux_installers/config.json +74 -0
  81. machineconfig/jobs/python_linux_installers/dev/config.json +138 -0
  82. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  83. machineconfig/jobs/python_windows_installers/archive/file.json +11 -0
  84. machineconfig/jobs/python_windows_installers/config.json +50 -0
  85. machineconfig/jobs/python_windows_installers/dev/config.json +3 -0
  86. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +14 -0
  87. machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +7 -0
  88. machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +14 -0
  89. machineconfig/jobs/windows/start_terminal.ps1 +6 -0
  90. machineconfig/jobs/windows/startup_file.cmd +2 -0
  91. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  92. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  93. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  94. machineconfig/profile/create.py +47 -13
  95. machineconfig/profile/create_hardlinks.py +42 -12
  96. machineconfig/profile/records/generic/shares.toml +5 -0
  97. machineconfig/profile/records/linux/apps_summary_report.csv +48 -0
  98. machineconfig/profile/records/linux/apps_summary_report.md +49 -0
  99. machineconfig/profile/records/windows/apps_summary_report.csv +1 -0
  100. machineconfig/profile/records/windows/apps_summary_report.md +2 -0
  101. machineconfig/profile/shell.py +62 -11
  102. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  103. machineconfig/scripts/cloud/init.sh +128 -0
  104. machineconfig/scripts/linux/activate_ve +87 -0
  105. machineconfig/scripts/linux/archive/tmate_conn +12 -0
  106. machineconfig/scripts/linux/archive/tmate_start +12 -0
  107. machineconfig/scripts/linux/archive/transfer_wsl_win +5 -0
  108. machineconfig/scripts/linux/checkout_versions +8 -0
  109. machineconfig/scripts/linux/choose_wezterm_theme +9 -0
  110. machineconfig/scripts/linux/cloud_copy +9 -0
  111. machineconfig/scripts/linux/cloud_manager +8 -0
  112. machineconfig/scripts/linux/cloud_mount +24 -0
  113. machineconfig/scripts/linux/cloud_repo_sync +22 -0
  114. machineconfig/scripts/linux/cloud_sync +24 -0
  115. machineconfig/scripts/linux/croshell +24 -0
  116. machineconfig/scripts/linux/devops +24 -0
  117. machineconfig/scripts/linux/fire +46 -0
  118. machineconfig/scripts/linux/ftpx +8 -0
  119. machineconfig/scripts/linux/fzf2g +21 -0
  120. machineconfig/scripts/linux/fzfag +17 -0
  121. machineconfig/scripts/linux/fzffg +25 -0
  122. machineconfig/scripts/linux/fzfg +23 -0
  123. machineconfig/scripts/linux/fzfrga +21 -0
  124. machineconfig/scripts/linux/gh_models +11 -0
  125. machineconfig/scripts/linux/kill_process +10 -0
  126. machineconfig/scripts/linux/mount_drive +128 -0
  127. machineconfig/scripts/linux/mount_nfs +62 -0
  128. machineconfig/scripts/linux/mount_nw_drive +72 -0
  129. machineconfig/scripts/linux/mount_smb +3 -0
  130. machineconfig/scripts/linux/programs +21 -0
  131. machineconfig/scripts/linux/repos +24 -0
  132. machineconfig/scripts/linux/scheduler +8 -0
  133. machineconfig/scripts/linux/share_cloud.sh +81 -0
  134. machineconfig/scripts/linux/share_nfs +49 -0
  135. machineconfig/scripts/linux/share_smb +1 -0
  136. machineconfig/scripts/linux/skrg +4 -0
  137. machineconfig/scripts/linux/start_docker +23 -0
  138. machineconfig/scripts/linux/start_slidev +23 -0
  139. machineconfig/scripts/linux/start_terminals +12 -0
  140. machineconfig/scripts/linux/switch_ip +20 -0
  141. machineconfig/scripts/linux/url2md +10 -0
  142. machineconfig/scripts/linux/z_ls +104 -0
  143. machineconfig/scripts/python/.mypy_cache/.gitignore +2 -0
  144. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +1 -0
  145. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +1 -0
  146. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +1 -0
  147. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +1 -0
  148. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +1 -0
  149. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +1 -0
  150. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +1 -0
  151. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +1 -0
  152. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +1 -0
  153. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +1 -0
  154. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +1 -0
  155. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +1 -0
  156. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +1 -0
  157. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +1 -0
  158. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +1 -0
  159. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +1 -0
  160. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +1 -0
  161. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +1 -0
  162. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +1 -0
  163. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +1 -0
  164. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +1 -0
  165. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +1 -0
  166. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +1 -0
  167. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +1 -0
  168. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +1 -0
  169. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +1 -0
  170. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +1 -0
  171. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +1 -0
  172. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +1 -0
  173. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +1 -0
  174. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +1 -0
  175. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +1 -0
  176. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +1 -0
  177. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +1 -0
  178. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +1 -0
  179. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +1 -0
  180. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +1 -0
  181. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +1 -0
  182. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +1 -0
  183. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +1 -0
  184. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +1 -0
  185. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +1 -0
  186. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +1 -0
  187. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +1 -0
  188. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +1 -0
  189. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +1 -0
  190. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +1 -0
  191. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +1 -0
  192. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +1 -0
  193. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +1 -0
  194. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +1 -0
  195. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +1 -0
  196. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +1 -0
  197. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +1 -0
  198. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +1 -0
  199. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +1 -0
  200. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +1 -0
  201. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +1 -0
  202. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +1 -0
  203. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +1 -0
  204. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +1 -0
  205. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +1 -0
  206. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +1 -0
  207. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +1 -0
  208. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +1 -0
  209. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +1 -0
  210. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +1 -0
  211. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +1 -0
  212. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +1 -0
  213. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +1 -0
  214. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +1 -0
  215. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +1 -0
  216. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +1 -0
  217. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +1 -0
  218. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +1 -0
  219. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +1 -0
  220. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +1 -0
  221. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +1 -0
  222. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +1 -0
  223. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +1 -0
  224. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +1 -0
  225. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +1 -0
  226. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +1 -0
  227. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +1 -0
  228. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +1 -0
  229. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +1 -0
  230. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +1 -0
  231. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +1 -0
  232. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +1 -0
  233. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +1 -0
  234. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +1 -0
  235. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +1 -0
  236. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +1 -0
  237. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +1 -0
  238. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +1 -0
  239. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +1 -0
  240. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +1 -0
  241. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +1 -0
  242. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +1 -0
  243. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +1 -0
  244. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +1 -0
  245. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +1 -0
  246. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +1 -0
  247. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +1 -0
  248. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +1 -0
  249. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +1 -0
  250. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +1 -0
  251. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +1 -0
  252. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +1 -0
  253. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +1 -0
  254. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +1 -0
  255. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +1 -0
  256. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +1 -0
  257. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +1 -0
  258. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +1 -0
  259. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +1 -0
  260. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +1 -0
  261. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +1 -0
  262. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +1 -0
  263. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +1 -0
  264. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +1 -0
  265. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +1 -0
  266. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +1 -0
  267. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +1 -0
  268. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +1 -0
  269. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +1 -0
  270. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +1 -0
  271. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +1 -0
  272. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +1 -0
  273. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +1 -0
  274. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +1 -0
  275. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +1 -0
  276. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +1 -0
  277. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +1 -0
  278. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +1 -0
  279. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +1 -0
  280. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +1 -0
  281. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +1 -0
  282. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +1 -0
  283. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +1 -0
  284. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +1 -0
  285. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +1 -0
  286. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +1 -0
  287. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +1 -0
  288. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +1 -0
  289. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +1 -0
  290. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +1 -0
  291. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +1 -0
  292. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +1 -0
  293. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +1 -0
  294. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +1 -0
  295. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +1 -0
  296. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +1 -0
  297. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +1 -0
  298. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +1 -0
  299. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +1 -0
  300. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +1 -0
  301. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +1 -0
  302. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +1 -0
  303. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +1 -0
  304. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +1 -0
  305. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +1 -0
  306. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +1 -0
  307. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +1 -0
  308. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +1 -0
  309. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +1 -0
  310. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +1 -0
  311. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +1 -0
  312. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +1 -0
  313. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +1 -0
  314. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +1 -0
  315. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +1 -0
  316. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +1 -0
  317. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +1 -0
  318. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +1 -0
  319. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +1 -0
  320. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +1 -0
  321. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +1 -0
  322. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +1 -0
  323. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +1 -0
  324. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +1 -0
  325. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +1 -0
  326. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +1 -0
  327. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +1 -0
  328. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +1 -0
  329. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +1 -0
  330. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +1 -0
  331. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +1 -0
  332. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +1 -0
  333. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +1 -0
  334. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +1 -0
  335. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +1 -0
  336. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +1 -0
  337. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +1 -0
  338. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +1 -0
  339. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +1 -0
  340. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +1 -0
  341. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +1 -0
  342. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +1 -0
  343. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +1 -0
  344. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +1 -0
  345. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +1 -0
  346. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +1 -0
  347. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +1 -0
  348. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +1 -0
  349. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +1 -0
  350. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +1 -0
  351. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +1 -0
  352. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +1 -0
  353. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +1 -0
  354. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +1 -0
  355. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +1 -0
  356. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +1 -0
  357. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +1 -0
  358. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +1 -0
  359. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +1 -0
  360. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +1 -0
  361. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +1 -0
  362. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +1 -0
  363. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +1 -0
  364. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +1 -0
  365. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +1 -0
  366. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +1 -0
  367. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +1 -0
  368. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +1 -0
  369. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +1 -0
  370. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +1 -0
  371. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +1 -0
  372. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +1 -0
  373. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +1 -0
  374. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +1 -0
  375. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +1 -0
  376. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +1 -0
  377. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +1 -0
  378. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +1 -0
  379. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +1 -0
  380. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +1 -0
  381. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +1 -0
  382. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +1 -0
  383. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +1 -0
  384. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +1 -0
  385. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +1 -0
  386. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +1 -0
  387. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +1 -0
  388. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +1 -0
  389. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +1 -0
  390. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +1 -0
  391. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +1 -0
  392. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +1 -0
  393. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +1 -0
  394. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +1 -0
  395. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +1 -0
  396. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +1 -0
  397. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +1 -0
  398. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +1 -0
  399. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +1 -0
  400. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +1 -0
  401. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +1 -0
  402. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +1 -0
  403. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +1 -0
  404. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +1 -0
  405. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +1 -0
  406. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +1 -0
  407. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +1 -0
  408. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +1 -0
  409. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +1 -0
  410. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +1 -0
  411. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +1 -0
  412. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +1 -0
  413. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +1 -0
  414. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +1 -0
  415. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +1 -0
  416. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +1 -0
  417. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +1 -0
  418. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +1 -0
  419. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +1 -0
  420. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +1 -0
  421. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +1 -0
  422. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +1 -0
  423. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +1 -0
  424. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +1 -0
  425. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +1 -0
  426. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +1 -0
  427. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +1 -0
  428. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +1 -0
  429. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +1 -0
  430. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +1 -0
  431. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +1 -0
  432. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +1 -0
  433. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +1 -0
  434. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +1 -0
  435. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +1 -0
  436. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +1 -0
  437. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +3 -0
  438. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  439. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  440. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  441. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  442. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  443. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  444. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  445. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  446. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  447. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  448. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  449. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  450. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  451. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  452. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  453. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  454. machineconfig/scripts/python/archive/im2text.py +36 -0
  455. machineconfig/scripts/python/archive/tmate_conn.py +44 -0
  456. machineconfig/scripts/python/archive/tmate_start.py +48 -0
  457. machineconfig/scripts/python/choose_wezterm_theme.py +23 -4
  458. machineconfig/scripts/python/cloud_copy.py +131 -29
  459. machineconfig/scripts/python/cloud_manager.py +55 -2
  460. machineconfig/scripts/python/cloud_mount.py +43 -4
  461. machineconfig/scripts/python/cloud_repo_sync.py +114 -103
  462. machineconfig/scripts/python/cloud_sync.py +36 -220
  463. machineconfig/scripts/python/croshell.py +102 -32
  464. machineconfig/scripts/python/devops.py +143 -42
  465. machineconfig/scripts/python/devops_add_identity.py +112 -9
  466. machineconfig/scripts/python/devops_add_ssh_key.py +170 -15
  467. machineconfig/scripts/python/devops_backup_retrieve.py +132 -14
  468. machineconfig/scripts/python/devops_devapps_install.py +33 -11
  469. machineconfig/scripts/python/devops_update_repos.py +36 -29
  470. machineconfig/scripts/python/dotfile.py +8 -3
  471. machineconfig/scripts/python/fire_jobs.py +145 -289
  472. machineconfig/scripts/python/ftpx.py +76 -18
  473. machineconfig/scripts/python/get_zellij_cmd.py +14 -0
  474. machineconfig/scripts/python/gh_models.py +72 -25
  475. machineconfig/scripts/python/helpers/__init__.py +0 -0
  476. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  477. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  478. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  479. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  480. machineconfig/scripts/python/helpers/cloud_helpers.py +134 -0
  481. machineconfig/scripts/python/helpers/helpers2.py +149 -0
  482. machineconfig/scripts/python/helpers/helpers4.py +178 -0
  483. machineconfig/scripts/python/helpers/helpers5.py +50 -0
  484. machineconfig/scripts/python/helpers/repo_sync_helpers.py +126 -0
  485. machineconfig/scripts/python/mount_nfs.py +46 -15
  486. machineconfig/scripts/python/mount_nw_drive.py +22 -10
  487. machineconfig/scripts/python/mount_ssh.py +28 -12
  488. machineconfig/scripts/python/onetimeshare.py +23 -15
  489. machineconfig/scripts/python/pomodoro.py +38 -24
  490. machineconfig/scripts/python/repos.py +29 -32
  491. machineconfig/scripts/python/scheduler.py +19 -18
  492. machineconfig/scripts/python/snapshot.py +14 -6
  493. machineconfig/scripts/python/start_slidev.py +24 -32
  494. machineconfig/scripts/python/start_terminals.py +23 -10
  495. machineconfig/scripts/python/viewer.py +53 -0
  496. machineconfig/scripts/python/viewer_template.py +140 -0
  497. machineconfig/scripts/python/wifi_conn.py +20 -12
  498. machineconfig/scripts/python/wsl_windows_transfer.py +18 -10
  499. machineconfig/scripts/windows/activate_ve.ps1 +54 -0
  500. machineconfig/scripts/windows/archive/gource2vid.ps1 +14 -0
  501. machineconfig/scripts/windows/archive/im2text.ps1 +27 -0
  502. machineconfig/scripts/windows/archive/secure_pull.ps1 +46 -0
  503. machineconfig/scripts/windows/archive/secure_push.ps1 +85 -0
  504. machineconfig/scripts/windows/archive/tmate_conn.ps1 +7 -0
  505. machineconfig/scripts/windows/checkout_version.ps1 +6 -0
  506. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +20 -0
  507. machineconfig/scripts/windows/cloud_copy.ps1 +17 -0
  508. machineconfig/scripts/windows/cloud_manager.ps1 +8 -0
  509. machineconfig/scripts/windows/cloud_mount.ps1 +25 -0
  510. machineconfig/scripts/windows/cloud_repo_sync.ps1 +8 -0
  511. machineconfig/scripts/windows/cloud_sync.ps1 +21 -0
  512. machineconfig/scripts/windows/croshell.ps1 +40 -0
  513. machineconfig/scripts/windows/devops.ps1 +32 -0
  514. machineconfig/scripts/windows/dotfile.ps1 +9 -0
  515. machineconfig/scripts/windows/fire.ps1 +33 -0
  516. machineconfig/scripts/windows/ftpx.ps1 +5 -0
  517. machineconfig/scripts/windows/fzfb.ps1 +3 -0
  518. machineconfig/scripts/windows/fzfg.ps1 +2 -0
  519. machineconfig/scripts/windows/fzfrga.bat +20 -0
  520. machineconfig/scripts/windows/gpt.ps1 +23 -0
  521. machineconfig/scripts/windows/grep.ps1 +2 -0
  522. machineconfig/scripts/windows/kill_process.ps1 +8 -0
  523. machineconfig/scripts/windows/mount_nfs.ps1 +44 -0
  524. machineconfig/scripts/windows/mount_nw.ps1 +9 -0
  525. machineconfig/scripts/windows/mount_smb.ps1 +2 -0
  526. machineconfig/scripts/windows/mount_ssh.ps1 +17 -0
  527. machineconfig/scripts/windows/nano.ps1 +3 -0
  528. machineconfig/scripts/windows/neofetch.ps1 +2 -0
  529. machineconfig/scripts/windows/pomodoro.ps1 +8 -0
  530. machineconfig/scripts/windows/py2exe.ps1 +12 -0
  531. machineconfig/scripts/windows/reload_path.ps1 +3 -0
  532. machineconfig/scripts/windows/repos.ps1 +27 -0
  533. machineconfig/scripts/windows/scheduler.ps1 +6 -0
  534. machineconfig/scripts/windows/share_cloud.cmd +34 -0
  535. machineconfig/scripts/windows/share_nfs.ps1 +0 -0
  536. machineconfig/scripts/windows/share_smb.ps1 +22 -0
  537. machineconfig/scripts/windows/snapshot.ps1 +5 -0
  538. machineconfig/scripts/windows/start_slidev.ps1 +21 -0
  539. machineconfig/scripts/windows/start_terminals.ps1 +22 -0
  540. machineconfig/scripts/windows/unlock_bitlocker.ps1 +10 -0
  541. machineconfig/scripts/windows/utils/op_script_delete.ps1 +7 -0
  542. machineconfig/scripts/windows/wifi_conn.ps1 +7 -0
  543. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +46 -0
  544. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +76 -0
  545. machineconfig/scripts/windows/wsl_windows_transfer.ps1 +7 -0
  546. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  547. machineconfig/settings/broot/br.sh +51 -0
  548. machineconfig/settings/broot/brootcd.ps1 +32 -0
  549. machineconfig/settings/broot/conf.toml +5 -0
  550. machineconfig/settings/glow/glow.yml +11 -0
  551. machineconfig/settings/gromit-mpx/gromit-mpx.cfg +34 -0
  552. machineconfig/settings/helix/config.toml +27 -0
  553. machineconfig/settings/helix/languages.toml +22 -0
  554. machineconfig/settings/keras/keras.json +6 -0
  555. machineconfig/settings/keyboard/espanso/config/default.yml +45 -0
  556. machineconfig/settings/keyboard/espanso/match/base.yml +57 -0
  557. machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
  558. machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
  559. machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
  560. machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
  561. machineconfig/settings/lf/linux/autocall/open.sh +0 -0
  562. machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
  563. machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
  564. machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
  565. machineconfig/settings/lf/linux/colors +196 -0
  566. machineconfig/settings/lf/linux/exe/cleaner.sh +7 -0
  567. machineconfig/settings/lf/linux/exe/fzf_nano.sh +16 -0
  568. machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +5 -0
  569. machineconfig/settings/lf/linux/exe/lfcd.sh +32 -0
  570. machineconfig/settings/lf/linux/exe/previewer.sh +37 -0
  571. machineconfig/settings/lf/linux/exe/previewer_archive.sh +155 -0
  572. machineconfig/settings/lf/linux/icons +357 -0
  573. machineconfig/settings/lf/linux/lfrc +226 -0
  574. machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
  575. machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  576. machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  577. machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
  578. machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
  579. machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  580. machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
  581. machineconfig/settings/lf/windows/cd_tere.ps1 +4 -0
  582. machineconfig/settings/lf/windows/cd_zoxide.ps1 +4 -0
  583. machineconfig/settings/lf/windows/cd_zoxide2.ps1 +4 -0
  584. machineconfig/settings/lf/windows/colors +159 -0
  585. machineconfig/settings/lf/windows/fzf_edit.ps1 +6 -0
  586. machineconfig/settings/lf/windows/icons +357 -0
  587. machineconfig/settings/lf/windows/leftpane_previewer.ps1 +3 -0
  588. machineconfig/settings/lf/windows/lfcd.ps1 +35 -0
  589. machineconfig/settings/lf/windows/lfrc +133 -0
  590. machineconfig/settings/lf/windows/mkdir.ps1 +3 -0
  591. machineconfig/settings/lf/windows/mkfile.ps1 +3 -0
  592. machineconfig/settings/lf/windows/previewer.ps1 +7 -0
  593. machineconfig/settings/lf/windows/tst.ps1 +1 -0
  594. machineconfig/settings/linters/.flake8 +24 -0
  595. machineconfig/settings/linters/.mypy.ini +29 -0
  596. machineconfig/settings/linters/.pylintrc +91 -0
  597. machineconfig/settings/linters/.ruff.toml +77 -0
  598. machineconfig/settings/linters/.ruff_cache/.gitignore +2 -0
  599. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +1 -0
  600. machineconfig/settings/lvim/linux/config.lua +0 -0
  601. machineconfig/settings/lvim/windows/archive/config_additional.lua +39 -0
  602. machineconfig/settings/lvim/windows/lua/user/custom_config.lua +13 -0
  603. machineconfig/settings/mprocs/windows/mprocs.yaml +55 -0
  604. machineconfig/settings/mprocs/windows/other +12 -0
  605. machineconfig/settings/pistol/pistol.conf +8 -0
  606. machineconfig/settings/presenterm/config.yaml +76 -0
  607. machineconfig/settings/procs/.procs.toml +142 -0
  608. machineconfig/settings/pudb/pudb.cfg +25 -0
  609. machineconfig/settings/rofi/config.rasi +4 -0
  610. machineconfig/settings/rofi/config_default.rasi +147 -0
  611. machineconfig/settings/shells/alacritty/alacritty.toml +40 -0
  612. machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
  613. machineconfig/settings/shells/bash/.inputrc +3 -0
  614. machineconfig/settings/shells/bash/init.sh +66 -0
  615. machineconfig/settings/shells/hyper/.hyper.js +201 -0
  616. machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
  617. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  618. machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  619. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  620. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  621. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +83 -0
  622. machineconfig/settings/shells/kitty/kitty.conf +1476 -0
  623. machineconfig/settings/shells/nushell/config.nu +36 -0
  624. machineconfig/settings/shells/nushell/env.nu +13 -0
  625. machineconfig/settings/shells/pwsh/init.ps1 +88 -0
  626. machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  627. machineconfig/settings/shells/starship/starship.toml +58 -0
  628. machineconfig/settings/shells/vtm/settings.xml +297 -0
  629. machineconfig/settings/shells/wezterm/wezterm.lua +193 -0
  630. machineconfig/settings/shells/wt/settings.json +526 -0
  631. machineconfig/settings/streamlit/config.toml +22 -0
  632. machineconfig/settings/svim/linux/init.toml +48 -0
  633. machineconfig/settings/svim/windows/init.toml +48 -0
  634. machineconfig/settings/tere/terecd.ps1 +8 -0
  635. machineconfig/settings/tere/terecd.sh +8 -0
  636. machineconfig/settings/tmux/.tmate.conf +3 -0
  637. machineconfig/settings/tmux/.tmux.conf +6 -0
  638. machineconfig/settings/wsl/.wslconfig +35 -0
  639. machineconfig/settings/yazi/keymap.toml +0 -0
  640. machineconfig/settings/yazi/theme.toml +0 -0
  641. machineconfig/settings/yazi/yazi.toml +4 -0
  642. machineconfig/settings/zed/settings.json +35 -0
  643. machineconfig/settings/zellij/commands/monitor +9 -0
  644. machineconfig/settings/zellij/commands/standard_panes +33 -0
  645. machineconfig/settings/zellij/config.kdl +295 -0
  646. machineconfig/settings/zellij/config.orig.kdl +295 -0
  647. machineconfig/settings/zellij/layouts/hist +13 -0
  648. machineconfig/settings/zellij/layouts/panes.kdl +20 -0
  649. machineconfig/settings/zellij/layouts/st.kdl +21 -0
  650. machineconfig/settings/zellij/layouts/st2.kdl +59 -0
  651. machineconfig/settings/zellij/layouts/stacked_panes.kdl +11 -0
  652. machineconfig/setup_linux/nix/cli_installation.sh +166 -0
  653. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +30 -0
  654. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +60 -0
  655. machineconfig/setup_linux/web_shortcuts/all.sh +53 -0
  656. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +100 -0
  657. machineconfig/setup_linux/web_shortcuts/croshell.sh +66 -0
  658. machineconfig/setup_linux/web_shortcuts/interactive.sh +241 -0
  659. machineconfig/setup_linux/web_shortcuts/ssh.sh +64 -0
  660. machineconfig/setup_linux/web_shortcuts/update_system.sh +55 -0
  661. machineconfig/setup_windows/others/docker.ps1 +7 -0
  662. machineconfig/setup_windows/others/obs.ps1 +4 -0
  663. machineconfig/setup_windows/web_shortcuts/all.ps1 +18 -0
  664. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +36 -0
  665. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +16 -0
  666. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +200 -0
  667. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +11 -0
  668. machineconfig/setup_windows/wt_and_pwsh/install_fonts.ps1 +27 -0
  669. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +12 -2
  670. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +45 -9
  671. machineconfig/utils/ai/__init__.py +0 -0
  672. machineconfig/utils/ai/browser_user_wrapper.py +51 -0
  673. machineconfig/utils/ai/generate_file_checklist.py +74 -0
  674. machineconfig/utils/ai/url2md.py +75 -0
  675. machineconfig/utils/installer.py +101 -253
  676. machineconfig/utils/installer_utils/__init__.py +0 -0
  677. machineconfig/utils/installer_utils/installer_abc.py +100 -0
  678. machineconfig/utils/installer_utils/installer_class.py +253 -0
  679. machineconfig/utils/procs.py +69 -16
  680. machineconfig/utils/scheduling.py +47 -13
  681. machineconfig/utils/utils.py +39 -371
  682. machineconfig/utils/utils_code.py +82 -0
  683. machineconfig/utils/utils_links.py +88 -0
  684. machineconfig/utils/utils_options.py +163 -0
  685. machineconfig/utils/utils_path.py +151 -0
  686. machineconfig/utils/ve.py +37 -225
  687. machineconfig/utils/ve_utils/ve1.py +111 -0
  688. machineconfig/utils/ve_utils/ve2.py +142 -0
  689. {machineconfig-1.92.dist-info → machineconfig-1.94.dist-info}/METADATA +25 -21
  690. machineconfig-1.94.dist-info/RECORD +710 -0
  691. {machineconfig-1.92.dist-info → machineconfig-1.94.dist-info}/WHEEL +1 -1
  692. machineconfig-1.92.dist-info/LICENSE +0 -201
  693. machineconfig-1.92.dist-info/RECORD +0 -70
  694. {machineconfig-1.92.dist-info → machineconfig-1.94.dist-info}/top_level.txt +0 -0
@@ -1,297 +1,106 @@
1
-
2
1
  """package manager
3
2
  """
3
+ from machineconfig.utils.installer_utils.installer_abc import LINUX_INSTALL_PATH, CATEGORY
4
+ from machineconfig.utils.installer_utils.installer_class import Installer
4
5
  from rich.console import Console
5
6
 
6
- from crocodile.file_management import P, List as L, Read
7
- from crocodile.core import Struct
7
+ from crocodile.file_management import P, Read
8
+ from crocodile.core import List as L
8
9
  from crocodile.meta import Terminal
9
- from machineconfig.utils.utils import INSTALL_VERSION_ROOT, INSTALL_TMP_DIR, LIBRARY_ROOT, check_tool_exists
10
+ from machineconfig.utils.utils import INSTALL_VERSION_ROOT
10
11
 
11
12
  # from dataclasses import dataclass
12
- from typing import Optional, Any, TypeAlias, Literal
13
+ from typing import Any
13
14
  import platform
14
- # import os
15
-
16
-
17
- # LINUX_INSTALL_PATH = '/usr/local/bin'
18
- LINUX_INSTALL_PATH = '~/.local/bin'
19
-
20
- WINDOWS_INSTALL_PATH = P.home().joinpath("AppData/Local/Microsoft/WindowsApps").__str__()
21
- CATEGORY: TypeAlias = Literal["OS_SPECIFIC", "OS_GENERIC", "CUSTOM", "OS_SPECIFIC_DEV", "OS_GENERIC_DEV", "CUSTOM_DEV"]
22
-
23
-
24
- def find_move_delete_windows(downloaded_file_path: P, exe_name: Optional[str] = None, delete: bool=True, rename_to: Optional[str] = None):
25
- if exe_name is not None and ".exe" in exe_name: exe_name = exe_name.replace(".exe", "")
26
- if downloaded_file_path.is_file():
27
- exe = downloaded_file_path
28
- else:
29
- if exe_name is None: exe = downloaded_file_path.search("*.exe", r=True).list[0]
30
- else:
31
- tmp = downloaded_file_path.search(f"{exe_name}.exe", r=True)
32
- if len(tmp) == 1: exe = tmp.list[0]
33
- else:
34
- search_res = downloaded_file_path.search("*.exe", r=True)
35
- if len(search_res) == 0: raise IndexError(f"No executable found in {downloaded_file_path}")
36
- elif len(search_res) == 1: exe = search_res.list[0]
37
- else: exe = search_res.sort(lambda x: x.size("kb")).list[-1]
38
- if rename_to and exe.name != rename_to:
39
- exe = exe.with_name(name=rename_to, inplace=True)
40
- exe_new_location = exe.move(folder=WINDOWS_INSTALL_PATH, overwrite=True) # latest version overwrites older installation.
41
- if delete: downloaded_file_path.delete(sure=True)
42
- return exe_new_location
43
-
44
-
45
- def find_move_delete_linux(downloaded: P, tool_name: str, delete: Optional[bool] = True, rename_to: Optional[str] = None):
46
- if downloaded.is_file():
47
- exe = downloaded
48
- else:
49
- res = downloaded.search(f"*{tool_name}*", folders=False, r=True)
50
- if len(res) == 1: exe = res.list[0]
51
- else:
52
- exe_search_res = downloaded.search(tool_name, folders=False, r=True)
53
- if len(exe_search_res) == 0:
54
- print(f"No search results for `{tool_name}` in `{downloaded}`")
55
- raise IndexError(f"No executable found in {downloaded}")
56
- elif len(exe_search_res) == 1:
57
- exe = exe_search_res.list[0]
58
- else:
59
- exe = exe_search_res.sort(lambda x: x.size("kb")).list[-1]
60
- if rename_to and exe.name != rename_to:
61
- exe = exe.with_name(name=rename_to, inplace=True)
62
- print(f"MOVING file `{repr(exe)}` to '{LINUX_INSTALL_PATH}'")
63
- exe.chmod(0o777)
64
- # exe.move(folder=LINUX_INSTALL_PATH, overwrite=False)
65
- if "/usr" in LINUX_INSTALL_PATH:
66
- Terminal().run(f"sudo mv {exe} {LINUX_INSTALL_PATH}/").print_if_unsuccessful(desc=f"MOVING executable `{exe}` to {LINUX_INSTALL_PATH}", strict_err=True, strict_returncode=True)
67
- else:
68
- exe.move(folder=LINUX_INSTALL_PATH, overwrite=True)
69
- if delete: downloaded.delete(sure=True)
70
- exe_new_location = P(LINUX_INSTALL_PATH).joinpath(exe.name)
71
- return exe_new_location
72
-
73
-
74
- class Installer:
75
- def __init__(self, repo_url: str, name: str, doc: str, filename_template_windows_amd_64: str, filename_template_linux_amd_64: str,
76
- strip_v: bool, exe_name: str):
77
- self.repo_url: str=repo_url
78
- self.name: str=name
79
- self.doc: str=doc
80
- self.filename_template_windows_amd_64: str=filename_template_windows_amd_64
81
- self.filename_template_linux_amd_64: str=filename_template_linux_amd_64
82
- self.strip_v: bool=strip_v
83
- self.exe_name: str=exe_name
84
- def __repr__(self) -> str: return f"Installer of {self.repo_url}"
85
- def get_description(self):
86
- # old_version_cli = Terminal().run(f"{self.exe_name} --version").op.replace("\n", "")
87
- # old_version_cli = os.system(f"{self.exe_name} --version").replace("\n", "")
88
- old_version_cli: bool=check_tool_exists(tool_name=self.exe_name)
89
- old_version_cli_str = "āœ…" if old_version_cli else "āŒ"
90
- # name_version = f"{self.exe_name} {old_version_cli_str}"
91
- return f"{self.exe_name:<12} {old_version_cli_str} {self.doc}"
92
- def to_dict(self): return self.__dict__
93
- @staticmethod
94
- def from_dict(d: dict[str, Any], name: str):
95
- try: return Installer(name=name, **d)
96
- except Exception as ex:
97
- Struct(d).print(as_config=True)
98
- raise ex
99
- @staticmethod
100
- def choose_app_and_install():
101
- from machineconfig.utils.utils import choose_one_option
102
- path = choose_one_option(options=LIBRARY_ROOT.joinpath("jobs").search("config.json", r=True).list)
103
- config: dict[str, Any] = Read.json(path) # /python_generic_installers/config.json"))
104
- app_name = choose_one_option(options=list(config.keys()), fzf=True)
105
- # for keys, dict_ in config.items():
106
- installer = Installer.from_dict(d=config[app_name], name=app_name)
107
- version = input(f"Enter version to install for {installer.exe_name} [latest]: ") or None
108
- installer.install(version=version)
109
-
110
- def install_robust(self, version: Optional[str]):
111
- try:
112
-
113
- old_version_cli = Terminal().run(f"{self.exe_name} --version").op.replace("\n", "")
114
- self.install(version=version)
115
- new_version_cli = Terminal().run(f"{self.exe_name} --version").op.replace("\n", "")
116
-
117
- if old_version_cli == new_version_cli: return f"""echo "šŸ“¦ļø šŸ˜‘ {self.exe_name}, same version: {old_version_cli}" """
118
- else: return f"""echo "šŸ“¦ļø 🤩 {self.exe_name} updated from {old_version_cli} āž”ļø TO āž”ļø {new_version_cli}" """
119
-
120
- except Exception as ex:
121
- print(ex)
122
- return f"""echo "šŸ“¦ļø Failed at `{self.name}` with {ex}" """
123
-
124
- def install(self, version: Optional[str]):
125
- if self.repo_url == "CUSTOM":
126
-
127
- import machineconfig.jobs.python_custom_installers as python_custom_installers
128
- installer_path = P(python_custom_installers.__file__).parent.joinpath(self.exe_name + ".py")
129
- if not installer_path.exists():
130
- installer_path = P(python_custom_installers.__file__).parent.joinpath("dev", self.exe_name + ".py")
131
-
132
- import runpy
133
- print(f"Executing func `main` from `{installer_path}`to get the program to run")
134
- program: str = runpy.run_path(str(installer_path), run_name=None)['main'](version=version)
135
- # print(program)
136
- Terminal(stdin=None, stdout=None, stderr=None).run_script(script=program, shell="default").print(desc="Running custom installer", capture=True)
137
- # import subprocess
138
- # subprocess.run(program, shell=True, check=True)
139
- version_to_be_installed = str(version)
140
- elif "npm " in self.repo_url or "pip " in self.repo_url or "winget " in self.repo_url:
141
- desc = self.repo_url.split(" ", maxsplit=1)[0] + "installation"
142
- version_to_be_installed = self.repo_url.split(" ", maxsplit=1)[0] + "Latest"
143
- Terminal().run(self.repo_url, shell="default").print_if_unsuccessful(desc=desc, strict_err=True, strict_returncode=True)
144
- else:
145
- downloaded, version_to_be_installed = self.download(version=version)
146
- if downloaded.to_str().endswith(".deb"):
147
- assert platform.system() == "Linux"
148
- Terminal().run(f"sudo apt install -y {downloaded}").print_if_unsuccessful(desc="Installing .deb", strict_err=True, strict_returncode=True)
149
- downloaded.delete(sure=True)
150
- else:
151
- if platform.system() == "Windows":
152
- exe = find_move_delete_windows(downloaded_file_path=downloaded, exe_name=self.exe_name, delete=True, rename_to=self.exe_name + ".exe")
153
- elif platform.system() == "Linux":
154
- exe = find_move_delete_linux(downloaded=downloaded, tool_name=self.exe_name, delete=True, rename_to=self.exe_name)
155
- else: raise NotImplementedError(f"System {platform.system()} not implemented")
156
- _ = exe
157
- if exe.name.replace(".exe", "") != self.exe_name.replace(".exe", ""):
158
- from rich import print as pprint
159
- from rich.panel import Panel
160
- pprint(Panel(f"Expected exe name: [red]{self.exe_name}[/red] \nAttained name: [red]{exe.name.replace('.exe', '')}[/red]", title="exe name mismatch", subtitle=self.repo_url))
161
- new_exe_name = self.exe_name + ".exe" if platform.system() == "Windows" else self.exe_name
162
- exe.with_name(name=new_exe_name, inplace=True, overwrite=True)
163
- INSTALL_VERSION_ROOT.joinpath(self.exe_name).create(parents_only=True).write_text(version_to_be_installed)
164
-
165
- def download(self, version: Optional[str]):
166
- if "github" not in self.repo_url or ".zip" in self.repo_url or ".tar.gz" in self.repo_url:
167
- download_link = P(self.repo_url)
168
- version_to_be_installed = "predefined_url"
169
- print(f"šŸ“¦ļø Version to be installed: {version_to_be_installed}")
170
- elif "http" in self.filename_template_linux_amd_64 or "http" in self.filename_template_windows_amd_64:
171
- if platform.system() == "Windows":
172
- download_link = P(self.filename_template_windows_amd_64)
173
- elif platform.system() == "Linux":
174
- download_link = P(self.filename_template_linux_amd_64)
175
- else: raise NotImplementedError(f"šŸ“¦ļø System {platform.system()} not implemented")
176
- version_to_be_installed = "predefined_url"
177
- else:
178
- release_url, version_to_be_installed = Installer.get_github_release(repo_url=self.repo_url, version=version)
179
- print(f"šŸ“¦ļø Version to be installed: {version_to_be_installed}")
180
- print(f"šŸ“¦ļø Release URL: {release_url}")
181
- version_to_be_installed_stripped = version_to_be_installed.replace("v", "") if self.strip_v else version_to_be_installed
182
- version_to_be_installed_stripped = version_to_be_installed_stripped.replace("ipinfo-", "")
183
- if platform.system() == "Windows":
184
- file_name = self.filename_template_windows_amd_64.format(version_to_be_installed_stripped)
185
- elif platform.system() == "Linux":
186
- file_name = self.filename_template_linux_amd_64.format(version_to_be_installed_stripped)
187
- else: raise NotImplementedError(f"šŸ“¦ļø System {platform.system()} not implemented")
188
- print("šŸ“¦ļø File name", file_name)
189
- download_link = release_url.joinpath(file_name)
190
- print(f"šŸ“¦ļø Downloading {self.name}: ", download_link.as_url_str())
191
- downloaded = download_link.download(folder=INSTALL_TMP_DIR).decompress()
192
- return downloaded, version_to_be_installed
193
-
194
- @staticmethod
195
- def get_github_release(repo_url: str, version: Optional[str] = None):
196
- print("\n\n\n")
197
- print(f"šŸ“¦ļø Inspecting latest release @ {repo_url} ...")
198
- # with console.status("Installing..."): # makes troubles on linux when prompt asks for password to move file to /usr/bin
199
- if version is None:
200
- # see this: https://api.github.com/repos/cointop-sh/cointop/releases/latest
201
- import requests # https://docs.github.com/en/repositories/releasing-projects-on-github/linking-to-releases
202
- _latest_version = requests.get(str(repo_url) + "/releases/latest", timeout=10).url.split("/")[-1] # this is to resolve the redirection that occures: https://stackoverflow.com/questions/36070821/how-to-get-redirect-url-using-python-requests
203
- version_to_be_installed = _latest_version
204
- # print(version_to_be_installed)
205
- else:
206
- version_to_be_installed = version
207
- release_url = P(repo_url + "/releases/download/" + version_to_be_installed)
208
- return release_url, version_to_be_installed
209
-
210
- @staticmethod
211
- def check_if_installed_already(exe_name: str, version: str, use_cache: bool):
212
- version_to_be_installed = version
213
- tmp_path = INSTALL_VERSION_ROOT.joinpath(exe_name).create(parents_only=True)
214
-
215
- if use_cache:
216
- if tmp_path.exists(): existing_version = tmp_path.read_text().rstrip()
217
- else: existing_version = None
218
- else:
219
- # check_tool_exists(tool_name=exe_name)
220
- # raise NotImplementedError("Not implemented")
221
- # import subprocess
222
- # try:
223
- # existing_version = subprocess.check_output([exe_name, "--version"], text=True)
224
- # existing_version = existing_version.strip()
225
- # except (subprocess.CalledProcessError, FileNotFoundError):
226
- # print(f"Failed to get version of {exe_name}")
227
- # existing_version = None
228
- resp = Terminal().run(exe_name, "--version", check=False).capture()
229
- if resp.op == '': existing_version = None
230
- else: existing_version = resp.op.strip()
231
-
232
- if existing_version is not None:
233
- if existing_version == version_to_be_installed:
234
- print(f"šŸ“¦ļø āš ļø {exe_name} already installed at version {version_to_be_installed}. See {INSTALL_VERSION_ROOT}")
235
- return ("āœ… Uptodate", version.strip(), version_to_be_installed.strip())
236
- else:
237
- # print(f"Latest version is {version}, logged at {tmp_path}")
238
- print(f"šŸ“¦ļø ā¬†ļø {exe_name} installed at version {existing_version.rstrip()} --> Installing version {version_to_be_installed} ")
239
- tmp_path.write_text(version_to_be_installed)
240
- return ("āŒ Outdated", existing_version.strip(), version_to_be_installed.strip())
241
- else:
242
- print(f"šŸ“¦ļø {exe_name} has no known version. Installing version `{version_to_be_installed}` ")
243
- tmp_path.write_text(version_to_be_installed)
244
- return ("āš ļøNotInstalled", "None", version_to_be_installed.strip())
245
15
 
246
16
 
247
17
  def check_latest():
18
+ print(f"""
19
+ ā•”{'═'*78}ā•—
20
+ ā•‘ šŸ” CHECKING FOR LATEST VERSIONS ā•‘
21
+ ā•š{'═'*78}ā•
22
+ """)
248
23
  installers = get_installers(system=platform.system(), dev=False)
249
24
  # installers += get_installers(system=platform.system(), dev=True)
250
25
  installers_gitshub = []
251
26
  for inst__ in installers:
252
- if "ntop" in inst__.name: continue
27
+ if "ntop" in inst__.name:
28
+ print(f"ā­ļø Skipping {inst__.name} (ntop)")
29
+ continue
253
30
  if "github" not in inst__.repo_url:
254
- print(f"Skipping {inst__.name} as it is not a github release")
31
+ print(f"ā­ļø Skipping {inst__.name} (not a GitHub release)")
255
32
  continue
256
33
  installers_gitshub.append(inst__)
34
+
35
+ print(f"\nšŸ” Checking {len(installers_gitshub)} GitHub-based installers...\n")
257
36
 
258
37
  def func(inst: Installer):
38
+ print(f"šŸ”Ž Checking {inst.exe_name}...")
259
39
  _release_url, version_to_be_installed = inst.get_github_release(repo_url=inst.repo_url, version=None)
260
40
  verdict, current_ver, new_ver = inst.check_if_installed_already(exe_name=inst.exe_name, version=version_to_be_installed, use_cache=False)
261
41
  return inst.exe_name, verdict, current_ver, new_ver
262
42
 
43
+ print("\nā³ Processing installers...\n")
263
44
  res = L(installers_gitshub).apply(func=func, jobs=1)
45
+
264
46
  import pandas as pd
47
+ print("\nšŸ“Š Generating results table...\n")
265
48
  res_df = pd.DataFrame(res, columns=["Tool", "Status", "Current Version", "New Version"]).groupby("Status").apply(lambda x: x).reset_index(drop=True)
49
+
266
50
  from crocodile.core import Display
267
51
  Display.set_pandas_display()
52
+ print(f"""
53
+ ā•”{'═'*78}ā•—
54
+ ā•‘ šŸ“Š INSTALLATION STATUS SUMMARY ā•‘
55
+ ā•š{'═'*78}ā•
56
+ """)
268
57
  print(res_df)
58
+ print(f"{'═'*80}")
269
59
 
270
60
 
271
61
  def get_installed_cli_apps():
272
- if platform.system() == "Windows": apps = P.home().joinpath("AppData/Local/Microsoft/WindowsApps").search("*.exe", not_in=["notepad"])
273
- elif platform.system() == "Linux": apps = P(LINUX_INSTALL_PATH).search("*")
274
- else: raise NotImplementedError("Not implemented for this OS")
62
+ print(f"\n{'='*80}\nšŸ” LISTING INSTALLED CLI APPS šŸ”\n{'='*80}")
63
+ if platform.system() == "Windows":
64
+ print("🪟 Searching for Windows executables...")
65
+ apps = P.home().joinpath("AppData/Local/Microsoft/WindowsApps").search("*.exe", not_in=["notepad"])
66
+ elif platform.system() == "Linux":
67
+ print("🐧 Searching for Linux executables...")
68
+ apps = P(LINUX_INSTALL_PATH).search("*") + P("/usr/local/bin").search("*")
69
+ else:
70
+ error_msg = f"āŒ ERROR: System {platform.system()} not supported"
71
+ print(error_msg)
72
+ raise NotImplementedError(error_msg)
73
+
275
74
  apps = L([app for app in apps if app.size("kb") > 0.1 and not app.is_symlink()]) # no symlinks like paint and wsl and bash
75
+ print(f"āœ… Found {len(apps)} installed applications\n{'='*80}")
276
76
  return apps
277
77
 
278
78
 
279
79
  def get_installers(system: str, dev: bool) -> list[Installer]:
80
+ print(f"\n{'='*80}\nšŸ” LOADING INSTALLER CONFIGURATIONS šŸ”\n{'='*80}")
280
81
  res_all = get_all_dicts(system=system)
281
82
  if not dev:
83
+ print("ā„¹ļø Excluding development installers...")
282
84
  del res_all["CUSTOM_DEV"]
283
85
  del res_all["OS_SPECIFIC_DEV"]
284
86
  del res_all["OS_GENERIC_DEV"]
285
87
  res_final = {}
286
88
  for _k, v in res_all.items():
287
89
  res_final.update(v)
90
+ print(f"āœ… Loaded {len(res_final)} installer configurations\n{'='*80}")
288
91
  return [Installer.from_dict(d=vd, name=k) for k, vd in res_final.items()]
289
92
 
290
93
 
291
94
  def get_all_dicts(system: str) -> dict[CATEGORY, dict[str, dict[str, Any]]]:
292
- if system == "Windows": import machineconfig.jobs.python_windows_installers as os_specific_installer
293
- else: import machineconfig.jobs.python_linux_installers as os_specific_installer
294
-
95
+ print(f"\n{'='*80}\nšŸ“‚ LOADING CONFIGURATION FILES šŸ“‚\n{'='*80}")
96
+
97
+ print(f"šŸ” Importing OS-specific installers for {system}...")
98
+ if system == "Windows":
99
+ import machineconfig.jobs.python_windows_installers as os_specific_installer
100
+ else:
101
+ import machineconfig.jobs.python_linux_installers as os_specific_installer
102
+
103
+ print("šŸ” Importing generic installers...")
295
104
  import machineconfig.jobs.python_generic_installers as generic_installer
296
105
  path_os_specific = P(os_specific_installer.__file__).parent
297
106
  path_os_generic = P(generic_installer.__file__).parent
@@ -299,64 +108,103 @@ def get_all_dicts(system: str) -> dict[CATEGORY, dict[str, dict[str, Any]]]:
299
108
  path_os_specific_dev = path_os_specific.joinpath("dev")
300
109
  path_os_generic_dev = path_os_generic.joinpath("dev")
301
110
 
111
+ print("šŸ“‚ Loading configuration files...")
302
112
  res_final: dict[CATEGORY, dict[str, dict[str, Any]]] = {}
113
+ print(f"""šŸ“„ Loading OS-specific config from: {path_os_specific.joinpath('config.json')}""")
303
114
  res_final["OS_SPECIFIC"] = Read.json(path=path_os_specific.joinpath("config.json"))
115
+
116
+ print(f"""šŸ“„ Loading OS-generic config from: {path_os_generic.joinpath("config.json")}""")
304
117
  res_final["OS_GENERIC"] = Read.json(path=path_os_generic.joinpath("config.json"))
118
+
119
+ print(f"""šŸ“„ Loading OS-specific dev config from: {path_os_specific_dev.joinpath("config.json")}""")
305
120
  res_final["OS_SPECIFIC_DEV"] = Read.json(path=path_os_specific_dev.joinpath("config.json"))
121
+
122
+ print(f"""šŸ“„ Loading OS-generic dev config from: {path_os_generic_dev.joinpath("config.json")}""")
306
123
  res_final["OS_GENERIC_DEV"] = Read.json(path=path_os_generic_dev.joinpath("config.json"))
307
124
 
308
125
  path_custom_installer = path_os_generic.with_name("python_custom_installers")
309
126
  path_custom_installer_dev = path_custom_installer.joinpath("dev")
310
127
 
128
+ print(f"šŸ” Loading custom installers from: {path_custom_installer}")
311
129
  import runpy
312
130
  res_custom: dict[str, dict[str, Any]] = {}
313
131
  for item in path_custom_installer.search("*.py", r=False, not_in=["__init__"]):
314
132
  try:
133
+ print(f"šŸ“„ Loading custom installer: {item.name}")
315
134
  config_dict = runpy.run_path(str(item), run_name=None)['config_dict']
316
135
  res_custom[item.stem] = config_dict
317
136
  except Exception as ex:
318
- print(f"Failed to load {item}: {ex}")
137
+ print(f"āŒ Failed to load {item}: {ex}")
319
138
 
139
+ print(f"šŸ” Loading custom dev installers from: {path_custom_installer_dev}")
320
140
  res_custom_dev: dict[str, dict[str, Any]] = {}
321
141
  for item in path_custom_installer_dev.search("*.py", r=False, not_in=["__init__"]):
322
142
  try:
143
+ print(f"šŸ“„ Loading custom dev installer: {item.name}")
323
144
  config_dict = runpy.run_path(str(item), run_name=None)['config_dict']
324
145
  res_custom_dev[item.stem] = config_dict
325
146
  except Exception as ex:
326
- print(f"Failed to load {item}: {ex}")
147
+ print(f"āŒ Failed to load {item}: {ex}")
327
148
 
328
149
  res_final["CUSTOM"] = res_custom
329
150
  res_final["CUSTOM_DEV"] = res_custom_dev
151
+
152
+ print(f"āœ… Configuration loading complete:\n - OS_SPECIFIC: {len(res_final['OS_SPECIFIC'])} items\n - OS_GENERIC: {len(res_final['OS_GENERIC'])} items\n - CUSTOM: {len(res_final['CUSTOM'])} items\n{'='*80}")
330
153
  return res_final
331
154
 
332
155
 
333
156
  def install_all(installers: L[Installer], safe: bool=False, jobs: int = 10, fresh: bool=False):
334
- if fresh: INSTALL_VERSION_ROOT.delete(sure=True)
157
+ print(f"\n{'='*80}\nšŸš€ BULK INSTALLATION PROCESS šŸš€\n{'='*80}")
158
+ if fresh:
159
+ print("🧹 Fresh install requested - clearing version cache...")
160
+ INSTALL_VERSION_ROOT.delete(sure=True)
161
+ print("āœ… Version cache cleared")
162
+
335
163
  if safe:
164
+ print("āš ļø Safe installation mode activated...")
336
165
  from machineconfig.jobs.python.check_installations import APP_SUMMARY_PATH
337
166
  apps_dir = APP_SUMMARY_PATH.readit()
167
+
338
168
  if platform.system().lower() == "windows":
169
+ print("🪟 Moving applications to Windows Apps folder...")
339
170
  apps_dir.search("*").apply(lambda app: app.move(folder=P.get_env().WindowsPaths().WindowsApps))
340
171
  elif platform.system().lower() == "linux":
341
- Terminal().run(f"sudo mv {apps_dir.as_posix()}/* {LINUX_INSTALL_PATH}/").print_if_unsuccessful(desc=f"MOVING executable to {LINUX_INSTALL_PATH}", strict_err=True, strict_returncode=True)
342
- else: raise NotImplementedError(f"I don't know this system {platform.system()}")
172
+ print("🐧 Moving applications to Linux bin folder...")
173
+ Terminal().run(f"sudo mv {apps_dir.as_posix()}/* {LINUX_INSTALL_PATH}/").capture().print_if_unsuccessful(desc=f"MOVING executable to {LINUX_INSTALL_PATH}", strict_err=True, strict_returncode=True)
174
+ else:
175
+ error_msg = f"āŒ ERROR: System {platform.system()} not supported"
176
+ print(error_msg)
177
+ raise NotImplementedError(error_msg)
178
+
343
179
  apps_dir.delete(sure=True)
180
+ print(f"āœ… Safe installation completed\n{'='*80}")
344
181
  return None
182
+
183
+ print(f"šŸš€ Starting installation of {len(installers)} packages...")
184
+ print(f"\n{'='*80}\nšŸ“¦ INSTALLING FIRST PACKAGE šŸ“¦\n{'='*80}")
345
185
  installers.list[0].install(version=None)
186
+
187
+ print(f"\n{'='*80}\nšŸ“¦ INSTALLING REMAINING PACKAGES šŸ“¦\n{'='*80}")
346
188
  res = installers.slice(start=1).apply(lambda x: x.install_robust(version=None), jobs=jobs) # try out the first installer alone cause it will ask for password, so the rest will inherit the sudo session.
347
189
  console = Console()
190
+
191
+ print("\n")
192
+ console.rule("šŸ“Š INSTALLATION RESULTS SUMMARY šŸ“Š")
193
+
348
194
  print("\n")
349
- console.rule("Same version apps")
195
+ console.rule("āœ“ Same Version Apps")
350
196
  print(f"{res.filter(lambda x: 'same version' in x).print()}")
197
+
351
198
  print("\n")
352
- console.rule("Updated apps")
199
+ console.rule("ā¬†ļø Updated Apps")
353
200
  print(f"{res.filter(lambda x: 'updated from' in x).print()}")
201
+
354
202
  print("\n")
355
- console.rule("Failed apps")
203
+ console.rule("āŒ Failed Apps")
356
204
  print(f"{res.filter(lambda x: 'Failed at' in x).print()}")
357
205
 
358
206
  print("\n")
359
- print("Completed Installation".center(100, "-"))
207
+ print("✨ INSTALLATION COMPLETE ✨".center(100, "="))
360
208
  print("\n" * 2)
361
209
 
362
210
 
File without changes
@@ -0,0 +1,100 @@
1
+ from crocodile.file_management import P
2
+ from crocodile.meta import Terminal
3
+ from typing import Optional, TypeAlias, Literal
4
+
5
+ # LINUX_INSTALL_PATH = '/usr/local/bin'
6
+ LINUX_INSTALL_PATH = '~/.local/bin'
7
+ WINDOWS_INSTALL_PATH = P.home().joinpath("AppData/Local/Microsoft/WindowsApps").__str__()
8
+ CATEGORY: TypeAlias = Literal["OS_SPECIFIC", "OS_GENERIC", "CUSTOM", "OS_SPECIFIC_DEV", "OS_GENERIC_DEV", "CUSTOM_DEV"]
9
+
10
+
11
+ def find_move_delete_windows(downloaded_file_path: P, exe_name: Optional[str] = None, delete: bool=True, rename_to: Optional[str] = None):
12
+ print(f"\n{'='*80}\nšŸ” PROCESSING WINDOWS EXECUTABLE šŸ”\n{'='*80}")
13
+ if exe_name is not None and ".exe" in exe_name: exe_name = exe_name.replace(".exe", "")
14
+ if downloaded_file_path.is_file():
15
+ exe = downloaded_file_path
16
+ print(f"šŸ“„ Found direct executable file: {exe}")
17
+ else:
18
+ print(f"šŸ”Ž Searching for executable in: {downloaded_file_path}")
19
+ if exe_name is None:
20
+ exe = downloaded_file_path.search("*.exe", r=True).list[0]
21
+ print(f"āœ… Found executable: {exe}")
22
+ else:
23
+ tmp = downloaded_file_path.search(f"{exe_name}.exe", r=True)
24
+ if len(tmp) == 1:
25
+ exe = tmp.list[0]
26
+ print(f"āœ… Found exact match for {exe_name}.exe: {exe}")
27
+ else:
28
+ search_res = downloaded_file_path.search("*.exe", r=True)
29
+ if len(search_res) == 0:
30
+ print(f"āŒ ERROR: No executable found in {downloaded_file_path}")
31
+ raise IndexError(f"No executable found in {downloaded_file_path}")
32
+ elif len(search_res) == 1:
33
+ exe = search_res.list[0]
34
+ print(f"āœ… Found single executable: {exe}")
35
+ else:
36
+ exe = search_res.sort(lambda x: x.size("kb")).list[-1]
37
+ print(f"āœ… Selected largest executable ({exe.size('kb')} KB): {exe}")
38
+ if rename_to and exe.name != rename_to:
39
+ print(f"šŸ·ļø Renaming '{exe.name}' to '{rename_to}'")
40
+ exe = exe.with_name(name=rename_to, inplace=True)
41
+
42
+ print(f"šŸ“¦ Moving executable to: {WINDOWS_INSTALL_PATH}")
43
+ exe_new_location = exe.move(folder=WINDOWS_INSTALL_PATH, overwrite=True) # latest version overwrites older installation.
44
+ print(f"āœ… Executable installed at: {exe_new_location}")
45
+
46
+ if delete:
47
+ print("šŸ—‘ļø Cleaning up temporary files...")
48
+ downloaded_file_path.delete(sure=True)
49
+ print("āœ… Temporary files removed")
50
+
51
+ print(f"{'='*80}")
52
+ return exe_new_location
53
+
54
+
55
+ def find_move_delete_linux(downloaded: P, tool_name: str, delete: Optional[bool] = True, rename_to: Optional[str] = None):
56
+ print(f"\n{'='*80}\nšŸ” PROCESSING LINUX EXECUTABLE šŸ”\n{'='*80}")
57
+ if downloaded.is_file():
58
+ exe = downloaded
59
+ print(f"šŸ“„ Found direct executable file: {exe}")
60
+ else:
61
+ print(f"šŸ”Ž Searching for executable in: {downloaded}")
62
+ res = downloaded.search(f"*{tool_name}*", folders=False, r=True)
63
+ if len(res) == 1:
64
+ exe = res.list[0]
65
+ print(f"āœ… Found match for pattern '*{tool_name}*': {exe}")
66
+ else:
67
+ exe_search_res = downloaded.search(tool_name, folders=False, r=True)
68
+ if len(exe_search_res) == 0:
69
+ print(f"āŒ ERROR: No search results for `{tool_name}` in `{downloaded}`")
70
+ raise IndexError(f"No executable found in {downloaded}")
71
+ elif len(exe_search_res) == 1:
72
+ exe = exe_search_res.list[0]
73
+ print(f"āœ… Found exact match for '{tool_name}': {exe}")
74
+ else:
75
+ exe = exe_search_res.sort(lambda x: x.size("kb")).list[-1]
76
+ print(f"āœ… Selected largest executable ({exe.size('kb')} KB): {exe}")
77
+
78
+ if rename_to and exe.name != rename_to:
79
+ print(f"šŸ·ļø Renaming '{exe.name}' to '{rename_to}'")
80
+ exe = exe.with_name(name=rename_to, inplace=True)
81
+
82
+ print("šŸ” Setting executable permissions (chmod 777)...")
83
+ exe.chmod(0o777)
84
+
85
+ print(f"šŸ“¦ Moving executable to: {LINUX_INSTALL_PATH}")
86
+ # exe.move(folder=LINUX_INSTALL_PATH, overwrite=False)
87
+ if "/usr" in LINUX_INSTALL_PATH:
88
+ print("šŸ”‘ Using sudo to move file to system directory...")
89
+ Terminal().run(f"sudo mv {exe} {LINUX_INSTALL_PATH}/").capture().print_if_unsuccessful(desc=f"MOVING executable `{exe}` to {LINUX_INSTALL_PATH}", strict_err=True, strict_returncode=True)
90
+ else:
91
+ exe.move(folder=LINUX_INSTALL_PATH, overwrite=True)
92
+
93
+ if delete:
94
+ print("šŸ—‘ļø Cleaning up temporary files...")
95
+ downloaded.delete(sure=True)
96
+ print("āœ… Temporary files removed")
97
+
98
+ exe_new_location = P(LINUX_INSTALL_PATH).joinpath(exe.name)
99
+ print(f"āœ… Executable installed at: {exe_new_location}\n{'='*80}")
100
+ return exe_new_location