machineconfig 3.85__tar.gz → 3.88__tar.gz

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 (437) hide show
  1. {machineconfig-3.85/src/machineconfig.egg-info → machineconfig-3.88}/PKG-INFO +1 -1
  2. {machineconfig-3.85 → machineconfig-3.88}/pyproject.toml +1 -1
  3. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_agents.py +4 -5
  4. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_jobs_layout_helper.py +24 -16
  5. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/repos.py +10 -88
  6. machineconfig-3.88/src/machineconfig/scripts/python/repos_helper_action.py +335 -0
  7. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/t4.py +3 -2
  8. machineconfig-3.88/src/machineconfig/utils/accessories.py +110 -0
  9. machineconfig-3.88/src/machineconfig/utils/schemas/layouts/layout_types.py +61 -0
  10. {machineconfig-3.85 → machineconfig-3.88/src/machineconfig.egg-info}/PKG-INFO +1 -1
  11. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig.egg-info/SOURCES.txt +1 -0
  12. machineconfig-3.85/src/machineconfig/utils/accessories.py +0 -72
  13. machineconfig-3.85/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -29
  14. {machineconfig-3.85 → machineconfig-3.88}/MANIFEST.in +0 -0
  15. {machineconfig-3.85 → machineconfig-3.88}/README.md +0 -0
  16. {machineconfig-3.85 → machineconfig-3.88}/setup.cfg +0 -0
  17. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/__init__.py +0 -0
  18. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/__init__.py +0 -0
  19. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
  20. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
  21. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/distribute.py +0 -0
  22. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/file_manager.py +0 -0
  23. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/job_params.py +0 -0
  24. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
  25. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
  26. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/script_execution.py +0 -0
  27. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
  28. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
  29. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/enhanced_command_runner.py +0 -0
  30. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
  31. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
  32. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
  33. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
  34. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
  35. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
  36. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
  37. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
  38. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
  39. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
  40. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
  41. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
  42. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
  43. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
  44. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
  45. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
  46. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
  47. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
  48. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
  49. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
  50. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/__init__.py +0 -0
  51. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
  52. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/run_cloud.py +0 -0
  53. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/run_cluster.py +0 -0
  54. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/run_remote.py +0 -0
  55. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/cluster/templates/utils.py +0 -0
  56. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/__init__.py +0 -0
  57. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
  58. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
  59. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
  60. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/__init__.py +0 -0
  61. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/check_installations.py +0 -0
  62. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/create_bootable_media.py +0 -0
  63. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/python_cargo_build_share.py +0 -0
  64. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
  65. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/tasks.py +0 -0
  66. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/vscode/api.py +0 -0
  67. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python/vscode/sync_code.py +0 -0
  68. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/__init__.py +0 -0
  69. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -0
  70. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/aider.py +0 -0
  71. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -0
  72. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/brave.py +0 -0
  73. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -0
  74. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/code.py +0 -0
  75. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/cursor.py +0 -0
  76. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -0
  77. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -0
  78. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/goes.py +0 -0
  79. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -0
  80. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -0
  81. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/redis.py +0 -0
  82. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -0
  83. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -0
  84. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/dev/winget.py +0 -0
  85. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/docker.py +0 -0
  86. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/gh.py +0 -0
  87. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/hx.py +0 -0
  88. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +0 -0
  89. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +0 -0
  90. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -0
  91. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +0 -0
  92. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +0 -0
  93. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -0
  94. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +0 -0
  95. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -0
  96. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +0 -0
  97. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +0 -0
  98. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +0 -0
  99. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_custom_installers/warp-cli.py +0 -0
  100. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/__init__.py +0 -0
  101. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/config.json +0 -0
  102. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/config.json.bak +0 -0
  103. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -0
  104. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/dev/config.json +0 -0
  105. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -0
  106. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/__init__.py +0 -0
  107. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/archive/config.json +0 -0
  108. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -0
  109. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/config.json +0 -0
  110. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/config.json.bak +0 -0
  111. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/dev/__init__.py +0 -0
  112. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/dev/config.json +0 -0
  113. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -0
  114. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/__init__.py +0 -0
  115. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/archive/__init__.py +0 -0
  116. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/archive/file.json +0 -0
  117. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/config.json +0 -0
  118. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/config.json.bak +0 -0
  119. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/dev/__init__.py +0 -0
  120. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/dev/config.json +0 -0
  121. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -0
  122. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
  123. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
  124. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
  125. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  126. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  127. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/start_terminal.ps1 +0 -0
  128. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/jobs/windows/startup_file.cmd +0 -0
  129. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/logger.py +0 -0
  130. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/__init__.py +0 -0
  131. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/create.py +0 -0
  132. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/records/generic/shares.toml +0 -0
  133. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
  134. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
  135. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
  136. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
  137. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/profile/shell.py +0 -0
  138. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/__init__.py +0 -0
  139. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/cloud/init.sh +0 -0
  140. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/choose_wezterm_theme +0 -0
  141. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/cloud_copy +0 -0
  142. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/cloud_mount +0 -0
  143. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/cloud_repo_sync +0 -0
  144. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/cloud_sync +0 -0
  145. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/croshell +0 -0
  146. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/devops +0 -0
  147. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fire +0 -0
  148. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fire_agents +0 -0
  149. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/ftpx +0 -0
  150. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fzf2g +0 -0
  151. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fzfag +0 -0
  152. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fzffg +0 -0
  153. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fzfg +0 -0
  154. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/fzfrga +0 -0
  155. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/gh_models +0 -0
  156. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/initai +0 -0
  157. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/kill_process +0 -0
  158. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/mount_drive +0 -0
  159. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/mount_nfs +0 -0
  160. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/mount_nw_drive +0 -0
  161. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/mount_smb +0 -0
  162. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/programs +0 -0
  163. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/repos +0 -0
  164. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/scheduler +0 -0
  165. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/share_cloud.sh +0 -0
  166. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/share_nfs +0 -0
  167. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/share_smb +0 -0
  168. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/skrg +0 -0
  169. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/start_docker +0 -0
  170. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/start_slidev +0 -0
  171. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/start_terminals +0 -0
  172. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/switch_ip +0 -0
  173. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
  174. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/wifi_conn +0 -0
  175. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/linux/z_ls +0 -0
  176. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/__init__.py +0 -0
  177. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
  178. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
  179. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/initai.py +0 -0
  180. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
  181. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
  182. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
  183. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
  184. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
  185. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
  186. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
  187. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
  188. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
  189. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
  190. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
  191. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
  192. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -0
  193. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
  194. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
  195. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
  196. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
  197. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
  198. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
  199. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
  200. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
  201. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
  202. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
  203. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
  204. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/choose_wezterm_theme.py +0 -0
  205. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/cloud_copy.py +0 -0
  206. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/cloud_manager.py +0 -0
  207. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/cloud_mount.py +0 -0
  208. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/cloud_repo_sync.py +0 -0
  209. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/cloud_sync.py +0 -0
  210. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/croshell.py +0 -0
  211. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops.py +0 -0
  212. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops_add_identity.py +0 -0
  213. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops_add_ssh_key.py +0 -0
  214. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops_backup_retrieve.py +0 -0
  215. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops_devapps_install.py +0 -0
  216. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/devops_update_repos.py +0 -0
  217. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/dotfile.py +0 -0
  218. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_agents_help_launch.py +0 -0
  219. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_agents_help_search.py +0 -0
  220. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_agents_load_balancer.py +0 -0
  221. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
  222. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_jobs_args_helper.py +0 -0
  223. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/fire_jobs_streamlit_helper.py +0 -0
  224. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/ftpx.py +0 -0
  225. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/get_zellij_cmd.py +0 -0
  226. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/gh_models.py +0 -0
  227. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/__init__.py +0 -0
  228. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/cloud_helpers.py +0 -0
  229. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/helpers2.py +0 -0
  230. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/helpers4.py +0 -0
  231. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/helpers5.py +0 -0
  232. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -0
  233. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/mount_nfs.py +0 -0
  234. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/mount_nw_drive.py +0 -0
  235. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/mount_ssh.py +0 -0
  236. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/onetimeshare.py +0 -0
  237. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/pomodoro.py +0 -0
  238. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/repos_helper_clone.py +0 -0
  239. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/repos_helper_record.py +0 -0
  240. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/repos_helper_update.py +0 -0
  241. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/scheduler.py +0 -0
  242. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/share_terminal.py +0 -0
  243. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/snapshot.py +0 -0
  244. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/start_slidev.py +0 -0
  245. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/start_terminals.py +0 -0
  246. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/viewer.py +0 -0
  247. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/viewer_template.py +0 -0
  248. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/wifi_conn.py +0 -0
  249. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/python/wsl_windows_transfer.py +0 -0
  250. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -0
  251. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/cloud_copy.ps1 +0 -0
  252. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/cloud_mount.ps1 +0 -0
  253. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -0
  254. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/cloud_sync.ps1 +0 -0
  255. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/croshell.ps1 +0 -0
  256. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/devops.ps1 +0 -0
  257. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/dotfile.ps1 +0 -0
  258. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/fire.ps1 +0 -0
  259. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/ftpx.ps1 +0 -0
  260. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
  261. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
  262. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
  263. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/gpt.ps1 +0 -0
  264. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/grep.ps1 +0 -0
  265. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/initai.ps1 +0 -0
  266. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/kill_process.ps1 +0 -0
  267. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/mount_nfs.ps1 +0 -0
  268. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/mount_nw.ps1 +0 -0
  269. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/mount_smb.ps1 +0 -0
  270. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/mount_ssh.ps1 +0 -0
  271. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/nano.ps1 +0 -0
  272. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/pomodoro.ps1 +0 -0
  273. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/reload_path.ps1 +0 -0
  274. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/repos.ps1 +0 -0
  275. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/scheduler.ps1 +0 -0
  276. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/share_cloud.cmd +0 -0
  277. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/share_nfs.ps1 +0 -0
  278. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/share_smb.ps1 +0 -0
  279. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/snapshot.ps1 +0 -0
  280. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/start_slidev.ps1 +0 -0
  281. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/start_terminals.ps1 +0 -0
  282. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/unlock_bitlocker.ps1 +0 -0
  283. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/wifi_conn.ps1 +0 -0
  284. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -0
  285. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -0
  286. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/__init__.py +0 -0
  287. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/broot/br.sh +0 -0
  288. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
  289. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/broot/conf.toml +0 -0
  290. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/glow/glow.yml +0 -0
  291. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
  292. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/helix/config.toml +0 -0
  293. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/helix/languages.toml +0 -0
  294. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/keras/keras.json +0 -0
  295. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
  296. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
  297. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
  298. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
  299. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
  300. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
  301. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
  302. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
  303. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
  304. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
  305. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/colors +0 -0
  306. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
  307. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
  308. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
  309. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
  310. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
  311. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
  312. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/icons +0 -0
  313. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/linux/lfrc +0 -0
  314. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
  315. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  316. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  317. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
  318. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
  319. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  320. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
  321. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
  322. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
  323. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
  324. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/colors +0 -0
  325. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
  326. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/icons +0 -0
  327. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
  328. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
  329. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/lfrc +0 -0
  330. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
  331. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
  332. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
  333. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
  334. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/linters/.flake8 +0 -0
  335. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/linters/.mypy.ini +0 -0
  336. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/linters/.pylintrc +0 -0
  337. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/linters/.ruff.toml +0 -0
  338. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
  339. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
  340. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
  341. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
  342. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
  343. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/mprocs/windows/other +0 -0
  344. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/pistol/pistol.conf +0 -0
  345. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/presenterm/config.yaml +0 -0
  346. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/procs/.procs.toml +0 -0
  347. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
  348. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/rofi/config.rasi +0 -0
  349. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
  350. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
  351. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
  352. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/bash/init.sh +0 -0
  353. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
  354. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
  355. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  356. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
  357. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
  358. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
  359. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
  360. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
  361. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  362. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
  363. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
  364. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
  365. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/shells/wt/settings.json +0 -0
  366. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/streamlit/config.toml +0 -0
  367. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/svim/linux/init.toml +0 -0
  368. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/svim/windows/init.toml +0 -0
  369. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
  370. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/tere/terecd.sh +0 -0
  371. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
  372. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
  373. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/wsl/.wslconfig +0 -0
  374. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/yazi/keymap.toml +0 -0
  375. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/yazi/theme.toml +0 -0
  376. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/yazi/yazi.toml +0 -0
  377. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zed/settings.json +0 -0
  378. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/commands/monitor +0 -0
  379. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
  380. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/config.kdl +0 -0
  381. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
  382. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/layouts/hist +0 -0
  383. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
  384. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
  385. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
  386. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
  387. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
  388. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
  389. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -0
  390. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
  391. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -0
  392. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -0
  393. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
  394. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -0
  395. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/__init__.py +0 -0
  396. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
  397. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
  398. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -0
  399. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -0
  400. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -0
  401. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -0
  402. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -0
  403. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
  404. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/wt_and_pwsh/install_fonts.ps1 +0 -0
  405. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -0
  406. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
  407. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/__init__.py +0 -0
  408. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/ai/__init__.py +0 -0
  409. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/ai/generate_file_checklist.py +0 -0
  410. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
  411. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
  412. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/code.py +0 -0
  413. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/installer.py +0 -0
  414. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
  415. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
  416. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
  417. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/io.py +0 -0
  418. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/links.py +0 -0
  419. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/notifications.py +0 -0
  420. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/options.py +0 -0
  421. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/path_extended.py +0 -0
  422. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/path_helper.py +0 -0
  423. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/procs.py +0 -0
  424. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/scheduler.py +0 -0
  425. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/scheduling.py +0 -0
  426. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
  427. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
  428. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
  429. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/source_of_truth.py +0 -0
  430. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/ssh.py +0 -0
  431. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/terminal.py +0 -0
  432. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/upgrade_packages.py +0 -0
  433. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig/utils/ve.py +0 -0
  434. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig.egg-info/dependency_links.txt +0 -0
  435. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig.egg-info/entry_points.txt +0 -0
  436. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig.egg-info/requires.txt +0 -0
  437. {machineconfig-3.85 → machineconfig-3.88}/src/machineconfig.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 3.85
