machineconfig 5.15__py3-none-any.whl → 7.98__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.
Files changed (472) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/cloud_manager.py +1 -1
  3. machineconfig/cluster/remote/distribute.py +0 -1
  4. machineconfig/cluster/remote/file_manager.py +0 -2
  5. machineconfig/cluster/remote/script_execution.py +0 -1
  6. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +70 -210
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +52 -198
  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 +25 -170
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +16 -12
  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 -3
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/hx.py +76 -19
  34. machineconfig/jobs/installer/custom/yazi.py +119 -0
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  36. machineconfig/jobs/installer/custom_dev/brave.py +5 -9
  37. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  38. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  39. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  40. machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
  41. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +33 -28
  42. machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
  43. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  44. machineconfig/jobs/installer/custom_dev/winget.py +10 -14
  45. machineconfig/jobs/installer/installer_data.json +1487 -229
  46. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  47. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  48. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  49. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  50. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  51. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  52. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  53. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  54. machineconfig/jobs/installer/linux_scripts/q.sh +10 -6
  55. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  56. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  57. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  58. machineconfig/jobs/installer/package_groups.py +106 -177
  59. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  60. machineconfig/logger.py +0 -1
  61. machineconfig/profile/backup.toml +49 -0
  62. machineconfig/profile/bash_shell_profiles.md +11 -0
  63. machineconfig/profile/create_helper.py +62 -0
  64. machineconfig/profile/create_links.py +288 -0
  65. machineconfig/profile/create_links_export.py +100 -0
  66. machineconfig/profile/create_shell_profile.py +147 -0
  67. machineconfig/profile/mapper.toml +263 -0
  68. machineconfig/scripts/__init__.py +0 -4
  69. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  70. machineconfig/scripts/linux/wrap_mcfg +46 -0
  71. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  72. machineconfig/scripts/python/agents.py +123 -117
  73. machineconfig/scripts/python/ai/initai.py +3 -28
  74. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  75. machineconfig/scripts/python/ai/scripts/command_runner.sh +9 -0
  76. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  77. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  78. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  79. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  80. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  81. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  82. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  83. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +5 -1
  84. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  85. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  86. machineconfig/scripts/python/ai/solutions/generic.py +28 -5
  87. machineconfig/scripts/python/ai/utils/generate_files.py +348 -0
  88. machineconfig/scripts/python/ai/utils/vscode_tasks.py +37 -0
  89. machineconfig/scripts/python/cloud.py +29 -0
  90. machineconfig/scripts/python/croshell.py +137 -113
  91. machineconfig/scripts/python/devops.py +61 -101
  92. machineconfig/scripts/python/devops_navigator.py +6 -0
  93. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  94. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  95. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  96. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  97. machineconfig/scripts/python/fire_jobs.py +110 -150
  98. machineconfig/scripts/python/ftpx.py +51 -24
  99. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  100. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  101. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  102. machineconfig/scripts/python/helpers/run_py_script.py +79 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  109. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +126 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +29 -35
  117. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +8 -9
  121. machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
  122. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  123. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  124. machineconfig/scripts/python/helpers_devops/cli_nw.py +214 -0
  125. machineconfig/scripts/python/helpers_devops/cli_repos.py +215 -0
  126. machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
  127. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
  129. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_share_terminal.py} +45 -35
  130. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  131. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  132. machineconfig/scripts/python/helpers_devops/devops_status.py +499 -0
  133. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  134. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  136. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +3 -3
  137. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  138. machineconfig/scripts/python/helpers_fire_command/f.py +0 -0
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  140. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +121 -0
  142. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  143. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  145. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  146. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  147. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  148. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  149. machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
  150. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  151. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  152. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  153. machineconfig/scripts/python/helpers_network/__init__.py +0 -0
  154. machineconfig/scripts/python/helpers_network/address.py +132 -0
  155. machineconfig/scripts/python/{devops_add_identity.py → helpers_network/devops_add_identity.py} +0 -2
  156. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +153 -0
  157. machineconfig/scripts/{linux → python/helpers_network}/mount_nfs +0 -1
  158. machineconfig/scripts/python/{mount_nfs.py → helpers_network/mount_nfs.py} +3 -3
  159. machineconfig/scripts/{linux → python/helpers_network}/mount_nw_drive +1 -2
  160. machineconfig/scripts/python/{mount_ssh.py → helpers_network/mount_ssh.py} +3 -3
  161. machineconfig/scripts/python/{onetimeshare.py → helpers_network/onetimeshare.py} +0 -1
  162. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +391 -0
  163. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +338 -0
  164. machineconfig/scripts/python/{wifi_conn.py → helpers_network/wifi_conn.py} +1 -53
  165. machineconfig/scripts/python/{wsl_windows_transfer.py → helpers_network/wsl_windows_transfer.py} +5 -4
  166. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  167. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  168. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  169. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  170. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  171. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  172. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  173. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  174. machineconfig/scripts/python/{count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
  175. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  176. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  177. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  178. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +65 -0
  179. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  180. machineconfig/scripts/python/helpers_utils/path.py +185 -0
  181. machineconfig/scripts/python/interactive.py +64 -84
  182. machineconfig/scripts/python/mcfg_entry.py +58 -0
  183. machineconfig/scripts/python/msearch.py +71 -0
  184. machineconfig/scripts/python/sessions.py +119 -45
  185. machineconfig/scripts/python/terminal.py +133 -0
  186. machineconfig/scripts/python/utils.py +64 -0
  187. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  188. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  189. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  190. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  191. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  192. machineconfig/settings/broot/br.sh +0 -4
  193. machineconfig/settings/broot/conf.toml +1 -1
  194. machineconfig/settings/helix/config.toml +16 -0
  195. machineconfig/settings/helix/languages.toml +13 -4
  196. machineconfig/settings/helix/yazi-picker.sh +12 -0
  197. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  198. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  199. machineconfig/settings/lf/linux/lfrc +10 -12
  200. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  201. machineconfig/settings/lf/windows/lfrc +18 -38
  202. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  203. machineconfig/settings/linters/.ruff.toml +1 -1
  204. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  205. machineconfig/settings/marimo/marimo.toml +80 -0
  206. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  207. machineconfig/settings/pistol/pistol.conf +1 -1
  208. machineconfig/settings/shells/bash/init.sh +82 -31
  209. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  210. machineconfig/settings/shells/nushell/config.nu +2 -35
  211. machineconfig/settings/shells/nushell/env.nu +45 -6
  212. machineconfig/settings/shells/nushell/init.nu +314 -0
  213. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  214. machineconfig/settings/shells/starship/starship.toml +16 -0
  215. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  216. machineconfig/settings/shells/wt/settings.json +32 -17
  217. machineconfig/settings/shells/zsh/init.sh +89 -0
  218. machineconfig/settings/svim/linux/init.toml +0 -4
  219. machineconfig/settings/svim/windows/init.toml +0 -3
  220. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  221. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  222. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  223. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  224. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  225. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  226. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  227. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  228. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  229. machineconfig/settings/television/cable_unix/env.toml +17 -0
  230. machineconfig/settings/television/cable_unix/files.toml +11 -0
  231. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  232. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  233. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  234. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  235. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  236. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  237. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  238. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  239. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  240. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  241. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  242. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  243. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  244. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  245. machineconfig/settings/television/cable_unix/text.toml +17 -0
  246. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  247. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  248. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  249. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  250. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  251. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  252. machineconfig/settings/television/cable_windows/env.toml +17 -0
  253. machineconfig/settings/television/cable_windows/files.toml +14 -0
  254. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  255. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  256. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  257. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  258. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  259. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  260. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  261. machineconfig/settings/television/cable_windows/text.toml +17 -0
  262. machineconfig/settings/yazi/init.lua +61 -0
  263. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  264. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  265. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  266. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  267. machineconfig/settings/yazi/theme.toml +4 -0
  268. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  269. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  270. machineconfig/setup_linux/__init__.py +11 -0
  271. machineconfig/setup_linux/apps_desktop.sh +89 -0
  272. machineconfig/setup_linux/apps_gui.sh +64 -0
  273. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  274. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  275. machineconfig/setup_linux/uv.sh +15 -0
  276. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  277. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  278. machineconfig/setup_mac/__init__.py +16 -0
  279. machineconfig/setup_mac/apps_gui.sh +248 -0
  280. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  281. machineconfig/setup_mac/uv.sh +36 -0
  282. machineconfig/setup_windows/__init__.py +11 -0
  283. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  284. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  285. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  286. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  287. machineconfig/setup_windows/uv.ps1 +17 -0
  288. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  289. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  290. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  291. machineconfig/utils/accessories.py +7 -5
  292. machineconfig/utils/cloud/onedrive/README.md +139 -0
  293. machineconfig/utils/code.py +155 -105
  294. machineconfig/utils/files/art/fat_croco.txt +10 -0
  295. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  296. machineconfig/utils/files/art/happy_croco.txt +22 -0
  297. machineconfig/utils/files/art/water_croco.txt +11 -0
  298. machineconfig/utils/files/ascii_art.py +1 -1
  299. machineconfig/utils/files/dbms.py +257 -0
  300. machineconfig/utils/files/headers.py +11 -14
  301. machineconfig/utils/files/ouch/__init__.py +0 -0
  302. machineconfig/utils/files/ouch/decompress.py +45 -0
  303. machineconfig/utils/files/read.py +10 -18
  304. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  305. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  306. machineconfig/utils/installer_utils/installer_class.py +64 -181
  307. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  308. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  309. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +66 -97
  310. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +49 -82
  311. machineconfig/utils/io.py +77 -23
  312. machineconfig/utils/links.py +254 -162
  313. machineconfig/utils/meta.py +256 -0
  314. machineconfig/utils/notifications.py +1 -1
  315. machineconfig/utils/options.py +46 -18
  316. machineconfig/utils/options_tv.py +119 -0
  317. machineconfig/utils/path_extended.py +48 -101
  318. machineconfig/utils/path_helper.py +76 -23
  319. machineconfig/utils/procs.py +50 -70
  320. machineconfig/utils/scheduler.py +88 -124
  321. machineconfig/utils/scheduling.py +0 -3
  322. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  323. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  324. machineconfig/utils/source_of_truth.py +3 -6
  325. machineconfig/utils/ssh.py +263 -274
  326. machineconfig/utils/ssh_utils/abc.py +5 -0
  327. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  328. machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
  329. machineconfig/utils/ssh_utils/utils.py +142 -0
  330. machineconfig/utils/ssh_utils/wsl.py +210 -0
  331. machineconfig/utils/terminal.py +3 -113
  332. machineconfig/utils/tst.py +20 -0
  333. machineconfig/utils/upgrade_packages.py +114 -28
  334. machineconfig/utils/ve.py +12 -4
  335. machineconfig-7.98.dist-info/METADATA +132 -0
  336. machineconfig-7.98.dist-info/RECORD +504 -0
  337. machineconfig-7.98.dist-info/entry_points.txt +13 -0
  338. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  339. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  340. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  341. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  342. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  343. machineconfig/jobs/python/vscode/api.py +0 -57
  344. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  345. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  346. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  347. machineconfig/jobs/windows/startup_file.cmd +0 -2
  348. machineconfig/profile/create.py +0 -303
  349. machineconfig/profile/shell.py +0 -176
  350. machineconfig/scripts/cloud/init.sh +0 -119
  351. machineconfig/scripts/linux/agents +0 -2
  352. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  353. machineconfig/scripts/linux/cloud_copy +0 -2
  354. machineconfig/scripts/linux/cloud_mount +0 -2
  355. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  356. machineconfig/scripts/linux/cloud_sync +0 -2
  357. machineconfig/scripts/linux/croshell +0 -3
  358. machineconfig/scripts/linux/devops +0 -2
  359. machineconfig/scripts/linux/fire +0 -2
  360. machineconfig/scripts/linux/ftpx +0 -2
  361. machineconfig/scripts/linux/fzf2g +0 -21
  362. machineconfig/scripts/linux/fzfag +0 -17
  363. machineconfig/scripts/linux/fzffg +0 -25
  364. machineconfig/scripts/linux/fzfrga +0 -21
  365. machineconfig/scripts/linux/gh_models +0 -2
  366. machineconfig/scripts/linux/initai +0 -2
  367. machineconfig/scripts/linux/kill_process +0 -2
  368. machineconfig/scripts/linux/scheduler +0 -2
  369. machineconfig/scripts/linux/sessions +0 -2
  370. machineconfig/scripts/linux/share_smb +0 -1
  371. machineconfig/scripts/linux/skrg +0 -4
  372. machineconfig/scripts/linux/start_slidev +0 -2
  373. machineconfig/scripts/linux/start_terminals +0 -3
  374. machineconfig/scripts/linux/warp-cli.sh +0 -122
  375. machineconfig/scripts/linux/wifi_conn +0 -2
  376. machineconfig/scripts/linux/z_ls +0 -104
  377. machineconfig/scripts/python/ai/generate_files.py +0 -83
  378. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  379. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  380. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  381. machineconfig/scripts/python/devops_add_ssh_key.py +0 -120
  382. machineconfig/scripts/python/dotfile.py +0 -78
  383. machineconfig/scripts/python/fire_agents_help_launch.py +0 -120
  384. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  385. machineconfig/scripts/python/fire_jobs_route_helper.py +0 -65
  386. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  387. machineconfig/scripts/python/gh_models.py +0 -104
  388. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  389. machineconfig/scripts/python/repos.py +0 -132
  390. machineconfig/scripts/python/repos_helper_action.py +0 -378
  391. machineconfig/scripts/python/snapshot.py +0 -25
  392. machineconfig/scripts/python/start_terminals.py +0 -121
  393. machineconfig/scripts/python/t4.py +0 -17
  394. machineconfig/scripts/windows/agents.ps1 +0 -1
  395. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  396. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  397. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  398. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  399. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  400. machineconfig/scripts/windows/croshell.ps1 +0 -1
  401. machineconfig/scripts/windows/devops.ps1 +0 -1
  402. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  403. machineconfig/scripts/windows/fire.ps1 +0 -1
  404. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  405. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  406. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  407. machineconfig/scripts/windows/fzfrga.bat +0 -20
  408. machineconfig/scripts/windows/gpt.ps1 +0 -1
  409. machineconfig/scripts/windows/grep.ps1 +0 -2
  410. machineconfig/scripts/windows/initai.ps1 +0 -1
  411. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  412. machineconfig/scripts/windows/nano.ps1 +0 -3
  413. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  414. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  415. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  416. machineconfig/scripts/windows/sessions.ps1 +0 -1
  417. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  418. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  419. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  420. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  421. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  422. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  423. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  424. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  425. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  426. machineconfig/settings/yazi/yazi.toml +0 -4
  427. machineconfig/setup_linux/nix/cli_installation.sh +0 -157
  428. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  429. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  430. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  431. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  432. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  433. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  434. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  435. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  436. machineconfig/utils/installer_utils/installer.py +0 -189
  437. machineconfig-5.15.dist-info/METADATA +0 -188
  438. machineconfig-5.15.dist-info/RECORD +0 -415
  439. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  440. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  441. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  442. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  443. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  444. machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
  445. machineconfig/scripts/python/{helpers → helpers_agents}/__init__.py +0 -0
  446. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_agents/agentic_frameworks/__init__.py} +0 -0
  447. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  448. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  449. machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_cloud/__init__.py} +0 -0
  450. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  451. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  452. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_croshell/__init__.py} +0 -0
  453. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  454. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  455. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  456. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  457. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/__init__.py} +0 -0
  458. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_devops/themes/__init__.py} +0 -0
  459. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  460. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  461. /machineconfig/scripts/{linux → python/helpers_network}/mount_drive +0 -0
  462. /machineconfig/scripts/python/{mount_nw_drive.py → helpers_network/mount_nw_drive.py} +0 -0
  463. /machineconfig/scripts/{linux → python/helpers_network}/mount_smb +0 -0
  464. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  465. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  466. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  467. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  468. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  469. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  470. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  471. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
  472. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- # if variable zellij is not set, then set it to /$HOME/.local/bin/zellij
