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

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

Potentially problematic release.


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

Files changed (418) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +1 -2
  5. machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
  6. machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +128 -330
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  13. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  14. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  17. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  18. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  19. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  20. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  23. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  24. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  25. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  26. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  31. machineconfig/jobs/{python → installer}/check_installations.py +2 -16
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +69 -53
  34. machineconfig/jobs/installer/custom/hx.py +77 -20
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
  36. machineconfig/jobs/installer/custom_dev/brave.py +43 -35
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +33 -21
  40. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  41. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  42. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  43. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  44. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  45. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
  46. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  47. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  48. machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
  49. machineconfig/jobs/installer/custom_dev/winget.py +1 -0
  50. machineconfig/jobs/installer/installer_data.json +3406 -0
  51. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  52. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  53. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  54. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  55. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  56. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  57. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  58. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  59. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  60. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  61. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  62. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  63. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  64. machineconfig/jobs/installer/package_groups.py +255 -0
  65. machineconfig/logger.py +0 -1
  66. machineconfig/profile/backup.toml +49 -0
  67. machineconfig/profile/bash_shell_profiles.md +11 -0
  68. machineconfig/profile/create_helper.py +74 -0
  69. machineconfig/profile/create_links.py +288 -0
  70. machineconfig/profile/create_links_export.py +100 -0
  71. machineconfig/profile/create_shell_profile.py +136 -0
  72. machineconfig/profile/mapper.toml +258 -0
  73. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  74. machineconfig/scripts/__init__.py +0 -4
  75. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  76. machineconfig/scripts/linux/wrap_mcfg +47 -0
  77. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  78. machineconfig/scripts/python/agents.py +198 -0
  79. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  80. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  81. machineconfig/scripts/python/ai/generate_files.py +307 -42
  82. machineconfig/scripts/python/ai/initai.py +3 -28
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  89. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  90. machineconfig/scripts/python/cloud.py +29 -0
  91. machineconfig/scripts/python/croshell.py +117 -181
  92. machineconfig/scripts/python/define.py +31 -0
  93. machineconfig/scripts/python/devops.py +44 -124
  94. machineconfig/scripts/python/devops_navigator.py +10 -0
  95. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  96. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  97. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  98. machineconfig/scripts/python/explore.py +49 -0
  99. machineconfig/scripts/python/fire_jobs.py +106 -244
  100. machineconfig/scripts/python/ftpx.py +125 -68
  101. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  102. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  103. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  106. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  107. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  108. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  109. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  110. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  111. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  112. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  113. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +11 -19
  114. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  115. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  116. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  117. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
  118. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  119. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  120. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  121. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  122. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  123. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  124. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  125. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  126. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  127. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  128. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  129. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  130. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  131. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  132. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  133. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  134. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  135. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -87
  136. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  137. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  138. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  139. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  140. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  141. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  142. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  143. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  144. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  145. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  146. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  147. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  148. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  149. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  150. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  151. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  152. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  153. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  154. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  155. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  156. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  157. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  158. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  159. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  160. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  161. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  162. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  163. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  164. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  165. machineconfig/scripts/python/interactive.py +79 -160
  166. machineconfig/scripts/python/machineconfig.py +63 -0
  167. machineconfig/scripts/python/msearch.py +21 -0
  168. machineconfig/scripts/python/nw/__init__.py +0 -0
  169. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  170. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  171. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  172. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  173. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  174. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  175. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  176. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  177. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  178. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  179. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +6 -5
  180. machineconfig/scripts/python/sessions.py +167 -0
  181. machineconfig/scripts/python/terminal.py +127 -0
  182. machineconfig/scripts/python/utils.py +66 -0
  183. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  184. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  185. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  186. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  187. machineconfig/settings/broot/br.sh +0 -4
  188. machineconfig/settings/broot/conf.toml +1 -1
  189. machineconfig/settings/helix/config.toml +16 -0
  190. machineconfig/settings/helix/languages.toml +13 -4
  191. machineconfig/settings/helix/yazi-picker.sh +12 -0
  192. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  193. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  194. machineconfig/settings/lf/linux/lfrc +10 -12
  195. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  196. machineconfig/settings/lf/windows/lfrc +18 -38
  197. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  198. machineconfig/settings/linters/.ruff.toml +1 -1
  199. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  200. machineconfig/settings/marimo/marimo.toml +80 -0
  201. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  202. machineconfig/settings/pistol/pistol.conf +1 -1
  203. machineconfig/settings/shells/bash/init.sh +55 -31
  204. machineconfig/settings/shells/nushell/config.nu +1 -34
  205. machineconfig/settings/shells/nushell/init.nu +127 -0
  206. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  207. machineconfig/settings/shells/starship/starship.toml +16 -0
  208. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  209. machineconfig/settings/shells/wt/settings.json +32 -17
  210. machineconfig/settings/shells/zsh/init.sh +89 -0
  211. machineconfig/settings/svim/linux/init.toml +0 -4
  212. machineconfig/settings/svim/windows/init.toml +0 -3
  213. machineconfig/settings/yazi/init.lua +57 -0
  214. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  215. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  216. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  217. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  218. machineconfig/settings/yazi/yazi.toml +13 -0
  219. machineconfig/setup_linux/__init__.py +10 -0
  220. machineconfig/setup_linux/apps_desktop.sh +89 -0
  221. machineconfig/setup_linux/apps_gui.sh +64 -0
  222. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  223. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  224. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  225. machineconfig/setup_linux/uv.sh +15 -0
  226. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  227. machineconfig/setup_mac/__init__.py +16 -0
  228. machineconfig/setup_mac/apps_gui.sh +248 -0
  229. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  230. machineconfig/setup_mac/uv.sh +36 -0
  231. machineconfig/setup_windows/__init__.py +8 -0
  232. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  233. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  234. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  235. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  236. machineconfig/setup_windows/uv.ps1 +10 -0
  237. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -9
  238. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  239. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  240. machineconfig/utils/accessories.py +7 -5
  241. machineconfig/utils/cloud/onedrive/README.md +139 -0
  242. machineconfig/utils/code.py +140 -93
  243. machineconfig/utils/files/art/fat_croco.txt +10 -0
  244. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  245. machineconfig/utils/files/art/happy_croco.txt +22 -0
  246. machineconfig/utils/files/art/water_croco.txt +11 -0
  247. machineconfig/utils/files/ascii_art.py +118 -0
  248. machineconfig/utils/files/dbms.py +257 -0
  249. machineconfig/utils/files/headers.py +68 -0
  250. machineconfig/utils/files/ouch/__init__.py +0 -0
  251. machineconfig/utils/files/ouch/decompress.py +45 -0
  252. machineconfig/utils/files/read.py +95 -0
  253. machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
  254. machineconfig/utils/installer_utils/installer_class.py +68 -126
  255. machineconfig/utils/installer_utils/installer_cli.py +181 -0
  256. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
  257. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
  258. machineconfig/utils/io.py +77 -23
  259. machineconfig/utils/links.py +309 -100
  260. machineconfig/utils/meta.py +255 -0
  261. machineconfig/utils/notifications.py +1 -1
  262. machineconfig/utils/options.py +10 -25
  263. machineconfig/utils/path_extended.py +94 -104
  264. machineconfig/utils/path_helper.py +75 -22
  265. machineconfig/utils/procs.py +50 -74
  266. machineconfig/utils/scheduler.py +94 -97
  267. machineconfig/utils/scheduling.py +0 -3
  268. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  269. machineconfig/utils/schemas/installer/installer_types.py +0 -1
  270. machineconfig/utils/schemas/layouts/layout_types.py +2 -1
  271. machineconfig/utils/source_of_truth.py +3 -6
  272. machineconfig/utils/ssh.py +742 -254
  273. machineconfig/utils/ssh_utils/utils.py +0 -0
  274. machineconfig/utils/terminal.py +3 -140
  275. machineconfig/utils/tst.py +20 -0
  276. machineconfig/utils/upgrade_packages.py +109 -28
  277. machineconfig/utils/ve.py +13 -5
  278. machineconfig-7.66.dist-info/METADATA +124 -0
  279. machineconfig-7.66.dist-info/RECORD +451 -0
  280. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  281. machineconfig/cluster/templates/utils.py +0 -51
  282. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  283. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  284. machineconfig/jobs/installer/packages_custom_dev.json +0 -226
  285. machineconfig/jobs/installer/packages_custom_essential.json +0 -39
  286. machineconfig/jobs/installer/packages_github_dev.json +0 -1110
  287. machineconfig/jobs/installer/packages_github_essential.json +0 -804
  288. machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
  289. machineconfig/jobs/python/create_bootable_media.py +0 -16
  290. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  291. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  292. machineconfig/jobs/python/tasks.py +0 -3
  293. machineconfig/jobs/python/vscode/api.py +0 -49
  294. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  295. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  296. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  297. machineconfig/jobs/windows/startup_file.cmd +0 -2
  298. machineconfig/profile/create.py +0 -170
  299. machineconfig/profile/shell.py +0 -176
  300. machineconfig/scripts/cloud/init.sh +0 -119
  301. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  302. machineconfig/scripts/linux/cloud_copy +0 -2
  303. machineconfig/scripts/linux/cloud_mount +0 -2
  304. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  305. machineconfig/scripts/linux/cloud_sync +0 -2
  306. machineconfig/scripts/linux/croshell +0 -3
  307. machineconfig/scripts/linux/devops +0 -2
  308. machineconfig/scripts/linux/fire +0 -2
  309. machineconfig/scripts/linux/fire_agents +0 -2
  310. machineconfig/scripts/linux/ftpx +0 -2
  311. machineconfig/scripts/linux/fzf2g +0 -21
  312. machineconfig/scripts/linux/fzffg +0 -25
  313. machineconfig/scripts/linux/gh_models +0 -2
  314. machineconfig/scripts/linux/initai +0 -2
  315. machineconfig/scripts/linux/kill_process +0 -2
  316. machineconfig/scripts/linux/programs +0 -21
  317. machineconfig/scripts/linux/repos +0 -2
  318. machineconfig/scripts/linux/scheduler +0 -2
  319. machineconfig/scripts/linux/share_smb +0 -1
  320. machineconfig/scripts/linux/start_slidev +0 -2
  321. machineconfig/scripts/linux/start_terminals +0 -3
  322. machineconfig/scripts/linux/warp-cli.sh +0 -122
  323. machineconfig/scripts/linux/wifi_conn +0 -2
  324. machineconfig/scripts/linux/z_ls +0 -104
  325. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  326. machineconfig/scripts/python/cloud_repo_sync.py +0 -186
  327. machineconfig/scripts/python/devops_devapps_install.py +0 -159
  328. machineconfig/scripts/python/devops_update_repos.py +0 -180
  329. machineconfig/scripts/python/dotfile.py +0 -52
  330. machineconfig/scripts/python/fire_agents.py +0 -175
  331. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  332. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  333. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
  334. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
  335. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  336. machineconfig/scripts/python/gh_models.py +0 -104
  337. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  338. machineconfig/scripts/python/repos.py +0 -80
  339. machineconfig/scripts/python/repos_helper_action.py +0 -335
  340. machineconfig/scripts/python/share_terminal.py +0 -104
  341. machineconfig/scripts/python/snapshot.py +0 -25
  342. machineconfig/scripts/python/start_terminals.py +0 -121
  343. machineconfig/scripts/python/t4.py +0 -17
  344. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  345. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  346. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  347. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  348. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  349. machineconfig/scripts/windows/croshell.ps1 +0 -1
  350. machineconfig/scripts/windows/devops.ps1 +0 -1
  351. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  352. machineconfig/scripts/windows/fire.ps1 +0 -1
  353. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  354. machineconfig/scripts/windows/gpt.ps1 +0 -1
  355. machineconfig/scripts/windows/grep.ps1 +0 -2
  356. machineconfig/scripts/windows/initai.ps1 +0 -1
  357. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  358. machineconfig/scripts/windows/nano.ps1 +0 -3
  359. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  360. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  361. machineconfig/scripts/windows/repos.ps1 +0 -1
  362. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  363. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  364. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  365. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  366. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  367. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  368. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  369. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  370. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  371. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  372. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  373. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  374. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  375. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  376. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  377. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  378. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  379. machineconfig-3.99.dist-info/METADATA +0 -167
  380. machineconfig-3.99.dist-info/RECORD +0 -409
  381. machineconfig-3.99.dist-info/entry_points.txt +0 -18
  382. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  383. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  384. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  385. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  386. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  387. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  388. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  389. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  390. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  391. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  392. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  393. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  394. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  395. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  396. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  397. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  398. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  399. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  400. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  401. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  402. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  403. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  404. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  405. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  406. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  407. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  408. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  409. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  410. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  411. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  412. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  413. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  414. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  415. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  416. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  417. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  418. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
