machineconfig 6.82__py3-none-any.whl → 8.51__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/remote/run_cluster.py +1 -1
  3. machineconfig/cluster/remote/run_remote.py +1 -1
  4. machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
  5. machineconfig/cluster/sessions_managers/wt_local.py +17 -222
  6. machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
  7. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  8. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  9. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  10. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  11. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  12. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  13. machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
  14. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  15. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  16. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  17. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  18. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  19. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  20. machineconfig/jobs/installer/installer_data.json +1500 -310
  21. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  22. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  23. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  24. machineconfig/jobs/installer/package_groups.py +62 -91
  25. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  26. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
  27. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
  28. machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
  29. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
  30. machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
  31. machineconfig/jobs/installer/python_scripts/hx.py +214 -0
  32. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
  33. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
  34. machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
  35. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
  36. machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
  37. machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
  38. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
  39. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  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 +428 -0
  43. machineconfig/logger.py +1 -2
  44. machineconfig/profile/create_helper.py +56 -18
  45. machineconfig/profile/create_links.py +79 -21
  46. machineconfig/profile/create_links_export.py +87 -36
  47. machineconfig/profile/create_shell_profile.py +92 -127
  48. machineconfig/profile/mapper_data.toml +45 -0
  49. machineconfig/profile/mapper_dotfiles.toml +249 -0
  50. machineconfig/scripts/__init__.py +0 -4
  51. machineconfig/scripts/linux/wrap_mcfg +46 -0
  52. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  53. machineconfig/scripts/python/agents.py +85 -165
  54. machineconfig/scripts/python/ai/initai.py +4 -2
  55. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  56. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  57. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  58. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  59. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  60. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  61. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  62. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  63. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  64. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  65. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
  66. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
  67. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  68. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  69. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  70. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  71. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  72. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  73. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  74. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
  75. machineconfig/scripts/python/cloud.py +58 -11
  76. machineconfig/scripts/python/croshell.py +10 -162
  77. machineconfig/scripts/python/devops.py +73 -36
  78. machineconfig/scripts/python/devops_navigator.py +16 -6
  79. machineconfig/scripts/python/fire_jobs.py +8 -222
  80. machineconfig/scripts/python/ftpx.py +7 -200
  81. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  82. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  83. machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
  84. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  85. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  86. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  87. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  88. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  89. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  90. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  91. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
  92. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
  93. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  94. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  95. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  96. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  97. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  98. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  99. machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
  100. machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
  101. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
  102. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
  103. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
  104. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
  106. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  107. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  108. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
  109. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  110. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  111. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  112. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  113. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
  114. machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
  115. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  116. machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
  117. machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
  118. machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
  119. machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
  120. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  121. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
  122. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  123. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
  124. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  125. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  126. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  127. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
  128. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
  129. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  130. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  131. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
  132. machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
  133. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  134. machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
  135. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  136. machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  137. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  138. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  139. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  140. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  141. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  142. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  143. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  144. machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
  145. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  146. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  147. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
  148. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
  149. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  150. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  151. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  152. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  153. machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
  154. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  155. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  156. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
  157. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
  158. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
  159. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
  160. machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
  161. machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
  162. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  163. machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
  164. machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
  165. machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
  166. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  167. machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
  168. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  169. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  170. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
  171. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  172. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  173. machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
  174. machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
  175. machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
  176. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  177. machineconfig/scripts/python/mcfg_entry.py +143 -0
  178. machineconfig/scripts/python/msearch.py +26 -0
  179. machineconfig/scripts/python/sessions.py +69 -135
  180. machineconfig/scripts/python/terminal.py +58 -0
  181. machineconfig/scripts/python/utils.py +115 -38
  182. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  183. machineconfig/settings/atuin/config.toml +294 -0
  184. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  185. machineconfig/settings/broot/conf.toml +1 -1
  186. machineconfig/settings/helix/config.toml +16 -0
  187. machineconfig/settings/helix/languages.toml +13 -4
  188. machineconfig/settings/helix/yazi-picker.sh +12 -0
  189. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  190. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  191. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  192. machineconfig/settings/lf/windows/lfrc +14 -16
  193. machineconfig/settings/linters/.ruff.toml +2 -1
  194. machineconfig/settings/marimo/marimo.toml +1 -1
  195. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  196. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  197. machineconfig/settings/shells/bash/init.sh +47 -12
  198. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  199. machineconfig/settings/shells/nushell/config.nu +25 -33
  200. machineconfig/settings/shells/nushell/env.nu +21 -8
  201. machineconfig/settings/shells/nushell/init.nu +138 -0
  202. machineconfig/settings/shells/pwsh/init.ps1 +111 -17
  203. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  204. machineconfig/settings/shells/starship/starship.toml +16 -0
  205. machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
  206. machineconfig/settings/shells/wt/settings.json +27 -18
  207. machineconfig/settings/shells/zsh/init.sh +42 -23
  208. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  209. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  210. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  211. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  212. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  213. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  214. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  215. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  216. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  217. machineconfig/settings/television/cable_unix/env.toml +17 -0
  218. machineconfig/settings/television/cable_unix/files.toml +11 -0
  219. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  220. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  221. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  222. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  223. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  224. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  225. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  226. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  227. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  228. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  229. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  230. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  231. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  232. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  233. machineconfig/settings/television/cable_unix/text.toml +17 -0
  234. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  235. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  236. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  237. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  238. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  239. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  240. machineconfig/settings/television/cable_windows/env.toml +17 -0
  241. machineconfig/settings/television/cable_windows/files.toml +14 -0
  242. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  243. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  244. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  245. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  246. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  247. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  248. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  249. machineconfig/settings/television/cable_windows/text.toml +17 -0
  250. machineconfig/settings/tv/config.toml +234 -0
  251. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  252. machineconfig/settings/wsl/.wslconfig +5 -30
  253. machineconfig/settings/wt/__init__.py +0 -0
  254. machineconfig/settings/yazi/init.lua +61 -0
  255. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  256. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  257. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  258. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  259. machineconfig/settings/yazi/theme.toml +4 -0
  260. machineconfig/settings/yazi/yazi_linux.toml +94 -0
  261. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  262. machineconfig/settings/zellij/layouts/st.kdl +40 -9
  263. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  264. machineconfig/setup_linux/__init__.py +2 -2
  265. machineconfig/setup_linux/apps_desktop.sh +8 -27
  266. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
  267. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
  268. machineconfig/setup_mac/__init__.py +1 -4
  269. machineconfig/setup_mac/apps_gui.sh +248 -0
  270. machineconfig/setup_windows/__init__.py +2 -5
  271. machineconfig/setup_windows/uv.ps1 +8 -1
  272. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
  273. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
  274. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  275. machineconfig/type_hinting/sql/__init__.py +1 -0
  276. machineconfig/type_hinting/sql/base.py +216 -0
  277. machineconfig/type_hinting/sql/core_schema.py +64 -0
  278. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  279. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  280. machineconfig/type_hinting/typedict/__init__.py +1 -0
  281. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  282. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  283. machineconfig/type_hinting/typedict/generators.py +231 -0
  284. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  285. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  286. machineconfig/utils/accessories.py +31 -4
  287. machineconfig/utils/code.py +163 -51
  288. machineconfig/utils/files/ascii_art.py +11 -15
  289. machineconfig/utils/files/headers.py +6 -7
  290. machineconfig/utils/files/read.py +8 -1
  291. machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
  292. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  293. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  294. machineconfig/utils/installer_utils/installer_class.py +53 -102
  295. machineconfig/utils/installer_utils/installer_cli.py +161 -0
  296. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  297. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
  298. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
  299. machineconfig/utils/io.py +94 -9
  300. machineconfig/utils/links.py +56 -38
  301. machineconfig/utils/meta.py +38 -21
  302. machineconfig/utils/options.py +81 -23
  303. machineconfig/utils/options_utils/__init__.py +0 -0
  304. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  305. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  306. machineconfig/utils/options_utils/tv_options.py +37 -0
  307. machineconfig/utils/path_extended.py +52 -102
  308. machineconfig/utils/path_helper.py +76 -23
  309. machineconfig/utils/procs.py +1 -1
  310. machineconfig/utils/scheduler.py +26 -53
  311. machineconfig/utils/scheduling.py +0 -2
  312. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  313. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  314. machineconfig/utils/source_of_truth.py +6 -1
  315. machineconfig/utils/ssh.py +216 -419
  316. machineconfig/utils/ssh_utils/abc.py +5 -0
  317. machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
  318. machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
  319. machineconfig/utils/ssh_utils/utils.py +158 -0
  320. machineconfig/utils/ssh_utils/wsl.py +147 -0
  321. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  322. machineconfig/utils/terminal.py +1 -0
  323. machineconfig/utils/upgrade_packages.py +107 -35
  324. machineconfig/utils/ve.py +12 -4
  325. machineconfig-8.51.dist-info/METADATA +140 -0
  326. machineconfig-8.51.dist-info/RECORD +543 -0
  327. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
  328. machineconfig/jobs/installer/check_installations.py +0 -248
  329. machineconfig/jobs/installer/custom/hx.py +0 -140
  330. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  331. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  332. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  333. machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
  334. machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
  335. machineconfig/profile/backup.toml +0 -49
  336. machineconfig/profile/mapper.toml +0 -256
  337. machineconfig/scripts/linux/fzf2g +0 -21
  338. machineconfig/scripts/linux/fzfag +0 -17
  339. machineconfig/scripts/linux/fzffg +0 -25
  340. machineconfig/scripts/linux/fzfrga +0 -21
  341. machineconfig/scripts/linux/mcfgs +0 -38
  342. machineconfig/scripts/linux/other/share_smb +0 -1
  343. machineconfig/scripts/linux/other/switch_ip +0 -20
  344. machineconfig/scripts/linux/skrg +0 -4
  345. machineconfig/scripts/linux/warp-cli.sh +0 -122
  346. machineconfig/scripts/linux/z_ls +0 -104
  347. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  348. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
  349. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
  350. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  351. machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
  352. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
  353. machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
  354. machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
  355. machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
  356. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  357. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  358. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  359. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  360. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  361. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  362. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  363. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  364. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  365. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
  366. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  367. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
  368. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  369. machineconfig/scripts/python/mcfg.py +0 -48
  370. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  371. machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
  372. machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
  373. machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
  374. machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
  375. machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
  376. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  377. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  378. machineconfig/scripts/windows/fzfrga.bat +0 -20
  379. machineconfig/scripts/windows/mcfgs.ps1 +0 -17
  380. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  381. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  382. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  383. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  384. machineconfig/settings/yazi/yazi.toml +0 -4
  385. machineconfig/setup_linux/apps.sh +0 -66
  386. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  387. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  388. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  389. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  390. machineconfig/setup_mac/apps.sh +0 -73
  391. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  392. machineconfig/setup_windows/apps.ps1 +0 -62
  393. machineconfig/setup_windows/others/obs.ps1 +0 -4
  394. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  395. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  396. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  397. machineconfig/utils/installer_utils/installer.py +0 -225
  398. machineconfig/utils/tst.py +0 -20
  399. machineconfig-6.82.dist-info/METADATA +0 -82
  400. machineconfig-6.82.dist-info/RECORD +0 -441
  401. machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
  402. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  403. machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
  404. machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  405. machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  406. machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  407. machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  408. machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  409. machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  410. machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  411. machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  412. machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  413. machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  414. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
  415. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  416. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
  417. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  418. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  419. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  420. machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  421. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  422. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  423. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  424. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  425. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  426. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  427. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  428. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  429. machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
  430. machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  431. machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
  432. machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
  433. machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  434. machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  435. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
  437. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  438. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  439. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
  440. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
  441. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
  442. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  443. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
  444. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  445. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  446. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  447. /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
  448. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
  449. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  450. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  451. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  452. /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
  453. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  454. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  455. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
  456. /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
  457. /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
  458. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  459. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  460. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
  461. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