4
- if [ -z "$zellij" ]; then
5
- # zellij="$HOME/.local/bin/zellij"
6
- PATH="$HOME/.local/bin:$PATH"
7
- fi
8
-
9
- # adopted from https://zellij.dev/documentation/integration.html
10
- ZJ_SESSIONS=$(zellij list-sessions)
11
- # echo "$ZJ_SESSIONS"
12
-
13
-
14
- attach=false
15
-
16
- while (( "$#" )); do
17
- case "$1" in
18
- --attach)
19
- attach=true
20
- shift
21
- ;;
22
- *)
23
- shift
24
- ;;
25
- esac
26
- done
27
-
28
- if $attach; then
29
- echo "attached"
30
- fi
31
-
32
-
33
- NO_SESSIONS=$(echo "${ZJ_SESSIONS}" | wc -l)
34
- # if ZJ_SESSIONS is empty, then set NO_SESSIONS to 0
35
- if [ -z "${ZJ_SESSIONS}" ]; then
36
- NO_SESSIONS=0
37
- fi
38
-
39
- # check whether the string "(current)" is in ZJ_SESSIONS
40
- if [[ "${ZJ_SESSIONS}" == *"(current)"* ]]; then
41
- # if so, then we are in a zellijsession
42
- echo "already inside a session, existing."
43
- COMMANDS=$(ls $HOME/code/machineconfig/src/machineconfig/settings/zellij/commands)
44
- # fzf the results
45
- res="$(echo -e "${COMMANDS}" | fzf --ansi)"
46
- # run the bash fiZJ_SESSIONSle chosen
47
- bash $HOME/code/machineconfig/src/machineconfig/settings/zellij/commands/$res
48
-
49
- else # ==> we are not in a zellijsession
50
- if [ "${NO_SESSIONS}" -ge 1 ]; then # sessions do exist
51
-
52
- # remove sessions that have 'EXITED' in them
53
- ZJ_SESSIONS=$(echo -e "${ZJ_SESSIONS}" | grep -v "EXITED")
54
-
55
- echo "zj_sessions:$ZJ_SESSIONS:end of zj_sessions"
56
-
57
- # if the result has only 1 line in it and $attach is raised, then attach to it and exit the if statement and the script
58
- NO_SESSIONS=$(echo "${ZJ_SESSIONS}" | wc -l)
59
-
60
- echo "NO_SESSIONS: $NO_SESSIONS"
61
-
62
- # if ZJ_SESSIONS is empty, then set NO_SESSIONS to 0
63
- if [ -z "${ZJ_SESSIONS}" ]; then
64
- NO_SESSIONS=0
65
- zellij --layout st2
66
- exit 0
67
- fi
68
- echo "NO_SESSIONS: $NO_SESSIONS"
69
-
70
- if [ "${NO_SESSIONS}" -eq 1 ] && $attach; then
71
- chosen_session=$(echo -e "${ZJ_SESSIONS}" | cut -d' ' -f1)
72
- # remove the ansi colors from chosen_session
73
- chosen_session=$(echo $chosen_session | sed 's/\x1b\[[0-9;]*m//g')
74
- # echo "attaching to $chosen_session exclusively."
75
- zellij attach "$chosen_session"
76
- exit 0
77
- fi
78
-
79
- # add my options to the list of sessions
80
- # if number of sessions is zero, then exclude ZJ_SESSIONS from the fzf options
81
- if [ "${NO_SESSIONS}" -eq 0 ]; then
82
- ZJ_SESSIONS="new_session\nkill_all_and_create_fresh_one\nexit_zellij"
83
- else
84
- ZJ_SESSIONS="$ZJ_SESSIONS\nnew_session\nkill_all_and_create_fresh_one\nexit_zellij"
85
- fi
86
-
87
- res="$(echo -e "${ZJ_SESSIONS}" | fzf --ansi)"
88
- # split `res` at the first space, and take the first element
89
- res=$(echo $res | cut -d' ' -f1)
90
- if [ "${res}" = "exit_zellij" ]; then
91
- echo "existing zellij."
92
- elif [ "${res}" = "new_session" ]; then
93
- zellij --layout st2 # can't specify name here. I can call it "main" only if it is the first, otherwise name conflict! also, can't use attach -c syntax because layout can't be specified.
94
- elif [ "${res}" = "kill_all_and_create_fresh_one" ]; then
95
- zellij ka -y
96
- zellij --layout st2
97
- else
98
- zellij attach $res # options --mirror-session false
99
- fi
100
- else # no sessions, create one called main
101
- zellij --layout st2
102
- fi
103
-
104
- fi
@@ -1,83 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Script to generate a markdown table with checkboxes for all Python files in the repo."""
3
-
4
- from pathlib import Path
5
-
6
-
7
- def get_python_files(repo_root: Path) -> list[str]:
8
- """Get all Python files relative to repo root."""
9
- # Get all .py files recursively
10
- py_files = list(repo_root.glob("**/*.py"))
11
-
12
- # Filter out files in .venv and __pycache__ directories
13
- filtered_files = []
14
- for file_path in py_files:
15
- relative_path = file_path.relative_to(repo_root)
16
- path_parts = relative_path.parts
17
-
18
- # Skip files in .venv or __pycache__ directories
19
- if any(part in {".venv", "__pycache__"} for part in path_parts):
20
- continue
21
-
22
- filtered_files.append(str(relative_path))
23
-
24
- return sorted(filtered_files)
25
-
26
-
27
- def generate_markdown_table(files: list[str]) -> str:
28
- """Generate markdown table with checkboxes."""
29
- header = "# Python Files Checklist\n\n"
30
- table = "| Index | File Path | Status |\n|-------|-----------|--------|\n"
31
-
32
- for index, file_path in enumerate(files, start=1):
33
- # Remove leading ./ if present
34
- clean_path = file_path.lstrip("./")
35
- table += f"| {index} | {clean_path} | - [ ] |\n"
36
-
37
- return header + table
38
-
39
-
40
- def main() -> None:
41
- """Main function."""
42
- repo_root = Path.cwd()
43
- if not repo_root.joinpath("pyproject.toml").exists():
44
- raise RuntimeError(f" {repo_root} Not a repo root")
45
- output_file = repo_root / ".ai" / "all_files_with_index.md"
46
-
47
- print(f"Repo root: {repo_root}")
48
- print(f"Output file: {output_file}")
49
-
50
- # Ensure output directory exists
51
- output_file.parent.mkdir(parents=True, exist_ok=True)
52
-
53
- # Get Python files
54
- python_files = get_python_files(repo_root)
55
- print(f"Found {len(python_files)} Python files")
56
-
57
- # Generate markdown
58
- markdown_content = generate_markdown_table(python_files)
59
- print(f"Generated markdown content length: {len(markdown_content)}")
60
-
61
- # Write to file
62
- output_file.write_text(markdown_content)
63
- print(f"Generated {output_file} with {len(python_files)} Python files")
64
-
65
- # Create 5 symlinks to repo_root at ~/code_copies/${repo_name}_copy_{i}
66
- import pathlib
67
-
68
- # import os
69
- repo_root = pathlib.Path.cwd().resolve()
70
- repo_name: str = pathlib.Path(repo_root).name
71
- symlink_dir: pathlib.Path = pathlib.Path.home() / "code_copies"
72
- symlink_dir.mkdir(exist_ok=True)
73
- for i in range(1, 6):
74
- symlink_path: pathlib.Path = symlink_dir / f"{repo_name}_copy_{i}"
75
- if symlink_path.exists() or symlink_path.is_symlink():
76
- symlink_path.unlink()
77
- symlink_path.symlink_to(repo_root, target_is_directory=True)
78
- # Windows equivalent (comment):
79
- # for /l %i in (1,1,5) do mklink /D "%USERPROFILE%\code_copies\{repo_name}_copy_%i" "C:\path\to\repo_root"
80
-
81
-
82
- if __name__ == "__main__":
83
- main()
@@ -1,5 +0,0 @@
1
- ---
2
- mode: agent
3
- ---
4
-
5
- please run the following
@@ -1,190 +0,0 @@
1
- """utils"""
2
-
3
- from pathlib import Path
4
- import git
5
- from machineconfig.utils.io import read_ini
6
- from machineconfig.utils.path_extended import PathExtended
7
- from machineconfig.utils.terminal import Response
8
-
9
- from machineconfig.scripts.python.helpers.repo_sync_helpers import fetch_dotfiles
10
- from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
11
- from machineconfig.utils.options import choose_from_options
12
- from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
13
- import platform
14
- import subprocess
15
- from typing import Optional, Literal
16
- from rich.console import Console
17
- from rich.panel import Panel
18
-
19
- console = Console()
20
-
21
- _ = fetch_dotfiles
22
-
23
-
24
- def main(cloud: Optional[str] = None, path: Optional[str] = None, message: Optional[str] = None, action: Literal["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"] = "ask", pwd: Optional[str] = None):
25
- if cloud is None:
26
- try:
27
- cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
28
- console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", title="Default Cloud", border_style="yellow"))
29
- except FileNotFoundError:
30
- console.print(Panel(f"❌ ERROR: No cloud profile found\nLocation: {DEFAULTS_PATH}\nPlease set one up or provide one via the --cloud flag.", title="Error", border_style="red"))
31
- return ""
32
- else:
33
- cloud_resolved = cloud
34
-
35
- # repo_root = PathExtended(args.repo).expanduser().absolute()
36
- repo_local_root = PathExtended.cwd() if path is None else PathExtended(path).expanduser().absolute()
37
- repo_local_obj = git.Repo(repo_local_root, search_parent_directories=True)
38
- repo_local_root = PathExtended(repo_local_obj.working_dir) # cwd might have been in a sub directory of repo_root, so its better to redefine it.
39
- PathExtended(CONFIG_PATH).joinpath("remote").mkdir(parents=True, exist_ok=True)
40
- repo_remote_root = PathExtended(CONFIG_PATH).joinpath("remote", repo_local_root.rel2home()) # .delete(sure=True)
41
-
42
- try:
43
- console.print(Panel("📥 DOWNLOADING REMOTE REPOSITORY", title_align="left", border_style="blue"))
44
- remote_path = repo_local_root.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
45
- repo_remote_root.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=pwd)
46
- except AssertionError:
47
- console.print(Panel("🆕 Remote repository doesn't exist\n📤 Creating new remote and exiting...", title_align="left", border_style="green"))
48
- repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
49
- return ""
50
-
51
- repo_remote_obj = git.Repo(repo_remote_root)
52
- if repo_remote_obj.is_dirty():
53
- console.print(Panel(f"⚠️ WARNING: REMOTE REPOSITORY IS DIRTY\nLocation: {repo_remote_root}\nPlease commit or stash changes before proceeding.", title="Warning", border_style="yellow"))
54
-
55
- script = f"""
56
- echo ""
57
- echo 'echo -e "\\033[1;34m═════ COMMITTING LOCAL CHANGES ═════\\033[0m"'
58
- cd {repo_local_root}
59
- git status
60
- git add .
61
- git commit -am "{message}"
62
- echo ""
63
- echo ""
64
- echo 'echo -e "\\033[1;34m═════ PULLING LATEST FROM REMOTE ═════\\033[0m"'
65
- cd {repo_local_root}
66
- echo '-> Trying to removing originEnc remote from local repo if it exists.'
67
- # git remote remove originEnc
68
- git remote remove originEnc 2>/dev/null || true
69
- echo '-> Adding originEnc remote to local repo'
70
- git remote add originEnc {repo_remote_root}
71
- echo '-> Fetching originEnc remote.'
72
- git pull originEnc master
73
-
74
- """
75
-
76
- shell_path = write_shell_script_to_file(shell_script=script)
77
- command = f". {shell_path}"
78
- if platform.system() == "Windows":
79
- completed = subprocess.run(["powershell", "-Command", command], capture_output=True, check=False, text=True)
80
- else:
81
- completed = subprocess.run(command, shell=True, capture_output=True, check=False, text=True)
82
- res = Response.from_completed_process(completed).capture().print()
83
-
84
- if res.is_successful(strict_err=True, strict_returcode=True):
85
- console.print(Panel("✅ Pull succeeded!\n🧹 Removing originEnc remote and local copy\n📤 Pushing merged repository to cloud storage", title="Success", border_style="green"))
86
- repo_remote_root.delete(sure=True)
87
- from git.remote import Remote
88
-
89
- Remote.remove(repo_local_obj, "originEnc")
90
- repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
91
- return "success"
92
- else:
93
- console.print(Panel(f"⚠️ MERGE FAILED\n💾 Keeping local copy of remote at:\n📂 {repo_remote_root}", title="Merge Failed", border_style="red"))
94
-
95
- # ================================================================================
96
- option1 = "Delete remote copy and push local:"
97
- program_1_py = f"""
98
- from machineconfig.scripts.python.helpers.repo_sync_helpers import delete_remote_repo_copy_and_push_local as func
99
- func(remote_repo=r'{str(repo_remote_root)}', local_repo=r'{str(repo_local_root)}', cloud=r'{cloud_resolved}')
100
- """
101
- shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
102
- # ================================================================================
103
-
104
- option2 = "Delete local repo and replace it with remote copy:"
105
- program_2 = f"""
106
- rm -rfd {repo_local_root}
107
- mv {repo_remote_root} {repo_local_root}
108
- """
109
- if platform.system() in ["Linux", "Darwin"]:
110
- program_2 += """
111
- sudo chmod 600 $HOME/.ssh/*
112
- sudo chmod 700 $HOME/.ssh
113
- sudo chmod +x $HOME/dotfiles/scripts/linux -R
114
- """
115
-
116
- shell_file_2 = write_shell_script_to_file(shell_script=program_2)
117
-
118
- # ================================================================================
119
- option3 = "Inspect repos:"
120
- program_3_py = f"""
121
- from machineconfig.scripts.python.helper.repo_sync_helpers import inspect_repos as func
122
- func(repo_local_root=r'{str(repo_local_root)}', repo_remote_root=r'{str(repo_remote_root)}')
123
- """
124
- shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
125
- # ================================================================================
126
-
127
- option4 = "Remove problematic rclone file from repo and replace with remote:"
128
- program_4 = f"""
129
- rm $HOME/dotfiles/creds/rclone/rclone.conf
130
- cp $HOME/.config/machineconfig/remote/dotfiles/creds/rclone/rclone.conf $HOME/dotfiles/creds/rclone
131
- cd $HOME/dotfiles
132
- git commit -am "finished merging"
133
- . {shell_file_1}
134
- """
135
- shell_file_4 = write_shell_script_to_file(shell_script=program_4)
136
- # ================================================================================
137
-
138
- console.print(Panel("🔄 RESOLVE MERGE CONFLICT\nChoose an option to resolve the conflict:", title_align="left", border_style="blue"))
139
-
140
- print(f"• 1️⃣ {option1:75} 👉 {shell_file_1}")
141
- print(f"• 2️⃣ {option2:75} 👉 {shell_file_2}")
142
- print(f"• 3️⃣ {option3:75} 👉 {shell_file_3}")
143
- print(f"• 4️⃣ {option4:75} 👉 {shell_file_4}")
144
-
145
- program_content = None
146
- match action:
147
- case "ask":
148
- choice = choose_from_options(multi=False, msg="Choose one option", options=[option1, option2, option3, option4], fzf=False)
149
- if choice == option1:
150
- program_content = shell_file_1.read_text(encoding="utf-8")
151
- elif choice == option2:
152
- program_content = program_2
153
- elif choice == option3:
154
- program_content = shell_file_3.read_text(encoding="utf-8")
155
- elif choice == option4:
156
- program_content = program_4
157
- else:
158
- raise NotImplementedError(f"Choice {choice} not implemented.")
159
- case "pushLocalMerge":
160
- program_content = shell_file_1.read_text(encoding="utf-8")
161
- case "overwriteLocal":
162
- program_content = program_2
163
- case "InspectRepos":
164
- program_content = shell_file_3.read_text(encoding="utf-8")
165
- case "RemoveLocalRclone":
166
- program_content = program_4
167
- case _:
168
- raise ValueError(f"Unknown action: {action}")
169
- # PROGRAM_PATH.write_text(program_content, encoding="utf-8")
170
- subprocess.run(program_content, shell=True, check=True)
171
-
172
- return program_content
173
-
174
-
175
- def args_parser():
176
- # console.print(Panel("🔄 Repository Synchronization Utility", title_align="left", border_style="blue"))
177
- # parser = argparse.ArgumentParser(description="Secure Repo CLI.")
178
- # parser.add_argument("path", nargs="?", type=str, help="Repository path, defaults to cwd.", default=None)
179
- # parser.add_argument("--cloud", "-c", help="rclone cloud profile name.", default=None)
180
- # parser.add_argument("--message", "-m", help="Commit Message", default=f"new message {randstr()}")
181
- # parser.add_argument("--pwd", "-p", help="Password for encryption", default=None)
182
- # parser.add_argument("--action", "-a", help="Action to take if merge fails.", choices=["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"], default="ask")
183
- # args = parser.parse_args()
184
- # main(cloud=args.cloud, path=args.path, message=args.message, action=args.action)
185
- import typer
186
- typer.run(main)
187
-
188
-
189
- if __name__ == "__main__":
190
- args_parser()
@@ -1,16 +0,0 @@
1
-
2
- import typer
3
-
4
-
5
- def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to the git repository")):
6
- from machineconfig.scripts.python import count_lines
7
- from pathlib import Path
8
- count_lines_path = Path(count_lines.__file__)
9
- # --project $HOME/code/machineconfig
10
- cmd = f"""uv run --python 3.13 --with machineconfig[plot] {count_lines_path} analyze-over-time {repo_path}"""
11
- from machineconfig.utils.code import run_shell_script
12
- run_shell_script(cmd)
13
-
14
-
15
- if __name__ == "__main__":
16
- pass
@@ -1,120 +0,0 @@
1
- """SSH"""
2
-
3
- from platform import system
4
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT
5
- from machineconfig.utils.options import choose_from_options
6
- from machineconfig.utils.path_extended import PathExtended
7
- from rich.console import Console
8
- from rich.panel import Panel
9
- from rich import box # Import box
10
-
11
-
12
- console = Console()
13
-
14
-
15
- def get_add_ssh_key_script(path_to_key: PathExtended):
16
- console.print(Panel("🔑 SSH KEY CONFIGURATION", title="[bold blue]SSH Setup[/bold blue]"))
17
-
18
- if system() == "Linux":
19
- authorized_keys = PathExtended.home().joinpath(".ssh/authorized_keys")
20
- console.print(Panel(f"🐧 Linux SSH configuration\n📄 Authorized keys file: {authorized_keys}", title="[bold blue]System Info[/bold blue]"))
21
- elif system() == "Windows":
22
- authorized_keys = PathExtended("C:/ProgramData/ssh/administrators_authorized_keys")
23
- console.print(Panel(f"🪟 Windows SSH configuration\n📄 Authorized keys file: {authorized_keys}", title="[bold blue]System Info[/bold blue]"))
24
- else:
25
- console.print(Panel("❌ ERROR: Unsupported operating system\nOnly Linux and Windows are supported", title="[bold red]Error[/bold red]"))
26
- raise NotImplementedError
27
-
28
- if authorized_keys.exists():
29
- split = "\n"
30
- keys_text = authorized_keys.read_text(encoding="utf-8").split(split)
31
- key_count = len([k for k in keys_text if k.strip()])
32
- console.print(Panel(f"🔍 Current SSH authorization status\n✅ Found {key_count} authorized key(s)", title="[bold blue]Status[/bold blue]"))
33
-
34
- if path_to_key.read_text(encoding="utf-8") in authorized_keys.read_text(encoding="utf-8"):
35
- console.print(Panel(f"⚠️ Key already authorized\nKey: {path_to_key.name}\nStatus: Already present in authorized_keys file\nNo action required", title="[bold yellow]Warning[/bold yellow]"))
36
- program = ""
37
- else:
38
- console.print(Panel(f"➕ Adding new SSH key to authorized keys\n🔑 Key file: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
39
- if system() == "Linux":
40
- program = f"cat {path_to_key} >> ~/.ssh/authorized_keys"
41
- elif system() == "Windows":
42
- program_path = LIBRARY_ROOT.joinpath("setup_windows/openssh-server_add-sshkey.ps1")
43
- program = program_path.expanduser().read_text(encoding="utf-8")
44
- place_holder = r'$sshfile = "$env:USERPROFILE\.ssh\pubkey.pub"'
45
- assert place_holder in program, f"This section performs string manipulation on the script {program_path} to add the key to the authorized_keys file. The script has changed and the string {place_holder} is not found."
46
- program = program.replace(place_holder, f'$sshfile = "{path_to_key}"')
47
- console.print(Panel("🔧 Configured PowerShell script for Windows\n📝 Replaced placeholder with actual key path", title="[bold blue]Configuration[/bold blue]"))
48
- else:
49
- raise NotImplementedError
50
- else:
51
- console.print(Panel(f"📝 Creating new authorized_keys file\n🔑 Using key: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
52
- if system() == "Linux":
53
- program = f"cat {path_to_key} > ~/.ssh/authorized_keys"
54
- else:
55
- program_path = LIBRARY_ROOT.joinpath("setup_windows/openssh-server_add-sshkey.ps1")
56
- program = PathExtended(program_path).expanduser().read_text(encoding="utf-8").replace('$sshfile=""', f'$sshfile="{path_to_key}"')
57
- console.print(Panel("🔧 Configured PowerShell script for Windows\n📝 Set key path in script", title="[bold blue]Configuration[/bold blue]"))
58
-
59
- if system() == "Linux":
60
- program += """
61
-
62
- sudo chmod 700 ~/.ssh
63
- sudo chmod 644 ~/.ssh/authorized_keys
64
- sudo chmod 644 ~/.ssh/*.pub
65
- sudo service ssh --full-restart
66
- # from superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
67
- """
68
- return program
69
-
70
-
71
- def main() -> None:
72
- console.print(Panel("🔐 SSH PUBLIC KEY AUTHORIZATION TOOL", box=box.DOUBLE_EDGE, title_align="left"))
73
-
74
- console.print(Panel("🔍 Searching for public keys...", title="[bold blue]SSH Setup[/bold blue]", border_style="blue"))
75
-
76
- pub_keys = PathExtended.home().joinpath(".ssh").search("*.pub")
77
-
78
- if pub_keys:
79
- console.print(Panel(f"✅ Found {len(pub_keys)} public key(s)", title="[bold green]Status[/bold green]", border_style="green"))
80
- else:
81
- console.print(Panel("⚠️ No public keys found", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
82
-
83
- all_keys_option = f"all pub keys available ({len(pub_keys)})"
84
- i_have_path_option = "I have the path to the key file"
85
- i_paste_option = "I want to paste the key itself"
86
-
87
- res = choose_from_options("Which public key to add? ", options=[str(x) for x in pub_keys] + [all_keys_option, i_have_path_option, i_paste_option], multi=False)
88
- if res == all_keys_option:
89
- console.print(Panel(f"🔄 Processing all {len(pub_keys)} public keys...", title="[bold blue]Processing[/bold blue]", border_style="blue"))
90
- program = "\n\n\n".join([get_add_ssh_key_script(key) for key in pub_keys])
91
-
92
- elif res == i_have_path_option:
93
- console.print(Panel("📂 Please provide the path to your public key", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
94
- key_path = PathExtended(input("📋 Path: ")).expanduser().absolute()
95
- console.print(Panel(f"📄 Using key from path: {key_path}", title="[bold blue]Info[/bold blue]", border_style="blue"))
96
- program = get_add_ssh_key_script(key_path)
97
-
98
- elif res == i_paste_option:
99
- console.print(Panel("📋 Please provide a filename and paste the public key content", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
100
- key_filename = input("📝 File name (default: my_pasted_key.pub): ") or "my_pasted_key.pub"
101
- key_path = PathExtended.home().joinpath(f".ssh/{key_filename}")
102
- key_path.write_text(input("🔑 Paste the public key here: "), encoding="utf-8")
103
- console.print(Panel(f"💾 Key saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
104
- program = get_add_ssh_key_script(key_path)
105
-
106
- else:
107
- console.print(Panel(f"🔑 Using selected key: {PathExtended(res).name}", title="[bold blue]Info[/bold blue]", border_style="blue"))
108
- program = get_add_ssh_key_script(PathExtended(res))
109
-
110
- console.print(Panel("🚀 SSH KEY AUTHORIZATION READY\nRun the generated script to apply changes", box=box.DOUBLE_EDGE, title_align="left"))
111
-
112
- # return program
113
- import subprocess
114
-
115
- subprocess.run(program, shell=True, check=True)
116
- console.print(Panel("✅ SSH KEY AUTHORIZATION COMPLETED", box=box.DOUBLE_EDGE, title_align="left"))
117
-
118
-
119
- if __name__ == "__main__":
120
- pass
@@ -1,78 +0,0 @@
1
- """Like yadm and dotter."""
2
-
3
- from typing import Annotated
4
-
5
- import typer
6
- from rich.console import Console
7
- from rich.panel import Panel
8
-
9
- from machineconfig.utils.links import symlink_func
10
- from machineconfig.utils.path_extended import PathExtended
11
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT, REPO_ROOT
12
-
13
-
14
- console = Console()
15
-
16
-
17
- def main(
18
- file: Annotated[str, typer.Argument(help="file/folder path.")],
19
- overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
20
- dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
21
- ) -> None:
22
- orig_path = PathExtended(file).expanduser().absolute()
23
- if dest == "":
24
- if "Local" in str(orig_path):
25
- junction = orig_path.split(at="Local", sep=-1)[1]
26
- elif "Roaming" in str(orig_path):
27
- junction = orig_path.split(at="Roaming", sep=-1)[1]
28
- elif ".config" in str(orig_path):
29
- junction = orig_path.split(at=".config", sep=-1)[1]
30
- else:
31
- junction = orig_path.rel2home()
32
- new_path = PathExtended(REPO_ROOT).joinpath(junction)
33
- else:
34
- dest_path = PathExtended(dest).expanduser().absolute()
35
- dest_path.mkdir(parents=True, exist_ok=True)
36
- new_path = dest_path.joinpath(orig_path.name)
37
-
38
- symlink_func(this=orig_path, to_this=new_path, prioritize_to_this=overwrite)
39
-
40
- console.print(
41
- Panel(
42
- "\n".join(
43
- [
44
- "✅ Symbolic link created successfully!",
45
- "🔄 Add the following snippet to mapper.toml to persist this mapping:",
46
- ]
47
- ),
48
- title="Symlink Created",
49
- border_style="green",
50
- padding=(1, 2),
51
- )
52
- )
53
-
54
- mapper_snippet = "\n".join(
55
- [
56
- f"[bold]📝 Edit configuration file:[/] [cyan]nano {PathExtended(LIBRARY_ROOT)}/symlinks/mapper.toml[/cyan]",
57
- "",
58
- f"[{new_path.parent.name}]",
59
- f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
60
- ]
61
- )
62
-
63
- console.print(
64
- Panel(
65
- mapper_snippet,
66
- title="Mapper Entry",
67
- border_style="cyan",
68
- padding=(1, 2),
69
- )
70
- )
71
-
72
-
73
- def arg_parser() -> None:
74
- typer.run(main)
75
-
76
-
77
- if __name__ == "__main__":
78
- arg_parser()