machineconfig 5.15__py3-none-any.whl → 7.66__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (389) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +0 -1
  5. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  6. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  7. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  8. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  9. machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
  10. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  11. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  12. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  13. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  14. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  17. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  18. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  19. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
  20. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  21. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  22. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  23. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  24. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  25. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  26. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  30. machineconfig/jobs/{python → installer}/check_installations.py +2 -3
  31. machineconfig/jobs/installer/custom/boxes.py +61 -0
  32. machineconfig/jobs/installer/custom/hx.py +76 -19
  33. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  34. machineconfig/jobs/installer/custom_dev/brave.py +1 -7
  35. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  36. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  37. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  38. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
  39. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  40. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  41. machineconfig/jobs/installer/installer_data.json +1101 -115
  42. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  43. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  44. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  45. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  46. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  47. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  48. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  49. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  50. machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
  51. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  52. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  53. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  54. machineconfig/jobs/installer/package_groups.py +108 -180
  55. machineconfig/logger.py +0 -1
  56. machineconfig/profile/backup.toml +49 -0
  57. machineconfig/profile/bash_shell_profiles.md +11 -0
  58. machineconfig/profile/create_helper.py +74 -0
  59. machineconfig/profile/create_links.py +288 -0
  60. machineconfig/profile/create_links_export.py +100 -0
  61. machineconfig/profile/create_shell_profile.py +136 -0
  62. machineconfig/profile/mapper.toml +258 -0
  63. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  64. machineconfig/scripts/__init__.py +0 -4
  65. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  66. machineconfig/scripts/linux/wrap_mcfg +47 -0
  67. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  68. machineconfig/scripts/python/agents.py +92 -103
  69. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  70. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  71. machineconfig/scripts/python/ai/generate_files.py +307 -42
  72. machineconfig/scripts/python/ai/initai.py +3 -28
  73. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  74. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  75. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  76. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  77. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  78. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  79. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  80. machineconfig/scripts/python/cloud.py +29 -0
  81. machineconfig/scripts/python/croshell.py +111 -114
  82. machineconfig/scripts/python/define.py +31 -0
  83. machineconfig/scripts/python/devops.py +44 -103
  84. machineconfig/scripts/python/devops_navigator.py +10 -0
  85. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  86. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  87. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  88. machineconfig/scripts/python/explore.py +49 -0
  89. machineconfig/scripts/python/fire_jobs.py +115 -152
  90. machineconfig/scripts/python/ftpx.py +29 -24
  91. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  92. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  93. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  94. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  95. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  96. machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
  97. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  98. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  99. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  100. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  101. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  102. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
  103. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  104. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  106. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
  107. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  108. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  109. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  110. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  111. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  112. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  113. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  114. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  115. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
  116. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  117. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  118. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  119. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  120. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  121. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  122. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  123. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  124. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  125. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  126. machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
  127. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  128. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  129. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  130. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  131. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  132. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  133. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  134. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  135. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  136. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  137. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  138. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  139. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  140. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  141. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  142. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  143. machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
  144. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  145. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  146. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  147. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  148. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  149. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  150. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  151. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  152. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  153. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  154. machineconfig/scripts/python/interactive.py +64 -84
  155. machineconfig/scripts/python/machineconfig.py +63 -0
  156. machineconfig/scripts/python/msearch.py +21 -0
  157. machineconfig/scripts/python/nw/__init__.py +0 -0
  158. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
  159. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
  160. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  161. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
  162. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  163. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
  164. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  165. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  166. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  167. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  168. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
  169. machineconfig/scripts/python/sessions.py +64 -44
  170. machineconfig/scripts/python/terminal.py +127 -0
  171. machineconfig/scripts/python/utils.py +66 -0
  172. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  173. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  174. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  175. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  176. machineconfig/settings/broot/br.sh +0 -4
  177. machineconfig/settings/broot/conf.toml +1 -1
  178. machineconfig/settings/helix/config.toml +16 -0
  179. machineconfig/settings/helix/languages.toml +13 -4
  180. machineconfig/settings/helix/yazi-picker.sh +12 -0
  181. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  182. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  183. machineconfig/settings/lf/linux/lfrc +10 -12
  184. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  185. machineconfig/settings/lf/windows/lfrc +18 -38
  186. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  187. machineconfig/settings/linters/.ruff.toml +1 -1
  188. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  189. machineconfig/settings/marimo/marimo.toml +80 -0
  190. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  191. machineconfig/settings/pistol/pistol.conf +1 -1
  192. machineconfig/settings/shells/bash/init.sh +55 -31
  193. machineconfig/settings/shells/nushell/config.nu +1 -34
  194. machineconfig/settings/shells/nushell/init.nu +127 -0
  195. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  196. machineconfig/settings/shells/starship/starship.toml +16 -0
  197. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  198. machineconfig/settings/shells/wt/settings.json +32 -17
  199. machineconfig/settings/shells/zsh/init.sh +89 -0
  200. machineconfig/settings/svim/linux/init.toml +0 -4
  201. machineconfig/settings/svim/windows/init.toml +0 -3
  202. machineconfig/settings/yazi/init.lua +57 -0
  203. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  204. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  205. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  206. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  207. machineconfig/settings/yazi/yazi.toml +13 -0
  208. machineconfig/setup_linux/__init__.py +10 -0
  209. machineconfig/setup_linux/apps_desktop.sh +89 -0
  210. machineconfig/setup_linux/apps_gui.sh +64 -0
  211. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  212. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  213. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  214. machineconfig/setup_linux/uv.sh +15 -0
  215. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  216. machineconfig/setup_mac/__init__.py +16 -0
  217. machineconfig/setup_mac/apps_gui.sh +248 -0
  218. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  219. machineconfig/setup_mac/uv.sh +36 -0
  220. machineconfig/setup_windows/__init__.py +8 -0
  221. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  222. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  223. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  224. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  225. machineconfig/setup_windows/uv.ps1 +10 -0
  226. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  227. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  228. machineconfig/utils/accessories.py +7 -5
  229. machineconfig/utils/cloud/onedrive/README.md +139 -0
  230. machineconfig/utils/code.py +133 -106
  231. machineconfig/utils/files/art/fat_croco.txt +10 -0
  232. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  233. machineconfig/utils/files/art/happy_croco.txt +22 -0
  234. machineconfig/utils/files/art/water_croco.txt +11 -0
  235. machineconfig/utils/files/ascii_art.py +1 -1
  236. machineconfig/utils/files/dbms.py +257 -0
  237. machineconfig/utils/files/headers.py +11 -14
  238. machineconfig/utils/files/ouch/__init__.py +0 -0
  239. machineconfig/utils/files/ouch/decompress.py +45 -0
  240. machineconfig/utils/files/read.py +10 -18
  241. machineconfig/utils/installer_utils/installer_class.py +68 -126
  242. machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
  243. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
  244. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
  245. machineconfig/utils/io.py +77 -23
  246. machineconfig/utils/links.py +254 -162
  247. machineconfig/utils/meta.py +255 -0
  248. machineconfig/utils/notifications.py +1 -1
  249. machineconfig/utils/options.py +13 -3
  250. machineconfig/utils/path_extended.py +46 -100
  251. machineconfig/utils/path_helper.py +75 -22
  252. machineconfig/utils/procs.py +50 -70
  253. machineconfig/utils/scheduler.py +94 -97
  254. machineconfig/utils/scheduling.py +0 -3
  255. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  256. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  257. machineconfig/utils/source_of_truth.py +3 -6
  258. machineconfig/utils/ssh.py +742 -264
  259. machineconfig/utils/ssh_utils/utils.py +0 -0
  260. machineconfig/utils/terminal.py +2 -113
  261. machineconfig/utils/tst.py +20 -0
  262. machineconfig/utils/upgrade_packages.py +109 -28
  263. machineconfig/utils/ve.py +11 -4
  264. machineconfig-7.66.dist-info/METADATA +124 -0
  265. machineconfig-7.66.dist-info/RECORD +451 -0
  266. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  267. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  268. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  269. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  270. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  271. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  272. machineconfig/jobs/python/vscode/api.py +0 -57
  273. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  274. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  275. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  276. machineconfig/jobs/windows/startup_file.cmd +0 -2
  277. machineconfig/profile/create.py +0 -303
  278. machineconfig/profile/shell.py +0 -176
  279. machineconfig/scripts/cloud/init.sh +0 -119
  280. machineconfig/scripts/linux/agents +0 -2
  281. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  282. machineconfig/scripts/linux/cloud_copy +0 -2
  283. machineconfig/scripts/linux/cloud_mount +0 -2
  284. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  285. machineconfig/scripts/linux/cloud_sync +0 -2
  286. machineconfig/scripts/linux/croshell +0 -3
  287. machineconfig/scripts/linux/devops +0 -2
  288. machineconfig/scripts/linux/fire +0 -2
  289. machineconfig/scripts/linux/ftpx +0 -2
  290. machineconfig/scripts/linux/fzf2g +0 -21
  291. machineconfig/scripts/linux/fzffg +0 -25
  292. machineconfig/scripts/linux/gh_models +0 -2
  293. machineconfig/scripts/linux/initai +0 -2
  294. machineconfig/scripts/linux/kill_process +0 -2
  295. machineconfig/scripts/linux/scheduler +0 -2
  296. machineconfig/scripts/linux/sessions +0 -2
  297. machineconfig/scripts/linux/share_smb +0 -1
  298. machineconfig/scripts/linux/start_slidev +0 -2
  299. machineconfig/scripts/linux/start_terminals +0 -3
  300. machineconfig/scripts/linux/warp-cli.sh +0 -122
  301. machineconfig/scripts/linux/wifi_conn +0 -2
  302. machineconfig/scripts/linux/z_ls +0 -104
  303. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  304. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  305. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  306. machineconfig/scripts/python/dotfile.py +0 -78
  307. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  308. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  309. machineconfig/scripts/python/gh_models.py +0 -104
  310. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  311. machineconfig/scripts/python/repos.py +0 -132
  312. machineconfig/scripts/python/repos_helper_action.py +0 -378
  313. machineconfig/scripts/python/snapshot.py +0 -25
  314. machineconfig/scripts/python/start_terminals.py +0 -121
  315. machineconfig/scripts/python/t4.py +0 -17
  316. machineconfig/scripts/windows/agents.ps1 +0 -1
  317. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  318. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  319. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  320. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  321. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  322. machineconfig/scripts/windows/croshell.ps1 +0 -1
  323. machineconfig/scripts/windows/devops.ps1 +0 -1
  324. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  325. machineconfig/scripts/windows/fire.ps1 +0 -1
  326. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  327. machineconfig/scripts/windows/gpt.ps1 +0 -1
  328. machineconfig/scripts/windows/grep.ps1 +0 -2
  329. machineconfig/scripts/windows/initai.ps1 +0 -1
  330. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  331. machineconfig/scripts/windows/nano.ps1 +0 -3
  332. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  333. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  334. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  335. machineconfig/scripts/windows/sessions.ps1 +0 -1
  336. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  337. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  338. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  339. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  340. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  341. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  342. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  343. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  344. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  345. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  346. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  347. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  348. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  349. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  350. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  351. machineconfig-5.15.dist-info/METADATA +0 -188
  352. machineconfig-5.15.dist-info/RECORD +0 -415
  353. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  354. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  355. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  356. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  357. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  358. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  359. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  360. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  361. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  362. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  363. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  364. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  365. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  366. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  367. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  368. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  369. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  370. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  371. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  372. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  373. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  374. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  375. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  376. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  377. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  378. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  379. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  380. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  381. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  382. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  383. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  384. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  385. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  386. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  387. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  388. {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  389. {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
@@ -1,190 +0,0 @@
1
- """utils"""
2
-
3
- from pathlib import Path
4
- import git
5
- from machineconfig.utils.io import read_ini
6
- from machineconfig.utils.path_extended import PathExtended
7
- from machineconfig.utils.terminal import Response
8
-
9
- from machineconfig.scripts.python.helpers.repo_sync_helpers import fetch_dotfiles
10
- from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
11
- from machineconfig.utils.options import choose_from_options
12
- from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
13
- import platform
14
- import subprocess
15
- from typing import Optional, Literal
16
- from rich.console import Console
17
- from rich.panel import Panel
18
-
19
- console = Console()
20
-
21
- _ = fetch_dotfiles
22
-
23
-
24
- def main(cloud: Optional[str] = None, path: Optional[str] = None, message: Optional[str] = None, action: Literal["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"] = "ask", pwd: Optional[str] = None):
25
- if cloud is None:
26
- try:
27
- cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
28
- console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", title="Default Cloud", border_style="yellow"))
29
- except FileNotFoundError:
30
- console.print(Panel(f"❌ ERROR: No cloud profile found\nLocation: {DEFAULTS_PATH}\nPlease set one up or provide one via the --cloud flag.", title="Error", border_style="red"))
31
- return ""
32
- else:
33
- cloud_resolved = cloud
34
-
35
- # repo_root = PathExtended(args.repo).expanduser().absolute()
36
- repo_local_root = PathExtended.cwd() if path is None else PathExtended(path).expanduser().absolute()
37
- repo_local_obj = git.Repo(repo_local_root, search_parent_directories=True)
38
- repo_local_root = PathExtended(repo_local_obj.working_dir) # cwd might have been in a sub directory of repo_root, so its better to redefine it.
39
- PathExtended(CONFIG_PATH).joinpath("remote").mkdir(parents=True, exist_ok=True)
40
- repo_remote_root = PathExtended(CONFIG_PATH).joinpath("remote", repo_local_root.rel2home()) # .delete(sure=True)
41
-
42
- try:
43
- console.print(Panel("📥 DOWNLOADING REMOTE REPOSITORY", title_align="left", border_style="blue"))
44
- remote_path = repo_local_root.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
45
- repo_remote_root.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=pwd)
46
- except AssertionError:
47
- console.print(Panel("🆕 Remote repository doesn't exist\n📤 Creating new remote and exiting...", title_align="left", border_style="green"))
48
- repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
49
- return ""
50
-
51
- repo_remote_obj = git.Repo(repo_remote_root)
52
- if repo_remote_obj.is_dirty():
53
- console.print(Panel(f"⚠️ WARNING: REMOTE REPOSITORY IS DIRTY\nLocation: {repo_remote_root}\nPlease commit or stash changes before proceeding.", title="Warning", border_style="yellow"))
54
-
55
- script = f"""
56
- echo ""
57
- echo 'echo -e "\\033[1;34m═════ COMMITTING LOCAL CHANGES ═════\\033[0m"'
58
- cd {repo_local_root}
59
- git status
60
- git add .
61
- git commit -am "{message}"
62
- echo ""
63
- echo ""
64
- echo 'echo -e "\\033[1;34m═════ PULLING LATEST FROM REMOTE ═════\\033[0m"'
65
- cd {repo_local_root}
66
- echo '-> Trying to removing originEnc remote from local repo if it exists.'
67
- # git remote remove originEnc
68
- git remote remove originEnc 2>/dev/null || true
69
- echo '-> Adding originEnc remote to local repo'
70
- git remote add originEnc {repo_remote_root}
71
- echo '-> Fetching originEnc remote.'
72
- git pull originEnc master
73
-
74
- """
75
-
76
- shell_path = write_shell_script_to_file(shell_script=script)
77
- command = f". {shell_path}"
78
- if platform.system() == "Windows":
79
- completed = subprocess.run(["powershell", "-Command", command], capture_output=True, check=False, text=True)
80
- else:
81
- completed = subprocess.run(command, shell=True, capture_output=True, check=False, text=True)
82
- res = Response.from_completed_process(completed).capture().print()
83
-
84
- if res.is_successful(strict_err=True, strict_returcode=True):
85
- console.print(Panel("✅ Pull succeeded!\n🧹 Removing originEnc remote and local copy\n📤 Pushing merged repository to cloud storage", title="Success", border_style="green"))
86
- repo_remote_root.delete(sure=True)
87
- from git.remote import Remote
88
-
89
- Remote.remove(repo_local_obj, "originEnc")
90
- repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
91
- return "success"
92
- else:
93
- console.print(Panel(f"⚠️ MERGE FAILED\n💾 Keeping local copy of remote at:\n📂 {repo_remote_root}", title="Merge Failed", border_style="red"))
94
-
95
- # ================================================================================
96
- option1 = "Delete remote copy and push local:"
97
- program_1_py = f"""
98
- from machineconfig.scripts.python.helpers.repo_sync_helpers import delete_remote_repo_copy_and_push_local as func
99
- func(remote_repo=r'{str(repo_remote_root)}', local_repo=r'{str(repo_local_root)}', cloud=r'{cloud_resolved}')
100
- """
101
- shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
102
- # ================================================================================
103
-
104
- option2 = "Delete local repo and replace it with remote copy:"
105
- program_2 = f"""
106
- rm -rfd {repo_local_root}
107
- mv {repo_remote_root} {repo_local_root}
108
- """
109
- if platform.system() in ["Linux", "Darwin"]:
110
- program_2 += """
111
- sudo chmod 600 $HOME/.ssh/*
112
- sudo chmod 700 $HOME/.ssh
113
- sudo chmod +x $HOME/dotfiles/scripts/linux -R
114
- """
115
-
116
- shell_file_2 = write_shell_script_to_file(shell_script=program_2)
117
-
118
- # ================================================================================
119
- option3 = "Inspect repos:"
120
- program_3_py = f"""
121
- from machineconfig.scripts.python.helper.repo_sync_helpers import inspect_repos as func
122
- func(repo_local_root=r'{str(repo_local_root)}', repo_remote_root=r'{str(repo_remote_root)}')
123
- """
124
- shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
125
- # ================================================================================
126
-
127
- option4 = "Remove problematic rclone file from repo and replace with remote:"
128
- program_4 = f"""
129
- rm $HOME/dotfiles/creds/rclone/rclone.conf
130
- cp $HOME/.config/machineconfig/remote/dotfiles/creds/rclone/rclone.conf $HOME/dotfiles/creds/rclone
131
- cd $HOME/dotfiles
132
- git commit -am "finished merging"
133
- . {shell_file_1}
134
- """
135
- shell_file_4 = write_shell_script_to_file(shell_script=program_4)
136
- # ================================================================================
137
-
138
- console.print(Panel("🔄 RESOLVE MERGE CONFLICT\nChoose an option to resolve the conflict:", title_align="left", border_style="blue"))
139
-
140
- print(f"• 1️⃣ {option1:75} 👉 {shell_file_1}")
141
- print(f"• 2️⃣ {option2:75} 👉 {shell_file_2}")
142
- print(f"• 3️⃣ {option3:75} 👉 {shell_file_3}")
143
- print(f"• 4️⃣ {option4:75} 👉 {shell_file_4}")
144
-
145
- program_content = None
146
- match action:
147
- case "ask":
148
- choice = choose_from_options(multi=False, msg="Choose one option", options=[option1, option2, option3, option4], fzf=False)
149
- if choice == option1:
150
- program_content = shell_file_1.read_text(encoding="utf-8")
151
- elif choice == option2:
152
- program_content = program_2
153
- elif choice == option3:
154
- program_content = shell_file_3.read_text(encoding="utf-8")
155
- elif choice == option4:
156
- program_content = program_4
157
- else:
158
- raise NotImplementedError(f"Choice {choice} not implemented.")
159
- case "pushLocalMerge":
160
- program_content = shell_file_1.read_text(encoding="utf-8")
161
- case "overwriteLocal":
162
- program_content = program_2
163
- case "InspectRepos":
164
- program_content = shell_file_3.read_text(encoding="utf-8")
165
- case "RemoveLocalRclone":
166
- program_content = program_4
167
- case _:
168
- raise ValueError(f"Unknown action: {action}")
169
- # PROGRAM_PATH.write_text(program_content, encoding="utf-8")
170
- subprocess.run(program_content, shell=True, check=True)
171
-
172
- return program_content
173
-
174
-
175
- def args_parser():
176
- # console.print(Panel("🔄 Repository Synchronization Utility", title_align="left", border_style="blue"))
177
- # parser = argparse.ArgumentParser(description="Secure Repo CLI.")
178
- # parser.add_argument("path", nargs="?", type=str, help="Repository path, defaults to cwd.", default=None)
179
- # parser.add_argument("--cloud", "-c", help="rclone cloud profile name.", default=None)
180
- # parser.add_argument("--message", "-m", help="Commit Message", default=f"new message {randstr()}")
181
- # parser.add_argument("--pwd", "-p", help="Password for encryption", default=None)
182
- # parser.add_argument("--action", "-a", help="Action to take if merge fails.", choices=["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"], default="ask")
183
- # args = parser.parse_args()
184
- # main(cloud=args.cloud, path=args.path, message=args.message, action=args.action)
185
- import typer
186
- typer.run(main)
187
-
188
-
189
- if __name__ == "__main__":
190
- args_parser()
@@ -1,16 +0,0 @@
1
-
2
- import typer
3
-
4
-
5
- def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to the git repository")):
6
- from machineconfig.scripts.python import count_lines
7
- from pathlib import Path
8
- count_lines_path = Path(count_lines.__file__)
9
- # --project $HOME/code/machineconfig
10
- cmd = f"""uv run --python 3.13 --with machineconfig[plot] {count_lines_path} analyze-over-time {repo_path}"""
11
- from machineconfig.utils.code import run_shell_script
12
- run_shell_script(cmd)
13
-
14
-
15
- if __name__ == "__main__":
16
- pass
@@ -1,78 +0,0 @@
1
- """Like yadm and dotter."""
2
-
3
- from typing import Annotated
4
-
5
- import typer
6
- from rich.console import Console
7
- from rich.panel import Panel
8
-
9
- from machineconfig.utils.links import symlink_func
10
- from machineconfig.utils.path_extended import PathExtended
11
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT, REPO_ROOT
12
-
13
-
14
- console = Console()
15
-
16
-
17
- def main(
18
- file: Annotated[str, typer.Argument(help="file/folder path.")],
19
- overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
20
- dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
21
- ) -> None:
22
- orig_path = PathExtended(file).expanduser().absolute()
23
- if dest == "":
24
- if "Local" in str(orig_path):
25
- junction = orig_path.split(at="Local", sep=-1)[1]
26
- elif "Roaming" in str(orig_path):
27
- junction = orig_path.split(at="Roaming", sep=-1)[1]
28
- elif ".config" in str(orig_path):
29
- junction = orig_path.split(at=".config", sep=-1)[1]
30
- else:
31
- junction = orig_path.rel2home()
32
- new_path = PathExtended(REPO_ROOT).joinpath(junction)
33
- else:
34
- dest_path = PathExtended(dest).expanduser().absolute()
35
- dest_path.mkdir(parents=True, exist_ok=True)
36
- new_path = dest_path.joinpath(orig_path.name)
37
-
38
- symlink_func(this=orig_path, to_this=new_path, prioritize_to_this=overwrite)
39
-
40
- console.print(
41
- Panel(
42
- "\n".join(
43
- [
44
- "✅ Symbolic link created successfully!",
45
- "🔄 Add the following snippet to mapper.toml to persist this mapping:",
46
- ]
47
- ),
48
- title="Symlink Created",
49
- border_style="green",
50
- padding=(1, 2),
51
- )
52
- )
53
-
54
- mapper_snippet = "\n".join(
55
- [
56
- f"[bold]📝 Edit configuration file:[/] [cyan]nano {PathExtended(LIBRARY_ROOT)}/symlinks/mapper.toml[/cyan]",
57
- "",
58
- f"[{new_path.parent.name}]",
59
- f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
60
- ]
61
- )
62
-
63
- console.print(
64
- Panel(
65
- mapper_snippet,
66
- title="Mapper Entry",
67
- border_style="cyan",
68
- padding=(1, 2),
69
- )
70
- )
71
-
72
-
73
- def arg_parser() -> None:
74
- typer.run(main)
75
-
76
-
77
- if __name__ == "__main__":
78
- arg_parser()
@@ -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,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
-