machineconfig 7.98__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 (331) hide show
  1. machineconfig/cluster/remote/run_cluster.py +1 -1
  2. machineconfig/cluster/remote/run_remote.py +1 -1
  3. machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
  4. machineconfig/cluster/sessions_managers/wt_local.py +1 -1
  5. machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
  6. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  7. machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
  8. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  9. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  10. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  11. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  12. machineconfig/jobs/installer/installer_data.json +271 -152
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +11 -9
  15. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +1 -2
  16. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +1 -1
  17. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +10 -8
  18. machineconfig/jobs/installer/{custom → python_scripts}/hx.py +30 -13
  19. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +1 -1
  20. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +6 -5
  21. machineconfig/jobs/installer/{custom_dev → python_scripts}/sysabc.py +26 -20
  22. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +1 -1
  23. machineconfig/jobs/installer/{custom → python_scripts}/yazi.py +39 -19
  24. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  25. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  26. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  27. machineconfig/jobs/scripts_dynamic/a.py +428 -0
  28. machineconfig/logger.py +1 -1
  29. machineconfig/profile/create_helper.py +21 -10
  30. machineconfig/profile/create_links.py +77 -20
  31. machineconfig/profile/create_links_export.py +63 -58
  32. machineconfig/profile/create_shell_profile.py +14 -0
  33. machineconfig/profile/mapper_data.toml +45 -0
  34. machineconfig/profile/mapper_dotfiles.toml +249 -0
  35. machineconfig/scripts/python/agents.py +76 -171
  36. machineconfig/scripts/python/ai/initai.py +3 -1
  37. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  38. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  39. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  40. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  41. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  42. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  43. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  44. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  45. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  46. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  47. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  48. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  49. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  50. machineconfig/scripts/python/cloud.py +58 -11
  51. machineconfig/scripts/python/croshell.py +4 -155
  52. machineconfig/scripts/python/devops.py +57 -38
  53. machineconfig/scripts/python/devops_navigator.py +17 -3
  54. machineconfig/scripts/python/fire_jobs.py +10 -193
  55. machineconfig/scripts/python/ftpx.py +5 -224
  56. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  57. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  58. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  59. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  60. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  61. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  62. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  63. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  64. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  65. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +10 -7
  66. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  67. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  68. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  69. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  70. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  71. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  72. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +3 -1
  73. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  74. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  75. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +4 -4
  76. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  77. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  78. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  79. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  80. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  81. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  82. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  84. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
  85. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +69 -82
  86. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  87. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +47 -22
  88. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  89. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  90. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  91. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  92. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  93. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  94. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +64 -50
  95. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  96. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  97. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  98. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  99. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +1 -0
  100. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  101. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  102. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  103. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  104. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  105. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  106. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  107. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  108. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  109. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  110. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  111. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  112. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  113. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  114. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +52 -10
  115. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  116. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  117. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  118. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  119. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  120. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  121. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  122. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  123. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  124. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +118 -34
  125. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  126. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  127. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  128. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  129. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  130. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  131. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  132. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -2
  133. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  134. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  135. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  136. machineconfig/scripts/python/{helpers_devops/cli_utils.py → helpers/helpers_utils/pdf.py} +2 -2
  137. machineconfig/scripts/python/{helpers_utils/path.py → helpers/helpers_utils/python.py} +65 -40
  138. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  139. machineconfig/scripts/python/mcfg_entry.py +133 -48
  140. machineconfig/scripts/python/msearch.py +16 -61
  141. machineconfig/scripts/python/sessions.py +68 -203
  142. machineconfig/scripts/python/terminal.py +27 -102
  143. machineconfig/scripts/python/utils.py +101 -22
  144. machineconfig/settings/atuin/config.toml +294 -0
  145. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  146. machineconfig/settings/linters/.ruff.toml +2 -1
  147. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  148. machineconfig/settings/shells/bash/init.sh +6 -3
  149. machineconfig/settings/shells/nushell/config.nu +23 -1
  150. machineconfig/settings/shells/nushell/env.nu +22 -48
  151. machineconfig/settings/shells/nushell/init.nu +64 -240
  152. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  153. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  154. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  155. machineconfig/settings/shells/wt/settings.json +21 -21
  156. machineconfig/settings/shells/zsh/init.sh +25 -4
  157. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  158. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  159. machineconfig/settings/tv/config.toml +234 -0
  160. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  161. machineconfig/settings/wsl/.wslconfig +5 -30
  162. machineconfig/settings/wt/__init__.py +0 -0
  163. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  164. machineconfig/settings/zellij/layouts/st.kdl +40 -9
  165. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  166. machineconfig/setup_linux/__init__.py +0 -1
  167. machineconfig/setup_linux/apps_desktop.sh +8 -27
  168. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  169. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  170. machineconfig/setup_mac/__init__.py +0 -2
  171. machineconfig/setup_windows/__init__.py +2 -5
  172. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  173. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  174. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  175. machineconfig/type_hinting/sql/__init__.py +1 -0
  176. machineconfig/type_hinting/sql/base.py +216 -0
  177. machineconfig/type_hinting/sql/core_schema.py +64 -0
  178. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  179. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  180. machineconfig/type_hinting/typedict/__init__.py +1 -0
  181. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  182. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  183. machineconfig/type_hinting/typedict/generators.py +231 -0
  184. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  185. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  186. machineconfig/utils/accessories.py +24 -0
  187. machineconfig/utils/code.py +78 -33
  188. machineconfig/utils/files/ascii_art.py +10 -14
  189. machineconfig/utils/files/headers.py +3 -5
  190. machineconfig/utils/files/read.py +8 -1
  191. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  192. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  193. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  194. machineconfig/utils/installer_utils/installer_class.py +12 -4
  195. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  196. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  197. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  198. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  199. machineconfig/utils/io.py +25 -8
  200. machineconfig/utils/meta.py +6 -4
  201. machineconfig/utils/options.py +49 -19
  202. machineconfig/utils/options_utils/__init__.py +0 -0
  203. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  204. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  205. machineconfig/utils/options_utils/tv_options.py +37 -0
  206. machineconfig/utils/path_extended.py +8 -7
  207. machineconfig/utils/scheduler.py +8 -2
  208. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  209. machineconfig/utils/source_of_truth.py +6 -1
  210. machineconfig/utils/ssh.py +73 -23
  211. machineconfig/utils/ssh_utils/abc.py +1 -1
  212. machineconfig/utils/ssh_utils/copy_from_here.py +19 -14
  213. machineconfig/utils/ssh_utils/copy_to_here.py +2 -1
  214. machineconfig/utils/ssh_utils/utils.py +23 -7
  215. machineconfig/utils/ssh_utils/wsl.py +107 -170
  216. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  217. machineconfig/utils/upgrade_packages.py +4 -8
  218. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/METADATA +30 -22
  219. machineconfig-8.51.dist-info/RECORD +543 -0
  220. machineconfig/jobs/installer/check_installations.py +0 -248
  221. machineconfig/profile/backup.toml +0 -49
  222. machineconfig/profile/mapper.toml +0 -263
  223. machineconfig/scripts/linux/other/switch_ip +0 -20
  224. machineconfig/scripts/python/helpers/run_py_script.py +0 -79
  225. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +0 -26
  226. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  227. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  228. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  229. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -215
  230. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  231. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  232. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  233. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  234. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  235. machineconfig/scripts/python/helpers_network/devops_add_identity.py +0 -82
  236. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +0 -153
  237. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  238. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  239. machineconfig/scripts/python/helpers_network/wsl_windows_transfer.py +0 -67
  240. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  241. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  242. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  243. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  244. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  245. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  246. machineconfig/setup_windows/others/obs.ps1 +0 -4
  247. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  248. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  249. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  250. machineconfig/setup_windows/ssh/openssh-server_add_key.ps1 +0 -7
  251. machineconfig/setup_windows/ssh/openssh-server_copy-ssh-id.ps1 +0 -14
  252. machineconfig/utils/options_tv.py +0 -119
  253. machineconfig/utils/tst.py +0 -20
  254. machineconfig-7.98.dist-info/RECORD +0 -504
  255. /machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
  256. /machineconfig/{scripts/python/helpers_agents → jobs/installer/python_scripts}/__init__.py +0 -0
  257. /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  258. /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  259. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cloudflare_warp_cli.py +0 -0
  260. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  261. /machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +0 -0
  262. /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  263. /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  264. /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  265. /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  266. /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  267. /machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +0 -0
  268. /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  269. /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  270. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_drive +0 -0
  271. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_nfs +0 -0
  272. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  273. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_smb +0 -0
  274. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  275. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  276. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  277. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  278. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  279. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  280. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  281. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  282. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  283. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  284. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  285. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  286. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  287. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  288. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  289. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  290. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  291. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  292. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  293. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  294. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  295. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  296. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  297. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  298. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  299. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  300. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  301. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  302. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  303. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  304. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  305. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  306. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  307. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  308. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  309. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  310. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_fire_command}/__init__.py +0 -0
  311. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  312. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  313. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  314. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  315. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  316. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_network/__init__.py} +0 -0
  317. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  318. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  319. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  320. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  321. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  322. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  323. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  324. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  325. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  326. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  327. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  328. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  329. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
  330. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +0 -0
  331. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
