machineconfig 5.15__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 (389) 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 +0 -1
  5. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  6. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  7. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  8. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  9. machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
  10. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  11. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  12. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  13. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  14. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  17. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  18. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  19. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
  20. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  21. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  22. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  23. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  24. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  25. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  26. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  30. machineconfig/jobs/{python → installer}/check_installations.py +2 -3
  31. machineconfig/jobs/installer/custom/boxes.py +61 -0
  32. machineconfig/jobs/installer/custom/hx.py +76 -19
  33. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  34. machineconfig/jobs/installer/custom_dev/brave.py +1 -7
  35. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  36. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  37. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  38. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
  39. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  40. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  41. machineconfig/jobs/installer/installer_data.json +1101 -115
  42. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  43. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  44. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  45. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  46. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  47. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  48. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  49. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  50. machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
  51. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  52. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  53. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  54. machineconfig/jobs/installer/package_groups.py +108 -180
  55. machineconfig/logger.py +0 -1
  56. machineconfig/profile/backup.toml +49 -0
  57. machineconfig/profile/bash_shell_profiles.md +11 -0
  58. machineconfig/profile/create_helper.py +74 -0
  59. machineconfig/profile/create_links.py +288 -0
  60. machineconfig/profile/create_links_export.py +100 -0
  61. machineconfig/profile/create_shell_profile.py +136 -0
  62. machineconfig/profile/mapper.toml +258 -0
  63. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  64. machineconfig/scripts/__init__.py +0 -4
  65. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  66. machineconfig/scripts/linux/wrap_mcfg +47 -0
  67. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  68. machineconfig/scripts/python/agents.py +92 -103
  69. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  70. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  71. machineconfig/scripts/python/ai/generate_files.py +307 -42
  72. machineconfig/scripts/python/ai/initai.py +3 -28
  73. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  74. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  75. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  76. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  77. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  78. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  79. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  80. machineconfig/scripts/python/cloud.py +29 -0
  81. machineconfig/scripts/python/croshell.py +111 -114
  82. machineconfig/scripts/python/define.py +31 -0
  83. machineconfig/scripts/python/devops.py +44 -103
  84. machineconfig/scripts/python/devops_navigator.py +10 -0
  85. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  86. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  87. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  88. machineconfig/scripts/python/explore.py +49 -0
  89. machineconfig/scripts/python/fire_jobs.py +115 -152
  90. machineconfig/scripts/python/ftpx.py +29 -24
  91. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  92. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  93. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  94. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  95. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  96. machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
  97. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  98. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  99. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  100. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  101. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  102. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
  103. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  104. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  106. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
  107. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  108. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  109. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  110. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  111. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  112. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  113. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  114. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  115. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
  116. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  117. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  118. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  119. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  120. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  121. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  122. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  123. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  124. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  125. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  126. machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
  127. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  128. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  129. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  130. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  131. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  132. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  133. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  134. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  135. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  136. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  137. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  138. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  139. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  140. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  141. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  142. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  143. machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
  144. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  145. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  146. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  147. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  148. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  149. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  150. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  151. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  152. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  153. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  154. machineconfig/scripts/python/interactive.py +64 -84
  155. machineconfig/scripts/python/machineconfig.py +63 -0
  156. machineconfig/scripts/python/msearch.py +21 -0
  157. machineconfig/scripts/python/nw/__init__.py +0 -0
  158. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
  159. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
  160. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  161. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
  162. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  163. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
  164. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  165. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  166. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  167. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  168. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
  169. machineconfig/scripts/python/sessions.py +64 -44
  170. machineconfig/scripts/python/terminal.py +127 -0
  171. machineconfig/scripts/python/utils.py +66 -0
  172. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  173. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  174. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  175. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  176. machineconfig/settings/broot/br.sh +0 -4
  177. machineconfig/settings/broot/conf.toml +1 -1
  178. machineconfig/settings/helix/config.toml +16 -0
  179. machineconfig/settings/helix/languages.toml +13 -4
  180. machineconfig/settings/helix/yazi-picker.sh +12 -0
  181. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  182. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  183. machineconfig/settings/lf/linux/lfrc +10 -12
  184. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  185. machineconfig/settings/lf/windows/lfrc +18 -38
  186. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  187. machineconfig/settings/linters/.ruff.toml +1 -1
  188. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  189. machineconfig/settings/marimo/marimo.toml +80 -0
  190. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  191. machineconfig/settings/pistol/pistol.conf +1 -1
  192. machineconfig/settings/shells/bash/init.sh +55 -31
  193. machineconfig/settings/shells/nushell/config.nu +1 -34
  194. machineconfig/settings/shells/nushell/init.nu +127 -0
  195. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  196. machineconfig/settings/shells/starship/starship.toml +16 -0
  197. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  198. machineconfig/settings/shells/wt/settings.json +32 -17
  199. machineconfig/settings/shells/zsh/init.sh +89 -0
  200. machineconfig/settings/svim/linux/init.toml +0 -4
  201. machineconfig/settings/svim/windows/init.toml +0 -3
  202. machineconfig/settings/yazi/init.lua +57 -0
  203. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  204. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  205. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  206. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  207. machineconfig/settings/yazi/yazi.toml +13 -0
  208. machineconfig/setup_linux/__init__.py +10 -0
  209. machineconfig/setup_linux/apps_desktop.sh +89 -0
  210. machineconfig/setup_linux/apps_gui.sh +64 -0
  211. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  212. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  213. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  214. machineconfig/setup_linux/uv.sh +15 -0
  215. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  216. machineconfig/setup_mac/__init__.py +16 -0
  217. machineconfig/setup_mac/apps_gui.sh +248 -0
  218. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  219. machineconfig/setup_mac/uv.sh +36 -0
  220. machineconfig/setup_windows/__init__.py +8 -0
  221. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  222. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  223. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  224. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  225. machineconfig/setup_windows/uv.ps1 +10 -0
  226. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  227. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  228. machineconfig/utils/accessories.py +7 -5
  229. machineconfig/utils/cloud/onedrive/README.md +139 -0
  230. machineconfig/utils/code.py +133 -106
  231. machineconfig/utils/files/art/fat_croco.txt +10 -0
  232. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  233. machineconfig/utils/files/art/happy_croco.txt +22 -0
  234. machineconfig/utils/files/art/water_croco.txt +11 -0
  235. machineconfig/utils/files/ascii_art.py +1 -1
  236. machineconfig/utils/files/dbms.py +257 -0
  237. machineconfig/utils/files/headers.py +11 -14
  238. machineconfig/utils/files/ouch/__init__.py +0 -0
  239. machineconfig/utils/files/ouch/decompress.py +45 -0
  240. machineconfig/utils/files/read.py +10 -18
  241. machineconfig/utils/installer_utils/installer_class.py +68 -126
  242. machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
  243. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
  244. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
  245. machineconfig/utils/io.py +77 -23
  246. machineconfig/utils/links.py +254 -162
  247. machineconfig/utils/meta.py +255 -0
  248. machineconfig/utils/notifications.py +1 -1
  249. machineconfig/utils/options.py +13 -3
  250. machineconfig/utils/path_extended.py +46 -100
  251. machineconfig/utils/path_helper.py +75 -22
  252. machineconfig/utils/procs.py +50 -70
  253. machineconfig/utils/scheduler.py +94 -97
  254. machineconfig/utils/scheduling.py +0 -3
  255. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  256. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  257. machineconfig/utils/source_of_truth.py +3 -6
  258. machineconfig/utils/ssh.py +742 -264
  259. machineconfig/utils/ssh_utils/utils.py +0 -0
  260. machineconfig/utils/terminal.py +2 -113
  261. machineconfig/utils/tst.py +20 -0
  262. machineconfig/utils/upgrade_packages.py +109 -28
  263. machineconfig/utils/ve.py +11 -4
  264. machineconfig-7.66.dist-info/METADATA +124 -0
  265. machineconfig-7.66.dist-info/RECORD +451 -0
  266. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  267. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  268. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  269. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  270. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  271. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  272. machineconfig/jobs/python/vscode/api.py +0 -57
  273. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  274. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  275. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  276. machineconfig/jobs/windows/startup_file.cmd +0 -2
  277. machineconfig/profile/create.py +0 -303
  278. machineconfig/profile/shell.py +0 -176
  279. machineconfig/scripts/cloud/init.sh +0 -119
  280. machineconfig/scripts/linux/agents +0 -2
  281. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  282. machineconfig/scripts/linux/cloud_copy +0 -2
  283. machineconfig/scripts/linux/cloud_mount +0 -2
  284. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  285. machineconfig/scripts/linux/cloud_sync +0 -2
  286. machineconfig/scripts/linux/croshell +0 -3
  287. machineconfig/scripts/linux/devops +0 -2
  288. machineconfig/scripts/linux/fire +0 -2
  289. machineconfig/scripts/linux/ftpx +0 -2
  290. machineconfig/scripts/linux/fzf2g +0 -21
  291. machineconfig/scripts/linux/fzffg +0 -25
  292. machineconfig/scripts/linux/gh_models +0 -2
  293. machineconfig/scripts/linux/initai +0 -2
  294. machineconfig/scripts/linux/kill_process +0 -2
  295. machineconfig/scripts/linux/scheduler +0 -2
  296. machineconfig/scripts/linux/sessions +0 -2
  297. machineconfig/scripts/linux/share_smb +0 -1
  298. machineconfig/scripts/linux/start_slidev +0 -2
  299. machineconfig/scripts/linux/start_terminals +0 -3
  300. machineconfig/scripts/linux/warp-cli.sh +0 -122
  301. machineconfig/scripts/linux/wifi_conn +0 -2
  302. machineconfig/scripts/linux/z_ls +0 -104
  303. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  304. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  305. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  306. machineconfig/scripts/python/dotfile.py +0 -78
  307. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  308. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  309. machineconfig/scripts/python/gh_models.py +0 -104
  310. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  311. machineconfig/scripts/python/repos.py +0 -132
  312. machineconfig/scripts/python/repos_helper_action.py +0 -378
  313. machineconfig/scripts/python/snapshot.py +0 -25
  314. machineconfig/scripts/python/start_terminals.py +0 -121
  315. machineconfig/scripts/python/t4.py +0 -17
  316. machineconfig/scripts/windows/agents.ps1 +0 -1
  317. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  318. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  319. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  320. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  321. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  322. machineconfig/scripts/windows/croshell.ps1 +0 -1
  323. machineconfig/scripts/windows/devops.ps1 +0 -1
  324. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  325. machineconfig/scripts/windows/fire.ps1 +0 -1
  326. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  327. machineconfig/scripts/windows/gpt.ps1 +0 -1
  328. machineconfig/scripts/windows/grep.ps1 +0 -2
  329. machineconfig/scripts/windows/initai.ps1 +0 -1
  330. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  331. machineconfig/scripts/windows/nano.ps1 +0 -3
  332. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  333. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  334. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  335. machineconfig/scripts/windows/sessions.ps1 +0 -1
  336. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  337. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  338. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  339. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  340. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  341. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  342. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  343. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  344. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  345. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  346. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  347. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  348. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  349. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  350. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  351. machineconfig-5.15.dist-info/METADATA +0 -188
  352. machineconfig-5.15.dist-info/RECORD +0 -415
  353. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  354. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  355. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  356. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  357. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  358. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  359. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  360. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  361. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  362. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  363. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  364. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  365. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  366. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  367. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  368. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  369. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  370. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  371. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  372. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  373. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  374. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  375. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  376. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  377. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  378. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  379. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  380. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  381. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  382. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  383. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  384. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  385. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  386. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  387. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  388. {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  389. {machineconfig-5.15.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,9 +1,9 @@
1
1
 
2
2
  import platform
3
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT
3
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
4
4
 
5
5
 
6
- 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")
7
7
  # CLOUD: str = "gdw" # Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
8
8
  # # my onedrive doesn't allow sharing.
9
9
 
@@ -221,7 +221,6 @@ APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lo
221
221
  # # cli_installers = get_cli_py_installers()
222
222
  # # else: raise NotImplementedError(f"Platform {platform.system().lower()} is not supported yet.")
223
223
 
224
- # if name == "essentials":
225
224
  # print(f"""
226
225
  # {'=' * 150}
227
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,37 +3,39 @@ Installers do not add runtime files to the machine, hence this script.
3
3
  """
4
4
 
5
5
  from machineconfig.utils.path_extended import PathExtended
6
- from machineconfig.utils.installer_utils.installer_abc import WINDOWS_INSTALL_PATH
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
@@ -30,8 +30,8 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
30
30
  program = """
31
31
 
32
32
  cargo install alacritty
33
- mkdir -p ~/.config/alacritty/themes
34
- git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/themes
33
+ mkdir -p $HOME/.config/alacritty/themes
34
+ git clone https://github.com/alacritty/alacritty-theme $HOME/.config/alacritty/themes
35
35
 
36
36
  """
37
37
  elif platform.system() in ["Linux", "Darwin"]:
@@ -41,8 +41,8 @@ git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/theme
41
41
 
42
42
 
43
43
  cargo install alacritty
44
- mkdir -p ~/.config/alacritty/themes
45
- git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/themes
44
+ mkdir -p $HOME/.config/alacritty/themes
45
+ git clone https://github.com/alacritty/alacritty-theme $HOME/.config/alacritty/themes
46
46
 
47
47
  """
48
48
  else:
@@ -9,12 +9,6 @@ from rich.panel import Panel
9
9
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
10
10
 
11
11
 
12
- # config_dict: InstallerData = {
13
- # "appName": "Brave",
14
- # "repoURL": "CMD",
15
- # "doc": "Privacy-focused web browser with built-in ad blocking",
16
- # }
17
-
18
12
 
19
13
  def main(installer_data: InstallerData, version: Optional[str]) -> None:
20
14
  console = Console()
@@ -33,7 +27,7 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
33
27
  console.print("🪟 Installing Brave Browser on Windows using winget...", style="bold")
34
28
  program = """
35
29
 
36
- winget install --Name "Brave Browser" --Id Brave.Brave --source winget --accept-package-agreements --accept-source-agreements
30
+ winget install --no-upgrade --name "Brave" --Id "Brave.Brave" --source winget --scope user --accept-package-agreements --accept-source-agreements
37
31
 
38
32
  """
39
33
  elif platform.system() in ["Linux", "Darwin"]:
@@ -0,0 +1,23 @@
1
+
2
+ from typing import Optional
3
+ import platform
4
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
5
+
6
+
7
+ def main(installer_data: InstallerData, version: Optional[str]):
8
+ _ = installer_data, version
9
+ system = platform.system()
10
+ if system == "Windows":
11
+ raise NotImplementedError("Installer is not yet implemented for Windows.")
12
+ elif system == "Linux":
13
+ from pathlib import Path
14
+ import machineconfig.jobs.installer as module
15
+ program = Path(module.__file__).parent.joinpath("linux_scripts/cloudflare_warp_cli.sh").read_text(encoding="utf-8")
16
+ elif system == "Darwin":
17
+ program = "brew install --cask cloudflare-warp"
18
+ else:
19
+ raise NotImplementedError(f"Unsupported platform: {system}")
20
+ import subprocess
21
+ subprocess.run(program, shell=True, check=True)
22
+ return f"Cloudflare WARP CLI installed successfully on {system}."
23
+
@@ -32,7 +32,10 @@ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
32
32
  install_script = """brew install --cask visual-studio-code"""
33
33
  elif platform.system() == "Windows":
34
34
  console.print("🪟 Installing VS Code on Windows using winget...", style="bold")
35
- install_script = """winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements"""
35
+ install_script = """
36
+ winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements
37
+
38
+ """
36
39
  else:
37
40
  error_msg = f"Unsupported platform: {platform.system()}"
38
41
  console.print(
@@ -0,0 +1,30 @@
1
+
2
+
3
+
4
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
5
+ from typing import Optional
6
+
7
+ installer_data: InstallerData = {
8
+ "appName": "libduckdb.so",
9
+ "repoURL": "https://github.com/duckdb/duckdb",
10
+ "doc": "🗃️ An in-process SQL OLAP database management system",
11
+ "fileNamePattern": {
12
+ "amd64": {
13
+ "linux": "libduckdb-linux-amd64.zip",
14
+ "macos": None,
15
+ "windows": None
16
+ },
17
+ "arm64": {
18
+ "linux": "libduckdb-linux-arm64.zip",
19
+ "macos": None,
20
+ "windows": None
21
+ }
22
+ }
23
+ }
24
+
25
+
26
+ def main(installer_data: InstallerData, version: Optional[str]) -> None:
27
+ _ = version
28
+ from machineconfig.utils.installer_utils.installer_runner import Installer
29
+ installer = Installer(installer_data)
30
+ installer.install(version=None)
@@ -18,34 +18,25 @@ from machineconfig.utils.installer_utils.installer_class import Installer
18
18
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
19
19
 
20
20
 
21
- # Nerd Fonts installer configuration data
22
21
  nerd_fonts: InstallerData = {
23
22
  "appName": "Cascadia Code Nerd Font",
24
23
  "repoURL": "https://github.com/ryanoasis/nerd-fonts",
25
24
  "doc": "Nerd Fonts is a project that patches developer targeted fonts with a high number of glyphs (icons)",
26
25
  "fileNamePattern": {
27
26
  "amd64": {
28
- "windows": "CaskaydiaCoveNerdFontWindows.zip",
29
- "linux": "CaskaydiaCoveNerdFontLinux.zip",
30
- "macos": "CaskaydiaCoveNerdFontMac.zip",
27
+ "windows": "CascadiaCode.zip",
28
+ "linux": "CascadiaCode.zip",
29
+ "macos": "CascadiaCode.zip",
31
30
  },
32
31
  "arm64": {
33
- "windows": "CaskaydiaCoveNerdFontWindows.zip",
34
- "linux": "CaskaydiaCoveNerdFontLinux.zip",
35
- "macos": "CaskaydiaCoveNerdFontMac.zip",
32
+ "windows": "CascadiaCode.zip",
33
+ "linux": "CascadiaCode.zip",
34
+ "macos": "CascadiaCode.zip",
36
35
  }
37
36
  }
38
37
  }
39
38
 
40
39
 
41
- # Patterns to match any installed variant (NF, Nerd Font, Mono, Propo, style weights) of Cascadia/Caskaydia
42
- # We'll compile them at runtime for flexibility. Keep them simple to avoid false positives.
43
- REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
44
- r"caskaydiacove.*(nf|nerd ?font)",
45
- r"cascadiacode.*(nf|nerd ?font)"
46
- )
47
-
48
-
49
40
  console = Console()
50
41
 
51
42
 
@@ -92,7 +83,7 @@ def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
92
83
 
93
84
  installed_norm = [f.lower().replace(" ", "") for f in installed_fonts]
94
85
  missing: list[str] = []
95
- for pattern in REQUIRED_FONT_PATTERNS:
86
+ for pattern in ["cascadiacode*"]:
96
87
  regex = re.compile(pattern)
97
88
  if not any(regex.search(f) for f in installed_norm):
98
89
  missing.append(pattern)
@@ -125,7 +116,7 @@ def install_nerd_fonts() -> None:
125
116
  console.print(f"🔍 Missing fonts detected: {', '.join(missing)}. Proceeding with installation...")
126
117
  console.print("🔍 Downloading Nerd Fonts package...")
127
118
 
128
- folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).download(version=None)
119
+ folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).binary_download(version=None)
129
120
 
130
121
  console.print("🧹 Cleaning up unnecessary files...")
131
122
  [p.delete(sure=True) for p in folder.search("*Windows*")]
@@ -136,7 +127,7 @@ def install_nerd_fonts() -> None:
136
127
  file = PathExtended.tmpfile(suffix=".ps1")
137
128
  file.parent.mkdir(parents=True, exist_ok=True)
138
129
 
139
- raw_content = LIBRARY_ROOT.joinpath("setup_windows/wt_and_pwsh/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
130
+ raw_content = LIBRARY_ROOT.joinpath("jobs/installer/pwsh_scripts/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
140
131
  # PowerShell 5.1 can choke on certain unicode chars in some locales; keep ASCII only.
141
132
  content = "".join(ch for ch in raw_content if ord(ch) < 128)
142
133
  file.write_text(content, encoding="utf-8")