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
@@ -0,0 +1,20 @@
1
+
2
+
3
+ * I have started a watch-exec server in my terminal and its working now.
4
+ * I have set it up to re-run the shell script `.ai/terminal/debug/command_runner.sh` automatically.
5
+ * A re-run is triggered upon any change of any python file in the repo, or, any change in the command_runner.sh script itself.
6
+ * The shell script itself runs the python file we are working on using uv.
7
+ * The script redirects the output from terminal to the file ./.ai* Run takes 50 ms only. So by the time you finish editing any python file or the command runner script, the new output is ready for you to read in that text file.
8
+ * Run takes 50 ms only. So by the time you finish editing any python file or the command runner script, the new output is ready for you to read in that text file.
9
+
10
+ # Why did I set this up?
11
+ * Because this makes it much faster for you to iterate because pulling the terminal and closing it every time is a bit slow.
12
+ * You no longer need the terminal.
13
+
14
+
15
+ # What should you do now?
16
+ Please iterate like this:
17
+ * Please use the terminal_output.txt as your main iteration driver (fix any problems you see there).
18
+ * Change `command_runner.sh` if you need to change which python file to run or how to run it.
19
+
20
+
@@ -7,7 +7,7 @@ ref: https://github.com/charmbracelet/crush
7
7
 
8
8
  from pathlib import Path
9
9
  import platform
10
- from machineconfig.scripts.python.ai.solutions._shared import get_generic_instructions_path
10
+ from machineconfig.scripts.python.ai.utils.shared import get_generic_instructions_path
11
11
 
12
12
 
13
13
 
@@ -1,6 +1,6 @@
1
1
  from pathlib import Path
2
2
 
3
- from machineconfig.scripts.python.ai.solutions._shared import get_generic_instructions_path
3
+ from machineconfig.scripts.python.ai.utils.shared import get_generic_instructions_path
4
4
 
5
5
 
6
6
  def build_configuration(repo_root: Path) -> None:
@@ -1,6 +1,6 @@
1
1
  from pathlib import Path
2
2
 
3
- from machineconfig.scripts.python.ai.solutions._shared import get_generic_instructions_path
3
+ from machineconfig.scripts.python.ai.utils.shared import get_generic_instructions_path
4
4
  from machineconfig.utils.source_of_truth import LIBRARY_ROOT
5
5
 
6
6
  def build_configuration(repo_root: Path) -> None:
@@ -1,4 +1,7 @@
1
1
  {
2
+ "general": {
3
+ "previewFeatures": true
4
+ },
2
5
  // Appearance
3
6
  "theme": "Default", // Could also be "GitHub", "Dracula", etc.
4
7
 
@@ -247,7 +247,7 @@ def create_repo_symlinks(repo_root: Path) -> None:
247
247
  symlink_path.symlink_to(repo_root, target_is_directory=True)
248
248
 
249
249
 
250
- def main(
250
+ def make_todo_files(
251
251
  pattern: Annotated[str, typer.Argument(help="Pattern or keyword to match files by")],
252
252
  repo: Annotated[str, typer.Argument(help="Repository path. Can be any directory within a git repository.")] = str(Path.cwd()),
253
253
  strategy: Annotated[Literal["name", "keywords"], typer.Option("-s", "--strategy", help="Strategy to filter files: 'name' for filename matching, 'keywords' for content matching")] = "name",
@@ -344,5 +344,5 @@ def create_symlink_command(num: Annotated[int, typer.Argument(help="Number of sy
344
344
  console.print(Panel(f"✅ SUCCESS | Created {num} symlinks to {repo_root} in ~/code_copies/", border_style="bold green", expand=False))
345
345
 
346
346
  if __name__ == "__main__":
347
- typer.run(main)
347
+ typer.run(make_todo_files)
348
348
  # typer.run(create_symlink_command)
@@ -40,21 +40,8 @@ def adjust_gitignore(repo_root: Path) -> None:
40
40
 
41
41
  dot_git_ignore_content = dot_git_ignore_path.read_text(encoding="utf-8")
42
42
  entries_to_add: list[str] = []
43
- required_entries: list[str] = [
44
- ".links",
45
- "notebooks",
46
- ".ai",
47
- "GEMINI.md",
48
- "CLAUDE.md",
49
- "CRUSH.md",
50
- ".cursor",
51
- ".clinerules",
52
- ".github/instructions",
53
- ".github/chatmodes",
54
- ".github/prompts",
55
- ]
56
-
57
- for entry in required_entries:
43
+ from machineconfig.utils.source_of_truth import EXCLUDE_DIRS
44
+ for entry in EXCLUDE_DIRS:
58
45
  if entry not in dot_git_ignore_content:
59
46
  entries_to_add.append(entry)
60
47
 
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  from pathlib import Path
3
+ from typing import Any
3
4
 
4
5
 
5
6
  def add_lint_and_type_check_task(repo_root: Path) -> None:
@@ -18,13 +19,20 @@ def add_lint_and_type_check_task(repo_root: Path) -> None:
18
19
  }
19
20
 
20
21
  if tasks_json_path.exists():
21
- with tasks_json_path.open("r") as f:
22
- tasks_config = json.load(f)
22
+ json_data = tasks_json_path.read_text(encoding="utf-8")
23
+ if not json_data.strip():
24
+ tasks_config: dict[str, Any] = {"version": "2.0.0", "tasks": []}
25
+ else:
26
+ tasks_config = json.loads(json_data)
27
+ assert isinstance(tasks_config, dict)
23
28
  if "tasks" not in tasks_config:
24
29
  tasks_config["tasks"] = []
25
- existing_labels = {task.get("label") for task in tasks_config.get("tasks", [])}
26
- if "lintAndTypeCheck" not in existing_labels:
27
- tasks_config["tasks"].append(task_to_add)
30
+
31
+ # Remove any existing entries with the same label to prevent duplicates
32
+ tasks_config["tasks"] = [
33
+ t for t in tasks_config["tasks"] if t.get("label") != task_to_add["label"]
34
+ ]
35
+ tasks_config["tasks"].append(task_to_add)
28
36
  else:
29
37
  tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
30
38
 
@@ -1,20 +1,67 @@
1
+ """Cloud management commands - lazy loading subcommands."""
1
2
 
2
3
  import typer
3
- from machineconfig.scripts.python.helpers_cloud.cloud_sync import main as sync_main
4
- from machineconfig.scripts.python.helpers_cloud.cloud_copy import main as copy_main
5
- from machineconfig.scripts.python.helpers_cloud.cloud_mount import mount as mount_main
4
+ from typing import Optional, Annotated
6
5
 
7
- def get_app():
8
- app = typer.Typer(add_completion=False, no_args_is_help=True)
9
6
 
10
- app.command(name="sync", no_args_is_help=True, help="""🔄 [s] Synchronize files/folders between local and cloud storage.""")(sync_main)
11
- app.command(name="s", no_args_is_help=True, hidden=True)(sync_main) # short alias
7
+ def sync(
8
+ source: Annotated[str, typer.Argument(help="source")],
9
+ target: Annotated[str, typer.Argument(help="target")],
10
+ transfers: Annotated[int, typer.Option("--transfers", "-t", help="Number of threads in syncing.")] = 10,
11
+ root: Annotated[str, typer.Option("--root", "-R", help="Remote root.")] = "myhome",
12
+ key: Annotated[Optional[str], typer.Option("--key", "-k", help="Key for encryption")] = None,
13
+ pwd: Annotated[Optional[str], typer.Option("--pwd", "-P", help="Password for encryption")] = None,
14
+ encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="Decrypt after receiving.")] = False,
15
+ zip_: Annotated[bool, typer.Option("--zip", "-z", help="unzip after receiving.")] = False,
16
+ bisync: Annotated[bool, typer.Option("--bisync", "-b", help="Bidirectional sync.")] = False,
17
+ delete: Annotated[bool, typer.Option("--delete", "-D", help="Delete files in remote that are not in local.")] = False,
18
+ verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
19
+ ) -> None:
20
+ """🔄 Synchronize files/folders between local and cloud storage."""
21
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_sync import main as sync_main
22
+ sync_main(source=source, target=target, transfers=transfers, root=root, key=key, pwd=pwd, encrypt=encrypt, zip_=zip_, bisync=bisync, delete=delete, verbose=verbose)
12
23
 
13
- app.command(name="copy", no_args_is_help=True, short_help="""📤 [c] Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
14
- app.command(name="c", no_args_is_help=True, hidden=True)(copy_main) # short alias
15
24
 
16
- app.command(name="mount", no_args_is_help=True, short_help="""🔗 [m] Mount cloud storage services like Google Drive, Dropbox, OneDrive, etc. as local drives.""")(mount_main)
17
- app.command(name="m", no_args_is_help=True, hidden=True)(mount_main) # short alias
25
+ def copy(
26
+ source: Annotated[str, typer.Argument(help="📂 file/folder path to be taken from here.")],
27
+ target: Annotated[str, typer.Argument(help="🎯 file/folder path to be be sent to here.")],
28
+ overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] = False,
29
+ share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] = False,
30
+ rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] = False,
31
+ root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] = None,
32
+ key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] = None,
33
+ pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] = None,
34
+ encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] = False,
35
+ zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] = False,
36
+ os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] = False,
37
+ config: Annotated[Optional[str], typer.Option("--config", "-c", help="⚙️ path to cloud.json file.")] = None,
38
+ ) -> None:
39
+ """📤 Upload or 📥 Download files/folders to/from cloud storage services."""
40
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_copy import main as copy_main
41
+ copy_main(source=source, target=target, overwrite=overwrite, share=share, rel2home=rel2home, root=root, key=key, pwd=pwd, encrypt=encrypt, zip_=zip_, os_specific=os_specific, config=config)
42
+
43
+
44
+ def mount(
45
+ cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
46
+ destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
47
+ network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
48
+ ) -> None:
49
+ """🔗 Mount cloud storage services as local drives."""
50
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import mount as mount_main
51
+ mount_main(cloud=cloud, destination=destination, network=network)
52
+
53
+
54
+ def get_app() -> typer.Typer:
55
+ app = typer.Typer(add_completion=False, no_args_is_help=True, help="☁️ Cloud management commands")
56
+
57
+ app.command(name="sync", no_args_is_help=True, short_help="🔄 [s] Synchronize files/folders between local and cloud storage.")(sync)
58
+ app.command(name="s", no_args_is_help=True, hidden=True)(sync)
59
+
60
+ app.command(name="copy", no_args_is_help=True, short_help="📤 [c] Upload or 📥 Download files/folders to/from cloud storage.")(copy)
61
+ app.command(name="c", no_args_is_help=True, hidden=True)(copy)
62
+
63
+ app.command(name="mount", no_args_is_help=True, short_help="🔗 [m] Mount cloud storage services as local drives.")(mount)
64
+ app.command(name="m", no_args_is_help=True, hidden=True)(mount)
18
65
 
19
66
  return app
20
67
 
@@ -1,172 +1,25 @@
1
1
  #!/usr/bin/env -S uv run --no-dev --project
2
2
 
3
- """
4
- croshell
5
- """
3
+ """croshell - Cross-shell command execution."""
6
4
 
7
5
  from typing import Annotated, Optional
8
- from machineconfig.scripts.python.helpers_croshell.crosh import code, get_read_data_pycode
9
- from machineconfig.utils.meta import lambda_to_python_script
10
6
  import typer
11
- from machineconfig.utils.path_extended import PathExtended
12
- from pathlib import Path
13
- from machineconfig.utils.accessories import randstr
14
- import json
15
- from machineconfig.utils.options import choose_from_options
16
- from rich.console import Console
17
- from rich.panel import Panel
18
-
19
-
20
- console = Console()
21
7
 
22
8
 
23
9
  def croshell(
24
- path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = "",
25
- python: Annotated[bool, typer.Option("--python", "-p", help="flag to use python over IPython.")] = False,
26
- profile: Annotated[Optional[str], typer.Option("--profile", "-P", help="ipython profile to use, defaults to default profile.")] = None,
10
+ path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
11
+ project_path: Annotated[Optional[str], typer.Option("--project", "-p", help="specify uv project to use")] = None,
12
+ uv_with: Annotated[Optional[str], typer.Option("--uv-with", "-w", help="specify uv with packages to use")] = None,
13
+ marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
27
14
  jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
28
15
  vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
29
- streamlit_viewer: Annotated[bool, typer.Option("--streamlit", "-s", help="view in streamlit app")] = False,
30
16
  visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
31
- marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
17
+ python: Annotated[bool, typer.Option("--python", "-P", help="flag to use python over IPython.")] = False,
18
+ profile: Annotated[Optional[str], typer.Option("--profile", "-r", help="ipython profile to use, defaults to default profile.")] = None,
32
19
  ) -> None:
33
- # ==================================================================================
34
- # flags processing
35
- interactivity = "-i"
36
- interpreter = "python" if python else "ipython"
37
- ipython_profile: Optional[str] = profile
38
- file_obj = PathExtended.cwd() # initialization value, could be modified according to args.
39
-
40
- if path == ".":
41
- text = "🔍 Searching for Python files..."
42
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
43
- options = [str(item) for item in PathExtended.cwd().search("*.py", r=True)]
44
- file_selected = choose_from_options(msg="Choose a python file to run", options=options, fzf=True, multi=False)
45
- assert isinstance(file_selected, str)
46
- program = PathExtended(file_selected).read_text(encoding="utf-8")
47
- text = f"📄 Selected file: {PathExtended(file_selected).name}"
48
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
49
-
50
- elif path != "" and path is not None:
51
- if streamlit_viewer:
52
- # text = "📊 STARTING STREAMLIT VIEWER"
53
- # console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
54
- # from machineconfig.scripts.python.viewer import run
55
- # py_file_path = run(data_path=args.read, data=None, get_figure=None)
56
- # final_program = f"""
57
- # #!/bin/bash
58
- # streamlit run {py_file_path}
59
- # """
60
- # PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
61
- print("Streamlit viewer is not yet implemented in this version.")
62
- return None
63
- file_obj = PathExtended(str(path).lstrip()).expanduser().absolute()
64
- program = lambda_to_python_script(lambda: get_read_data_pycode(path=str(file_obj)), in_global=True, import_module=False)
65
- text = f"📄 Reading data from: {file_obj.name}"
66
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
67
- else: # if nothing is specified, then run in interactive mode.
68
- # text = "⌨️ Entering interactive mode"
69
- # console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
70
- # from machineconfig.scripts.python.croshell import InteractiveShell
71
- # InteractiveShell().run()
72
- # return None
73
- program = ""
74
- preprogram = """
75
- #%%
76
- """
77
- def preprogram_func():
78
- from machineconfig.utils.files.headers import print_header, print_logo
79
- print_header()
80
- print_logo("CROCODILE")
81
- from pathlib import Path
82
- from machineconfig.utils.path_extended import PathExtended
83
- _ = Path, PathExtended # avoid unused import warnings
84
- import inspect, textwrap
85
- from types import FunctionType
86
- def get_body_simple_function_no_args(f: FunctionType):
87
- return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
88
- preprogram += get_body_simple_function_no_args(preprogram_func)
89
-
90
- pyfile = PathExtended.tmp().joinpath(f"tmp_scripts/python/croshell/{randstr()}/script.py")
91
- pyfile.parent.mkdir(parents=True, exist_ok=True)
92
-
93
- title = "Reading Data"
94
- def_code = lambda_to_python_script(lambda: code(path=str(pyfile), title=title), in_global=False, import_module=False)
95
- # print(def_code)
96
- python_program = preprogram + "\n\n" + def_code + program
97
- pyfile.write_text(python_program, encoding="utf-8")
98
- # ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
99
- ipython_profile = ipython_profile if ipython_profile is not None else "default"
100
- # ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
101
-
102
- # prepare notebook target path (avoid relying on locals())
103
- nb_target = pyfile.with_suffix(".ipynb")
104
- if jupyter:
105
- try:
106
- nb_path = pyfile.with_suffix(".ipynb")
107
- nb_content = {
108
- "cells": [
109
- {
110
- "cell_type": "code",
111
- "metadata": {"language": "python"},
112
- "source": [python_program],
113
- "outputs": [],
114
- "execution_count": None,
115
- }
116
- ],
117
- "metadata": {},
118
- "nbformat": 4,
119
- "nbformat_minor": 5,
120
- }
121
- nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
122
- nb_target = nb_path
123
- except Exception:
124
- # if writing fails, fall back to the default nb_target already set
125
- pass
126
- if visidata:
127
- if file_obj.suffix == ".json":
128
- fire_line = f"uv run --python 3.14 --with visidata vd {str(file_obj)}"
129
- else:
130
- fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
131
- elif marimo:
132
- if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
133
- else: requirements = """--python 3.14 --with "marimo,machineconfig[plot]>=6.57" """
134
- fire_line = f"""
135
- cd {str(pyfile.parent)}
136
- uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
137
- uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
138
- """
139
- elif jupyter:
140
- if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
141
- else: requirements = """--with "machineconfig[plot]>=6.57" """
142
- fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
143
- elif vscode:
144
- fire_line = f"""
145
- cd {str(pyfile.parent)}
146
- uv init --python 3.14
147
- uv venv
148
- uv add "machineconfig[plot]>=6.57"
149
- # code serve-web
150
- code --new-window {str(pyfile)}
151
- """
152
- else:
153
- if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
154
- else: profile = ""
155
- if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
156
- else: ve_line = """--python 3.14 --with "machineconfig[plot]>=6.57" """
157
- # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
158
- # --python 3.14
159
- fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
160
-
161
- import os
162
- program_path_maybe = os.environ.get("OP_PROGRAM_PATH", None)
163
- if program_path_maybe is not None:
164
- program_path_obj = PathExtended(program_path_maybe)
165
- program_path_obj.parent.mkdir(parents=True, exist_ok=True)
166
- program_path_obj.write_text(data=fire_line, encoding="utf-8")
167
- else:
168
- from machineconfig.utils.code import run_shell_script
169
- run_shell_script(fire_line, clean_env=False)
20
+ """Cross-shell command execution."""
21
+ from machineconfig.scripts.python.helpers.helpers_croshell.croshell_impl import croshell as impl
22
+ impl(path=path, project_path=project_path, uv_with=uv_with, marimo=marimo, jupyter=jupyter, vscode=vscode, visidata=visidata, python=python, profile=profile)
170
23
 
171
24
 
172
25
  def main() -> None:
@@ -174,9 +27,4 @@ def main() -> None:
174
27
 
175
28
 
176
29
  if __name__ == "__main__":
177
- # def func(flag: Annotated[bool, typer.Option("--flag/-nf", help="dummy flag for debugging", flag_value=False, is_flag=True)]=True):
178
- # console.print(f"flag: {flag}")
179
- # app = typer.Typer()
180
- # app.command()(func)
181
- # app()
182
30
  main()
@@ -1,46 +1,83 @@
1
- """devops with emojis"""
1
+ """devops with emojis - lazy loading subcommands."""
2
2
 
3
3
  import typer
4
- from typing import Optional, Annotated
5
-
6
- import machineconfig.scripts.python.helpers_devops.cli_repos as cli_repos
7
- import machineconfig.scripts.python.helpers_devops.cli_config as cli_config
8
- import machineconfig.scripts.python.helpers_devops.cli_self as cli_self
9
- import machineconfig.scripts.python.helpers_devops.cli_data as cli_data
10
- import machineconfig.scripts.python.helpers_devops.cli_nw as cli_network
4
+ from typing import Optional, Annotated, Literal
11
5
 
12
6
 
13
7
  def install(which: Annotated[Optional[str], typer.Argument(..., help="Comma-separated list of program names to install, or group name if --group flag is set.")] = None,
14
8
  group: Annotated[bool, typer.Option(..., "--group", "-g", help="Treat 'which' as a group name. A group is bundle of apps.")] = False,
15
- interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Interactive selection of programs to install.")] = False,
9
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of programs to install.")] = False,
16
10
  ) -> None:
17
- """📦 Install essential packages"""
18
- import machineconfig.utils.installer_utils.installer as installer_entry_point
19
- installer_entry_point.main(which=which, group=group, interactive=interactive)
20
-
21
-
22
- def get_app():
23
- app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_help_option=False,
24
- add_completion=False)
25
- _ = install
26
- app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
27
- app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
28
- app_repos = cli_repos.get_app()
29
- app.add_typer(app_repos, name="repos")
30
- app.add_typer(app_repos, name="r", hidden=True)
31
- app_config = cli_config.get_app()
32
- app.add_typer(app_config, name="config")
33
- app.add_typer(app_config, name="c", hidden=True)
34
- app_data = cli_data.get_app()
35
- app.add_typer(app_data, name="data")
36
- app.add_typer(app_data, name="d", hidden=True)
37
- app_self = cli_self.get_app()
38
- app.add_typer(app_self, name="self")
39
- app.add_typer(app_self, name="s", hidden=True)
40
- app_nw = cli_network.get_app()
41
- app.add_typer(app_nw, name="network")
42
- app.add_typer(app_nw, name="n", hidden=True)
43
- return app
11
+ """📦 Install packages"""
12
+ import machineconfig.utils.installer_utils.installer_cli as installer_entry_point
13
+ installer_entry_point.main_installer_cli(which=which, group=group, interactive=interactive)
14
+
15
+
16
+ def repos(ctx: typer.Context) -> None:
17
+ """📁 [r] Manage development repositories"""
18
+ import machineconfig.scripts.python.helpers.helpers_devops.cli_repos as cli_repos
19
+ cli_repos.get_app()(ctx.args, standalone_mode=False)
20
+
21
+
22
+ def config(ctx: typer.Context) -> None:
23
+ """⚙️ [c] Configuration management"""
24
+ import machineconfig.scripts.python.helpers.helpers_devops.cli_config as cli_config
25
+ cli_config.get_app()(ctx.args, standalone_mode=False)
26
+
27
+
28
+ def data(ctx: typer.Context) -> None:
29
+ """💾 [d] Data management"""
30
+ import machineconfig.scripts.python.helpers.helpers_devops.cli_data as cli_data
31
+ cli_data.get_app()(ctx.args, standalone_mode=False)
32
+
33
+
34
+ def self_cmd(ctx: typer.Context) -> None:
35
+ """🔧 [s] Self management"""
36
+ import machineconfig.scripts.python.helpers.helpers_devops.cli_self as cli_self
37
+ cli_self.get_app()(ctx.args, standalone_mode=False)
38
+
39
+
40
+ def network(ctx: typer.Context) -> None:
41
+ """🌐 [n] Network management"""
42
+ import machineconfig.scripts.python.helpers.helpers_devops.cli_nw as cli_network
43
+ cli_network.get_app()(ctx.args, standalone_mode=False)
44
+
45
+
46
+ def execute(
47
+ ctx: typer.Context,
48
+ name: Annotated[str, typer.Argument(help="Name of script to run, e.g., 'a' for a.py, or command to execute")] = "",
49
+ where: Annotated[Literal["all", "a", "private", "p", "public", "b", "library", "l", "dynamic", "d", "custom", "c"], typer.Option("--where", "-w", help="Where to look for the script")] = "all",
50
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of scripts to run")] = False,
51
+ command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
52
+ list_scripts: Annotated[bool, typer.Option(..., "--list", "-l", help="List available scripts in all locations")] = False,
53
+ ) -> None:
54
+ """🚀 Execute python/shell scripts from pre-defined directories or as command."""
55
+ import machineconfig.scripts.python.helpers.helpers_devops.run_script as run_py_script_module
56
+ run_py_script_module.run_py_script(ctx=ctx, name=name, where=where, interactive=interactive, command=command, list_scripts=list_scripts)
57
+
58
+
59
+ def get_app() -> typer.Typer:
60
+ cli_app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_help_option=True, add_completion=False)
61
+ ctx_settings: dict[str, object] = {"allow_extra_args": True, "allow_interspersed_args": True, "ignore_unknown_options": True, "help_option_names": []}
62
+
63
+ cli_app.command("install", no_args_is_help=True, help=install.__doc__, short_help="🛠️ [i] Install essential packages")(install)
64
+ cli_app.command("i", no_args_is_help=True, help=install.__doc__, hidden=True)(install)
65
+
66
+ cli_app.command("repos", help="📁 [r] Manage development repositories", context_settings=ctx_settings)(repos)
67
+ cli_app.command("r", hidden=True, context_settings=ctx_settings)(repos)
68
+ cli_app.command("config", help="🔩 [c] Configuration management", context_settings=ctx_settings)(config)
69
+ cli_app.command("c", hidden=True, context_settings=ctx_settings)(config)
70
+ cli_app.command("data", help="💾 [d] Data management", context_settings=ctx_settings)(data)
71
+ cli_app.command("d", hidden=True, context_settings=ctx_settings)(data)
72
+ cli_app.command("self", help="🔧 [s] Self management", context_settings=ctx_settings)(self_cmd)
73
+ cli_app.command("s", hidden=True, context_settings=ctx_settings)(self_cmd)
74
+ cli_app.command("network", help="🌐 [n] Network management", context_settings=ctx_settings)(network)
75
+ cli_app.command("n", hidden=True, context_settings=ctx_settings)(network)
76
+
77
+ cli_app.command("execute", no_args_is_help=True, short_help="🚀 [e] Execute python/shell scripts from pre-defined directories or as command")(execute)
78
+ cli_app.command("e", no_args_is_help=True, hidden=True)(execute)
79
+
80
+ return cli_app
44
81
 
45
82
 
46
83
  def main():
@@ -1,10 +1,20 @@
1
- """
2
- TUI for navigating through machineconfig command structure using Textual.
3
- """
1
+ #!/usr/bin/env -S uv run --script
2
+ # /// script
3
+ # requires-python = ">=3.13"
4
+ # dependencies = [
5
+ # "machineconfig>=8.51",
6
+ # "textual",
7
+ # ]
8
+ # ///
4
9
 
5
- from machineconfig.scripts.python.helpers_navigator import CommandNavigatorApp
10
+ """Textual TUI for navigating `machineconfig` command structure."""
11
+
12
+
13
+ def main() -> None:
14
+ from machineconfig.scripts.python.helpers.helpers_navigator.main_app import CommandNavigatorApp
15
+
16
+ CommandNavigatorApp().run()
6
17
 
7
18
 
8
19
  if __name__ == "__main__":
9
- app = CommandNavigatorApp()
10
- app.run()
20
+ main()