machineconfig 3.99__py3-none-any.whl → 7.66__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 (418) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +1 -2
  5. machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
  6. machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +128 -330
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  13. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  14. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  17. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  18. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  19. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  20. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  23. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  24. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  25. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  26. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  31. machineconfig/jobs/{python → installer}/check_installations.py +2 -16
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +69 -53
  34. machineconfig/jobs/installer/custom/hx.py +77 -20
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
  36. machineconfig/jobs/installer/custom_dev/brave.py +43 -35
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +33 -21
  40. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  41. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  42. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  43. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  44. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  45. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
  46. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  47. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  48. machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
  49. machineconfig/jobs/installer/custom_dev/winget.py +1 -0
  50. machineconfig/jobs/installer/installer_data.json +3406 -0
  51. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  52. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  53. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  54. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  55. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  56. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  57. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  58. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  59. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  60. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  61. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  62. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  63. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  64. machineconfig/jobs/installer/package_groups.py +255 -0
  65. machineconfig/logger.py +0 -1
  66. machineconfig/profile/backup.toml +49 -0
  67. machineconfig/profile/bash_shell_profiles.md +11 -0
  68. machineconfig/profile/create_helper.py +74 -0
  69. machineconfig/profile/create_links.py +288 -0
  70. machineconfig/profile/create_links_export.py +100 -0
  71. machineconfig/profile/create_shell_profile.py +136 -0
  72. machineconfig/profile/mapper.toml +258 -0
  73. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  74. machineconfig/scripts/__init__.py +0 -4
  75. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  76. machineconfig/scripts/linux/wrap_mcfg +47 -0
  77. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  78. machineconfig/scripts/python/agents.py +198 -0
  79. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  80. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  81. machineconfig/scripts/python/ai/generate_files.py +307 -42
  82. machineconfig/scripts/python/ai/initai.py +3 -28
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  89. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  90. machineconfig/scripts/python/cloud.py +29 -0
  91. machineconfig/scripts/python/croshell.py +117 -181
  92. machineconfig/scripts/python/define.py +31 -0
  93. machineconfig/scripts/python/devops.py +44 -124
  94. machineconfig/scripts/python/devops_navigator.py +10 -0
  95. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  96. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  97. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  98. machineconfig/scripts/python/explore.py +49 -0
  99. machineconfig/scripts/python/fire_jobs.py +106 -244
  100. machineconfig/scripts/python/ftpx.py +125 -68
  101. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  102. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  103. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  106. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  107. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  108. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  109. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  110. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  111. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  112. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  113. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +11 -19
  114. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  115. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  116. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  117. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
  118. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  119. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  120. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  121. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  122. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  123. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  124. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  125. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  126. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  127. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  128. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  129. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  130. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  131. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  132. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  133. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  134. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  135. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -87
  136. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  137. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  138. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  139. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  140. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  141. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  142. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  143. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  144. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  145. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  146. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  147. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  148. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  149. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  150. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  151. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  152. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  153. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  154. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  155. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  156. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  157. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  158. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  159. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  160. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  161. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  162. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  163. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  164. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  165. machineconfig/scripts/python/interactive.py +79 -160
  166. machineconfig/scripts/python/machineconfig.py +63 -0
  167. machineconfig/scripts/python/msearch.py +21 -0
  168. machineconfig/scripts/python/nw/__init__.py +0 -0
  169. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  170. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  171. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  172. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  173. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  174. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  175. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  176. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  177. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  178. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  179. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +6 -5
  180. machineconfig/scripts/python/sessions.py +167 -0
  181. machineconfig/scripts/python/terminal.py +127 -0
  182. machineconfig/scripts/python/utils.py +66 -0
  183. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  184. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  185. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  186. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  187. machineconfig/settings/broot/br.sh +0 -4
  188. machineconfig/settings/broot/conf.toml +1 -1
  189. machineconfig/settings/helix/config.toml +16 -0
  190. machineconfig/settings/helix/languages.toml +13 -4
  191. machineconfig/settings/helix/yazi-picker.sh +12 -0
  192. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  193. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  194. machineconfig/settings/lf/linux/lfrc +10 -12
  195. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  196. machineconfig/settings/lf/windows/lfrc +18 -38
  197. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  198. machineconfig/settings/linters/.ruff.toml +1 -1
  199. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  200. machineconfig/settings/marimo/marimo.toml +80 -0
  201. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  202. machineconfig/settings/pistol/pistol.conf +1 -1
  203. machineconfig/settings/shells/bash/init.sh +55 -31
  204. machineconfig/settings/shells/nushell/config.nu +1 -34
  205. machineconfig/settings/shells/nushell/init.nu +127 -0
  206. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  207. machineconfig/settings/shells/starship/starship.toml +16 -0
  208. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  209. machineconfig/settings/shells/wt/settings.json +32 -17
  210. machineconfig/settings/shells/zsh/init.sh +89 -0
  211. machineconfig/settings/svim/linux/init.toml +0 -4
  212. machineconfig/settings/svim/windows/init.toml +0 -3
  213. machineconfig/settings/yazi/init.lua +57 -0
  214. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  215. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  216. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  217. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  218. machineconfig/settings/yazi/yazi.toml +13 -0
  219. machineconfig/setup_linux/__init__.py +10 -0
  220. machineconfig/setup_linux/apps_desktop.sh +89 -0
  221. machineconfig/setup_linux/apps_gui.sh +64 -0
  222. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  223. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  224. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  225. machineconfig/setup_linux/uv.sh +15 -0
  226. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  227. machineconfig/setup_mac/__init__.py +16 -0
  228. machineconfig/setup_mac/apps_gui.sh +248 -0
  229. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  230. machineconfig/setup_mac/uv.sh +36 -0
  231. machineconfig/setup_windows/__init__.py +8 -0
  232. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  233. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  234. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  235. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  236. machineconfig/setup_windows/uv.ps1 +10 -0
  237. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -9
  238. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  239. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  240. machineconfig/utils/accessories.py +7 -5
  241. machineconfig/utils/cloud/onedrive/README.md +139 -0
  242. machineconfig/utils/code.py +140 -93
  243. machineconfig/utils/files/art/fat_croco.txt +10 -0
  244. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  245. machineconfig/utils/files/art/happy_croco.txt +22 -0
  246. machineconfig/utils/files/art/water_croco.txt +11 -0
  247. machineconfig/utils/files/ascii_art.py +118 -0
  248. machineconfig/utils/files/dbms.py +257 -0
  249. machineconfig/utils/files/headers.py +68 -0
  250. machineconfig/utils/files/ouch/__init__.py +0 -0
  251. machineconfig/utils/files/ouch/decompress.py +45 -0
  252. machineconfig/utils/files/read.py +95 -0
  253. machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
  254. machineconfig/utils/installer_utils/installer_class.py +68 -126
  255. machineconfig/utils/installer_utils/installer_cli.py +181 -0
  256. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
  257. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
  258. machineconfig/utils/io.py +77 -23
  259. machineconfig/utils/links.py +309 -100
  260. machineconfig/utils/meta.py +255 -0
  261. machineconfig/utils/notifications.py +1 -1
  262. machineconfig/utils/options.py +10 -25
  263. machineconfig/utils/path_extended.py +94 -104
  264. machineconfig/utils/path_helper.py +75 -22
  265. machineconfig/utils/procs.py +50 -74
  266. machineconfig/utils/scheduler.py +94 -97
  267. machineconfig/utils/scheduling.py +0 -3
  268. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  269. machineconfig/utils/schemas/installer/installer_types.py +0 -1
  270. machineconfig/utils/schemas/layouts/layout_types.py +2 -1
  271. machineconfig/utils/source_of_truth.py +3 -6
  272. machineconfig/utils/ssh.py +742 -254
  273. machineconfig/utils/ssh_utils/utils.py +0 -0
  274. machineconfig/utils/terminal.py +3 -140
  275. machineconfig/utils/tst.py +20 -0
  276. machineconfig/utils/upgrade_packages.py +109 -28
  277. machineconfig/utils/ve.py +13 -5
  278. machineconfig-7.66.dist-info/METADATA +124 -0
  279. machineconfig-7.66.dist-info/RECORD +451 -0
  280. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  281. machineconfig/cluster/templates/utils.py +0 -51
  282. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  283. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  284. machineconfig/jobs/installer/packages_custom_dev.json +0 -226
  285. machineconfig/jobs/installer/packages_custom_essential.json +0 -39
  286. machineconfig/jobs/installer/packages_github_dev.json +0 -1110
  287. machineconfig/jobs/installer/packages_github_essential.json +0 -804
  288. machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
  289. machineconfig/jobs/python/create_bootable_media.py +0 -16
  290. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  291. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  292. machineconfig/jobs/python/tasks.py +0 -3
  293. machineconfig/jobs/python/vscode/api.py +0 -49
  294. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  295. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  296. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  297. machineconfig/jobs/windows/startup_file.cmd +0 -2
  298. machineconfig/profile/create.py +0 -170
  299. machineconfig/profile/shell.py +0 -176
  300. machineconfig/scripts/cloud/init.sh +0 -119
  301. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  302. machineconfig/scripts/linux/cloud_copy +0 -2
  303. machineconfig/scripts/linux/cloud_mount +0 -2
  304. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  305. machineconfig/scripts/linux/cloud_sync +0 -2
  306. machineconfig/scripts/linux/croshell +0 -3
  307. machineconfig/scripts/linux/devops +0 -2
  308. machineconfig/scripts/linux/fire +0 -2
  309. machineconfig/scripts/linux/fire_agents +0 -2
  310. machineconfig/scripts/linux/ftpx +0 -2
  311. machineconfig/scripts/linux/fzf2g +0 -21
  312. machineconfig/scripts/linux/fzffg +0 -25
  313. machineconfig/scripts/linux/gh_models +0 -2
  314. machineconfig/scripts/linux/initai +0 -2
  315. machineconfig/scripts/linux/kill_process +0 -2
  316. machineconfig/scripts/linux/programs +0 -21
  317. machineconfig/scripts/linux/repos +0 -2
  318. machineconfig/scripts/linux/scheduler +0 -2
  319. machineconfig/scripts/linux/share_smb +0 -1
  320. machineconfig/scripts/linux/start_slidev +0 -2
  321. machineconfig/scripts/linux/start_terminals +0 -3
  322. machineconfig/scripts/linux/warp-cli.sh +0 -122
  323. machineconfig/scripts/linux/wifi_conn +0 -2
  324. machineconfig/scripts/linux/z_ls +0 -104
  325. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  326. machineconfig/scripts/python/cloud_repo_sync.py +0 -186
  327. machineconfig/scripts/python/devops_devapps_install.py +0 -159
  328. machineconfig/scripts/python/devops_update_repos.py +0 -180
  329. machineconfig/scripts/python/dotfile.py +0 -52
  330. machineconfig/scripts/python/fire_agents.py +0 -175
  331. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  332. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  333. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
  334. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
  335. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  336. machineconfig/scripts/python/gh_models.py +0 -104
  337. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  338. machineconfig/scripts/python/repos.py +0 -80
  339. machineconfig/scripts/python/repos_helper_action.py +0 -335
  340. machineconfig/scripts/python/share_terminal.py +0 -104
  341. machineconfig/scripts/python/snapshot.py +0 -25
  342. machineconfig/scripts/python/start_terminals.py +0 -121
  343. machineconfig/scripts/python/t4.py +0 -17
  344. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  345. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  346. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  347. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  348. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  349. machineconfig/scripts/windows/croshell.ps1 +0 -1
  350. machineconfig/scripts/windows/devops.ps1 +0 -1
  351. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  352. machineconfig/scripts/windows/fire.ps1 +0 -1
  353. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  354. machineconfig/scripts/windows/gpt.ps1 +0 -1
  355. machineconfig/scripts/windows/grep.ps1 +0 -2
  356. machineconfig/scripts/windows/initai.ps1 +0 -1
  357. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  358. machineconfig/scripts/windows/nano.ps1 +0 -3
  359. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  360. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  361. machineconfig/scripts/windows/repos.ps1 +0 -1
  362. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  363. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  364. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  365. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  366. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  367. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  368. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  369. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  370. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  371. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  372. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  373. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  374. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  375. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  376. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  377. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  378. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  379. machineconfig-3.99.dist-info/METADATA +0 -167
  380. machineconfig-3.99.dist-info/RECORD +0 -409
  381. machineconfig-3.99.dist-info/entry_points.txt +0 -18
  382. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  383. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  384. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  385. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  386. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  387. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  388. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  389. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  390. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  391. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  392. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  393. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  394. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  395. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  396. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  397. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  398. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  399. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  400. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  401. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  402. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  403. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  404. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  405. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  406. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  407. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  408. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  409. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  410. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  411. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  412. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  413. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  414. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  415. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  416. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  417. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  418. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env python3