3
+ Version: 3.88
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "machineconfig"
9
- version = "3.85"
9
+ version = "3.88"
10
10
  description = "Dotfiles management package"
11
11
  readme = "README.md"
12
12
  license = {text = "Apache 2.0"}
@@ -151,10 +151,10 @@ manager.run_monitoring_routine()
151
151
 
152
152
 
153
153
  def split_too_many_tabs_to_run_in_sequential_sessions(layout_tabs: list[TabConfig], every: int):
154
- from machineconfig.utils.accessories import split
154
+ from machineconfig.utils.accessories import split_list
155
155
  from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
156
156
 
157
- for idx, layout_tabs_chunk in enumerate(split(layout_tabs, every=every)):
157
+ for idx, layout_tabs_chunk in enumerate(split_list(layout_tabs, every=every, to=None)):
158
158
  a_layout_file: LayoutConfig = {"layoutName": f"split_{idx}", "layoutTabs": layout_tabs_chunk}
159
159
  manager = ZellijLocalManager(session_layouts=[a_layout_file])
160
160
  manager.start_all_sessions(poll_interval=2, poll_seconds=2)
@@ -163,10 +163,9 @@ def split_too_many_tabs_to_run_in_sequential_sessions(layout_tabs: list[TabConfi
163
163
 
164
164
 
165
165
  def split_too_many_layouts_to_run_in_sequential_sessions(layouts: list[LayoutConfig], every: int):
166
- from machineconfig.utils.accessories import split
166
+ from machineconfig.utils.accessories import split_list
167
167
  from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
168
-
169
- for _idx, layout_chunk in enumerate(split(layouts, every=every)):
168
+ for _idx, layout_chunk in enumerate(split_list(layouts, every=every)):
170
169
  manager = ZellijLocalManager(session_layouts=layout_chunk)
171
170
  manager.start_all_sessions(poll_interval=2, poll_seconds=2)
172
171
  manager.run_monitoring_routine(wait_ms=2000)
@@ -10,34 +10,39 @@ if TYPE_CHECKING:
10
10
  from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs
11
11
 
12
12
 
13
- def select_layout(layouts_json_file: Path, layout_name: Optional[str]):
13
+ def select_layout(layouts_json_file: Path, layouts_name: Optional[list[str]]) -> list[LayoutConfig]:
14
14
  import json
15
-
16
15
  layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
17
16
  if len(layout_file["layouts"]) == 0:
18
17
  raise ValueError(f"No layouts found in {layouts_json_file}")
19
- if layout_name is None:
18
+ if layouts_name is None:
20
19
  options = [layout["layoutName"] for layout in layout_file["layouts"]]
21
20
  from machineconfig.utils.options import choose_from_options
22
-
23
- layout_name = choose_from_options(multi=False, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
24
- print(f"Selected layout: {layout_name}")
25
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layout_name), None)
26
- if layout_chosen is None:
27
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == layout_name.lower()), None)
28
- if layout_chosen is None:
29
- available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
30
- raise ValueError(f"Layout '{layout_name}' not found. Available layouts: {available_layouts}")
31
- return layout_chosen
21
+ layouts_name = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
22
+ print(f"Selected layout(s): {layouts_name}")
23
+ # layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layouts_name), None)
24
+ # if layout_chosen is None:
25
+ # layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == layouts_name.lower()), None)
26
+ # if layout_chosen is None:
27
+ # available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
28
+ # raise ValueError(f"Layout '{layouts_name}' not found. Available layouts: {available_layouts}")
29
+ layouts_chosen: list[LayoutConfig] = []
30
+ for name in layouts_name:
31
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == name), None)
32
+ if layout_chosen is None:
33
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == name.lower()), None)
34
+ if layout_chosen is None:
35
+ available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
36
+ raise ValueError(f"Layout '{name}' not found. Available layouts: {available_layouts}")
37
+ layouts_chosen.append(layout_chosen)
38
+ return layouts_chosen
32
39
 