@@ -2,17 +2,6 @@
2
2
  """
3
3
  Interactive Machine Configuration Setup Script
4
4
 
5
- A Python version of the interactive installation script that uses questionary
6
- for better user experience with checkbox selections.
7
-
8
-
9
- # echo # 📧 Thunderbird Setup Note:
10
- # Run after installing Thunderbird and starting it once:
11
- # cd ~/AppData/Roaming/ThunderBird/Profiles
12
- # $res = ls
13
- # $name = $res[0].Name
14
- # mv $backup_folder $name
15
- #
16
5
 
17
6
 
18
7
  """
@@ -63,31 +52,6 @@ def display_header() -> None:
63
52
  console.print()
64
53
  console.print(Align.center(Text(bug_report, style="dim white")))
65
54
  console.print()
66
- def display_completion_message() -> None:
67
- completion_text = Text("INSTALLATION COMPLETE", style="bold green")
68
- subtitle_text = Text("System setup finished successfully", style="italic green")
69
- console.print(Panel(f"✨ {completion_text}\n{subtitle_text}\n\n🎉 Your system has been configured successfully!\n🔄 You may need to reboot to apply all changes.", border_style="green", padding=(1, 2)))
70
- def display_dotfiles_instructions() -> None:
71
- header_text = Text("DOTFILES MIGRATION", style="bold yellow")
72
- subtitle_text = Text("Configuration transfer options", style="italic yellow")
73
- instructions = """
74
- 🖱️ [bold blue]Method 1: USING MOUSE WITHOUT KB OR BROWSER SHARE[/bold blue]
75
- On original machine, run:
76
- [dim]cd ~/dotfiles/creds/msc
77
- easy-sharing . --password rew --username al[/dim]
78
- Then open brave on new machine to get MouseWithoutBorders password
79
-
80
- 🔐 [bold blue]Method 2: USING SSH[/bold blue]
81
- FROM REMOTE, RUN:
82
- [dim]fptx ~/dotfiles $USER@$(hostname):^ -z
83
- # OR, using IP address if router has not yet found the hostname:
84
- fptx ~/dotfiles $USER@$(hostname -I | awk '{print $1}'):^ -z[/dim]
85
-
86
- ☁️ [bold blue]Method 3: USING INTERNET SECURE SHARE[/bold blue]
87
- [dim]cd ~
88
- cloud_copy SHARE_URL . --config ss[/dim]
89
- (requires symlinks to be created first)"""
90
- console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
91
55
 
