machineconfig 3.7__py3-none-any.whl → 7.69__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 (465) 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 +7 -21
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +128 -0
  34. machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
  36. machineconfig/jobs/installer/custom_dev/brave.py +82 -0
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +63 -0
  40. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
  41. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  42. machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
  43. machineconfig/jobs/installer/custom_dev/goes.py +68 -0
  44. machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
  45. machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
  46. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
  47. machineconfig/jobs/installer/custom_dev/redis.py +88 -0
  48. machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
  49. machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
  50. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
  51. machineconfig/jobs/installer/installer_data.json +3440 -0
  52. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
  53. machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
  54. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
  55. machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
  56. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
  57. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  58. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
  59. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  60. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  61. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  62. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
  63. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
  64. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
  65. machineconfig/jobs/installer/package_groups.py +255 -0
  66. machineconfig/logger.py +0 -1
  67. machineconfig/profile/backup.toml +49 -0
  68. machineconfig/profile/bash_shell_profiles.md +11 -0
  69. machineconfig/profile/create_helper.py +74 -0
  70. machineconfig/profile/create_links.py +288 -0
  71. machineconfig/profile/create_links_export.py +100 -0
  72. machineconfig/profile/create_shell_profile.py +136 -0
  73. machineconfig/profile/mapper.toml +258 -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/{mcinit.py → initai.py} +3 -38
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
  89. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  90. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  91. machineconfig/scripts/python/cloud.py +29 -0
  92. machineconfig/scripts/python/croshell.py +129 -198
  93. machineconfig/scripts/python/define.py +31 -0
  94. machineconfig/scripts/python/devops.py +45 -131
  95. machineconfig/scripts/python/devops_navigator.py +6 -0
  96. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  97. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  98. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  99. machineconfig/scripts/python/fire_jobs.py +166 -235
  100. machineconfig/scripts/python/ftpx.py +164 -100
  101. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  102. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  109. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
  117. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
  121. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
  122. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  123. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  124. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  125. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  126. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  127. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  129. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  130. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  131. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  132. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  133. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  134. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  136. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  137. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  138. machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
  140. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  142. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  143. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  145. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  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_repos/action.py +209 -0
  154. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  155. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  156. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  157. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  158. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  159. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  160. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  161. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  162. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  163. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  164. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  165. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  166. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  167. machineconfig/scripts/python/interactive.py +187 -0
  168. machineconfig/scripts/python/mcfg_entry.py +63 -0
  169. machineconfig/scripts/python/msearch.py +40 -0
  170. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  171. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  172. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  173. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  174. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  175. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  176. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  177. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  178. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  179. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
  180. machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
  181. machineconfig/scripts/python/sessions.py +167 -0
  182. machineconfig/scripts/python/terminal.py +127 -0
  183. machineconfig/scripts/python/utils.py +66 -0
  184. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  185. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  186. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  187. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  188. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  189. machineconfig/settings/broot/br.sh +0 -4
  190. machineconfig/settings/broot/conf.toml +1 -1
  191. machineconfig/settings/helix/config.toml +16 -0
  192. machineconfig/settings/helix/languages.toml +13 -4
  193. machineconfig/settings/helix/yazi-picker.sh +12 -0
  194. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  195. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  196. machineconfig/settings/lf/linux/lfrc +10 -12
  197. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  198. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  199. machineconfig/settings/lf/windows/lfrc +18 -38
  200. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  201. machineconfig/settings/linters/.ruff.toml +1 -1
  202. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  203. machineconfig/settings/marimo/marimo.toml +80 -0
  204. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  205. machineconfig/settings/pistol/pistol.conf +1 -1
  206. machineconfig/settings/shells/bash/init.sh +55 -31
  207. machineconfig/settings/shells/nushell/config.nu +1 -34
  208. machineconfig/settings/shells/nushell/init.nu +127 -0
  209. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  210. machineconfig/settings/shells/starship/starship.toml +16 -0
  211. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  212. machineconfig/settings/shells/wt/settings.json +32 -17
  213. machineconfig/settings/shells/zsh/init.sh +89 -0
  214. machineconfig/settings/svim/linux/init.toml +0 -4
  215. machineconfig/settings/svim/windows/init.toml +0 -3
  216. machineconfig/settings/yazi/init.lua +57 -0
  217. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  218. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  219. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  220. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  221. machineconfig/settings/yazi/yazi.toml +14 -1
  222. machineconfig/setup_linux/__init__.py +10 -0
  223. machineconfig/setup_linux/apps_desktop.sh +89 -0
  224. machineconfig/setup_linux/apps_gui.sh +64 -0
  225. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  226. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  227. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  228. machineconfig/setup_linux/uv.sh +15 -0
  229. machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
  230. machineconfig/setup_mac/__init__.py +16 -0
  231. machineconfig/setup_mac/apps_gui.sh +248 -0
  232. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  233. machineconfig/setup_mac/uv.sh +36 -0
  234. machineconfig/setup_windows/__init__.py +8 -0
  235. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  236. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  237. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  238. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  239. machineconfig/setup_windows/uv.ps1 +17 -0
  240. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
  241. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  242. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  243. machineconfig/utils/accessories.py +52 -12
  244. machineconfig/utils/cloud/onedrive/README.md +139 -0
  245. machineconfig/utils/code.py +140 -93
  246. machineconfig/utils/files/art/fat_croco.txt +10 -0
  247. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  248. machineconfig/utils/files/art/happy_croco.txt +22 -0
  249. machineconfig/utils/files/art/water_croco.txt +11 -0
  250. machineconfig/utils/files/ascii_art.py +118 -0
  251. machineconfig/utils/files/dbms.py +257 -0
  252. machineconfig/utils/files/headers.py +68 -0
  253. machineconfig/utils/files/ouch/decompress.py +45 -0
  254. machineconfig/utils/files/read.py +95 -0
  255. machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
  256. machineconfig/utils/installer_utils/install_from_url.py +180 -0
  257. machineconfig/utils/installer_utils/installer_class.py +239 -316
  258. machineconfig/utils/installer_utils/installer_cli.py +186 -0
  259. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
  260. machineconfig/utils/installer_utils/installer_runner.py +191 -0
  261. machineconfig/utils/io.py +77 -24
  262. machineconfig/utils/links.py +309 -100
  263. machineconfig/utils/meta.py +255 -0
  264. machineconfig/utils/notifications.py +1 -1
  265. machineconfig/utils/options.py +19 -47
  266. machineconfig/utils/path_extended.py +111 -121
  267. machineconfig/utils/path_helper.py +75 -22
  268. machineconfig/utils/procs.py +50 -74
  269. machineconfig/utils/scheduler.py +94 -97
  270. machineconfig/utils/scheduling.py +0 -3
  271. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  272. machineconfig/utils/schemas/installer/installer_types.py +28 -6
  273. machineconfig/utils/schemas/layouts/layout_types.py +34 -1
  274. machineconfig/utils/source_of_truth.py +3 -6
  275. machineconfig/utils/ssh.py +742 -254
  276. machineconfig/utils/ssh_utils/utils.py +0 -0
  277. machineconfig/utils/terminal.py +3 -140
  278. machineconfig/utils/tst.py +20 -0
  279. machineconfig/utils/upgrade_packages.py +109 -28
  280. machineconfig/utils/ve.py +13 -5
  281. machineconfig-7.69.dist-info/METADATA +124 -0
  282. machineconfig-7.69.dist-info/RECORD +454 -0
  283. machineconfig-7.69.dist-info/entry_points.txt +15 -0
  284. machineconfig/cluster/templates/cli_click.py +0 -102
  285. machineconfig/cluster/templates/cli_gooey.py +0 -115
  286. machineconfig/cluster/templates/utils.py +0 -51
  287. machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
  288. machineconfig/jobs/python/create_bootable_media.py +0 -16
  289. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  290. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  291. machineconfig/jobs/python/tasks.py +0 -3
  292. machineconfig/jobs/python/vscode/api.py +0 -48
  293. machineconfig/jobs/python/vscode/link_ve.py +0 -63
  294. machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
  295. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  296. machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
  297. machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
  298. machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
  299. machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
  300. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
  301. machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
  302. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
  303. machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
  304. machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
  305. machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
  306. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
  307. machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
  308. machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
  309. machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
  310. machineconfig/jobs/python_custom_installers/docker.py +0 -74
  311. machineconfig/jobs/python_custom_installers/gh.py +0 -97
  312. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
  313. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
  314. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
  315. machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
  316. machineconfig/jobs/python_generic_installers/config.json +0 -603
  317. machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
  318. machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
  319. machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
  320. machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
  321. machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
  322. machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
  323. machineconfig/jobs/python_linux_installers/config.json +0 -145
  324. machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
  325. machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
  326. machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
  327. machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
  328. machineconfig/jobs/python_windows_installers/config.json +0 -82
  329. machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
  330. machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
  331. machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
  332. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  333. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  334. machineconfig/jobs/windows/startup_file.cmd +0 -2
  335. machineconfig/profile/create.py +0 -169
  336. machineconfig/profile/shell.py +0 -176
  337. machineconfig/scripts/cloud/init.sh +0 -119
  338. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  339. machineconfig/scripts/linux/cloud_copy +0 -2
  340. machineconfig/scripts/linux/cloud_mount +0 -2
  341. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  342. machineconfig/scripts/linux/cloud_sync +0 -2
  343. machineconfig/scripts/linux/croshell +0 -3
  344. machineconfig/scripts/linux/devops +0 -2
  345. machineconfig/scripts/linux/fire +0 -2
  346. machineconfig/scripts/linux/fire_agents +0 -2
  347. machineconfig/scripts/linux/ftpx +0 -2
  348. machineconfig/scripts/linux/fzf2g +0 -21
  349. machineconfig/scripts/linux/fzffg +0 -25
  350. machineconfig/scripts/linux/gh_models +0 -2
  351. machineconfig/scripts/linux/kill_process +0 -2
  352. machineconfig/scripts/linux/mcinit +0 -2
  353. machineconfig/scripts/linux/programs +0 -21
  354. machineconfig/scripts/linux/repos +0 -2
  355. machineconfig/scripts/linux/scheduler +0 -2
  356. machineconfig/scripts/linux/share_smb +0 -1
  357. machineconfig/scripts/linux/start_slidev +0 -2
  358. machineconfig/scripts/linux/start_terminals +0 -3
  359. machineconfig/scripts/linux/warp-cli.sh +0 -122
  360. machineconfig/scripts/linux/wifi_conn +0 -2
  361. machineconfig/scripts/linux/z_ls +0 -104
  362. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  363. machineconfig/scripts/python/archive/im2text.py +0 -34
  364. machineconfig/scripts/python/archive/tmate_conn.py +0 -41
  365. machineconfig/scripts/python/archive/tmate_start.py +0 -44
  366. machineconfig/scripts/python/cloud_repo_sync.py +0 -192
  367. machineconfig/scripts/python/cloud_sync.py +0 -85
  368. machineconfig/scripts/python/devops_devapps_install.py +0 -202
  369. machineconfig/scripts/python/devops_update_repos.py +0 -180
  370. machineconfig/scripts/python/dotfile.py +0 -52
  371. machineconfig/scripts/python/fire_agents.py +0 -176
  372. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  373. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  374. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
  375. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
  376. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  377. machineconfig/scripts/python/gh_models.py +0 -104
  378. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  379. machineconfig/scripts/python/repos.py +0 -160
  380. machineconfig/scripts/python/snapshot.py +0 -25
  381. machineconfig/scripts/python/start_terminals.py +0 -121
  382. machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
  383. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  384. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  385. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  386. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  387. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  388. machineconfig/scripts/windows/croshell.ps1 +0 -1
  389. machineconfig/scripts/windows/devops.ps1 +0 -1
  390. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  391. machineconfig/scripts/windows/fire.ps1 +0 -1
  392. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  393. machineconfig/scripts/windows/gpt.ps1 +0 -1
  394. machineconfig/scripts/windows/grep.ps1 +0 -2
  395. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  396. machineconfig/scripts/windows/mcinit.ps1 +0 -1
  397. machineconfig/scripts/windows/nano.ps1 +0 -3
  398. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  399. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  400. machineconfig/scripts/windows/repos.ps1 +0 -1
  401. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  402. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  403. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  404. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  405. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  406. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  407. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  408. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  409. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  410. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  411. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  412. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  413. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  414. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  415. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  416. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  417. machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
  418. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  419. machineconfig/utils/installer.py +0 -255
  420. machineconfig-3.7.dist-info/METADATA +0 -165
  421. machineconfig-3.7.dist-info/RECORD +0 -432
  422. machineconfig-3.7.dist-info/entry_points.txt +0 -18
  423. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  424. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  425. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  426. machineconfig/jobs/{python → installer}/__init__.py +0 -0
  427. machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
  428. machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
  429. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  430. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  431. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  432. machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
  433. machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  434. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  435. machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  437. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  438. /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
  439. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  440. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  441. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  442. /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
  443. /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
  444. /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  445. /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
  446. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  447. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  448. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  449. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  450. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  451. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
  452. /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
  453. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  454. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  455. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  456. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  457. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  458. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  459. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  460. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  461. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  462. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  463. /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
  464. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
  465. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,511 @@
