machineconfig 5.58__tar.gz → 5.60__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 (422) hide show
  1. {machineconfig-5.58/src/machineconfig.egg-info → machineconfig-5.60}/PKG-INFO +2 -1
  2. {machineconfig-5.58 → machineconfig-5.60}/pyproject.toml +2 -1
  3. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_config.py +8 -0
  4. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_self.py +1 -1
  5. machineconfig-5.60/src/machineconfig/scripts/python/env_manager/__init__.py +1 -0
  6. machineconfig-5.60/src/machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  7. machineconfig-5.60/src/machineconfig/scripts/python/env_manager/path_manager_tui.py +219 -0
  8. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -14
  9. machineconfig-5.60/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +31 -0
  10. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/code.py +10 -19
  11. machineconfig-5.60/src/machineconfig/utils/meta.py +166 -0
  12. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ssh.py +58 -47
  13. {machineconfig-5.58 → machineconfig-5.60/src/machineconfig.egg-info}/PKG-INFO +2 -1
  14. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/SOURCES.txt +4 -1
  15. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/requires.txt +1 -0
  16. machineconfig-5.58/src/machineconfig/scripts/python/devops_navigator.py.backup +0 -899
  17. machineconfig-5.58/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -31
  18. {machineconfig-5.58 → machineconfig-5.60}/MANIFEST.in +0 -0
  19. {machineconfig-5.58 → machineconfig-5.60}/README.md +0 -0
  20. {machineconfig-5.58 → machineconfig-5.60}/setup.cfg +0 -0
  21. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/__init__.py +0 -0
  22. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/__init__.py +0 -0
  23. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
  24. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
  25. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/distribute.py +0 -0
  26. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/file_manager.py +0 -0
  27. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/job_params.py +0 -0
  28. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
  29. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
  30. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
  31. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
  32. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_remote.py +0 -0
  33. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/script_execution.py +0 -0
  34. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
  35. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
  36. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper.py +0 -0
  37. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_restart.py +0 -0
  38. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_with_panes.py +0 -0
  39. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_manager_helper.py +0 -0
  40. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/enhanced_command_runner.py +0 -0
  41. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
  42. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/load_balancer_helper.py +0 -0
  43. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
  44. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
  45. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
  46. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
  47. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
  48. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
  49. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
  50. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
  51. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
  52. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
  53. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
  54. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
  55. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
  56. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
  57. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
  58. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
  59. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
  60. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
  61. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
  62. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
  63. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/templates/__init__.py +0 -0
  64. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
  65. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/__init__.py +0 -0
  66. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/__init__.py +0 -0
  67. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/check_installations.py +0 -0
  68. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
  69. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
  70. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
  71. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
  72. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
  73. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
  74. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
  75. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
  76. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +0 -0
  77. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
  78. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
  79. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
  80. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
  81. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
  82. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
  83. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
  84. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
  85. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/installer_data.json +0 -0
  86. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
  87. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
  88. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
  89. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
  90. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
  91. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
  92. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
  93. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
  94. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
  95. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
  96. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
  97. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
  98. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
  99. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/package_groups.py +0 -0
  100. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
  101. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
  102. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
  103. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
  104. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/__init__.py +0 -0
  105. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
  106. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/vscode/api.py +0 -0
  107. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/vscode/sync_code.py +0 -0
  108. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
  109. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
  110. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
  111. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  112. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  113. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/logger.py +0 -0
  114. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/__init__.py +0 -0
  115. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/backup.toml +0 -0
  116. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/bash_shell_profiles.md +0 -0
  117. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_helper.py +0 -0
  118. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_links.py +0 -0
  119. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_links_export.py +0 -0
  120. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_shell_profile.py +0 -0
  121. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/mapper.toml +0 -0
  122. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/generic/shares.toml +0 -0
  123. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
  124. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
  125. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
  126. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
  127. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +0 -0
  128. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/__init__.py +0 -0
  129. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzf2g +0 -0
  130. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfag +0 -0
  131. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzffg +0 -0
  132. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfg +0 -0
  133. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfrga +0 -0
  134. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_cloud.sh +0 -0
  135. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_nfs +0 -0
  136. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_smb +0 -0
  137. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/start_docker +0 -0
  138. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/switch_ip +0 -0
  139. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/skrg +0 -0
  140. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
  141. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/z_ls +0 -0
  142. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/__init__.py +0 -0
  143. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/agents.py +0 -0
  144. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
  145. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
  146. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/initai.py +0 -0
  147. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
  148. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
  149. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
  150. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
  151. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
  152. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
  153. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
  154. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
  155. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
  156. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
  157. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
  158. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
  159. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
  160. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
  161. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
  162. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
  163. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
  164. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
  165. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
  166. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
  167. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
  168. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
  169. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
  170. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
  171. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud.py +0 -0
  172. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/__init__.py +0 -0
  173. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_copy.py +0 -0
  174. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_helpers.py +0 -0
  175. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_mount.py +0 -0
  176. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_sync.py +0 -0
  177. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/helpers2.py +0 -0
  178. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/helpers5.py +0 -0
  179. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell.py +0 -0
  180. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/__init__.py +0 -0
  181. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/pomodoro.py +0 -0
  182. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/scheduler.py +0 -0
  183. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/start_slidev.py +0 -0
  184. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/viewer.py +0 -0
  185. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/viewer_template.py +0 -0
  186. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops.py +0 -0
  187. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/__init__.py +0 -0
  188. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -0
  189. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_data.py +0 -0
  190. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -0
  191. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_repos.py +0 -0
  192. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -0
  193. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_terminal.py +0 -0
  194. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_add_identity.py +0 -0
  195. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_add_ssh_key.py +0 -0
  196. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_backup_retrieve.py +0 -0
  197. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_status.py +0 -0
  198. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_update_repos.py +0 -0
  199. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/__init__.py +0 -0
  200. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1 +0 -0
  201. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/choose_wezterm_theme.py +0 -0
  202. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_navigator.py +0 -0
  203. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
  204. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ftpx.py +0 -0
  205. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/__init__.py +0 -0
  206. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py +0 -0
  207. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json +0 -0
  208. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -0
  209. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py +0 -0
  210. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -0
  211. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -0
  212. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +0 -0
  213. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py +0 -0
  214. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -0
  215. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py +0 -0
  216. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/helpers4.py +0 -0
  217. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/prompt.txt +0 -0
  218. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/template.ps1 +0 -0
  219. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/template.sh +0 -0
  220. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  221. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/cloud_manager.py +0 -0
  222. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +0 -0
  223. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +0 -0
  224. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  225. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/__init__.py +0 -0
  226. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/grource.py +0 -0
  227. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -0
  228. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/interactive.py +0 -0
  229. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/__init__.py +0 -0
  230. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_drive +0 -0
  231. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nfs +0 -0
  232. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nfs.py +0 -0
  233. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nw_drive +0 -0
  234. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nw_drive.py +0 -0
  235. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_smb +0 -0
  236. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_ssh.py +0 -0
  237. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/onetimeshare.py +0 -0
  238. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/wifi_conn.py +0 -0
  239. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -0
  240. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/action.py +0 -0
  241. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/clone.py +0 -0
  242. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/count_lines.py +0 -0
  243. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -0
  244. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/entrypoint.py +0 -0
  245. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/record.py +0 -0
  246. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/sync.py +0 -0
  247. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/update.py +0 -0
  248. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions.py +0 -0
  249. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions_helpers/__init__.py +0 -0
  250. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions_helpers/sessions_multiprocess.py +0 -0
  251. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
  252. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
  253. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
  254. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -0
  255. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -0
  256. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -0
  257. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -0
  258. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -0
  259. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -0
  260. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1 +0 -0
  261. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/__init__.py +0 -0
  262. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/br.sh +0 -0
  263. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
  264. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/conf.toml +0 -0
  265. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/glow/glow.yml +0 -0
  266. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
  267. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/helix/config.toml +0 -0
  268. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/helix/languages.toml +0 -0
  269. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keras/keras.json +0 -0
  270. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
  271. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
  272. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
  273. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
  274. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
  275. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
  276. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
  277. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
  278. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
  279. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
  280. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/colors +0 -0
  281. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
  282. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
  283. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
  284. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
  285. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
  286. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
  287. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/icons +0 -0
  288. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/lfrc +0 -0
  289. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
  290. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  291. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  292. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
  293. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
  294. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  295. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
  296. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
  297. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
  298. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
  299. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/colors +0 -0
  300. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
  301. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/icons +0 -0
  302. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
  303. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
  304. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/lfrc +0 -0
  305. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
  306. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
  307. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
  308. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
  309. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.flake8 +0 -0
  310. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.mypy.ini +0 -0
  311. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.pylintrc +0 -0
  312. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.ruff.toml +0 -0
  313. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
  314. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
  315. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
  316. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
  317. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
  318. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/mprocs/windows/other +0 -0
  319. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/pistol/pistol.conf +0 -0
  320. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/presenterm/config.yaml +0 -0
  321. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/procs/.procs.toml +0 -0
  322. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
  323. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/rofi/config.rasi +0 -0
  324. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
  325. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
  326. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
  327. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/bash/init.sh +0 -0
  328. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
  329. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
  330. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  331. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
  332. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
  333. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
  334. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
  335. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
  336. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  337. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
  338. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
  339. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
  340. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/wt/settings.json +0 -0
  341. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/streamlit/config.toml +0 -0
  342. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/svim/linux/init.toml +0 -0
  343. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/svim/windows/init.toml +0 -0
  344. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
  345. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tere/terecd.sh +0 -0
  346. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
  347. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
  348. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/wsl/.wslconfig +0 -0
  349. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/keymap.toml +0 -0
  350. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/theme.toml +0 -0
  351. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/yazi.toml +0 -0
  352. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zed/settings.json +0 -0
  353. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/commands/monitor +0 -0
  354. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
  355. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/config.kdl +0 -0
  356. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
  357. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/hist +0 -0
  358. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
  359. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
  360. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
  361. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
  362. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/__init__.py +0 -0
  363. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps.sh +0 -0
  364. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps_desktop.sh +0 -0
  365. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps_gui.sh +0 -0
  366. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
  367. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
  368. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/ssh/openssh_all.sh +0 -0
  369. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -0
  370. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/uv.sh +0 -0
  371. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
  372. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
  373. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/__init__.py +0 -0
  374. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/apps.ps1 +0 -0
  375. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
  376. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
  377. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/power_options.ps1 +0 -0
  378. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -0
  379. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/add_identity.ps1 +0 -0
  380. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -0
  381. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/uv.ps1 +0 -0
  382. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
  383. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
  384. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/__init__.py +0 -0
  385. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/accessories.py +0 -0
  386. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ai/__init__.py +0 -0
  387. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ai/generate_file_checklist.py +0 -0
  388. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/README.md +0 -0
  389. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
  390. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
  391. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ascii_art.py +0 -0
  392. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/dbms.py +0 -0
  393. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/headers.py +0 -0
  394. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ouch/__init__.py +0 -0
  395. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ouch/decompress.py +0 -0
  396. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/read.py +0 -0
  397. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer.py +0 -0
  398. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
  399. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
  400. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer.py +0 -0
  401. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
  402. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
  403. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/io.py +0 -0
  404. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/links.py +0 -0
  405. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/notifications.py +0 -0
  406. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/options.py +0 -0
  407. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/path_extended.py +0 -0
  408. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/path_helper.py +0 -0
  409. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/procs.py +0 -0
  410. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/scheduler.py +0 -0
  411. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/scheduling.py +0 -0
  412. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
  413. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
  414. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
  415. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
  416. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/source_of_truth.py +0 -0
  417. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/terminal.py +0 -0
  418. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/upgrade_packages.py +0 -0
  419. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ve.py +0 -0
  420. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/dependency_links.txt +0 -0
  421. {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/entry_points.txt +0 -0
  422. {machineconfig-5.58 → machineconfig-5.60}/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: 5.58
3
+ Version: 5.60
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -27,6 +27,7 @@ Requires-Dist: pyjson5>=1.6.9
27
27
  Requires-Dist: questionary>=2.1.1
28
28
  Requires-Dist: typer-slim>=0.19.2
29
29
  Requires-Dist: typer>=0.19.2
30
+ Requires-Dist: textual>=6.2.1
30
31
  Provides-Extra: windows
31
32
  Requires-Dist: pywin32; extra == "windows"
32
33
  Provides-Extra: plot
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "machineconfig"
9
- version = "5.58"
9
+ version = "5.60"
10
10
  description = "Dotfiles management package"
11
11
  readme = "README.md"
12
12
  license = {text = "Apache 2.0"}
@@ -36,6 +36,7 @@ dependencies = [
36
36
  "questionary>=2.1.1",
37
37
  "typer-slim>=0.19.2",
38
38
  "typer>=0.19.2",
39
+ "textual>=6.2.1",
39
40
  ]
40
41
 
41
42
  [project.optional-dependencies]
@@ -41,6 +41,14 @@ def shell():
41
41
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
42
42
  create_default_shell_profile()
43
43
 
44
+ @config_apps.command(no_args_is_help=False)
45
+ def path():
46
+ """📚 NAVIGATE PATH variable with TUI"""
47
+ from machineconfig.scripts.python import env_manager as navigator
48
+ from pathlib import Path
49
+ path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
50
+ from machineconfig.utils.code import run_shell_script
51
+ run_shell_script(f"uv run --no-dev --with machineconfig,textual {path}")
44
52
 
45
53
  @config_apps.command(no_args_is_help=False)
46
54
  def pwsh_theme():
@@ -42,7 +42,7 @@ def navigate():
42
42
  from pathlib import Path
43
43
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
44
44
  from machineconfig.utils.code import run_shell_script
45
- run_shell_script(f"uv run --with machineconfig {path}")
45
+ run_shell_script(f"uv run --no-dev --with machineconfig,textual {path}")
46
46
 
47
47
 
48
48
  @cli_app.command(no_args_is_help=True)
@@ -0,0 +1,47 @@
1
+ """Cross-platform PATH explorer backend."""
2
+
3
+ import os
4
+ import platform
5
+ from pathlib import Path
6
+ from typing import Literal
7
+
8
+
9
+ PlatformType = Literal["Windows", "Linux", "Darwin"]
10
+
11
+
12
+ def get_platform() -> PlatformType:
13
+ """Get the current platform."""
14
+ return platform.system() # type: ignore[return-value]
15
+
16
+
17
+ def get_path_entries() -> list[str]:
18
+ """Get all PATH entries for the current platform."""
19
+ path_str = os.environ.get("PATH", "")
20
+ separator = ";" if get_platform() == "Windows" else ":"
21
+ return [entry for entry in path_str.split(separator) if entry.strip()]
22
+
23
+
24
+ def get_directory_contents(directory: str, max_items: int = 50) -> list[str]:
25
+ """Get contents of a directory, limited to max_items."""
26
+ try:
27
+ path = Path(directory)
28
+ if not path.exists():
29
+ return ["⚠️ Directory does not exist"]
30
+ if not path.is_dir():
31
+ return ["⚠️ Not a directory"]
32
+
33
+ items = []
34
+ for item in sorted(path.iterdir(), key=lambda p: (not p.is_dir(), p.name.lower())):
35
+ if len(items) >= max_items:
36
+ items.append(f"... and {sum(1 for _ in path.iterdir()) - max_items} more items")
37
+ break
38
+ prefix = "📁 " if item.is_dir() else "📄 "
39
+ items.append(f"{prefix}{item.name}")
40
+
41
+ if not items:
42
+ return ["📭 Empty directory"]
43
+ return items
44
+ except PermissionError:
45
+ return ["⚠️ Permission denied"]
46
+ except Exception as e:
47
+ return [f"⚠️ Error: {e!s}"]
@@ -0,0 +1,219 @@
1
+ """Cross-platform PATH explorer with Textual TUI."""
2
+
3
+ from pathlib import Path
4
+
5
+ from textual import on
6
+ from textual.app import App, ComposeResult
7
+ from textual.binding import Binding
8
+ from textual.containers import Horizontal, Vertical
9
+ from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
10
+
11
+ from machineconfig.scripts.python.env_manager.path_manager_backend import get_directory_contents, get_path_entries, get_platform
12
+
13
+
14
+ class DirectoryPreview(Static):
15
+ """Widget to display directory contents."""
16
+
17
+ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
18
+ super().__init__(*args, **kwargs)
19
+ self.border_title = "📂 Directory Preview"
20
+
21
+ def update_preview(self, directory: str) -> None:
22
+ """Update the preview with directory contents."""
23
+ if not directory:
24
+ self.update("Select a PATH entry to preview its contents")
25
+ return
26
+
27
+ contents = get_directory_contents(directory, max_items=30)
28
+ preview_text = f"[bold cyan]{directory}[/bold cyan]\n\n"
29
+ preview_text += "\n".join(contents)
30
+ self.update(preview_text)
31
+
32
+
33
+ class StatusBar(Static):
34
+ """Status bar to show messages."""
35
+
36
+ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
37
+ super().__init__(*args, **kwargs)
38
+ self.border_title = "ℹ️ Status"
39
+
40
+ def show_message(self, message: str, message_type: str = "info") -> None:
41
+ """Display a status message."""
42
+ color = {"info": "cyan", "success": "green", "error": "red", "warning": "yellow"}.get(message_type, "white")
43
+ self.update(f"[{color}]{message}[/{color}]")
44
+
45
+
46
+ class PathExplorerApp(App[None]):
47
+ """A Textual app to explore PATH entries."""
48
+
49
+ CSS = """
50
+ Screen {
51
+ background: $surface;
52
+ }
53
+
54
+ Header {
55
+ background: $primary;
56
+ color: $text;
57
+ }
58
+
59
+ Footer {
60
+ background: $panel;
61
+ }
62
+
63
+ #main-container {
64
+ height: 100%;
65
+ }
66
+
67
+ #left-panel {
68
+ width: 50%;
69
+ height: 100%;
70
+ border: solid $primary;
71
+ padding: 1;
72
+ }
73
+
74
+ #right-panel {
75
+ width: 50%;
76
+ height: 100%;
77
+ border: solid $accent;
78
+ padding: 1;
79
+ }
80
+
81
+ ListView {
82
+ height: 1fr;
83
+ border: solid $accent;
84
+ background: $surface;
85
+ }
86
+
87
+ ListView > ListItem {
88
+ padding: 0 1;
89
+ }
90
+
91
+ ListView > ListItem.--highlight {
92
+ background: $accent 20%;
93
+ }
94
+
95
+ DirectoryPreview {
96
+ height: 1fr;
97
+ border: solid $primary;
98
+ background: $surface;
99
+ padding: 1;
100
+ overflow-y: auto;
101
+ }
102
+
103
+ StatusBar {
104
+ height: 3;
105
+ border: solid $success;
106
+ background: $surface;
107
+ padding: 1;
108
+ }
109
+
110
+ Label {
111
+ padding: 0 1;
112
+ height: auto;
113
+ }
114
+ """
115
+
116
+ BINDINGS = [
117
+ Binding("q", "quit", "Quit", show=True),
118
+ Binding("r", "refresh", "Refresh", show=True),
119
+ Binding("c", "copy_path", "Copy Path", show=True),
120
+ ]
121
+
122
+ def __init__(self) -> None:
123
+ super().__init__()
124
+ self.selected_path: str = ""
125
+
126
+ def compose(self) -> ComposeResult:
127
+ """Create child widgets for the app."""
128
+ platform_name = get_platform()
129
+ yield Header(show_clock=True)
130
+
131
+ with Horizontal(id="main-container"):
132
+ with Vertical(id="left-panel"):
133
+ yield Label(f"🔧 PATH Entries ({platform_name})")
134
+ yield ListView(id="path-list")
135
+
136
+ with Vertical(id="right-panel"):
137
+ yield DirectoryPreview(id="preview")
138
+ yield StatusBar(id="status")
139
+
140
+ yield Footer()
141
+
142
+ def on_mount(self) -> None:
143
+ """Initialize the app when mounted."""
144
+ self.title = "PATH Explorer"
145
+ self.sub_title = f"Platform: {get_platform()}"
146
+ self.refresh_path_list()
147
+ self.query_one("#status", StatusBar).show_message("Ready. Select a PATH entry to preview its contents.", "info")
148
+
149
+ def refresh_path_list(self) -> None:
150
+ """Refresh the list of PATH entries."""
151
+ list_view = self.query_one("#path-list", ListView)
152
+ list_view.clear()
153
+
154
+ entries = get_path_entries()
155
+ for entry in entries:
156
+ path = Path(entry)
157
+ exists = path.exists()
158
+ icon = "✅" if exists else "❌"
159
+ item = ListItem(Label(f"{icon} {entry}"))
160
+ item.set_class(exists, "--valid")
161
+ list_view.append(item)
162
+
163
+ self.query_one("#status", StatusBar).show_message(f"Loaded {len(entries)} PATH entries", "success")
164
+
165
+ @on(ListView.Highlighted)
166
+ def handle_highlight(self, event: ListView.Highlighted) -> None:
167
+ """Handle highlighting of a PATH entry (scroll preview)."""
168
+ if event.item is None:
169
+ return
170
+ label = event.item.query_one(Label)
171
+ text = label.render()
172
+ # Remove the icon prefix
173
+ highlighted_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
174
+
175
+ preview = self.query_one("#preview", DirectoryPreview)
176
+ preview.update_preview(highlighted_path)
177
+
178
+ self.query_one("#status", StatusBar).show_message(f"Previewing: {highlighted_path}", "info")
179
+
180
+ @on(ListView.Selected)
181
+ def handle_selection(self, event: ListView.Selected) -> None:
182
+ """Handle selection of a PATH entry (Enter key)."""
183
+ label = event.item.query_one(Label)
184
+ text = label.render()
185
+ # Remove the icon prefix
186
+ self.selected_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
187
+
188
+ preview = self.query_one("#preview", DirectoryPreview)
189
+ preview.update_preview(self.selected_path)
190
+
191
+ self.query_one("#status", StatusBar).show_message(f"Selected: {self.selected_path}", "success")
192
+
193
+ def action_refresh(self) -> None:
194
+ """Refresh the PATH list."""
195
+ self.refresh_path_list()
196
+
197
+ def action_copy_path(self) -> None:
198
+ """Copy selected path to clipboard."""
199
+ if not self.selected_path:
200
+ self.query_one("#status", StatusBar).show_message("No PATH entry selected", "warning")
201
+ return
202
+
203
+ # Try to copy to clipboard
204
+ try:
205
+ import pyperclip
206
+ pyperclip.copy(self.selected_path)
207
+ self.query_one("#status", StatusBar).show_message(f"Copied to clipboard: {self.selected_path}", "success")
208
+ except ImportError:
209
+ self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
210
+
211
+
212
+ def main() -> None:
213
+ """Run the PATH Explorer TUI."""
214
+ app = PathExplorerApp()
215
+ app.run()
216
+
217
+
218
+ if __name__ == "__main__":
219
+ main()
@@ -11,7 +11,6 @@ from machineconfig.utils.code import get_shell_file_executing_python_script, wri
11
11
  import platform
12
12
  import subprocess
13
13
  from typing import Optional, Literal
14
- from pathlib import Path
15
14
 
16
15
 
17
16
  console = Console()
@@ -96,13 +95,14 @@ git pull originEnc master
96
95
 
97
96
  # ================================================================================
98
97
  option1 = "Delete remote copy and push local:"
99
- program_1_py = f"""
100
- from machineconfig.scripts.python.helpers.repo_sync_helpers import delete_remote_repo_copy_and_push_local as func
101
- func(remote_repo=r'{str(repo_remote_root)}', local_repo=r'{str(repo_local_root)}', cloud=r'{cloud_resolved}')
102
- """
103
- shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
98
+ def func2(remote_repo: str, local_repo: str, cloud: str):
99
+ from machineconfig.scripts.python.repos_helpers.sync import delete_remote_repo_copy_and_push_local
100
+ delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
101
+ return "done"
102
+ from machineconfig.utils.meta import function_to_script
103
+ program_1_py = function_to_script(func=func2, call_with_args=None, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
104
+ shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable="uv run --with machineconfig")
104
105
  # ================================================================================
105
-
106
106
  option2 = "Delete local repo and replace it with remote copy:"
107
107
  program_2 = f"""
108
108
  rm -rfd {repo_local_root}
@@ -114,16 +114,15 @@ sudo chmod 600 $HOME/.ssh/*
114
114
  sudo chmod 700 $HOME/.ssh
115
115
  sudo chmod +x $HOME/dotfiles/scripts/linux -R
116
116
  """
117
-
118
117
  shell_file_2 = write_shell_script_to_file(shell_script=program_2)
119
-
120
118
  # ================================================================================
121
119
  option3 = "Inspect repos:"
122
- program_3_py = f"""
123
- from machineconfig.scripts.python.helper.repo_sync_helpers import inspect_repos as func
124
- func(repo_local_root=r'{str(repo_local_root)}', repo_remote_root=r'{str(repo_remote_root)}')
125
- """
126
- shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
120
+ def func(repo_local_root: str, repo_remote_root: str):
121
+ from machineconfig.scripts.python.repos_helpers.sync import inspect_repos
122
+ inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
123
+ return "done"
124
+ program_3_py = function_to_script(func=func, call_with_args=None, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
125
+ shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable="uv run --with machineconfig")
127
126
  # ================================================================================
128
127
 
129
128
  option4 = "Remove problematic rclone file from repo and replace with remote:"
@@ -0,0 +1,31 @@
1
+
2
+
3
+ iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
+ function devops {
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig devops $args
6
+ }
7
+
8
+ function cloud {
9
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig cloud $args
10
+ }
11
+
12
+ function croshell {
13
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig croshell $args
14
+ }
15
+
16
+ function agents {
17
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig agents $args
18
+ }
19
+
20
+ function fire {
21
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig fire $args
22
+ }
23
+
24
+ function ftpx {
25
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig ftpx $args
26
+ }
27
+
28
+ function sessions {
29
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig sessions $args
30
+ }
31
+
@@ -10,14 +10,16 @@ from machineconfig.utils.ve import get_ve_activate_line
10
10
  from machineconfig.utils.path_extended import PathExtended
11
11
 
12
12
 
13
- def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: str, strict_execution: bool = True):
14
- if func is None:
15
- exec_line = f"""python {python_file}"""
16
- else:
17
- exec_line = f"""python -m fire {python_file} {func}"""
13
+ def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
14
+ if executable is None: exe_resolved = "python"
15
+ else: exe_resolved = executable
16
+ if func is None: exec_line = f"""{exe_resolved} {python_file}"""
17
+ else: exec_line = f"""{exe_resolved} -m fire {python_file} {func}"""
18
+ if ve_path is None: ve_activate_line = ""
19
+ else: ve_activate_line = get_ve_activate_line(ve_path)
18
20
  shell_script = f"""
19
21
  echo "Executing `{exec_line}`"
20
- {get_ve_activate_line(ve_path)}
22
+ {ve_activate_line}
21
23
  {exec_line}
22
24
  deactivate || true
23
25
  """
