machineconfig 5.12__tar.gz → 5.13__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 (421) hide show
  1. {machineconfig-5.12/src/machineconfig.egg-info → machineconfig-5.13}/PKG-INFO +1 -1
  2. {machineconfig-5.12 → machineconfig-5.13}/pyproject.toml +2 -1
  3. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/python/check_installations.py +0 -13
  4. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/create.py +127 -13
  5. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/count_lines.py +9 -5
  6. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/count_lines_frontend.py +1 -1
  7. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/interactive.py +2 -2
  8. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos.py +2 -2
  9. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/links.py +133 -16
  10. {machineconfig-5.12 → machineconfig-5.13/src/machineconfig.egg-info}/PKG-INFO +1 -1
  11. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig.egg-info/SOURCES.txt +0 -3
  12. machineconfig-5.12/src/machineconfig/jobs/python/create_bootable_media.py +0 -16
  13. machineconfig-5.12/src/machineconfig/jobs/python/python_cargo_build_share.py +0 -58
  14. machineconfig-5.12/src/machineconfig/jobs/python/tasks.py +0 -3
  15. {machineconfig-5.12 → machineconfig-5.13}/MANIFEST.in +0 -0
  16. {machineconfig-5.12 → machineconfig-5.13}/README.md +0 -0
  17. {machineconfig-5.12 → machineconfig-5.13}/setup.cfg +0 -0
  18. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/__init__.py +0 -0
  19. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/__init__.py +0 -0
  20. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
  21. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
  22. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/distribute.py +0 -0
  23. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/file_manager.py +0 -0
  24. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/job_params.py +0 -0
  25. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
  26. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
  27. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
  28. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
  29. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/run_remote.py +0 -0
  30. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/script_execution.py +0 -0
  31. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
  32. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
  33. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/ffile.py +0 -0
  34. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/utils/enhanced_command_runner.py +0 -0
  35. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
  36. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/utils/load_balancer_helper.py +0 -0
  37. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
  38. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
  39. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
  40. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
  41. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
  42. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
  43. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
  44. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
  45. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
  46. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
  47. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
  48. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
  49. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
  50. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
  51. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
  52. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
  53. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
  54. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
  55. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
  56. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
  57. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/templates/__init__.py +0 -0
  58. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
  59. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/__init__.py +0 -0
  60. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/__init__.py +0 -0
  61. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
  62. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
  63. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
  64. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
  65. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
  66. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
  67. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
  68. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
  69. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
  70. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
  71. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
  72. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
  73. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
  74. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
  75. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
  76. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
  77. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/installer_data.json +0 -0
  78. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
  79. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
  80. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
  81. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
  82. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
  83. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
  84. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
  85. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
  86. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
  87. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
  88. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
  89. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
  90. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
  91. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/package_groups.py +0 -0
  92. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
  93. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
  94. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
  95. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
  96. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/python/__init__.py +0 -0
  97. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
  98. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/python/vscode/api.py +0 -0
  99. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/python/vscode/sync_code.py +0 -0
  100. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
  101. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
  102. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
  103. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  104. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  105. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/start_terminal.ps1 +0 -0
  106. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/jobs/windows/startup_file.cmd +0 -0
  107. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/logger.py +0 -0
  108. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/__init__.py +0 -0
  109. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/records/generic/shares.toml +0 -0
  110. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
  111. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
  112. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
  113. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
  114. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/profile/shell.py +0 -0
  115. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/__init__.py +0 -0
  116. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/cloud/init.sh +0 -0
  117. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/agents +0 -0
  118. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/choose_wezterm_theme +0 -0
  119. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/cloud_copy +0 -0
  120. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/cloud_mount +0 -0
  121. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/cloud_repo_sync +0 -0
  122. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/cloud_sync +0 -0
  123. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/croshell +0 -0
  124. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/devops +0 -0
  125. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fire +0 -0
  126. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/ftpx +0 -0
  127. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fzf2g +0 -0
  128. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fzfag +0 -0
  129. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fzffg +0 -0
  130. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fzfg +0 -0
  131. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/fzfrga +0 -0
  132. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/gh_models +0 -0
  133. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/initai +0 -0
  134. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/kill_process +0 -0
  135. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/mount_drive +0 -0
  136. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/mount_nfs +0 -0
  137. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/mount_nw_drive +0 -0
  138. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/mount_smb +0 -0
  139. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/scheduler +0 -0
  140. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/sessions +0 -0
  141. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/share_cloud.sh +0 -0
  142. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/share_nfs +0 -0
  143. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/share_smb +0 -0
  144. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/skrg +0 -0
  145. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/start_docker +0 -0
  146. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/start_slidev +0 -0
  147. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/start_terminals +0 -0
  148. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/switch_ip +0 -0
  149. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
  150. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/wifi_conn +0 -0
  151. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/linux/z_ls +0 -0
  152. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/__init__.py +0 -0
  153. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/agents.py +0 -0
  154. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
  155. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
  156. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/initai.py +0 -0
  157. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
  158. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
  159. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
  160. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
  161. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
  162. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
  163. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
  164. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
  165. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
  166. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
  167. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
  168. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
  169. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -0
  170. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
  171. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
  172. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
  173. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
  174. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
  175. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
  176. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
  177. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
  178. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
  179. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
  180. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
  181. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/choose_wezterm_theme.py +0 -0
  182. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/cloud_copy.py +0 -0
  183. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/cloud_manager.py +0 -0
  184. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/cloud_mount.py +0 -0
  185. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/cloud_repo_sync.py +0 -0
  186. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/cloud_sync.py +0 -0
  187. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/croshell.py +0 -0
  188. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/devops.py +0 -0
  189. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/devops_add_identity.py +0 -0
  190. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/devops_add_ssh_key.py +0 -0
  191. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/devops_backup_retrieve.py +0 -0
  192. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/devops_update_repos.py +0 -0
  193. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/dotfile.py +0 -0
  194. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_agents_help_launch.py +0 -0
  195. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_agents_help_search.py +0 -0
  196. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_agents_helper_types.py +0 -0
  197. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_agents_load_balancer.py +0 -0
  198. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
  199. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_jobs_args_helper.py +0 -0
  200. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_jobs_route_helper.py +0 -0
  201. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/fire_jobs_streamlit_helper.py +0 -0
  202. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/ftpx.py +0 -0
  203. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/get_zellij_cmd.py +0 -0
  204. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/gh_models.py +0 -0
  205. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/__init__.py +0 -0
  206. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/cloud_helpers.py +0 -0
  207. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/helpers2.py +0 -0
  208. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/helpers4.py +0 -0
  209. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/helpers5.py +0 -0
  210. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -0
  211. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/mount_nfs.py +0 -0
  212. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/mount_nw_drive.py +0 -0
  213. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/mount_ssh.py +0 -0
  214. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/onetimeshare.py +0 -0
  215. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/pomodoro.py +0 -0
  216. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos_helper.py +0 -0
  217. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos_helper_action.py +0 -0
  218. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos_helper_clone.py +0 -0
  219. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos_helper_record.py +0 -0
  220. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/repos_helper_update.py +0 -0
  221. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/scheduler.py +0 -0
  222. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/sessions.py +0 -0
  223. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/share_terminal.py +0 -0
  224. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/snapshot.py +0 -0
  225. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/start_slidev.py +0 -0
  226. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/start_terminals.py +0 -0
  227. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/t4.py +0 -0
  228. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/viewer.py +0 -0
  229. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/viewer_template.py +0 -0
  230. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/wifi_conn.py +0 -0
  231. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/python/wsl_windows_transfer.py +0 -0
  232. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/agents.ps1 +0 -0
  233. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -0
  234. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/cloud_copy.ps1 +0 -0
  235. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/cloud_mount.ps1 +0 -0
  236. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -0
  237. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/cloud_sync.ps1 +0 -0
  238. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/croshell.ps1 +0 -0
  239. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/devops.ps1 +0 -0
  240. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/dotfile.ps1 +0 -0
  241. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/fire.ps1 +0 -0
  242. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/ftpx.ps1 +0 -0
  243. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
  244. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
  245. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
  246. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/gpt.ps1 +0 -0
  247. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/grep.ps1 +0 -0
  248. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/initai.ps1 +0 -0
  249. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/kill_process.ps1 +0 -0
  250. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/mount_nfs.ps1 +0 -0
  251. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/mount_nw.ps1 +0 -0
  252. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/mount_smb.ps1 +0 -0
  253. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/mount_ssh.ps1 +0 -0
  254. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/nano.ps1 +0 -0
  255. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/pomodoro.ps1 +0 -0
  256. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/reload_path.ps1 +0 -0
  257. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/scheduler.ps1 +0 -0
  258. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/sessions.ps1 +0 -0
  259. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/share_cloud.cmd +0 -0
  260. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/share_nfs.ps1 +0 -0
  261. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/share_smb.ps1 +0 -0
  262. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/snapshot.ps1 +0 -0
  263. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/start_slidev.ps1 +0 -0
  264. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/start_terminals.ps1 +0 -0
  265. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/unlock_bitlocker.ps1 +0 -0
  266. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/wifi_conn.ps1 +0 -0
  267. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -0
  268. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -0
  269. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/__init__.py +0 -0
  270. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/broot/br.sh +0 -0
  271. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
  272. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/broot/conf.toml +0 -0
  273. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/glow/glow.yml +0 -0
  274. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
  275. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/helix/config.toml +0 -0
  276. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/helix/languages.toml +0 -0
  277. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/keras/keras.json +0 -0
  278. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
  279. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
  280. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
  281. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
  282. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
  283. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
  284. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
  285. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
  286. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
  287. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
  288. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/colors +0 -0
  289. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
  290. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
  291. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
  292. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
  293. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
  294. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
  295. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/icons +0 -0
  296. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/linux/lfrc +0 -0
  297. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
  298. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  299. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  300. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
  301. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
  302. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  303. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
  304. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
  305. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
  306. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
  307. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/colors +0 -0
  308. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
  309. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/icons +0 -0
  310. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
  311. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
  312. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/lfrc +0 -0
  313. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
  314. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
  315. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
  316. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
  317. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/linters/.flake8 +0 -0
  318. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/linters/.mypy.ini +0 -0
  319. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/linters/.pylintrc +0 -0
  320. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/linters/.ruff.toml +0 -0
  321. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
  322. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
  323. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
  324. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
  325. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
  326. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/mprocs/windows/other +0 -0
  327. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/pistol/pistol.conf +0 -0
  328. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/presenterm/config.yaml +0 -0
  329. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/procs/.procs.toml +0 -0
  330. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
  331. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/rofi/config.rasi +0 -0
  332. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
  333. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
  334. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
  335. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/bash/init.sh +0 -0
  336. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
  337. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
  338. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  339. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
  340. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
  341. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
  342. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
  343. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
  344. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  345. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
  346. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
  347. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
  348. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/shells/wt/settings.json +0 -0
  349. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/streamlit/config.toml +0 -0
  350. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/svim/linux/init.toml +0 -0
  351. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/svim/windows/init.toml +0 -0
  352. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
  353. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/tere/terecd.sh +0 -0
  354. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
  355. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
  356. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/wsl/.wslconfig +0 -0
  357. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/yazi/keymap.toml +0 -0
  358. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/yazi/theme.toml +0 -0
  359. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/yazi/yazi.toml +0 -0
  360. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zed/settings.json +0 -0
  361. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/commands/monitor +0 -0
  362. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
  363. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/config.kdl +0 -0
  364. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
  365. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/layouts/hist +0 -0
  366. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
  367. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
  368. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
  369. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
  370. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/__init__.py +0 -0
  371. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
  372. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
  373. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -0
  374. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
  375. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -0
  376. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
  377. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -0
  378. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/__init__.py +0 -0
  379. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
  380. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
  381. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -0
  382. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -0
  383. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -0
  384. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -0
  385. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -0
  386. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
  387. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
  388. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/__init__.py +0 -0
  389. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/accessories.py +0 -0
  390. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/ai/__init__.py +0 -0
  391. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/ai/generate_file_checklist.py +0 -0
  392. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
  393. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
  394. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/code.py +0 -0
  395. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer.py +0 -0
  396. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
  397. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
  398. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer_utils/installer.py +0 -0
  399. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
  400. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
  401. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/io.py +0 -0
  402. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/notifications.py +0 -0
  403. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/options.py +0 -0
  404. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/path_extended.py +0 -0
  405. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/path_helper.py +0 -0
  406. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/procs.py +0 -0
  407. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/scheduler.py +0 -0
  408. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/scheduling.py +0 -0
  409. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
  410. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
  411. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
  412. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
  413. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/source_of_truth.py +0 -0
  414. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/ssh.py +0 -0
  415. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/terminal.py +0 -0
  416. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/upgrade_packages.py +0 -0
  417. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig/utils/ve.py +0 -0
  418. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig.egg-info/dependency_links.txt +0 -0
  419. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig.egg-info/entry_points.txt +0 -0
  420. {machineconfig-5.12 → machineconfig-5.13}/src/machineconfig.egg-info/requires.txt +0 -0
  421. {machineconfig-5.12 → machineconfig-5.13}/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.12