33
40
 
34
41
  def launch_layout(layout_config: LayoutConfig) -> Optional[Exception]:
35
42
  import platform
36
-
37
43
  if platform.system() == "Linux" or platform.system() == "Darwin":
38
44
  print("🧑‍💻 Launching layout using Zellij terminal multiplexer...")
39
45
  from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
40
-
41
46
  run_zellij_layout(layout_config=layout_config)
42
47
  elif platform.system() == "Windows":
43
48
  print("🧑‍💻 Launching layout using Windows Terminal...")
@@ -63,4 +68,7 @@ def handle_layout_args(args: "FireJobArgs") -> None:
63
68
  choice_file = PathExtended(choice_file)
64
69
  else:
65
70
  choice_file = path_obj
66
- launch_layout(layout_config=select_layout(layouts_json_file=choice_file, layout_name=args.function))
71
+ if args.function is None: layouts_name = None
72
+ else: layouts_name = args.function.split(",")
73
+ for a_layout_config in select_layout(layouts_json_file=choice_file, layouts_name=layouts_name):
74
+ launch_layout(layout_config=a_layout_config)
@@ -8,80 +8,13 @@ in the event that username@github.com is not mentioned in the remote url.
8
8
  from machineconfig.utils.io import read_ini
9
9
  from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