2
+ import json
3
+ import logging
4
+ import shutil
5
+ import subprocess
6
+ from datetime import datetime
7
+ from pathlib import Path
8
+ from typing import TYPE_CHECKING, Optional
9
+
10
+ from machineconfig.cluster.sessions_managers.zellij_utils.monitoring_types import ActiveSessionInfo, StartResult
11
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
12
+
13
+ if TYPE_CHECKING:
14
+ from machineconfig.cluster.sessions_managers.zellij_local import ZellijLayoutGenerator
15
+
16
+
17
+ logger = logging.getLogger(__name__)
18
+ TMP_SERIALIZATION_DIR = Path.home() / "tmp_results" / "zellij_sessions" / "serialized"
19
+
20
+
21
+ def list_saved_sessions() -> list[str]:
22
+ """List all saved session IDs."""
23
+ if not TMP_SERIALIZATION_DIR.exists():
24
+ return []
25
+ sessions = []
26
+ for item in TMP_SERIALIZATION_DIR.iterdir():
27
+ if item.is_dir() and (item / "metadata.json").exists():
28
+ sessions.append(item.name)
29
+ return sorted(sessions)
30
+
31
+
32
+ def delete_session(session_id: str) -> bool:
33
+ """Delete a saved session."""
34
+ session_dir = TMP_SERIALIZATION_DIR / session_id
35
+ if not session_dir.exists():
36
+ logger.warning(f"Session directory not found: {session_dir}")
37
+ return False
38
+ try:
39
+ shutil.rmtree(session_dir)
40
+ logger.info(f"✅ Deleted session: {session_id}")
41
+ return True
42
+ except Exception as e:
43
+ logger.error(f"Failed to delete session {session_id}: {e}")
44
+ return False
45
+
46
+
47
+ def get_all_session_names(managers: list["ZellijLayoutGenerator"]) -> list[str]:
48
+ """Get all managed session names."""
49
+ return [manager.session_name for manager in managers]
50
+
51
+
52
+ def attach_to_session(managers: list["ZellijLayoutGenerator"], session_name: Optional[str]) -> str:
53
+ """
54
+ Generate command to attach to a specific session or list attachment commands for all.
55
+
56
+ Args:
57
+ managers: List of ZellijLayoutGenerator instances
58
+ session_name: Specific session to attach to, or None for all sessions
59
+
60
+ Returns:
61
+ Command string to attach to session(s)
62
+ """
63
+ if session_name:
64
+ for manager in managers:
65
+ if manager.session_name == session_name:
66
+ return f"zellij attach {session_name}"
67
+ raise ValueError(f"Session '{session_name}' not found")
68
+ else:
69
+ commands: list[str] = []
70
+ for manager in managers:
71
+ commands.append(f"# Attach to session '{manager.session_name}':")
72
+ commands.append(f"zellij attach {manager.session_name}")
73
+ commands.append("")
74
+ return "\n".join(commands)
75
+
76
+
77
+ def list_active_sessions(managers: list["ZellijLayoutGenerator"]) -> list[ActiveSessionInfo]:
78
+ """List currently active zellij sessions managed by this instance."""
79
+ active_sessions: list[ActiveSessionInfo] = []
80
+ try:
81
+ result = subprocess.run(["zellij", "list-sessions"], capture_output=True, text=True, timeout=10)
82
+ if result.returncode == 0:
83
+ all_sessions = result.stdout.strip().split("\n") if result.stdout.strip() else []
84
+ for manager in managers:
85
+ session_name = manager.session_name
86
+ is_active = any(session_name in session for session in all_sessions)
87
+ tab_info = []
88
+ tab_count = 0
89
+ if manager.layout_config:
90
+ tab_count = len(manager.layout_config["layoutTabs"])
91
+ tab_info = [tab["tabName"] for tab in manager.layout_config["layoutTabs"]]
92
+ active_sessions.append({"session_name": session_name, "is_active": is_active, "tab_count": tab_count, "tabs": tab_info})
93
+ except Exception as e:
94
+ logger.error(f"Error listing active sessions: {e}")
95
+ return active_sessions
96
+
97
+
98
+ def save_manager(session_layouts: list[LayoutConfig], managers: list["ZellijLayoutGenerator"], session_name_prefix: str, session_id: Optional[str]) -> str:
99
+ """Save the manager state to disk."""
100
+ if session_id is None:
101
+ import uuid
102
+ session_id = str(uuid.uuid4())[:8]
103
+ session_dir = TMP_SERIALIZATION_DIR / session_id
104
+ session_dir.mkdir(parents=True, exist_ok=True)
105
+ config_file = session_dir / "session_layouts.json"
106
+ text = json.dumps(session_layouts, indent=2, ensure_ascii=False)
107
+ config_file.write_text(text, encoding="utf-8")
108
+ metadata = {"session_name_prefix": session_name_prefix, "created_at": str(datetime.now()), "num_managers": len(managers), "sessions": [item["layoutName"] for item in session_layouts], "manager_type": "ZellijLocalManager"}
109
+ metadata_file = session_dir / "metadata.json"
110
+ text = json.dumps(metadata, indent=2, ensure_ascii=False)
111
+ metadata_file.write_text(text, encoding="utf-8")
112
+ managers_dir = session_dir / "managers"
113
+ managers_dir.mkdir(exist_ok=True)
114
+ for i, manager in enumerate(managers):
115
+ manager_data = {"session_name": manager.session_name, "layout_config": manager.layout_config, "layout_path": manager.layout_path}
116
+ manager_file = managers_dir / f"manager_{i}_{manager.session_name}.json"
117
+ text = json.dumps(manager_data, indent=2, ensure_ascii=False)
118
+ manager_file.write_text(text, encoding="utf-8")
119
+ logger.info(f"✅ Saved ZellijLocalManager session to: {session_dir}")
120
+ return session_id
121
+
122
+
123
+ def load_manager(session_id: str):
124
+ """Load a saved manager state from disk and return the data needed to reconstruct ZellijLocalManager."""
125
+ from machineconfig.cluster.sessions_managers.zellij_local import ZellijLayoutGenerator
126
+
127
+ session_dir = TMP_SERIALIZATION_DIR / session_id
128
+ if not session_dir.exists():
129
+ raise FileNotFoundError(f"Session directory not found: {session_dir}")
130
+ config_file = session_dir / "session_layouts.json"
131
+ if not config_file.exists():
132
+ raise FileNotFoundError(f"Configuration file not found: {config_file}")
133
+ text = config_file.read_text(encoding="utf-8")
134
+ session_layouts = json.loads(text)
135
+ managers = []
136
+ managers_dir = session_dir / "managers"
137
+ if managers_dir.exists():
138
+ manager_files = sorted(managers_dir.glob("manager_*.json"))
139
+ for manager_file in manager_files:
140
+ try:
141
+ text = manager_file.read_text(encoding="utf-8")
142
+ manager_data = json.loads(text)
143
+ manager = ZellijLayoutGenerator(layout_config=manager_data["layout_config"], session_name=manager_data["session_name"])
144
+ manager.layout_path = manager_data["layout_path"]
145
+ managers.append(manager)
146
+ except Exception as e:
147
+ logger.warning(f"Failed to load manager from {manager_file}: {e}")
148
+ logger.info(f"✅ Loaded ZellijLocalManager session from: {session_dir}")
149
+ return session_layouts, managers
150
+
151
+
152
+ def kill_all_sessions(managers: list["ZellijLayoutGenerator"]) -> dict[str, StartResult]:
153
+ """Kill all managed zellij sessions."""
154
+ results: dict[str, StartResult] = {}
155
+ for manager in managers:
156
+ try:
157
+ session_name = manager.session_name
158
+ cmd = f"zellij delete-session --force {session_name}"
159
+ logger.info(f"Killing session '{session_name}'")
160
+ result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
161
+ results[session_name] = {"success": result.returncode == 0, "message": "Session killed" if result.returncode == 0 else result.stderr}
162
+ except Exception as e:
163
+ key = getattr(manager, "session_name", None) or f"manager_{managers.index(manager)}"
164
+ results[key] = {"success": False, "error": str(e)}
165
+ return results
@@ -1,22 +1,9 @@
1
- # """CI
2
- # """
3
1
 
