machineconfig 6.23__py3-none-any.whl → 8.12__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 (402) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  5. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  6. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  7. machineconfig/cluster/sessions_managers/wt_local.py +16 -221
  8. machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
  9. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  10. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  11. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  12. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  13. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  14. machineconfig/cluster/sessions_managers/zellij_local.py +3 -3
  15. machineconfig/cluster/sessions_managers/zellij_local_manager.py +5 -3
  16. machineconfig/cluster/sessions_managers/zellij_remote.py +2 -2
  17. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  18. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +2 -2
  19. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -7
  20. machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_with_panes.py +1 -1
  21. machineconfig/jobs/installer/check_installations.py +0 -1
  22. machineconfig/jobs/installer/installer_data.json +1408 -201
  23. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  24. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  25. machineconfig/jobs/installer/package_groups.py +63 -92
  26. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  27. machineconfig/jobs/installer/python_scripts/boxes.py +61 -0
  28. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
  29. machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
  30. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
  31. machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
  32. machineconfig/jobs/installer/{custom → python_scripts}/hx.py +75 -18
  33. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
  34. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
  35. machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
  36. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
  37. machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
  38. machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
  39. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
  40. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  41. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  42. machineconfig/jobs/scripts_dynamic/a.py +25 -0
  43. machineconfig/logger.py +0 -1
  44. machineconfig/profile/create_helper.py +56 -18
  45. machineconfig/profile/create_links.py +2 -1
  46. machineconfig/profile/create_links_export.py +64 -18
  47. machineconfig/profile/create_shell_profile.py +90 -132
  48. machineconfig/profile/mapper.toml +18 -8
  49. machineconfig/scripts/__init__.py +0 -4
  50. machineconfig/scripts/linux/wrap_mcfg +46 -0
  51. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  52. machineconfig/scripts/python/agents.py +82 -60
  53. machineconfig/scripts/python/ai/initai.py +1 -19
  54. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  55. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  56. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
  57. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  58. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  59. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  60. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  61. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
  62. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  63. machineconfig/scripts/python/ai/solutions/generic.py +1 -1
  64. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  65. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
  66. machineconfig/scripts/python/cloud.py +14 -9
  67. machineconfig/scripts/python/croshell.py +135 -117
  68. machineconfig/scripts/python/devops.py +48 -25
  69. machineconfig/scripts/python/devops_navigator.py +1 -5
  70. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  71. machineconfig/scripts/python/env_manager/path_manager_tui.py +18 -9
  72. machineconfig/scripts/python/fire_jobs.py +127 -118
  73. machineconfig/scripts/python/ftpx.py +44 -17
  74. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  75. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  76. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  77. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  78. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  79. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  80. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  81. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  82. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  83. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +37 -15
  84. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
  85. machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  86. machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  87. machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  88. machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
  89. machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  90. machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
  91. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  92. machineconfig/scripts/python/helpers_agents/templates/template.sh +34 -0
  93. machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_copy.py +28 -21
  94. machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_mount.py +19 -17
  95. machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_sync.py +12 -11
  96. machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers2.py +1 -1
  97. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  98. machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/start_slidev.py +6 -7
  99. machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
  100. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  101. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  102. machineconfig/scripts/python/helpers_devops/cli_nw.py +221 -0
  103. machineconfig/scripts/python/{devops_helpers → helpers_devops}/cli_repos.py +60 -36
  104. machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
  105. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  106. machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
  107. machineconfig/scripts/python/{devops_helpers/cli_terminal.py → helpers_devops/cli_share_terminal.py} +15 -17
  108. machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_backup_retrieve.py +7 -10
  109. machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_status.py +7 -19
  110. machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_update_repos.py +1 -1
  111. machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
  112. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  113. machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_wezterm_theme.py +1 -1
  114. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -20
  115. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +2 -0
  116. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
  117. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  118. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  119. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  120. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  121. machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_builder.py +1 -1
  122. machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_detail.py +1 -1
  123. machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_tree.py +160 -23
  124. machineconfig/scripts/python/{helper_navigator → helpers_navigator}/main_app.py +5 -5
  125. machineconfig/scripts/python/helpers_network/address.py +176 -0
  126. machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
  127. machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
  128. machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
  129. machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
  130. machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
  131. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
  132. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
  133. machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
  134. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  135. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  136. machineconfig/scripts/python/{repos_helpers → helpers_repos}/clone.py +0 -1
  137. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +80 -37
  138. machineconfig/scripts/python/{repos_helpers → helpers_repos}/entrypoint.py +5 -5
  139. machineconfig/scripts/python/helpers_repos/grource.py +2 -2
  140. machineconfig/scripts/python/{repos_helpers → helpers_repos}/record.py +3 -2
  141. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  142. machineconfig/scripts/python/{repos_helpers/count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
  143. machineconfig/scripts/python/{repos_helpers → helpers_repos}/sync.py +5 -5
  144. machineconfig/scripts/python/{sessions_helpers → helpers_sessions}/sessions_multiprocess.py +19 -13
  145. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  146. machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
  147. machineconfig/scripts/python/helpers_utils/python.py +187 -0
  148. machineconfig/scripts/python/interactive.py +26 -35
  149. machineconfig/scripts/python/{entry.py → mcfg_entry.py} +24 -10
  150. machineconfig/scripts/python/msearch.py +72 -0
  151. machineconfig/scripts/python/sessions.py +101 -38
  152. machineconfig/scripts/python/terminal.py +136 -0
  153. machineconfig/scripts/python/utils.py +62 -0
  154. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  155. machineconfig/settings/broot/conf.toml +1 -1
  156. machineconfig/settings/helix/config.toml +16 -0
  157. machineconfig/settings/helix/languages.toml +13 -4
  158. machineconfig/settings/helix/yazi-picker.sh +12 -0
  159. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  160. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  161. machineconfig/settings/lf/linux/lfrc +10 -11
  162. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  163. machineconfig/settings/lf/windows/lfrc +15 -17
  164. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  165. machineconfig/settings/linters/.ruff.toml +1 -1
  166. machineconfig/settings/marimo/marimo.toml +80 -0
  167. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  168. machineconfig/settings/shells/bash/init.sh +57 -10
  169. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  170. machineconfig/settings/shells/nushell/config.nu +2 -35
  171. machineconfig/settings/shells/nushell/env.nu +45 -6
  172. machineconfig/settings/shells/nushell/init.nu +314 -0
  173. machineconfig/settings/shells/pwsh/init.ps1 +59 -23
  174. machineconfig/settings/shells/starship/starship.toml +16 -0
  175. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  176. machineconfig/settings/shells/wt/settings.json +32 -17
  177. machineconfig/settings/shells/zsh/init.sh +89 -0
  178. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  179. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  180. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  181. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  182. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  183. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  184. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  185. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  186. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  187. machineconfig/settings/television/cable_unix/env.toml +17 -0
  188. machineconfig/settings/television/cable_unix/files.toml +11 -0
  189. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  190. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  191. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  192. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  193. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  194. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  195. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  196. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  197. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  198. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  199. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  200. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  201. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  202. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  203. machineconfig/settings/television/cable_unix/text.toml +17 -0
  204. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  205. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  206. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  207. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  208. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  209. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  210. machineconfig/settings/television/cable_windows/env.toml +17 -0
  211. machineconfig/settings/television/cable_windows/files.toml +14 -0
  212. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  213. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  214. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  215. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  216. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  217. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  218. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  219. machineconfig/settings/television/cable_windows/text.toml +17 -0
  220. machineconfig/settings/yazi/init.lua +61 -0
  221. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  222. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  223. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  224. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  225. machineconfig/settings/yazi/theme.toml +4 -0
  226. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  227. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  228. machineconfig/settings/zellij/layouts/st.kdl +39 -8
  229. machineconfig/setup_linux/__init__.py +2 -2
  230. machineconfig/setup_linux/apps_desktop.sh +8 -27
  231. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -11
  232. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  233. machineconfig/setup_mac/__init__.py +16 -0
  234. machineconfig/setup_mac/apps_gui.sh +248 -0
  235. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  236. machineconfig/setup_mac/uv.sh +36 -0
  237. machineconfig/setup_windows/__init__.py +3 -5
  238. machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
  239. machineconfig/setup_windows/uv.ps1 +8 -1
  240. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -10
  241. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  242. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  243. machineconfig/utils/accessories.py +7 -5
  244. machineconfig/utils/code.py +143 -167
  245. machineconfig/utils/files/art/fat_croco.txt +10 -0
  246. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  247. machineconfig/utils/files/art/happy_croco.txt +22 -0
  248. machineconfig/utils/files/art/water_croco.txt +11 -0
  249. machineconfig/utils/files/ascii_art.py +1 -1
  250. machineconfig/utils/files/headers.py +6 -11
  251. machineconfig/utils/files/read.py +3 -9
  252. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  253. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  254. machineconfig/utils/installer_utils/installer_class.py +44 -101
  255. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  256. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  257. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +39 -87
  258. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +17 -63
  259. machineconfig/utils/io.py +77 -4
  260. machineconfig/utils/links.py +56 -38
  261. machineconfig/utils/meta.py +235 -145
  262. machineconfig/utils/options.py +46 -18
  263. machineconfig/utils/options_tv.py +119 -0
  264. machineconfig/utils/path_extended.py +46 -97
  265. machineconfig/utils/path_helper.py +76 -23
  266. machineconfig/utils/procs.py +10 -23
  267. machineconfig/utils/scheduler.py +84 -115
  268. machineconfig/utils/scheduling.py +0 -3
  269. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  270. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  271. machineconfig/utils/ssh.py +214 -476
  272. machineconfig/utils/ssh_utils/abc.py +5 -0
  273. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  274. machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
  275. machineconfig/utils/ssh_utils/utils.py +142 -0
  276. machineconfig/utils/ssh_utils/wsl.py +210 -0
  277. machineconfig/utils/terminal.py +3 -113
  278. machineconfig/utils/upgrade_packages.py +114 -28
  279. machineconfig/utils/ve.py +12 -4
  280. machineconfig-8.12.dist-info/METADATA +132 -0
  281. machineconfig-8.12.dist-info/RECORD +504 -0
  282. {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +5 -1
  283. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  284. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  285. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  286. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  287. machineconfig/jobs/python/vscode/api.py +0 -57
  288. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -12
  289. machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -7
  290. machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -14
  291. machineconfig/scripts/linux/fzf2g +0 -21
  292. machineconfig/scripts/linux/fzfag +0 -17
  293. machineconfig/scripts/linux/fzffg +0 -25
  294. machineconfig/scripts/linux/fzfrga +0 -21
  295. machineconfig/scripts/linux/other/share_smb +0 -1
  296. machineconfig/scripts/linux/other/switch_ip +0 -20
  297. machineconfig/scripts/linux/skrg +0 -4
  298. machineconfig/scripts/linux/warp-cli.sh +0 -122
  299. machineconfig/scripts/linux/z_ls +0 -104
  300. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  301. machineconfig/scripts/python/devops_helpers/cli_config.py +0 -81
  302. machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -84
  303. machineconfig/scripts/python/devops_helpers/cli_data.py +0 -18
  304. machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -73
  305. machineconfig/scripts/python/devops_helpers/cli_self.py +0 -117
  306. machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -104
  307. machineconfig/scripts/python/helper_navigator/__init__.py +0 -20
  308. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  309. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  310. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  311. machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -30
  312. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  313. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  314. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  315. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  316. machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
  317. machineconfig/scripts/python/repos_helpers/action.py +0 -378
  318. machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -17
  319. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  320. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  321. machineconfig/scripts/windows/fzfrga.bat +0 -20
  322. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  323. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  324. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  325. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  326. machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
  327. machineconfig/settings/yazi/keymap.toml +0 -0
  328. machineconfig/settings/yazi/yazi.toml +0 -4
  329. machineconfig/setup_linux/apps.sh +0 -66
  330. machineconfig/setup_linux/nix/cli_installation.sh +0 -137
  331. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  332. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  333. machineconfig/setup_windows/apps.ps1 +0 -62
  334. machineconfig/setup_windows/others/obs.ps1 +0 -4
  335. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  336. machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
  337. machineconfig/utils/installer_utils/installer.py +0 -225
  338. machineconfig-6.23.dist-info/METADATA +0 -84
  339. machineconfig-6.23.dist-info/RECORD +0 -428
  340. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  341. machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper.py +0 -0
  342. machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_restart.py +0 -0
  343. machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_manager_helper.py +0 -0
  344. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  345. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
  346. machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
  347. machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  348. machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  349. machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  350. machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  351. machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  352. machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  353. machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  354. machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  355. machineconfig/{setup_linux/web_shortcuts → jobs/scripts/bash_scripts}/android.sh +0 -0
  356. machineconfig/jobs/{linux/msc → scripts/bash_scripts}/lid.sh +0 -0
  357. machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
  358. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
  359. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  360. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
  361. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  362. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  363. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  364. machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  365. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  366. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  367. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  368. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  369. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  370. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  371. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  372. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  373. machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
  374. machineconfig/scripts/python/{cloud_helpers → helpers_agents}/__init__.py +0 -0
  375. machineconfig/scripts/python/{croshell_helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  376. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
  377. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
  378. machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
  379. machineconfig/scripts/python/{devops_helpers → helpers_cloud}/__init__.py +0 -0
  380. machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_helpers.py +1 -1
  381. /machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers5.py +0 -0
  382. /machineconfig/scripts/python/{devops_helpers/themes → helpers_croshell}/__init__.py +0 -0
  383. /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/pomodoro.py +0 -0
  384. /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/scheduler.py +0 -0
  385. /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer.py +0 -0
  386. /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer_template.py +0 -0
  387. /machineconfig/scripts/python/{helpers_fire → helpers_devops}/__init__.py +0 -0
  388. /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_devops/themes}/__init__.py +0 -0
  389. /machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  390. /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  391. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
  392. /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/data_models.py +0 -0
  393. /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/search_bar.py +0 -0
  394. /machineconfig/scripts/python/{helpers_repos → helpers_network}/__init__.py +0 -0
  395. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
  396. /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
  397. /machineconfig/scripts/python/{repos_helpers → helpers_repos}/update.py +0 -0
  398. /machineconfig/scripts/python/{nw → helpers_sessions}/__init__.py +0 -0
  399. /machineconfig/{scripts/python/sessions_helpers → settings/wt}/__init__.py +0 -0
  400. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  401. {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
  402. {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,96 @@
1
+
2
+
3
+ import typer
4
+ from typing import Annotated, Optional
5
+
6
+
7
+ def merge_pdfs(
8
+ pdfs: Annotated[list[str], typer.Argument(..., help="Paths to the PDF files to merge.")],
9
+ output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
10
+ compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
11
+ ) -> None:
12
+ def merge_pdfs_internal(pdfs: list[str], output: str | None, compress: bool) -> None:
13
+ from pypdf import PdfReader, PdfWriter
14
+ writer = PdfWriter()
15
+ for pdf_path in pdfs:
16
+ reader = PdfReader(pdf_path)
17
+ for page in reader.pages:
18
+ writer.add_page(page)
19
+ output_path = output if output else "merged.pdf"
20
+ if compress:
21
+ try:
22
+ for p in writer.pages:
23
+ try:
24
+ # PageObject.compress_content_streams exists in pypdf
25
+ p.compress_content_streams()
26
+ except Exception:
27
+ # best-effort: ignore per-page compression failures
28
+ continue
29
+ except Exception:
30
+ pass
31
+ try:
32
+ writer.compress_identical_objects()
33
+ except Exception:
34
+ # non-fatal if this fails
35
+ pass
36
+ writer.write(output_path)
37
+ print(f"✅ Merged PDF saved to: {output_path}")
38
+ from machineconfig.utils.meta import lambda_to_python_script
39
+ code = lambda_to_python_script(lambda : merge_pdfs_internal(pdfs=pdfs, output=output, compress=compress),
40
+ in_global=True, import_module=False)
41
+ from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
42
+ uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pypdf"], uv_project_dir=None)
43
+ run_shell_script(uv_command)
44
+
45
+
46
+ def compress_pdf(
47
+ pdf_input: Annotated[str, typer.Argument(..., help="Path to the input PDF file to compress.")],
48
+ output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output compressed PDF file path.")] = None,
49
+ quality: Annotated[int, typer.Option("--quality", "-q", help="JPEG quality for image compression (0-100, 0=no change, 100=best).")] = 85,
50
+ image_dpi: Annotated[int, typer.Option("--image-dpi", "-d", help="Target DPI for image resampling. If set, images above this DPI will be downsampled.")] = 0,
51
+ # remove_images: Annotated[bool, typer.Option("--remove-images", "-r", help="Remove all images from the PDF.")] = False,
52
+ compress_streams: Annotated[bool, typer.Option("--compress-streams", "-c", help="Compress uncompressed streams.")] = True,
53
+ use_objstms: Annotated[bool, typer.Option("--object-streams", "-s", help="Use object streams for additional compression.")] = True,
54
+ ) -> None:
55
+ def compress_pdf_internal(pdf_input: str, output: str | None, quality: int, image_dpi: int, compress_streams: bool, use_objstms: bool) -> None:
56
+ import pymupdf
57
+ from pathlib import Path
58
+ output_path = output if output else pdf_input.replace(".pdf", "_compressed.pdf")
59
+ doc = pymupdf.open(pdf_input)
60
+ try:
61
+ # if remove_images:
62
+ # for page in doc:
63
+ # page.remove_images()
64
+ if quality > 0 or image_dpi > 0:
65
+ doc.rewrite_images(
66
+ dpi_threshold=image_dpi if image_dpi > 0 else None,
67
+ dpi_target=max(72, image_dpi - 10) if image_dpi > 72 else 72,
68
+ quality=quality,
69
+ lossy=True,
70
+ lossless=True,
71
+ )
72
+ doc.save(
73
+ output_path,
74
+ deflate=compress_streams,
75
+ garbage=3,
76
+ use_objstms=1 if use_objstms else 0,
77
+ )
78
+ input_size = Path(pdf_input).stat().st_size
79
+ output_size = Path(output_path).stat().st_size
80
+ ratio = (1 - output_size / input_size) * 100
81
+ print(f"✅ Compressed PDF saved to: {output_path}")
82
+ print(f" Original: {input_size / 1024 / 1024:.2f} MB")
83
+ print(f" Compressed: {output_size / 1024 / 1024:.2f} MB")
84
+ print(f" Reduction: {ratio:.1f}%")
85
+ finally:
86
+ doc.close()
87
+ from machineconfig.utils.meta import lambda_to_python_script
88
+ code = lambda_to_python_script(
89
+ lambda: compress_pdf_internal(pdf_input=pdf_input, output=output, quality=quality, image_dpi=image_dpi, compress_streams=compress_streams, use_objstms=use_objstms),
90
+ in_global=True,
91
+ import_module=False,
92
+ )
93
+ from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
94
+ uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pymupdf"], uv_project_dir=None)
95
+ run_shell_script(uv_command)
96
+
@@ -0,0 +1,187 @@
1
+ from tempfile import tempdir
2
+ import typer
3
+ from typing import Optional, Annotated, Literal, TypedDict, cast
4
+
5
+
6
+ def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(help="Which environment variable to display.")] = "ENV") -> None:
7
+ """📚 NAVIGATE PATH variable with TUI"""
8
+ from machineconfig.scripts.python import env_manager as navigator
9
+ from pathlib import Path
10
+
11
+ match which:
12
+ case "PATH" | "p":
13
+ path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
14
+ case "ENV" | "e":
15
+ path = Path(navigator.__file__).resolve().parent.joinpath("env_manager_tui.py")
16
+ from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
17
+
18
+ uv_with = ["textual"]
19
+ uv_project_dir = None
20
+ if not Path.home().joinpath("code/machineconfig").exists():
21
+ uv_with.append("machineconfig>=8.12")
22
+ else:
23
+ uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
24
+ run_shell_script(
25
+ get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0]
26
+ )
27
+
28
+
29
+ def init_project(
30
+ name: Annotated[Optional[str], typer.Option("--name", "-n", help="Name of the project.")] = None,
31
+ tmp_dir: Annotated[bool, typer.Option("--tmp-dir", "-t", help="Use a temporary directory for the project initialization.")] = False,
32
+ python: Annotated[
33
+ Literal["3.11", "3.12", "3.13", "3.14"], typer.Option("--python", "-p", help="Python sub version for the uv virtual environment.")
34
+ ] = "3.13",
35
+ libraries: Annotated[
36
+ Optional[str], typer.Option("--libraries", "-l", help="Additional packages to include in the uv virtual environment (space separated).")
37
+ ] = None,
38
+ group: Annotated[
39
+ Optional[str], typer.Option("--group", "-g", help="group of packages names (no separation) p:plot, t:types, l:linting, i:interactive, d:data")
40
+ ] = "ptlid",
41
+ ) -> None:
42
+ if libraries is not None:
43
+ packages_add_line = f"uv add {libraries}"
44
+ else:
45
+ packages_add_line = ""
46
+ from pathlib import Path
47
+
48
+ if not tmp_dir:
49
+ repo_root = Path.cwd()
50
+ if not (repo_root / "pyproject.toml").exists():
51
+ typer.echo(f"❌ Error: pyproject.toml not found in {repo_root}", err=True)
52
+ raise typer.Exit(code=1)
53
+ starting_code = ""
54
+ else:
55
+ if name is not None:
56
+ from machineconfig.utils.accessories import randstr
57
+
58
+ repo_root = Path.home().joinpath(f"tmp_results/tmp_projects/{name}")
59
+ else:
60
+ from machineconfig.utils.accessories import randstr
61
+
62
+ repo_root = Path.home().joinpath(f"tmp_results/tmp_projects/{randstr(6)}")
63
+ repo_root.mkdir(parents=True, exist_ok=True)
64
+ print(f"Using temporary directory for project initialization: {repo_root}")
65
+ starting_code = f"""
66
+ cd {repo_root}
67
+ uv init --python {python}
68
+ uv venv
69
+ """
70
+ print(f"Adding group `{group}` with common data science and plotting packages...")
71
+ total_packages: list[str] = []
72
+ if group is not None:
73
+ if "t" in group:
74
+ total_packages.append(
75
+ "types-python-dateutil types-pyyaml types-requests types-tqdm types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3"
76
+ )
77
+ if "l" in group:
78
+ total_packages.append("mypy pyright ruff pylint pyrefly cleanpy ipdb pudb")
79
+ if "i" in group:
80
+ total_packages.append("ipython ipykernel jupyterlab nbformat marimo")
81
+ if "p" in group:
82
+ total_packages.append("python-magic matplotlib plotly kaleido")
83
+ if "d" in group:
84
+ total_packages.append("numpy pandas polars duckdb-engine sqlalchemy psycopg2-binary pyarrow tqdm openpyxl")
85
+ from machineconfig.utils.ve import get_ve_activate_line
86
+
87
+ script = f"""
88
+ {starting_code}
89
+ {packages_add_line}
90
+ uv add --group {group} {" ".join(total_packages)}
91
+ {get_ve_activate_line(ve_root=str(repo_root.joinpath(".venv")))}
92
+ ls
93
+ """
94
+ from machineconfig.utils.code import exit_then_run_shell_script, run_shell_script
95
+ # exit_then_run_shell_script(script)
96
+ _ = exit_then_run_shell_script
97
+ run_shell_script(script)
98
+ if tempdir:
99
+ from machineconfig.scripts.python.ai.initai import add_ai_configs
100
+ add_ai_configs(repo_root=repo_root)
101
+
102
+
103
+ def edit_file_with_hx(
104
+ path: Annotated[Optional[str], typer.Argument(..., help="The root directory of the project to edit, or a file path.")] = None,
105
+ ) -> None:
106
+ from pathlib import Path
107
+
108
+ if path is None:
109
+ root_path = Path.cwd()
110
+ print(f"No path provided. Using current working directory: {root_path}")
111
+ else:
112
+ root_path = Path(path).expanduser().resolve()
113
+ print(f"Using provided path: {root_path}")
114
+ from machineconfig.utils.accessories import get_repo_root
115
+
116
+ repo_root = get_repo_root(root_path)
117
+ if repo_root is not None and repo_root.joinpath("pyproject.toml").exists():
118
+ code = f"""
119
+ cd {repo_root}
120
+ uv add --dev pylsp-mypy python-lsp-server[all] pyright ruff-lsp # for helix editor.
121
+ source ./.venv/bin/activate
122
+ """
123
+ else:
124
+ code = ""
125
+ if root_path.is_file():
126
+ code += f"hx {root_path}"
127
+ else:
128
+ code += "hx"
129
+ from machineconfig.utils.code import exit_then_run_shell_script
130
+
131
+ exit_then_run_shell_script(code)
132
+
133
+
134
+ class MachineSpecs(TypedDict):
135
+ system: Literal["Windows", "Linux", "Darwin"]
136
+ distro: str
137
+ home_dir: str
138
+ hostname: str
139
+ release: str
140
+ version: str
141
+ machine: str
142
+ processor: str
143
+ python_version: str
144
+ user: str
145
+
146
+
147
+ def get_machine_specs() -> MachineSpecs:
148
+ """Write print and return the local machine specs."""
149
+ import platform
150
+ from machineconfig.utils.code import get_uv_run_command
151
+
152
+ uv_run_cmd = get_uv_run_command(platform=platform.system()) # type: ignore
153
+ command = f"""{uv_run_cmd} --with distro python -c "import distro; print(distro.name(pretty=True))" """
154
+ import subprocess
155
+ from pathlib import Path
156
+ import socket
157
+ import os
158
+
159
+ distro = subprocess.run(command, shell=True, capture_output=True, text=True).stdout.strip()
160
+ system = platform.system()
161
+ if system not in {"Windows", "Linux", "Darwin"}:
162
+ system = "Linux"
163
+ specs: MachineSpecs = {
164
+ "system": cast(Literal["Windows", "Linux", "Darwin"], system),
165
+ "distro": distro,
166
+ "home_dir": str(Path.home()),
167
+ "hostname": socket.gethostname(),
168
+ "release": platform.release(),
169
+ "version": platform.version(),
170
+ "machine": platform.machine(),
171
+ "processor": platform.processor() or "Unknown",
172
+ "python_version": platform.python_version(),
173
+ "user": os.getenv("USER") or os.getenv("USERNAME") or "Unknown",
174
+ }
175
+ print(specs)
176
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
177
+
178
+ path = CONFIG_ROOT.joinpath("machine_specs.json")
179
+ CONFIG_ROOT.mkdir(parents=True, exist_ok=True)
180
+ import json
181
+
182
+ path.write_text(json.dumps(specs, indent=4), encoding="utf-8")
183
+ return specs
184
+
185
+
186
+ if __name__ == "__main__":
187
+ get_machine_specs()
@@ -19,9 +19,7 @@ for better user experience with checkbox selections.
19
19
 
20
20
  import sys
21
21
  from pathlib import Path
22
- # from typing import cast
23
22
  import platform
24
-
25
23
  import questionary
26
24
  from questionary import Choice
27
25
  from rich.console import Console
@@ -29,12 +27,11 @@ from rich.panel import Panel
29
27
  from rich.text import Text
30
28
  from machineconfig.utils.code import run_shell_script
31
29
 
32
- # _ = cast
33
30
  console = Console()
34
31
 
35
32
 
36
33
  def display_header() -> None:
37
- from machineconfig.utils.installer import get_machineconfig_version
34
+ from machineconfig.utils.installer_utils.installer_runner import get_machineconfig_version
38
35
  from rich.align import Align
39
36
 
40
37
  # Fancy ASCII art header
@@ -96,46 +93,39 @@ def display_dotfiles_instructions() -> None:
96
93
  def get_installation_choices() -> list[str]:
97
94
  """Get user choices for installation options."""
98
95
  choices = [
99
- Choice(value="install_repos", title="🐍 Install machineconfig.", checked=False),
100
- Choice(value="ESSENTIAL_SYSTEM", title="📥 Install Essential System Packages.", checked=False),
101
- Choice(value="ESSENTIAL", title="⚡ Install CLI apps essentials", checked=False),
102
- Choice(value="DEV_SYSTEM", title="🛠️ Install CLI apps development.", checked=False),
103
- Choice(value="TerminalEyeCandy", title="🎨 Install CLI apps terminal eye candy.", checked=False),
104
- Choice(value="install_ssh_server", title="🔒 Install SSH Server", checked=False),
105
- Choice(value="install_shell_profile", title="🐚 Configure Shell Profile.", checked=False),
106
- Choice(value="retrieve_repositories", title="📚 Retrieve Repositories", checked=False),
107
- Choice(value="retrieve_data", title="💾 Retrieve Data.", checked=False),
96
+ Choice(value="install_machineconfig", title="🐍 Install machineconfig cli.", checked=False),
97
+ Choice(value="sysabc", title="📥 Install System Package Manager (Needed for other apps to be installed).", checked=False),
98
+ Choice(value="termabc", title="⚡ Install Terminal CLI apps essentials (group `termabc`)", checked=False),
99
+ Choice(value="install_shell_profile", title="🐚 Configure Shell Profile And Map Other Configs.", checked=False),
100
+ Choice(value="install_ssh_server", title="🔒 [ADVANCED] Configure SSH Server", checked=False),
101
+ Choice(value="retrieve_repositories", title="📚 [ADVANCED] Retrieve Repositories", checked=False),
102
+ Choice(value="retrieve_data", title="💾 [ADVANCED] Retrieve Data.", checked=False),
108
103
  ]
109
- # Add Windows-specific options
110
- if platform.system() == "Windows":
111
- choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps - Install nerd fonts and set WT config.", checked=False))
112
104
  selected = questionary.checkbox("Select the installation options you want to execute:", choices=choices, show_description=True).ask()
113
105
  return selected or []
114
106
 
115
107
 
116
108
  def execute_installations(selected_options: list[str]) -> None:
117
109
  for maybe_a_group in selected_options:
118
- if maybe_a_group in ("ESSENTIAL", "DEV", "ESSENTIAL_SYSTEM", "DEV_SYSTEM", "TerminalEyeCandy"):
110
+ if maybe_a_group in ("termabc", "sysabc"):
119
111
  console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
120
112
  console.print("🔧 Installing CLI applications", style="bold cyan")
121
113
  try:
122
- from machineconfig.utils.installer_utils.installer import main as devops_devapps_install_main
114
+ from machineconfig.utils.installer_utils.installer_cli import main_installer_cli as devops_devapps_install_main
123
115
  devops_devapps_install_main(group=True, which=maybe_a_group, interactive=False)
124
116
  console.print("✅ CLI applications installed successfully", style="bold green")
125
117
  except Exception as e:
126
118
  console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
127
- run_shell_script(". $HOME/.bashrc")
119
+ if platform.system() != "Windows":
120
+ run_shell_script(". $HOME/.bashrc")
128
121
 
129
- if "install_repos" in selected_options:
122
+ if "install_machineconfig" in selected_options:
130
123
  console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
131
- import platform
132
- if platform.system() == "Windows":
133
- run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.87""")
134
- else:
135
- run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.87""")
124
+ from machineconfig.scripts.python.helpers_devops.cli_self import install
125
+ install()
126
+
136
127
  if "install_ssh_server" in selected_options:
137
128
  console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
138
- import platform
139
129
  if platform.system() == "Windows":
140
130
  powershell_script = """Write-Host "🔧 Installing and configuring SSH server..."
141
131
  Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
@@ -152,30 +142,31 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
152
142
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
153
143
  create_default_shell_profile()
154
144
  console.print("✅ Shell profile configured successfully", style="bold green")
145
+ from machineconfig.profile.create_links_export import main_public_from_parser
146
+ main_public_from_parser(method="copy", on_conflict="overwrite-default-path", which="all", interactive=False)
147
+ if platform.system() == "Windows":
148
+ from machineconfig.jobs.installer.python_scripts.nerfont_windows_helper import install_nerd_fonts
149
+ install_nerd_fonts()
150
+ from machineconfig.settings.wt.set_wt_settings import main as set_wt_settings_main
151
+ set_wt_settings_main()
155
152
  except Exception as e:
156
153
  console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
157
154
 
158
155
  if "retrieve_repositories" in selected_options:
159
156
  console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
160
- from machineconfig.scripts.python.devops_helpers import cli_repos
157
+ from machineconfig.scripts.python.helpers_devops import cli_repos
161
158
  cli_repos.clone(directory=str(Path.home() / "code"), cloud="odg1")
162
159
 
163
160
  if "retrieve_data" in selected_options:
164
161
  console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
165
162
  console.print("🔧 Retrieving backup data", style="bold cyan")
166
163
  try:
167
- from machineconfig.scripts.python.devops_helpers.devops_backup_retrieve import main_backup_retrieve
168
- main_backup_retrieve(direction="RETRIEVE")
164
+ from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
165
+ main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None)
169
166
  console.print("✅ Backup data retrieved successfully", style="bold green")
170
167
  except Exception as e:
171
168
  console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
172
169
 
173
- if "install_windows_desktop" in selected_options:
174
- from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
175
- install_nerd_fonts()
176
- from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
177
- set_wt_settings_main()
178
-
179
170
 
180
171
  def main() -> None:
181
172
  display_header()
@@ -2,16 +2,17 @@
2
2
  from machineconfig.scripts.python.devops import get_app as get_devops_app
3
3
  from machineconfig.scripts.python.cloud import get_app as get_cloud_app
4
4
  from machineconfig.scripts.python.agents import get_app as get_agents_app
5
- from machineconfig.scripts.python.fire_jobs import get_app as get_fire_jobs_app
6
5
  from machineconfig.scripts.python.sessions import get_app as get_sessions_app
6
+ from machineconfig.scripts.python.utils import get_app as get_utils_app
7
7
 
8
8
  from machineconfig.scripts.python.ftpx import ftpx as ftpx_func
9
9
  from machineconfig.scripts.python.croshell import croshell as croshell_func
10
-
10
+ from machineconfig.scripts.python.fire_jobs import fire as get_fire_jobs_app
11
+ from machineconfig.scripts.python.terminal import get_app as get_terminal_app
11
12
 
12
13
  def get_app():
13
14
  import typer
14
- app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True)
15
+ app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True, add_help_option=False, add_completion=False)
15
16
  devops_app = get_devops_app()
16
17
  app.add_typer(devops_app, name="devops", help="[d] DevOps related commands", no_args_is_help=True)
17
18
  app.add_typer(devops_app, name="d", hidden=True) # short alias
@@ -24,21 +25,34 @@ def get_app():
24
25
  app.add_typer(sessions_app, name="sessions", help="[s] Session and layout management", no_args_is_help=True)
25
26
  app.add_typer(sessions_app, name="s", hidden=True) # short alias
26
27
 
27
- fire_jobs_app = get_fire_jobs_app()
28
- app.add_typer(fire_jobs_app, name="fire", help="[f] Fire and manage jobs", no_args_is_help=True)
29
- app.add_typer(fire_jobs_app, name="f", hidden=True) # short alias
30
28
 
31
29
  agents_app = get_agents_app()
32
30
  app.add_typer(agents_app, name="agents", help="[a] 🤖 AI Agents management commands", no_args_is_help=True)
33
31
  app.add_typer(agents_app, name="a", hidden=True) # short alias
34
32
 
35
- app.command("ftpx", no_args_is_help=True, help="[f] File transfer utility though SSH")(ftpx_func)
36
- app.command("f", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
37
- app.command("croshell", no_args_is_help=False, help="[cs] Cross-shell command execution")(croshell_func)
38
- app.command("cs", no_args_is_help=False, hidden=True)(croshell_func) # short alias
33
+ app.command(name="fire", help="[f] Fire and manage jobs", no_args_is_help=False)(get_fire_jobs_app)
34
+ app.command(name="f", hidden=True, no_args_is_help=False)(get_fire_jobs_app)
35
+ app.command("ftpx", no_args_is_help=True, help="[ff] File transfer utility though SSH")(ftpx_func)
36
+ app.command("ff", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
37
+ app.command("croshell", no_args_is_help=False, help="[r] Cross-shell command execution")(croshell_func)
38
+ app.command("r", no_args_is_help=False, hidden=True)(croshell_func) # short alias
39
+
40
+ utils_app = get_utils_app()
41
+ app.add_typer(utils_app, name="utils", help="[u] Utility commands", no_args_is_help=True)
42
+ app.add_typer(utils_app, name="u", hidden=True) # short alias
43
+
44
+
45
+ terminal_app = get_terminal_app()
46
+ app.add_typer(terminal_app, name="terminal", help="[t] Terminal management commands", no_args_is_help=True)
47
+ app.add_typer(terminal_app, name="t", hidden=True) # short alias
39
48
 
40
49
  return app
41
50
 
51
+
42
52
  def main():
43
53
  app = get_app()
44
54
  app()
55
+
56
+
57
+ if __name__ == "__main__":
58
+ main()
@@ -0,0 +1,72 @@
1
+
2
+ import typer
3
+ from typing import Annotated
4
+
5
+
6
+ def machineconfig_search(
7
+ directory: Annotated[str, typer.Option(..., "--directory", "-d", help="The directory to search")] = ".",
8
+ ast: Annotated[bool, typer.Option(..., "--ast", "-a", help="The abstract syntax tree search/ tree sitter search of symbols")] = False,
9
+ symantic: Annotated[bool, typer.Option(..., "--symantic", "-s", help="The symantic search of symbols")] = False,
10
+ extension: Annotated[str, typer.Option(..., "--extension", "-e", help="File extension to filter by (e.g., .py, .js)")] = "",
11
+ file: Annotated[bool, typer.Option(..., "--file", "-f", help="File search using fzf")] = False,
12
+ no_dotfiles: Annotated[bool, typer.Option(..., "--no-dotfiles", "-D", help="Exclude dotfiles from search")] = False,
13
+ rga: Annotated[bool, typer.Option(..., "--rga", "-A", help="Use ripgrep-all for searching all (non text files) instead of ripgrep")] = False,
14
+ install_dependencies: Annotated[bool, typer.Option(..., "--install-req", "-p", help="Install required dependencies if missing")] = False
15
+ ):
16
+ """machineconfig search helper"""
17
+ if install_dependencies:
18
+ from machineconfig.utils.installer_utils.installer_cli import install_if_missing
19
+ install_if_missing("fzf")
20
+ install_if_missing("tv")
21
+ install_if_missing("bat")
22
+ install_if_missing("fd")
23
+ install_if_missing("rg") # ripgrep
24
+ install_if_missing("rga") # ripgrep-all
25
+ # install_if_missing("tree-sitter-cli")
26
+ return
27
+ if symantic:
28
+ script = ""
29
+ for an_ex in extension.split(","):
30
+ script = script + f"""\nparse *.{an_ex} """
31
+ from machineconfig.utils.code import run_shell_script
32
+ run_shell_script(script=script)
33
+ return
34
+ if ast:
35
+ from machineconfig.scripts.python.helpers.ast_search import get_repo_symbols
36
+ symbols = get_repo_symbols(directory)
37
+ from machineconfig.utils.options import choose_from_options
38
+ try:
39
+ res = choose_from_options(options=symbols, msg="Select a symbol to search for:", tv=True, multi=False)
40
+ from rich import print_json
41
+ import json
42
+ res_json = json.dumps(res, indent=4)
43
+ print_json(res_json)
44
+ return None
45
+ except Exception as e:
46
+ print(f"❌ Error during selection: {e}")
47
+ return None
48
+ if file:
49
+ script = """fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}' """
50
+ if no_dotfiles:
51
+ script = "fd | " + script
52
+ from machineconfig.utils.code import run_shell_script
53
+ run_shell_script(script=script)
54
+ return
55
+ from machineconfig.scripts.python.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
56
+ import platform
57
+ if platform.system() == "Linux" or platform.system() == "Darwin":
58
+ script = FZFG_LINUX_PATH.read_text(encoding="utf-8")
59
+ elif platform.system() == "Windows":
60
+ script = FZFG_WINDOWS_PATH.read_text(encoding="utf-8")
61
+ else:
62
+ raise RuntimeError("Unsupported platform")
63
+ if rga:
64
+ script = script.replace("rg ", "rga ").replace("ripgrep", "ripgrep-all")
65
+ from machineconfig.utils.code import exit_then_run_shell_script
66
+ exit_then_run_shell_script(script=script, strict=False)
67
+
68
+
69
+ def main():
70
+ app = typer.Typer(add_completion=False, no_args_is_help=True)
71
+ app.command(name="msearch", help=machineconfig_search.__doc__, short_help="machineconfig search helper", no_args_is_help=False)(machineconfig_search)
72
+ app()