@@ -31,7 +33,7 @@ deactivate || true
31
33
  return shell_script
32
34
 
33
35
 
34
- def get_shell_file_executing_python_script(python_script: str, ve_path: str, verbose: bool = True):
36
+ def get_shell_file_executing_python_script(python_script: str, ve_path: Optional[str], executable: Optional[str], verbose: bool = True):
35
37
  if verbose:
36
38
  python_script = f"""
37
39
  code = r'''{python_script}'''
@@ -47,7 +49,7 @@ except ImportError:
47
49
  python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
48
50
  python_file.parent.mkdir(parents=True, exist_ok=True)
49
51
  python_file.write_text(python_script, encoding="utf-8")
50
- shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path)
52
+ shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path, executable=executable)
51
53
  shell_file = write_shell_script_to_file(shell_script)
52
54
  return shell_file
53
55
 
@@ -132,14 +134,3 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
132
134
  temp_script_path.unlink(missing_ok=True)
133
135
  console.print(f"🗑️ [blue]Temporary script deleted:[/blue] [green]{temp_script_path}[/green]")
134
136
  return proc
135
-
136
-
137
- # def run_command(command: str, description: str) -> bool:
138
- # """Execute a shell command and return success status."""
139
- # console.print(f"\n🔧 {description}", style="bold cyan")
140
- # try:
141
- # result = subprocess.run(command, shell=True, check=True, capture_output=False)
142
- # return result.returncode == 0
143
- # except subprocess.CalledProcessError as e:
144
- # console.print(f"❌ Error executing command: {e}", style="bold red")
145
- # return False
@@ -0,0 +1,166 @@
1
+ """Metaprogramming utilities for analyzing and serializing Python functions."""
2
+
3
+ import ast
4
+ import inspect
5
+ import textwrap
6
+ from types import FunctionType, ModuleType
7
+ from typing import Any
8
+
9
+
10
+ def function_to_script(func: FunctionType, call_with_args: tuple[Any, ...] | None = None, call_with_kwargs: dict[str, Any] | None = None) -> str:
11
+ """Convert a function to a standalone executable Python script.
12
+
13
+ This function analyzes a given function and generates a complete Python script
14
+ that includes all necessary imports, global variables, the function definition,
15
+ and optionally a function call.
16
+
17
+ Args:
18
+ func: The function to convert to a script
19
+ call_with_args: Optional tuple of positional arguments to call the function with
20
+ call_with_kwargs: Optional dict of keyword arguments to call the function with
21
+
22
+ Returns:
23
+ A complete Python script as a string that can be executed independently
24
+
25
+ Raises:
26
+ ValueError: If the function cannot be inspected or analyzed
27
+ """
28
+ if not callable(func) or not hasattr(func, '__code__'):
29
+ raise ValueError(f"Expected a function, got {type(func)}")
30
+
31
+ call_with_args = call_with_args or ()
32
+ call_with_kwargs = call_with_kwargs or {}
33
+
34
+ imports = _extract_imports(func)
35
+ globals_needed = _extract_globals(func)
36
+ source_code = _get_function_source(func)
37
+ call_statement = _generate_call_statement(func, call_with_args, call_with_kwargs)
38
+
39
+ script_parts: list[str] = []
40
+
41
+ if imports:
42
+ script_parts.append(imports)
43
+ script_parts.append("")
44
+
45
+ if globals_needed:
46
+ script_parts.append(globals_needed)
47
+ script_parts.append("")
48
+
49
+ script_parts.append(source_code)
50
+ script_parts.append("")
51
+
52
+ if call_statement:
53
+ script_parts.append("")
54
+ script_parts.append("if __name__ == '__main__':")
55
+ script_parts.append(f" {call_statement}")
56
+
57
+ return "\n".join(script_parts)
58
+
59
+
60
+ def _get_function_source(func: FunctionType) -> str:
61
+ """Extract the source code of a function."""
62
+ try:
63
+ source = inspect.getsource(func)
64
+ return textwrap.dedent(source)
65
+ except (OSError, TypeError) as e:
66
+ raise ValueError(f"Cannot get source code for function {func.__name__}: {e}") from e
67
+
68
+
69
+ def _extract_imports(func: FunctionType) -> str:
70
+ """Extract all import statements needed by the function."""
71
+ import_statements: set[str] = set()
72
+
73
+ source = _get_function_source(func)
74
+ func_globals = func.__globals__
75
+
76
+ try:
77
+ tree = ast.parse(source)
78
+ except SyntaxError as e:
79
+ raise ValueError(f"Failed to parse function source: {e}") from e
80
+
81
+ used_names: set[str] = set()
82
+ for node in ast.walk(tree):
83
+ if isinstance(node, ast.Name):
84
+ used_names.add(node.id)
85
+ elif isinstance(node, ast.Attribute):
86
+ if isinstance(node.value, ast.Name):
87
+ used_names.add(node.value.id)
88
+
89
+ for name in used_names:
90
+ if name in func_globals:
91
+ obj = func_globals[name]
92
+
93
+ if isinstance(obj, ModuleType):
94
+ module_name = obj.__name__
95
+ if name == module_name.split('.')[-1]:
96
+ import_statements.add(f"import {module_name}")
97
+ else:
98
+ import_statements.add(f"import {module_name} as {name}")
99
+
100
+ elif hasattr(obj, '__module__') and obj.__module__ != '__main__':
101
+ try:
102
+ module_name = obj.__module__
103
+ obj_name = obj.__name__ if hasattr(obj, '__name__') else name
104
+
105
+ if module_name and module_name != 'builtins':
106
+ if obj_name == name:
107
+ import_statements.add(f"from {module_name} import {obj_name}")
108
+ else:
109
+ import_statements.add(f"from {module_name} import {obj_name} as {name}")
110
+ except AttributeError:
111
+ pass
112
+
113
+ return "\n".join(sorted(import_statements))
114
+
115
+
116
+ def _extract_globals(func: FunctionType) -> str:
117
+ """Extract global variables needed by the function."""
118
+ global_assignments: list[str] = []
119
+
120
+ source = _get_function_source(func)
121
+ func_globals = func.__globals__
122
+
123
+ try:
124
+ tree = ast.parse(source)
125
+ except SyntaxError as e:
126
+ raise ValueError(f"Failed to parse function source: {e}") from e
127
+
128
+ used_names: set[str] = set()
129
+ for node in ast.walk(tree):
130
+ if isinstance(node, ast.Name):
131
+ used_names.add(node.id)
132
+ elif isinstance(node, ast.Attribute):
133
+ if isinstance(node.value, ast.Name):
134
+ used_names.add(node.value.id)
135
+
136
+ for name in used_names:
137
+ if name in func_globals:
138
+ obj = func_globals[name]
139
+
140
+ if not isinstance(obj, (ModuleType, FunctionType, type)):
141
+ if not (hasattr(obj, '__module__') and hasattr(obj, '__name__')):
142
+ try:
143
+ repr_str = repr(obj)
144
+ if len(repr_str) < 1000 and '\n' not in repr_str:
145
+ global_assignments.append(f"{name} = {repr_str}")
146
+ except Exception:
147
+ global_assignments.append(f"# Warning: Could not serialize global variable '{name}'")
148
+
149
+ return "\n".join(global_assignments)
150
+
151
+
152
+ def _generate_call_statement(func: FunctionType, args: tuple[Any, ...], kwargs: dict[str, Any]) -> str:
153
+ """Generate a function call statement with the given arguments."""
154
+ if not args and not kwargs:
155
+ return f"{func.__name__}()"
156
+
157
+ arg_parts: list[str] = []
158
+
159
+ for arg in args:
160
+ arg_parts.append(repr(arg))
161
+
162
+ for key, value in kwargs.items():
163
+ arg_parts.append(f"{key}={repr(value)}")
164
+
165
+ args_str = ", ".join(arg_parts)
166
+ return f"{func.__name__}({args_str})"