4
-
5
- # import time
6
2
  import platform
7
-
8
- # from typing import Any
9
- # from rich.console import Console
10
- # from machineconfig.utils.utils2 import pprint
11
- # # from rich.progress import track
12
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT
13
- # from machineconfig.utils.installer import get_installed_cli_apps
14
- # from typing import Optional
15
- # from datetime import datetime
16
- # import csv
3
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
17
4
 
18
5
 
19
- APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lower()}/apps_summary_report.csv")
6
+ APP_SUMMARY_PATH = CONFIG_ROOT.joinpath(f"profile/records/{platform.system().lower()}/apps_summary_report.csv")
20
7
  # CLOUD: str = "gdw" # Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
21
8
  # # my onedrive doesn't allow sharing.
22
9
 
@@ -234,7 +221,6 @@ APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lo
234
221
  # # cli_installers = get_cli_py_installers()
235
222
  # # else: raise NotImplementedError(f"Platform {platform.system().lower()} is not supported yet.")
236
223
 
237
- # if name == "essentials":
238
224
  # print(f"""
239
225
  # {'=' * 150}
240
226
  # 📥 DOWNLOAD | Downloading {len(self.data)} apps...
@@ -0,0 +1,61 @@
1
+
2
+
3
+ import platform
4
+ from typing import Optional
5
+
6
+ from rich.console import Console
7
+ from rich.panel import Panel
8
+ from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
9
+
10
+ from machineconfig.utils.installer_utils.installer_class import Installer
11
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
12
+
13
+ installer_data_modified: InstallerData = {
14
+ "appName": "boxes",
15
+ "repoURL": "https://github.com/ascii-boxes/boxes",
16
+ "doc": "📦 ASCI draws boxes around text.",
17
+ "fileNamePattern": {
18
+ "amd64": {
19
+ "windows": "boxes-{version}-intel-win32.zip",
20
+ "linux": None,
21
+ "macos": None
22
+ },
23
+ "arm64": {
24
+ "linux": None,
25
+ "macos": None,
26
+ "windows": None
27
+ }
28
+ }
29
+ }
30
+
31
+ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
32
+ console = Console()
33
+ _ = installer_data
34
+ console.print(
35
+ Panel.fit(
36
+ "\n".join([f"🖥️ Platform: {platform.system()}", f"🔄 Version: {'latest' if version is None else version}"]),
37
+ title="📦 Boxes Installer",
38
+ border_style="blue",
39
+ )
40
+ )
41
+
42
+ installer = Installer(installer_data=installer_data_modified)
43
+ downloaded, _version_to_be_installed = installer.binary_download(version=version)
44
+ decomp_path = downloaded.decompress()
45
+ from pathlib import Path
46
+ for item in decomp_path.rglob("*"):
47
+ if "boxes.exe" in item.name:
48
+ dest_exe = Path(WINDOWS_INSTALL_PATH) / "boxes.exe"
49
+ if dest_exe.exists():
50
+ dest_exe.unlink()
51
+ item.rename(dest_exe)
52
+ if "boxes.cfg" in item.name:
53
+ dest_cfg = Path(WINDOWS_INSTALL_PATH) / "boxes.cfg"
54
+ if dest_cfg.exists():
55
+ dest_cfg.unlink()
56
+ item.rename(dest_cfg)
57
+ console.print("📦 Boxes downloaded and decompressed.", style="bold green")
58
+
59
+
60
+ if __name__ == "__main__":
61
+ pass
@@ -3,6 +3,10 @@
3
3
  import platform
