machineconfig 3.7__py3-none-any.whl → 7.69__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 (465) 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 +7 -21
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +128 -0
  34. machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
  36. machineconfig/jobs/installer/custom_dev/brave.py +82 -0
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +63 -0
  40. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
  41. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  42. machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
  43. machineconfig/jobs/installer/custom_dev/goes.py +68 -0
  44. machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
  45. machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
  46. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
  47. machineconfig/jobs/installer/custom_dev/redis.py +88 -0
  48. machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
  49. machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
  50. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
  51. machineconfig/jobs/installer/installer_data.json +3440 -0
  52. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
  53. machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
  54. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
  55. machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
  56. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
  57. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  58. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
  59. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  60. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  61. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  62. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
  63. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
  64. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
  65. machineconfig/jobs/installer/package_groups.py +255 -0
  66. machineconfig/logger.py +0 -1
  67. machineconfig/profile/backup.toml +49 -0
  68. machineconfig/profile/bash_shell_profiles.md +11 -0
  69. machineconfig/profile/create_helper.py +74 -0
  70. machineconfig/profile/create_links.py +288 -0
  71. machineconfig/profile/create_links_export.py +100 -0
  72. machineconfig/profile/create_shell_profile.py +136 -0
  73. machineconfig/profile/mapper.toml +258 -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/{mcinit.py → initai.py} +3 -38
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
  89. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  90. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  91. machineconfig/scripts/python/cloud.py +29 -0
  92. machineconfig/scripts/python/croshell.py +129 -198
  93. machineconfig/scripts/python/define.py +31 -0
  94. machineconfig/scripts/python/devops.py +45 -131
  95. machineconfig/scripts/python/devops_navigator.py +6 -0
  96. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  97. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  98. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  99. machineconfig/scripts/python/fire_jobs.py +166 -235
  100. machineconfig/scripts/python/ftpx.py +164 -100
  101. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  102. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  109. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
  117. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
  121. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
  122. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  123. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  124. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  125. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  126. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  127. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  129. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  130. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  131. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  132. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  133. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  134. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  136. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  137. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  138. machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
  140. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  142. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  143. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  145. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  146. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  147. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  148. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  149. machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
  150. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  151. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  152. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  153. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  154. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  155. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  156. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  157. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  158. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  159. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  160. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  161. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  162. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  163. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  164. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  165. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  166. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  167. machineconfig/scripts/python/interactive.py +187 -0
  168. machineconfig/scripts/python/mcfg_entry.py +63 -0
  169. machineconfig/scripts/python/msearch.py +40 -0
  170. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  171. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  172. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  173. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  174. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  175. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  176. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  177. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  178. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  179. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
  180. machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
  181. machineconfig/scripts/python/sessions.py +167 -0
  182. machineconfig/scripts/python/terminal.py +127 -0
  183. machineconfig/scripts/python/utils.py +66 -0
  184. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  185. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  186. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  187. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  188. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  189. machineconfig/settings/broot/br.sh +0 -4
  190. machineconfig/settings/broot/conf.toml +1 -1
  191. machineconfig/settings/helix/config.toml +16 -0
  192. machineconfig/settings/helix/languages.toml +13 -4
  193. machineconfig/settings/helix/yazi-picker.sh +12 -0
  194. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  195. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  196. machineconfig/settings/lf/linux/lfrc +10 -12
  197. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  198. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  199. machineconfig/settings/lf/windows/lfrc +18 -38
  200. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  201. machineconfig/settings/linters/.ruff.toml +1 -1
  202. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  203. machineconfig/settings/marimo/marimo.toml +80 -0
  204. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  205. machineconfig/settings/pistol/pistol.conf +1 -1
  206. machineconfig/settings/shells/bash/init.sh +55 -31
  207. machineconfig/settings/shells/nushell/config.nu +1 -34
  208. machineconfig/settings/shells/nushell/init.nu +127 -0
  209. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  210. machineconfig/settings/shells/starship/starship.toml +16 -0
  211. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  212. machineconfig/settings/shells/wt/settings.json +32 -17
  213. machineconfig/settings/shells/zsh/init.sh +89 -0
  214. machineconfig/settings/svim/linux/init.toml +0 -4
  215. machineconfig/settings/svim/windows/init.toml +0 -3
  216. machineconfig/settings/yazi/init.lua +57 -0
  217. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  218. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  219. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  220. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  221. machineconfig/settings/yazi/yazi.toml +14 -1
  222. machineconfig/setup_linux/__init__.py +10 -0
  223. machineconfig/setup_linux/apps_desktop.sh +89 -0
  224. machineconfig/setup_linux/apps_gui.sh +64 -0
  225. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  226. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  227. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  228. machineconfig/setup_linux/uv.sh +15 -0
  229. machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
  230. machineconfig/setup_mac/__init__.py +16 -0
  231. machineconfig/setup_mac/apps_gui.sh +248 -0
  232. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  233. machineconfig/setup_mac/uv.sh +36 -0
  234. machineconfig/setup_windows/__init__.py +8 -0
  235. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  236. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  237. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  238. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  239. machineconfig/setup_windows/uv.ps1 +17 -0
  240. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
  241. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  242. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  243. machineconfig/utils/accessories.py +52 -12
  244. machineconfig/utils/cloud/onedrive/README.md +139 -0
  245. machineconfig/utils/code.py +140 -93
  246. machineconfig/utils/files/art/fat_croco.txt +10 -0
  247. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  248. machineconfig/utils/files/art/happy_croco.txt +22 -0
  249. machineconfig/utils/files/art/water_croco.txt +11 -0
  250. machineconfig/utils/files/ascii_art.py +118 -0
  251. machineconfig/utils/files/dbms.py +257 -0
  252. machineconfig/utils/files/headers.py +68 -0
  253. machineconfig/utils/files/ouch/decompress.py +45 -0
  254. machineconfig/utils/files/read.py +95 -0
  255. machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
  256. machineconfig/utils/installer_utils/install_from_url.py +180 -0
  257. machineconfig/utils/installer_utils/installer_class.py +239 -316
  258. machineconfig/utils/installer_utils/installer_cli.py +186 -0
  259. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
  260. machineconfig/utils/installer_utils/installer_runner.py +191 -0
  261. machineconfig/utils/io.py +77 -24
  262. machineconfig/utils/links.py +309 -100
  263. machineconfig/utils/meta.py +255 -0
  264. machineconfig/utils/notifications.py +1 -1
  265. machineconfig/utils/options.py +19 -47
  266. machineconfig/utils/path_extended.py +111 -121
  267. machineconfig/utils/path_helper.py +75 -22
  268. machineconfig/utils/procs.py +50 -74
  269. machineconfig/utils/scheduler.py +94 -97
  270. machineconfig/utils/scheduling.py +0 -3
  271. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  272. machineconfig/utils/schemas/installer/installer_types.py +28 -6
  273. machineconfig/utils/schemas/layouts/layout_types.py +34 -1
  274. machineconfig/utils/source_of_truth.py +3 -6
  275. machineconfig/utils/ssh.py +742 -254
  276. machineconfig/utils/ssh_utils/utils.py +0 -0
  277. machineconfig/utils/terminal.py +3 -140
  278. machineconfig/utils/tst.py +20 -0
  279. machineconfig/utils/upgrade_packages.py +109 -28
  280. machineconfig/utils/ve.py +13 -5
  281. machineconfig-7.69.dist-info/METADATA +124 -0
  282. machineconfig-7.69.dist-info/RECORD +454 -0
  283. machineconfig-7.69.dist-info/entry_points.txt +15 -0
  284. machineconfig/cluster/templates/cli_click.py +0 -102
  285. machineconfig/cluster/templates/cli_gooey.py +0 -115
  286. machineconfig/cluster/templates/utils.py +0 -51
  287. machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
  288. machineconfig/jobs/python/create_bootable_media.py +0 -16
  289. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  290. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  291. machineconfig/jobs/python/tasks.py +0 -3
  292. machineconfig/jobs/python/vscode/api.py +0 -48
  293. machineconfig/jobs/python/vscode/link_ve.py +0 -63
  294. machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
  295. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  296. machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
  297. machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
  298. machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
  299. machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
  300. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
  301. machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
  302. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
  303. machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
  304. machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
  305. machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
  306. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
  307. machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
  308. machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
  309. machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
  310. machineconfig/jobs/python_custom_installers/docker.py +0 -74
  311. machineconfig/jobs/python_custom_installers/gh.py +0 -97
  312. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
  313. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
  314. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
  315. machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
  316. machineconfig/jobs/python_generic_installers/config.json +0 -603
  317. machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
  318. machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
  319. machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
  320. machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
  321. machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
  322. machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
  323. machineconfig/jobs/python_linux_installers/config.json +0 -145
  324. machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
  325. machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
  326. machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
  327. machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
  328. machineconfig/jobs/python_windows_installers/config.json +0 -82
  329. machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
  330. machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
  331. machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
  332. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  333. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  334. machineconfig/jobs/windows/startup_file.cmd +0 -2
  335. machineconfig/profile/create.py +0 -169
  336. machineconfig/profile/shell.py +0 -176
  337. machineconfig/scripts/cloud/init.sh +0 -119
  338. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  339. machineconfig/scripts/linux/cloud_copy +0 -2
  340. machineconfig/scripts/linux/cloud_mount +0 -2
  341. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  342. machineconfig/scripts/linux/cloud_sync +0 -2
  343. machineconfig/scripts/linux/croshell +0 -3
  344. machineconfig/scripts/linux/devops +0 -2
  345. machineconfig/scripts/linux/fire +0 -2
  346. machineconfig/scripts/linux/fire_agents +0 -2
  347. machineconfig/scripts/linux/ftpx +0 -2
  348. machineconfig/scripts/linux/fzf2g +0 -21
  349. machineconfig/scripts/linux/fzffg +0 -25
  350. machineconfig/scripts/linux/gh_models +0 -2
  351. machineconfig/scripts/linux/kill_process +0 -2
  352. machineconfig/scripts/linux/mcinit +0 -2
  353. machineconfig/scripts/linux/programs +0 -21
  354. machineconfig/scripts/linux/repos +0 -2
  355. machineconfig/scripts/linux/scheduler +0 -2
  356. machineconfig/scripts/linux/share_smb +0 -1
  357. machineconfig/scripts/linux/start_slidev +0 -2
  358. machineconfig/scripts/linux/start_terminals +0 -3
  359. machineconfig/scripts/linux/warp-cli.sh +0 -122
  360. machineconfig/scripts/linux/wifi_conn +0 -2
  361. machineconfig/scripts/linux/z_ls +0 -104
  362. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  363. machineconfig/scripts/python/archive/im2text.py +0 -34
  364. machineconfig/scripts/python/archive/tmate_conn.py +0 -41
  365. machineconfig/scripts/python/archive/tmate_start.py +0 -44
  366. machineconfig/scripts/python/cloud_repo_sync.py +0 -192
  367. machineconfig/scripts/python/cloud_sync.py +0 -85
  368. machineconfig/scripts/python/devops_devapps_install.py +0 -202
  369. machineconfig/scripts/python/devops_update_repos.py +0 -180
  370. machineconfig/scripts/python/dotfile.py +0 -52
  371. machineconfig/scripts/python/fire_agents.py +0 -176
  372. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  373. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  374. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
  375. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
  376. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  377. machineconfig/scripts/python/gh_models.py +0 -104
  378. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  379. machineconfig/scripts/python/repos.py +0 -160
  380. machineconfig/scripts/python/snapshot.py +0 -25
  381. machineconfig/scripts/python/start_terminals.py +0 -121
  382. machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
  383. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  384. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  385. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  386. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  387. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  388. machineconfig/scripts/windows/croshell.ps1 +0 -1
  389. machineconfig/scripts/windows/devops.ps1 +0 -1
  390. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  391. machineconfig/scripts/windows/fire.ps1 +0 -1
  392. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  393. machineconfig/scripts/windows/gpt.ps1 +0 -1
  394. machineconfig/scripts/windows/grep.ps1 +0 -2
  395. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  396. machineconfig/scripts/windows/mcinit.ps1 +0 -1
  397. machineconfig/scripts/windows/nano.ps1 +0 -3
  398. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  399. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  400. machineconfig/scripts/windows/repos.ps1 +0 -1
  401. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  402. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  403. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  404. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  405. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  406. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  407. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  408. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  409. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  410. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  411. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  412. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  413. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  414. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  415. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  416. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  417. machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
  418. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  419. machineconfig/utils/installer.py +0 -255
  420. machineconfig-3.7.dist-info/METADATA +0 -165
  421. machineconfig-3.7.dist-info/RECORD +0 -432
  422. machineconfig-3.7.dist-info/entry_points.txt +0 -18
  423. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  424. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  425. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  426. machineconfig/jobs/{python → installer}/__init__.py +0 -0
  427. machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
  428. machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
  429. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  430. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  431. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  432. machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
  433. machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  434. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  435. machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  437. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  438. /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
  439. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  440. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  441. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  442. /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
  443. /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
  444. /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  445. /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
  446. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  447. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  448. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  449. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  450. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  451. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
  452. /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
  453. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  454. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  455. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  456. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  457. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  458. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  459. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  460. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  461. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  462. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  463. /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
  464. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
  465. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
