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,168 @@
1
+
2
+
3
+ """run python/shell scripts from pre-defined directorys, or, run command/file in the machineconfig environment
4
+
5
+ Recursively Searched Predefined Directories:
6
+
7
+
8
+ * 'private' : $HOME/dotfiles/scripts
9
+
10
+ * 'public' : $HOME/.config/machineconfig/scripts
11
+
12
+ * 'library' : $MACHINECONFIG_LIBRARY_ROOT/jobs/scripts
13
+
14
+ * 'dynamic' : fetched from GitHub repository on the fly (relies on latest commit, rather than the version currently installed)
15
+
16
+ """
17
+
18
+
19
+ import typer
20
+ from typing import Annotated, Optional, Literal
21
+
22
+
23
+
24
+ def run_py_script(name: Annotated[str, typer.Argument(help="Name of script to run, e.g., 'a' for a.py, or command to execute")] = "",
25
+ where: Annotated[Literal["all", "a", "private", "p", "public", "b", "library", "l", "dynamic", "d"], typer.Option("--where", "-w", help="Where to look for the script")] = "all",
26
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of scripts to run")] = False,
27
+ command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
28
+ # use_machineconfig_env: Annotated[bool, typer.Option(..., "--use-machineconfig-env/--no-use-machineconfig-env", "-m/-nm", help="Whether to use the machineconfig python environment")] = False
29
+ ) -> None:
30
+ if not interactive and not name:
31
+ typer.echo("❌ ERROR: You must provide a script name or use --interactive option to select a script.")
32
+ raise typer.Exit(code=1)
33
+
34
+ from pathlib import Path
35
+ if command:
36
+ exec(name)
37
+ return
38
+ if Path(name).is_file():
39
+ if name.endswith(".py"):
40
+ import machineconfig
41
+ import subprocess
42
+ import sys
43
+ subprocess.run([sys.executable, name], cwd=machineconfig.__path__[0])
44
+ return
45
+ else:
46
+ raise RuntimeError(f"File '{name}' is not a python (.py) file.")
47
+
48
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT, LIBRARY_ROOT
49
+ private_root = Path.home().joinpath("dotfiles/scripts") # local directory
50
+ public_root = CONFIG_ROOT.joinpath("scripts") # local machineconfig directory
51
+ library_root = LIBRARY_ROOT.joinpath("jobs", "scripts")
52
+
53
+ roots: list[Path] = []
54
+ match where:
55
+ case "all" | "a":
56
+ roots = [private_root, public_root, library_root]
57
+ case "private" | "p":
58
+ roots = [private_root]
59
+ case "public" | "b":
60
+ roots = [public_root]
61
+ case "library" | "l":
62
+ roots = [library_root]
63
+ case "dynamic" | "d":
64
+ roots = []
65
+
66
+ suffixes: list[str]
67
+ import platform
68
+ if platform.system() == "Windows":
69
+ suffixes = [".py", ".bat", ".cmd", ".ps1"]
70
+ elif platform.system() == "Darwin" or platform.system() == "Linux":
71
+ suffixes = [".py", ".sh"]
72
+ else:
73
+ suffixes = [".py"]
74
+
75
+ # Finding target file
76
+ target_file: Optional[Path] = None
77
+ potential_matches: list[Path] = []
78
+ for a_root in roots:
79
+ for a_suffix in suffixes:
80
+ candidates = [a_root.joinpath(name), a_root.joinpath(f"{name}{a_suffix}")]
81
+ for result in candidates:
82
+ if result.exists() and result.is_file():
83
+ target_file = result
84
+ break
85
+ candidates = [a_file for a_file in a_root.rglob(f"*{name}{a_suffix}") if a_file.is_file()]
86
+ if name != "":
87
+ candidates += [a_file for a_file in a_root.rglob(f"*{name}*") if a_file.is_file()]
88
+ # print(candidates)
89
+ if len(candidates) == 1 and candidates[0].stem == name.split(".")[0]: # perfect match with name at least.
90
+ target_file = candidates[0]
91
+ else:
92
+ potential_matches += candidates
93
+ # print(target_file)
94
+
95
+ if target_file is None and where in ["all", "dynamic"] and not interactive:
96
+ # src/machineconfig/jobs/scripts/python_scripts/a.py
97
+ if "." in name:
98
+ resolved_names: list[str] = [name]
99
+ else:
100
+ resolved_names = [f"{name}{a_suffix}" for a_suffix in suffixes]
101
+ for a_resolved_name in resolved_names:
102
+ try:
103
+ url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/jobs/scripts_dynamic/{a_resolved_name}"""
104
+ print(f"Fetching temporary script from {url} ...")
105
+ import requests
106
+ response = requests.get(url)
107
+ if response.status_code != 200:
108
+ print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
109
+ raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
110
+ script_content = response.text
111
+ target_file = Path.home().joinpath("tmp_results", "tmp_scripts", "python", f"{name}.py")
112
+ target_file.parent.mkdir(parents=True, exist_ok=True)
113
+ target_file.write_text(script_content, encoding="utf-8")
114
+ except Exception as _e:
115
+ pass
116
+
117
+ if target_file is None:
118
+ print(f"❌ ERROR: Could not find script '{name}.py'. Checked {len(potential_matches)} candidate files, trying interactively:")
119
+ from machineconfig.utils.options import choose_from_options
120
+ options = ["/".join(p.parts[-3:]) for p in potential_matches]
121
+ chosen_file_part = choose_from_options(options, multi=False, msg="Select the script to run:", tv=True)
122
+ for an_option, a_path in zip(options, potential_matches):
123
+ if chosen_file_part == an_option:
124
+ target_file = a_path
125
+ break
126
+ assert target_file is not None, "No script selected."
127
+ target_file = Path(target_file)
128
+
129
+ print(f"✅ Found script at: {target_file}")
130
+ if target_file.suffix == ".py":
131
+ from machineconfig.utils.code import get_uv_command_executing_python_script, exit_then_run_shell_script
132
+ script_content = target_file.read_text(encoding="utf-8")
133
+ shell_script, _shell_script_path = get_uv_command_executing_python_script(python_script=script_content, uv_project_dir=None, uv_with=None, prepend_print=False)
134
+ exit_then_run_shell_script(script=shell_script)
135
+ else:
136
+ from machineconfig.utils.code import run_shell_script
137
+ run_shell_script(target_file.read_text(encoding="utf-8"))
138
+
139
+
140
+ def copy_script_to_local(name: Annotated[str, typer.Argument(help="Name of the temporary python script to copy, e.g., 'a' for a.py")],
141
+ alias: Annotated[Optional[str], typer.Option("--alias", "-a", help="Whether to create call it a different name locally")] = None
142
+ ) -> None:
143
+ """
144
+ Copy a temporary python script stored in machineconfig/scripts/python/helpers/tmp_py_scripts to the local machine.
145
+ """
146
+ url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/scripts/python/helpers/tmp_py_scripts/{name}.py"""
147
+ import requests
148
+ response = requests.get(url)
149
+ if response.status_code != 200:
150
+ print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
151
+ raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
152
+ script_content = response.text
153
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
154
+ local_path = CONFIG_ROOT.joinpath(f"scripts_python/{alias or name}.py")
155
+ with open(local_path, "w") as f:
156
+ f.write(script_content)
157
+ print(f"✅ Script '{name}.py' has been copied to '{local_path}'.")
158
+
159
+
160
+ def get_app():
161
+ app = typer.Typer(
162
+ name="run-tmp-script",
163
+ help="Helper to run temporary python scripts stored in machineconfig/scripts/python/helpers/tmp_py_scripts",
164
+ no_args_is_help=True,
165
+ )
166
+ from machineconfig.jobs.scripts_dynamic import a
167
+ app.command()(a.main)
168
+ return app
@@ -45,7 +45,7 @@ schemes_list = [
45
45
 
46
46
  def main2():
47
47
  console.print(Panel("🎨 WezTerm Theme Selector", title_align="left", border_style="green"))
48
- option = choose_from_options(multi=False, options=schemes_list, header="Choose a theme for Wezterm", fzf=True, msg="Use arrow keys to navigate, Enter to select a theme")
48
+ option = choose_from_options(multi=False, options=schemes_list, header="Choose a theme for Wezterm", tv=True, msg="Use arrow keys to navigate, Enter to select a theme")
49
49
  set_theme(option)
50
50
  print(f"✅ Theme set to: {option}")
51
51
 
@@ -1,24 +1,7 @@
1
-
2
1
  from typing import Optional
3
2
  import os
4
- from machineconfig.utils.path_extended import PathExtended
5
-
6
-
7
- def search_for_files_of_interest(path_obj: PathExtended):
8
- if path_obj.joinpath(".venv").exists():
9
- path_objects = path_obj.search("*", not_in=[".venv"])
10
- files: list[PathExtended] = []
11
- for a_path_obj in path_objects:
12
- files += search_for_files_of_interest(path_obj=a_path_obj)
13
- return files
14
- if path_obj.is_file():
15
- return [path_obj]
16
- py_files = path_obj.search(pattern="*.py", not_in=["__init__.py"], r=True)
17
- ps_files = path_obj.search(pattern="*.ps1", r=True)
18
- sh_files = path_obj.search(pattern="*.sh", r=True)
19
- files = py_files + ps_files + sh_files
20
- return files
21
-
3
+ from pathlib import Path
4
+ import platform
22
5
 
23
6
 
24
7
  def parse_pyfile(file_path: str):
@@ -29,7 +12,7 @@ def parse_pyfile(file_path: str):
29
12
  func_args: list[list[args_spec]] = [[]] # this firt prepopulated dict is for the option 'RUN AS MAIN' which has no args
30
13
  import ast
31
14
 
32
- parsed_ast = ast.parse(PathExtended(file_path).read_text(encoding="utf-8"))
15
+ parsed_ast = ast.parse(Path(file_path).read_text(encoding="utf-8"))
33
16
  functions = [node for node in ast.walk(parsed_ast) if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef))]