4
4
  import subprocess
5
5
  from typing import Optional
6
+
7
+ from rich.console import Console
8
+ from rich.panel import Panel
9
+
6
10
  from machineconfig.utils.installer_utils.installer_class import Installer
7
11
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
8
12
 
@@ -23,89 +27,101 @@ config_dict: InstallerData = {
23
27
  "appName": "gh",
24
28
  "repoURL": "https://github.com/cli/cli",
25
29
  "doc": "GitHub CLI",
26
- "fileNamePattern": {
27
- "amd64": {
28
- "windows": "gh_{version}_windows_amd64.msi",
29
- "linux": "gh_{version}_linux_amd64.deb",
30
- "macos": "gh_{version}_macOS_amd64.pkg",
31
- },
32
- "arm64": {
33
- "windows": "gh_{version}_windows_arm64.msi",
34
- "linux": "gh_{version}_linux_arm64.deb",
35
- "macos": "gh_{version}_macOS_arm64.pkg",
36
- },
37
- },
30
+ "fileNamePattern": {"amd64": {"windows": "gh_{version}_windows_amd64.msi", "linux": "gh_{version}_linux_amd64.deb", "macos": "gh_{version}_macOS_amd64.pkg"}, "arm64": {"windows": "gh_{version}_windows_arm64.msi", "linux": "gh_{version}_linux_arm64.deb", "macos": "gh_{version}_macOS_arm64.pkg"}},
38
31
  }
