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
@@ -1,35 +1,31 @@
1
1
  """Cloud mount script"""
2
2
 
3
- from machineconfig.utils.options import choose_from_options
4
- from machineconfig.utils.io import read_ini
5
- from machineconfig.utils.path_extended import PathExtended
6
-
7
- import platform
8
- from typing import Optional, Annotated
9
3
  import typer
10
- from rich.console import Console
11
- from rich.panel import Panel
12
-
13
- console = Console()
14
-
15
-
16
- DEFAULT_MOUNT = "~/data/rclone"
4
+ from typing import Optional, Annotated
17
5
 
18
6
 
19
7
  def get_rclone_config():
8
+ from machineconfig.utils.io import read_ini
9
+ from pathlib import Path
10
+ import platform
20
11
  if platform.system() == "Windows":
21
- config = read_ini(PathExtended.home().joinpath("AppData/Roaming/rclone/rclone.conf"))
12
+ config = read_ini(Path.home().joinpath("AppData/Roaming/rclone/rclone.conf"))
22
13
  elif platform.system() in ["Linux", "Darwin"]:
23
- config = read_ini(PathExtended.home().joinpath(".config/rclone/rclone.conf"))
14
+ config = read_ini(Path.home().joinpath(".config/rclone/rclone.conf"))
24
15
  else:
25
16
  raise ValueError("unsupported platform")
26
17
  return config
27
18
 
28
19
 
29
20
  def get_mprocs_mount_txt(cloud: str, rclone_cmd: str, cloud_brand: str): # cloud_brand = config[cloud]["type"]
21
+ from machineconfig.utils.path_extended import PathExtended
22
+ from machineconfig.utils.accessories import randstr
23
+ import platform
24
+ DEFAULT_MOUNT = "~/data/rclone"
25
+
30
26
  header = f"{' ' + cloud + ' | ' + cloud_brand + ' '}".center(50, "=")
31
27
  if platform.system() == "Windows":
32
- sub_text_path = PathExtended.tmpfile(suffix=".ps1")
28
+ sub_text_path = PathExtended("~/tmp_results/tmp_files").expanduser().joinpath(f"{randstr()}.ps1")
33
29
  sub_text_path.parent.mkdir(parents=True, exist_ok=True)