3
+ Version: 5.13
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 = "5.12"
9
+ version = "5.13"
10
10
  description = "Dotfiles management package"
11
11
  readme = "README.md"
12
12
  license = {text = "Apache 2.0"}
@@ -106,6 +106,7 @@ dev = [
106
106
  "types-sqlalchemy>=1.4.53.38",
107
107
  "types-toml>=0.10.8.20240310",
108
108
  "types-urllib3>=1.26.25.14",
109
+ "vt-py>=0.21.0",
109
110
  ]
110
111
  docs = [
111
112
  "pdoc>=15.0.2",
@@ -1,19 +1,6 @@
1
- # """CI
2
- # """
3
1
 
4
-
5
- # import time
6
2
  import platform
7
-
8
- # from typing import Any
9
- # from rich.console import Console
10
- # from machineconfig.utils.utils2 import pprint
11
- # # from rich.progress import track
12
3
  from machineconfig.utils.source_of_truth import LIBRARY_ROOT
13
- # from machineconfig.utils.installer import get_installed_cli_apps
14
- # from typing import Optional
15
- # from datetime import datetime
16
- # import csv
17
4
 
18
5
 
19
6
  APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lower()}/apps_summary_report.csv")
@@ -8,6 +8,7 @@ from rich.console import Console
8
8
  from rich.panel import Panel