39
32
 
40
33
 
34
+ console = Console()
35
+
36
+
41
37
  def main(version: Optional[str]):
42
- print(f"""
43
- {"═" * 150}
44
- 🔱 GITHUB CLI INSTALLER | Command line tool for GitHub
45
- 💻 Platform: {platform.system()}
46
- 🔄 Version: {"latest" if version is None else version}
47
- {"═" * 150}
48
- """)
38
+ console.print(
39
+ Panel.fit(
40
+ "\n".join(
41
+ [
42
+ "[bold magenta]GitHub CLI Installer[/bold magenta]",
43
+ f"💻 Platform: {platform.system()}",
44
+ f"🔄 Version: {version or 'latest'}",
45
+ ]
46
+ ),
47
+ title="🔱 GitHub CLI",
48
+ border_style="magenta",
49
+ padding=(1, 2),
50
+ )
51
+ )
49
52
 
50
53
  _ = version
51
54
  inst = Installer(installer_data=config_dict)
52
- print("""
53
- 📦 INSTALLATION | Installing GitHub CLI base package...
54
- """)
55
+ console.print("[bold cyan]📦 INSTALLATION | Installing GitHub CLI base package...[/bold cyan]")
55
56
  inst.install(version=version)
56
57
 
57
- print(f"""
58
- {"─" * 150}
59
- 🤖 GITHUB COPILOT | Setting up GitHub Copilot CLI extension
60
- {"" * 150}
61
- """)
58
+ console.print(
59
+ Panel.fit(
60
+ "🤖 GITHUB COPILOT | Setting up GitHub Copilot CLI extension",
61
+ title="Extension Setup",
62
+ border_style="cyan",
63
+ )
64
+ )
62
65
 