10
10
  from machineconfig.utils.path_extended import PathExtended as PathExtended
11
- from machineconfig.utils.accessories import randstr
12
- from machineconfig.scripts.python.repos_helper_update import update_repository
13
11
  from machineconfig.scripts.python.repos_helper_record import main as record_repos
14
12
  from machineconfig.scripts.python.repos_helper_clone import clone_repos
13
+ from machineconfig.scripts.python.repos_helper_action import perform_git_operations
15
14
 
16
15
  import typer
17
- from enum import Enum
18
16
  from typing import Annotated, Optional
19
17
 
20
- from rich import print as pprint
21
-
22
-
23
- class GitAction(Enum):
24
- commit = "commit"
25
- push = "push"
26
- pull = "pull"
27
-
28
-
29
- def git_action(path: PathExtended, action: GitAction, mess: Optional[str] = None, r: bool = False, auto_sync: bool = True) -> bool:
30
- """Perform git actions using Python instead of shell scripts. Returns True if successful."""
31
- from git.exc import InvalidGitRepositoryError
32
- from git.repo import Repo
33
-
34
- try:
35
- repo = Repo(str(path), search_parent_directories=False)
36
- except InvalidGitRepositoryError:
37
- pprint(f"⚠️ Skipping {path} because it is not a git repository.")
38
- if r:
39
- results = [git_action(path=sub_path, action=action, mess=mess, r=r, auto_sync=auto_sync) for sub_path in path.search()]
40
- return all(results) # Return True only if all recursive operations succeeded
41
- else:
42
- return False
43
-
44
- print(f">>>>>>>>> 🔧{action} - {path}")
45
-
46
- try:
47
- if action == GitAction.commit:
48
- if mess is None:
49
- mess = "auto_commit_" + randstr()
50
-
51
- # Check if there are changes to commit
52
- if repo.is_dirty() or repo.untracked_files:
53
- repo.git.add(A=True) # Stage all changes
54
- repo.index.commit(mess)
55
- print(f"✅ Committed changes with message: {mess}")
56
- return True
57
- else:
58
- print("ℹ️ No changes to commit")
59
- return True
60
-
61
- elif action == GitAction.push:
62
- success = True
63
- for remote in repo.remotes:
64
- try:
65
- print(f"🚀 Pushing to {remote.url}")
66
- remote.push(repo.active_branch.name)
67
- print(f"✅ Pushed to {remote.name}")
68
- except Exception as e:
69
- print(f"❌ Failed to push to {remote.name}: {e}")
70
- success = False
71
- return success
72
-
73
- elif action == GitAction.pull:
74
- # Use the enhanced update function with uv sync support
75
- update_repository(repo, auto_sync=auto_sync, allow_password_prompt=False)
76
- print("✅ Pull completed")
77
- return True
78
-
79
- except Exception as e:
80
- print(f"❌ Error performing {action} on {path}: {e}")
81
- return False
82
-
83
- return True
84
-
85
18
 