9
9
  from rich.pretty import Pretty
10
10
  from rich.text import Text
11
+ from rich.table import Table
11
12
 
12
13
  from machineconfig.utils.path_extended import PathExtended
13
14
  from machineconfig.utils.links import symlink_func, symlink_copy
@@ -20,7 +21,7 @@ import os
20
21
  import ctypes
21
22
  import subprocess
22
23
  import tomllib
23
- from typing import Optional, Any, TypedDict
24
+ from typing import Optional, Any, TypedDict, Literal
24
25
 
25
26
  system = platform.system() # Linux or Windows
26
27
  ERROR_LIST: list[Any] = [] # append to this after every exception captured.
@@ -43,10 +44,35 @@ class SymlinkMapper(TypedDict):
43
44
  contents: Optional[bool]
44
45
 
45
46
 
46
- def apply_mapper(choice: Optional[str] = None):
47
+ class OperationRecord(TypedDict):
48
+ program: str
49
+ file_key: str
50
+ source: str
51
+ target: str
52
+ operation: str
53
+ action: Literal[
54
+ "already_linked",
55
+ "relinking",
56
+ "fixing_broken_link",
57
+ "identical_files",
58
+ "backing_up_source",
59
+ "backing_up_target",
60
+ "relinking_to_new_target",
61
+ "moving_to_target",
62
+ "new_link",
63
+ "new_link_and_target",
64
+ "linking",
65
+ "copying",
66
+ "error"
67
+ ]
68
+ details: str
69
+ status: str
70
+
71
+
72
+ def apply_mapper(choice: Optional[str], prioritize_to_this: bool):
47
73
  symlink_mapper: dict[str, dict[str, SymlinkMapper]] = tomllib.loads(LIBRARY_ROOT.joinpath("profile/mapper.toml").read_text(encoding="utf-8"))
48
- prioritize_to_this = True
49
74
  exclude: list[str] = [] # "wsl_linux", "wsl_windows"