@@ -1,143 +0,0 @@
1
- from machineconfig.utils.accessories import randstr
2
-
3
- import random
4
- import shlex
5
- from pathlib import Path
6
- from typing import Literal, TypeAlias
7
-
8
-
9
- AGENTS: TypeAlias = Literal[
10
- "cursor-agent", "gemini", "crush", "q", "onlyPrepPromptFiles"
11
- # warp terminal
12
- ]
13
- AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
14
-
15
-
16
- def get_gemini_api_keys() -> list[str]:
17
- from machineconfig.utils.io import read_ini
18
-
19
- config = read_ini(Path.home().joinpath("dotfiles/creds/llm/gemini/api_keys.ini"))
20
- res: list[str] = []
21
- for a_section_name in list(config.sections()):
22
- a_section = config[a_section_name]
23
- if "api_key" in a_section:
24
- api_key = a_section["api_key"].strip()
25
- if api_key:
26
- res.append(api_key)
27
- print(f"Found {len(res)} Gemini API keys configured.")
28
- return res
29
-
30
-
31
- def prep_agent_launch(repo_root: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool, agent: AGENTS, *, job_name: str) -> Path:
32
- session_root = repo_root / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
33
- session_root.mkdir(parents=True, exist_ok=True)
34
- prompt_folder = session_root / "prompts"
35
- prompt_folder.mkdir(parents=True, exist_ok=True)
36
-
37
- all_materials_scripts: list[Path] = []
38
- for idx, a_prompt_material in enumerate(prompts_material):
39
- prompt_root = prompt_folder / f"agent_{idx}"
40
- prompt_root.mkdir(parents=True, exist_ok=True)
41
- prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
42
- if keep_material_in_separate_file:
43
- prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
44
- prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
45
- prompt_path.write_text(prompt_prefix + f"""\nPlease only look @ {prompt_material_path}. You don't need to do any other work beside the content of this material file.""", encoding="utf-8")
46
- all_materials_scripts.append(prompt_material_path)
47
- else:
48
- prompt_material_path = prompt_path
49
- prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
50
-
51
- agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
52
- random_sleep_time = random.uniform(0, 5)
53
- cmd_prefix = f"""
54
- #!/usr/bin/env bash
55
-
56
- # AGENT-{idx}-LAUNCH-SCRIPT
57
- # Auto-generated by fire_agents.py
58
-
59
- export FIRE_AGENTS_AGENT_NAME="{agent}"
60
- export FIRE_AGENTS_JOB_NAME="{job_name}"
61
- export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
62
- export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
63
- export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
64
-
65
- echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
66
- sleep {random_sleep_time:.2f}
67
- echo "Launching agent {agent} with prompt from {prompt_path}"
68
- echo "Launching agent {agent} with command from {agent_cmd_launch_path}"
69
- echo "--------START OF AGENT OUTPUT--------"
70
- sleep 0.1
71
-
72
- """
73
- match agent:
74
- case "gemini":
75
- model = "gemini-2.5-pro"
76
- # model = "gemini-2.5-flash-lite"
77
- # model = None # auto-select
78
- # if model is None:
79
- # model_arg = ""
80
- # else:
81
- model_arg = f"--model {shlex.quote(model)}"
82
- # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
83
- safe_path = shlex.quote(str(prompt_path))
84
- api_keys = get_gemini_api_keys()
85
- api_key = api_keys[idx % len(api_keys)] if api_keys else ""
86
- # Export the environment variable so it's available to subshells
87
- cmd = f"""
88
- export GEMINI_API_KEY={shlex.quote(api_key)}
89
- echo "Using Gemini API key $GEMINI_API_KEY"
90
- bash -lc 'cat {safe_path} | gemini {model_arg} --yolo --prompt'
91
- """
92
- case "cursor-agent":
93
- # As originally implemented
94
- cmd = f"""
95
-
96
- cursor-agent --print --output-format text < {prompt_path}
97
-
98
- """
99
- case "crush":
100
- cmd = f"""
101
- crush run {prompt_path}
102
- """
103
- case "q":
104
- cmd = f"""
105
- q chat --no-interactive --trust-all-tools {prompt_path}
106
- """
107
- case "onlyPrepPromptFiles":
108
- cmd = f"""
109
- echo "Prepared prompt file at {prompt_path}"
110
- """
111
- case _:
112
- raise ValueError(f"Unsupported agent type: {agent}")
113
- cmd_postfix = """
114
- sleep 0.1
115
- echo "---------END OF AGENT OUTPUT---------"
116
- """
117
- agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
118
-
119
- # print(f"Launching a template with #{len(tab_config)} agents")
120
- if len(all_materials_scripts) > 0:
121
- all_materials_list_path = session_root / "all_materials_redistributed.txt"
122
- all_materials_list_path.write_text("\n".join(str(p) for p in all_materials_scripts), encoding="utf-8")
123
- print(f"All prompt materials listed @ {all_materials_list_path}")
124
- return session_root
125
-
126
-
127
- def get_agents_launch_layout(session_root: Path):
128
- from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
129
-
130
- tab_config: list[TabConfig] = []
131
- prompt_root = session_root / "prompts"
132
- all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
133
- launch_agents_squentially = ""
134
- for a_prompt_dir in all_dirs_under_prompts:
135
- idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
136
- agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
137
- fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
138
- tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
139
- launch_agents_squentially += f". {shlex.quote(str(agent_cmd_path))}\n"
140
- layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
141
- (session_root / "launch_all_agents_sequentially.sh").write_text(launch_agents_squentially, encoding="utf-8")
142
- layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
143
- return layouts_file
@@ -1,50 +0,0 @@
1
- from typing import Literal, TypeAlias
2
- from math import ceil
3
- from pathlib import Path
4
-
5
-
6
- SPLITTING_STRATEGY: TypeAlias = Literal[
7
- "agent_cap", # User decides number of agents, rows/tasks determined automatically
8
- "task_rows", # User decides number of rows/tasks, number of agents determined automatically
9
- ]
10
- DEFAULT_AGENT_CAP = 6
11
-
12
-
13
- def chunk_prompts(prompt_material_path: Path, strategy: SPLITTING_STRATEGY, joiner: str, *, agent_cap: int | None, task_rows: int | None) -> list[str]:
14
- """Chunk prompts based on splitting strategy.
15
-
16
- Args:
17
- prompts: List of prompts to chunk
18
- strategy: Either 'agent_cap' or 'task_rows'
19
- agent_cap: Maximum number of agents (used with 'agent_cap' strategy)
20
- task_rows: Number of rows/tasks per agent (used with 'task_rows' strategy)
21
- """
22
- prompts = [p for p in prompt_material_path.read_text(encoding="utf-8", errors="ignore").split(joiner) if p.strip() != ""] # drop blank entries
23
-
24
- if strategy == "agent_cap":
25
- if agent_cap is None:
26
- raise ValueError("agent_cap must be provided when using 'agent_cap' strategy")
27
-
28
- if len(prompts) <= agent_cap:
29
- return prompts
30
-
31
- print(f"Chunking {len(prompts)} prompts into groups for up to {agent_cap} agents because it exceeds the cap.")
32
- chunk_size = ceil(len(prompts) / agent_cap)
33
- grouped: list[str] = []
34
- for i in range(0, len(prompts), chunk_size):
35
- grouped.append(joiner.join(prompts[i : i + chunk_size]))
36
- return grouped
37
-
38
- elif strategy == "task_rows":
39
- if task_rows is None:
40
- raise ValueError("task_rows must be provided when using 'task_rows' strategy")
41
- if task_rows >= len(prompts):
42
- return prompts
43
- print(f"Chunking {len(prompts)} prompts into groups of {task_rows} rows/tasks each.")
44
- grouped: list[str] = []
45
- for i in range(0, len(prompts), task_rows):
46
- grouped.append(joiner.join(prompts[i : i + task_rows]))
47
- return grouped
48
-
49
- else:
50
- raise ValueError(f"Unknown splitting strategy: {strategy}")
@@ -1,84 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Optional
3
- import argparse
4
-
5
-
6
- @dataclass
7
- class FireJobArgs:
8
- """Type-safe dataclass for fire_jobs command line arguments."""
9
-
10
- path: str = "."
11
- function: Optional[str] = None
12
- ve: str = ""
13
- cmd: bool = False
14
- interactive: bool = False
15
- debug: bool = False
16
- choose_function: bool = False
17
- loop: bool = False
18
- jupyter: bool = False
19
- submit_to_cloud: bool = False
20
- remote: bool = False
21
- module: bool = False
22
- streamlit: bool = False
23
- environment: str = ""
24
- holdDirectory: bool = False
25
- PathExport: bool = False
26
- git_pull: bool = False
27
- optimized: bool = False
28
- Nprocess: int = 1
29
- zellij_tab: Optional[str] = None
30
- watch: bool = False
31
- kw: Optional[list[str]] = None
32
- layout: bool = False
33
-
34
-
35
- def get_args() -> FireJobArgs:
36
- parser = argparse.ArgumentParser()
37
- parser.add_argument("path", nargs="?", type=str, help="The directory containing the jobs", default=".")
38
- parser.add_argument("function", nargs="?", type=str, help="Fuction to run", default=None)
39
- parser.add_argument("--ve", "-v", type=str, help="virtual enviroment name", default="")
40
- parser.add_argument("--cmd", "-B", action="store_true", help="Create a cmd fire command to launch the the job asynchronously.")
41
- parser.add_argument("--interactive", "-i", action="store_true", help="Whether to run the job interactively using IPython")
42
- parser.add_argument("--debug", "-d", action="store_true", help="debug")
43
- parser.add_argument("--choose_function", "-c", action="store_true", help="debug")
44
- parser.add_argument("--loop", "-l", action="store_true", help="infinite recusion (runs again after completion/interruption)")
45
- parser.add_argument("--jupyter", "-j", action="store_true", help="open in a jupyter notebook")
46
- parser.add_argument("--submit_to_cloud", "-C", action="store_true", help="submit to cloud compute")
47
- parser.add_argument("--remote", "-r", action="store_true", help="launch on a remote machine")
48
- parser.add_argument("--module", "-m", action="store_true", help="launch the main file")
49
- parser.add_argument("--streamlit", "-S", action="store_true", help="run as streamlit app")
50
- parser.add_argument("--environment", "-E", type=str, help="Choose ip, localhost, hostname or arbitrary url", default="")
51
- parser.add_argument("--holdDirectory", "-D", action="store_true", help="hold current directory and avoid cd'ing to the script directory")
52
- parser.add_argument("--PathExport", "-P", action="store_true", help="augment the PYTHONPATH with repo root.")
53
- parser.add_argument("--git_pull", "-g", action="store_true", help="Start by pulling the git repo")
54
- parser.add_argument("--optimized", "-O", action="store_true", help="Run the optimized version of the function")
55
- parser.add_argument("--Nprocess", "-p", type=int, help="Number of processes to use", default=1)
56
- parser.add_argument("--zellij_tab", "-z", type=str, dest="zellij_tab", help="open in a new zellij tab")
57
- parser.add_argument("--watch", "-w", action="store_true", help="watch the file for changes")
58
- parser.add_argument("--kw", nargs="*", default=None, help="keyword arguments to pass to the function in the form of k1 v1 k2 v2 ... (meaning k1=v1, k2=v2, etc)")
59
- parser.add_argument("--layout", "-L", action="store_true", help="use layout configuration (Zellij Or WindowsTerminal)")
60
-
61
- try:
62
- args_raw = parser.parse_args()
63
- except Exception as ex:
64
- print(f"❌ Failed to parse arguments: {ex}")
65
- parser.print_help()
66
- raise ex
67
- args = FireJobArgs(**vars(args_raw))
68
- return args
69
-
70
-
71
- def extract_kwargs(args: FireJobArgs) -> dict[str, object]:
72
- str2obj = {"True": True, "False": False, "None": None}
73
- if args.kw is not None:
74
- assert len(args.kw) % 2 == 0, f"args.kw must be a list of even length. Got {len(args.kw)}"
75
- kwargs = dict(zip(args.kw[::2], args.kw[1::2]))
76
- kwargs: dict[str, object]
77
- for key, value in kwargs.items():
78
- if value in str2obj:
79
- kwargs[key] = str2obj[str(value)]
80
- if args.function is None: # if user passed arguments and forgot to pass function, then assume they want to run the main function.
81
- args.choose_function = True
82
- else:
83
- kwargs = {}
84
- return kwargs
@@ -1,66 +0,0 @@
1
- from pathlib import Path
2
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, LayoutsFile
3
- from typing import Optional, TYPE_CHECKING
4
- from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
5
- from machineconfig.utils.options import choose_from_options
6
- from machineconfig.utils.path_helper import match_file_name, sanitize_path
7
- from machineconfig.utils.path_extended import PathExtended as PathExtended
8
-
9
- if TYPE_CHECKING:
10
- from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs
11
-
12
-
13
- def select_layout(layouts_json_file: Path, layout_name: Optional[str]):
14
- import json
15
-
16
- layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
17
- if len(layout_file["layouts"]) == 0:
18
- raise ValueError(f"No layouts found in {layouts_json_file}")
19
- if layout_name is None:
20
- options = [layout["layoutName"] for layout in layout_file["layouts"]]
21
- from machineconfig.utils.options import choose_from_options
22
-
23
- layout_name = choose_from_options(multi=False, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
24
- print(f"Selected layout: {layout_name}")
25
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layout_name), None)
26
- if layout_chosen is None:
27
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == layout_name.lower()), None)
28
- if layout_chosen is None:
29
- available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
30
- raise ValueError(f"Layout '{layout_name}' not found. Available layouts: {available_layouts}")
31
- return layout_chosen
32
-
33
-
34
- def launch_layout(layout_config: LayoutConfig) -> Optional[Exception]:
35
- import platform
36
-
37
- if platform.system() == "Linux" or platform.system() == "Darwin":
38
- print("🧑‍💻 Launching layout using Zellij terminal multiplexer...")
39
- from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
40
-
41
- run_zellij_layout(layout_config=layout_config)
42
- elif platform.system() == "Windows":
43
- print("🧑‍💻 Launching layout using Windows Terminal...")
44
- from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
45
-
46
- run_wt_layout(layout_config=layout_config)
47
- else:
48
- print(f"❌ Unsupported platform: {platform.system()}")
49
- return None
50
-
51
-
52
- def handle_layout_args(args: "FireJobArgs") -> None:
53
- # args.function = args.path
54
- # args.path = "layout.json"
55
- path_obj = sanitize_path(args.path)
56
- if not path_obj.exists():
57
- choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes={".json"})
58
- elif path_obj.is_dir():
59
- print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
60
- files = search_for_files_of_interest(path_obj)
61
- print(f"🔍 Got #{len(files)} results.")
62
- choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
63
- choice_file = PathExtended(choice_file)
64
- else:
65
- choice_file = path_obj
66
- launch_layout(layout_config=select_layout(layouts_json_file=choice_file, layout_name=args.function))
@@ -1,15 +0,0 @@
1
- from pathlib import Path
2
-
3
-
4
- def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
5
- _ = wd1, wd2
6
- lines = [
7
- """ zellij action new-tab --name gitdiff""",
8
- """zellij action new-pane --direction down --name local --cwd ./data """,
9
- """zellij action write-chars "cd '{wd1}'; git status" """,
10
- """zellij action move-focus up; zellij action close-pane """,
11
- """zellij action new-pane --direction down --name remote --cwd code """,
12
- """zellij action write-chars "cd '{wd2}' """,
13
- """git status" """,
14
- ]
15
- return "; ".join(lines)
@@ -1,104 +0,0 @@
1
- # # as per https://github.com/marketplace/models/azure-openai/o1-preview
2
- # from openai import OpenAI
3
- # from machineconfig.utils.path_reduced import P as PathExtended
4
- # from machineconfig.utils.utils2 import read_ini
5
- # from rich import print as rprint
6
- # from rich.panel import Panel
7
- # from typing import Any
8
-
9
-
10
- # gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
11
- # endpoint = "https://models.inference.ai.azure.com"
12
- # model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
13
- # client__ = OpenAI(
14
- # base_url=endpoint,
15
- # api_key=gh_token,
16
- # )
17
-
18
-
19
- # def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
20
- # print(f"""
21
- # ┌────────────────────────────────────────────────────────────────
22
- # │ 🤖 Querying Model: {model_name}
23
- # │ Sending request to API...
24
- # └────────────────────────────────────────────────────────────────""")
25
- # try:
26
- # response = client.chat.completions.create(
27
- # messages=messages,
28
- # model=model_name
29
- # )
30
- # return response.choices
31
- # except Exception as e:
32
- # print(f"""
33
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
34
- # ┃ ❌ API Error with model {model_name}
35
- # ┃ {str(e)}
36
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
37
- # return None
38
-
39
-
40
- # def interactive_chat():
41
- # conversation_history = []
42
- # model_index = 0
43
- # model_name = model_name_preferences[model_index]
44
-
45
- # print("""
46
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47
- # ┃ 🚀 Interactive Chat Started
48
- # ┃ Type your message and press Enter to chat
49
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
50
-
51
- # while True:
52
- # header = f" 🤖 Using Model: {model_name} "
53
- # print(f"\n{header.center(80, '═')}\n")
54
-
55
- # while True:
56
- # try:
57
- # user_input = input("💬 You: ")
58
- # conversation_history.append({"role": "user", "content": user_input})
59
-
60
- # while True:
61
- # choices = get_response(client__, model_name, conversation_history)
62
- # if choices is None:
63
- # model_index += 1
64
- # model_name = model_name_preferences[model_index % len(model_name_preferences)]
65
- # print(f"""
66
- # ┌────────────────────────────────────────────────────────────────
67
- # │ 🔄 Model Switch
68
- # │ Now using: {model_name}
69
- # └────────────────────────────────────────────────────────────────""")
70
- # continue
71
- # else:
72
- # break
73
-
74
- # for a_choice in choices:
75
- # response_content = a_choice.message.content
76
- # print("\n" * 2)
77
- # try:
78
- # rprint(Panel(
79
- # f"{response_content}",
80
- # title=f"🤖 AI ({model_name})",
81
- # border_style="blue"
82
- # ))
83
- # except Exception:
84
- # # Fallback if rich formatting fails
85
- # print(f"""
86
- # ┌────────────────────────────────────────────────────────────────
87
- # │ 🤖 AI ({model_name}):
88
- # │
89
- # {response_content}
90
- # └────────────────────────────────────────────────────────────────""")
91
-
92
- # conversation_history.append({"role": "assistant", "content": response_content})
93
- # print("\n")
94
- # except KeyboardInterrupt:
95
- # print("""
96
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
97
- # ┃ 👋 Chat Session Ended
98
- # ┃ Thank you for using the interactive chat!
99
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
100
- # return
101
-
102
-
103
- # if __name__ == "__main__":
104
- # interactive_chat()
@@ -1,114 +0,0 @@
1
- from machineconfig.utils.path_extended import PathExtended as PathExtended
2
- from machineconfig.utils.terminal import Terminal
3
- from machineconfig.scripts.python.get_zellij_cmd import get_zellij_cmd
4
- from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
5
- from machineconfig.utils.io import read_ini
6
- from machineconfig.utils.code import write_shell_script_to_file
7
- import platform
8
- from rich.console import Console
9
- from rich.panel import Panel
10
-
11
- console = Console()
12
-
13
-
14
- def delete_remote_repo_copy_and_push_local(remote_repo: str, local_repo: str, cloud: str):
15
- console.print(Panel("🗑️ Deleting remote repo copy and pushing local copy", title="[bold blue]Repo Sync[/bold blue]", border_style="blue"))
16
- repo_sync_root = PathExtended(remote_repo).expanduser().absolute()
17
- repo_root_path = PathExtended(local_repo).expanduser().absolute()
18
- repo_sync_root.delete(sure=True)
19
- print("🧹 Removed temporary remote copy")
20
- from git.remote import Remote
21
- from git.repo import Repo
22
-
23
- try:
24
- Remote.remove(Repo(repo_root_path), "originEnc")
25
- console.print(Panel("🔗 Removed originEnc remote reference", border_style="blue"))
26
- except Exception:
27
- pass # type: ignore
28
- console.print(Panel("📈 Deleting remote repository copy and pushing local changes", width=150, border_style="blue"))
29
-
30
- repo_root_path.to_cloud(cloud=cloud, zip=True, encrypt=True, rel2home=True, os_specific=False)
31
-
32
- console.print(Panel("✅ Repository successfully pushed to cloud", title="[bold green]Repo Sync[/bold green]", border_style="green"))
33
-
34
-
35
- # import sys
36
- # import subprocess
37
-
38
-
39
- def get_wt_cmd(wd1: PathExtended, wd2: PathExtended) -> str:
40
- lines = [
41
- f"""wt --window 0 new-tab --profile pwsh --title "gitdiff" --tabColor `#3b04d1 --startingDirectory {wd1} ` --colorScheme "Solarized Dark" """,
42
- f"""split-pane --horizontal --profile pwsh --startingDirectory {wd2} --size 0.5 --colorScheme "Tango Dark" -- pwsh -Interactive """,
43
- ]
44
- return " `; ".join(lines)
45
-
46
-
47
- def inspect_repos(repo_local_root: str, repo_remote_root: str):
48
- console.print(Panel(f"📂 Local: {repo_local_root}\n📂 Remote: {repo_remote_root}", title="[bold blue]🔍 Inspecting Repositories[/bold blue]", border_style="blue"))
49
-
50
- if platform.system() == "Windows":
51
- program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
52
- write_shell_script_to_file(shell_script=program)
53
- return None
54
- elif platform.system() in ["Linux", "Darwin"]:
55
- program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
56
- write_shell_script_to_file(shell_script=program)
57
- return None
58
- else:
59
- raise NotImplementedError(f"Platform {platform.system()} not implemented.")
60
-
61
-
62
- def fetch_dotfiles():
63
- console.print(Panel("📁 Fetching Dotfiles", title="[bold blue]Dotfiles[/bold blue]", border_style="blue"))
64
-
65
- cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
66
- console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", width=150, border_style="yellow"))
67
-
68
- dotfiles_local = PathExtended.home().joinpath("dotfiles")
69
- CONFIG_PATH.joinpath("remote").mkdir(parents=True, exist_ok=True)
70
- dotfiles_remote = PathExtended(CONFIG_PATH).joinpath("remote", dotfiles_local.rel2home())
71
- remote_path = dotfiles_local.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
72
-
73
- console.print(Panel("📥 Downloading dotfiles from cloud...", width=150, border_style="blue"))
74
-
75
- dotfiles_remote.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=None)
76
-
77
- console.print(Panel("🗑️ Removing old dotfiles and replacing with cloud version...", width=150, border_style="blue"))
78
-
79
- dotfiles_local.delete(sure=True)
80
- dotfiles_remote.move(folder=PathExtended.home())
81
- script = f"""
82
- # rm -rf {dotfiles_local}
83
- # mv {dotfiles_remote} {dotfiles_local}
84
- """
85
- if platform.system() == "Linux":
86
- script += """
87
- sudo chmod 600 $HOME/.ssh/*
88
- sudo chmod 700 $HOME/.ssh
89
- sudo chmod +x $HOME/dotfiles/scripts/linux -R
90
- """
91
- shell_path = write_shell_script_to_file(shell_script=script)
92
- Terminal().run(f". {shell_path}", shell="bash").capture().print()
93
-
94
- console.print(Panel("✅ Dotfiles successfully fetched and installed", title="[bold green]Dotfiles[/bold green]", border_style="green"))
95
-
96
-
97
- def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool) -> bool:
98
- dotfiles_path = str(PathExtended.home().joinpath("dotfiles"))
99
- from git import Repo
100
-
101
- repo = Repo(path=dotfiles_path)
102
- last_commit = repo.head.commit
103
- dtm = last_commit.committed_datetime
104
- from datetime import datetime # make it tz unaware
105
-
106
- dtm = datetime(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, dtm.second)
107
- res = dtm > datetime.fromisoformat(commit_dtm)
108
- if res is False and update is True:
109
- console = Console()
110
- console.print(Panel(f"🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}", border_style="bold blue", expand=False))
111
- from machineconfig.scripts.python.cloud_repo_sync import main
112
-
113
- main(cloud=None, path=dotfiles_path)
114
- return res