machineconfig 5.15__py3-none-any.whl → 7.66__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (389) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +0 -1
  5. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  6. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  7. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  8. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  9. machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
  10. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  11. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  12. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  13. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  14. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  17. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  18. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  19. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
  20. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  21. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  22. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  23. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  24. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  25. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  26. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  30. machineconfig/jobs/{python → installer}/check_installations.py +2 -3
  31. machineconfig/jobs/installer/custom/boxes.py +61 -0
  32. machineconfig/jobs/installer/custom/hx.py +76 -19
  33. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  34. machineconfig/jobs/installer/custom_dev/brave.py +1 -7
  35. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  36. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  37. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  38. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
  39. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  40. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  41. machineconfig/jobs/installer/installer_data.json +1101 -115
  42. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  43. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  44. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  45. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  46. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  47. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  48. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  49. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  50. machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
  51. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  52. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  53. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  54. machineconfig/jobs/installer/package_groups.py +108 -180
  55. machineconfig/logger.py +0 -1
  56. machineconfig/profile/backup.toml +49 -0
  57. machineconfig/profile/bash_shell_profiles.md +11 -0
  58. machineconfig/profile/create_helper.py +74 -0
  59. machineconfig/profile/create_links.py +288 -0
  60. machineconfig/profile/create_links_export.py +100 -0
  61. machineconfig/profile/create_shell_profile.py +136 -0
  62. machineconfig/profile/mapper.toml +258 -0
  63. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  64. machineconfig/scripts/__init__.py +0 -4
  65. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  66. machineconfig/scripts/linux/wrap_mcfg +47 -0
  67. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  68. machineconfig/scripts/python/agents.py +92 -103
  69. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  70. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  71. machineconfig/scripts/python/ai/generate_files.py +307 -42
  72. machineconfig/scripts/python/ai/initai.py +3 -28
  73. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  74. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  75. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  76. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  77. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  78. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  79. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  80. machineconfig/scripts/python/cloud.py +29 -0
  81. machineconfig/scripts/python/croshell.py +111 -114
  82. machineconfig/scripts/python/define.py +31 -0
  83. machineconfig/scripts/python/devops.py +44 -103
  84. machineconfig/scripts/python/devops_navigator.py +10 -0
  85. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  86. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  87. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  88. machineconfig/scripts/python/explore.py +49 -0
  89. machineconfig/scripts/python/fire_jobs.py +115 -152
  90. machineconfig/scripts/python/ftpx.py +29 -24
  91. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  92. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  93. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  94. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  95. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  96. machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
  97. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  98. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  99. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  100. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  101. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  102. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
  103. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  104. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  106. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
  107. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  108. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  109. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  110. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  111. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  112. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  113. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  114. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  115. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
  116. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  117. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  118. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  119. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  120. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  121. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  122. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  123. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  124. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  125. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  126. machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
  127. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  128. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  129. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  130. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  131. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  132. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  133. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  134. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  135. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  136. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  137. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  138. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  139. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  140. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  141. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  142. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  143. machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
  144. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  145. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  146. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  147. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  148. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  149. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  150. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  151. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  152. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  153. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  154. machineconfig/scripts/python/interactive.py +64 -84
  155. machineconfig/scripts/python/machineconfig.py +63 -0
  156. machineconfig/scripts/python/msearch.py +21 -0
  157. machineconfig/scripts/python/nw/__init__.py +0 -0
  158. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
  159. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
  160. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  161. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
  162. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  163. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
  164. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  165. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  166. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  167. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  168. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
  169. machineconfig/scripts/python/sessions.py +64 -44
  170. machineconfig/scripts/python/terminal.py +127 -0
  171. machineconfig/scripts/python/utils.py +66 -0
  172. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  173. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  174. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  175. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  176. machineconfig/settings/broot/br.sh +0 -4
  177. machineconfig/settings/broot/conf.toml +1 -1
  178. machineconfig/settings/helix/config.toml +16 -0
  179. machineconfig/settings/helix/languages.toml +13 -4
  180. machineconfig/settings/helix/yazi-picker.sh +12 -0
  181. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  182. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  183. machineconfig/settings/lf/linux/lfrc +10 -12
  184. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  185. machineconfig/settings/lf/windows/lfrc +18 -38
  186. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  187. machineconfig/settings/linters/.ruff.toml +1 -1
  188. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  189. machineconfig/settings/marimo/marimo.toml +80 -0
  190. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  191. machineconfig/settings/pistol/pistol.conf +1 -1
  192. machineconfig/settings/shells/bash/init.sh +55 -31
  193. machineconfig/settings/shells/nushell/config.nu +1 -34
  194. machineconfig/settings/shells/nushell/init.nu +127 -0
  195. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  196. machineconfig/settings/shells/starship/starship.toml +16 -0
  197. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  198. machineconfig/settings/shells/wt/settings.json +32 -17
  199. machineconfig/settings/shells/zsh/init.sh +89 -0
  200. machineconfig/settings/svim/linux/init.toml +0 -4
  201. machineconfig/settings/svim/windows/init.toml +0 -3
  202. machineconfig/settings/yazi/init.lua +57 -0
  203. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  204. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  205. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  206. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  207. machineconfig/settings/yazi/yazi.toml +13 -0
  208. machineconfig/setup_linux/__init__.py +10 -0
  209. machineconfig/setup_linux/apps_desktop.sh +89 -0
  210. machineconfig/setup_linux/apps_gui.sh +64 -0
  211. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  212. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  213. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  214. machineconfig/setup_linux/uv.sh +15 -0
  215. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  216. machineconfig/setup_mac/__init__.py +16 -0
  217. machineconfig/setup_mac/apps_gui.sh +248 -0
  218. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  219. machineconfig/setup_mac/uv.sh +36 -0
  220. machineconfig/setup_windows/__init__.py +8 -0
  221. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  222. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  223. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  224. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  225. machineconfig/setup_windows/uv.ps1 +10 -0
  226. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  227. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  228. machineconfig/utils/accessories.py +7 -5
  229. machineconfig/utils/cloud/onedrive/README.md +139 -0
  230. machineconfig/utils/code.py +133 -106
  231. machineconfig/utils/files/art/fat_croco.txt +10 -0
  232. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  233. machineconfig/utils/files/art/happy_croco.txt +22 -0
  234. machineconfig/utils/files/art/water_croco.txt +11 -0
  235. machineconfig/utils/files/ascii_art.py +1 -1
  236. machineconfig/utils/files/dbms.py +257 -0
  237. machineconfig/utils/files/headers.py +11 -14
  238. machineconfig/utils/files/ouch/__init__.py +0 -0
  239. machineconfig/utils/files/ouch/decompress.py +45 -0
  240. machineconfig/utils/files/read.py +10 -18
  241. machineconfig/utils/installer_utils/installer_class.py +68 -126
  242. machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
  243. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
  244. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
  245. machineconfig/utils/io.py +77 -23
  246. machineconfig/utils/links.py +254 -162
  247. machineconfig/utils/meta.py +255 -0
  248. machineconfig/utils/notifications.py +1 -1
  249. machineconfig/utils/options.py +13 -3
  250. machineconfig/utils/path_extended.py +46 -100
  251. machineconfig/utils/path_helper.py +75 -22
  252. machineconfig/utils/procs.py +50 -70
  253. machineconfig/utils/scheduler.py +94 -97
  254. machineconfig/utils/scheduling.py +0 -3
  255. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  256. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  257. machineconfig/utils/source_of_truth.py +3 -6
  258. machineconfig/utils/ssh.py +742 -264
  259. machineconfig/utils/ssh_utils/utils.py +0 -0
  260. machineconfig/utils/terminal.py +2 -113
  261. machineconfig/utils/tst.py +20 -0
  262. machineconfig/utils/upgrade_packages.py +109 -28
  263. machineconfig/utils/ve.py +11 -4
  264. machineconfig-7.66.dist-info/METADATA +124 -0
  265. machineconfig-7.66.dist-info/RECORD +451 -0
  266. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  267. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  268. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  269. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  270. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  271. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  272. machineconfig/jobs/python/vscode/api.py +0 -57
  273. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  274. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  275. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  276. machineconfig/jobs/windows/startup_file.cmd +0 -2
  277. machineconfig/profile/create.py +0 -303
  278. machineconfig/profile/shell.py +0 -176
  279. machineconfig/scripts/cloud/init.sh +0 -119
  280. machineconfig/scripts/linux/agents +0 -2
  281. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  282. machineconfig/scripts/linux/cloud_copy +0 -2
  283. machineconfig/scripts/linux/cloud_mount +0 -2
  284. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  285. machineconfig/scripts/linux/cloud_sync +0 -2
  286. machineconfig/scripts/linux/croshell +0 -3
  287. machineconfig/scripts/linux/devops +0 -2
  288. machineconfig/scripts/linux/fire +0 -2
  289. machineconfig/scripts/linux/ftpx +0 -2
  290. machineconfig/scripts/linux/fzf2g +0 -21
  291. machineconfig/scripts/linux/fzffg +0 -25
  292. machineconfig/scripts/linux/gh_models +0 -2
  293. machineconfig/scripts/linux/initai +0 -2
  294. machineconfig/scripts/linux/kill_process +0 -2
  295. machineconfig/scripts/linux/scheduler +0 -2
  296. machineconfig/scripts/linux/sessions +0 -2
  297. machineconfig/scripts/linux/share_smb +0 -1
  298. machineconfig/scripts/linux/start_slidev +0 -2
  299. machineconfig/scripts/linux/start_terminals +0 -3
  300. machineconfig/scripts/linux/warp-cli.sh +0 -122
  301. machineconfig/scripts/linux/wifi_conn +0 -2
  302. machineconfig/scripts/linux/z_ls +0 -104
  303. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  304. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  305. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  306. machineconfig/scripts/python/dotfile.py +0 -78
  307. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  308. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  309. machineconfig/scripts/python/gh_models.py +0 -104
  310. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  311. machineconfig/scripts/python/repos.py +0 -132
  312. machineconfig/scripts/python/repos_helper_action.py +0 -378
  313. machineconfig/scripts/python/snapshot.py +0 -25
  314. machineconfig/scripts/python/start_terminals.py +0 -121
  315. machineconfig/scripts/python/t4.py +0 -17
  316. machineconfig/scripts/windows/agents.ps1 +0 -1
  317. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  318. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  319. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  320. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  321. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  322. machineconfig/scripts/windows/croshell.ps1 +0 -1
  323. machineconfig/scripts/windows/devops.ps1 +0 -1
  324. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  325. machineconfig/scripts/windows/fire.ps1 +0 -1
  326. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  327. machineconfig/scripts/windows/gpt.ps1 +0 -1
  328. machineconfig/scripts/windows/grep.ps1 +0 -2
  329. machineconfig/scripts/windows/initai.ps1 +0 -1
  330. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  331. machineconfig/scripts/windows/nano.ps1 +0 -3
  332. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  333. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  334. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  335. machineconfig/scripts/windows/sessions.ps1 +0 -1
  336. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  337. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  338. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  339. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  340. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  341. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  342. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  343. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  344. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  345. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  346. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  347. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  348. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  349. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  350. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  351. machineconfig-5.15.dist-info/METADATA +0 -188
  352. machineconfig-5.15.dist-info/RECORD +0 -415
  353. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  354. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  355. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  356. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  357. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  358. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  359. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  360. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  361. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  362. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  363. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  364. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  365. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  366. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  367. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  368. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  369. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  370. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  371. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  372. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  373. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  374. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  375. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  376. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  377. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  378. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  379. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  380. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  381. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  382. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  383. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  384. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  385. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  386. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  387. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  388. {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  389. {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,36 @@
1
+
1
2
  from pathlib import Path
3
+ import platform
2
4
 
3
5
  from machineconfig.utils.source_of_truth import LIBRARY_ROOT
4
6
 
5
7
 
6
8
  def create_dot_scripts(repo_root: Path) -> None:
7
9
  scripts_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/scripts")
8
- target_dir = repo_root.joinpath(".scripts")
10
+ target_dir = repo_root.joinpath(".ai/scripts")
11
+ import shutil
12
+ shutil.rmtree(target_dir, ignore_errors=True)
9
13
  target_dir.mkdir(parents=True, exist_ok=True)
10
- for script_path in scripts_dir.iterdir():
11
- target_dir.joinpath(script_path.name).write_text(data=script_path.read_text(encoding="utf-8"), encoding="utf-8")
14
+ import platform
15
+ if platform.system() == "Windows":
16
+ script_path = scripts_dir.joinpath("lint_and_type_check.ps1")
17
+ elif platform.system() in ["Linux", "Darwin"]:
18
+ script_path = scripts_dir.joinpath("lint_and_type_check.sh")
19
+ else:
20
+ raise NotImplementedError(f"Platform {platform.system()} is not supported.")
21
+ target_dir.joinpath(script_path.name).write_text(data=script_path.read_text(encoding="utf-8"), encoding="utf-8")
22
+
23
+
24
+ def adjust_for_os(config_path: Path) -> str:
25
+ if config_path.suffix not in [".md", ".txt"]:
26
+ return config_path.read_text(encoding="utf-8")
27
+ english_text = config_path.read_text(encoding="utf-8")
28
+ if platform.system() == "Windows":
29
+ return english_text.replace("bash", "PowerShell").replace("sh ", "pwsh ").replace("./", ".\\").replace(".sh", ".ps1")
30
+ elif platform.system() in ["Linux", "Darwin"]:
31
+ return english_text.replace("PowerShell", "bash").replace("pwsh ", "sh ").replace(".\\", "./").replace(".ps1", ".sh")
32
+ else:
33
+ raise NotImplementedError(f"Platform {platform.system()} is not supported.")
12
34
 
13
35
 
14
36
  def adjust_gitignore(repo_root: Path) -> None:
@@ -22,10 +44,11 @@ def adjust_gitignore(repo_root: Path) -> None:
22
44
  ".links",
23
45
  "notebooks",
24
46
  ".ai",
25
- ".scripts",
26
47
  "GEMINI.md",
27
48
  "CLAUDE.md",
49
+ "CRUSH.md",
28
50
  ".cursor",
51
+ ".clinerules",
29
52
  ".github/instructions",
30
53
  ".github/chatmodes",
31
54
  ".github/prompts",
@@ -0,0 +1,37 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import Any
4
+
5
+
6
+ def add_lint_and_type_check_task(repo_root: Path) -> None:
7
+ vscode_dir = repo_root / ".vscode"
8
+ vscode_dir.mkdir(parents=True, exist_ok=True)
9
+ tasks_json_path = vscode_dir / "tasks.json"
10
+
11
+ task_to_add = {
12
+ "label": "lint_and_type_check",
13
+ "type": "shell",
14
+ "linux": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
15
+ "osx": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
16
+ "windows": {"command": "pwsh", "args": ["-File", "./.ai/scripts/lint_and_type_check.ps1"]},
17
+ "presentation": {"reveal": "always", "panel": "new"},
18
+ "problemMatcher": [],
19
+ }
20
+
21
+ if tasks_json_path.exists():
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)
28
+ if "tasks" not in tasks_config:
29
+ tasks_config["tasks"] = []
30
+ existing_labels = {task.get("label") for task in tasks_config.get("tasks", [])}
31
+ if "lintAndTypeCheck" not in existing_labels:
32
+ tasks_config["tasks"].append(task_to_add)
33
+ else:
34
+ tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
35
+
36
+ with tasks_json_path.open("w") as f:
37
+ json.dump(tasks_config, f, indent="\t")
@@ -0,0 +1,29 @@
1
+
2
+ 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
6
+
7
+ def get_app():
8
+ app = typer.Typer(add_completion=False, no_args_is_help=True)
9
+
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
12
+
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
+
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
18
+
19
+ return app
20
+
21
+
22
+ def main():
23
+ app = get_app()
24
+ app()
25
+
26
+
27
+ if __name__ == "__main__":
28
+ pass
29
+ # a = get_app()(asdf)
@@ -2,156 +2,153 @@
2
2
 
3
3
  """
4
4
  croshell
5
+
5
6
  """
6
7
 
7
8
  from typing import Annotated, Optional
8
9
  import typer
9
- from machineconfig.utils.path_extended import PathExtended
10
- from machineconfig.utils.accessories import randstr
11
-
12
- from machineconfig.utils.options import choose_from_options
13
- # from machineconfig.utils.ve import get_ve_activate_line
14
- from rich.console import Console
15
- from rich.panel import Panel
16
- # from rich.text import Text
17
-
18
- console = Console()
19
-
20
-
21
- def add_print_header_pycode(path: str, title: str):
22
- return f"""
23
- try:
24
- from crocodile.file_management import P as PathExtended
25
- except ImportError:
26
- from machineconfig.utils.path_extended import PathExtended
27
- pycode = PathExtended(r'{path}').read_text(encoding="utf-8")
28
- pycode = pycode.split("except Exception: print(pycode)")[2]
29
-
30
- try:
31
- from rich.text import Text
32
- from rich.panel import Panel
33
- from rich.console import Console
34
- from rich.syntax import Syntax
35
- console = Console()
36
- if pycode.strip() != "":
37
- console.print(Panel(Syntax(pycode, lexer="python"), title='{title}'), style="bold red")
38
- except Exception: print(pycode)
39
- """
40
-
41
-
42
- def get_read_data_pycode(path: str):
43
- return f"""
44
- from rich.panel import Panel
45
- from rich.text import Text
46
- from rich.console import Console
47
- console = Console()
48
- p = PathExtended(r'{path}').absolute()
49
- try:
50
- from machineconfig.utils.files.read import Read
51
- dat = Read.read(p)
52
- if isinstance(dat, dict):
53
- panel_title = f"📄 File Data: {{p.name}}"
54
- console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
55
- pprint(dat, PathExtended.name)
56
- else:
57
- panel_title = f"📄 Successfully read the file: {{p.name}}"
58
- console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
59
- except Exception as e:
60
- error_message = f'''❌ ERROR READING FILE\nFile: {{p.name}}\nError: {{e}}'''
61
- console.print(Panel(Text(error_message, justify="left"), title="Error", expand=False, border_style="red"))
62
- """
63
-
64
10
 
65
11
 
66
- def main(
12
+ def croshell(
13
+ path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
67
14
  python: Annotated[bool, typer.Option("--python", "-p", help="flag to use python over IPython.")] = False,
68
- fzf: Annotated[bool, typer.Option("--fzf", "-F", help="search with fuzzy finder for python scripts and run them")] = False,
69
- ve: Annotated[Optional[str], typer.Option("--ve", "-v", help="virtual enviroment to use, defaults to activated ve, if existed, else ve.")] = None,
70
15
  profile: Annotated[Optional[str], typer.Option("--profile", "-P", help="ipython profile to use, defaults to default profile.")] = None,
71
- read: Annotated[str, typer.Option("--read", "-r", help="read a binary file.")] = "",
72
16
  jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
73
- streamlit_viewer: Annotated[bool, typer.Option("--stViewer", "-s", help="view in streamlit app")] = False,
74
- visidata: Annotated[bool, typer.Option("--visidata", "-V", help="open data file in visidata")] = False,
17
+ vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
18
+ # streamlit_viewer: Annotated[bool, typer.Option("--streamlit", "-s", help="view in streamlit app")] = False,
19
+ visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
20
+ marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
75
21
  ) -> None:
22
+ from machineconfig.scripts.python.helpers_croshell.crosh import get_read_python_file_pycode, get_read_data_pycode
23
+ from machineconfig.utils.meta import lambda_to_python_script
24
+ from machineconfig.utils.path_helper import get_choice_file
25
+ from machineconfig.utils.path_extended import PathExtended
26
+ from pathlib import Path
27
+ from machineconfig.utils.accessories import randstr
28
+ import json
29
+ from rich.console import Console
30
+ from rich.panel import Panel
31
+ console = Console()
32
+
76
33
  # ==================================================================================
77
34
  # flags processing
78
35
  interactivity = "-i"
79
36
  interpreter = "python" if python else "ipython"
80
37
  ipython_profile: Optional[str] = profile
81
- file_obj = PathExtended.cwd() # initialization value, could be modified according to args.
82
-
83
- if fzf:
84
- text = "🔍 Searching for Python files..."
85
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
86
- options = [str(item) for item in PathExtended.cwd().search("*.py", r=True)]
87
- file_selected = choose_from_options(msg="Choose a python file to run", options=options, fzf=True, multi=False)
88
- assert isinstance(file_selected, str)
89
- program = PathExtended(file_selected).read_text(encoding="utf-8")
90
- text = f"📄 Selected file: {PathExtended(file_selected).name}"
91
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
92
-
93
- elif read != "":
94
- if streamlit_viewer:
95
- # text = "📊 STARTING STREAMLIT VIEWER"
96
- # console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
97
- # from machineconfig.scripts.python.viewer import run
98
- # py_file_path = run(data_path=args.read, data=None, get_figure=None)
99
- # final_program = f"""
100
- # #!/bin/bash
101
- # streamlit run {py_file_path}
102
- # """
103
- # PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
104
- return None
105
- file_obj = PathExtended(str(read).lstrip()).expanduser().absolute()
106
- program = get_read_data_pycode(str(file_obj))
107
- text = f"📄 Reading data from: {file_obj.name}"
108
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
109
-
38
+ file_obj = Path.cwd() # initialization value, could be modified according to args.
39
+ if path is not None:
40
+ choice_file = get_choice_file(path=path, suffixes={".*"})
41
+ if choice_file.suffix == ".py":
42
+ program = choice_file.read_text(encoding="utf-8")
43
+ text = f"📄 Selected file: {choice_file.name}"
44
+ console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
45
+ else:
46
+ program = lambda_to_python_script(lambda: get_read_data_pycode(path=str(choice_file)),
47
+ in_global=True, import_module=False)
48
+ text = f"📄 Reading data from: {file_obj.name}"
49
+ console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
110
50
  else: # if nothing is specified, then run in interactive mode.
111
- text = "⌨️ Entering interactive mode"
112
- console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
113
- # from machineconfig.scripts.python.croshell import InteractiveShell
114
- # InteractiveShell().run()
115
- # return None
116
51
  program = ""
117
-
118
52
  preprogram = """
119
-
120
53
  #%%
121
-
122
- from machineconfig.utils.files.headers import print_header, print_logo
123
- print_header()
124
- print_logo("CROCODILE")
125
- from pathlib import Path
126
-
127
54
  """
128
-
129
- pyfile = PathExtended.tmp().joinpath(f"tmp_scripts/python/croshell/{randstr()}.py")
55
+ def preprogram_func():
56
+ from machineconfig.utils.files.headers import print_header, print_logo
57
+ print_header()
58
+ print_logo("Machineconfig")
59
+ from pathlib import Path
60
+ from machineconfig.utils.path_extended import PathExtended
61
+ _ = Path, PathExtended # avoid unused import warnings
62
+ import inspect, textwrap
63
+ from types import FunctionType
64
+ def get_body_simple_function_no_args(f: FunctionType):
65
+ return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
66
+ preprogram += get_body_simple_function_no_args(preprogram_func)
67
+
68
+ pyfile = PathExtended.tmp().joinpath(f"tmp_scripts/python/croshell/{randstr()}/script.py")
130
69
  pyfile.parent.mkdir(parents=True, exist_ok=True)
131
70
 
132
71
  title = "Reading Data"
133
- python_program = preprogram + add_print_header_pycode(str(pyfile), title=title) + program
72
+ def_code = lambda_to_python_script(lambda: get_read_python_file_pycode(path=str(pyfile), title=title),
73
+ in_global=False, import_module=False)
74
+ # print(def_code)
75
+ python_program = preprogram + "\n\n" + def_code + program
134
76
  pyfile.write_text(python_program, encoding="utf-8")
135
77
  # ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
136
78
  ipython_profile = ipython_profile if ipython_profile is not None else "default"
137
79
  # ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
138
80
 
81
+ # prepare notebook target path (avoid relying on locals())
82
+ nb_target = pyfile.with_suffix(".ipynb")
83
+ if jupyter:
84
+ try:
85
+ nb_path = pyfile.with_suffix(".ipynb")
86
+ nb_content = {
87
+ "cells": [
88
+ {
89
+ "cell_type": "code",
90
+ "metadata": {"language": "python"},
91
+ "source": [python_program],
92
+ "outputs": [],
93
+ "execution_count": None,
94
+ }
95
+ ],
96
+ "metadata": {},
97
+ "nbformat": 4,
98
+ "nbformat_minor": 5,
99
+ }
100
+ nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
101
+ nb_target = nb_path
102
+ except Exception:
103
+ # if writing fails, fall back to the default nb_target already set
104
+ pass
139
105
  if visidata:
140
- fire_line = f"uv run --with visidata,pyarrow vd {str(file_obj)}"
106
+ if file_obj.suffix == ".json":
107
+ fire_line = f"uv run --python 3.14 --with visidata vd {str(file_obj)}"
108
+ else:
109
+ fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
110
+ elif marimo:
111
+ if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
112
+ else: requirements = """--python 3.14 --with "marimo,cowsay,machineconfig[plot]>=7.66" """
113
+ fire_line = f"""
114
+ cd {str(pyfile.parent)}
115
+ uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
116
+ uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
117
+ """
141
118
  elif jupyter:
142
- fire_line = f"code --new-window {str(pyfile)}"
119
+ if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
120
+ else: requirements = """--with "cowsay,machineconfig[plot]>=7.66" """
121
+ fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
122
+ elif vscode:
123
+ fire_line = f"""
124
+ cd {str(pyfile.parent)}
125
+ uv init --python 3.14
126
+ uv venv
127
+ uv add "cowsay,machineconfig[plot]>=7.66"
128
+ # code serve-web
129
+ code --new-window {str(pyfile)}
130
+ """
143
131
  else:
144
132
  if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
145
133
  else: profile = ""
146
- fire_line = f"uv run --python 3.13 --with machineconfig[plot] {interpreter} {interactivity} {profile} {str(pyfile)}"
134
+ if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
135
+ else: ve_line = """--python 3.14 --with "cowsay,machineconfig[plot]>=7.66" """
136
+ # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
137
+ # --python 3.14
138
+ fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
147
139
 
148
- from machineconfig.utils.code import run_shell_script
149
- run_shell_script(fire_line)
140
+ from machineconfig.utils.code import exit_then_run_shell_script
141
+ exit_then_run_shell_script(fire_line, strict=False)
150
142
 
151
143
 
152
- def arg_parser() -> None:
153
- typer.run(main)
144
+ def main() -> None:
145
+ typer.run(croshell)
154
146
 
155
147
 
156
148
  if __name__ == "__main__":
157
- arg_parser()
149
+ # def func(flag: Annotated[bool, typer.Option("--flag/-nf", help="dummy flag for debugging", flag_value=False, is_flag=True)]=True):
150
+ # console.print(f"flag: {flag}")
151
+ # app = typer.Typer()
152
+ # app.command()(func)
153
+ # app()
154
+ main()
@@ -0,0 +1,31 @@
1
+
2
+ """
3
+ Minimalist programs that only print scripts without frills so it can be sourced by by shell.
4
+ """
5
+
6
+
7
+ import typer
8
+
9
+
10
+ def define_scripts():
11
+ import platform
12
+ if platform.system() != "Linux":
13
+ raise RuntimeError("This command is only supported on Linux systems.")
14
+ from machineconfig.setup_linux import INTERACTIVE as script_path
15
+ script = script_path.read_text(encoding="utf-8")
16
+ print(script)
17
+
18
+
19
+ def get_app():
20
+ app = typer.Typer(add_completion=False, no_args_is_help=True)
21
+ app.command(name="scripts", help="define all scripts", no_args_is_help=False)(define_scripts)
22
+ return app
23
+
24
+ def main():
25
+ # return app
26
+ app = get_app()
27
+ app()
28
+
29
+
30
+ # if __name__ == "__main__":
31
+ # main()
@@ -1,106 +1,47 @@
1
1
  """devops with emojis"""
2
2
 
3
- import machineconfig.utils.installer_utils.installer as installer_entry_point
4
- import machineconfig.scripts.python.share_terminal as share_terminal
5
- import machineconfig.scripts.python.repos as repos
6
-
7
- from machineconfig import __version__
8
3
  import typer
9
-
10
-
11
- app = typer.Typer(help=f"🛠️ DevOps operations @ machineconfig {__version__}", no_args_is_help=True)
12
- app.command(name="install", help="📦 Install essential packages")(installer_entry_point.main)
13
- app.command(name="share-terminal", help="📡 Share terminal via web browser")(share_terminal.main)
14
- app.add_typer(repos.app, name="repos", help="📁 Manage git repositories")
15
-
16
- ssh_app = typer.Typer(help="🔐 SSH operations subcommands", no_args_is_help=True)
17
- app.add_typer(ssh_app, name="ssh")
18
-
19
-
20
- @app.command()
21
- def update():
22
- """🔄 UPDATE essential repos"""
23
- import machineconfig.scripts.python.devops_update_repos as helper
24
- helper.main()
25
-
26
-
27
- @app.command()
28
- def symlinks():
29
- """🔗 SYMLINKS of dotfiles."""
30
- import machineconfig.profile.create as helper
31
- helper.main_symlinks()
32
-
33
-
34
- @app.command()
35
- def profile():
36
- """🔗 Update shell profile."""
37
- import machineconfig.profile.create as helper
38
- helper.main_profile()
39
-
40
-
41
- @app.command()
42
- def symlinks_new():
43
- """🆕 SYMLINKS new"""
44
- import machineconfig.jobs.python.python_ve_symlink as helper
45
- helper.main()
46
-
47
-
48
- @ssh_app.command()
49
- def add_key():
50
- """🔑 SSH add pub key to this machine"""
51
- import machineconfig.scripts.python.devops_add_ssh_key as helper
52
- helper.main()
53
- @ssh_app.command()
54
- def add_identity():
55
- """🗝️ SSH add identity (private key) to this machine"""
56
- import machineconfig.scripts.python.devops_add_identity as helper
57
- helper.main()
58
- @ssh_app.command()
59
- def connect():
60
- """🔐 SSH use key pair to connect two machines"""
61
- raise NotImplementedError
62
- @ssh_app.command()
63
- def setup():
64
- """📡 SSH setup"""
65
- _program_windows = """Invoke-WebRequest https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/openssh_all.ps1 | Invoke-Expression # https://github.com/thisismygitrepo.keys"""
66
- _program_linux = """curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/openssh_all.sh | sudo bash # https://github.com/thisismygitrepo.keys"""
67
- import subprocess
68
- from platform import system
69
- subprocess.run(_program_linux if system() == "Linux" else _program_windows, shell=True, check=True)
70
- @ssh_app.command()
71
- def setup_wsl():
72
- """🐧 SSH setup wsl"""
73
- import subprocess
74
- subprocess.run("curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/openssh_wsl.sh | sudo bash", shell=True, check=True)
75
-
76
-
77
- @app.command()
78
- def backup():
79
- """💾 BACKUP"""
80
- from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
81
- main_backup_retrieve(direction="BACKUP")
82
-
83
-
84
- @app.command()
85
- def retrieve():
86
- """📥 RETRIEVE"""
87
- from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
88
- main_backup_retrieve(direction="RETRIEVE")
89
-
90
-
91
- @app.command()
92
- def scheduler():
93
- """⏰ SCHEDULER"""
94
- # from machineconfig.scripts.python.scheduler import main as helper
95
- # helper()
96
-
97
- @app.command()
98
- def interactive():
99
- """🤖 INTERACTIVE configuration of machine."""
100
- from machineconfig.scripts.python.interactive import main
101
- main()
102
-
103
-
104
-
105
- if __name__ == "__main__":
106
- pass
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
11
+
12
+
13
+ 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
+ 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", "-i", help="Interactive selection of programs to install.")] = False,
16
+ ) -> None:
17
+ """📦 Install packages"""
18
+ import machineconfig.utils.installer_utils.installer_cli 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
+ app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
26
+ app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
27
+ app_repos = cli_repos.get_app()
28
+ app.add_typer(app_repos, name="repos")
29
+ app.add_typer(app_repos, name="r", hidden=True)
30
+ app_config = cli_config.get_app()
31
+ app.add_typer(app_config, name="config")
32
+ app.add_typer(app_config, name="c", hidden=True)
33
+ app_data = cli_data.get_app()
34
+ app.add_typer(app_data, name="data")
35
+ app.add_typer(app_data, name="d", hidden=True)
36
+ app_self = cli_self.get_app()
37
+ app.add_typer(app_self, name="self")
38
+ app.add_typer(app_self, name="s", hidden=True)
39
+ app_nw = cli_network.get_app()
40
+ app.add_typer(app_nw, name="network")
41
+ app.add_typer(app_nw, name="n", hidden=True)
42
+ return app
43
+
44
+
45
+ def main():
46
+ app = get_app()
47
+ app()
@@ -0,0 +1,10 @@
1
+ """
2
+ TUI for navigating through machineconfig command structure using Textual.
3
+ """
4
+
5
+ from machineconfig.scripts.python.helpers_navigator import CommandNavigatorApp
6
+
7
+
8
+ if __name__ == "__main__":
9
+ app = CommandNavigatorApp()
10
+ app.run()
@@ -0,0 +1,47 @@
1
+ """Cross-platform PATH explorer backend."""
2
+
3
+ import os
4
+ import platform
5
+ from pathlib import Path
6
+ from typing import Literal
7
+
8
+
9
+ PlatformType = Literal["Windows", "Linux", "Darwin"]
10
+
11
+
12
+ def get_platform() -> PlatformType:
13
+ """Get the current platform."""
14
+ return platform.system() # type: ignore[return-value]
15
+
16
+
17
+ def get_path_entries() -> list[str]:
18
+ """Get all PATH entries for the current platform."""
19
+ path_str = os.environ.get("PATH", "")
20
+ separator = ";" if get_platform() == "Windows" else ":"
21
+ return [entry for entry in path_str.split(separator) if entry.strip()]
22
+
23
+
24
+ def get_directory_contents(directory: str, max_items: int = 50) -> list[str]:
25
+ """Get contents of a directory, limited to max_items."""
26
+ try:
27
+ path = Path(directory)
28
+ if not path.exists():
29
+ return ["⚠️ Directory does not exist"]
30
+ if not path.is_dir():
31
+ return ["⚠️ Not a directory"]
32
+
33
+ items = []
34
+ for item in sorted(path.iterdir(), key=lambda p: (not p.is_dir(), p.name.lower())):
35
+ if len(items) >= max_items:
36
+ items.append(f"... and {sum(1 for _ in path.iterdir()) - max_items} more items")
37
+ break
38
+ prefix = "📁 " if item.is_dir() else "📄 "
39
+ items.append(f"{prefix}{item.name}")
40
+
41
+ if not items:
42
+ return ["📭 Empty directory"]
43
+ return items
44
+ except PermissionError:
45
+ return ["⚠️ Permission denied"]
46
+ except Exception as e:
47
+ return [f"⚠️ Error: {e!s}"]