92
56
 
93
57
  def get_installation_choices() -> list[str]:
@@ -117,12 +81,12 @@ def execute_installations(selected_options: list[str]) -> None:
117
81
  except Exception as e:
118
82
  console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
119
83
  if platform.system() != "Windows":
120
- run_shell_script(". $HOME/.bashrc")
84
+ run_shell_script(". $HOME/.bashrc", display_script=True, clean_env=False)
121
85
 
122
86
  if "install_machineconfig" in selected_options:
123
87
  console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
124
- from machineconfig.scripts.python.helpers_devops.cli_self import install
125
- install()
88
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_self import install
89
+ install(copy_assets=True, dev=False)
126
90
 
127
91
  if "install_ssh_server" in selected_options:
128
92
  console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
@@ -131,9 +95,9 @@ def execute_installations(selected_options: list[str]) -> None:
131
95
  Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
132
96
  Start-Service sshd
133
97
  Set-Service -Name sshd -StartupType 'Automatic'"""
134
- run_shell_script(f'powershell -Command "{powershell_script}"')
98
+ run_shell_script(f'powershell -Command "{powershell_script}"', display_script=True, clean_env=False)
135
99
  else:
136
- run_shell_script("sudo nala install openssh-server -y")
100
+ run_shell_script("sudo nala install openssh-server -y", display_script=True, clean_env=False)
137
101
 
138
102
  if "install_shell_profile" in selected_options:
139
103
  console.print(Panel("🐚 [bold green]SHELL PROFILE[/bold green]\n[italic]Shell configuration setup[/italic]", border_style="green"))
@@ -142,27 +106,71 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
142
106
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
143
107
  create_default_shell_profile()
144
108
  console.print("✅ Shell profile configured successfully", style="bold green")
145
- from machineconfig.profile.create_links_export import main_public_from_parser
146
- main_public_from_parser(method="copy", on_conflict="overwrite-default-path", which="all", interactive=False)
109
+ from machineconfig.profile.create_links_export import main_from_parser
110
+ main_from_parser(sensitivity="public", method="copy", on_conflict="overwrite-default-path", which="all")
147
111
  if platform.system() == "Windows":
148
- from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
112
+ from machineconfig.jobs.installer.python_scripts.nerfont_windows_helper import install_nerd_fonts
149
113
  install_nerd_fonts()
150
- from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
114
+ from machineconfig.settings.wt.set_wt_settings import main as set_wt_settings_main
151
115
  set_wt_settings_main()
152
116
  except Exception as e:
153
117
  console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
154
118
 
119
+ if "retrieve_repositories" in selected_options or "retrieve_data" in selected_options:
120
+ # we cannot proceed before dotfiles are in place
121
+ if Path.home().joinpath("dotfiles").exists():
122
+ console.print("✅ Dotfiles directory found.", style="bold green")
123
+ else:
124
+ header_text = Text("DOTFILES MIGRATION", style="bold yellow")
125
+ subtitle_text = Text("Configuration transfer options", style="italic yellow")
126
+ instructions = """
127
+ On remote, run:
128
+ devops config export-dotfiles --password pwd
129
+ On new machine, run:
130
+ devops config import-dotfiles --password pwd
131
+ """
132
+ console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
133
+ i_sorted_it_out = "I have sorted out dotfiles migration already and want to proceed."
134
+ exit_now = "Exit now and sort out dotfiles migration first."
135
+ fetch_over_lan = "I already exposed dotfiles over LAN, let's fetch them now."
136
+ fetch_over_ssh = "I wanted to bring them using SSH SCP now."
137
+ options: list[str] = [
138
+ i_sorted_it_out,
139
+ exit_now,
140
+ fetch_over_lan,
141
+ fetch_over_ssh,
142
+ ]
143
+ answer = questionary.select("⚠️ DOTFILES NOT FOUND. How do you want to proceed?", choices=options).ask()
144
+ if answer == i_sorted_it_out:
145
+ console.print("✅ Proceeding as per user confirmation.", style="bold green")
146
+ elif answer == exit_now:
147
+ console.print("❌ Exiting for dotfiles migration.", style="bold red")
148
+ sys.exit(0)
149
+ elif answer == fetch_over_lan:
150
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
151
+ import_dotfiles(use_ssh=False)
152
+ elif answer == fetch_over_ssh:
153
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
154
+ import_dotfiles(use_ssh=True)
155
+ if not Path.home().joinpath("dotfiles").exists():
156
+ console.print("❌ Dotfiles directory still not found after attempted import. Exiting...", style="bold red")
157
+ sys.exit(1)
158
+ # devops config sync --sensitivity public --method symlink --on-conflict overwrite-default-path --which all
159
+ # devops config sync --sensitivity private --method symlink --on-conflict overwrite-default-path --which all
160
+ from machineconfig.profile.create_links_export import main_from_parser
161
+ main_from_parser(sensitivity="private", method="symlink", on_conflict="overwrite-default-path", which="all")
162
+
155
163
  if "retrieve_repositories" in selected_options:
156
164
  console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
157
- from machineconfig.scripts.python.helpers_devops import cli_repos
158
- cli_repos.clone(directory=str(Path.home() / "code"), cloud="odg1")
165
+ from machineconfig.scripts.python.helpers.helpers_devops import cli_repos
166
+ cli_repos.clone(interactive=True)
159
167
 
160
168
  if "retrieve_data" in selected_options:
161
169
  console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
162
170
  console.print("🔧 Retrieving backup data", style="bold cyan")
163
171
  try:
164
- from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
165
- main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None)
172
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_backup_retrieve import main_backup_retrieve
173
+ main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None, repo="all")
166
174
  console.print("✅ Backup data retrieved successfully", style="bold green")
167
175
  except Exception as e:
168
176
  console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
@@ -180,7 +188,13 @@ def main() -> None:
180
188
  console.print("❌ Installation cancelled.", style="bold red")
181
189
  sys.exit(0)
182
190
  execute_installations(selected_options=selected_options)
183
- display_completion_message()
191
+ completion_text = Text("INSTALLATION COMPLETE", style="bold green")
192
+ subtitle_text = Text("System setup finished successfully", style="italic green")
193
+ console.print(Panel(f"✨ {completion_text}\n{subtitle_text}\n\n🎉 Your system has been configured successfully!\n🔄 You may need to reboot to apply all changes.", border_style="green", padding=(1, 2)))
194
+
195
+ from machineconfig.profile.create_shell_profile import reload_shell_profile_and_exit
196
+ reload_shell_profile_and_exit()
197
+
184
198
 
185
199
 
186
200
  if __name__ == "__main__":
@@ -0,0 +1,197 @@
1
+
2
+
3
+ """run python/shell scripts from pre-defined directorys, or, run command/file in the machineconfig environment
4
+
5
+ Recursively Searched Predefined Directories:
6
+
7
+
8
+ * 'private' : $HOME/dotfiles/scripts
9
+
10
+ * 'public' : $HOME/.config/machineconfig/scripts
11
+
12
+ * 'library' : $MACHINECONFIG_LIBRARY_ROOT/jobs/scripts
13
+
14
+ * 'dynamic' : fetched from GitHub repository on the fly (relies on latest commit, rather than the version currently installed)
15
+
16
+ * 'custom' : custom directories from comma separated entry 'scripts' under 'general' section @ ~/dotfiles/machineconfig/defaults.ini
17
+
18
+ """
19
+
20
+
21
+ import typer
22
+ from typing import Annotated, Optional, Literal
23
+
24
+
25
+ def run_py_script(ctx: typer.Context,
26
+ name: Annotated[str, typer.Argument(help="Name of script to run, e.g., 'a' for a.py, or command to execute")] = "",
27
+ where: Annotated[Literal["all", "a", "private", "p", "public", "b", "library", "l", "dynamic", "d", "custom", "c"], typer.Option("--where", "-w", help="Where to look for the script")] = "all",
28
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of scripts to run")] = False,
29
+ command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
30
+ list_scripts: Annotated[bool, typer.Option(..., "--list", "-l", help="List available scripts in all locations")] = False,
31
+ ) -> None:
32
+ if command:
33
+ exec(name)
34
+ return
35
+
36
+ from pathlib import Path
37
+ if list_scripts:
38
+ from machineconfig.scripts.python.helpers.helpers_search.script_help import list_available_scripts
39
+ list_available_scripts(where=where)
40
+ return
41
+
42
+ if not interactive and not name:
43
+ typer.echo("❌ ERROR: You must provide a script name or use --interactive option to select a script.")
44
+ raise typer.Exit(code=1)
45
+ target_file: Optional[Path] = None
46
+
47
+ if where in ["dynamic", "d"]:
48
+ # src/machineconfig/jobs/scripts/python_scripts/a.py
49
+ if "." in name: resolved_names: list[str] = [name]
50
+ else: resolved_names = [f"{name}{a_suffix}" for a_suffix in [".py", ".sh", "", ".ps1", ".bat", ".cmd"]]
51
+ urls = [f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/jobs/scripts_dynamic/{a_resolved_name}""" for a_resolved_name in resolved_names]
52
+ for a_url in urls:
53
+ try:
54
+ print(f"Fetching temporary script from {a_url} ...")
55
+ import requests
56
+ response = requests.get(a_url)
57
+ if response.status_code != 200:
58
+ print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
59
+ raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
60
+ script_content = response.text
61
+ target_file = Path.home().joinpath("tmp_results", "tmp_scripts", "python", f"{name}.py")
62
+ target_file.parent.mkdir(parents=True, exist_ok=True)
63
+ target_file.write_text(script_content, encoding="utf-8")
64
+ except Exception as _e:
65
+ pass
66
+
67
+
68
+ if target_file is None and Path(name).is_file():
69
+ if name.endswith(".py"):
70
+ import machineconfig
71
+ import subprocess
72
+ import sys
73
+ subprocess.run([sys.executable, name], cwd=machineconfig.__path__[0])
74
+ return
75
+ else:
76
+ if Path(name).suffix in [".sh", ".ps1", ".bat", ".cmd", ""]:
77
+ target_file = Path(name)
78
+ else:
79
+ print(f"❌ Error: File '{name}' is not a recognized script type. Supported types are {'.py', '.sh', '.ps1', '.bat', '.cmd', ''}.")
80
+ raise typer.Exit(code=1)
81
+
82
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT, LIBRARY_ROOT, DEFAULTS_PATH
83
+ private_root = Path.home().joinpath("dotfiles/scripts") # local directory
84
+ public_root = CONFIG_ROOT.joinpath("scripts") # local machineconfig directory
85
+ library_root = LIBRARY_ROOT.joinpath("jobs", "scripts")
86
+
87
+ def get_custom_roots() -> list[Path]:
88
+ custom_roots: list[Path] = []
89
+ if DEFAULTS_PATH.is_file():
90
+ from configparser import ConfigParser
91
+ config = ConfigParser()
92
+ config.read(DEFAULTS_PATH)
93
+ if config.has_section("general") and config.has_option("general", "scripts"):
94
+ custom_dirs = config.get("general", "scripts").split(",")
95
+ for custom_dir in custom_dirs:
96
+ custom_path = Path(custom_dir.strip()).expanduser().resolve()
97
+ if custom_path.is_dir():
98
+ custom_roots.append(custom_path)
99
+ return custom_roots
100
+
101
+ roots: list[Path] = []
102
+ match where:
103
+ case "all" | "a":
104
+ roots = [private_root, public_root, library_root] + get_custom_roots()
105
+ case "private" | "p":
106
+ roots = [private_root]
107
+ case "public" | "b":
108
+ roots = [public_root]
109
+ case "library" | "l":
110
+ roots = [library_root]
111
+ case "dynamic" | "d":
112
+ roots = []
113
+ case "custom" | "c":
114
+ roots = get_custom_roots()
115
+
116
+ suffixes: list[str]
117
+ if "." in name:
118
+ suffixes = [""]
119
+ else:
120
+ import platform
121
+ if platform.system() == "Windows":
122
+ suffixes = [".py", ".bat", ".cmd", ".ps1"]
123
+ elif platform.system() == "Darwin" or platform.system() == "Linux":
124
+ suffixes = [""] # files without suffix could be shell scripts, and that already cover files with .sh suffix without duplications
125
+ else:
126
+ suffixes = [".py"]
127
+
128
+ # Finding target file
129
+ potential_matches: list[Path] = []
130
+ if target_file is None:
131
+ for a_root in roots:
132
+ for a_suffix in suffixes:
133
+ if a_root.joinpath(f"{name}{a_suffix}").is_file():
134
+ target_file = a_root.joinpath(f"{name}{a_suffix}")
135
+ break # perfect match
136
+ potential_matches += [a_file for a_file in a_root.rglob(f"*{name}*{a_suffix}") if a_file.is_file()]
137
+
138
+ if target_file is None:
139
+ if len(potential_matches) == 1:
140
+ target_file = potential_matches[0]
141
+ elif len(potential_matches) == 0:
142
+ typer.echo(ctx.get_help())
143
+ typer.echo()
144
+ typer.echo(typer.style(f"❌ ERROR: Could not find script '{name}'.", fg=typer.colors.RED, bold=True))
145
+ typer.echo("Searched in:")
146
+ for r in roots:
147
+ typer.echo(f" - {r}")
148
+ raise typer.Exit(code=1)
149
+ else:
150
+ typer.echo(typer.style(f"Warning: Could not find script '{name}'. Checked {len(potential_matches)} candidate files, trying interactively:", fg=typer.colors.YELLOW))
151
+ from machineconfig.utils.options import choose_from_options
152
+ options = [str(p) for p in potential_matches]
153
+ chosen_file_part = choose_from_options(options, multi=False, msg="Select the script to run:", tv=True, preview="bat")
154
+ target_file = Path(chosen_file_part)
155
+
156
+ typer.echo(typer.style(f"✅ Found script at: {target_file}", fg=typer.colors.GREEN))
157
+ if target_file.suffix == ".py":
158
+ from machineconfig.utils.code import get_uv_command_executing_python_file, exit_then_run_shell_script
159
+ shell_script = get_uv_command_executing_python_file(python_file=str(target_file), uv_project_dir=None, uv_with=None, prepend_print=False)
160
+ exit_then_run_shell_script(script=shell_script)
161
+ else:
162
+ from machineconfig.utils.code import exit_then_run_shell_file
163
+ exit_then_run_shell_file(script_path=str(target_file), strict=True)
164
+
165
+
166
+ def copy_script_to_local(ctx: typer.Context,
167
+ name: Annotated[str, typer.Argument(help="Name of the temporary python script to copy, e.g., 'a' for a.py")],
168
+ alias: Annotated[Optional[str], typer.Option("--alias", "-a", help="Whether to create call it a different name locally")] = None
169
+ ) -> None:
170
+ """
171
+ Copy a temporary python script stored in machineconfig/scripts/python/helpers/tmp_py_scripts to the local machine.
172
+ """
173
+ url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/scripts/python/helpers/tmp_py_scripts/{name}.py"""
174
+ import requests
175
+ response = requests.get(url)
176
+ if response.status_code != 200:
177
+ typer.echo(ctx.get_help())
178
+ typer.echo()
179
+ typer.echo(typer.style(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}", fg=typer.colors.RED, bold=True))
180
+ raise typer.Exit(code=1)
181
+ script_content = response.text
182
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
183
+ local_path = CONFIG_ROOT.joinpath(f"scripts_python/{alias or name}.py")
184
+ with open(local_path, "w") as f:
185
+ f.write(script_content)
186
+ typer.echo(typer.style(f"✅ Script '{name}.py' has been copied to '{local_path}'.", fg=typer.colors.GREEN))
187
+
188
+
189
+ def get_app():
190
+ app = typer.Typer(
191
+ name="run-tmp-script",
192
+ help="Helper to run temporary python scripts stored in machineconfig/scripts/python/helpers/tmp_py_scripts",
193
+ no_args_is_help=True,
194
+ )
195
+ from machineconfig.jobs.scripts_dynamic import a
196
+ app.command()(a.main)
197
+ return app
@@ -0,0 +1,41 @@
1
+ $presets = @{
2
+ "nerd-font-symbols" = "Changes the symbols for each module to use Nerd Font symbols."
3
+ "no-nerd-font" = "Changes the symbols so that no Nerd Font symbols are used."
4
+ "bracketed-segments" = "Changes the format to show segments in brackets."
5
+ "plain-text-symbols" = "Changes the symbols for each module into plain text."
6
+ "no-runtime-versions" = "Hides the version of language runtimes."
7
+ "no-empty-icons" = "Does not show icons if the toolset is not found."
8
+ "pure-preset" = "Emulates the look and behavior of Pure."
9
+ "pastel-powerline" = "Inspired by M365Princess."
10
+ "tokyo-night" = "Inspired by tokyo-night-vscode-theme."
11
+ "gruvbox-rainbow" = "Inspired by Pastel Powerline and Tokyo Night."
12
+ "jetpack" = "Pseudo minimalist preset inspired by geometry and spaceship."
13
+ }
14
+
15
+ $input_list = $presets.Keys | ForEach-Object { "$_`t$($presets[$_])" }
16
+
17
+ $preview_config = "$env:TEMP/starship_preview.toml"
18
+
19
+ # Preview command for PowerShell
20
+ # We need to split the line and get the first part.
21
+ # tv replaces {} with the line.
22
+ # We use powershell -c for the preview command to be safe and consistent.
23
+
24
+ $preview_cmd = "powershell -c `"`$preset = '{}'.Split('`t')[0]; starship preset `$preset > $preview_config; `$env:STARSHIP_CONFIG='$preview_config'; `$env:STARSHIP_SHELL='powershell'; starship prompt`""
25
+
26
+ if (Get-Command "tv" -ErrorAction SilentlyContinue) {
27
+ $selected_line = $input_list | tv --preview-command $preview_cmd --preview-size 50
28
+ } elseif (Get-Command "fzf" -ErrorAction SilentlyContinue) {
29
+ # fzf fallback
30
+ $selected_line = $input_list | fzf --ansi --delimiter "`t" --with-nth 1,2 --preview "powershell -c `"`$preset = {1}; starship preset `$preset > $preview_config; `$env:STARSHIP_CONFIG='$preview_config'; `$env:STARSHIP_SHELL='powershell'; starship prompt`"" --preview-window bottom:50%
31
+ } else {
32
+ Write-Host "Error: 'tv' or 'fzf' not found."
33
+ exit 1
34
+ }
35
+
36
+ if ($selected_line) {
37
+ $selected_preset = $selected_line.Split("`t")[0]
38
+ Write-Host "Applying $selected_preset..."
39
+ starship preset $selected_preset -o "$HOME/.config/starship.toml"
40
+ Write-Host "Done!"
41
+ }
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+
3
+ # Ensure UTF-8 encoding for symbols and CLI tools
4
+ export LANG=C.UTF-8
5
+ export LC_ALL=C.UTF-8
6
+ export LC_CTYPE=C.UTF-8
7
+ export PYTHONIOENCODING=utf-8
8
+
9
+ # Presets
10
+ presets=(
11
+ "nerd-font-symbols Changes the symbols for each module to use Nerd Font symbols."
12
+ "no-nerd-font Changes the symbols so that no Nerd Font symbols are used."
13
+ "bracketed-segments Changes the format to show segments in brackets."
14
+ "plain-text-symbols Changes the symbols for each module into plain text."
15
+ "no-runtime-versions Hides the version of language runtimes."
16
+ "no-empty-icons Does not show icons if the toolset is not found."
17
+ "pure-preset Emulates the look and behavior of Pure."
18
+ "pastel-powerline Inspired by M365Princess."
19
+ "tokyo-night Inspired by tokyo-night-vscode-theme."
20
+ "gruvbox-rainbow Inspired by Pastel Powerline and Tokyo Night."
21
+ "jetpack Pseudo minimalist preset inspired by geometry and spaceship."
22
+ )
23
+
24
+ # Join presets with newlines
25
+ input_data=$(printf "%s\n" "${presets[@]}")
26
+
27
+ preview_config="/tmp/starship_preview.toml"
28
+ # Preview command needs to extract the first column (preset name) from the line
29
+ # {} will be replaced by the selected line
30
+ # We use awk to handle multiple spaces as delimiter
31
+ preview_cmd="preset=\$(echo '{}' | awk '{print \$1}'); starship preset \"\$preset\" > $preview_config && LANG=C.UTF-8 LC_ALL=C.UTF-8 STARSHIP_CONFIG=$preview_config STARSHIP_SHELL=fish starship prompt"
32
+
33
+ if command -v tv &> /dev/null; then
34
+ # tv requires input from stdin if no source-command is given
35
+ selected_line=$(printf "%s" "$input_data" | LANG=C.UTF-8 LC_ALL=C.UTF-8 tv --ansi --preview-command "$preview_cmd" --preview-size 50)
36
+ elif command -v fzf &> /dev/null; then
37
+ selected_line=$(printf "%s" "$input_data" | LANG=C.UTF-8 LC_ALL=C.UTF-8 fzf --ansi --preview "preset=\$(echo {} | awk '{print \$1}'); starship preset \$preset > $preview_config && LANG=C.UTF-8 LC_ALL=C.UTF-8 STARSHIP_CONFIG=$preview_config STARSHIP_SHELL=fish starship prompt" --preview-window bottom:30%)
38
+ else
39
+ echo "Error: 'tv' or 'fzf' not found."
40
+ exit 1
41
+ fi
42
+
43
+ if [ -n "$selected_line" ]; then
44
+ selected_preset=$(echo "$selected_line" | awk '{print $1}')
45
+ echo "Applying $selected_preset..."
46
+ starship preset "$selected_preset" -o ~/.config/starship.toml
47
+ echo "Done!"
48
+ fi
@@ -3,7 +3,7 @@ Choose a theme for Wezterm
3
3
  """