File without changes
@@ -1,9 +1,6 @@
1
- from machineconfig.utils.path_extended import PathExtended, OPLike
1
+ from machineconfig.utils.path_extended import PathExtended
2
2
  import subprocess
3
3
  from typing import Any, BinaryIO, Optional, Union
4
- import platform
5
- import sys
6
- import os
7
4
  from typing import Literal, TypeAlias
8
5
  from dataclasses import dataclass
9
6
 
@@ -38,7 +35,8 @@ class Response:
38
35
  def __call__(self, *args: Any, **kwargs: Any) -> Optional[str]:
39
36
  _ = args, kwargs
40
37
  return self.op.rstrip() if type(self.op) is str else None
41
-
38
+ def __repr__(self) -> str:
39
+ return f"Response({self.input=}, {self.output=}, {self.desc=}, {self.op=}, {self.ip=}, {self.err=}, {self.returncode=})"
42
40
  @property
43
41
  def op(self) -> str:
44
42
  return self.output.stdout
@@ -100,138 +98,3 @@ class Response:
100
98
  txt = tmp1 + Text(str(self.input), style="white") + tmp2 + Text("\n".join(list_str), style="white")
101
99
  con.print(Panel(txt, title=f"🖥️ {self.desc}", subtitle=f"📋 {desc}", width=150, style="bold cyan on black"))