63
66
  if platform.system() == "Windows":
64
- print("""
65
- 🪟 WINDOWS SETUP | Configuring GitHub CLI for Windows...
66
- """)
67
+ console.print(
68
+ Panel.fit(
69
+ "🪟 WINDOWS SETUP | Configuring GitHub CLI for Windows...",
70
+ border_style="blue",
71
+ title="Platform Setup",
72
+ )
73
+ )
67
74
  program = "gh extension install github/gh-copilot"
68
75
  elif platform.system() in ["Linux", "Darwin"]:
69
76
  system_name = "LINUX" if platform.system() == "Linux" else "MACOS"
70
- print(f"""
71
- 🐧 {system_name} SETUP | Configuring GitHub CLI for {platform.system()}...
72
- """)
77
+ console.print(
78
+ Panel.fit(
79
+ f"🐧 {system_name} SETUP | Configuring GitHub CLI for {platform.system()}...",
80
+ border_style="blue",
81
+ title="Platform Setup",
82
+ )
83
+ )
73
84
  program = """
74
85
  gh extension install github/gh-copilot
75
86
  """
76
87
  else:
77
88
  error_msg = f"Unsupported platform: {platform.system()}"
78
- print(f"""
79
- {"⚠️" * 20}
80
- ❌ ERROR | {error_msg}
81
- {"⚠️" * 20}
82
- """)
89
+ console.print(
90
+ Panel.fit(
91
+ f"❌ ERROR | {error_msg}",
92
+ title="Unsupported Platform",
93
+ border_style="red",
94
+ )
95
+ )
83
96
  raise NotImplementedError(error_msg)
84
97
 
85
98
  program += """
86
99
  gh auth login --with-token $HOME/dotfiles/creds/git/gh_token.txt
87
100
  """
88
- print("""
89
- 🔐 AUTHENTICATION | Setting up GitHub authentication with token...
90
- """)
101
+ console.print("[bold]🔐 AUTHENTICATION | Setting up GitHub authentication with token...[/bold]")
91
102
 
92
- print("""
93
- 🔄 EXECUTING | Running GitHub Copilot extension installation and authentication...
94
- """)
103
+ console.print("[bold]🔄 EXECUTING | Running GitHub Copilot extension installation and authentication...[/bold]")
95
104
  try:
96
105
  subprocess.run(program, shell=True, text=True, check=True)
97
- print("✅ Command executed successfully")
106
+ console.print("[green]✅ Command executed successfully[/green]")
98
107
  except subprocess.CalledProcessError as e:
99
- print(f"❌ Command failed with exit code {e.returncode}")
108
+ console.print(f"❌ [red]Command failed with exit code {e.returncode}[/red]")
100
109
  raise
101
110
 
102
- print(f"""
103
- {"═" * 150}
104
- ✅ SUCCESS | GitHub CLI installation completed
105
- 🚀 GitHub Copilot CLI extension installed
106
- 🔑 Authentication configured with token
107
- {"═" * 150}
108
- """)
111
+ console.print(
112
+ Panel.fit(
113
+ "\n".join(
114
+ [
115
+ "✅ SUCCESS | GitHub CLI installation completed",
116
+ "🚀 GitHub Copilot CLI extension installed",
117
+ "🔑 Authentication configured with token",
118
+ ]
119
+ ),
120
+ title="Installation Complete",
121
+ border_style="green",
122
+ padding=(1, 2),
123
+ )
124
+ )
109
125
 
110
126
 
111
127
  if __name__ == "__main__":
@@ -2,38 +2,40 @@
2
2
  Installers do not add runtime files to the machine, hence this script.