4
4
 
5
5
  from machineconfig.utils.options import choose_from_options
6
- from machineconfig.utils.path_extended import PathExtended
6
+ from pathlib import Path
7
7
  from typing import Any
8
8
  import time
9
9
  from rich.panel import Panel
@@ -52,14 +52,14 @@ def main2():
52
52
 
53
53
  def set_theme(theme: str):
54
54
  print(f"🔄 Setting WezTerm theme to: {theme}")
55
- txt_lines = PathExtended.home().joinpath(".config/wezterm/wezterm.lua").expanduser().read_text(encoding="utf-8").splitlines()
55
+ txt_lines = Path.home().joinpath(".config/wezterm/wezterm.lua").expanduser().read_text(encoding="utf-8").splitlines()
56
56
  res_lines = []
57
57
  for line in txt_lines:
58
58
  if "config.color_scheme = " in line:
59
59
  res_lines.append(f"config.color_scheme = '{theme}'")
60
60
  else:
61
61
  res_lines.append(line)
62
- PathExtended.home().joinpath(".config/wezterm/wezterm.lua").expanduser().write_text("\n".join(res_lines), encoding="utf-8")
62
+ Path.home().joinpath(".config/wezterm/wezterm.lua").expanduser().write_text("\n".join(res_lines), encoding="utf-8")
63
63
  time.sleep(0.1)
64
64
  print("💾 Configuration saved")
65
65
 
@@ -102,6 +102,7 @@ def wrap_import_in_try_except(import_line: str, pyfile: str, repo_root: Optional
102
102
  print(fr"❌ Failed to import `{pyfile}` as a module: {ex} ")
103
103
  print("⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
104
104
  import sys
105
+ from pathlib import Path
105
106
  sys.path.append(str(Path(pyfile).parent))
106
107
  if repo_root is not None:
107
108
  sys.path.append(repo_root)
@@ -19,6 +19,7 @@ class FireJobArgs:
19
19
  submit_to_cloud: bool = False
20
20
  remote: bool = False
21
21
  module: bool = False
22
+ script: bool = False
22
23
  streamlit: bool = False
23
24
  environment: str = ""
24
25
  holdDirectory: bool = False