1
+ """Machine Status Display - Comprehensive system and configuration overview"""
2
+
3
+ import platform
4
+ import shutil
5
+ from pathlib import Path
6
+ from typing import Any
7
+
8
+ from rich.console import Console
9
+ from rich.panel import Panel
10
+ from rich.table import Table
11
+ from rich.text import Text
12
+
13
+ from machineconfig.utils.path_extended import PathExtended
14
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH, LIBRARY_ROOT
15
+
16
+
17
+ console = Console()
18
+
19
+
20
+ def _check_system_info() -> dict[str, str]:
21
+ """Gather basic system information."""
22
+ import socket
23
+ import os
24
+
25
+ return {
26
+ "hostname": socket.gethostname(),
27
+ "system": platform.system(),
28
+ "release": platform.release(),
29
+ "version": platform.version(),
30
+ "machine": platform.machine(),
31
+ "processor": platform.processor() or "Unknown",
32
+ "python_version": platform.python_version(),
33
+ "user": os.getenv("USER") or os.getenv("USERNAME") or "Unknown",
34
+ }
35
+
36
+
37
+ def _check_shell_profile_status() -> dict[str, Any]:
38
+ """Check shell profile configuration status."""
39
+ from machineconfig.profile.create_shell_profile import get_shell_profile_path
40
+
41
+ try:
42
+ profile_path = get_shell_profile_path()
43
+ if not profile_path.exists():
44
+ profile_path.parent.mkdir(parents=True, exist_ok=True)
45
+ profile_path.touch()
46
+ profile_content = profile_path.read_text(encoding="utf-8")
47
+ system_name = platform.system()
48
+ if system_name == "Windows":
49
+ init_script = PathExtended(CONFIG_ROOT).joinpath("settings/shells/pwsh/init.ps1")
50
+ init_script_copy = PathExtended(CONFIG_ROOT).joinpath("profile/init.ps1").collapseuser()
51
+ source_reference = f". {str(init_script.collapseuser()).replace('~', '$HOME')}"
52
+ source_copy = f". {str(init_script_copy).replace('~', '$HOME')}"
53
+ else:
54
+ init_script = PathExtended(CONFIG_ROOT).joinpath("settings/shells/bash/init.sh")
55
+ init_script_copy = PathExtended(CONFIG_ROOT).joinpath("profile/init.sh").collapseuser()
56
+ source_reference = f"source {str(init_script.collapseuser()).replace('~', '$HOME')}"
57
+ source_copy = f"source {str(init_script_copy).replace('~', '$HOME')}"
58
+
59
+ configured = source_reference in profile_content or source_copy in profile_content
60
+ method = "reference" if source_reference in profile_content else ("copy" if source_copy in profile_content else "none")
61
+
62
+ return {
63
+ "profile_path": str(profile_path),
64
+ "exists": True,
65
+ "configured": configured,
66
+ "method": method,
67
+ "init_script_exists": init_script.exists(),
68
+ "init_script_copy_exists": init_script_copy.exists(),
69
+ }
70
+ except Exception as ex:
71
+ return {
72
+ "profile_path": "Error",
73
+ "exists": False,
74
+ "configured": False,
75
+ "method": "error",
76
+ "error": str(ex),
77
+ "init_script_exists": False,
78
+ "init_script_copy_exists": False,
79
+ }
80
+
81
+
82
+ def _check_repos_status() -> dict[str, Any]:
83
+ """Check configured repositories status."""
84
+ from machineconfig.utils.io import read_ini
85
+
86
+ try:
87
+ repos_str = read_ini(DEFAULTS_PATH)["general"]["repos"]
88
+ repo_paths = [Path(p.strip()).expanduser() for p in repos_str.split(",") if p.strip()]
89
+
90
+ repos_info = []
91
+ for repo_path in repo_paths:
92
+ if not repo_path.exists():
93
+ repos_info.append({"path": str(repo_path), "name": repo_path.name, "exists": False, "is_repo": False})
94
+ continue
95
+
96
+ try:
97
+ import git
98
+
99
+ repo = git.Repo(str(repo_path))
100
+ repos_info.append(
101
+ {
102
+ "path": str(repo_path),
103
+ "name": repo_path.name,
104
+ "exists": True,
105
+ "is_repo": True,
106
+ "clean": not repo.is_dirty(untracked_files=True),
107
+ "branch": repo.active_branch.name if not repo.head.is_detached else "DETACHED",
108
+ }
109
+ )
110
+ except Exception:
111
+ repos_info.append({"path": str(repo_path), "name": repo_path.name, "exists": True, "is_repo": False})
112
+
113
+ return {"configured": True, "count": len(repos_info), "repos": repos_info}
114
+ except (FileNotFoundError, KeyError, IndexError):
115
+ return {"configured": False, "count": 0, "repos": []}
116
+
117
+
118
+ def _check_ssh_status() -> dict[str, Any]:
119
+ """Check SSH configuration status."""
120
+ ssh_dir = PathExtended.home().joinpath(".ssh")
121
+ if not ssh_dir.exists():
122
+ return {"ssh_dir_exists": False, "keys": [], "config_exists": False, "authorized_keys_exists": False, "known_hosts_exists": False}
123
+
124
+ keys = []
125
+ for pub_key in ssh_dir.glob("*.pub"):
126
+ private_key = pub_key.with_suffix("")
127
+ keys.append(
128
+ {
129
+ "name": pub_key.stem,
130
+ "public_exists": True,
131
+ "private_exists": private_key.exists(),
132
+ "public_path": str(pub_key),
133
+ "private_path": str(private_key),
134
+ }
135
+ )
136
+
137
+ config_file = ssh_dir.joinpath("config")
138
+ authorized_keys = ssh_dir.joinpath("authorized_keys")
139
+ known_hosts = ssh_dir.joinpath("known_hosts")
140
+
141
+ return {
142
+ "ssh_dir_exists": True,
143
+ "keys": keys,
144
+ "config_exists": config_file.exists(),
145
+ "authorized_keys_exists": authorized_keys.exists(),
146
+ "known_hosts_exists": known_hosts.exists(),
147
+ "ssh_dir_path": str(ssh_dir),
148
+ }
149
+
150
+
151
+ def _check_config_files_status() -> dict[str, Any]:
152
+ """Check public and private configuration files status."""
153
+ from machineconfig.profile.create_links import read_mapper
154
+
155
+ try:
156
+ mapper = read_mapper()
157
+ public_configs = list(mapper.get("public", {}).keys())
158
+ private_configs = list(mapper.get("private", {}).keys())
159
+
160
+ public_count = len(public_configs)
161
+ private_count = len(private_configs)
162
+
163
+ public_linked = 0
164
+ for config_name in public_configs:
165
+ for config_item in mapper["public"][config_name]:
166
+ target_path = PathExtended(config_item["config_file_default_path"]).expanduser()
167
+ if target_path.exists():
168
+ public_linked += 1
169
+ break
170
+
171
+ private_linked = 0
172
+ for config_name in private_configs:
173
+ for config_item in mapper["private"][config_name]:
174
+ target_path = PathExtended(config_item["config_file_default_path"]).expanduser()
175
+ if target_path.exists():
176
+ private_linked += 1
177
+ break
178
+
179
+ return {
180
+ "public_count": public_count,
181
+ "public_linked": public_linked,
182
+ "private_count": private_count,
183
+ "private_linked": private_linked,
184
+ "public_configs": public_configs,
185
+ "private_configs": private_configs,
186
+ }
187
+ except Exception as ex:
188
+ return {
189
+ "public_count": 0,
190
+ "public_linked": 0,
191
+ "private_count": 0,
192
+ "private_linked": 0,
193
+ "error": str(ex),
194
+ "public_configs": [],
195
+ "private_configs": [],
196
+ }
197
+
198
+
199
+ def _check_important_tools() -> dict[str, dict[str, bool]]:
200
+ """Check if important CLI tools are installed, organized by groups."""
201
+ from machineconfig.jobs.installer.package_groups import PACKAGE_GROUP2NAMES
202
+
203
+ group_status = {}
204
+ for group_name, tools in PACKAGE_GROUP2NAMES.items():
205
+ tool_status = {}
206
+ for tool in tools:
207
+ tool_status[tool] = shutil.which(tool) is not None
208
+ group_status[group_name] = tool_status
209
+
210
+ return group_status
211
+
212
+
213
+ def _check_backup_config() -> dict[str, Any]:
214
+ """Check backup configuration status."""
215
+ from machineconfig.utils.io import read_ini
216
+ import tomllib
217
+
218
+ try:
219
+ cloud_config = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
220
+ except (FileNotFoundError, KeyError, IndexError):
221
+ cloud_config = "Not configured"
222
+
223
+ try:
224
+ backup_file = LIBRARY_ROOT.joinpath("profile/backup.toml")
225
+ if backup_file.exists():
226
+ backup_data = tomllib.loads(backup_file.read_text(encoding="utf-8"))
227
+ backup_items = list(backup_data.keys())
228
+ backup_items_count = len(backup_items)
229
+ else:
230
+ backup_items = []
231
+ backup_items_count = 0
232
+ except Exception:
233
+ backup_items = []
234
+ backup_items_count = 0
235
+
236
+ return {"cloud_config": cloud_config, "backup_items_count": backup_items_count, "backup_items": backup_items}
237
+
238
+
239
+ def _display_system_info(info: dict[str, str]) -> None:
240
+ """Display system information panel."""
241
+ console.rule("[bold blue]💻 System Information[/bold blue]")
242
+
243
+ table = Table(show_header=False, box=None, padding=(0, 1), expand=False)
244
+ table.add_column("Property", style="cyan", no_wrap=True)
245
+ table.add_column("Value", style="white")
246
+
247
+ table.add_row("🏠 Hostname", info["hostname"])
248
+ table.add_row("💿 System", f"{info['system']} {info['release']}")
249
+ table.add_row("🖥️ Machine", info["machine"])
250
+ table.add_row("⚙️ Processor", info["processor"])
251
+ table.add_row("🐍 Python", info["python_version"])
252
+ table.add_row("👤 User", info["user"])
253
+
254
+ console.print(Panel(table, title="System", border_style="blue", padding=(1, 2), expand=False))
255
+
256
+
257
+ def _display_shell_status(status: dict[str, Any]) -> None:
258
+ """Display shell profile status panel."""
259
+ console.rule("[bold green]🐚 Shell Profile[/bold green]")
260
+
261
+ if "error" in status:
262
+ console.print(Panel(f"❌ Error: {status['error']}", title="Shell Profile", border_style="red", padding=(1, 2), expand=False))
263
+ return
264
+
265
+ from rich.columns import Columns
266
+
267
+ left_table = Table(show_header=False, box=None, padding=(0, 1))
268
+ left_table.add_column("Item", style="cyan", no_wrap=True)
269
+ left_table.add_column("Status")
270
+
271
+ left_table.add_row("📄 Profile", status["profile_path"])
272
+ left_table.add_row(f"{'✅' if status['exists'] else '❌'} Exists", str(status["exists"]))
273
+ left_table.add_row(f"{'✅' if status['configured'] else '❌'} Configured", str(status["configured"]))
274
+
275
+ right_table = Table(show_header=False, box=None, padding=(0, 1))
276
+ right_table.add_column("Item", style="cyan", no_wrap=True)
277
+ right_table.add_column("Status")
278
+
279
+ right_table.add_row("🔧 Method", status["method"])
280
+ right_table.add_row(f"{'✅' if status['init_script_exists'] else '❌'} Init (source)", str(status["init_script_exists"]))
281
+ right_table.add_row(f"{'✅' if status['init_script_copy_exists'] else '❌'} Init (copy)", str(status["init_script_copy_exists"]))
282
+
283
+ border_style = "green" if status["configured"] else "yellow"
284
+ console.print(
285
+ Panel(
286
+ Columns([left_table, right_table], equal=True, expand=True),
287
+ title="Shell Profile",
288
+ border_style=border_style,
289
+ padding=(1, 2),
290
+ expand=False,
291
+ )
292
+ )
293
+
294
+
295
+ def _display_repos_status(status: dict[str, Any]) -> None:
296
+ """Display configured repositories status."""
297
+ console.rule("[bold cyan]📚 Configured Repositories[/bold cyan]")
298
+
299
+ if not status["configured"]:
300
+ console.print(Panel(f"⚠️ No repositories configured in {DEFAULTS_PATH}", title="Repositories", border_style="yellow", padding=(1, 2)))
301
+ return
302
+
303
+ if status["count"] == 0:
304
+ console.print(Panel("ℹ️ No repositories configured", title="Repositories", border_style="blue", padding=(1, 2)))
305
+ return
306
+
307
+ table = Table(show_lines=True, header_style="bold cyan")
308
+ table.add_column("Repository", style="bold")
309
+ table.add_column("Status")
310
+ table.add_column("Details")
311
+
312
+ for repo in status["repos"]:
313
+ name = repo["name"]
314
+ if not repo["exists"]:
315
+ table.add_row(f"❌ {name}", "Missing", f"Path: {repo['path']}")
316
+ elif not repo["is_repo"]:
317
+ table.add_row(f"⚠️ {name}", "Not a repo", f"Path: {repo['path']}")
318
+ else:
319
+ status_icon = "✅" if repo["clean"] else "⚠️"
320
+ status_text = "Clean" if repo["clean"] else "Uncommitted changes"
321
+ table.add_row(f"{status_icon} {name}", status_text, f"Branch: {repo['branch']}")
322
+
323
+ console.print(Panel(table, title=f"Repositories ({status['count']})", border_style="cyan", padding=(1, 2)))
324
+
325
+
326
+ def _display_ssh_status(status: dict[str, Any]) -> None:
327
+ """Display SSH configuration status."""
328
+ console.rule("[bold yellow]🔐 SSH Configuration[/bold yellow]")
329
+
330
+ if not status["ssh_dir_exists"]:
331
+ console.print(Panel("❌ SSH directory (~/.ssh) does not exist", title="SSH Status", border_style="red", padding=(1, 2), expand=False))
332
+ return
333
+
334
+ from rich.columns import Columns
335
+
336
+ config_table = Table(show_header=False, box=None, padding=(0, 1))
337
+ config_table.add_column("Item", style="cyan", no_wrap=True)
338
+ config_table.add_column("Status")
339
+
340
+ config_table.add_row("📁 Directory", status["ssh_dir_path"])
341
+ config_table.add_row(f"{'✅' if status['config_exists'] else '❌'} Config", str(status["config_exists"]))
342
+ config_table.add_row(f"{'✅' if status['authorized_keys_exists'] else '❌'} Auth Keys", str(status["authorized_keys_exists"]))
343
+ config_table.add_row(f"{'✅' if status['known_hosts_exists'] else '❌'} Known Hosts", str(status["known_hosts_exists"]))
344
+
345
+ config_panel = Panel(config_table, title="SSH Config", border_style="yellow", padding=(1, 2), expand=False)
346
+
347
+ if status["keys"]:
348
+ keys_table = Table(show_header=True, box=None, padding=(0, 1), show_lines=False, expand=False)
349
+ keys_table.add_column("Key Name", style="bold cyan")
350
+ keys_table.add_column("Pub", justify="center")
351
+ keys_table.add_column("Priv", justify="center")
352
+
353
+ for key in status["keys"]:
354
+ pub_status = "✅" if key["public_exists"] else "❌"
355
+ priv_status = "✅" if key["private_exists"] else "❌"
356
+ keys_table.add_row(key["name"], pub_status, priv_status)
357
+
358
+ keys_panel = Panel(keys_table, title=f"SSH Keys ({len(status['keys'])})", border_style="yellow", padding=(1, 2), expand=False)
359
+
360
+ console.print(Columns([config_panel, keys_panel], equal=False, expand=True))
361
+ else:
362
+ console.print(config_panel)
363
+
364
+
365
+ def _display_config_files_status(status: dict[str, Any]) -> None:
366
+ """Display configuration files status."""
367
+ console.rule("[bold bright_blue]⚙️ Configuration Files[/bold bright_blue]")
368
+
369
+ if "error" in status:
370
+ console.print(
371
+ Panel(f"❌ Error reading configuration: {status['error']}", title="Configuration Files", border_style="red", padding=(1, 2), expand=False)
372
+ )
373
+ return
374
+
375
+ public_percentage = (status["public_linked"] / status["public_count"] * 100) if status["public_count"] > 0 else 0
376
+ private_percentage = (status["private_linked"] / status["private_count"] * 100) if status["private_count"] > 0 else 0
377
+
378
+ table = Table(show_header=True, box=None, padding=(0, 2), expand=False)
379
+ table.add_column("Type", style="cyan", no_wrap=True)
380
+ table.add_column("Linked", justify="right")
381
+ table.add_column("Total", justify="right")
382
+ table.add_column("Progress", justify="right")
383
+
384
+ table.add_row("📂 Public", str(status["public_linked"]), str(status["public_count"]), f"{public_percentage:.0f}%")
385
+ table.add_row("🔒 Private", str(status["private_linked"]), str(status["private_count"]), f"{private_percentage:.0f}%")
386
+
387
+ overall_linked = status["public_linked"] + status["private_linked"]
388
+ overall_total = status["public_count"] + status["private_count"]
389
+ overall_percentage = (overall_linked / overall_total * 100) if overall_total > 0 else 0
390
+
391
+ border_style = "green" if overall_percentage > 80 else ("yellow" if overall_percentage > 50 else "red")
392
+
393
+ console.print(
394
+ Panel(table, title=f"Configuration Files ({overall_percentage:.0f}% configured)", border_style=border_style, padding=(1, 2), expand=False)
395
+ )
396
+
397
+
398
+ def _display_tools_status(grouped_tools: dict[str, dict[str, bool]]) -> None:
399
+ """Display important tools installation status organized by groups."""
400
+ console.rule("[bold bright_magenta]🛠️ Important Tools[/bold bright_magenta]")
401
+
402
+ from rich.columns import Columns
403
+
404
+ all_group_panels = []
405
+ total_installed = 0
406
+ total_tools = 0
407
+
408
+ for group_name, tools in grouped_tools.items():
409
+ sorted_tools = sorted(tools.keys())
410
+ installed = [tool for tool, status in tools.items() if status]
411
+ total_installed += len(installed)
412
+ total_tools += len(tools)
413
+
414
+ num_columns = 8
415
+ tools_per_column = (len(sorted_tools) + num_columns - 1) // num_columns
416
+
417
+ tables = []
418
+ for col_idx in range(num_columns):
419
+ table = Table(show_header=False, box=None, padding=(0, 0), collapse_padding=True)
420
+ table.add_column("Tool", style="cyan", no_wrap=True, width=None)
421
+ table.add_column("", justify="center", width=2, no_wrap=True)
422
+
423
+ start_idx = col_idx * tools_per_column
424
+ end_idx = min(start_idx + tools_per_column, len(sorted_tools))
425
+
426
+ for i in range(start_idx, end_idx):
427
+ tool = sorted_tools[i]
428
+ status_icon = "✅" if tools[tool] else "❌"
429
+ table.add_row(tool, status_icon)
430
+
431
+ if start_idx < len(sorted_tools):
432
+ tables.append(table)
433
+
434
+ installed_percentage = (len(installed) / len(tools) * 100) if tools else 0
435
+ border_style = "green" if installed_percentage > 80 else ("yellow" if installed_percentage > 50 else "red")
436
+
437
+ group_display_name = group_name.replace("_", " ").title()
438
+ group_panel = Panel(
439
+ Columns(tables, equal=False, expand=False, padding=(0, 1)),
440
+ title=f"{group_display_name} ({len(installed)}/{len(tools)})",
441
+ border_style=border_style,
442
+ padding=(0, 1),
443
+ expand=False,
444
+ )
445
+ all_group_panels.append(group_panel)
446
+
447
+ overall_percentage = (total_installed / total_tools * 100) if total_tools else 0
448
+ master_border_style = "green" if overall_percentage > 80 else ("yellow" if overall_percentage > 50 else "red")
449
+
450
+ from rich.console import Group
451
+
452
+ master_panel = Panel(
453
+ Group(*all_group_panels),
454
+ title=f"🛠️ Tools Overview ({total_installed}/{total_tools} installed - {overall_percentage:.0f}%)",
455
+ border_style=master_border_style,
456
+ padding=(1, 2),
457
+ expand=False,
458
+ )
459
+ console.print(master_panel)
460
+
461
+
462
+ def _display_backup_status(status: dict[str, Any]) -> None:
463
+ """Display backup configuration status."""
464
+ console.rule("[bold bright_cyan]💾 Backup Configuration[/bold bright_cyan]")
465
+
466
+ table = Table(show_header=False, box=None, padding=(0, 1), expand=False)
467
+ table.add_column("Property", style="cyan", no_wrap=True)
468
+ table.add_column("Value", style="white")
469
+
470
+ table.add_row("🌥️ Cloud Config", status["cloud_config"])
471
+ table.add_row("📦 Backup Items", str(status["backup_items_count"]))
472
+
473
+ border_style = "green" if status["cloud_config"] != "Not configured" else "yellow"
474
+
475
+ console.print(Panel(table, title="Backup Configuration", border_style=border_style, padding=(1, 2), expand=False))
476
+
477
+
478
+ def main() -> None:
479
+ """Main function to display comprehensive machine status."""
480
+ console.print("\n")
481
+ console.print(Panel(Text("📊 Machine Status Report", justify="center", style="bold white"), style="bold blue", padding=(1, 2)))
482
+ console.print("\n")
483
+
484
+ system_info = _check_system_info()
485
+ _display_system_info(system_info)
486
+
487
+ shell_status = _check_shell_profile_status()
488
+ _display_shell_status(shell_status)
489
+
490
+ repos_status = _check_repos_status()
491
+ _display_repos_status(repos_status)
492
+
493
+ ssh_status = _check_ssh_status()
494
+ _display_ssh_status(ssh_status)
495
+
496
+ config_status = _check_config_files_status()
497
+ _display_config_files_status(config_status)
498
+
499
+ tools_status = _check_important_tools()
500
+ _display_tools_status(tools_status)
501
+
502
+ backup_status = _check_backup_config()
503
+ _display_backup_status(backup_status)
504
+
505
+ console.print("\n")
506
+ console.print(Panel(Text("✨ Status report complete!", justify="center", style="bold green"), style="green", padding=(1, 2)))
507
+ console.print("\n")
508
+
509
+
510
+ if __name__ == "__main__":
511
+ main()