@@ -5,11 +5,10 @@ from typing import Optional
5
5
  import tomllib
6
6
  from pathlib import Path
7
7
  from machineconfig.utils.accessories import randstr
8
- from machineconfig.utils.path_extended import PathExtended
9
8
  from machineconfig.utils.options import choose_from_options
10
9
 
11
10
 
12
- def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, object]) -> tuple[Optional[str], PathExtended, dict[str, object]]:
11
+ def choose_function_or_lines(choice_file: Path, kwargs_dict: dict[str, object]) -> tuple[Optional[str], Path, dict[str, object]]:
13
12
  """
14
13
  Choose a function to run from a Python file or lines from a shell script.
15
14
 
@@ -22,9 +21,9 @@ def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, o
22
21
  choice_function: Optional[str] = None
23
22
 
24
23
  if choice_file.suffix == ".py":
25
- from machineconfig.scripts.python.helpers_fire.helpers4 import parse_pyfile
24
+ from machineconfig.scripts.python.helpers.helpers_fire_command.file_wrangler import parse_pyfile
26
25
  options, func_args = parse_pyfile(file_path=str(choice_file))
27
- choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
26
+ choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, tv=True, multi=False)
28
27
  assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
29
28
  choice_index = options.index(choice_function_tmp)
30
29
  choice_function = choice_function_tmp.split(" -- ")[0]
@@ -45,8 +44,8 @@ def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, o
45
44
  if line.startswith("echo"):
46
45
  continue
47
46
  options.append(line)
48
- chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
49
- choice_file = PathExtended.tmpfile(suffix=".sh")
47
+ chosen_lines = choose_from_options(msg="Choose a line to run", options=options, tv=True, multi=True)
48
+ choice_file = Path.home().joinpath(f"tmp_results/tmp_scripts/shell/{randstr(10)}.sh")
50
49
  choice_file.parent.mkdir(parents=True, exist_ok=True)
51
50
  choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
52
51
  choice_function = None
@@ -55,15 +54,13 @@ def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, o
55
54
 
56
55
 
57
56
  def get_command_streamlit(choice_file: Path, environment: str, repo_root: Optional[Path]) -> str:
58
- import socket
59
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
60
- try:
61
- s.connect(("8.8.8.8", 1))
62
- local_ip_v4 = s.getsockname()[0]
63
- except Exception:
64
- local_ip_v4 = socket.gethostbyname(socket.gethostname())
65
- finally:
66
- s.close()
57
+ # from machineconfig.scripts.python.helpers.helpers_utils.path import get_machine_specs
58
+ from machineconfig.scripts.python.helpers.helpers_network.address import select_lan_ipv4
59
+ res = select_lan_ipv4(prefer_vpn=False)
60
+ if res is None:
61
+ raise RuntimeError("Could not determine local LAN IPv4 address for streamlit app.")
62
+ local_ip_v4 = res
63
+
67
64
  computer_name = platform.node()
68
65
  port = 8501
69
66
  toml_path: Optional[Path] = None
@@ -82,7 +79,7 @@ def get_command_streamlit(choice_file: Path, environment: str, repo_root: Option
82
79
  port = config["server"]["port"]
83
80
  secrets_path = toml_path.with_name("secrets.toml")
84
81
  if repo_root is not None:
85
- secrets_template_path = Path.home().joinpath(f"dotfiles/creds/streamlit/{PathExtended(repo_root).name}/{choice_file.name}/secrets.toml")
82
+ secrets_template_path = Path.home().joinpath(f"dotfiles/creds/streamlit/{Path(repo_root).name}/{choice_file.name}/secrets.toml")
86
83
  if environment != "" and not secrets_path.exists() and secrets_template_path.exists():
87
84
  secrets_template = tomllib.loads(secrets_template_path.read_text(encoding="utf-8"))
88
85
  if environment == "ip":
@@ -101,6 +98,19 @@ def get_command_streamlit(choice_file: Path, environment: str, repo_root: Option
101
98
  except Exception as ex:
102
99
  print(ex)
103
100
  raise ex
101
+ from machineconfig.utils.installer_utils.installer_cli import install_if_missing
102
+ install_if_missing("qrterminal")
103
+ script = f"""
104
+ qrterminal "http://{local_ip_v4}:{port}"
105
+ echo "http://{local_ip_v4}:{port}"
106
+ qrterminal "http://{computer_name}:{port}"
107
+ echo "http://{computer_name}:{port}"
108
+ """
109
+ # from machineconfig.utils.code import run_shell_script
110
+ # run_shell_script(script)
111
+ from machineconfig.utils.code import print_code
112
+ print_code(code=script, lexer="shell", desc="Streamlit QR Codes and URLs")
113
+
104
114
  message = f"🚀 Streamlit app is running @:\n1- http://{local_ip_v4}:{port}\n2- http://{computer_name}:{port}\n3- http://localhost:{port}"
105
115
  from rich.panel import Panel
106
116
  from rich import print as rprint
@@ -0,0 +1,5 @@
1
+
2
+ from pathlib import Path
3
+
4
+ FZFG_LINUX_PATH = Path(__file__).parent.joinpath("scripts_linux", "fzfg")
5
+ FZFG_WINDOWS_PATH = Path(__file__).parent.joinpath("scripts_windows", "fzfg.ps1")
@@ -0,0 +1,248 @@
1
+ """Pure Python implementation for msearch command - no typer dependencies."""
2
+
3
+
4
+ from typing import Optional
5
+
6
+
7
+ def machineconfig_search(
8
+ path: str, ast: bool, symantic: bool, extension: str, file: bool, no_dotfiles: bool, rga: bool, edit: bool, install_dependencies: bool
9
+ ) -> None:
10
+ """Machineconfig search helper."""
11
+
12
+
13
+ if install_dependencies:
14
+ _install_dependencies()
15
+ return
16
+ if symantic:
17
+ _run_symantic_search(extension=extension)
18
+ return
19
+ if ast:
20
+ _run_ast_search(directory=path)
21
+ return
22
+ if file:
23
+ _run_file_search(no_dotfiles=no_dotfiles, edit=edit)
24
+ return
25
+
26
+ from pathlib import Path
27
+ import sys
28
+ import tempfile
29
+ import io
30
+ is_temp_file = False
31
+ if not sys.stdin.isatty() and Path(path).is_dir():
32
+ # Use UTF-8 encoding to handle emoji and Unicode characters on Windows
33
+ if sys.stdin.encoding != 'utf-8':
34
+ stdin_wrapper = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='replace')
35
+ content = stdin_wrapper.read()
36
+ else:
37
+ content = sys.stdin.read()
38
+ if content:
39
+ tf = tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', delete=False, prefix="msearch_stdin_")
40
+ tf.write(content)
41
+ tf.close()
42
+ path = tf.name
43
+ is_temp_file = True
44
+
45
+ if Path(path).absolute().resolve().is_file():
46
+ from machineconfig.utils.code import exit_then_run_shell_script
47
+ code = search_file_with_context(path=path, is_temp_file=is_temp_file, edit=edit)
48
+ exit_then_run_shell_script(script=code, strict=False)
49
+ return
50
+
51
+ _run_text_search(rga=rga, directory=path)
52
+
53
+
54
+ def _install_dependencies() -> None:
55
+ """Install required dependencies."""
56
+ from machineconfig.utils.installer_utils.installer_cli import install_if_missing
57
+
58
+ install_if_missing("fzf")
59
+ install_if_missing("tv")
60
+ install_if_missing("bat")
61
+ install_if_missing("fd")
62
+ install_if_missing("rg")
63
+ install_if_missing("rga")
64
+
65
+
66
+
67
+ def search_file_with_context(path: str, is_temp_file: bool, edit: bool) -> str:
68
+ import platform
69
+ import base64
70
+ from pathlib import Path
71
+ abs_path = str(Path(path).absolute())
72
+ if platform.system() == "Linux" or platform.system() == "Darwin":
73
+ if edit:
74
+ code = """
75
+ res=$(nl -ba -w1 -s' ' "$TEMP_FILE" | tv \
76
+ --preview-command "bat --color=always --style=numbers --highlight-line {split: :0} $TEMP_FILE" \
77
+ --preview-size 80 \
78
+ --preview-offset "{split: :0}" \
79
+ --source-output "{}")
80
+ if [ -n "$res" ]; then
81
+ line=$(echo "$res" | cut -d' ' -f1)
82
+ hx "$TEMP_FILE:$line"
83
+ fi
84
+ """
85
+ else:
86
+ code = """
87
+ nl -ba -w1 -s' ' "$TEMP_FILE" | tv \
88
+ --preview-command "bat --color=always --style=numbers --highlight-line {split: :0} $TEMP_FILE" \
89
+ --preview-size 80 \
90
+ --preview-offset "{split: :0}" \
91
+ --source-output "{}" \
92
+ | cut -d' ' -f2-
93
+ """
94
+ code = code.replace("$TEMP_FILE", abs_path)
95
+ if is_temp_file:
96
+ code += f"\nrm {path}"
97
+ elif platform.system() == "Windows":
98
+ # Windows: avoid piping INTO `tv` (it breaks TUI interactivity on Windows terminals).
99
+ # Use `tv --source-command` so stdin remains attached to the console.
100
+ # Note: using `cmd /C type` here has proven brittle due to quoting/command-line parsing
101
+ # differences; generate the numbered lines via a self-contained PowerShell command.
102
+ abs_path_escaped = abs_path.replace("'", "''")
103
+ # Use `-EncodedCommand` to avoid nested quoting issues across PowerShell/tv/cmd.
104
+ ps_script = (
105
+ "$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new(); "
106
+ "$i = 0; "
107
+ f"Get-Content -LiteralPath '{abs_path_escaped}' | ForEach-Object {{ $i = $i + 1; \"{{0}} {{1}}\" -f $i, $_ }}"
108
+ )
109
+ encoded = base64.b64encode(ps_script.encode("utf-16le")).decode("ascii")
110
+ source_cmd = f"powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand {encoded}"
111
+ source_cmd_ps_literal = source_cmd.replace("'", "''")
112
+ if edit:
113
+ code = f"""
114
+ $sourceCmd = '{source_cmd_ps_literal}'
115
+ $res = tv `
116
+ --source-command $sourceCmd `
117
+ --preview-command 'bat --color=always --style=numbers --highlight-line {{split: :0}} {abs_path}' `
118
+ --preview-size 80 `
119
+ --preview-offset "{{split: :0}}" `
120
+ --source-output "{{}}"
121
+ if ($res) {{
122
+ $line = $res.Split(' ')[0]
123
+ hx "{abs_path_escaped}:$line"
124
+ }}
125
+ """
126
+ else:
127
+ code = f"""
128
+ $sourceCmd = '{source_cmd_ps_literal}'
129
+ tv `
130
+ --source-command $sourceCmd `
131
+ --preview-command 'bat --color=always --style=numbers --highlight-line {{split: :0}} {abs_path}' `
132
+ --preview-size 80 `
133
+ --preview-offset "{{split: :0}}" `
134
+ --source-output "{{}}" | ForEach-Object {{ $_ -replace '^\\d+\\s+', '' }}
135
+ """
136
+ if is_temp_file:
137
+ code += f"\nRemove-Item '{abs_path_escaped}' -Force"
138
+ else:
139
+ raise RuntimeError(f"Unsupported platform, {platform.system()}")
140
+ return code
141
+
142
+ def _run_symantic_search(extension: str) -> None:
143
+ """Run symantic search."""
144
+ script = ""
145
+ for an_ex in extension.split(","):
146
+ script = script + f"""\nparse *.{an_ex} """
147
+ from machineconfig.utils.code import run_shell_script
148
+
149
+ run_shell_script(script=script, display_script=True, clean_env=False)
150
+
151
+
152
+ def _run_ast_search(directory: str) -> None:
153
+ """Run AST search."""
154
+ from machineconfig.scripts.python.helpers.helpers_search.ast_search import get_repo_symbols
155
+
156
+ symbols = get_repo_symbols(directory)
157
+ from machineconfig.utils.options import choose_from_options
158
+
159
+ try:
160
+ res = choose_from_options(options=symbols, msg="Select a symbol to search for:", tv=True, multi=False)
161
+ from rich import print_json
162
+ import json
163
+
164
+ res_json = json.dumps(res, indent=4)
165
+ print_json(res_json)
166
+ except Exception as e:
167
+ print(f"❌ Error during selection: {e}")
168
+
169
+
170
+ def _run_file_search(no_dotfiles: bool, edit: bool) -> None:
171
+ """Run file search."""
172
+ import platform
173
+
174
+ if not edit:
175
+ script = """fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}' """
176
+ if no_dotfiles:
177
+ script = "fd | " + script
178
+ from machineconfig.utils.code import run_shell_script
179
+
180
+ run_shell_script(script=script, display_script=True, clean_env=False)
181
+ return
182
+
183
+ if platform.system() == "Linux" or platform.system() == "Darwin":
184
+ script = """
185
+ selected=$({SOURCE_CMD} fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}')
186
+ if [ -n "$selected" ]; then
187
+ res=$(nl -ba -w1 -s' ' "$selected" | tv \
188
+ --preview-command "bat --color=always --style=numbers --highlight-line {split: :0} $selected" \
189
+ --preview-size 80 \
190
+ --preview-offset "{split: :0}" \
191
+ --source-output "{}")
192
+ if [ -n "$res" ]; then
193
+ line=$(echo "$res" | cut -d' ' -f1)
194
+ hx "$selected:$line"
195
+ fi
196
+ fi
197
+ """
198
+ source_cmd = "" if not no_dotfiles else "fd | "
199
+ script = script.replace("{SOURCE_CMD}", source_cmd)
200
+ elif platform.system() == "Windows":
201
+ script = r"""
202
+ $selected = {SOURCE_CMD} fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}'
203
+ if ($selected) {
204
+ $choicesPath = Join-Path $env:TEMP ("msearch_choices_" + [guid]::NewGuid().ToString() + ".txt")
205
+ $i = 0
206
+ Get-Content -LiteralPath "$selected" | ForEach-Object { $i = $i + 1; "{0} {1}" -f $i, $_ } | Set-Content -LiteralPath $choicesPath -Encoding utf8
207
+ $sourceCmd = 'cmd /C type "' + $choicesPath + '"'
208
+ $previewCmd = 'bat --color=always --style=numbers --highlight-line {split: :0} "' + $selected + '"'
209
+ $res = tv `
210
+ --source-command $sourceCmd `
211
+ --preview-command $previewCmd `
212
+ --preview-size 80 `
213
+ --preview-offset "{split: :0}" `
214
+ --source-output "{}"
215
+ Remove-Item -LiteralPath $choicesPath -Force -ErrorAction SilentlyContinue
216
+ if ($res) {
217
+ $line = $res.Split(' ')[0]
218
+ hx "$($selected):$line"
219
+ }
220
+ }
221
+ """
222
+ source_cmd = "" if not no_dotfiles else "fd | "
223
+ script = script.replace("{SOURCE_CMD}", source_cmd)
224
+ else:
225
+ raise RuntimeError("Unsupported platform")
226
+
227
+ from machineconfig.utils.code import run_shell_script
228
+
229
+ run_shell_script(script=script, display_script=True, clean_env=False)
230
+
231
+
232
+ def _run_text_search(rga: bool, directory: Optional[str]) -> None:
233
+ """Run text search using fzf with ripgrep."""
234
+ from machineconfig.scripts.python.helpers.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
235
+ import platform
236
+
237
+ if platform.system() == "Linux" or platform.system() == "Darwin":
238
+ script = FZFG_LINUX_PATH.read_text(encoding="utf-8")
239
+ elif platform.system() == "Windows":
240
+ script = FZFG_WINDOWS_PATH.read_text(encoding="utf-8")
241
+ else:
242
+ raise RuntimeError("Unsupported platform")
243
+ if rga:
244
+ script = script.replace("rg ", "rga ").replace("ripgrep", "ripgrep-all")
245
+ from machineconfig.utils.code import exit_then_run_shell_script
246
+ if directory:
247
+ script = "cd " + directory + "\n" + script
248
+ exit_then_run_shell_script(script=script, strict=False)
@@ -2,9 +2,11 @@
2
2
  # fzf and ggrep with switch keys for modes