3
3
  """
4
4
 
5
- from machineconfig.utils.path_extended import PathExtended as PathExtended
6
- from machineconfig.utils.installer_utils.installer_abc import WINDOWS_INSTALL_PATH
5
+ from machineconfig.utils.path_extended import PathExtended
6
+ from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
7
7
  from typing import Optional
8
8
  import platform
9
9
 
10
- from machineconfig.utils.installer_utils.installer_abc import LINUX_INSTALL_PATH
10
+ from machineconfig.utils.installer_utils.installer_locator_utils import LINUX_INSTALL_PATH
11
11
  from machineconfig.utils.installer_utils.installer_class import Installer
12
12
  from rich.console import Console
13
13
  from rich.panel import Panel
14
14
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
15
15
 
16
16
 
17
+ LANGUAGES_SUPPORTED_GRAMMER = ["python.so", "nu.so", "bash.so", "lua.so", "powershell.so"]
17
18
  config_dict: InstallerData = {
18
19
  "appName": "hx",
19
20
  "repoURL": "CMD",
20
21
  "doc": "Helix is a post-modern modal text editor.",
21
22
  "fileNamePattern": {
22
23
  "amd64": {
23
- "linux": "hx-linux-amd64.tar.xz",
24
- "macos": "hx-macos-amd64.tar.xz",
25
- "windows": "hx-windows-amd64.zip",
24
+ "linux": "helix-{version}-x86_64-linux.tar.xz",
25
+ "macos": "helix-{version}-x86_64-macos.tar.xz",
26
+ "windows": "helix-{version}-x86_64-windows.zip",
26
27
  },
27
28
  "arm64": {
28
- "linux": "hx-linux-arm64.tar.xz",
29
- "macos": "hx-macos-arm64.tar.xz",
30
- "windows": "hx-windows-arm64.zip",
29
+ "linux": "helix-{version}-arm64-linux.tar.xz",
30
+ "macos": "helix-{version}-arm64-macos.tar.xz",
31
+ "windows": "helix-{version}-arm64-windows.zip",
31
32
  },
32
33
  },
33
34
  }
34
35
 
35
36
 
36
- def main(version: Optional[str], install_lib: bool = False):
37
+ def main(installer_data: InstallerData, version: Optional[str], install_lib: bool = True):
38
+ _ = installer_data
37
39
  console = Console()
38
40
 
39
41
  console.print(Panel(f"HELIX EDITOR INSTALLER 🧬\nPlatform: {platform.system()}\nVersion: {'latest' if version is None else version}", title="Installer", expand=False))
@@ -43,7 +45,7 @@ def main(version: Optional[str], install_lib: bool = False):
43
45
  inst = Installer(installer_data=config_dict_copy)
44
46
 
45
47
  print("\n📥 [Step 1/5] Downloading Helix editor...")
46
- downloaded, _version_to_be_installed = inst.download(version=version)
48
+ downloaded, _version_to_be_installed = inst.binary_download(version=version)
47
49
  print(" ✨ Download complete.")
48
50
 
49
51
  print("\n🔍 [Step 2/5] Locating executable and components...")
@@ -57,6 +59,7 @@ def main(version: Optional[str], install_lib: bool = False):
57
59
  raise FileNotFoundError(f"Could not find 'hx' executable in {downloaded.name}")
58
60
 
59
61
  assert len(hx_file_search) == 1, f"Expected 1 'hx' executable, found {len(hx_file_search)}"
62
+
60
63
  hx_file = hx_file_search[0]
61
64
  contrib = hx_file.parent / "contrib"
62
65
  runtime = contrib.parent / "runtime"
@@ -72,21 +75,50 @@ def main(version: Optional[str], install_lib: bool = False):
72
75
  print("\n🗑️ [Step 3/5] Cleaning up previous installation (if any)...")
73
76
  runtime_path = PathExtended.home().joinpath(".config/helix/runtime")
74
77
  contrib_path = PathExtended.home().joinpath(".config/helix/contrib")
75
- runtime_path.delete(sure=True, verbose=False)
76
- contrib_path.delete(sure=True, verbose=False)
77
- print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
78
78
 
79
79
  print("\n📦 [Step 4/5] Installing Helix components...")
80
- target_config_dir = PathExtended("~/.config/helix").expanduser()
80
+ target_config_dir = PathExtended.home().joinpath(".config/helix").expanduser()
81
81
  target_config_dir.mkdir(parents=True, exist_ok=True)
82
82
 
83
83
  if platform.system() in ["Linux", "Darwin"]:
84
84
  target_bin_path = PathExtended(LINUX_INSTALL_PATH) if platform.system() == "Linux" else PathExtended("/usr/local/bin")
85
85
  exe_name = "hx"
86
86
  hx_file.move(folder=target_bin_path, overwrite=True)
87
+
88
+ # Always install contrib (regardless of install_lib flag) — treat it like the executable.
89
+ contrib_path.delete(sure=True, verbose=False)
90
+ contrib.move(folder=target_config_dir, overwrite=True)
91
+
92
+ # Install runtime only if install_lib is True. When copying runtime, copy all subfolders
93
+ # except 'grammars' (for which we only copy the specific python.so file if present).
87
94
  if install_lib:
88
- contrib.move(folder=target_config_dir, overwrite=True)
89
- runtime.move(folder=target_config_dir, overwrite=True)
95
+ runtime_path.delete(sure=True, verbose=False)
96
+ print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
97
+ target_runtime = target_config_dir.joinpath("runtime")
98
+ target_runtime.mkdir(parents=True, exist_ok=True)
99
+
100
+ # iterate runtime children and copy selectively
101
+ for child in runtime.iterdir():
102
+ # skip non-existent or weird entries
103
+ if not child.exists():
104
+ continue
105
+ if child.name == "grammars":
106
+ # copy only the specific language files from runtime/grammars if they exist
107
+ for a_language in LANGUAGES_SUPPORTED_GRAMMER:
108
+ lang_file = child.joinpath(a_language)
109
+ if lang_file.exists() and lang_file.is_file():
110
+ dest = target_runtime.joinpath("grammars")
111
+ lang_file.copy(folder=dest, overwrite=True)
112
+ else:
113
+ # copy the whole child (file or directory) into target_runtime
114
+ # for directories, copy will create target_runtime/<child.name>
115
+ try:
116
+ child.copy(folder=target_runtime, overwrite=True)
117
+ except Exception:
118
+ # fallback: try copying contents if it's a directory
119
+ if child.is_dir():
120
+ for sub in child.iterdir():
121
+ sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
90
122
  system_name = "Linux" if platform.system() == "Linux" else "macOS"
91
123
  console.print(
92
124
  Panel(
@@ -102,9 +134,34 @@ def main(version: Optional[str], install_lib: bool = False):
102
134
  target_bin_path = PathExtended(WINDOWS_INSTALL_PATH)
103
135
  exe_name = "hx.exe"
104
136
  hx_file.move(folder=target_bin_path, overwrite=True)
137
+
138
+ # Always install contrib (regardless of install_lib flag)
139
+ contrib_path.delete(sure=True, verbose=False)
140
+ contrib.move(folder=target_config_dir, overwrite=True)
141
+
142
+ # Install runtime only if install_lib is True. Copy selectively as on POSIX.
105
143
  if install_lib:
106
- contrib.move(folder=target_config_dir, overwrite=True)
107
- runtime.move(folder=target_config_dir, overwrite=True)
144
+ runtime_path.delete(sure=True, verbose=False)
145
+ print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
146
+ target_runtime = target_config_dir.joinpath("runtime")
147
+ target_runtime.mkdir(parents=True, exist_ok=True)
148
+
149
+ for child in runtime.iterdir():
150
+ if not child.exists():
151
+ continue
152
+ if child.name == "grammars":
153
+ for a_language in LANGUAGES_SUPPORTED_GRAMMER:
154
+ lang_file = child.joinpath(a_language)
155
+ if lang_file.exists() and lang_file.is_file():
156
+ dest = target_runtime.joinpath("grammars")
157
+ lang_file.copy(folder=dest, overwrite=True)
158
+ else:
159
+ try:
160
+ child.copy(folder=target_runtime, overwrite=True)
161
+ except Exception:
162
+ if child.is_dir():
163
+ for sub in child.iterdir():
164
+ sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
108
165
  console.print(
109
166
  Panel(
110
167
  f"""✅ SUCCESS | Helix editor installed successfully on Windows!
@@ -137,4 +194,4 @@ def main(version: Optional[str], install_lib: bool = False):
137
194
 
138
195
 
139
196
  if __name__ == "__main__":
140
- main(version=None)
197
+ pass