machineconfig 5.15__py3-none-any.whl → 7.98__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.
Files changed (472) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/cloud_manager.py +1 -1
  3. machineconfig/cluster/remote/distribute.py +0 -1
  4. machineconfig/cluster/remote/file_manager.py +0 -2
  5. machineconfig/cluster/remote/script_execution.py +0 -1
  6. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +70 -210
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +52 -198
  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 +25 -170
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +16 -12
  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 -3
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/hx.py +76 -19
  34. machineconfig/jobs/installer/custom/yazi.py +119 -0
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  36. machineconfig/jobs/installer/custom_dev/brave.py +5 -9
  37. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  38. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  39. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  40. machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
  41. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +33 -28
  42. machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
  43. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  44. machineconfig/jobs/installer/custom_dev/winget.py +10 -14
  45. machineconfig/jobs/installer/installer_data.json +1487 -229
  46. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  47. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  48. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  49. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  50. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  51. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  52. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  53. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  54. machineconfig/jobs/installer/linux_scripts/q.sh +10 -6
  55. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  56. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  57. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  58. machineconfig/jobs/installer/package_groups.py +106 -177
  59. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  60. machineconfig/logger.py +0 -1
  61. machineconfig/profile/backup.toml +49 -0
  62. machineconfig/profile/bash_shell_profiles.md +11 -0
  63. machineconfig/profile/create_helper.py +62 -0
  64. machineconfig/profile/create_links.py +288 -0
  65. machineconfig/profile/create_links_export.py +100 -0
  66. machineconfig/profile/create_shell_profile.py +147 -0
  67. machineconfig/profile/mapper.toml +263 -0
  68. machineconfig/scripts/__init__.py +0 -4
  69. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  70. machineconfig/scripts/linux/wrap_mcfg +46 -0
  71. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  72. machineconfig/scripts/python/agents.py +123 -117
  73. machineconfig/scripts/python/ai/initai.py +3 -28
  74. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  75. machineconfig/scripts/python/ai/scripts/command_runner.sh +9 -0
  76. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  77. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  78. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  79. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  80. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  81. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  82. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  83. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +5 -1
  84. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  85. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  86. machineconfig/scripts/python/ai/solutions/generic.py +28 -5
  87. machineconfig/scripts/python/ai/utils/generate_files.py +348 -0
  88. machineconfig/scripts/python/ai/utils/vscode_tasks.py +37 -0
  89. machineconfig/scripts/python/cloud.py +29 -0
  90. machineconfig/scripts/python/croshell.py +137 -113
  91. machineconfig/scripts/python/devops.py +61 -101
  92. machineconfig/scripts/python/devops_navigator.py +6 -0
  93. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  94. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  95. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  96. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  97. machineconfig/scripts/python/fire_jobs.py +110 -150
  98. machineconfig/scripts/python/ftpx.py +51 -24
  99. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  100. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  101. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  102. machineconfig/scripts/python/helpers/run_py_script.py +79 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  109. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +126 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +29 -35
  117. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +8 -9
  121. machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
  122. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  123. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  124. machineconfig/scripts/python/helpers_devops/cli_nw.py +214 -0
  125. machineconfig/scripts/python/helpers_devops/cli_repos.py +215 -0
  126. machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
  127. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
  129. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_share_terminal.py} +45 -35
  130. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  131. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  132. machineconfig/scripts/python/helpers_devops/devops_status.py +499 -0
  133. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  134. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  136. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +3 -3
  137. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  138. machineconfig/scripts/python/helpers_fire_command/f.py +0 -0
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  140. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +121 -0
  142. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  143. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  145. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  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_network/__init__.py +0 -0
  154. machineconfig/scripts/python/helpers_network/address.py +132 -0
  155. machineconfig/scripts/python/{devops_add_identity.py → helpers_network/devops_add_identity.py} +0 -2
  156. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +153 -0
  157. machineconfig/scripts/{linux → python/helpers_network}/mount_nfs +0 -1
  158. machineconfig/scripts/python/{mount_nfs.py → helpers_network/mount_nfs.py} +3 -3
  159. machineconfig/scripts/{linux → python/helpers_network}/mount_nw_drive +1 -2
  160. machineconfig/scripts/python/{mount_ssh.py → helpers_network/mount_ssh.py} +3 -3
  161. machineconfig/scripts/python/{onetimeshare.py → helpers_network/onetimeshare.py} +0 -1
  162. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +391 -0
  163. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +338 -0
  164. machineconfig/scripts/python/{wifi_conn.py → helpers_network/wifi_conn.py} +1 -53
  165. machineconfig/scripts/python/{wsl_windows_transfer.py → helpers_network/wsl_windows_transfer.py} +5 -4
  166. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  167. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  168. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  169. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  170. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  171. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  172. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  173. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  174. machineconfig/scripts/python/{count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
  175. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  176. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  177. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  178. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +65 -0
  179. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  180. machineconfig/scripts/python/helpers_utils/path.py +185 -0
  181. machineconfig/scripts/python/interactive.py +64 -84
  182. machineconfig/scripts/python/mcfg_entry.py +58 -0
  183. machineconfig/scripts/python/msearch.py +71 -0
  184. machineconfig/scripts/python/sessions.py +119 -45
  185. machineconfig/scripts/python/terminal.py +133 -0
  186. machineconfig/scripts/python/utils.py +64 -0
  187. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  188. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  189. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  190. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  191. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  192. machineconfig/settings/broot/br.sh +0 -4
  193. machineconfig/settings/broot/conf.toml +1 -1
  194. machineconfig/settings/helix/config.toml +16 -0
  195. machineconfig/settings/helix/languages.toml +13 -4
  196. machineconfig/settings/helix/yazi-picker.sh +12 -0
  197. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  198. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  199. machineconfig/settings/lf/linux/lfrc +10 -12
  200. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  201. machineconfig/settings/lf/windows/lfrc +18 -38
  202. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  203. machineconfig/settings/linters/.ruff.toml +1 -1
  204. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  205. machineconfig/settings/marimo/marimo.toml +80 -0
  206. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  207. machineconfig/settings/pistol/pistol.conf +1 -1
  208. machineconfig/settings/shells/bash/init.sh +82 -31
  209. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  210. machineconfig/settings/shells/nushell/config.nu +2 -35
  211. machineconfig/settings/shells/nushell/env.nu +45 -6
  212. machineconfig/settings/shells/nushell/init.nu +314 -0
  213. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  214. machineconfig/settings/shells/starship/starship.toml +16 -0
  215. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  216. machineconfig/settings/shells/wt/settings.json +32 -17
  217. machineconfig/settings/shells/zsh/init.sh +89 -0
  218. machineconfig/settings/svim/linux/init.toml +0 -4
  219. machineconfig/settings/svim/windows/init.toml +0 -3
  220. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  221. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  222. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  223. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  224. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  225. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  226. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  227. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  228. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  229. machineconfig/settings/television/cable_unix/env.toml +17 -0
  230. machineconfig/settings/television/cable_unix/files.toml +11 -0
  231. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  232. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  233. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  234. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  235. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  236. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  237. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  238. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  239. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  240. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  241. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  242. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  243. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  244. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  245. machineconfig/settings/television/cable_unix/text.toml +17 -0
  246. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  247. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  248. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  249. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  250. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  251. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  252. machineconfig/settings/television/cable_windows/env.toml +17 -0
  253. machineconfig/settings/television/cable_windows/files.toml +14 -0
  254. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  255. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  256. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  257. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  258. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  259. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  260. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  261. machineconfig/settings/television/cable_windows/text.toml +17 -0
  262. machineconfig/settings/yazi/init.lua +61 -0
  263. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  264. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  265. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  266. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  267. machineconfig/settings/yazi/theme.toml +4 -0
  268. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  269. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  270. machineconfig/setup_linux/__init__.py +11 -0
  271. machineconfig/setup_linux/apps_desktop.sh +89 -0
  272. machineconfig/setup_linux/apps_gui.sh +64 -0
  273. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  274. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  275. machineconfig/setup_linux/uv.sh +15 -0
  276. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  277. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  278. machineconfig/setup_mac/__init__.py +16 -0
  279. machineconfig/setup_mac/apps_gui.sh +248 -0
  280. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  281. machineconfig/setup_mac/uv.sh +36 -0
  282. machineconfig/setup_windows/__init__.py +11 -0
  283. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  284. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  285. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  286. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  287. machineconfig/setup_windows/uv.ps1 +17 -0
  288. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  289. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  290. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  291. machineconfig/utils/accessories.py +7 -5
  292. machineconfig/utils/cloud/onedrive/README.md +139 -0
  293. machineconfig/utils/code.py +155 -105
  294. machineconfig/utils/files/art/fat_croco.txt +10 -0
  295. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  296. machineconfig/utils/files/art/happy_croco.txt +22 -0
  297. machineconfig/utils/files/art/water_croco.txt +11 -0
  298. machineconfig/utils/files/ascii_art.py +1 -1
  299. machineconfig/utils/files/dbms.py +257 -0
  300. machineconfig/utils/files/headers.py +11 -14
  301. machineconfig/utils/files/ouch/__init__.py +0 -0
  302. machineconfig/utils/files/ouch/decompress.py +45 -0
  303. machineconfig/utils/files/read.py +10 -18
  304. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  305. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  306. machineconfig/utils/installer_utils/installer_class.py +64 -181
  307. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  308. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  309. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +66 -97
  310. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +49 -82
  311. machineconfig/utils/io.py +77 -23
  312. machineconfig/utils/links.py +254 -162
  313. machineconfig/utils/meta.py +256 -0
  314. machineconfig/utils/notifications.py +1 -1
  315. machineconfig/utils/options.py +46 -18
  316. machineconfig/utils/options_tv.py +119 -0
  317. machineconfig/utils/path_extended.py +48 -101
  318. machineconfig/utils/path_helper.py +76 -23
  319. machineconfig/utils/procs.py +50 -70
  320. machineconfig/utils/scheduler.py +88 -124
  321. machineconfig/utils/scheduling.py +0 -3
  322. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  323. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  324. machineconfig/utils/source_of_truth.py +3 -6
  325. machineconfig/utils/ssh.py +263 -274
  326. machineconfig/utils/ssh_utils/abc.py +5 -0
  327. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  328. machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
  329. machineconfig/utils/ssh_utils/utils.py +142 -0
  330. machineconfig/utils/ssh_utils/wsl.py +210 -0
  331. machineconfig/utils/terminal.py +3 -113
  332. machineconfig/utils/tst.py +20 -0
  333. machineconfig/utils/upgrade_packages.py +114 -28
  334. machineconfig/utils/ve.py +12 -4
  335. machineconfig-7.98.dist-info/METADATA +132 -0
  336. machineconfig-7.98.dist-info/RECORD +504 -0
  337. machineconfig-7.98.dist-info/entry_points.txt +13 -0
  338. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  339. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  340. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  341. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  342. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  343. machineconfig/jobs/python/vscode/api.py +0 -57
  344. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  345. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  346. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  347. machineconfig/jobs/windows/startup_file.cmd +0 -2
  348. machineconfig/profile/create.py +0 -303
  349. machineconfig/profile/shell.py +0 -176
  350. machineconfig/scripts/cloud/init.sh +0 -119
  351. machineconfig/scripts/linux/agents +0 -2
  352. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  353. machineconfig/scripts/linux/cloud_copy +0 -2
  354. machineconfig/scripts/linux/cloud_mount +0 -2
  355. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  356. machineconfig/scripts/linux/cloud_sync +0 -2
  357. machineconfig/scripts/linux/croshell +0 -3
  358. machineconfig/scripts/linux/devops +0 -2
  359. machineconfig/scripts/linux/fire +0 -2
  360. machineconfig/scripts/linux/ftpx +0 -2
  361. machineconfig/scripts/linux/fzf2g +0 -21
  362. machineconfig/scripts/linux/fzfag +0 -17
  363. machineconfig/scripts/linux/fzffg +0 -25
  364. machineconfig/scripts/linux/fzfrga +0 -21
  365. machineconfig/scripts/linux/gh_models +0 -2
  366. machineconfig/scripts/linux/initai +0 -2
  367. machineconfig/scripts/linux/kill_process +0 -2
  368. machineconfig/scripts/linux/scheduler +0 -2
  369. machineconfig/scripts/linux/sessions +0 -2
  370. machineconfig/scripts/linux/share_smb +0 -1
  371. machineconfig/scripts/linux/skrg +0 -4
  372. machineconfig/scripts/linux/start_slidev +0 -2
  373. machineconfig/scripts/linux/start_terminals +0 -3
  374. machineconfig/scripts/linux/warp-cli.sh +0 -122
  375. machineconfig/scripts/linux/wifi_conn +0 -2
  376. machineconfig/scripts/linux/z_ls +0 -104
  377. machineconfig/scripts/python/ai/generate_files.py +0 -83
  378. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  379. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  380. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  381. machineconfig/scripts/python/devops_add_ssh_key.py +0 -120
  382. machineconfig/scripts/python/dotfile.py +0 -78
  383. machineconfig/scripts/python/fire_agents_help_launch.py +0 -120
  384. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  385. machineconfig/scripts/python/fire_jobs_route_helper.py +0 -65
  386. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  387. machineconfig/scripts/python/gh_models.py +0 -104
  388. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  389. machineconfig/scripts/python/repos.py +0 -132
  390. machineconfig/scripts/python/repos_helper_action.py +0 -378
  391. machineconfig/scripts/python/snapshot.py +0 -25
  392. machineconfig/scripts/python/start_terminals.py +0 -121
  393. machineconfig/scripts/python/t4.py +0 -17
  394. machineconfig/scripts/windows/agents.ps1 +0 -1
  395. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  396. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  397. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  398. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  399. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  400. machineconfig/scripts/windows/croshell.ps1 +0 -1
  401. machineconfig/scripts/windows/devops.ps1 +0 -1
  402. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  403. machineconfig/scripts/windows/fire.ps1 +0 -1
  404. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  405. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  406. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  407. machineconfig/scripts/windows/fzfrga.bat +0 -20
  408. machineconfig/scripts/windows/gpt.ps1 +0 -1
  409. machineconfig/scripts/windows/grep.ps1 +0 -2
  410. machineconfig/scripts/windows/initai.ps1 +0 -1
  411. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  412. machineconfig/scripts/windows/nano.ps1 +0 -3
  413. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  414. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  415. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  416. machineconfig/scripts/windows/sessions.ps1 +0 -1
  417. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  418. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  419. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  420. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  421. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  422. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  423. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  424. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  425. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  426. machineconfig/settings/yazi/yazi.toml +0 -4
  427. machineconfig/setup_linux/nix/cli_installation.sh +0 -157
  428. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  429. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  430. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  431. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  432. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  433. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  434. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  435. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  436. machineconfig/utils/installer_utils/installer.py +0 -189
  437. machineconfig-5.15.dist-info/METADATA +0 -188
  438. machineconfig-5.15.dist-info/RECORD +0 -415
  439. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  440. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  441. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  442. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  443. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  444. machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
  445. machineconfig/scripts/python/{helpers → helpers_agents}/__init__.py +0 -0
  446. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_agents/agentic_frameworks/__init__.py} +0 -0
  447. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  448. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  449. machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_cloud/__init__.py} +0 -0
  450. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  451. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  452. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_croshell/__init__.py} +0 -0
  453. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  454. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  455. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  456. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  457. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/__init__.py} +0 -0
  458. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_devops/themes/__init__.py} +0 -0
  459. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  460. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  461. /machineconfig/scripts/{linux → python/helpers_network}/mount_drive +0 -0
  462. /machineconfig/scripts/python/{mount_nw_drive.py → helpers_network/mount_nw_drive.py} +0 -0
  463. /machineconfig/scripts/{linux → python/helpers_network}/mount_smb +0 -0
  464. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  465. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  466. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  467. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  468. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  469. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  470. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  471. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
  472. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