75
+ operation_records: list[OperationRecord] = []
50
76
 
51
77
  program_keys_raw: list[str] = list(symlink_mapper.keys())
52
78
  program_keys: list[str] = []
@@ -64,10 +90,6 @@ def apply_mapper(choice: Optional[str] = None):
64
90
  return # terminate function.
65
91
  elif len(choice_selected) == 1 and choice_selected[0] == "all":
66
92
  choice_selected = "all" # i.e. program_keys = program_keys
67
- # overwrite = choose_from_options(msg="Overwrite existing source file?", options=["yes", "no"], default="yes") == "yes"
68
- from rich.prompt import Confirm
69
-
70
- prioritize_to_this = Confirm.ask("Overwrite existing source file?", default=True)
71
93
  else:
72
94
  choice_selected = choice
73
95
 
@@ -114,22 +136,85 @@ def apply_mapper(choice: Optional[str] = None):
114
136
  for file_key, file_map in symlink_mapper[program_key].items():
115
137
  this = PathExtended(file_map["this"])
116
138
  to_this = PathExtended(file_map["to_this"].replace("REPO_ROOT", REPO_ROOT.as_posix()).replace("LIBRARY_ROOT", LIBRARY_ROOT.as_posix()))
139
+
117
140
  if "contents" in file_map:
118
141
  try:
119
- for a_target in to_this.expanduser().search("*"):
120
- symlink_func(this=this.joinpath(a_target.name), to_this=a_target, prioritize_to_this=prioritize_to_this)
142
+ targets = list(to_this.expanduser().search("*"))
143
+ for a_target in targets:
144
+ result = symlink_func(this=this.joinpath(a_target.name), to_this=a_target, prioritize_to_this=prioritize_to_this)
145
+ operation_records.append({
146
+ "program": program_key,
147
+ "file_key": file_key,
148
+ "source": str(this.joinpath(a_target.name)),
149
+ "target": str(a_target),
150
+ "operation": "contents_symlink",
151
+ "action": result["action"],
152
+ "details": result["details"],
153
+ "status": "success"
154
+ })
121
155
  except Exception as ex:
122
156
  console.print(f"❌ [red]Config error[/red]: {program_key} | {file_key} | missing keys 'this ==> to_this'. {ex}")
123
- if "copy" in file_map:
157
+ operation_records.append({
158
+ "program": program_key,
159
+ "file_key": file_key,
160
+ "source": str(this),
161
+ "target": str(to_this),
162
+ "operation": "contents_symlink",
163
+ "action": "error",
164
+ "details": f"Failed to process contents: {str(ex)}",
165
+ "status": f"error: {str(ex)}"
166
+ })
167
+
168
+ elif "copy" in file_map:
124
169
  try:
125
- symlink_copy(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
170
+ result = symlink_copy(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
171
+ operation_records.append({
172
+ "program": program_key,
173
+ "file_key": file_key,
174
+ "source": str(this),
175
+ "target": str(to_this),
176
+ "operation": "copy",
177
+ "action": result["action"],
178
+ "details": result["details"],
179
+ "status": "success"
180
+ })
126
181
  except Exception as ex:
127
182
  console.print(f"❌ [red]Config error[/red]: {program_key} | {file_key} | {ex}")
183
+ operation_records.append({
184
+ "program": program_key,
185
+ "file_key": file_key,
186
+ "source": str(this),
187
+ "target": str(to_this),
188
+ "operation": "copy",
189
+ "action": "error",
190
+ "details": f"Failed to copy: {str(ex)}",
191
+ "status": f"error: {str(ex)}"
192
+ })
128
193
  else:
129
194
  try:
130
- symlink_func(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
195
+ result = symlink_func(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
196
+ operation_records.append({
197
+ "program": program_key,
198
+ "file_key": file_key,
199
+ "source": str(this),
200
+ "target": str(to_this),
201
+ "operation": "symlink",
202
+ "action": result["action"],
203
+ "details": result["details"],
204
+ "status": "success"
205
+ })
131
206
  except Exception as ex:
132
207
  console.print(f"❌ [red]Config error[/red]: {program_key} | {file_key} | missing keys 'this ==> to_this'. {ex}")
208
+ operation_records.append({
209
+ "program": program_key,
210
+ "file_key": file_key,
211
+ "source": str(this),
212
+ "target": str(to_this),
213
+ "operation": "symlink",
214
+ "action": "error",
215
+ "details": f"Failed to create symlink: {str(ex)}",
216
+ "status": f"error: {str(ex)}"
217
+ })
133
218
 
134
219
  if program_key == "ssh" and system == "Linux": # permissions of ~/dotfiles/.ssh should be adjusted
135
220
  try:
@@ -147,6 +232,35 @@ def apply_mapper(choice: Optional[str] = None):
147
232
  subprocess.run(f"chmod +x {LIBRARY_ROOT.joinpath(f'scripts/{system.lower()}')} -R", shell=True, capture_output=True, text=True)
148
233
  console.print("[green]✅ Script permissions updated[/green]")
149
234
 
235
+ # Display operation summary table
236
+ if operation_records:
237
+ table = Table(title="🔗 Symlink Operations Summary", show_header=True, header_style="bold magenta")
238
+ table.add_column("Program", style="cyan", no_wrap=True)
239
+ table.add_column("File Key", style="blue", no_wrap=True)
240
+ table.add_column("Source", style="green")
241
+ table.add_column("Target", style="yellow")
242
+ table.add_column("Operation", style="magenta", no_wrap=True)
243
+ table.add_column("Action", style="red", no_wrap=True)
244
+ table.add_column("Details", style="white")
245
+ table.add_column("Status", style="red", no_wrap=True)
246
+
247
+ for record in operation_records:
248
+ status_style = "green" if record["status"] == "success" else "red"
249
+ action_style = "green" if record["action"] != "error" else "red"
250
+ table.add_row(
251
+ record["program"],
252
+ record["file_key"],
253
+ record["source"],
254
+ record["target"],
255
+ record["operation"],
256
+ f"[{action_style}]{record['action']}[/{action_style}]",
257
+ record["details"],
258
+ f"[{status_style}]{record['status']}[/{status_style}]"
259
+ )
260
+
261
+ console.print("\n")
262
+ console.print(table)
263
+
150
264
  if len(ERROR_LIST) > 0:
151
265
  console.print(
152
266
  Panel(
@@ -169,7 +283,7 @@ def apply_mapper(choice: Optional[str] = None):
169
283
  def main_symlinks():
170
284
  console.print("")
171
285
  console.rule("[bold blue]🔗 CREATING SYMLINKS 🔗")
172
- apply_mapper(choice="all")
286
+ apply_mapper(choice="all", prioritize_to_this=True)
173
287
 
174
288
 
175
289
  def main_profile():
@@ -1,4 +1,3 @@
1
- from __future__ import annotations
2
1
 
3
2
  from typing import TYPE_CHECKING
4
3
  from git import Repo
@@ -7,15 +6,12 @@ from datetime import datetime
7
6
 
8
7
  from pathlib import Path
9
8
  from rich.progress import track
10
- import polars as pl
11
- import plotly.graph_objects as go
12
-
13
- import plotly.express as px
14
9
  import typer
15
10
 
16
11
 
17
12
  if TYPE_CHECKING:
18
13
  from typing import Any, Dict, List, Optional, Union
14
+ import polars as pl
19
15
 
20
16
 
21
17
  app = typer.Typer()
@@ -110,6 +106,10 @@ def analyze_over_time(repo_path: str = typer.Argument(..., help="Path to the git
110
106
  except Exception as e:
111
107
  print(f"❌ Error analyzing commits: {str(e)}")
112
108
  return
109
+
110
+ import polars as pl
111
+ import plotly.graph_objects as go
112
+
113
113
  df = pl.DataFrame(commit_data)
114
114
  df = df.sort("dtmExit")
115
115
  # Create interactive plotly figure with dark theme and all bells and whistles
@@ -184,6 +184,10 @@ def analyze_over_time(repo_path: str = typer.Argument(..., help="Path to the git
184
184
 
185
185
 
186
186
  def _print_python_files_by_size_impl(repo_path: str) -> "Union[pl.DataFrame, Exception]":
187
+ import polars as pl
188
+ import plotly.graph_objects as go
189
+ import plotly.express as px
190
+
187
191
  try:
188
192
  import os
189
193
  if not os.path.exists(repo_path):
@@ -7,7 +7,7 @@ def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to
7
7
  from pathlib import Path
8
8
  count_lines_path = Path(count_lines.__file__).resolve().parent.joinpath("count_lines.py")
9
9
  # --project $HOME/code/machineconfig
10
- cmd = f"""uv run --python 3.13 --with machineconfig--group plot {count_lines_path} analyze-over-time {repo_path}"""
10
+ cmd = f"""uv run --python 3.13 --with machineconfig --group plot {count_lines_path} analyze-over-time {repo_path}"""
11
11
  from machineconfig.utils.code import run_script
12
12
  run_script(cmd)
13
13
 
@@ -186,8 +186,8 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
186
186
 
187
187
  if "retrieve_repositories" in selected_options:
188
188
  console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
189
- from machineconfig.scripts.python import repos as module
190
- module.main(directory=str(Path.home() / "code"), capture=True, cloud="odg1")
189
+ from machineconfig.scripts.python import repos
190
+ repos.clone(directory=str(Path.home() / "code"), cloud="odg1")
191
191
 
192
192
  if "retrieve_data" in selected_options:
193
193
  console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
@@ -73,7 +73,7 @@ def all(
73
73
 
74
74
 
75
75
  @sync_app.command()
76
- def record(
76
+ def capture(
77
77
  directory: DirectoryArgument = None,
78
78
  cloud: CloudOption = None,
79
79
  ) -> None:
@@ -87,7 +87,7 @@ def record(
87
87
  if cloud is not None:
88
88
  PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
89
89
  @sync_app.command()
90
- def capture(
90
+ def clone(
91
91
  directory: DirectoryArgument = None,
92
92
  cloud: CloudOption = None,
93
93
  ) -> None:
@@ -2,11 +2,62 @@ from machineconfig.utils.path_extended import PathExtended, PLike
2
2
  from machineconfig.utils.accessories import randstr
3
3
  from rich.console import Console
4
4
  from rich.panel import Panel
5
-
5
+ import hashlib
6
+ from typing import TypedDict, Literal
6
7
 
7
8
  console = Console()
8
9
 
9
10
 
11
+ class SymlinkResult(TypedDict):
12
+ action: Literal[
13
+ "already_linked",
14
+ "relinking",
15
+ "fixing_broken_link",
16
+ "identical_files",
17
+ "backing_up_source",
18
+ "backing_up_target",
19
+ "relinking_to_new_target",
20
+ "moving_to_target",
21
+ "new_link",
22
+ "new_link_and_target",
23
+ "linking",
24
+ "error"
25
+ ]
26
+ details: str
27
+
28
+
29
+ class CopyResult(TypedDict):
30
+ action: Literal[
31
+ "already_linked",
32
+ "relinking",
33
+ "fixing_broken_link",
34
+ "backing_up_source",
35
+ "backing_up_target",
36
+ "relinking_to_new_target",
37
+ "moving_to_target",
38
+ "new_link",
39
+ "new_link_and_target",
40
+ "copying",
41
+ "error"
42
+ ]
43
+ details: str
44
+
45
+
46
+ def files_are_identical(file1: PathExtended, file2: PathExtended) -> bool:
47
+ """Check if two files are identical by comparing their SHA256 hashes."""
48
+ def get_file_hash(path: PathExtended) -> str:
49
+ hash_sha256 = hashlib.sha256()
50
+ with open(path, "rb") as f:
51
+ for chunk in iter(lambda: f.read(4096), b""):
52
+ hash_sha256.update(chunk)
53
+ return hash_sha256.hexdigest()
54
+
55
+ try:
56
+ return get_file_hash(file1) == get_file_hash(file2)
57
+ except (OSError, IOError):
58
+ return False
59
+
60
+
10
61
  def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
11
62
  """Build symboic links from various relevant paths (e.g. data) to `repo_root/links/<name>` to facilitate easy access from
12
63
  tree explorer of the IDE.
@@ -33,12 +84,14 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
33
84
  links_path.symlink_to(target=a_target_path)
34
85
 
35
86
 
36
- def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool):
87
+ def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool) -> SymlinkResult:
37
88
  """helper function. creates a symlink from `this` to `to_this`.
38
89
 
90
+ Returns a dict with 'action' and 'details' keys describing what was done.
91
+
39
92
  this: exists AND to_this exists AND this is a symlink pointing to to_this ===> Resolution: AUTO: do nothing, already linked correctly.
40
93
  this: exists AND to_this exists AND this is a symlink pointing to somewhere else ===> Resolution: AUTO: delete this symlink, create symlink to to_this
41
- this: exists AND to_this exists AND this is a concrete path ===> Resolution: DANGER: require user input to decide (param prioritize_to_this). Give two options: 1) prioritize `this`: to_this is backed up as to_this.orig_<randstr()>, to_this is deleted, and symlink is created from this to to_this as normal; 2) prioritize `to_this`: `this` is backed up as this.orig_<randstr()>, `this` is deleted, and symlink is created from this to to_this as normal.
94
+ this: exists AND to_this exists AND this is a concrete path ===> Resolution: DANGER: If files are identical (same hash), delete `this` and create symlink to `to_this`. Otherwise, two options: 1) prioritize `this`: to_this is backed up as to_this.orig_<randstr()>, to_this is deleted, and symlink is created from this to to_this as normal; 2) prioritize `to_this`: `this` is backed up as this.orig_<randstr()>, `this` is deleted, and symlink is created from this to to_this as normal.
42
95
 
43
96
  this: exists AND to_this doesn't exist AND this is a symlink pointing to somewhere else ===> Resolution: AUTO: delete this symlink, create symlink to to_this (touch to_this)
44
97
  this: exists AND to_this doesn't exist AND this is a symlink pointing to to_this ===> Resolution: AUTO: delete this symlink, create symlink to to_this (touch to_this)
@@ -50,6 +103,9 @@ def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this:
50
103
  """
51
104
  this = PathExtended(this).expanduser().absolute()
52
105
  to_this = PathExtended(to_this).expanduser().absolute()
106
+ action_taken = ""
107
+ details = ""
108
+
53
109
  # Case analysis based on docstring
54
110
  if this.exists():
55
111
  if to_this.exists():
@@ -58,33 +114,53 @@ def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this:
58
114
  try:
59
115
  if this.readlink().resolve() == to_this.resolve():
60
116
  # Case: this exists AND to_this exists AND this is a symlink pointing to to_this
117
+ action_taken = "already_linked"
118
+ details = "Symlink already correctly points to target"
61
119
  console.print(Panel(f"✅ ALREADY LINKED | {this} ➡️ {to_this}", title="Already Linked", expand=False))
62
- return
120
+ return {"action": action_taken, "details": details}
63
121
  else:
64
122
  # Case: this exists AND to_this exists AND this is a symlink pointing to somewhere else
123
+ action_taken = "relinking"
124
+ details = "Updated existing symlink to point to new target"
65
125
  console.print(Panel(f"🔄 RELINKING | Updating symlink from {this} ➡️ {to_this}", title="Relinking", expand=False))
66
126
  this.delete(sure=True)
67
127
  except OSError:
68
128
  # Broken symlink case
129
+ action_taken = "fixing_broken_link"
130
+ details = "Removed broken symlink and will create new one"
69
131
  console.print(Panel(f"🔄 FIXING BROKEN LINK | Fixing broken symlink from {this} ➡️ {to_this}", title="Fixing Broken Link", expand=False))
70
132
  this.delete(sure=True)
71
133
  else:
72
134
  # Case: this exists AND to_this exists AND this is a concrete path
73
- if prioritize_to_this:
74
- # prioritize `to_this`: `this` is backed up, `this` is deleted, symlink created
75
- backup_name = f"{this}.orig_{randstr()}"
76
- console.print(Panel(f"📦 BACKING UP | Moving {this} to {backup_name}, prioritizing {to_this}", title="Backing Up", expand=False))
77
- this.move(path=backup_name)
135
+ if files_are_identical(this, to_this):
136
+ # Files are identical, just delete this and create symlink
137
+ action_taken = "identical_files"
138
+ details = "Files identical, removed source and will create symlink"
139
+ console.print(Panel(f"🔗 IDENTICAL FILES | Files are identical, deleting {this} and creating symlink to {to_this}", title="Identical Files", expand=False))
140
+ this.delete(sure=True)
78
141
  else:
79
- # prioritize `this`: to_this is backed up, to_this is deleted, this content moved to to_this location
80
- backup_name = f"{to_this}.orig_{randstr()}"
81
- console.print(Panel(f"📦 BACKING UP | Moving {to_this} to {backup_name}, prioritizing {this}", title="Backing Up", expand=False))
82
- to_this.move(path=backup_name)
83
- this.move(path=to_this)
142
+ # Files are different, use prioritization logic
143
+ if prioritize_to_this:
144
+ # prioritize `to_this`: `this` is backed up, `this` is deleted, symlink created
145
+ backup_name = f"{this}.orig_{randstr()}"
146
+ action_taken = "backing_up_source"
147
+ details = f"Backed up source to {backup_name}, prioritizing target"
148
+ console.print(Panel(f"📦 BACKING UP | Moving {this} to {backup_name}, prioritizing {to_this}", title="Backing Up", expand=False))
149
+ this.move(path=backup_name)
150
+ else:
151
+ # prioritize `this`: to_this is backed up, to_this is deleted, this content moved to to_this location
152
+ backup_name = f"{to_this}.orig_{randstr()}"
153
+ action_taken = "backing_up_target"
154
+ details = f"Backed up target to {backup_name}, prioritizing source"
155
+ console.print(Panel(f"📦 BACKING UP | Moving {to_this} to {backup_name}, prioritizing {this}", title="Backing Up", expand=False))
156
+ to_this.move(path=backup_name)
157
+ this.move(path=to_this)
84
158
  else:
85
159
  # to_this doesn't exist
86
160
  if this.is_symlink():
87
161
  # Case: this exists AND to_this doesn't exist AND this is a symlink (pointing anywhere)
162
+ action_taken = "relinking_to_new_target"
163
+ details = "Removed existing symlink, will create target and new symlink"
88
164
  console.print(Panel(f"🔄 RELINKING | Updating symlink from {this} ➡️ {to_this}", title="Relinking", expand=False))
89
165
  this.delete(sure=True)
90
166
  # Create to_this
@@ -92,70 +168,111 @@ def symlink_func(this: PathExtended, to_this: PathExtended, prioritize_to_this:
92
168
  to_this.touch()
93
169
  else:
94
170
  # Case: this exists AND to_this doesn't exist AND this is a concrete path
171
+ action_taken = "moving_to_target"
172
+ details = "Moved source to target location, will create symlink"
95
173
  console.print(Panel(f"📁 MOVING | Moving {this} to {to_this}, then creating symlink", title="Moving", expand=False))
96
174
  this.move(path=to_this)
97
175
  else:
98
176
  # this doesn't exist
99
177
  if to_this.exists():
100
178
  # Case: this doesn't exist AND to_this exists
179
+ action_taken = "new_link"
180
+ details = "Creating new symlink to existing target"
101
181
  console.print(Panel(f"🆕 NEW LINK | Creating new symlink from {this} ➡️ {to_this}", title="New Link", expand=False))
102
182
  else:
103
183
  # Case: this doesn't exist AND to_this doesn't exist
184
+ action_taken = "new_link_and_target"
185
+ details = "Creating target file and new symlink"
104
186
  console.print(Panel(f"🆕 NEW LINK & TARGET | Creating {to_this} and symlink from {this} ➡️ {to_this}", title="New Link & Target", expand=False))
105
187
  to_this.parent.mkdir(parents=True, exist_ok=True)
106
188
  to_this.touch()
189
+
107
190
  # Create the symlink
108
191
  try:
192
+ action_taken = action_taken or "linking"
193
+ details = details or "Creating symlink"
109
194
  console.print(Panel(f"🔗 LINKING | Creating symlink from {this} ➡️ {to_this}", title="Linking", expand=False))
110
195
  PathExtended(this).symlink_to(target=to_this, verbose=True, overwrite=True)
196
+ return {"action": action_taken, "details": details}
111
197
  except Exception as ex:
198
+ action_taken = "error"
199
+ details = f"Failed to create symlink: {str(ex)}"
112
200
  console.print(Panel(f"❌ ERROR | Failed at linking {this} ➡️ {to_this}. Reason: {ex}", title="Error", expand=False))
201
+ return {"action": action_taken, "details": details}
113
202
 
114
203
 
115
- def symlink_copy(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool):
204
+ def symlink_copy(this: PathExtended, to_this: PathExtended, prioritize_to_this: bool) -> CopyResult:
116
205
  this = PathExtended(this).expanduser().absolute()
117
206
  to_this = PathExtended(to_this).expanduser().absolute()
207
+ action_taken = ""
208
+ details = ""
209
+
118
210
  if this.exists():
119
211
  if to_this.exists():
120
212
  if this.is_symlink():
121
213
  try:
122
214
  if this.readlink().resolve() == to_this.resolve():
215
+ action_taken = "already_linked"
216
+ details = "Symlink already correctly points to target"
123
217
  console.print(Panel(f"✅ ALREADY LINKED | {this} ➡️ {to_this}", title="Already Linked", expand=False))
124
- return
218
+ return {"action": action_taken, "details": details}
125
219
  else:
220
+ action_taken = "relinking"
221
+ details = "Updated existing symlink to point to new target"
126
222
  console.print(Panel(f"🔄 RELINKING | Updating symlink from {this} ➡️ {to_this}", title="Relinking", expand=False))
127
223
  this.delete(sure=True)
128
224
  except OSError:
225
+ action_taken = "fixing_broken_link"
226
+ details = "Removed broken symlink and will create new one"
129
227
  console.print(Panel(f"🔄 FIXING BROKEN LINK | Fixing broken symlink from {this} ➡️ {to_this}", title="Fixing Broken Link", expand=False))
130
228
  this.delete(sure=True)
131
229
  else:
132
230
  if prioritize_to_this:
133
231
  backup_name = f"{this}.orig_{randstr()}"
232
+ action_taken = "backing_up_source"
233
+ details = f"Backed up source to {backup_name}, prioritizing target"
134
234
  console.print(Panel(f"📦 BACKING UP | Moving {this} to {backup_name}, prioritizing {to_this}", title="Backing Up", expand=False))
135
235
  this.move(path=backup_name)
136
236
  else:
137
237
  backup_name = f"{to_this}.orig_{randstr()}"
238
+ action_taken = "backing_up_target"
239
+ details = f"Backed up target to {backup_name}, prioritizing source"
138
240
  console.print(Panel(f"📦 BACKING UP | Moving {to_this} to {backup_name}, prioritizing {this}", title="Backing Up", expand=False))
139
241
  to_this.move(path=backup_name)
140
242
  this.move(path=to_this)
141
243
  else:
142
244
  if this.is_symlink():
245
+ action_taken = "relinking_to_new_target"
246
+ details = "Removed existing symlink, will create target and new symlink"
143
247
  console.print(Panel(f"🔄 RELINKING | Updating symlink from {this} ➡️ {to_this}", title="Relinking", expand=False))
144
248
  this.delete(sure=True)
145
249
  to_this.parent.mkdir(parents=True, exist_ok=True)
146
250
  to_this.touch()
147
251
  else:
252
+ action_taken = "moving_to_target"
253
+ details = "Moved source to target location, will copy"
148
254
  console.print(Panel(f"📁 MOVING | Moving {this} to {to_this}, then copying", title="Moving", expand=False))
149
255
  this.move(path=to_this)
150
256
  else:
151
257
  if to_this.exists():
258
+ action_taken = "new_link"
259
+ details = "Copying existing target to source location"
152
260
  console.print(Panel(f"🆕 NEW LINK | Copying {to_this} to {this}", title="New Link", expand=False))
153
261
  else:
262
+ action_taken = "new_link_and_target"
263
+ details = "Creating target file and copying to source"
154
264
  console.print(Panel(f"🆕 NEW LINK & TARGET | Creating {to_this} and copying to {this}", title="New Link & Target", expand=False))
155
265
  to_this.parent.mkdir(parents=True, exist_ok=True)
156
266
  to_this.touch()
267
+
157
268
  try:
269
+ action_taken = action_taken or "copying"
270
+ details = details or "Copying file"
158
271
  console.print(Panel(f"📋 COPYING | Copying {to_this} to {this}", title="Copying", expand=False))
159
272
  to_this.copy(path=this, overwrite=True, verbose=True)
273
+ return {"action": action_taken, "details": details}
160
274
  except Exception as ex:
275
+ action_taken = "error"
276
+ details = f"Failed to copy file: {str(ex)}"
161
277
  console.print(Panel(f"❌ ERROR | Failed at copying {to_this} to {this}. Reason: {ex}", title="Error", expand=False))
278
+ return {"action": action_taken, "details": details}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 5.12
3
+ Version: 5.13
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -88,10 +88,7 @@ src/machineconfig/jobs/linux/msc/lid.sh
88
88
  src/machineconfig/jobs/linux/msc/network.sh
89
89
  src/machineconfig/jobs/python/__init__.py
90
90
  src/machineconfig/jobs/python/check_installations.py
91
- src/machineconfig/jobs/python/create_bootable_media.py
92
- src/machineconfig/jobs/python/python_cargo_build_share.py
93
91
  src/machineconfig/jobs/python/python_ve_symlink.py
94
- src/machineconfig/jobs/python/tasks.py
95
92
  src/machineconfig/jobs/python/vscode/api.py
96
93
  src/machineconfig/jobs/python/vscode/sync_code.py
97
94
  src/machineconfig/jobs/windows/start_terminal.ps1
@@ -1,16 +0,0 @@
1
- # try ventory or netboot.xyz
2
-
3
- # # one can either install rufus: https://rufus.ie/en/
4
- # # however, to create bootable media with multiple OSs to choose from:
5
-
6
- # PathExtended(r'https://github.com/ventoy/Ventoy/archive/refs/tags/v1.0.78.zip').download().unzip().search[0]()
7
- # download_folder = PathExtended.home().joinpath("Downloads/os")
8
- # download_folder.mkdir(parents=True, exist_ok=True)
9
- # PathExtended(r'https://mirrors.layeronline.com/linuxmint/stable/21/linuxmint-21-cinnamon-64bit.iso').download(folder=download_folder)
10
- # download_folder2 = PathExtended.home().joinpath("Downloads/os")
11
- # download_folder2.mkdir(parents=True, exist_ok=True)
12
- # PathExtended(r'https://download.manjaro.org/kde/21.3.7/manjaro-kde-21.3.7-minimal-220816-linux515.iso').download(folder=download_folder2)
13
-
14
-
15
- # if __name__ == '__main__':
16
- # pass