34
30
  sub_text_path.write_text(
35
31
  f"""
@@ -57,6 +53,13 @@ def mount(
57
53
  destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
58
54
  network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
59
55
  ) -> None:
56
+ from machineconfig.utils.options import choose_from_options
57
+ from pathlib import Path
58
+ import platform
59
+ from rich.console import Console
60
+ from rich.panel import Panel
61
+ console = Console()
62
+ DEFAULT_MOUNT = "~/data/rclone"
60
63
 
61
64
  # draw header box dynamically
62
65
  title = "☁️ Cloud Mount Utility"
@@ -68,14 +71,15 @@ def mount(
68
71
  if type(res) is str:
69
72
  cloud = res
70
73
  else:
71
- raise ValueError("no cloud selected")
74
+ print(" Error: No cloud selected")
75
+ raise typer.Exit(code=1)
72
76
  print(f"🌩️ Selected cloud: {cloud}")
73
77
 
74
78
  if network is None:
75
79
  if destination is None:
76
- mount_loc = PathExtended(DEFAULT_MOUNT).expanduser().joinpath(cloud)
80
+ mount_loc = Path(DEFAULT_MOUNT).expanduser().joinpath(cloud)
77
81
  else:
78
- mount_loc = PathExtended(destination)
82
+ mount_loc = Path(destination)
79
83
 
80
84
  mount_info = f"📂 Mount location: {mount_loc}"
81
85
  console.print(Panel(mount_info, border_style="blue"))
@@ -95,13 +99,15 @@ def mount(
95
99
  console.print(Panel(f"{warning_line}\n{err_line}", title="Warning", border_style="yellow"))
96
100
  pass
97
101
  else:
98
- raise ValueError("unsupported platform")
102
+ print(" Error: Unsupported platform")
103
+ raise typer.Exit(code=1)
99
104
 
100
105
  elif network and platform.system() == "Windows":
101
106
  mount_loc = "X: --network-mode"
102
107
  print(f"🔌 Setting up network mount at {mount_loc}")
103
108
  else:
104
- raise ValueError("network mount only supported on windows")
109
+ print(" Error: Network mount only supported on Windows")
110
+ raise typer.Exit(code=1)
105
111
 
106
112
  mount_cmd = f"rclone mount {cloud}: {mount_loc} --vfs-cache-mode full --file-perms=0777"
107
113
  console.print(Panel(f"🚀 Preparing mount command:\n{mount_cmd}", border_style="blue"))
@@ -146,7 +152,8 @@ zellij run --in-place --cwd $HOME/data/rclone/{cloud} -- bash
146
152
  zellij action move-focus up
147
153
  """
148
154
  else:
149
- raise ValueError("unsupported platform")
155
+ print(" Error: Unsupported platform")
156
+ raise typer.Exit(code=1)
150
157
  # print(f"running command: \n{txt}")
151
158
  # PROGRAM_PATH.write_text(txt, encoding="utf-8")
152
159
  import subprocess
@@ -2,16 +2,9 @@
2
2
  TODO: use typer or typed-argument-parser to parse args
3
3
  """
4
4
 
5
- from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
6
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
7
- from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
8
5
 
9
6
  from typing import Annotated, Optional
10
7
  import typer
11
- from rich.console import Console
12
- from rich.panel import Panel
13
-
14
- console = Console()
15
8
 
16
9
 
17
10
  def main(
@@ -27,6 +20,14 @@ def main(
27
20
  delete: Annotated[bool, typer.Option("--delete", "-D", help="Delete files in remote that are not in local.")] = False,
28
21
  verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
29
22
  ) -> None:
23
+
24
+ from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
25
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
26
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import get_mprocs_mount_txt
27
+ from rich.console import Console
28
+ from rich.panel import Panel
29
+ console = Console()
30
+
30
31
  title = "☁️ Cloud Sync Utility"
31
32
  console.print(Panel(title, title_align="left", border_style="blue"))
32
33
 
@@ -76,5 +77,5 @@ def main(
76
77
  # import subprocess
77
78
  # subprocess.run(txt, shell=True, check=True)
78
79
  from machineconfig.utils.code import run_shell_script
79
- run_shell_script(txt)
80
+ run_shell_script(txt, display_script=True, clean_env=False)
80
81
 
@@ -1,4 +1,4 @@
1
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
1
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
2
2
  from machineconfig.utils.io import read_ini
3
3
  from machineconfig.utils.source_of_truth import DEFAULTS_PATH
4
4
  from machineconfig.utils.accessories import pprint
@@ -1,6 +1,6 @@
1
1
 
2
2
 
3
- def code(path: str, title: str):
3
+ def get_read_python_file_pycode(path: str, title: str):
4
4
  from pathlib import Path
5
5
  print("Reading code from path:", path)
6
6
  pycode = Path(path).read_text(encoding="utf-8")
@@ -20,9 +20,9 @@ def get_read_data_pycode(path: str):
20
20
  from rich.panel import Panel
21
21
  from rich.text import Text
22
22
  from rich.console import Console
23
- from machineconfig.utils.path_extended import PathExtended
23
+ from pathlib import Path
24
24
  console = Console()
25
- p = PathExtended(path).absolute()
25
+ p = Path(path).absolute()
26
26
  try:
27
27
  from machineconfig.utils.files.read import Read
28
28
  from machineconfig.utils.accessories import pprint
@@ -0,0 +1,225 @@
1
+ """Pure Python implementation for croshell command - no typer dependencies."""
2
+
3
+ from typing import Optional
4
+ from pathlib import Path
5
+
6
+
7
+ def croshell(
8
+ path: Optional[str],
9
+ project_path: Optional[str],
10
+ uv_with: Optional[str],
11
+ marimo: bool,
12
+ jupyter: bool,
13
+ vscode: bool,
14
+ visidata: bool,
15
+ python: bool,
16
+ profile: Optional[str],
17
+ ) -> None:
18
+ """Cross-shell command execution."""
19
+ interactivity = "-i"
20
+ interpreter = "python" if python else "ipython"
21
+ if uv_with is not None:
22
+ match interpreter:
23
+ case "ipython":
24
+ user_uv_with_line = f"--with {uv_with},ipython"
25
+ case "python":
26
+ user_uv_with_line = f"--with {uv_with}"
27
+ else:
28
+ match interpreter:
29
+ case "ipython":
30
+ user_uv_with_line = "--with ipython"
31
+ case "python":
32
+ user_uv_with_line = ""
33
+
34
+ if project_path is not None:
35
+ uv_project_line = f'--project {project_path}'
36
+ uv_python_line = ""
37
+ else:
38
+ uv_project_line = ""
39
+ uv_python_line = "--python 3.14"
40
+
41
+ from machineconfig.scripts.python.helpers.helpers_croshell.crosh import get_read_python_file_pycode, get_read_data_pycode
42
+ from machineconfig.utils.meta import lambda_to_python_script
43
+ from machineconfig.utils.accessories import randstr
44
+ from machineconfig.utils.ve import get_ve_path_and_ipython_profile
45
+ import json
46
+ from rich.console import Console
47
+ from rich.panel import Panel
48
+ console = Console()
49
+
50
+ ipython_profile: Optional[str] = profile
51
+ file_obj = Path.cwd()
52
+ if path is not None:
53
+ from machineconfig.utils.path_helper import get_choice_file
54
+ choice_file = get_choice_file(path=path, suffixes={".*"})
55
+ if project_path is None:
56
+ ve_path, _ = get_ve_path_and_ipython_profile(choice_file)
57
+ if ve_path is not None:
58
+ ve_path_obj = Path(ve_path)
59
+ uv_project_line = f'--project {ve_path_obj.parent}'
60
+ uv_python_line = ""
61
+ if choice_file.suffix == ".py":
62
+ program = choice_file.read_text(encoding="utf-8")
63
+ text = f"📄 Selected file: {choice_file.name}"
64
+ console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
65
+ else:
66
+ program = lambda_to_python_script(
67
+ lambda: get_read_data_pycode(path=str(choice_file)),
68
+ in_global=True, import_module=False
69
+ )
70
+ text = f"📄 Reading data from: {file_obj.name}"
71
+ console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
72
+ else:
73
+ program = ""
74
+
75
+ if Path.home().joinpath("code/machineconfig").exists() and uv_project_line == "":
76
+ uv_project_line = f'--project "{str(Path.home().joinpath("code/machineconfig"))}"'
77
+
78
+ preprogram = _build_preprogram()
79
+
80
+ pyfile = Path.home().joinpath(f"tmp_results/tmp_scripts/python/croshell/{randstr()}/script.py")
81
+ pyfile.parent.mkdir(parents=True, exist_ok=True)
82
+ title = "Reading Data"
83
+ def_code = lambda_to_python_script(
84
+ lambda: get_read_python_file_pycode(path=str(pyfile), title=title),
85
+ in_global=False, import_module=False
86
+ )
87
+ python_program = preprogram + "\n\n" + def_code + program
88
+ pyfile.write_text(python_program, encoding="utf-8")
89
+ ipython_profile = ipython_profile if ipython_profile is not None else "default"
90
+
91
+ nb_target = pyfile.with_suffix(".ipynb")
92
+ if jupyter:
93
+ try:
94
+ nb_path = pyfile.with_suffix(".ipynb")
95
+ nb_content = {
96
+ "cells": [
97
+ {
98
+ "cell_type": "code",
99
+ "metadata": {"language": "python"},
100
+ "source": [python_program],
101
+ "outputs": [],
102
+ "execution_count": None,
103
+ }
104
+ ],
105
+ "metadata": {},
106
+ "nbformat": 4,
107
+ "nbformat_minor": 5,
108
+ }
109
+ nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
110
+ nb_target = nb_path
111
+ except Exception:
112
+ pass
113
+
114
+ fire_line = _build_fire_line(
115
+ file_obj=file_obj,
116
+ pyfile=pyfile,
117
+ nb_target=nb_target,
118
+ visidata=visidata,
119
+ marimo=marimo,
120
+ jupyter=jupyter,
121
+ vscode=vscode,
122
+ interpreter=interpreter,
123
+ interactivity=interactivity,
124
+ ipython_profile=ipython_profile,
125
+ uv_python_line=uv_python_line,
126
+ uv_project_line=uv_project_line,
127
+ user_uv_with_line=user_uv_with_line,
128
+ uv_with=uv_with,
129
+ )
130
+
131
+ from machineconfig.utils.code import exit_then_run_shell_script
132
+ exit_then_run_shell_script(fire_line, strict=False)
133
+
134
+
135
+ def _build_preprogram() -> str:
136
+ """Build the preprogram code for croshell."""
137
+ import inspect
138
+ import textwrap
139
+ from types import FunctionType
140
+
141
+ def get_body_simple_function_no_args(f: FunctionType) -> str:
142
+ return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
143
+
144
+ preprogram = """
145
+ #%%
146
+ """
147
+
148
+ def preprogram_func() -> None:
149
+ try:
150
+ from machineconfig.utils.files.headers import print_header, print_logo
151
+ print_header()
152
+ print_logo("Machineconfig")
153
+ from machineconfig.utils.path_extended import PathExtended
154
+ _ = PathExtended
155
+ except ImportError:
156
+ print("machineconfig is not installed in the current environment.")
157
+ pass
158
+ from pathlib import Path
159
+ _ = Path
160
+
161
+ preprogram += get_body_simple_function_no_args(preprogram_func)
162
+ return preprogram
163
+
164
+
165
+ def _build_fire_line(
166
+ file_obj: Path,
167
+ pyfile: Path,
168
+ nb_target: Path,
169
+ visidata: bool,
170
+ marimo: bool,
171
+ jupyter: bool,
172
+ vscode: bool,
173
+ interpreter: str,
174
+ interactivity: str,
175
+ ipython_profile: str,
176
+ uv_python_line: str,
177
+ uv_project_line: str,
178
+ user_uv_with_line: str,
179
+ uv_with: Optional[str],
180
+ ) -> str:
181
+ """Build the fire line command for croshell."""
182
+ if visidata:
183
+ if file_obj.suffix == ".json":
184
+ fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata vd {str(file_obj)}"
185
+ else:
186
+ fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata,pyarrow vd {str(file_obj)}"
187
+ elif marimo:
188
+ if Path.home().joinpath("code/machineconfig").exists():
189
+ requirements = f"""{user_uv_with_line} {uv_project_line} --with marimo,sqlglot """
190
+ else:
191
+ requirements = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "marimo,sqlglot,cowsay,machineconfig[plot]>=8.51" """
192
+ fire_line = f"""
193
+ cd {str(pyfile.parent)}
194
+ uv run {uv_python_line} --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
195
+ uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
196
+ """
197
+ elif jupyter:
198
+ if Path.home().joinpath("code/machineconfig").exists():
199
+ requirements = f"""{user_uv_with_line} {uv_project_line} --with jupyterlab """
200
+ else:
201
+ requirements = f"""{user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.51" """
202
+ fire_line = f"uv run {requirements} {uv_project_line} jupyter-lab {str(nb_target)}"
203
+ elif vscode:
204
+ user_uv_add = f"uv add {uv_with}" if uv_with is not None else ""
205
+ fire_line = f"""
206
+ cd {str(pyfile.parent)}
207
+ uv init {uv_python_line}
208
+ uv venv
209
+ uv add "cowsay,machineconfig[plot]>=8.51"
210
+ uv add {user_uv_add}
211
+ # code serve-web
212
+ code --new-window {str(pyfile)}
213
+ """
214
+ else:
215
+ if interpreter == "ipython":
216
+ profile = f" --profile {ipython_profile} --no-banner"
217
+ else:
218
+ profile = ""
219
+ if Path.home().joinpath("code/machineconfig").exists():
220
+ ve_line = f"""{user_uv_with_line} {uv_project_line} """
221
+ else:
222
+ ve_line = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.51" """
223
+ fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
224
+
225
+ return fire_line
@@ -26,11 +26,11 @@
26
26
 
27
27
  # print(f"\n✅ Running tasks in {root}\n")
28
28
 
29
- # if args.report:
30
- # print("📊 Generating report...")
31
- # reports: list[Report] = [Report.from_path(read_task_from_dir(x).report_path) for x in PathExtended(root).search("*").filter(lambda path: path.joinpath("task.py").exists())]
29
+ # if args.report:
30
+ # print("📊 Generating report...")
31
+ # reports: list[Report] = [Report.from_path(read_task_from_dir(x).report_path) for x in PathExtended(root).glob("*")]
32
32
 
33
- # # Format as markdown table
33
+ # Format as markdown table
34
34
  # report_data = [r.__dict__ for r in reports]
35
35
  # if report_data:
36
36
  # # Get keys from first report
@@ -83,32 +83,32 @@ def main(
83
83
 
84
84
  md_file = report_dir.joinpath("slides.md")
85
85
  if not md_file.exists():
86
- res = report_dir.search("*.md")
86
+ res = list(report_dir.glob("*.md"))
87
87
  if len(res) == 1:
88
88
  md_file = res[0]
89
89
  else:
90
- raise FileNotFoundError(f"❌ slides.md not found in {report_dir}")
90
+ print(f"❌ Error: slides.md not found in {report_dir}")
91
+ raise typer.Exit(code=1)
91
92
 
92
93
  print("📂 Copying files to Slidev repository...")
93
- for item in report_dir.search():
94
- item.copy(folder=SLIDEV_REPO, overwrite=True)
94
+ for item in report_dir.glob("*"):
95
+ PathExtended(item).copy(folder=SLIDEV_REPO, overwrite=True)
95
96
  if md_file.name != "slides.md":
96
97
  SLIDEV_REPO.joinpath(md_file.name).with_name(name="slides.md", inplace=True, overwrite=True)
97
98
 
98
- import socket
99
-
100
- try:
101
- local_ip_v4 = socket.gethostbyname(socket.gethostname() + ".local")
102
- except Exception:
103
- print("⚠️ Warning: Could not get local_ip_v4. This might be due to running in a WSL instance.")
104
- local_ip_v4 = socket.gethostbyname(socket.gethostname())
99
+ import machineconfig.scripts.python.helpers.helpers_network.address as helper
100
+ res = helper.select_lan_ipv4(prefer_vpn=False)
101
+ if res is None:
102
+ print("❌ Error: Could not determine local LAN IPv4 address for presentation.")
103
+ raise typer.Exit(code=1)
104
+ local_ip_v4 = res
105
105
 
106
106
  print("🌐 Presentation will be served at:")
107
107
  print(f" - http://{platform.node()}:{port}")
108
108
  print(f" - http://localhost:{port}")
109
109
  print(f" - http://{local_ip_v4}:{port}\n")
110
110
 
111
- program = "npm run dev slides.md -- --remote"
111
+ program = "bun run dev slides.md -- --remote"
112
112
  # PROGRAM_PATH.write_text(program, encoding="utf-8")
113
113
  import subprocess
114
114
 
@@ -0,0 +1,149 @@
1
+ """Backup configuration types, parsing, and reading utilities."""
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TypedDict
5
+ from pathlib import Path
6
+ from rich.console import Console
7
+ from rich.panel import Panel
8
+ import tomllib
9
+
10
+ from machineconfig.utils.source_of_truth import LIBRARY_ROOT
11
+ from machineconfig.profile.create_links_export import REPO_LOOSE
12
+
13
+ LIBRARY_BACKUP_PATH = LIBRARY_ROOT.joinpath("profile/mapper_data.toml")
14
+ USER_BACKUP_PATH = Path.home().joinpath("dotfiles/machineconfig/mapper_data.toml")
15
+ DEFAULT_BACKUP_HEADER = "# User-defined backup configuration\n# Created by `devops data register`\n"
16
+ VALID_OS = {"any", "windows", "linux", "darwin"}
17
+
18
+
19
+ class BackupItem(TypedDict):
20
+ path_local: str
21
+ path_cloud: str | None
22
+ zip: bool
23
+ encrypt: bool
24
+ rel2home: bool
25
+ os: set[str]
26
+
27
+
28
+ BackupGroup = dict[str, BackupItem]
29
+ BackupConfig = dict[str, BackupGroup]
30
+
31
+
32
+ def normalize_os_name(value: str) -> str:
33
+ return value.strip().lower()
34
+
35
+
36
+ def _parse_os_field(os_field: object, item_name: str) -> set[str]:
37
+ if os_field is None:
38
+ raise ValueError(f"Backup entry '{item_name}' must define a non-empty 'os'.")
39
+ if isinstance(os_field, list):
40
+ raw_values = [str(item) for item in os_field]
41
+ elif isinstance(os_field, str):
42
+ raw_values = os_field.split(",")
43
+ else:
44
+ raise ValueError(f"Backup entry '{item_name}' has an invalid 'os' value: {os_field!r}.")
45
+ values: set[str] = set()
46
+ for raw in raw_values:
47
+ token = normalize_os_name(raw)
48
+ if not token:
49
+ continue
50
+ if token in {"any", "all", "*"}:
51
+ return {"any"}
52
+ if token not in VALID_OS:
53
+ raise ValueError(f"Backup entry '{item_name}' has an invalid 'os' value: {os_field!r}.")
54
+ values.add(token)
55
+ if not values:
56
+ raise ValueError(f"Backup entry '{item_name}' must define a non-empty 'os'.")
57
+ return values
58
+
59
+
60
+ def os_applies(os_values: set[str], system_name: str) -> bool:
61
+ return "any" in os_values or system_name in os_values
62
+
63
+
64
+ def _parse_bool(value: object, field: str, item_name: str) -> bool:
65
+ if isinstance(value, bool):
66
+ return value
67
+ raise ValueError(f"Backup entry '{item_name}' has an invalid '{field}' value.")
68
+
69
+
70
+ def _require_mapping(value: object, item_name: str) -> Mapping[str, object]:
71
+ if not isinstance(value, Mapping):
72
+ raise ValueError(f"Backup entry '{item_name}' must be a table.")
73
+ return value
74
+
75
+
76
+ def _require_str_field(raw: Mapping[str, object], field: str, item_name: str) -> str:
77
+ value = raw.get(field)
78
+ if not isinstance(value, str) or not value.strip():
79
+ raise ValueError(f"Backup entry '{item_name}' must define a non-empty '{field}'.")
80
+ return value.strip()
81
+
82
+
83
+ def _optional_str_field(raw: Mapping[str, object], field: str, item_name: str) -> str | None:
84
+ if field not in raw:
85
+ return None
86
+ value = raw.get(field)
87
+ if not isinstance(value, str):
88
+ raise ValueError(f"Backup entry '{item_name}' has a non-string '{field}'.")
89
+ token = value.strip()
90
+ if not token:
91
+ raise ValueError(f"Backup entry '{item_name}' has an empty '{field}'.")
92
+ return token
93
+
94
+
95
+ def _require_bool_field(raw: Mapping[str, object], field: str, item_name: str) -> bool:
96
+ if field not in raw:
97
+ raise ValueError(f"Backup entry '{item_name}' must define '{field}'.")
98
+ return _parse_bool(raw[field], field=field, item_name=item_name)
99
+
100
+
101
+ def _parse_backup_config(raw: Mapping[str, object]) -> BackupConfig:
102
+ config: BackupConfig = {}
103
+ for group_name, group_value in raw.items():
104
+ group = _require_mapping(group_value, group_name)
105
+ group_items: dict[str, BackupItem] = {}
106
+ for item_name, value in group.items():
107
+ item_key = f"{group_name}.{item_name}"
108
+ item = _require_mapping(value, item_key)
109
+ if "path" in item:
110
+ raise ValueError(f"Backup entry '{item_key}' uses 'path'; use 'path_local' instead.")
111
+ if "path_remote" in item:
112
+ raise ValueError(f"Backup entry '{item_key}' uses 'path_remote'; use 'path_cloud' instead.")
113
+ if "os_specific" in item:
114
+ raise ValueError(f"Backup entry '{item_key}' uses 'os_specific'; use 'os' only.")
115
+ group_items[item_name] = {
116
+ "path_local": _require_str_field(item, "path_local", item_key),
117
+ "path_cloud": _optional_str_field(item, "path_cloud", item_key),
118
+ "zip": _require_bool_field(item, "zip", item_key),
119
+ "encrypt": _require_bool_field(item, "encrypt", item_key),
120
+ "rel2home": _require_bool_field(item, "rel2home", item_key),
121
+ "os": _parse_os_field(item.get("os"), item_key),
122
+ }
123
+ if group_items:
124
+ config[group_name] = group_items
125
+ return config
126
+
127
+
128
+ def read_backup_config(repo: REPO_LOOSE) -> BackupConfig:
129
+ match repo:
130
+ case "library" | "l":
131
+ path = LIBRARY_BACKUP_PATH
132
+ raw_config: dict[str, object] = tomllib.loads(path.read_text(encoding="utf-8"))
133
+ bu_file = _parse_backup_config(raw_config)
134
+ case "user" | "u":
135
+ path = USER_BACKUP_PATH
136
+ raw_config = tomllib.loads(path.read_text(encoding="utf-8"))
137
+ bu_file = _parse_backup_config(raw_config)
138
+ case "all" | "a":
139
+ console = Console()
140
+ console.print(Panel(f"🧰 LOADING LIBRARY BACKUP CONFIGURATION\n📄 File: {LIBRARY_BACKUP_PATH}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
141
+ raw_library: dict[str, object] = tomllib.loads(LIBRARY_BACKUP_PATH.read_text(encoding="utf-8"))
142
+ bu_library = _parse_backup_config(raw_library)
143
+ console.print(Panel(f"🧰 LOADING USER BACKUP CONFIGURATION\n📄 File: {USER_BACKUP_PATH}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
144
+ raw_user: dict[str, object] = tomllib.loads(USER_BACKUP_PATH.read_text(encoding="utf-8"))
145
+ bu_user = _parse_backup_config(raw_user)
146
+ bu_file = {**bu_library, **bu_user}
147
+ case _:
148
+ raise ValueError(f"Invalid which_backup value: {repo!r}.")
149
+ return bu_file