@@ -1,120 +0,0 @@
1
-
2
- import random
3
- import shlex
4
- from pathlib import Path
5
- from machineconfig.scripts.python.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER
6
-
7
-
8
- def get_gemini_api_keys() -> list[str]:
9
- from machineconfig.utils.io import read_ini
10
-
11
- config = read_ini(Path.home().joinpath("dotfiles/creds/llm/gemini/api_keys.ini"))
12
- res: list[str] = []
13
- for a_section_name in list(config.sections()):
14
- a_section = config[a_section_name]
15
- if "api_key" in a_section:
16
- api_key = a_section["api_key"].strip()
17
- if api_key:
18
- res.append(api_key)
19
- print(f"Found {len(res)} Gemini API keys configured.")
20
- return res
21
-
22
-
23
- def prep_agent_launch(agents_dir: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool, agent: AGENTS, *, job_name: str) -> None:
24
- agents_dir.mkdir(parents=True, exist_ok=True)
25
- prompt_folder = agents_dir / "prompts"
26
- prompt_folder.mkdir(parents=True, exist_ok=True)
27
-
28
- for idx, a_prompt_material in enumerate(prompts_material):
29
- prompt_root = prompt_folder / f"agent_{idx}"
30
- prompt_root.mkdir(parents=True, exist_ok=True)
31
- prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
32
- if keep_material_in_separate_file:
33
- prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
34
- prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
35
- 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")
36
- else:
37
- prompt_material_path = prompt_path
38
- prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
39
-
40
- agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
41
- random_sleep_time = random.uniform(0, 5)
42
- cmd_prefix = f"""
43
- #!/usr/bin/env bash
44
-
45
- # AGENT-{idx}-LAUNCH-SCRIPT
46
- # Auto-generated by fire_agents.py
47
-
48
- export FIRE_AGENTS_AGENT_NAME="{agent}"
49
- export FIRE_AGENTS_JOB_NAME="{job_name}"
50
- export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
51
- export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
52
- export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
53
-
54
- echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
55
- sleep {random_sleep_time:.2f}
56
- echo "Launching agent {agent} with prompt from {prompt_path}"
57
- echo "Launching agent {agent} with command from {agent_cmd_launch_path}"
58
- echo "--------START OF AGENT OUTPUT--------"
59
- sleep 0.1
60
-
61
- """
62
- match agent:
63
- case "gemini":
64
- model = "gemini-2.5-pro"
65
- # model = "gemini-2.5-flash-lite"
66
- # model = None # auto-select
67
- # if model is None:
68
- # model_arg = ""
69
- # else:
70
- model_arg = f"--model {shlex.quote(model)}"
71
- # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
72
- safe_path = shlex.quote(str(prompt_path))
73
- api_keys = get_gemini_api_keys()
74
- api_key = api_keys[idx % len(api_keys)] if api_keys else ""
75
- # Export the environment variable so it's available to subshells
76
- cmd = f"""
77
- export GEMINI_API_KEY={shlex.quote(api_key)}
78
- echo "Using Gemini API key $GEMINI_API_KEY"
79
- gemini {model_arg} --yolo --prompt {safe_path}
80
- """
81
- case "cursor-agent":
82
- # As originally implemented
83
- cmd = f"""
84
-
85
- cursor-agent --print --output-format text < {prompt_path}
86
-
87
- """
88
- case "crush":
89
- cmd = f"""
90
- crush run {prompt_path}
91
- """
92
- case "q":
93
- cmd = f"""
94
- q chat --no-interactive --trust-all-tools {prompt_path}
95
- """
96
- case _:
97
- raise ValueError(f"Unsupported agent type: {agent}")
98
- cmd_postfix = """
99
- sleep 0.1
100
- echo "---------END OF AGENT OUTPUT---------"
101
- """
102
- agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
103
-
104
- return None
105
-
106
-
107
- def get_agents_launch_layout(session_root: Path):
108
- from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
109
-
110
- tab_config: list[TabConfig] = []
111
- prompt_root = session_root / "prompts"
112
- all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
113
- for a_prompt_dir in all_dirs_under_prompts:
114
- idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
115
- agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
116
- fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
117
- tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
118
- layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
119
- layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
120
- return layouts_file
@@ -1,12 +0,0 @@
1
-
2
- from typing import Literal, TypeAlias
3
-
4
-
5
- AGENTS: TypeAlias = Literal[
6
- "cursor-agent", "gemini", "crush", "q"
7
- # warp terminal
8
- ]
9
- AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
10
-
11
- SEARCH_STRATEGIES: TypeAlias = Literal["file_path", "keyword_search", "filename_pattern"]
12
-
@@ -1,65 +0,0 @@
1
-
2
-
3
- import platform
4
- from typing import Optional
5
- import tomllib
6
- from pathlib import Path
7
- from machineconfig.utils.accessories import randstr
8
- from machineconfig.utils.path_extended import PathExtended
9
-
10
-
11
- def get_command_streamlit(choice_file: Path, environment: str, repo_root: Optional[Path]) -> str:
12
- import socket
13
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
14
- try:
15
- s.connect(("8.8.8.8", 1))
16
- local_ip_v4 = s.getsockname()[0]
17
- except Exception:
18
- local_ip_v4 = socket.gethostbyname(socket.gethostname())
19
- finally:
20
- s.close()
21
- computer_name = platform.node()
22
- port = 8501
23
- toml_path: Optional[Path] = None
24
- toml_path_maybe = choice_file.parent.joinpath(".streamlit/config.toml")
25
- if toml_path_maybe.exists():
26
- toml_path = toml_path_maybe
27
- elif choice_file.parent.name == "pages":
28
- toml_path_maybe = choice_file.parent.parent.joinpath(".streamlit/config.toml")
29
- if toml_path_maybe.exists():
30
- toml_path = toml_path_maybe
31
- if toml_path is not None:
32
- print(f"📄 Reading config.toml @ {toml_path}")
33
- config = tomllib.loads(toml_path.read_text(encoding="utf-8"))
34
- if "server" in config:
35
- if "port" in config["server"]:
36
- port = config["server"]["port"]
37
- secrets_path = toml_path.with_name("secrets.toml")
38
- if repo_root is not None:
39
- secrets_template_path = Path.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
40
- if environment != "" and not secrets_path.exists() and secrets_template_path.exists():
41
- secrets_template = tomllib.loads(secrets_template_path.read_text(encoding="utf-8"))
42
- if environment == "ip":
43
- host_url = f"http://{local_ip_v4}:{port}/oauth2callback"
44
- elif environment == "localhost":
45
- host_url = f"http://localhost:{port}/oauth2callback"
46
- elif environment == "hostname":
47
- host_url = f"http://{computer_name}:{port}/oauth2callback"
48
- else:
49
- host_url = f"http://{environment}:{port}/oauth2callback"
50
- try:
51
- secrets_template["auth"]["redirect_uri"] = host_url
52
- secrets_template["auth"]["cookie_secret"] = randstr(35)
53
- secrets_template["auth"]["auth0"]["redirect_uri"] = host_url
54
- # save_toml(obj=secrets_template, path=secrets_path)
55
- except Exception as ex:
56
- print(ex)
57
- raise ex
58
- message = f"🚀 Streamlit app is running @:\n1- http://{local_ip_v4}:{port}\n2- http://{computer_name}:{port}\n3- http://localhost:{port}"
59
- from rich.panel import Panel
60
- from rich import print as rprint
61
-
62
- rprint(Panel(message))
63
- exe = f"streamlit run --server.address 0.0.0.0 --server.headless true --server.port {port}"
64
- # exe = f"cd '{choice_file.parent}'; " + exe
65
- return exe
@@ -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,116 +0,0 @@
1
- from machineconfig.utils.path_extended import PathExtended
2
- from machineconfig.utils.terminal import Response
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
- import subprocess
9
- from rich.console import Console
10
- from rich.panel import Panel
11
-
12
- console = Console()
13
-
14
-
15
- def delete_remote_repo_copy_and_push_local(remote_repo: str, local_repo: str, cloud: str):
16
- console.print(Panel("🗑️ Deleting remote repo copy and pushing local copy", title="[bold blue]Repo Sync[/bold blue]", border_style="blue"))
17
- repo_sync_root = PathExtended(remote_repo).expanduser().absolute()
18
- repo_root_path = PathExtended(local_repo).expanduser().absolute()
19
- repo_sync_root.delete(sure=True)
20
- print("🧹 Removed temporary remote copy")
21
- from git.remote import Remote
22
- from git.repo import Repo
23
-
24
- try:
25
- Remote.remove(Repo(repo_root_path), "originEnc")
26
- console.print(Panel("🔗 Removed originEnc remote reference", border_style="blue"))
27
- except Exception:
28
- pass # type: ignore
29
- console.print(Panel("📈 Deleting remote repository copy and pushing local changes", width=150, border_style="blue"))
30
-
31
- repo_root_path.to_cloud(cloud=cloud, zip=True, encrypt=True, rel2home=True, os_specific=False)
32
-
33
- console.print(Panel("✅ Repository successfully pushed to cloud", title="[bold green]Repo Sync[/bold green]", border_style="green"))
34
-
35
-
36
- # import sys
37
- # import subprocess
38
-
39
-
40
- def get_wt_cmd(wd1: PathExtended, wd2: PathExtended) -> str:
41
- lines = [
42
- f"""wt --window 0 new-tab --profile pwsh --title "gitdiff" --tabColor `#3b04d1 --startingDirectory {wd1} ` --colorScheme "Solarized Dark" """,
43
- f"""split-pane --horizontal --profile pwsh --startingDirectory {wd2} --size 0.5 --colorScheme "Tango Dark" -- pwsh -Interactive """,
44
- ]
45
- return " `; ".join(lines)
46
-
47
-
48
- def inspect_repos(repo_local_root: str, repo_remote_root: str):
49
- console.print(Panel(f"📂 Local: {repo_local_root}\n📂 Remote: {repo_remote_root}", title="[bold blue]🔍 Inspecting Repositories[/bold blue]", border_style="blue"))
50
-
51
- if platform.system() == "Windows":
52
- program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
53
- write_shell_script_to_file(shell_script=program)
54
- return None
55
- elif platform.system() in ["Linux", "Darwin"]:
56
- program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
57
- write_shell_script_to_file(shell_script=program)
58
- return None
59
- else:
60
- raise NotImplementedError(f"Platform {platform.system()} not implemented.")
61
-
62
-
63
- def fetch_dotfiles():
64
- console.print(Panel("📁 Fetching Dotfiles", title="[bold blue]Dotfiles[/bold blue]", border_style="blue"))
65
-
66
- cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
67
- console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", width=150, border_style="yellow"))
68
-
69
- dotfiles_local = PathExtended.home().joinpath("dotfiles")
70
- CONFIG_PATH.joinpath("remote").mkdir(parents=True, exist_ok=True)
71
- dotfiles_remote = PathExtended(CONFIG_PATH).joinpath("remote", dotfiles_local.rel2home())
72
- remote_path = dotfiles_local.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
73
-
74
- console.print(Panel("📥 Downloading dotfiles from cloud...", width=150, border_style="blue"))
75
-
76
- dotfiles_remote.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=None)
77
-
78
- console.print(Panel("🗑️ Removing old dotfiles and replacing with cloud version...", width=150, border_style="blue"))
79
-
80
- dotfiles_local.delete(sure=True)
81
- dotfiles_remote.move(folder=PathExtended.home())
82
- script = f"""
83
- # rm -rf {dotfiles_local}
84
- # mv {dotfiles_remote} {dotfiles_local}
85
- """
86
- if platform.system() == "Linux":
87
- script += """
88
- sudo chmod 600 $HOME/.ssh/*
89
- sudo chmod 700 $HOME/.ssh
90
- sudo chmod +x $HOME/dotfiles/scripts/linux -R
91
- """
92
- shell_path = write_shell_script_to_file(shell_script=script)
93
- completed = subprocess.run(f". {shell_path}", capture_output=True, check=False, text=True, shell=True)
94
- Response.from_completed_process(completed).capture().print()
95
-
96
- console.print(Panel("✅ Dotfiles successfully fetched and installed", title="[bold green]Dotfiles[/bold green]", border_style="green"))
97
-
98
-
99
- def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool) -> bool:
100
- dotfiles_path = str(PathExtended.home().joinpath("dotfiles"))
101
- from git import Repo
102
-
103
- repo = Repo(path=dotfiles_path)
104
- last_commit = repo.head.commit
105
- dtm = last_commit.committed_datetime
106
- from datetime import datetime # make it tz unaware
107
-
108
- dtm = datetime(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, dtm.second)
109
- res = dtm > datetime.fromisoformat(commit_dtm)
110
- if res is False and update is True:
111
- console = Console()
112
- console.print(Panel(f"🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}", border_style="bold blue", expand=False))
113
- from machineconfig.scripts.python.cloud_repo_sync import main
114
-
115
- main(cloud=None, path=dotfiles_path)
116
- return res
@@ -1,132 +0,0 @@
1
- """Repos CLI powered by Typer.
2
-
3
- # TODO use gh api user --jq '.login' to get the username and use it to clone the repos.
4
- in the event that username@github.com is not mentioned in the remote url.
5
-
6
- """
7
-
8
-
9
- from typing import Annotated, Optional
10
- import typer
11
-
12
-
13
-
14
- app = typer.Typer(help="� Manage development repositories", no_args_is_help=True)
15
- sync_app = typer.Typer(help="� Manage repository specifications and syncing", no_args_is_help=True)
16
- app.add_typer(sync_app, name="sync", help="� Sync repositories using saved specs")
17
-
18
-
19
- DirectoryArgument = Annotated[
20
- Optional[str],
21
- typer.Argument(help="📁 Folder containing repos or the specs JSON file to use."),
22
- ]
23
- RecursiveOption = Annotated[
24
- bool,
25
- typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories."),
26
- ]
27
- NoSyncOption = Annotated[
28
- bool,
29
- typer.Option("--no-sync", help="🚫 Disable automatic uv sync after pulls."),
30
- ]
31
- CloudOption = Annotated[
32
- Optional[str],
33
- typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote."),
34
- ]
35
-
36
-
37
-
38
- @app.command()
39
- def push(directory: DirectoryArgument = None,
40
- recursive: RecursiveOption = False,
41
- no_sync: NoSyncOption = False,
42
- ) -> None:
43
- """🚀 Push changes across repositories."""
44
- from machineconfig.scripts.python.repos_helper import git_operations
45
- git_operations(directory, pull=False, commit=False, push=True, recursive=recursive, no_sync=no_sync)
46
- @app.command()
47
- def pull(
48
- directory: DirectoryArgument = None,
49
- recursive: RecursiveOption = False,
50
- no_sync: NoSyncOption = False,
51
- ) -> None:
52
- """⬇️ Pull changes across repositories."""
53
- from machineconfig.scripts.python.repos_helper import git_operations
54
- git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, no_sync=no_sync)
55
- @app.command()
56
- def commit(
57
- directory: DirectoryArgument = None,
58
- recursive: RecursiveOption = False,
59
- no_sync: NoSyncOption = False,
60
- ) -> None:
61
- """💾 Commit changes across repositories."""
62
- from machineconfig.scripts.python.repos_helper import git_operations
63
- git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, no_sync=no_sync)
64
- @app.command()
65
- def all(
66
- directory: DirectoryArgument = None,
67
- recursive: RecursiveOption = False,
68
- no_sync: NoSyncOption = False,
69
- ) -> None:
70
- """🔄 Pull, commit, and push changes across repositories."""
71
- from machineconfig.scripts.python.repos_helper import git_operations
72
- git_operations(directory, pull=True, commit=True, push=True, recursive=recursive, no_sync=no_sync)
73
-
74
-
75
- @sync_app.command()
76
- def capture(
77
- directory: DirectoryArgument = None,
78
- cloud: CloudOption = None,
79
- ) -> None:
80
- """📝 Record repositories into a repos.json specification."""
81
- from machineconfig.scripts.python.repos_helper import print_banner, resolve_directory
82
- print_banner()
83
- repos_root = resolve_directory(directory)
84
- from machineconfig.scripts.python.repos_helper_record import main as record_repos
85
- save_path = record_repos(repos_root=repos_root)
86
- from machineconfig.utils.path_extended import PathExtended
87
- if cloud is not None:
88
- PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
89
- @sync_app.command()
90
- def clone(
91
- directory: DirectoryArgument = None,
92
- cloud: CloudOption = None,
93
- ) -> None:
94
- """📥 Clone repositories described by a repos.json specification."""
95
- from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
96
- print_banner()
97
- clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
98
-
99
-
100
- @sync_app.command(name="checkout-to-commit")
101
- def checkout_command(
102
- directory: DirectoryArgument = None,
103
- cloud: CloudOption = None,
104
- ) -> None:
105
- """🔀 Check out specific commits listed in the specification."""
106
- from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
107
- print_banner()
108
- clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
109
-
110
-
111
- @sync_app.command(name="checkout-to-branch")
112
- def checkout_to_branch_command(
113
- directory: DirectoryArgument = None,
114
- cloud: CloudOption = None,
115
- ) -> None:
116
- """🔀 Check out to the main branch defined in the specification."""
117
- from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
118
- print_banner()
119
- clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
120
-
121
-
122
- @app.command()
123
- def analyze(
124
- directory: DirectoryArgument = None,
125
- ) -> None:
126
- """📊 Analyze repository development over time."""
127
- from machineconfig.scripts.python.repos_helper import print_banner
128
- print_banner()
129
- repo_path = directory if directory is not None else "."
130
- from machineconfig.scripts.python.count_lines_frontend import analyze_repo_development
131
- analyze_repo_development(repo_path=repo_path)
132
-