86
19
  def main(
87
20
  directory: Annotated[str, typer.Argument(help="📁 Folder containing repos to record or a specs JSON file to follow.")] = "",
@@ -105,9 +38,7 @@ def main(
105
38
  repos_root = PathExtended.home().joinpath("code") # it is a positional argument, can never be empty.
106
39
  else:
107
40
  repos_root = PathExtended(directory).expanduser().absolute()
108
-
109
41
  auto_sync = not no_sync # Enable auto sync by default, disable with --no-sync
110
-
111
42
  if record:
112
43
  save_path = record_repos(repos_root=repos_root)
113
44
  if cloud is not None:
@@ -115,7 +46,6 @@ def main(
115
46
 
116
47
  elif clone or checkout or checkout_to_branch:
117
48
  print("\n📥 Cloning or checking out repositories...")
118
- print(">>>>>>>>> Cloning Repos")
119
49
  if not repos_root.exists() or repos_root.name != "repos.json":
120
50
  repos_root = PathExtended(CONFIG_PATH).joinpath("repos").joinpath(repos_root.rel2home()).joinpath("repos.json")
121
51
  if not repos_root.exists():
@@ -130,23 +60,15 @@ def main(
130
60
  clone_repos(spec_path=repos_root, preferred_remote=None, checkout_branch_flag=checkout_to_branch, checkout_commit_flag=checkout)
131
61
 
132
62
  elif all or commit or pull or push:
133
- print(f"\n🔄 Performing Git actions on repositories @ `{repos_root}`...")
134
- overall_success = True
135
- for a_path in repos_root.search("*"):
136
- print(f"{('Handling ' + str(a_path)).center(80, '-')}")
137
- path_success = True
138
- if pull or all:
139
- path_success = git_action(path=a_path, action=GitAction.pull, r=recursive, auto_sync=auto_sync) and path_success
140
- if commit or all:
141
- path_success = git_action(a_path, action=GitAction.commit, r=recursive, auto_sync=auto_sync) and path_success
142
- if push or all:
143
- path_success = git_action(a_path, action=GitAction.push, r=recursive, auto_sync=auto_sync) and path_success
144
- overall_success = overall_success and path_success
145
-
146
- if overall_success:
147
- print("✅ All git operations completed successfully")
148
- else:
149
- print("⚠️ Some git operations encountered issues")
63
+ # Use the new helper function for git operations
64
+ perform_git_operations(
65
+ repos_root=repos_root,
66
+ pull=pull or all,
67
+ commit=commit or all,
68
+ push=push or all,
69
+ recursive=recursive,
70
+ auto_sync=auto_sync
71
+ )
150
72
  else:
151
73
  print("❌ No action specified. Try passing --push, --pull, --commit, or --all.")
152
74
 
@@ -0,0 +1,335 @@
1
+ from machineconfig.utils.path_extended import PathExtended as PathExtended
2
+ from machineconfig.utils.accessories import randstr
3
+ from machineconfig.scripts.python.repos_helper_update import update_repository
4
+
5
+ from typing import Optional
6
+ from dataclasses import dataclass
7
+ from enum import Enum
8
+
9
+ from rich import print as pprint
10
+
11
+
12
+ class GitAction(Enum):
13
+ commit = "commit"
14
+ push = "push"
15
+ pull = "pull"
16
+
17
+
18
+ @dataclass
19
+ class GitOperationResult:
20
+ """Result of a git operation on a single repository."""
21
+ repo_path: PathExtended
22
+ action: str
23
+ success: bool
24
+ message: str
25
+ is_git_repo: bool = True
26
+ had_changes: bool = False
27
+ remote_count: int = 0
28
+
29
+
30
+ @dataclass
31
+ class GitOperationSummary:
32
+ """Summary of all git operations performed."""
33
+ # Basic statistics
34
+ total_paths_processed: int = 0
35
+ git_repos_found: int = 0
36
+ non_git_paths: int = 0
37
+
38
+ # Per-operation statistics
39
+ commits_attempted: int = 0
40
+ commits_successful: int = 0
41
+ commits_no_changes: int = 0
42
+ commits_failed: int = 0
43
+
44
+ pulls_attempted: int = 0
45
+ pulls_successful: int = 0
46
+ pulls_failed: int = 0
47
+
48
+ pushes_attempted: int = 0
49
+ pushes_successful: int = 0
50
+ pushes_failed: int = 0
51
+
52
+ def __post_init__(self):
53
+ self.failed_operations: list[GitOperationResult] = []
54
+ self.repos_without_remotes: list[PathExtended] = []
55
+
56
+
57
+ def git_action(path: PathExtended, action: GitAction, mess: Optional[str] = None, r: bool = False, auto_sync: bool = True) -> GitOperationResult:
58
+ """Perform git actions using Python instead of shell scripts. Returns detailed operation result."""
59
+ from git.exc import InvalidGitRepositoryError
60
+ from git.repo import Repo
61
+
62
+ try:
63
+ repo = Repo(str(path), search_parent_directories=False)
64
+ except InvalidGitRepositoryError:
65
+ pprint(f"⚠️ Skipping {path} because it is not a git repository.")
66
+ if r:
67
+ results = [git_action(path=sub_path, action=action, mess=mess, r=r, auto_sync=auto_sync) for sub_path in path.search()]
68
+ # For recursive calls, we need to aggregate results somehow
69
+ # For now, return success if all recursive operations succeeded
70
+ all_successful = all(result.success for result in results)
71
+ return GitOperationResult(
72
+ repo_path=path,
73
+ action=action.value,
74
+ success=all_successful,
75
+ message=f"Recursive operation: {len([r for r in results if r.success])}/{len(results)} succeeded",
76
+ is_git_repo=False
77
+ )
78
+ else:
79
+ return GitOperationResult(
80
+ repo_path=path,
81
+ action=action.value,
82
+ success=False,
83
+ message="Not a git repository",
84
+ is_git_repo=False
85
+ )
86
+
87
+ print(f">>>>>>>>> 🔧{action} - {path}")
88
+ remote_count = len(repo.remotes)
89
+
90
+ try:
91
+ if action == GitAction.commit:
92
+ if mess is None:
93
+ mess = "auto_commit_" + randstr()
94
+
95
+ # Check if there are changes to commit
96
+ if repo.is_dirty() or repo.untracked_files:
97
+ repo.git.add(A=True) # Stage all changes
98
+ repo.index.commit(mess)
99
+ print(f"✅ Committed changes with message: {mess}")
100
+ return GitOperationResult(
101
+ repo_path=path,
102
+ action=action.value,
103
+ success=True,
104
+ message=f"Committed changes with message: {mess}",
105
+ had_changes=True,
106
+ remote_count=remote_count
107
+ )
108
+ else:
109
+ print("ℹ️ No changes to commit")
110
+ return GitOperationResult(
111
+ repo_path=path,
112
+ action=action.value,
113
+ success=True,
114
+ message="No changes to commit",
115
+ had_changes=False,
116
+ remote_count=remote_count
117
+ )
118
+
119
+ elif action == GitAction.push:
120
+ if not repo.remotes:
121
+ print("⚠️ No remotes configured for push")
122
+ return GitOperationResult(
123
+ repo_path=path,
124
+ action=action.value,
125
+ success=False,
126
+ message="No remotes configured",
127
+ remote_count=0
128
+ )
129
+
130
+ success = True
131
+ failed_remotes = []
132
+ for remote in repo.remotes:
133
+ try:
134
+ print(f"🚀 Pushing to {remote.url}")
135
+ remote.push(repo.active_branch.name)
136
+ print(f"✅ Pushed to {remote.name}")
137
+ except Exception as e:
138
+ print(f"❌ Failed to push to {remote.name}: {e}")
139
+ failed_remotes.append(f"{remote.name}: {str(e)}")
140
+ success = False
141
+
142
+ message = "Push successful" if success else f"Push failed for: {', '.join(failed_remotes)}"
143
+ return GitOperationResult(
144
+ repo_path=path,
145
+ action=action.value,
146
+ success=success,
147
+ message=message,
148
+ remote_count=remote_count
149
+ )
150
+
151
+ elif action == GitAction.pull:
152
+ # Use the enhanced update function with uv sync support
153
+ try:
154
+ update_repository(repo, auto_sync=auto_sync, allow_password_prompt=False)
155
+ print("✅ Pull completed")
156
+ return GitOperationResult(
157
+ repo_path=path,
158
+ action=action.value,
159
+ success=True,
160
+ message="Pull completed successfully",
161
+ remote_count=remote_count
162
+ )
163
+ except Exception as e:
164
+ print(f"❌ Pull failed: {e}")
165
+ return GitOperationResult(
166
+ repo_path=path,
167
+ action=action.value,
168
+ success=False,
169
+ message=f"Pull failed: {str(e)}",
170
+ remote_count=remote_count
171
+ )
172
+
173
+ except Exception as e:
174
+ print(f"❌ Error performing {action} on {path}: {e}")
175
+ return GitOperationResult(
176
+ repo_path=path,
177
+ action=action.value,
178
+ success=False,
179
+ message=f"Error: {str(e)}",
180
+ remote_count=remote_count
181
+ )
182
+
183
+ # This should never be reached, but just in case
184
+ return GitOperationResult(
185
+ repo_path=path,
186
+ action=action.value,
187
+ success=False,
188
+ message="Unknown error",
189
+ remote_count=remote_count
190
+ )
191
+
192
+
193
+ def print_git_operations_summary(summary: GitOperationSummary, operations_performed: list[str]) -> None:
194
+ """Print a detailed summary of git operations similar to repos_helper_record.py."""
195
+ print("\n📊 Git Operations Summary:")
196
+ print(f" Total paths processed: {summary.total_paths_processed}")
197
+ print(f" Git repositories found: {summary.git_repos_found}")
198
+ print(f" Non-git paths skipped: {summary.non_git_paths}")
199
+
200
+ # Show per-operation statistics
201
+ if "commit" in operations_performed:
202
+ print("\n💾 Commit Operations:")
203
+ print(f" Attempted: {summary.commits_attempted}")
204
+ print(f" Successful: {summary.commits_successful}")
205
+ print(f" No changes: {summary.commits_no_changes}")
206
+ print(f" Failed: {summary.commits_failed}")
207
+
208
+ if "pull" in operations_performed:
209
+ print("\n⬇️ Pull Operations:")
210
+ print(f" Attempted: {summary.pulls_attempted}")
211
+ print(f" Successful: {summary.pulls_successful}")
212
+ print(f" Failed: {summary.pulls_failed}")
213
+
214
+ if "push" in operations_performed:
215
+ print("\n🚀 Push Operations:")
216
+ print(f" Attempted: {summary.pushes_attempted}")
217
+ print(f" Successful: {summary.pushes_successful}")
218
+ print(f" Failed: {summary.pushes_failed}")
219
+
220
+ # Show repositories without remotes (important for push operations)
221
+ if summary.repos_without_remotes:
222
+ print(f"\n⚠️ WARNING: {len(summary.repos_without_remotes)} repositories have no remote configurations:")
223
+ for repo_path in summary.repos_without_remotes:
224
+ print(f" • {repo_path.name} ({repo_path})")
225
+ print(" These repositories cannot be pushed to remote servers.")
226
+ else:
227
+ if "push" in operations_performed:
228
+ print("\n✅ All repositories have remote configurations.")
229
+
230
+ # Show failed operations
231
+ if summary.failed_operations:
232
+ print(f"\n❌ FAILED OPERATIONS ({len(summary.failed_operations)} total):")
233
+
234
+ # Group failed operations by type
235
+ failed_by_action = {}
236
+ for failed_op in summary.failed_operations:
237
+ if failed_op.action not in failed_by_action:
238
+ failed_by_action[failed_op.action] = []
239
+ failed_by_action[failed_op.action].append(failed_op)
240
+
241
+ for action, failures in failed_by_action.items():
242
+ print(f"\n {action.upper()} failures ({len(failures)}):")
243
+ for failure in failures:
244
+ if not failure.is_git_repo:
245
+ print(f" • {failure.repo_path.name} ({failure.repo_path}) - Not a git repository")
246
+ else:
247
+ print(f" • {failure.repo_path.name} ({failure.repo_path}) - {failure.message}")
248
+ else:
249
+ print("\n✅ All git operations completed successfully!")
250
+
251
+ # Overall success assessment
252
+ total_failed = len(summary.failed_operations)
253
+ total_operations = (summary.commits_attempted + summary.pulls_attempted +
254
+ summary.pushes_attempted)
255
+
256
+ if total_failed == 0 and total_operations > 0:
257
+ print(f"\n🎉 SUCCESS: All {total_operations} operations completed successfully!")
258
+ elif total_operations == 0:
259
+ print("\n📝 No git operations were performed.")
260
+ else:
261
+ success_rate = ((total_operations - total_failed) / total_operations * 100) if total_operations > 0 else 0
262
+ print(f"\n⚖️ SUMMARY: {total_operations - total_failed}/{total_operations} operations succeeded ({success_rate:.1f}% success rate)")
263
+ if total_failed > 0:
264
+ print(" Review the failed operations above for details on what needs attention.")
265
+
266
+
267
+ def perform_git_operations(repos_root: PathExtended, pull: bool, commit: bool, push: bool, recursive: bool, auto_sync: bool) -> None:
268
+ """Perform git operations on all repositories and provide detailed summary."""
269
+ print(f"\n🔄 Performing Git actions on repositories @ `{repos_root}`...")
270
+
271
+ # Initialize summary tracking
272
+ summary = GitOperationSummary()
273
+ operations_performed = []
274
+
275
+ # Determine which operations to perform
276
+ if pull:
277
+ operations_performed.append("pull")
278
+ if commit:
279
+ operations_performed.append("commit")
280
+ if push:
281
+ operations_performed.append("push")
282
+
283
+ for a_path in repos_root.search("*"):
284
+ print(f"{('Handling ' + str(a_path)).center(80, '-')}")
285
+ summary.total_paths_processed += 1
286
+
287
+ # Check if this is a git repository first
288
+ from git.exc import InvalidGitRepositoryError
289
+ from git.repo import Repo
290
+
291
+ try:
292
+ repo = Repo(str(a_path), search_parent_directories=False)
293
+ summary.git_repos_found += 1
294
+
295
+ # Track repos without remotes
296
+ if len(repo.remotes) == 0:
297
+ summary.repos_without_remotes.append(a_path)
298
+
299
+ # Now perform the actual operations
300
+ if pull:
301
+ result = git_action(path=a_path, action=GitAction.pull, r=recursive, auto_sync=auto_sync)
302
+ summary.pulls_attempted += 1
303
+ if result.success:
304
+ summary.pulls_successful += 1
305
+ else:
306
+ summary.pulls_failed += 1
307
+ summary.failed_operations.append(result)
308
+
309
+ if commit:
310
+ result = git_action(a_path, action=GitAction.commit, r=recursive, auto_sync=auto_sync)
311
+ summary.commits_attempted += 1
312
+ if result.success:
313
+ if result.had_changes:
314
+ summary.commits_successful += 1
315
+ else:
316
+ summary.commits_no_changes += 1
317
+ else:
318
+ summary.commits_failed += 1
319
+ summary.failed_operations.append(result)
320
+
321
+ if push:
322
+ result = git_action(a_path, action=GitAction.push, r=recursive, auto_sync=auto_sync)
323
+ summary.pushes_attempted += 1
324
+ if result.success:
325
+ summary.pushes_successful += 1
326
+ else:
327
+ summary.pushes_failed += 1
328
+ summary.failed_operations.append(result)
329
+
330
+ except InvalidGitRepositoryError:
331
+ summary.non_git_paths += 1
332
+ pprint(f"⚠️ Skipping {a_path} because it is not a git repository.")
333
+
334
+ # Print the detailed summary
335
+ print_git_operations_summary(summary, operations_performed)
@@ -1,11 +1,11 @@
1
1
 
2
2
  import typer
3
-
3
+ from typing import Annotated
4
4
 
5
5
  def func(name: str):
6
6
  print(f"Hello, {name}! from func")
7
7
 
8
- def hello(name: str):
8
+ def hello(*, name: Annotated[str, typer.Option(..., help="Name to greet")]):
9
9
  print(f"Hello, {name}!")
10
10
 
11
11
  def main():
@@ -13,4 +13,5 @@ def main():
13
13
 
14
14
  if __name__ == "__main__":
15
15
  # typer.run(hello)
16
+ main()
16
17
  pass