3
3
  # https://github.com/junegunn/fzf/blob/master/ADVANCED.md#switching-between-ripgrep-mode-and-fzf-mode
4
4
 
5
+
6
+
5
7
  # Switch between Ripgrep launcher mode (CTRL-R) and fzf filtering mode (CTRL-F)
6
8
  RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case "
7
- INITIAL_QUERY="${*:-}"
9
+ INITIAL_QUERY=""
8
10
  IFS=: read -ra selected < <(
9
11
  FZF_DEFAULT_COMMAND="$RG_PREFIX $(printf %q "$INITIAL_QUERY")" \
10
12
  fzf --ansi \
@@ -13,11 +15,10 @@ IFS=: read -ra selected < <(
13
15
  --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \
14
16
  --bind "ctrl-f:unbind(change,ctrl-f)+change-prompt(2. fzf> )+enable-search+clear-query+rebind(ctrl-r)" \
15
17
  --bind "ctrl-r:unbind(ctrl-r)+change-prompt(1. ripgrep> )+disable-search+reload($RG_PREFIX {q} || true)+rebind(change,ctrl-f)" \
16
- --prompt '1. Ripgrep> ' \
18
+ --prompt '1. ripgrep> ' \
17
19
  --delimiter : \
18
- --header '╱ CTRL-R (Ripgrep mode) ╱ CTRL-F (fzf mode) ╱' \
20
+ --header '╱ CTRL-R (ripgrep mode) ╱ CTRL-F (fzf mode) ╱' \
19
21
  --preview 'bat --color=always {1} --highlight-line {2}' \
20
22
  --preview-window 'up,60%,border-bottom,+{2}+3/3,~3'
21
23
  )
22
- [ -n "${selected[0]}" ] && lvim "${selected[0]}" "+${selected[1]}
23
- "
24
+ [ -n "${selected[0]}" ] && hx "${selected[0]}:${selected[1]}:${selected[2]}"
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+
3
+ # This script allows searching through input (stdin) using 'tv' (television)
4
+ # while showing the context around the matching line in the preview window.
5
+ #
6
+ # Usage: command | ./search_with_context.sh
7
+ # Example: hyperfine --help | ./search_with_context.sh
8
+
9
+ # set -o pipefail
10
+
11
+
12
+ # Create a temporary file to store the stdin input
13
+ TEMP_FILE=$(mktemp)
14
+ # Capture stdin to the temp file
15
+ cat > "$TEMP_FILE"
16
+ # Ensure cleanup of the temp file on exit
17
+ trap "rm -f $TEMP_FILE" EXIT
18
+
19
+ # Run tv with the following configuration:
20
+ # 1. `nl -ba -w1 -s' '`: Add line numbers to the input (e.g., "1 line content").
21
+ # -ba: number all lines
22
+ # -w1: width of line numbers (minimal)
23
+ # -s' ': separator is a single space
24
+ #
25
+ # 2. `tv`: The television fuzzy finder.
26
+ #
27
+ # 3. `--preview-command`: Use `bat` to show the file content.
28
+ # - `--color=always`: Force color output for the preview.
29
+ # - `--highlight-line {split: :0}`: Highlight the line number extracted from the entry.
30
+ # `{split: :0}` splits the entry by space (default) and takes the first field (index 0), which is the line number.
31
+ # - `$TEMP_FILE`: The file to preview.
32
+ #
33
+ # 4. `--preview-offset`: Scroll the preview to the matching line.
34
+ # - `{split: :0}`: Use the extracted line number as the offset.
35
+ #
36
+ # 5. `--source-output`: Define what `tv` outputs when an entry is selected.
37
+ # - `{}`: Output the full entry (including the line number).
38
+ #
39
+ # 6. `cut -d' ' -f2-`: Post-process the output to remove the line number.
40
+ # - `-d' '`: Delimiter is space.
41
+ # - `-f2-`: Keep fields from 2 onwards (dropping the line number).
42
+
43
+ nl -ba -w1 -s' ' "$TEMP_FILE" | tv \
44
+ --preview-command "bat --color=always --highlight-line {split: :0} $TEMP_FILE" \
45
+ --preview-size 80 \
46
+ --preview-offset "{split: :0}" \
47
+ --source-output "{}" \
48
+ | cut -d' ' -f2-
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env pwsh
2
+ [CmdletBinding()]
3
+ param(
4
+ [Parameter(ValueFromRemainingArguments = $true)]
5
+ [string[]]$QueryTokens
6
+ )
7
+
8
+ if ($null -eq $QueryTokens) {
9
+ $QueryTokens = @()
10
+ }
11
+
12
+ $initialQuery = ''
13
+ $rgPrefix = 'rg --column --line-number --no-heading --color=always --smart-case '
14
+
15
+ $escapedDefault = if ($initialQuery.Length -gt 0) {
16
+ $rgPrefix + '"' + $initialQuery.Replace('"', '""') + '" || type nul'
17
+ } else {
18
+ 'type nul'
19
+ }
20
+
21
+ $previousDefault = $env:FZF_DEFAULT_COMMAND
22
+ $env:FZF_DEFAULT_COMMAND = $escapedDefault
23
+
24
+ $reloadBinding = "change:reload:$rgPrefix{q} || type nul"
25
+ $ctrlFBinding = 'ctrl-f:unbind(change,ctrl-f)+change-prompt(2. fzf> )+enable-search+clear-query+rebind(ctrl-r)'
26
+ $ctrlRBinding = "ctrl-r:unbind(ctrl-r)+change-prompt(1. ripgrep> )+disable-search+reload($rgPrefix{q} || type nul)+rebind(change,ctrl-f)"
27
+
28
+ try {
29
+ $selectionRaw = & fzf --ansi `
30
+ --color 'hl:-1:underline,hl+:-1:underline:reverse' `
31
+ --disabled `
32
+ --query $initialQuery `
33
+ --bind $reloadBinding `
34
+ --bind $ctrlFBinding `
35
+ --bind $ctrlRBinding `
36
+ --prompt '1. ripgrep> ' `
37
+ --delimiter ':' `
38
+ --header 'CTRL-R (ripgrep mode) | CTRL-F (fzf mode)' `
39
+ --preview 'bat --color=always {1} --highlight-line {2}' `
40
+ --preview-window 'up,60%,border-bottom,+{2}+3/3,~3'
41
+ }
42
+ finally {
43
+ if ($null -ne $previousDefault) {
44
+ $env:FZF_DEFAULT_COMMAND = $previousDefault
45
+ } else {
46
+ Remove-Item Env:FZF_DEFAULT_COMMAND -ErrorAction SilentlyContinue
47
+ }
48
+ }
49
+
50
+ if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($selectionRaw)) {
51
+ exit
52
+ }
53
+
54
+ if ($selectionRaw -match '^(?<path>.+?):(?<line>\d+):(?<column>\d+):') {
55
+ $path = $Matches['path']
56
+ $line = [int]$Matches['line']
57
+ $column = [int]$Matches['column']
58
+ & hx ("{0}:{1}:{2}" -f $path,$line,$column)
59
+ }
@@ -0,0 +1,20 @@
1
+ """
2
+ Helper modules for the devops navigator TUI application.
3
+ """
4
+
5
+ from machineconfig.scripts.python.helpers.helpers_navigator.data_models import CommandInfo, ArgumentInfo
6
+ from machineconfig.scripts.python.helpers.helpers_navigator.command_builder import CommandBuilderScreen
7
+ from machineconfig.scripts.python.helpers.helpers_navigator.command_tree import CommandTree
8
+ from machineconfig.scripts.python.helpers.helpers_navigator.command_detail import CommandDetail
9
+ from machineconfig.scripts.python.helpers.helpers_navigator.search_bar import SearchBar
10
+ from machineconfig.scripts.python.helpers.helpers_navigator.main_app import CommandNavigatorApp
11
+
12
+ __all__ = [
13
+ "CommandInfo",
14
+ "ArgumentInfo",
15
+ "CommandBuilderScreen",
16
+ "CommandTree",
17
+ "CommandDetail",
18
+ "SearchBar",
19
+ "CommandNavigatorApp",
20
+ ]