102
100
  return self
103
-
104
-
105
- # DEPRECATED: Use subprocess.run directly instead of Terminal class.
106
- # The Terminal class has been replaced with inline subprocess calls to underlying primitives.
107
- # This file is kept for reference but should not be used.
108
-
109
-
110
- class Terminal:
111
- def __init__(self, stdout: Optional[int] = subprocess.PIPE, stderr: Optional[int] = subprocess.PIPE, stdin: Optional[int] = subprocess.PIPE, elevated: bool = False):
112
- self.machine: str = platform.system()
113
- self.elevated: bool = elevated
114
- self.stdout = stdout
115
- self.stderr = stderr
116
- self.stdin = stdin
117
-
118
- # def set_std_system(self): self.stdout = sys.stdout; self.stderr = sys.stderr; self.stdin = sys.stdin
119
- def set_std_pipe(self):
120
- self.stdout = subprocess.PIPE
121
- self.stderr = subprocess.PIPE
122
- self.stdin = subprocess.PIPE
123
-
124
- def set_std_null(self):
125
- self.stdout, self.stderr, self.stdin = subprocess.DEVNULL, subprocess.DEVNULL, subprocess.DEVNULL # Equivalent to `echo 'foo' &> /dev/null`
126
-
127
- def run(self, *cmds: str, shell: Optional[SHELLS] = "default", check: bool = False, ip: Optional[str] = None) -> Response: # Runs SYSTEM commands like subprocess.run
128
- """Blocking operation. Thus, if you start a shell via this method, it will run in the main and won't stop until you exit manually IF stdin is set to sys.stdin, otherwise it will run and close quickly. Other combinations of stdin, stdout can lead to funny behaviour like no output but accept input or opposite.
129
- * This method is short for: res = subprocess.run("powershell command", capture_output=True, shell=True, text=True) and unlike os.system(cmd), subprocess.run(cmd) gives much more control over the output and input.
130
- * `shell=True` loads up the profile of the shell called so more specific commands can be run. Importantly, on Windows, the `start` command becomes availalbe and new windows can be launched.
131
- * `capture_output` prevents the stdout to redirect to the stdout of the script automatically, instead it will be stored in the Response object returned. # `capture_output=True` same as `stdout=subprocess.PIPE, stderr=subprocess.PIPE`"""
132
- my_list = list(
133
- cmds
134
- ) # `subprocess.Popen` (process open) is the most general command. Used here to create asynchronous job. `subprocess.run` is a thin wrapper around Popen that makes it wait until it finishes the task. `suprocess.call` is an archaic command for pre-Python-3.5.
135
- if self.machine == "Windows" and shell in {"powershell", "pwsh"}:
136
- my_list = [shell, "-Command"] + my_list # alternatively, one can run "cmd"
137
- if self.elevated is False or self.is_user_admin():
138
- resp: subprocess.CompletedProcess[str] = subprocess.run(my_list, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=check, input=ip)
139
- else:
140
- resp = __import__("ctypes").windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
141
- return Response.from_completed_process(resp)
142
-
143
- def run_script(self, script: str, shell: SHELLS = "default", verbose: bool = False):
144
- if self.machine == "Linux":
145
- script = "#!/bin/bash" + "\n" + script # `source` is only available in bash.
146
- script_file = PathExtended.tmpfile(name="tmp_shell_script", suffix=".ps1" if self.machine == "Windows" else ".sh", folder="tmp_scripts")
147
- script_file.write_text(script, newline={"Windows": None, "Linux": "\n"}[self.machine])
148
- if shell == "default":
149
- if self.machine == "Windows":
150
- start_cmd = "powershell" # default shell on Windows is cmd which is not very useful. (./source is not available)
151
- full_command: Union[list[str], str] = [start_cmd, str(script_file)] # shell=True will cause this to be a string anyway (with space separation)
152
- else:
153
- start_cmd = "bash"
154
- full_command = f"{start_cmd} {script_file}" # full_command = [start_cmd, str(script_file)]
155
- else:
156
- full_command = f"{shell} {script_file}" # full_command = [shell, str(tmp_file)]
157
- if verbose:
158
- desc = "Script to be executed:"
159
- if platform.system() == "Windows":
160
- lexer = "powershell"
161
- elif platform.system() == "Linux":
162
- lexer = "sh"
163
- elif platform.system() == "Darwin":
164
- lexer = "sh" # macOS uses similar shell to Linux
165
- else:
166
- raise NotImplementedError(f"Platform {platform.system()} not supported.")
167
- from rich.console import Console
168
- from rich.panel import Panel
169
- from rich.syntax import Syntax
170
- import rich.progress as pb
171
-
172
- console = Console()
173
- console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 {desc}"), style="bold red")
174
- with pb.Progress(transient=True) as progress:
175
- _task = progress.add_task(f"Running Script @ {script_file}", total=None)
176
- resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
177
- else:
178
- resp = subprocess.run(full_command, stderr=self.stderr, stdin=self.stdin, stdout=self.stdout, text=True, shell=True, check=False)
179
- return Response.from_completed_process(resp)
180
-
181
- def run_py(self, script: str, wdir: OPLike = None, interactive: bool = True, ipython: bool = True, shell: Optional[str] = None, terminal: str = "", new_window: bool = True, header: bool = True): # async run, since sync run is meaningless.
182
- script = (Terminal.get_header(wdir=wdir, toolbox=True) if header else "") + script + ("\nDisplayData.set_pandas_auto_width()\n" if terminal in {"wt", "powershell", "pwsh"} else "")
183
- py_script = PathExtended.tmpfile(name="tmp_python_script", suffix=".py", folder="tmp_scripts/terminal")
184
- py_script.write_text(f"""print(r'''{script}''')""" + "\n" + script)
185
- print(f"""🚀 [ASYNC PYTHON SCRIPT] Script URI:
186
- {py_script.absolute().as_uri()}""")
187
- print("Script to be executed asyncronously: ", py_script.absolute().as_uri())
188
- shell_script = f"""
189
- {f"cd {wdir}" if wdir is not None else ""}
190
- {"ipython" if ipython else "python"} {"-i" if interactive else ""} {py_script}
191
- """
192
- shell_path = PathExtended.tmpfile(name="tmp_shell_script", suffix=".sh" if self.machine == "Linux" else ".ps1", folder="tmp_scripts/shell")
193
- shell_path.write_text(shell_script)
194
- if shell is None and self.machine == "Windows":
195
- shell = "pwsh"
196
- window = "start" if new_window and self.machine == "Windows" else ""
197
- os.system(f"{window} {terminal} {shell} {shell_script}")
198
-
199
- @staticmethod
200
- def is_user_admin() -> bool: # adopted from: https://stackoverflow.com/questions/19672352/how-to-run-script-with-elevated-privilege-on-windows"""
201
- if os.name == "nt":
202
- try:
203
- return __import__("ctypes").windll.shell32.IsUserAnAdmin()
204
- except Exception:
205
- import traceback
206
-
207
- traceback.print_exc()
208
- print("Admin check failed, assuming not an admin.")
209
- return False
210
- else:
211
- return os.getuid() == 0 # Check for root on Posix
212
-
213
- # @staticmethod
214
- # def run_as_admin(file: PLike, params: Any, wait: bool = False):
215
- # proce_info = install_n_import(library="win32com", package="pywin32", fromlist=["shell.shell.ShellExecuteEx"]).shell.shell.ShellExecuteEx(lpVerb='runas', lpFile=file, lpParameters=params)
216
- # # TODO update PATH for this to take effect immediately.
217
- # if wait: time.sleep(1)
218
- # return proce_info
219
-
220
- @staticmethod
221
- def get_header(wdir: OPLike, toolbox: bool):
222
- if toolbox:
223
- toobox_code = """
224
- try:
225
- from crocodile.toolbox import *
226
- except ImportError:
227
- print("Crocodile not found, skipping import.")
228
- pass
229
- """
230
- else:
231
- toobox_code = "# No toolbox import."
232
- return f"""
233
- # >> Code prepended
234
- {toobox_code}
235
- {'''sys.path.insert(0, r'{wdir}') ''' if wdir is not None else "# No path insertion."}
236
- # >> End of header, start of script passed
237
- """
@@ -0,0 +1,20 @@
1
+ from typing import Callable, ParamSpec, TypeVar, Any, Dict
2
+
3
+ P = ParamSpec('P')
4
+ R = TypeVar('R')
5
+
6
+ def typed_function(func: Callable[P, R], signature_dict: Dict[str, Any]) -> Callable[P, R]:
7
+ """
8
+ Returns the function with its signature preserved using ParamSpec.
9
+
10
+ The signature_dict is passed for potential future use or documentation,
11
+ but is not currently used in the implementation.
12
+
13
+ Args:
14
+ func: The function whose signature is to be preserved.
15
+ signature_dict: A dictionary describing the function's signature (not used).
16
+
17
+ Returns:
18
+ The original function, typed with ParamSpec to preserve its signature.
19
+ """
20
+ return func
@@ -1,5 +1,15 @@
1
+
1
2
  """
3
+
2
4
  Generate uv add commands from pyproject.toml dependency groups.
5
+
6
+ #!/bin/bash
7
+ # rm ./pyproject.toml
8
+ rm ./uv.lock
9
+ rm -rfd .venv
10
+ uv venv --python 3.13
11
+ uv init
12
+
3
13
  """
