machineconfig 6.52__tar.gz → 6.54__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 (446) hide show
  1. {machineconfig-6.52/src/machineconfig.egg-info → machineconfig-6.54}/PKG-INFO +1 -1
  2. {machineconfig-6.52 → machineconfig-6.54}/pyproject.toml +2 -1
  3. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/utils/maker.py +9 -12
  4. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_utils.py +43 -0
  5. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +31 -27
  6. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/sync.py +5 -5
  7. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/code.py +37 -85
  8. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer.py +1 -1
  9. machineconfig-6.54/src/machineconfig/utils/meta.py +188 -0
  10. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/scheduling.py +0 -1
  11. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ssh.py +50 -49
  12. {machineconfig-6.52 → machineconfig-6.54/src/machineconfig.egg-info}/PKG-INFO +1 -1
  13. machineconfig-6.52/src/machineconfig/utils/meta.py +0 -434
  14. {machineconfig-6.52 → machineconfig-6.54}/MANIFEST.in +0 -0
  15. {machineconfig-6.52 → machineconfig-6.54}/README.md +0 -0
  16. {machineconfig-6.52 → machineconfig-6.54}/setup.cfg +0 -0
  17. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/__init__.py +0 -0
  18. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/__init__.py +0 -0
  19. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
  20. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
  21. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/distribute.py +0 -0
  22. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/file_manager.py +0 -0
  23. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/job_params.py +0 -0
  24. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
  25. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
  26. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
  27. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
  28. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_remote.py +0 -0
  29. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/script_execution.py +0 -0
  30. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
  31. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
  32. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/helpers/enhanced_command_runner.py +0 -0
  33. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +0 -0
  34. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
  35. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
  36. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
  37. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
  38. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
  39. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
  40. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
  41. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
  42. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
  43. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
  44. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
  45. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
  46. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
  47. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
  48. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
  49. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
  50. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
  51. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
  52. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
  53. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
  54. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
  55. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +0 -0
  56. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +0 -0
  57. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +0 -0
  58. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +0 -0
  59. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/templates/__init__.py +0 -0
  60. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
  61. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/__init__.py +0 -0
  62. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/__init__.py +0 -0
  63. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/check_installations.py +0 -0
  64. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
  65. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
  66. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
  67. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
  68. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
  69. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
  70. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
  71. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
  72. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +0 -0
  73. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
  74. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
  75. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
  76. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
  77. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
  78. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
  79. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
  80. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
  81. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/installer_data.json +0 -0
  82. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
  83. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
  84. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
  85. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
  86. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
  87. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
  88. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
  89. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
  90. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
  91. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
  92. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
  93. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
  94. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
  95. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/package_groups.py +0 -0
  96. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
  97. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
  98. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
  99. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
  100. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/__init__.py +0 -0
  101. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
  102. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/vscode/api.py +0 -0
  103. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
  104. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
  105. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
  106. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  107. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  108. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/logger.py +0 -0
  109. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/__init__.py +0 -0
  110. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/backup.toml +0 -0
  111. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/bash_shell_profiles.md +0 -0
  112. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_helper.py +0 -0
  113. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_links.py +0 -0
  114. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_links_export.py +0 -0
  115. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_shell_profile.py +0 -0
  116. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/mapper.toml +0 -0
  117. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/generic/shares.toml +0 -0
  118. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
  119. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
  120. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
  121. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
  122. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +0 -0
  123. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/__init__.py +0 -0
  124. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzf2g +0 -0
  125. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfag +0 -0
  126. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzffg +0 -0
  127. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfg +0 -0
  128. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfrga +0 -0
  129. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_cloud.sh +0 -0
  130. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_nfs +0 -0
  131. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_smb +0 -0
  132. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/start_docker +0 -0
  133. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/switch_ip +0 -0
  134. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/skrg +0 -0
  135. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
  136. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/z_ls +0 -0
  137. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/__init__.py +0 -0
  138. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/agents.py +0 -0
  139. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
  140. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/command_runner/command_runner.sh +0 -0
  141. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -0
  142. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
  143. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/initai.py +0 -0
  144. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
  145. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
  146. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
  147. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
  148. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
  149. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
  150. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
  151. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
  152. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
  153. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
  154. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
  155. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
  156. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
  157. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
  158. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
  159. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
  160. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
  161. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
  162. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
  163. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
  164. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
  165. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
  166. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
  167. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
  168. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/vscode_tasks.py +0 -0
  169. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/cloud.py +0 -0
  170. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/croshell.py +0 -0
  171. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/devops.py +0 -0
  172. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/devops_navigator.py +0 -0
  173. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/entry.py +0 -0
  174. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/__init__.py +0 -0
  175. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/path_manager_backend.py +0 -0
  176. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/path_manager_tui.py +0 -0
  177. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
  178. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ftpx.py +0 -0
  179. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/__init__.py +0 -0
  180. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_copy.py +0 -0
  181. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +0 -0
  182. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_mount.py +0 -0
  183. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_sync.py +0 -0
  184. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/helpers2.py +0 -0
  185. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/helpers5.py +0 -0
  186. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/__init__.py +0 -0
  187. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/crosh.py +0 -0
  188. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/pomodoro.py +0 -0
  189. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/scheduler.py +0 -0
  190. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/start_slidev.py +0 -0
  191. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/viewer.py +0 -0
  192. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/viewer_template.py +0 -0
  193. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/__init__.py +0 -0
  194. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_config.py +0 -0
  195. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -0
  196. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_data.py +0 -0
  197. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -0
  198. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -0
  199. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_self.py +0 -0
  200. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -0
  201. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_terminal.py +0 -0
  202. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -0
  203. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_status.py +0 -0
  204. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_update_repos.py +0 -0
  205. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/__init__.py +0 -0
  206. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +0 -0
  207. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +0 -0
  208. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/__init__.py +0 -0
  209. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py +0 -0
  210. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json +0 -0
  211. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -0
  212. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py +0 -0
  213. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -0
  214. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -0
  215. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +0 -0
  216. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py +0 -0
  217. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -0
  218. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py +0 -0
  219. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/helpers4.py +0 -0
  220. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/prompt.txt +0 -0
  221. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/template.ps1 +0 -0
  222. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/template.sh +0 -0
  223. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  224. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/cloud_manager.py +0 -0
  225. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +0 -0
  226. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +0 -0
  227. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  228. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/__init__.py +0 -0
  229. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_builder.py +0 -0
  230. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -0
  231. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -0
  232. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/data_models.py +0 -0
  233. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/main_app.py +0 -0
  234. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/search_bar.py +0 -0
  235. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/action.py +0 -0
  236. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/clone.py +0 -0
  237. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/count_lines.py +0 -0
  238. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -0
  239. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -0
  240. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/grource.py +0 -0
  241. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/record.py +0 -0
  242. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -0
  243. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/update.py +0 -0
  244. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  245. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +0 -0
  246. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/interactive.py +0 -0
  247. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/__init__.py +0 -0
  248. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/add_ssh_key.py +0 -0
  249. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/devops_add_identity.py +0 -0
  250. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -0
  251. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_drive +0 -0
  252. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nfs +0 -0
  253. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nfs.py +0 -0
  254. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nw_drive +0 -0
  255. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nw_drive.py +0 -0
  256. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_smb +0 -0
  257. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_ssh.py +0 -0
  258. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/onetimeshare.py +0 -0
  259. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -0
  260. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -0
  261. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/wifi_conn.py +0 -0
  262. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -0
  263. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/sessions.py +0 -0
  264. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
  265. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
  266. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
  267. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -0
  268. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -0
  269. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -0
  270. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -0
  271. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -0
  272. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -0
  273. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1 +0 -0
  274. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/__init__.py +0 -0
  275. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/br.sh +0 -0
  276. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
  277. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/conf.toml +0 -0
  278. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/glow/glow.yml +0 -0
  279. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
  280. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/helix/config.toml +0 -0
  281. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/helix/languages.toml +0 -0
  282. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keras/keras.json +0 -0
  283. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
  284. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
  285. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
  286. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
  287. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
  288. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
  289. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
  290. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
  291. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
  292. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
  293. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/colors +0 -0
  294. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
  295. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
  296. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
  297. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
  298. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
  299. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
  300. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/icons +0 -0
  301. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/lfrc +0 -0
  302. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
  303. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  304. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  305. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
  306. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
  307. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  308. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
  309. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
  310. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
  311. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
  312. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/colors +0 -0
  313. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
  314. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/icons +0 -0
  315. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
  316. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
  317. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/lfrc +0 -0
  318. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
  319. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
  320. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
  321. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
  322. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.flake8 +0 -0
  323. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.mypy.ini +0 -0
  324. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.pylintrc +0 -0
  325. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.ruff.toml +0 -0
  326. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
  327. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
  328. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
  329. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
  330. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/marimo/marimo.toml +0 -0
  331. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
  332. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/mprocs/windows/other +0 -0
  333. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/pistol/pistol.conf +0 -0
  334. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/presenterm/config.yaml +0 -0
  335. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/procs/.procs.toml +0 -0
  336. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
  337. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/rofi/config.rasi +0 -0
  338. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
  339. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
  340. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
  341. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/bash/init.sh +0 -0
  342. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
  343. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
  344. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  345. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
  346. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
  347. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
  348. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
  349. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
  350. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  351. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
  352. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
  353. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
  354. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/wt/settings.json +0 -0
  355. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/streamlit/config.toml +0 -0
  356. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/svim/linux/init.toml +0 -0
  357. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/svim/windows/init.toml +0 -0
  358. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
  359. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tere/terecd.sh +0 -0
  360. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
  361. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
  362. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/wsl/.wslconfig +0 -0
  363. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/keymap.toml +0 -0
  364. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/theme.toml +0 -0
  365. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/yazi.toml +0 -0
  366. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zed/settings.json +0 -0
  367. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/commands/monitor +0 -0
  368. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
  369. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/config.kdl +0 -0
  370. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
  371. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/hist +0 -0
  372. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
  373. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
  374. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
  375. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
  376. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/__init__.py +0 -0
  377. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps.sh +0 -0
  378. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps_desktop.sh +0 -0
  379. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps_gui.sh +0 -0
  380. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
  381. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
  382. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/ssh/openssh_all.sh +0 -0
  383. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -0
  384. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/uv.sh +0 -0
  385. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
  386. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
  387. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/__init__.py +0 -0
  388. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/apps.sh +0 -0
  389. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/ssh/openssh_setup.sh +0 -0
  390. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/uv.sh +0 -0
  391. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/__init__.py +0 -0
  392. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/apps.ps1 +0 -0
  393. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
  394. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
  395. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/power_options.ps1 +0 -0
  396. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -0
  397. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/add_identity.ps1 +0 -0
  398. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -0
  399. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/uv.ps1 +0 -0
  400. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -0
  401. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
  402. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
  403. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/__init__.py +0 -0
  404. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/accessories.py +0 -0
  405. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ai/__init__.py +0 -0
  406. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/README.md +0 -0
  407. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
  408. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
  409. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/fat_croco.txt +0 -0
  410. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/halfwit_croco.txt +0 -0
  411. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/happy_croco.txt +0 -0
  412. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/water_croco.txt +0 -0
  413. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ascii_art.py +0 -0
  414. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/dbms.py +0 -0
  415. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/headers.py +0 -0
  416. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ouch/__init__.py +0 -0
  417. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ouch/decompress.py +0 -0
  418. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/read.py +0 -0
  419. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
  420. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
  421. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer.py +0 -0
  422. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
  423. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
  424. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/io.py +0 -0
  425. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/links.py +0 -0
  426. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/notifications.py +0 -0
  427. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/options.py +0 -0
  428. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/path_extended.py +0 -0
  429. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/path_helper.py +0 -0
  430. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/procs.py +0 -0
  431. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/scheduler.py +0 -0
  432. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
  433. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
  434. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
  435. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
  436. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/source_of_truth.py +0 -0
  437. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ssh_utils/utils.py +0 -0
  438. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/terminal.py +0 -0
  439. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/tst.py +0 -0
  440. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/upgrade_packages.py +0 -0
  441. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ve.py +0 -0
  442. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/SOURCES.txt +0 -0
  443. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/dependency_links.txt +0 -0
  444. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/entry_points.txt +0 -0
  445. {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/requires.txt +0 -0
  446. {machineconfig-6.52 → machineconfig-6.54}/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: 6.52
3
+ Version: 6.54
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 = "6.52"
9
+ version = "6.54"
10
10
  description = "Dotfiles management package"
11
11
  readme = "README.md"
12
12
  license = {text = "Apache 2.0"}
@@ -99,6 +99,7 @@ dev = [
99
99
  "pre-commit>=4.3.0",
100
100
  "pudb>=2025.1",
101
101
  "pylint>=3.3.8",
102
+ "pypdf>=6.1.1",
102
103
  "pyrefly>=0.33.1",
103
104
  "pyright>=1.1.405",
104
105
  "pytest>=8.4.2",
@@ -1,24 +1,21 @@
1
1
 
2
2
  from types import FunctionType
3
- from typing import Literal
3
+ from typing import Optional, Literal
4
4
  from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
5
5
  from pathlib import Path
6
6
 
7
- def get_fire_command_and_artifact_files(func: FunctionType):
8
- from machineconfig.utils.meta import function_to_script
9
- py_script = function_to_script(func, call_with_kwargs=None)
10
- from machineconfig.utils.accessories import randstr
11
- py_script_path = Path.home().joinpath("tmp_results", "tmp_py_scripts", f"tmp_{randstr(10)}.py")
12
- py_script_path.parent.mkdir(parents=True, exist_ok=True)
13
- py_script_path.write_text(py_script, encoding="utf-8")
14
- command_to_run = f"uv run --project $HOME/ {py_script_path}"
7
+ def get_fire_tab_using_uv(func: FunctionType, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
8
+ from machineconfig.utils.meta import lambda_to_defstring
9
+ py_script = lambda_to_defstring(lmb=lambda: func, in_global=True)
10
+ from machineconfig.utils.code import get_uv_command_executing_python_script
11
+ command_to_run, py_script_path = get_uv_command_executing_python_script(python_script=py_script, uv_with=uv_with, uv_project_dir=uv_project_dir)
15
12
  tab_config: TabConfig = {
16
13
  "command": command_to_run,
17
14
  "startDir": "$HOME",
18
15
  "tabName": func.__name__
19
16
  }
20
17
  return tab_config, py_script_path
21
- def get_fire_command_and_artifact_files_v2(func: FunctionType):
18
+ def get_fire_tab_using_fire(func: FunctionType):
22
19
  import inspect
23
20
  path = Path(inspect.getfile(func))
24
21
  path_relative = path.relative_to(Path.home())
@@ -36,10 +33,10 @@ def make_layout_from_functions(functions: list[FunctionType], tab_configs: list[
36
33
  for a_func in functions:
37
34
  match method:
38
35
  case "script":
39
- tab_config, artifact_files_1 = get_fire_command_and_artifact_files(a_func)
36
+ tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, uv_with=None, uv_project_dir=None)
40
37
  artifact_files = [artifact_files_1]
41
38
  case "fire":
42
- tab_config = get_fire_command_and_artifact_files_v2(a_func)
39
+ tab_config = get_fire_tab_using_fire(a_func)
43
40
  artifact_files = []
44
41
  tabs2artifacts.append((tab_config, artifact_files))
45
42
  list_of_tabs = [tab for tab, _ in tabs2artifacts] + tab_configs
@@ -78,8 +78,51 @@ def download(
78
78
  raise typer.Exit(code=1)
79
79
 
80
80
 
81
+ def merge_pdfs(
82
+ pdf1: Annotated[str, typer.Argument(..., help="Path to the first PDF file.")],
83
+ pdf2: Annotated[str, typer.Argument(..., help="Path to the second PDF file.")],
84
+ output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
85
+ compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
86
+ ) -> None:
87
+ def merge_pdfs_internal(pdf1: str, pdf2: str, output: Optional[str], compress: bool) -> None:
88
+ from pypdf import PdfReader, PdfWriter
89
+ writer = PdfWriter()
90
+ for pdf_path in [pdf1, pdf2]:
91
+ reader = PdfReader(pdf_path)
92
+ for page in reader.pages:
93
+ writer.add_page(page)
94
+ output_path = output if output else "merged.pdf"
95
+ if compress:
96
+ try:
97
+ for p in writer.pages:
98
+ try:
99
+ # PageObject.compress_content_streams exists in pypdf
100
+ p.compress_content_streams()
101
+ except Exception:
102
+ # best-effort: ignore per-page compression failures
103
+ continue
104
+ except Exception:
105
+ pass
106
+ try:
107
+ writer.compress_identical_objects()
108
+ except Exception:
109
+ # non-fatal if this fails
110
+ pass
111
+ writer.write(output_path)
112
+ print(f"✅ Merged PDF saved to: {output_path}")
113
+ from machineconfig.utils.meta import lambda_to_defstring
114
+ code = lambda_to_defstring(lambda : merge_pdfs_internal(pdf1=pdf1, pdf2=pdf2, output=output, compress=compress), in_global=True)
115
+ import tempfile
116
+ tmp_py_file = Path(tempfile.mkstemp(suffix=".py")[1])
117
+ tmp_py_file.write_text(code, encoding="utf-8")
118
+ from machineconfig.utils.code import run_shell_script
119
+ run_shell_script(f"""uv run --with pypdf {tmp_py_file} """)
120
+
121
+
81
122
  def get_app() -> typer.Typer:
82
123
  app = typer.Typer(help="🛠️ [u] utilities operations", no_args_is_help=True, add_help_option=False, add_completion=False)
83
124
  app.command(name="download", no_args_is_help=True, help="[d] Download a file from a URL and optionally decompress it.")(download)
84
125
  app.command(name="d", no_args_is_help=True, hidden=True)(download)
126
+ app.command(name="merge-pdfs", no_args_is_help=True, help="[m] Merge two PDF files into one.")(merge_pdfs)
127
+ app.command(name="m", no_args_is_help=True, hidden=True)(merge_pdfs)
85
128
  return app
@@ -6,7 +6,7 @@ import typer
6
6
  from machineconfig.utils.path_extended import PathExtended
7
7
  from machineconfig.utils.terminal import Response
8
8
  from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH
9
- from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
9
+ from machineconfig.utils.code import get_uv_command_executing_python_script
10
10
  from pathlib import Path
11
11
  import platform
12
12
  import subprocess
@@ -76,10 +76,17 @@ git pull originEnc master
76
76
 
77
77
  """
78
78
 
79
- if Path.home().joinpath("code/machineconfig").exists(): executable = f"""uv run --project "{str(Path.home().joinpath("code/machineconfig"))}" """
80
- else: executable = """uv run --with "machineconfig>=6.52" """
79
+ if Path.home().joinpath("code/machineconfig").exists():
80
+ uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
81
+ uv_with = None
82
+ else:
83
+ uv_with = ["machineconfig>=6.52"]
84
+ uv_project_dir = None
85
+
86
+ import tempfile
87
+ shell_path = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
88
+ shell_path.write_text(script, encoding="utf-8")
81
89
 
82
- shell_path = write_shell_script_to_file(shell_script=script)
83
90
  command = f". {shell_path}"
84
91
  if platform.system() == "Windows":
85
92
  completed = subprocess.run(["powershell", "-Command", command], capture_output=True, check=False, text=True)
@@ -100,20 +107,12 @@ git pull originEnc master
100
107
 
101
108
  # ================================================================================
102
109
  option1 = "Delete remote copy and push local:"
103
- from machineconfig.utils.meta import function_to_script
110
+ from machineconfig.utils.meta import lambda_to_defstring
104
111
  def func2(remote_repo: str, local_repo: str, cloud: str):
105
112
  from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
106
113
  delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
107
- return "done"
108
- # def func2(remote_repo: str=str(repo_remote_root), local_repo: str=str(repo_local_root), cloud: str=str(cloud_resolved)):
109
- # from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
110
- # delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
111
- # return "done"
112
- # program_1_py = function_to_script(func=func2, call_with_kwargs=None)
113
- program_1_py = function_to_script(func=func2, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
114
-
115
-
116
- shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable=executable)
114
+ program_1_py = lambda_to_defstring(lambda: func2(remote_repo=str(repo_remote_root), local_repo=str(repo_local_root), cloud=str(cloud_resolved)), in_global=True)
115
+ uv_command_1, _pyfile1 = get_uv_command_executing_python_script(python_script=program_1_py, uv_with=uv_with, uv_project_dir=uv_project_dir)
117
116
  # ================================================================================
118
117
  option2 = "Delete local repo and replace it with remote copy:"
119
118
  program_2 = f"""
@@ -126,15 +125,19 @@ sudo chmod 600 $HOME/.ssh/*
126
125
  sudo chmod 700 $HOME/.ssh
127
126
  sudo chmod +x $HOME/dotfiles/scripts/linux -R
128
127
  """
129
- shell_file_2 = write_shell_script_to_file(shell_script=program_2)
128
+ import tempfile
129
+ shell_file_2 = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
130
+ shell_file_2.write_text(program_2, encoding="utf-8")
131
+
130
132
  # ================================================================================
131
133
  option3 = "Inspect repos:"
132
134
  def func(repo_local_root: str, repo_remote_root: str):
133
135
  from machineconfig.scripts.python.helpers_repos.sync import inspect_repos
134
136
  inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
135
- return "done"
136
- program_3_py = function_to_script(func=func, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
137
- shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable=executable)
137
+ # program_3_py = function_to_script(func=func, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
138
+ # shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable=executable)
139
+ program_3_py = lambda_to_defstring(lambda: func(repo_local_root=str(repo_local_root), repo_remote_root=str(repo_remote_root)), in_global=True)
140
+ uv_command_3, _pyfile3 = get_uv_command_executing_python_script(python_script=program_3_py, uv_with=uv_with, uv_project_dir=uv_project_dir)
138
141
  # ================================================================================
139
142
 
140
143
  option4 = "Remove problematic rclone file from repo and replace with remote:"
@@ -143,16 +146,17 @@ rm $HOME/dotfiles/creds/rclone/rclone.conf
143
146
  cp $HOME/.config/machineconfig/remote/dotfiles/creds/rclone/rclone.conf $HOME/dotfiles/creds/rclone
144
147
  cd $HOME/dotfiles
145
148
  git commit -am "finished merging"
146
- . {shell_file_1}
149
+ {uv_command_1}
147
150
  """
148
- shell_file_4 = write_shell_script_to_file(shell_script=program_4)
151
+ shell_file_4 = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
152
+ shell_file_4.write_text(program_4, encoding="utf-8")
149
153
  # ================================================================================
150
154
 
151
155
  console.print(Panel("🔄 RESOLVE MERGE CONFLICT\nChoose an option to resolve the conflict:", title_align="left", border_style="blue"))
152
156
 
153
- print(f"• {option1:75} 👉 {shell_file_1}")
157
+ print(f"• {option1:75} 👉 {uv_command_1}")
154
158
  print(f"• {option2:75} 👉 {shell_file_2}")
155
- print(f"• {option3:75} 👉 {shell_file_3}")
159
+ print(f"• {option3:75} 👉 {uv_command_3}")
156
160
  print(f"• {option4:75} 👉 {shell_file_4}")
157
161
  print("\n\n")
158
162
 
@@ -162,21 +166,21 @@ git commit -am "finished merging"
162
166
  import questionary
163
167
  choice = questionary.select("Choose one option:", choices=[option1, option2, option3, option4]).ask()
164
168
  if choice == option1:
165
- program_content = shell_file_1.read_text(encoding="utf-8")
169
+ program_content = uv_command_1
166
170
  elif choice == option2:
167
171
  program_content = program_2
168
172
  elif choice == option3:
169
- program_content = shell_file_3.read_text(encoding="utf-8")
173
+ program_content = uv_command_3
170
174
  elif choice == option4:
171
175
  program_content = program_4
172
176
  else:
173
177
  raise NotImplementedError(f"Choice {choice} not implemented.")
174
178
  case "push-local-merge":
175
- program_content = shell_file_1.read_text(encoding="utf-8")
179
+ program_content = uv_command_1
176
180
  case "overwrite-local":
177
181
  program_content = program_2
178
182
  case "stop-on-conflict":
179
- program_content = shell_file_3.read_text(encoding="utf-8")
183
+ program_content = uv_command_3
180
184
  case "remove-rclone-conflict":
181
185
  program_content = program_4
182
186
  case _:
@@ -1,5 +1,4 @@
1
1
  from machineconfig.utils.path_extended import PathExtended
2
- from machineconfig.utils.code import write_shell_script_to_file
3
2
  import platform
4
3
  from pathlib import Path
5
4
  from rich.console import Console
@@ -56,11 +55,12 @@ def inspect_repos(repo_local_root: str, repo_remote_root: str):
56
55
 
57
56
  if platform.system() == "Windows":
58
57
  program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
59
- write_shell_script_to_file(shell_script=program)
60
- return None
61
58
  elif platform.system() in ["Linux", "Darwin"]:
62
59
  program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
63
- write_shell_script_to_file(shell_script=program)
64
- return None
65
60
  else:
66
61
  raise NotImplementedError(f"Platform {platform.system()} not implemented.")
62
+ import tempfile
63
+ with tempfile.NamedTemporaryFile(mode='w', suffix=".sh" if platform.system() != "Windows" else ".ps1", delete=False, encoding='utf-8') as temp_file:
64
+ temp_file.write(program)
65
+ temp_script_path = PathExtended(temp_file.name)
66
+ console.print(Panel(f"🚀 Launching repo inspection tool...\n\n[blue]{temp_script_path}[/blue]", border_style="blue"))
@@ -1,95 +1,18 @@
1
+
1
2
  import atexit
2
- import platform
3
+ # import platform
3
4
  from typing import Optional
4
5
  import subprocess
5
- from rich.console import Console
6
- from rich.panel import Panel
7
- from rich.syntax import Syntax
8
-
9
6
  from machineconfig.utils.accessories import randstr
10
- from machineconfig.utils.ve import get_ve_activate_line
11
- from machineconfig.utils.path_extended import PathExtended # type: ignore[import-not-found]
12
-
13
-
14
- def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
15
- if executable is None: exe_resolved = "python"
16
- else: exe_resolved = executable
17
- if func is None: exec_line = f"""{exe_resolved} {python_file}"""
18
- else: exec_line = f"""{exe_resolved} -m fire {python_file} {func}"""
19
- if ve_path is None: ve_activate_line = ""
20
- else: ve_activate_line = get_ve_activate_line(ve_path)
21
- shell_script = f"""
22
- echo "Executing {exec_line}"
23
- {ve_activate_line}
24
- {exec_line}
25
- deactivate || true
26
- """
27
- if strict_execution:
28
- if platform.system() == "Windows":
29
- shell_script = """$ErrorActionPreference = "Stop" """ + "\n" + shell_script
30
- if platform.system() in ["Linux", "Darwin"]:
31
- shell_script = "set -e" + "\n" + shell_script
32
- if platform.system() in ["Linux", "Darwin"]:
33
- shell_script = "#!/bin/bash" + "\n" + shell_script # vs #!/usr/bin/env bash
34
- return shell_script
7
+ from machineconfig.utils.path_extended import PathExtended
8
+ from pathlib import Path
35
9
 
36
10
 
37
- def get_shell_file_executing_python_script(python_script: str, ve_path: Optional[str], executable: Optional[str], verbose: bool = True):
38
- if verbose:
39
- python_script = f"""
40
- code = r'''{python_script}'''
41
- try:
42
- from machineconfig.utils.utils import print_code
43
- print_code(code=code, lexer="python", desc="Python Script")
44
- except ImportError:
11
+ def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
12
+ import platform
45
13
  from rich.console import Console
46
14
  from rich.panel import Panel
47
- console = Console()
48
- console.print(Panel(f'''📜 PYTHON SCRIPT:\n\n{{code}}''', title="Python Script", expand=False))
49
- """ + python_script
50
- python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
51
- python_file.parent.mkdir(parents=True, exist_ok=True)
52
- python_file.write_text(python_script, encoding="utf-8")
53
- shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path, executable=executable)
54
- shell_file = write_shell_script_to_file(shell_script)
55
- return shell_file
56
-
57
-
58
- def write_shell_script_to_file(shell_script: str):
59
- if platform.system() in ["Linux", "Darwin"]:
60
- suffix = ".sh"
61
- elif platform.system() == "Windows":
62
- suffix = ".ps1"
63
- else:
64
- raise NotImplementedError(f"Platform {platform.system()} not implemented.")
65
- shell_file = PathExtended.tmp().joinpath("tmp_scripts", "shell", randstr() + suffix)
66
- shell_file.parent.mkdir(parents=True, exist_ok=True)
67
- shell_file.write_text(shell_script, encoding="utf-8")
68
- return shell_file
69
-
70
-
71
- def write_shell_script_to_default_program_path(program: str, desc: str, preserve_cwd: bool, display: bool, execute: bool):
72
- if preserve_cwd:
73
- if platform.system() == "Windows":
74
- program = "$orig_path = $pwd\n" + program + "\ncd $orig_path"
75
- else:
76
- program = 'orig_path=$(cd -- "." && pwd)\n' + program + '\ncd "$orig_path" || exit'
77
- if display:
78
- print_code(code=program, lexer="shell", desc=desc, subtitle="PROGRAM")
79
- if execute:
80
- result = subprocess.run(program, shell=True, capture_output=True, text=True)
81
- success = result.returncode == 0 and result.stderr == ""
82
- if not success:
83
- print("❌ 🛠️ EXECUTION | Shell script running failed")
84
- if result.stdout:
85
- print(f"STDOUT: {result.stdout}")
86
- if result.stderr:
87
- print(f"STDERR: {result.stderr}")
88
- print(f"Return code: {result.returncode}")
89
- return None
90
-
91
-
92
- def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
15
+ from rich.syntax import Syntax
93
16
  if lexer == "shell":
94
17
  if platform.system() == "Windows":
95
18
  lexer = "powershell"
@@ -101,8 +24,32 @@ def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
101
24
  console.print(Panel(Syntax(code=code, lexer=lexer), title=f"📄 {desc}", subtitle=subtitle), style="bold red")
102
25
 
103
26
 
27
+ def get_uv_command_executing_python_script(python_script: str, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[str, Path]:
28
+ python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
29
+ python_file.parent.mkdir(parents=True, exist_ok=True)
30
+ if uv_with is not None and len(uv_with) > 0:
31
+ uv_with.append("rich")
32
+ uv_with_arg = "--with " + '"' + ",".join(uv_with) + '"'
33
+ else:
34
+ uv_with_arg = "--with rich"
35
+ if uv_project_dir is not None:
36
+ uv_project_dir_arg = "--project" + f' "{uv_project_dir}"'
37
+ else:
38
+ uv_project_dir_arg = ""
39
+ from machineconfig.utils.meta import lambda_to_defstring
40
+ print_code_string = lambda_to_defstring(lambda: print_code(code=python_script, lexer="python", desc="Temporary Python Script", subtitle="Executing via shell script"), in_global=True)
41
+ python_file.write_text(print_code_string + "\n" + python_script, encoding="utf-8")
42
+ shell_script = f"""uv run {uv_with_arg} {uv_project_dir_arg} {str(python_file)} """
43
+ return shell_script, python_file
44
+
45
+
104
46
  def run_shell_script(script: str, display_script: bool = True, clean_env: bool = False):
105
47
  import tempfile
48
+ import platform
49
+ from rich.console import Console
50
+ from rich.panel import Panel
51
+ from rich.syntax import Syntax
52
+
106
53
  if platform.system() == "Windows":
107
54
  suffix = ".ps1"
108
55
  lexer = "powershell"
@@ -112,6 +59,7 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
112
59
  with tempfile.NamedTemporaryFile(mode='w', suffix=suffix, delete=False, encoding='utf-8') as temp_file:
113
60
  temp_file.write(script)
114
61
  temp_script_path = PathExtended(temp_file.name)
62
+
115
63
  console = Console()
116
64
  if display_script:
117
65
  from rich.syntax import Syntax
@@ -138,8 +86,12 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
138
86
 
139
87
 
140
88
  def run_shell_script_after_exit(script: str, display_script: bool = True) -> None:
89
+ import platform
90
+ from rich.console import Console
91
+ from rich.panel import Panel
92
+ from rich.syntax import Syntax
93
+
141
94
  console = Console()
142
-
143
95
  def execute_script_at_exit() -> None:
144
96
  if platform.system() == "Windows":
145
97
  suffix = ".ps1"
@@ -5,7 +5,7 @@ from machineconfig.utils.installer_utils.installer_class import Installer
5
5
  from machineconfig.utils.schemas.installer.installer_types import InstallerData, InstallerDataFiles, get_normalized_arch, get_os_name, OPERATING_SYSTEMS, CPU_ARCHITECTURES
6
6
  from machineconfig.jobs.installer.package_groups import PACKAGE_GROUPS, PACKAGE_GROUP2NAMES
7
7
  from machineconfig.utils.path_extended import PathExtended
8
- from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH, LIBRARY_ROOT
8
+ from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH
9
9
  from machineconfig.utils.io import read_json
10
10
 
11
11
  from rich.console import Console
@@ -0,0 +1,188 @@
1
+ """Metaprogramming utilities for analyzing and serializing Python functions."""
2
+
3
+ from collections.abc import Callable
4
+ from typing import Any
5
+
6
+
7
+ def lambda_to_defstring(lmb: Callable[[], Any], in_global: bool = False) -> str:
8
+ """
9
+ caveats: always use keyword arguments in the lambda call for best results.
10
+ return statement not allowed in the wrapped function (otherwise it can be put in the global space)
11
+
12
+ Given a no-arg lambda like `lambda: func(a=var1, b=var2)`,
13
+ return a string containing the full function definition of `func`
14
+ but with the defaults for the parameters provided in the call replaced
15
+ by the *actual* values (repr) taken from the lambda's globals.
16
+
17
+ All imports are local to this function.
18
+
19
+ Args:
20
+ lmb: A lambda function with no arguments
21
+ in_global: If True, return kwargs as global variable assignments followed by dedented body.
22
+ If False (default), return the full function definition with updated defaults.
23
+ """
24
+ # local imports
25
+ import inspect as _inspect
26
+ import ast as _ast
27
+ import textwrap as _textwrap
28
+ import types as _types
29
+
30
+ # sanity checks
31
+ if not (callable(lmb) and isinstance(lmb, _types.LambdaType)):
32
+ raise TypeError("Expected a lambda function object")
33
+
34
+ src = _inspect.getsource(lmb)
35
+ src = _textwrap.dedent(src)
36
+ tree = _ast.parse(src)
37
+
38
+ # find first Lambda node
39
+ lambda_node = None
40
+ for n in _ast.walk(tree):
41
+ if isinstance(n, _ast.Lambda):
42
+ lambda_node = n
43
+ break
44
+ if lambda_node is None:
45
+ raise ValueError("Could not find a lambda expression in source")
46
+
47
+ body = lambda_node.body
48
+ if not isinstance(body, _ast.Call):
49
+ raise ValueError("Lambda body is not a call expression")
50
+
51
+ globals_dict = getattr(lmb, "__globals__", {})
52
+
53
+ # Also capture closure variables from the lambda
54
+ closure_dict: dict[str, Any] = {}
55
+ if lmb.__closure__:
56
+ code_obj = lmb.__code__
57
+ freevars = code_obj.co_freevars
58
+ for i, var_name in enumerate(freevars):
59
+ closure_dict[var_name] = lmb.__closure__[i].cell_contents
60
+
61
+ # Merge globals and closures (closures take precedence for shadowing)
62
+ eval_namespace = {**globals_dict, **closure_dict}
63
+
64
+ # resolve the function object being called
65
+ try:
66
+ func_ref_src = _ast.unparse(body.func)
67
+ except AttributeError:
68
+ func_ref_src = _ast.get_source_segment(src, body.func) or ""
69
+ try:
70
+ func_obj = eval(func_ref_src, eval_namespace)
71
+ except Exception as e:
72
+ raise RuntimeError(f"Could not resolve function reference '{func_ref_src}': {e}")
73
+
74
+ if not callable(func_obj):
75
+ raise TypeError("Resolved object is not callable")
76
+
77
+ func_name = getattr(func_obj, "__name__", "<unknown>")
78
+
79
+ # Evaluate each keyword argument value in the lambda's globals to get real Python objects
80
+ call_kwargs = {}
81
+ for kw in body.keywords:
82
+ if kw.arg is None:
83
+ # **kwargs in call — evaluate to dict and merge
84
+ try:
85
+ val = eval(compile(_ast.Expression(kw.value), "<lambda_eval>", "eval"), eval_namespace)
86
+ if isinstance(val, dict):
87
+ call_kwargs.update(val)
88
+ else:
89
+ raise ValueError("Keyword expansion did not evaluate to a dict")
90
+ except Exception as e:
91
+ raise RuntimeError(f"Failed to evaluate **kwargs expression: {e}")
92
+ else:
93
+ try:
94
+ val = eval(compile(_ast.Expression(kw.value), "<lambda_eval>", "eval"), eval_namespace)
95
+ call_kwargs[kw.arg] = val
96
+ except Exception as e:
97
+ raise RuntimeError(f"Failed to evaluate value for kw '{kw.arg}': {e}")
98
+
99
+ # Try to get original source and dedent it for body extraction
100
+ try:
101
+ orig_src = _inspect.getsource(func_obj)
102
+ ded = _textwrap.dedent(orig_src)
103
+ lines = ded.splitlines()
104
+ # find the line that starts with def <name>(
105
+ def_index = None
106
+ for i, ln in enumerate(lines):
107
+ if ln.lstrip().startswith(f"def {func_name}("):
108
+ def_index = i
109
+ break
110
+ if def_index is None:
111
+ body_lines = ded.splitlines()
112
+ else:
113
+ body_lines = lines[def_index + 1 :]
114
+ # ensure we have a body, otherwise use pass
115
+ if not any(line.strip() for line in body_lines):
116
+ body_text = " pass\n"
117
+ else:
118
+ # keep the dedented body lines exactly as-is (they should be indented)
119
+ body_text = "\n".join(body_lines) + ("\n" if not body_lines[-1].endswith("\n") else "")
120
+ except (OSError, IOError, TypeError):
121
+ body_text = " pass\n"
122
+
123
+ # Build a replaced signature using inspect.signature
124
+ sig = _inspect.signature(func_obj)
125
+ new_params = []
126
+ for name, param in sig.parameters.items():
127
+ # If the call provided a value for this parameter, replace default
128
+ if name in call_kwargs:
129
+ new_default = call_kwargs[name]
130
+ else:
131
+ new_default = param.default
132
+
133
+ # Recreate the Parameter (keeping annotation and kind)
134
+ if new_default is _inspect.Parameter.empty:
135
+ new_param = _inspect.Parameter(name, param.kind, annotation=param.annotation)
136
+ else:
137
+ new_param = _inspect.Parameter(
138
+ name, param.kind, default=new_default, annotation=param.annotation
139
+ )
140
+ new_params.append(new_param)
141
+
142
+ new_sig = _inspect.Signature(parameters=new_params, return_annotation=sig.return_annotation)
143
+
144
+ # If in_global mode, return kwargs as global assignments + dedented body
145
+ if in_global:
146
+ global_assignments: list[str] = []
147
+ for name, param in sig.parameters.items():
148
+ # Get the value from call_kwargs if provided, else use original default
149
+ if name in call_kwargs:
150
+ value = call_kwargs[name]
151
+ elif param.default is not _inspect.Parameter.empty:
152
+ value = param.default
153
+ else:
154
+ # No value provided and no default - skip this parameter
155
+ continue
156
+
157
+ # Build type annotation string if available
158
+ if param.annotation is not _inspect.Parameter.empty:
159
+ # Try to get a nice string representation of the annotation
160
+ try:
161
+ if hasattr(param.annotation, "__name__"):
162
+ type_str = param.annotation.__name__
163
+ else:
164
+ type_str = str(param.annotation)
165
+ except Exception:
166
+ type_str = str(param.annotation)
167
+ global_assignments.append(f"{name}: {type_str} = {repr(value)}")
168
+ else:
169
+ global_assignments.append(f"{name} = {repr(value)}")
170
+
171
+ # Dedent the body text to remove function indentation
172
+ dedented_body = _textwrap.dedent(body_text).rstrip()
173
+
174
+ # Combine global assignments and body
175
+ if global_assignments:
176
+ result_parts = ["\n".join(global_assignments), "", dedented_body]
177
+ return "\n".join(result_parts)
178
+ else:
179
+ return dedented_body
180
+
181
+ # Compose final function definition text
182
+ header = f"def {func_name}{new_sig}:\n"
183
+ final_src = header + body_text
184
+ return final_src
185
+
186
+
187
+ if __name__ == "__main__":
188
+ pass
@@ -1,7 +1,6 @@
1
1
  # """Task scheduler
2
2
  # """
3
3
 
4
- # from machineconfig.utils.utils import get_shell_script_executing_python_file
5
4
  # from machineconfig.utils.utils2 import read_ini
6
5
  # from dataclasses import dataclass
7
6
  # from datetime import datetime, timedelta