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
@@ -7,150 +7,65 @@ fire
7
7
 
8
8
  """
9
9
 
10
- from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
11
- from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
12
- from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
13
- from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
14
- from machineconfig.utils.options import choose_from_options
15
- from machineconfig.utils.path_helper import match_file_name, sanitize_path
16
-
17
- from machineconfig.utils.path_extended import PathExtended as PathExtended
18
- from machineconfig.utils.accessories import get_repo_root, randstr
19
- from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs, extract_kwargs, parse_fire_args_from_context
20
- import platform
21
10
  from typing import Optional, Annotated
22
- from pathlib import Path
23
- import tomllib
24
11
  import typer
25
- # import os
26
12
 
27
13
 
28
- def route(args: FireJobArgs, fire_args: str = "") -> None:
29
- if args.layout:
30
- from machineconfig.scripts.python.fire_jobs_layout_helper import handle_layout_args
31
-
32
- return handle_layout_args(args)
33
-
34
- path_obj = sanitize_path(args.path)
35
- if not path_obj.exists():
36
- suffixes = {".py", ".sh", ".ps1"}
37
- choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes=suffixes)
38
- elif path_obj.is_dir():
39
- print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
40
- files = search_for_files_of_interest(path_obj)
41
- print(f"🔍 Got #{len(files)} results.")
42
- choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
43
- choice_file = PathExtended(choice_file)
44
- else:
45
- choice_file = path_obj
46
- repo_root = get_repo_root(Path(choice_file))
14
+ def route(args: "FireJobArgs", fire_args: str = "") -> None:
15
+ from pathlib import Path
16
+ from machineconfig.utils.path_helper import get_choice_file
17
+ from machineconfig.utils.accessories import get_repo_root, randstr
18
+ choice_file = get_choice_file(args.path, suffixes=None)
19
+ repo_root = get_repo_root(choice_file)
47
20
  print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
48
- ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
49
- if ipy_profile is None:
50
- ipy_profile = "default"
21
+ if args.marimo:
22
+ print(f"🧽 Preparing to launch Marimo notebook for `{choice_file}`...")
23
+ tmp_dir = Path.home().joinpath(f"tmp_results/tmp_scripts/marimo/{choice_file.stem}_{randstr()}")
24
+ tmp_dir.mkdir(parents=True, exist_ok=True)
25
+ script = f"""
26
+ cd {tmp_dir}
27
+ uv run --python 3.14 --with marimo marimo convert {choice_file} -o marimo_nb.py
28
+ uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.py
29
+ """
30
+ from machineconfig.utils.code import exit_then_run_shell_script
31
+ print(f"🚀 Launching Marimo notebook for `{choice_file}`...")
32
+ exit_then_run_shell_script(script)
33
+ return
51
34
 
35
+ # ========================= preparing kwargs_dict
52
36
  if choice_file.suffix == ".py":
53
- kwargs = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
54
- activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/code/machineconfig/.venv")
37
+ from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import extract_kwargs
38
+ kwargs_dict = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
55
39
  else:
56
- activate_ve_line = ""
57
- kwargs = {}
40
+ kwargs_dict = {}
58
41
 
59
42
  # ========================= choosing function to run
60
43
  choice_function: Optional[str] = None # Initialize to avoid unbound variable
61
- if args.choose_function or args.submit_to_cloud:
62
- if choice_file.suffix == ".py":
63
- options, func_args = parse_pyfile(file_path=str(choice_file))
64
- choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
65
- assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
66
- choice_index = options.index(choice_function_tmp)
67
- choice_function = choice_function_tmp.split(" -- ")[0]
68
- choice_function_args = func_args[choice_index]
69
-
70
- if choice_function == "RUN AS MAIN":
71
- choice_function = None
72
- if len(choice_function_args) > 0 and len(kwargs) == 0:
73
- for item in choice_function_args:
74
- kwargs[item.name] = input(f"Please enter a value for argument `{item.name}` (type = {item.type}) (default = {item.default}) : ") or item.default
75
- elif choice_file.suffix == ".sh": # in this case, we choos lines.
76
- options = []
77
- for line in choice_file.read_text(encoding="utf-8").splitlines():
78
- if line.startswith("#"):
79
- continue
80
- if line == "":
81
- continue
82
- if line.startswith("echo"):
83
- continue
84
- options.append(line)
85
- chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
86
- choice_file = PathExtended.tmpfile(suffix=".sh")
87
- choice_file.parent.mkdir(parents=True, exist_ok=True)
88
- choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
89
- choice_function = None
44
+ if args.choose_function:
45
+ from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
46
+
47
+ choice_function, choice_file, kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict)
90
48
  else:
91
49
  choice_function = args.function
92
50
 
93
51
  if choice_file.suffix == ".py":
52
+ from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import get_command_streamlit
53
+
54
+ with_project = f"--project {repo_root} " if repo_root is not None else ""
94
55
  if args.streamlit:
95
- import socket
96
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
97
- try:
98
- s.connect(("8.8.8.8", 1))
99
- local_ip_v4 = s.getsockname()[0]
100
- except Exception:
101
- local_ip_v4 = socket.gethostbyname(socket.gethostname())
102
- finally:
103
- s.close()
104
- computer_name = platform.node()
105
- port = 8501
106
- toml_path: Optional[PathExtended] = None
107
- toml_path_maybe = choice_file.parent.joinpath(".streamlit/config.toml")
108
- if toml_path_maybe.exists():
109
- toml_path = toml_path_maybe
110
- elif choice_file.parent.name == "pages":
111
- toml_path_maybe = choice_file.parent.parent.joinpath(".streamlit/config.toml")
112
- if toml_path_maybe.exists():
113
- toml_path = toml_path_maybe
114
- if toml_path is not None:
115
- print(f"📄 Reading config.toml @ {toml_path}")
116
- config = tomllib.loads(toml_path.read_text(encoding="utf-8"))
117
- if "server" in config:
118
- if "port" in config["server"]:
119
- port = config["server"]["port"]
120
- secrets_path = toml_path.with_name("secrets.toml")
121
- if repo_root is not None:
122
- secrets_template_path = PathExtended.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
123
- if args.environment != "" and not secrets_path.exists() and secrets_template_path.exists():
124
- secrets_template = tomllib.loads(secrets_template_path.read_text(encoding="utf-8"))
125
- if args.environment == "ip":
126
- host_url = f"http://{local_ip_v4}:{port}/oauth2callback"
127
- elif args.environment == "localhost":
128
- host_url = f"http://localhost:{port}/oauth2callback"
129
- elif args.environment == "hostname":
130
- host_url = f"http://{computer_name}:{port}/oauth2callback"
131
- else:
132
- host_url = f"http://{args.environment}:{port}/oauth2callback"
133
- try:
134
- secrets_template["auth"]["redirect_uri"] = host_url
135
- secrets_template["auth"]["cookie_secret"] = randstr(35)
136
- secrets_template["auth"]["auth0"]["redirect_uri"] = host_url
137
- # save_toml(obj=secrets_template, path=secrets_path)
138
- except Exception as ex:
139
- print(ex)
140
- raise ex
141
- message = f"🚀 Streamlit app is running @:\n1- http://{local_ip_v4}:{port}\n2- http://{computer_name}:{port}\n3- http://localhost:{port}"
142
- from rich.panel import Panel
143
- from rich import print as rprint
144
-
145
- rprint(Panel(message))
146
- exe = f"streamlit run --server.address 0.0.0.0 --server.headless true --server.port {port}"
147
- # exe = f"cd '{choice_file.parent}'; " + exe
148
- elif args.interactive is False:
149
- exe = "python"
56
+ exe = get_command_streamlit(choice_file=choice_file, environment=args.environment, repo_root=repo_root)
57
+ exe = f"uv run {with_project} {exe} "
150
58
  elif args.jupyter:
151
- exe = "jupyter-lab"
59
+ exe = f"uv run {with_project} jupyter-lab"
152
60
  else:
153
- exe = f"ipython -i --no-banner --profile {ipy_profile} "
61
+ if args.interactive:
62
+ from machineconfig.utils.ve import get_ve_path_and_ipython_profile
63
+ _ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
64
+ if ipy_profile is None:
65
+ ipy_profile = "default"
66
+ exe = f"uv run {with_project} ipython -i --no-banner --profile {ipy_profile} "
67
+ else:
68
+ exe = f"uv run {with_project} python "
154
69
  elif choice_file.suffix == ".ps1" or choice_file.suffix == ".sh":
155
70
  exe = "."
156
71
  elif choice_file.suffix == "":
@@ -158,54 +73,38 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
158
73
  else:
159
74
  raise NotImplementedError(f"File type {choice_file.suffix} not supported, in the sense that I don't know how to fire it.")
160
75
 
161
- if (
162
- args.module or (args.debug and args.choose_function)
163
- ): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
76
+ if args.module or (args.debug and args.choose_function):
77
+ # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
164
78
  assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
165
- import_line = get_import_module_code(str(choice_file))
166
- if repo_root is not None:
167
- repo_root_add = f"""sys.path.append(r'{repo_root}')"""
168
- else:
169
- repo_root_add = ""
170
- txt: str = f"""
171
- try:
172
- {import_line}
173
- except (ImportError, ModuleNotFoundError) as ex:
174
- print(fr"❌ Failed to import `{choice_file}` as a module: {{ex}} ")
175
- print(fr"⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
176
- import sys
177
- sys.path.append(r'{PathExtended(choice_file).parent}')
178
- {repo_root_add}
179
- from {PathExtended(choice_file).stem} import *
180
- print(fr"✅ Successfully imported `{choice_file}`")
181
- """
182
- if choice_function is not None:
183
- txt = (
184
- txt
185
- + f"""
186
- res = {choice_function}({("**" + str(kwargs)) if kwargs else ""})
187
- """
188
- )
189
-
190
- txt = (
191
- f"""
192
- try:
193
- from rich.panel import Panel
194
- from rich.console import Console
195
- from rich.syntax import Syntax
196
- console = Console()
197
- console.print(Panel(Syntax(code=r'''{txt}''', lexer='python'), title='Import Script'), style="bold red")
198
- except ImportError as _ex:
199
- print(r'''{txt}''')
200
- """
201
- + txt
79
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import get_import_module_code, wrap_import_in_try_except
80
+ from machineconfig.utils.meta import lambda_to_python_script
81
+ from machineconfig.utils.code import print_code
82
+
83
+ import_code = get_import_module_code(str(choice_file))
84
+ import_code_robust = lambda_to_python_script(
85
+ lambda: wrap_import_in_try_except(
86
+ import_line=import_code, pyfile=str(choice_file), repo_root=str(repo_root) if repo_root is not None else None
87
+ ),
88
+ in_global=True,
89
+ import_module=False,
202
90
  )
203
- choice_file = PathExtended.tmp().joinpath(f"tmp_scripts/python/{PathExtended(choice_file).parent.name}_{PathExtended(choice_file).stem}_{randstr()}.py")
91
+ # print(f"🧩 Preparing import code for module import:\n{import_code}")
92
+ code_printing = lambda_to_python_script(
93
+ lambda: print_code(code=import_code_robust, lexer="python", desc="import as module code"),
94
+ in_global=True, import_module=False
95
+ )
96
+ print(f"🧩 Preparing import code for module import:\n{import_code}")
97
+ if choice_function is not None:
98
+ calling = f"""res = {choice_function}({("**" + str(kwargs_dict)) if kwargs_dict else ""})"""
99
+ else:
100
+ calling = """# No function selected to call. You can add your code here."""
101
+ choice_file = Path.home().joinpath(f"tmp_results/tmp_scripts/python/{Path(choice_file).parent.name}_{Path(choice_file).stem}_{randstr()}.py")
204
102
  choice_file.parent.mkdir(parents=True, exist_ok=True)
205
- choice_file.write_text(txt, encoding="utf-8")
103
+ choice_file.write_text(import_code_robust + "\n" + code_printing + "\n" + calling, encoding="utf-8")
206
104
 
207
105
  # ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
208
106
  if args.debug:
107
+ import platform
209
108
  if platform.system() == "Windows":
210
109
  command = f"{exe} -m ipdb {choice_file} " # pudb is not available on windows machines, use poor man's debugger instead.
211
110
  elif platform.system() in ["Linux", "Darwin"]:
@@ -215,69 +114,42 @@ except ImportError as _ex:
215
114
  elif args.module:
216
115
  # both selected function and kwargs are mentioned in the made up script, therefore no need for fire module.
217
116
  command = f"{exe} {choice_file} "
218
- elif choice_function is not None:
117
+ elif choice_function is not None and choice_file.suffix == ".py":
219
118
  command = f"{exe} -m fire {choice_file} {choice_function} {fire_args}"
220
119
  elif args.streamlit:
221
120
  # for .streamlit config to work, it needs to be in the current directory.
222
121
  if args.holdDirectory:
223
122
  command = f"{exe} {choice_file}"
224
123
  else:
225
- command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
226
-
124
+ command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {Path.cwd()}"
227
125
  elif args.cmd:
228
126
  command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
229
127
  else:
230
128
  if choice_file.suffix == "":
231
129
  command = f"{exe} {choice_file} {fire_args}"
232
130
  else:
233
- # command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
234
131
  command = f"{exe} {choice_file} "
132
+
235
133
  if not args.cmd:
236
- if "ipdb" in command:
237
- command = f"pip install ipdb\n{command}"
238
- if "pudb" in command:
239
- command = f"pip install pudb\n{command}"
240
- command = f"{activate_ve_line}\n{command}"
134
+ pass
241
135
  else:
242
- # CMD equivalent
243
- if "ipdb" in command:
244
- command = f"pip install ipdb & {command}"
245
- if "pudb" in command:
246
- command = f"pip install pudb & {command}"
247
136
  new_line = "\n"
248
- command = rf"""start cmd -Argument "/k {activate_ve_line.replace(".ps1", ".bat").replace(". ", "")} & {command.replace(new_line, " & ")} " """ # this works from powershell
249
-
137
+ command = rf"""start cmd -Argument "/k {command.replace(new_line, " & ")} " """ # this works from powershell
250
138
  if args.submit_to_cloud:
251
- command = f"""
252
- {activate_ve_line}
253
- python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
139
+ command = f"""uv run python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
254
140
  if choice_function is not None:
255
141
  command += f"--function {choice_function} "
256
142
 
257
- if args.Nprocess > 1:
258
- from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
259
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
260
-
261
- layout: LayoutConfig = {"layoutName": "fireNprocess", "layoutTabs": []}
262
- for an_arg in range(args.Nprocess):
263
- layout["layoutTabs"].append({"tabName": f"tab{an_arg}", "startDir": str(PathExtended.cwd()), "command": f"uv run -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={args.Nprocess}"})
264
- run_zellij_layout(layout_config=layout)
265
- return None
266
-
267
143
  if args.optimized:
268
- # note that in ipython, optimization is meaningless.
269
144
  command = command.replace("python ", "python -OO ")
270
- # if platform.system() == "Linux":
271
- # command = "timeout 1s aafire -driver slang\nclear\n" + command
272
145
 
273
146
  from rich.panel import Panel
274
147
  from rich.console import Console
275
148
  from rich.syntax import Syntax
276
149
 
277
150
  console = Console()
278
-
279
151
  if args.zellij_tab is not None:
280
- comman_path__ = PathExtended.tmpfile(suffix=".sh")
152
+ comman_path__ = Path.home().joinpath(f"tmp_results/tmp_scripts/zellij_commands/{choice_file.stem}_{randstr()}.sh")
281
153
  comman_path__.parent.mkdir(parents=True, exist_ok=True)
282
154
  comman_path__.write_text(command, encoding="utf-8")
283
155
  console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
@@ -286,7 +158,6 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
286
158
  existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
287
159
  if args.zellij_tab in existing_tab_names:
288
160
  print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
289
- # args.zellij_tab = input("Please enter a new tab name: ")
290
161
  args.zellij_tab += f"_{randstr(3)}"
291
162
  from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
292
163
 
@@ -296,37 +167,25 @@ python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
296
167
  if args.git_pull:
297
168
  command = f"\ngit -C {choice_file.parent} pull\n" + command
298
169
  if args.PathExport:
299
- if platform.system() in ["Linux", "Darwin"]:
300
- export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
301
- elif platform.system() == "Windows":
302
- # export_line = f"""set PYTHONPATH="{repo_root}""" + """:%PYTHONPATH%" """
303
- # powershell equivalent
304
- export_line = f"""$env:PYTHONPATH="{repo_root}""" + """:$env:PYTHONPATH" """
305
- else:
306
- raise NotImplementedError(f"Platform {platform.system()} not supported.")
307
- command = export_line + "\n" + command
170
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import add_to_path
308
171
 
309
- # program_path = os.environ.get("op_script", None)
310
- # program_path = PathExtended(program_path) if program_path is not None else PROGRAM_PATH
172
+ export_line = add_to_path(path_variable="PYTHONPATH", directory=str(repo_root))
173
+ command = export_line + "\n" + command
311
174
  if args.loop:
175
+ import platform
312
176
  if platform.system() in ["Linux", "Darwin"]:
313
177
  command = command + "\nsleep 0.5"
314
178
  elif platform.system() == "Windows":
315
- # command = command + "timeout 0.5\n"
316
- # pwsh equivalent
317
179
  command = "$ErrorActionPreference = 'SilentlyContinue';\n" + command + "\nStart-Sleep -Seconds 0.5"
318
180
  else:
319
181
  raise NotImplementedError(f"Platform {platform.system()} not supported.")
320
- # command = command + f"\n. {program_path}"
321
- console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {command}: "), style="bold red")
322
- # program_path.parent.mkdir(parents=True, exist_ok=True)
323
- # program_path.write_text(command, encoding="utf-8")
324
- import subprocess
325
182
 
326
- subprocess.run(command, shell=True, check=True)
183
+ from machineconfig.utils.code import exit_then_run_shell_script
184
+
185
+ exit_then_run_shell_script(script=command, strict=False)
327
186
 
328
187
 
329
- def main(
188
+ def fire(
330
189
  ctx: typer.Context,
331
190
  path: Annotated[str, typer.Argument(help="Path to the Python file to run")] = ".",
332
191
  function: Annotated[Optional[str], typer.Argument(help="Function to run")] = None,
@@ -334,28 +193,30 @@ def main(
334
193
  cmd: Annotated[bool, typer.Option("--cmd", "-B", help="Create a cmd fire command to launch the job asynchronously")] = False,
335
194
  interactive: Annotated[bool, typer.Option("--interactive", "-i", help="Whether to run the job interactively using IPython")] = False,
336
195
  debug: Annotated[bool, typer.Option("--debug", "-d", help="Enable debug mode")] = False,
337
- choose_function: Annotated[bool, typer.Option("--choose_function", "-c", help="Choose function interactively")] = False,
196
+ choose_function: Annotated[bool, typer.Option("--choose-function", "-c", help="Choose function interactively")] = False,
338
197
  loop: Annotated[bool, typer.Option("--loop", "-l", help="Infinite recursion (runs again after completion/interruption)")] = False,
339
198
  jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
340
- submit_to_cloud: Annotated[bool, typer.Option("--submit_to_cloud", "-C", help="Submit to cloud compute")] = False,
341
- remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
199
+ marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
342
200
  module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
201
+ optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
202
+ zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
203
+ submit_to_cloud: Annotated[bool, typer.Option("--submit-to-cloud", "-C", help="Submit to cloud compute")] = False,
204
+ remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
343
205
  streamlit: Annotated[bool, typer.Option("--streamlit", "-S", help="Run as streamlit app")] = False,
344
206
  environment: Annotated[str, typer.Option("--environment", "-E", help="Choose ip, localhost, hostname or arbitrary url")] = "",
345
- holdDirectory: Annotated[bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")] = False,
207
+ holdDirectory: Annotated[
208
+ bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")
209
+ ] = False,
346
210
  PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
347
- git_pull: Annotated[bool, typer.Option("--git_pull", "-g", help="Start by pulling the git repo")] = False,
348
- optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
349
- Nprocess: Annotated[int, typer.Option("--Nprocess", "-p", help="Number of processes to use")] = 1,
350
- zellij_tab: Annotated[Optional[str], typer.Option("--zellij_tab", "-z", help="Open in a new zellij tab")] = None,
211
+ git_pull: Annotated[bool, typer.Option("--git-pull", "-g", help="Start by pulling the git repo")] = False,
351
212
  watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
352
- layout: Annotated[bool, typer.Option("--layout", "-L", help="Use layout configuration (Zellij Or WindowsTerminal)")] = False,
353
213
  ) -> None:
354
214
  """Main function to process fire jobs arguments."""
355
-
215
+
356
216
  # Get Fire arguments from context
217
+ from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import FireJobArgs, parse_fire_args_from_context
357
218
  fire_args = parse_fire_args_from_context(ctx)
358
-
219
+
359
220
  args = FireJobArgs(
360
221
  path=path,
361
222
  function=function,
@@ -366,6 +227,7 @@ def main(
366
227
  choose_function=choose_function,
367
228
  loop=loop,
368
229
  jupyter=jupyter,
230
+ marimo=marimo,
369
231
  submit_to_cloud=submit_to_cloud,
370
232
  remote=remote,
371
233
  module=module,
@@ -375,10 +237,8 @@ def main(
375
237
  PathExport=PathExport,
376
238
  git_pull=git_pull,
377
239
  optimized=optimized,
378
- Nprocess=Nprocess,
379
240
  zellij_tab=zellij_tab,
380
241
  watch=watch,
381
- layout=layout,
382
242
  )
383
243
  try:
384
244
  route(args, fire_args)
@@ -388,21 +248,23 @@ def main(
388
248
  except Exception as e:
389
249
  # For other exceptions, print clean error message and exit
390
250
  import sys
251
+
391
252
  print(f"❌ Error: {e}", file=sys.stderr)
392
253
  sys.exit(1)
393
254
 
394
255
 
395
- def main_from_parser():
396
- # from trogon.typer import init_tui
397
- # from trogon.typer import init_tui
256
+ def get_app():
398
257
  from typer import Typer
258
+
399
259
  app = Typer(add_completion=False)
400
- app.command(context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(main)
401
- # typer.run(main)
402
- # init_tui(app)
260
+ app.command(context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
261
+ return app
262
+
263
+
264
+ def main():
265
+ app = get_app()
403
266
  app()
404
267
 
405
268
 
406
269
  if __name__ == "__main__":
407
- # options, func_args = parse_pyfile(file_path="C:/Users/aalsaf01/code/machineconfig/myresources/crocodile/core.py")
408
- main_from_parser()
270
+ from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import FireJobArgs