34
17
  module__doc__ = ast.get_docstring(parsed_ast)
35
18
  main_option = f"RUN AS MAIN -- {module__doc__ if module__doc__ is not None else 'NoDocs'}"
@@ -110,3 +93,57 @@ def get_import_module_code(module_path: str):
110
93
  module_name = "IncorrectModuleName"
111
94
  # TODO: use py_compile to check if the statement is valid code to avoid syntax errors that can't be caught.
112
95
  return f"from {module_name} import *"
96
+
97
+
98
+ def wrap_import_in_try_except(import_line: str, pyfile: str, repo_root: Optional[str] = None) -> None:
99
+ try:
100
+ exec(import_line) # type: ignore
101
+ except (ImportError, ModuleNotFoundError) as ex:
102
+ print(fr"❌ Failed to import `{pyfile}` as a module: {ex} ")
103
+ print("⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
104
+ import sys
105
+ from pathlib import Path
106
+ sys.path.append(str(Path(pyfile).parent))
107
+ if repo_root is not None:
108
+ sys.path.append(repo_root)
109
+ exec(f"from {Path(pyfile).stem} import *")
110
+ print(fr"✅ Successfully imported `{pyfile}`")
111
+
112
+
113
+ def add_to_path(path_variable: str, directory: str) -> str:
114
+ """
115
+ Generate shell script to add directory to path_variable.
116
+ Handles both Windows (cmd) and Unix-like systems (bash/zsh).
117
+ Checks if variable exists before appending, otherwise creates it.
118
+ """
119
+ system = platform.system()
120
+
121
+ if system == "Windows":
122
+ script = f"""# Check if {path_variable} is defined
123
+ if (Test-Path env:{path_variable}) {{
124
+ Write-Host "Adding {directory} to existing {path_variable}"
125
+ $currentValue = [Environment]::GetEnvironmentVariable("{path_variable}", "User")
126
+ $newValue = "$currentValue;{directory}"
127
+ [Environment]::SetEnvironmentVariable("{path_variable}", $newValue, "User")
128
+ $env:{path_variable} = $newValue
129
+ }} else {{
130
+ Write-Host "Creating new {path_variable} variable"
131
+ [Environment]::SetEnvironmentVariable("{path_variable}", "{directory}", "User")
132
+ $env:{path_variable} = "{directory}"
133
+ }}
134
+ Write-Host "{path_variable} is now: $env:{path_variable}\""""
135
+ return script
136
+ else:
137
+ script = f"""#!/bin/bash
138
+ # Check if {path_variable} is defined and not empty
139
+ if [ -z "${{{path_variable}}}" ]; then
140
+ echo "Creating new {path_variable} variable"
141
+ export {path_variable}="{directory}"
142
+ else
143
+ echo "Adding {directory} to existing {path_variable}"
144
+ export {path_variable}="${{{path_variable}}}:{directory}"
145
+ fi
146
+ echo "{path_variable} is now: ${{{path_variable}}}"
147
+ """
148
+ return script
149
+
@@ -15,9 +15,11 @@ class FireJobArgs:
15
15
  choose_function: bool = False
16
16
  loop: bool = False
17
17
  jupyter: bool = False
18
+ marimo: bool = False
18
19
  submit_to_cloud: bool = False
19
20
  remote: bool = False
20
21
  module: bool = False
22
+ script: bool = False
21
23
  streamlit: bool = False
22
24
  environment: str = ""
23
25
  holdDirectory: bool = False
@@ -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_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_utils.path import get_machine_specs
58
+ from machineconfig.scripts.python.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")
@@ -13,11 +13,11 @@ IFS=: read -ra selected < <(
13
13
  --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \
14
14
  --bind "ctrl-f:unbind(change,ctrl-f)+change-prompt(2. fzf> )+enable-search+clear-query+rebind(ctrl-r)" \
15
15
  --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> ' \
16
+ --prompt '1. ripgrep> ' \
17
17
  --delimiter : \
18
- --header '╱ CTRL-R (Ripgrep mode) ╱ CTRL-F (fzf mode) ╱' \
18
+ --header '╱ CTRL-R (ripgrep mode) ╱ CTRL-F (fzf mode) ╱' \
19
19
  --preview 'bat --color=always {1} --highlight-line {2}' \
20
20
  --preview-window 'up,60%,border-bottom,+{2}+3/3,~3'
21
21
  )
22
- [ -n "${selected[0]}" ] && lvim "${selected[0]}" "+${selected[1]}
22
+ [ -n "${selected[0]}" ] && hx "${selected[0]}:${selected[1]}:${selected[2]}"
23
23
  "
@@ -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 = if ($QueryTokens.Count -gt 0) { [string]::Join(' ', $QueryTokens) } else { '' }
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_navigator.data_models import CommandInfo, ArgumentInfo
6
+ from machineconfig.scripts.python.helpers_navigator.command_builder import CommandBuilderScreen
7
+ from machineconfig.scripts.python.helpers_navigator.command_tree import CommandTree
8
+ from machineconfig.scripts.python.helpers_navigator.command_detail import CommandDetail
9
+ from machineconfig.scripts.python.helpers_navigator.search_bar import SearchBar
10
+ from machineconfig.scripts.python.helpers_navigator.main_app import CommandNavigatorApp
11
+
12
+ __all__ = [
13
+ "CommandInfo",
14
+ "ArgumentInfo",
15
+ "CommandBuilderScreen",
16
+ "CommandTree",
17
+ "CommandDetail",
18
+ "SearchBar",
19
+ "CommandNavigatorApp",
20
+ ]
@@ -7,7 +7,7 @@ from textual.app import ComposeResult
7
7
  from textual.containers import Horizontal, VerticalScroll
8
8
  from textual.widgets import Static, Input, Label, Button
9
9
  from textual.screen import ModalScreen
10
- from machineconfig.scripts.python.helper_navigator.data_models import CommandInfo, ArgumentInfo
10
+ from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo, ArgumentInfo
11
11
 
12
12
 
13
13
  class CommandBuilderScreen(ModalScreen[str]):
@@ -6,7 +6,7 @@ from typing import Optional
6
6
  from textual.widgets import Static
7
7
  from rich.panel import Panel
8
8
  from rich.text import Text
9
- from machineconfig.scripts.python.helper_navigator.data_models import CommandInfo
9
+ from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo
10
10
 
11
11
 
12
12
  class CommandDetail(Static):