4
14
 
5
15
  from pathlib import Path
@@ -15,44 +25,48 @@ def generate_uv_add_commands(pyproject_path: Path, output_path: Path) -> None:
15
25
  pyproject_path: Path to the pyproject.toml file
16
26
  output_path: Path where to write the uv add commands
17
27
  """
18
- # Read pyproject.toml
19
28
  with open(pyproject_path, "rb") as f:
20
29
  pyproject_data: dict[str, Any] = tomllib.load(f)
21
30
 
22
31
  commands: list[str] = []
23
32
 
24
- # Handle main dependencies (no group)
25
33
  if "project" in pyproject_data and "dependencies" in pyproject_data["project"]:
26
- main_deps = pyproject_data["project"]["dependencies"]
34
+ main_deps: list[str] = pyproject_data["project"]["dependencies"]
27
35
  if main_deps:
28
- # Extract package names without version constraints
29
- package_names = [extract_package_name(dep) for dep in main_deps]
30
- commands.append(f"uv add {' '.join(package_names)}")
36
+ package_names: list[str] = [extract_package_name(dep) for dep in main_deps]
37
+ commands.append(f"uv add --no-cache {' '.join(package_names)}")
31
38
 
32
- # Handle optional dependencies as groups
33
39
  if "project" in pyproject_data and "optional-dependencies" in pyproject_data["project"]:
34
- optional_deps = pyproject_data["project"]["optional-dependencies"]
40
+ optional_deps: dict[str, list[str]] = pyproject_data["project"]["optional-dependencies"]
35
41
  for group_name, deps in optional_deps.items():
36
42
  if deps:
37
43
  package_names = [extract_package_name(dep) for dep in deps]
38
- commands.append(f"uv add {' '.join(package_names)} --group {group_name}")
44
+ commands.append(f"uv add --no-cache --group {group_name} {' '.join(package_names)}")
39
45
 
40
- # Handle dependency-groups (like dev)
41
46
  if "dependency-groups" in pyproject_data:
42
- dep_groups = pyproject_data["dependency-groups"]
47
+ dep_groups: dict[str, list[str]] = pyproject_data["dependency-groups"]
43
48
  for group_name, deps in dep_groups.items():
44
49
  if deps:
45
50
  package_names = [extract_package_name(dep) for dep in deps]
46
51
  if group_name == "dev":
47
- commands.append(f"uv add {' '.join(package_names)} --dev")
52
+ commands.append(f"uv add --no-cache --dev {' '.join(package_names)}")
48
53
  else:
49
- commands.append(f"uv add {' '.join(package_names)} --group {group_name}")
50
-
51
- # Write commands to output file
52
- with open(output_path, "w") as f:
53
- for command in commands:
54
- f.write(command + "\n")
55
-
54
+ commands.append(f"uv add --no-cache --group {group_name} {' '.join(package_names)}")
55
+
56
+ # with open(output_path, "w") as f:
57
+ # f.write("#!/bin/bash\n")
58
+ # f.write("set -e\n\n")
59
+ # f.write("uv cache clean --force\n\n")
60
+ # for command in commands:
61
+ # f.write(command + "\n")
62
+ script = f"""
63
+ #!/bin/bash
64
+ set -e
65
+ uv cache clean --force
66
+ rm -rfd .venv
67
+ {"".join(f"{command}\n" for command in commands)}
68
+ """
69
+ output_path.write_text(script.strip() + "\n", encoding="utf-8")
56
70
  print(f"Generated {len(commands)} uv add commands in {output_path}")
57
71
 
58
72
 
@@ -79,13 +93,80 @@ def extract_package_name(dependency_spec: str) -> str:
79
93
  return dependency_spec.strip()
80
94
 
81
95
 
96
+ def upgrade_machine_config_version() -> None:
97
+ """
98
+ Upgrade machineconfig version in pyproject.toml and all source files.
99
+
100
+ Reads current version from pyproject.toml, bumps it by 0.01, and replaces
101
+ all occurrences of machineconfig>={old_version} and machineconfig[group]>={old_version}
102
+ with the new version in Python (.py), shell (.sh), and PowerShell (.ps1) files.
103
+ """
104
+ current_dir: Path = Path.cwd()
105
+ pyproject_file: Path = current_dir / "pyproject.toml"
106
+
107
+ # Read current version from pyproject.toml
108
+ with open(pyproject_file, "rb") as f:
109
+ pyproject_data: dict[str, Any] = tomllib.load(f)
110
+
111
+ current_version_str: str = pyproject_data["project"]["version"]
112
+ version_parts: list[str] = current_version_str.split(".")
113
+ major: int = int(version_parts[0])
114
+ minor: int = int(version_parts[1])
115
+
116
+ # Bump minor version by 1, preserving zero-padding
117
+ new_minor: int = minor + 1
118
+ # Preserve the same number of digits as the original minor version
119
+ minor_width: int = len(version_parts[1])
120
+ new_version: str = f"{major}.{new_minor:0{minor_width}d}"
121
+
122
+ # Collect all optional dependency groups
123
+ optional_groups: set[str] = set()
124
+ if "project" in pyproject_data and "optional-dependencies" in pyproject_data["project"]:
125
+ optional_groups.update(pyproject_data["project"]["optional-dependencies"].keys())
126
+ if "dependency-groups" in pyproject_data:
127
+ optional_groups.update(pyproject_data["dependency-groups"].keys())
128
+
129
+ print(f"Upgrading from {current_version_str} to {new_version}")
130
+ print(f"Found optional groups: {', '.join(sorted(optional_groups))}")
131
+
132
+ # Update pyproject.toml
133
+ content: str = pyproject_file.read_text(encoding="utf-8")
134
+ updated_content: str = content.replace(f'version = "{current_version_str}"', f'version = "{new_version}"')
135
+ pyproject_file.write_text(updated_content, encoding="utf-8")
136
+ print(f"Updated pyproject.toml: {current_version_str} -> {new_version}")
137
+
138
+ # Find all Python files and replace version constraints
139
+ py_files: list[Path] = list(current_dir.glob("**/*.py")) + list(current_dir.glob("**/*.sh")) + list(current_dir.glob("**/*.ps1"))
140
+
141
+ files_updated: int = 0
142
+ for file_path in py_files:
143
+ try:
144
+ file_content: str = file_path.read_text(encoding="utf-8")
145
+ updated_file_content: str = file_content
146
+
147
+ # Replace base constraint (without group)
148
+ old_constraint: str = f"machineconfig>={current_version_str}"
149
+ new_constraint: str = f"machineconfig>={new_version}"
150
+ if old_constraint in updated_file_content:
151
+ updated_file_content = updated_file_content.replace(old_constraint, new_constraint)
152
+
153
+ # Replace constraints with optional groups
154
+ for group in optional_groups:
155
+ old_group_constraint: str = f"machineconfig[{group}]>={current_version_str}"
156
+ new_group_constraint: str = f"machineconfig[{group}]>={new_version}"
157
+ if old_group_constraint in updated_file_content:
158
+ updated_file_content = updated_file_content.replace(old_group_constraint, new_group_constraint)
159
+
160
+ if updated_file_content != file_content:
161
+ file_path.write_text(updated_file_content, encoding="utf-8")
162
+ files_updated += 1
163
+ print(f"Updated {file_path.relative_to(current_dir)}")
164
+ except (UnicodeDecodeError, PermissionError):
165
+ # Skip files that can't be read as text
166
+ pass
167
+
168
+ print(f"Updated {files_updated} files with version constraint")
169
+
170
+
82
171
  if __name__ == "__main__":
83
- # Example usage
84
- current_dir = Path.cwd()
85
- pyproject_file = current_dir / "pyproject.toml"
86
- output_file = current_dir / "uv_add_commands.txt"
87
-
88
- if pyproject_file.exists():
89
- generate_uv_add_commands(pyproject_file, output_file)
90
- else:
91
- print(f"pyproject.toml not found at {pyproject_file}")
172
+ upgrade_machine_config_version()
machineconfig/utils/ve.py CHANGED
@@ -1,14 +1,15 @@
1
- from machineconfig.utils.path_extended import PathExtended as PathExtended
2
- from machineconfig.utils.io import read_ini
3
- import platform
1
+
4
2
  from typing import Optional
5
3
 
6
4
 
7
- def get_ve_path_and_ipython_profile(init_path: PathExtended) -> tuple[Optional[str], Optional[str]]:
5
+ def get_ve_path_and_ipython_profile(init_path: "Path") -> tuple[Optional[str], Optional[str]]:
8
6
  """Works with .ve.ini .venv and .ve_path"""
9
7
  ve_path: Optional[str] = None
10
8
  ipy_profile: Optional[str] = None
11
9
  tmp = init_path
10
+
11
+ from machineconfig.utils.io import read_ini
12
+
12
13
  for _ in init_path.parents:
13
14
  if tmp.joinpath(".ve.ini").exists():
14
15
  ini = read_ini(tmp.joinpath(".ve.ini"))
@@ -39,10 +40,17 @@ def get_ve_path_and_ipython_profile(init_path: PathExtended) -> tuple[Optional[s
39
40
 
40
41
 
41
42
  def get_ve_activate_line(ve_root: str):
43
+ import platform
44
+ from pathlib import Path
42
45
  if platform.system() == "Windows":
43
- activate_ve_line = f". {ve_root}/Scripts/activate.ps1"
46
+ q = Path(ve_root).expanduser().relative_to(Path.home()).as_posix()
47
+ activate_ve_line = f". $HOME/{q}/Scripts/activate.ps1"
44
48
  elif platform.system() in ["Linux", "Darwin"]:
45
49
  activate_ve_line = f". {ve_root}/bin/activate"
46
50
  else:
47
51
  raise NotImplementedError(f"Platform {platform.system()} not supported.")
48
52
  return activate_ve_line
53
+
54
+
55
+ if __name__ == "__main__":
56
+ from pathlib import Path
@@ -0,0 +1,124 @@
1
+ Metadata-Version: 2.4
2
+ Name: machineconfig
3
+ Version: 7.66
4
+ Summary: Dotfiles management package
5
+ Author-email: Alex Al-Saffar <programmer@usa.com>
6
+ License: Apache 2.0
7
+ Project-URL: Homepage, https://github.com/thisismygitrepo/machineconfig
8
+ Project-URL: Bug Tracker, https://github.com/thisismygitrepo/machineconfig/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.13
13
+ Description-Content-Type: text/markdown
14
+ Requires-Dist: cryptography>=44.0.2
15
+ Requires-Dist: fire>=0.7.0
16
+ Requires-Dist: joblib>=1.5.2
17
+ Requires-Dist: paramiko>=3.5.1
18
+ Requires-Dist: randomname>=0.2.1
19
+ Requires-Dist: requests>=2.32.5
20
+ Requires-Dist: rich>=14.0.0
21
+ Requires-Dist: tenacity>=9.1.2
22
+ Requires-Dist: psutil>=7.0.0
23
+ Requires-Dist: gitpython>=3.1.44
24
+ Requires-Dist: pyfzf>=0.3.1
25
+ Requires-Dist: rclone-python>=0.1.23
26
+ Requires-Dist: questionary>=2.1.1
27
+ Requires-Dist: typer-slim>=0.19.2
28
+ Requires-Dist: typer>=0.19.2
29
+ Provides-Extra: windows
30
+ Requires-Dist: pywin32; extra == "windows"
31
+ Provides-Extra: plot
32
+ Requires-Dist: sqlalchemy>=2.0.43; extra == "plot"
33
+ Requires-Dist: ipykernel>=6.30.1; extra == "plot"
34
+ Requires-Dist: ipython>=9.5.0; extra == "plot"
35
+ Requires-Dist: jupyterlab>=4.4.9; extra == "plot"
36
+ Requires-Dist: kaleido>=1.1.0; extra == "plot"
37
+ Requires-Dist: matplotlib>=3.10.6; extra == "plot"
38
+ Requires-Dist: nbformat>=5.10.4; extra == "plot"
39
+ Requires-Dist: numpy>=2.3.3; extra == "plot"
40
+ Requires-Dist: plotly>=6.3.0; extra == "plot"
41
+ Requires-Dist: polars>=1.33.1; extra == "plot"
42
+ Requires-Dist: python-magic>=0.4.27; extra == "plot"
43
+
44
+
45
+ <p align="center">
46
+
47
+ <a href="https://github.com/thisismygitrepo/machineconfig/commits">
48
+ <img src="https://img.shields.io/github/commit-activity/m/thisismygitrepo/machineconfig" />
49
+ </a>
50
+
51
+ </p>
52
+
53
+
54
+ # 🧠 Welcome to **Machineconfig**
55
+
56
+ **Machineconfig** is a cli-based **Digital Life Manager** — It's called so because no existing category of software fully captures its scope. At the same time, it is a *Package Manager*, *Configuration Manager*, *Automation Tool*, *Dotfiles Manager*, *Data Solution*, and *Code Manager*, among other functionalities covered, all rolled into one seamless experience.
57
+
58
+
59
+ ## 💡 Motivation
60
+
61
+ But why do we need such a tool to combine all those functionalities?? Because you need one tool to manager your stack and dev-environment, put it together and maintain it.
62
+ Consider this concrete scenario: When setting up a new machine, VM, or Docker container, you often face dependency chains like this:
63
+
64
+ ```mermaid
65
+ flowchart TD
66
+ A["Need to setup my [dev] environment"] --> B["need my tool x, e.g.: yadm"]
67
+ B --> C["Requires git"]
68
+ C --> D["Requires package manager, e.g. brew"]
69
+ D --> E["Requires curl"]
70
+ E --> F["Requires network setup / system update"]
71
+ F --> G["Requires system configuration access"]
72
+ G --> H["Finally ready to start setup the tool x."]
73
+ ```
74
+
75
+ Machineconfig builds on shoulder of giants. A suite of best-in-class stack of projects on github are used, the most starred, active and written in Rust tools are used when possible. The goal is to provide a seamless experience that abstracts away the complexity of setting up and maintaining your digital environment. The goal of machineconfig is to replicate your setup, config, code, data and secrets on any machine, any os, in 5 minutes, using minimal user input. Then, from that point, machineconfig will help you maintain, update, backup and sync your digital life across all your devices, automatically.
76
+
77
+
78
+ ## ⚙️ Functional Overview
79
+
80
+ | Category | Comparable Tools | Description |
81
+ |------------------------|----------------------------------------------|-----------------------------------------------------------|
82
+ | **Package Manager** | `winget`, `apt`, `brew`, `nix` | Installs and manages software packages across systems. |
83
+ | **Configuration Manager** | `Ansible`, `Chef`, `Puppet` | Configures and maintains system‐level preferences. |
84
+ | **Automation Tool** | `Airflow`, `Prefect`, `Dagster`, `Celery` | Automates repetitive tasks, pipelines, orchestration. |
85
+ | **Dotfiles Manager** | `chezmoi`, `yadm`, `rcm`, `GNU Stow` | Synchronises dotfiles & personal configs across systems. |
86
+ | **Data Solution** | `rclone`, `rsync` | Handles backups, mirroring and secure file sync. |
87
+ | **Code Manager** | `strong‐box`, `Vault` | Manages and protects code snippets, secrets and creds. |
88
+
89
+ ---
90
+
91
+
92
+ # Install On Windows:
93
+
94
+ ```powershell
95
+ # install tool the tool only:
96
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Skip if UV is already installed
97
+ uv tool install --upgrade --python 3.14 machineconfig
98
+ # interactive install of machineconfig and following on to run it and make basic machine configuration (RECOMMENDED):
99
+ iex (iwr bit.ly/cfgwindows).Content # Or, if UV is installed: iex (uvx machineconfig define)
100
+ # Quick install and configure (optionals are accepted by default):
101
+ iex (iwr bit.ly/cfgwq).Content
102
+ ```
103
+
104
+
105
+ # Install On Linux and MacOS
106
+
107
+ ```bash
108
+ # install the tool only:
109
+ curl -LsSf https://astral.sh/uv/install.sh | sh # Skip if UV is already installed
110
+ uv tool install --upgrade --python 3.14 machineconfig
111
+ # interactive install of machineconfig and following on to run it and make basic machine configuration (RECOMMENDED):
112
+ . <(curl -L bit.ly/cfglinux) # Or, if UV is installed: . <(uvx machineconfig define)
113
+ ```
114
+
115
+
116
+ # Author
117
+ Alex Al-Saffar. [email](mailto:programmer@usa.com)
118
+
119
+ # Contributor
120
+ Ruby Chan. [email](mailto:ruby.chan@sa.gov.au)
121
+
122
+
123
+ [![Alex's github activity graph](https://github-readme-activity-graph.vercel.app/graph?username=thisismygitrepo)](https://github.com/ashutosh00710/github-readme-activity-graph)
124
+