machineconfig 8.14__py3-none-any.whl → 8.50__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 (273) 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 +225 -140
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +10 -9
  15. machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
  16. machineconfig/jobs/installer/python_scripts/code.py +10 -8
  17. machineconfig/jobs/installer/python_scripts/hx.py +30 -13
  18. machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
  19. machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
  20. machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
  21. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  22. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
  23. machineconfig/jobs/scripts_dynamic/a.py +413 -10
  24. machineconfig/profile/create_links.py +77 -20
  25. machineconfig/profile/create_links_export.py +63 -58
  26. machineconfig/profile/mapper_data.toml +30 -0
  27. machineconfig/profile/mapper_dotfiles.toml +253 -0
  28. machineconfig/scripts/python/agents.py +70 -172
  29. machineconfig/scripts/python/ai/initai.py +3 -1
  30. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  31. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  32. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
  33. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  34. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  35. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  36. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  37. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  38. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  39. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  40. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  41. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  42. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  43. machineconfig/scripts/python/cloud.py +58 -11
  44. machineconfig/scripts/python/croshell.py +4 -156
  45. machineconfig/scripts/python/devops.py +57 -40
  46. machineconfig/scripts/python/devops_navigator.py +17 -3
  47. machineconfig/scripts/python/fire_jobs.py +8 -207
  48. machineconfig/scripts/python/ftpx.py +5 -225
  49. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  50. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  51. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  52. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  53. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  54. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  55. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  56. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  57. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  58. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
  59. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  60. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  61. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
  62. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  63. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  64. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  65. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  66. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  67. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
  68. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  69. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  70. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
  71. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
  72. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  73. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +40 -23
  74. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  75. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  76. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  77. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  78. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  79. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  80. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
  81. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
  82. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  84. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  85. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  86. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  87. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  88. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  89. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  90. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  91. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  92. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  93. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  94. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  95. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  96. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  97. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  98. machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
  99. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
  100. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
  101. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  102. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  103. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  104. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  105. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  106. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  107. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  108. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  109. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +117 -33
  110. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  111. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  112. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  113. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  114. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  115. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  116. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  117. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
  118. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  119. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  120. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  121. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +47 -26
  122. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  123. machineconfig/scripts/python/mcfg_entry.py +133 -48
  124. machineconfig/scripts/python/msearch.py +15 -61
  125. machineconfig/scripts/python/sessions.py +59 -194
  126. machineconfig/scripts/python/terminal.py +18 -96
  127. machineconfig/scripts/python/utils.py +101 -20
  128. machineconfig/settings/atuin/config.toml +294 -0
  129. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  130. machineconfig/settings/linters/.ruff.toml +1 -0
  131. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  132. machineconfig/settings/shells/bash/init.sh +6 -3
  133. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  134. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  135. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  136. machineconfig/settings/shells/wt/settings.json +20 -7
  137. machineconfig/settings/shells/zsh/init.sh +25 -4
  138. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  139. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  140. machineconfig/settings/tv/config.toml +234 -0
  141. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  142. machineconfig/settings/wsl/.wslconfig +5 -30
  143. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  144. machineconfig/settings/zellij/layouts/st.kdl +2 -2
  145. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  146. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  147. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  148. machineconfig/setup_mac/__init__.py +0 -2
  149. machineconfig/setup_windows/__init__.py +0 -1
  150. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  151. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  152. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  153. machineconfig/type_hinting/sql/__init__.py +1 -0
  154. machineconfig/type_hinting/sql/base.py +216 -0
  155. machineconfig/type_hinting/sql/core_schema.py +64 -0
  156. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  157. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  158. machineconfig/type_hinting/typedict/__init__.py +1 -0
  159. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  160. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  161. machineconfig/type_hinting/typedict/generators.py +231 -0
  162. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  163. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  164. machineconfig/utils/accessories.py +24 -0
  165. machineconfig/utils/code.py +41 -13
  166. machineconfig/utils/files/ascii_art.py +10 -14
  167. machineconfig/utils/files/headers.py +3 -5
  168. machineconfig/utils/files/read.py +8 -1
  169. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  170. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  171. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  172. machineconfig/utils/installer_utils/installer_class.py +12 -4
  173. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  174. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  175. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  176. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  177. machineconfig/utils/io.py +25 -8
  178. machineconfig/utils/meta.py +6 -4
  179. machineconfig/utils/options.py +49 -19
  180. machineconfig/utils/options_utils/__init__.py +0 -0
  181. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  182. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  183. machineconfig/utils/options_utils/tv_options.py +37 -0
  184. machineconfig/utils/path_extended.py +6 -6
  185. machineconfig/utils/scheduler.py +8 -2
  186. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  187. machineconfig/utils/source_of_truth.py +6 -1
  188. machineconfig/utils/ssh.py +69 -18
  189. machineconfig/utils/ssh_utils/abc.py +1 -1
  190. machineconfig/utils/ssh_utils/copy_from_here.py +17 -12
  191. machineconfig/utils/ssh_utils/utils.py +21 -5
  192. machineconfig/utils/ssh_utils/wsl.py +107 -170
  193. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  194. machineconfig/utils/upgrade_packages.py +4 -8
  195. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/METADATA +29 -22
  196. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/RECORD +251 -211
  197. machineconfig/jobs/installer/check_installations.py +0 -248
  198. machineconfig/profile/backup.toml +0 -49
  199. machineconfig/profile/mapper.toml +0 -263
  200. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  201. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  202. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  203. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
  204. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  205. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  206. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  207. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  208. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  209. machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
  210. machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
  211. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  212. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  213. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  214. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  215. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  216. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  217. machineconfig/utils/options_tv.py +0 -119
  218. machineconfig/utils/tst.py +0 -20
  219. /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
  220. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  221. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  222. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  223. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  224. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  225. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  226. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  227. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  228. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  229. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  230. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  231. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
  232. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
  233. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
  234. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
  235. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
  236. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
  237. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  238. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  239. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
  240. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  241. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  242. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  243. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  244. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  245. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  246. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  247. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  248. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  249. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  250. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  251. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  252. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  253. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  254. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
  255. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
  256. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  257. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  258. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  259. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  260. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  261. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  262. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  263. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  264. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  265. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  266. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  267. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  268. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  269. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  270. /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
  271. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/WHEEL +0 -0
  272. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/entry_points.txt +0 -0
  273. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/top_level.txt +0 -0
@@ -2,16 +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
5
 
16
6
 
17
7
  """
@@ -62,40 +52,6 @@ def display_header() -> None:
62
52
  console.print()
63
53
  console.print(Align.center(Text(bug_report, style="dim white")))
64
54
  console.print()
65
- def display_completion_message() -> None:
66
- completion_text = Text("INSTALLATION COMPLETE", style="bold green")
67
- subtitle_text = Text("System setup finished successfully", style="italic green")
68
- 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)))
69
- def display_dotfiles_instructions() -> None:
70
- header_text = Text("DOTFILES MIGRATION", style="bold yellow")
71
- subtitle_text = Text("Configuration transfer options", style="italic yellow")
72
- instructions = """
73
- On remote, run:
74
- rm ~/dotfiles.zip || true
75
- ouch c ~/dotfiles dotfiles.zip
76
- uvx wormhole-magic send ~/dotfiles.zip
77
- On new machine, run:
78
- cd $HOME; uvx wormhole-magic receive dotfiles.zip --accept-file
79
- ouch d ~/dotfiles.zip
80
-
81
- 🖱️ [bold blue]Method 1: USING MOUSE WITHOUT KB OR BROWSER SHARE[/bold blue]
82
- On original machine, run:
83
- [dim]cd ~/dotfiles/creds/msc
84
- easy-sharing . --password rew --username al[/dim]
85
- Then open brave on new machine to get MouseWithoutBorders password
86
-
87
- 🔐 [bold blue]Method 2: USING SSH[/bold blue]
88
- FROM REMOTE, RUN:
89
- [dim]fptx ~/dotfiles $USER@$(hostname):^ -z
90
- # OR, using IP address if router has not yet found the hostname:
91
- fptx ~/dotfiles $USER@$(hostname -I | awk '{print $1}'):^ -z[/dim]
92
-
93
- ☁️ [bold blue]Method 3: USING INTERNET SECURE SHARE[/bold blue]
94
- [dim]cd ~
95
- cloud copy SHARE_URL . --config ss[/dim]
96
- (requires symlinks to be created first)
97
- """
98
- console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
99
55
 
100
56
 
101
57
  def get_installation_choices() -> list[str]:
@@ -129,7 +85,7 @@ def execute_installations(selected_options: list[str]) -> None:
129
85
 
130
86
  if "install_machineconfig" in selected_options:
131
87
  console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
132
- from machineconfig.scripts.python.helpers_devops.cli_self import install
88
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_self import install
133
89
  install(copy_assets=True, dev=False)
134
90
 
135
91
  if "install_ssh_server" in selected_options:
@@ -150,8 +106,8 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
150
106
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
151
107
  create_default_shell_profile()
152
108
  console.print("✅ Shell profile configured successfully", style="bold green")
153
- from machineconfig.profile.create_links_export import main_public_from_parser
154
- 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")
155
111
  if platform.system() == "Windows":
156
112
  from machineconfig.jobs.installer.python_scripts.nerfont_windows_helper import install_nerd_fonts
157
113
  install_nerd_fonts()
@@ -160,20 +116,66 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
160
116
  except Exception as e:
161
117
  console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
162
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
+ options: list[str] = [
134
+ "I have sorted out dotfiles migration already and want to proceed.",
135
+ "Exit now and sort out dotfiles migration first.",
136
+ "I already exposed dotfiles over LAN, let's fetch them now.",
137
+ "I wanted to bring them using SSH SCP now.",
138
+ ]
139
+ answer = questionary.select("⚠️ DOTFILES NOT FOUND. How do you want to proceed?", choices=options).ask()
140
+ if answer == options[0]:
141
+ console.print("✅ Proceeding as per user confirmation.", style="bold green")
142
+ elif answer == options[1]:
143
+ console.print("❌ Exiting for dotfiles migration.", style="bold red")
144
+ sys.exit(0)
145
+ elif answer == options[2]:
146
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
147
+ import_dotfiles(use_ssh=False)
148
+ elif answer == options[3]:
149
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
150
+ import_dotfiles(use_ssh=True)
151
+ if not Path.home().joinpath("dotfiles").exists():
152
+ console.print("❌ Dotfiles directory still not found after attempted import. Exiting...", style="bold red")
153
+ sys.exit(1)
154
+ # devops config sync --sensitivity public --method symlink --on-conflict overwrite-default-path
155
+ # devops config sync --sensitivity private --method symlink --on-conflict overwrite-default-path
156
+ from machineconfig.profile.create_links_export import main_from_parser
157
+ main_from_parser(sensitivity="private", method="symlink", on_conflict="overwrite-default-path", which="all")
158
+
163
159
  if "retrieve_repositories" in selected_options:
164
160
  console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
165
- from machineconfig.scripts.python.helpers_devops import cli_repos
166
- cli_repos.clone(directory=str(Path.home() / "code"), cloud=None)
161
+ from machineconfig.scripts.python.helpers.helpers_devops import cli_repos
162
+ cli_repos.clone(directory=str(Path.home() / "code"))
167
163
 
168
164
  if "retrieve_data" in selected_options:
169
165
  console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
170
166
  console.print("🔧 Retrieving backup data", style="bold cyan")
171
167
  try:
172
- from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
173
- main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None)
168
+ from machineconfig.scripts.python.helpers.helpers_devops.cli_backup_retrieve import main_backup_retrieve
169
+ main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None, repo="all")
174
170
  console.print("✅ Backup data retrieved successfully", style="bold green")
175
171
  except Exception as e:
176
172
  console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
173
+ # echo # 📧 Thunderbird Setup Note:
174
+ # Run after installing Thunderbird and starting it once:
175
+ # cd ~/AppData/Roaming/ThunderBird/Profiles
176
+ # $res = ls
177
+ # $name = $res[0].Name
178
+ # mv $backup_folder $name
177
179
 
178
180
 
179
181
  def main() -> None:
@@ -188,7 +190,21 @@ def main() -> None:
188
190
  console.print("❌ Installation cancelled.", style="bold red")
189
191
  sys.exit(0)
190
192
  execute_installations(selected_options=selected_options)
191
- display_completion_message()
193
+ completion_text = Text("INSTALLATION COMPLETE", style="bold green")
194
+ subtitle_text = Text("System setup finished successfully", style="italic green")
195
+ 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)))
196
+
197
+ from machineconfig.utils.code import exit_then_run_shell_script
198
+ if platform.system() == "Windows":
199
+ reload_init_script = "pwsh $PROFILE"
200
+ elif platform.system() == "Darwin":
201
+ reload_init_script = "source $HOME/.zshrc"
202
+ elif platform.system() == "Linux":
203
+ reload_init_script = "source $HOME/.bashrc"
204
+ else:
205
+ reload_init_script = ""
206
+ exit_then_run_shell_script(reload_init_script)
207
+
192
208
 
193
209
 
194
210
  if __name__ == "__main__":
@@ -22,22 +22,50 @@ import typer
22
22
  from typing import Annotated, Optional, Literal
23
23
 
24
24
 
25
-
26
- def run_py_script(name: Annotated[str, typer.Argument(help="Name of script to run, e.g., 'a' for a.py, or command to execute")] = "",
25
+ 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
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
28
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of scripts to run")] = False,
29
29
  command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
30
- # use_machineconfig_env: Annotated[bool, typer.Option(..., "--use-machineconfig-env/--no-use-machineconfig-env", "-m/-nm", help="Whether to use the machineconfig python environment")] = False
30
+ list_scripts: Annotated[bool, typer.Option(..., "--list", "-l", help="List available scripts in all locations")] = False,
31
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
+
32
42
  if not interactive and not name:
33
43
  typer.echo("❌ ERROR: You must provide a script name or use --interactive option to select a script.")
34
44
  raise typer.Exit(code=1)
45
+ target_file: Optional[Path] = None
35
46
 
36
- from pathlib import Path
37
- if command:
38
- exec(name)
39
- return
40
- if Path(name).is_file():
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():
41
69
  if name.endswith(".py"):
42
70
  import machineconfig
43
71
  import subprocess
@@ -45,7 +73,11 @@ def run_py_script(name: Annotated[str, typer.Argument(help="Name of script to ru
45
73
  subprocess.run([sys.executable, name], cwd=machineconfig.__path__[0])
46
74
  return
47
75
  else:
48
- raise RuntimeError(f"File '{name}' is not a python (.py) file.")
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)
49
81
 
50
82
  from machineconfig.utils.source_of_truth import CONFIG_ROOT, LIBRARY_ROOT, DEFAULTS_PATH
51
83
  private_root = Path.home().joinpath("dotfiles/scripts") # local directory
@@ -94,62 +126,45 @@ def run_py_script(name: Annotated[str, typer.Argument(help="Name of script to ru
94
126
  suffixes = [".py"]
95
127
 
96
128
  # Finding target file
97
- target_file: Optional[Path] = None
98
129
  potential_matches: list[Path] = []
99
- for a_root in roots:
100
- for a_suffix in suffixes:
101
- if a_root.joinpath(f"{name}{a_suffix}").is_file():
102
- target_file = a_root.joinpath(f"{name}{a_suffix}")
103
- break # perfect match
104
- potential_matches += [a_file for a_file in a_root.rglob(f"*{name}*{a_suffix}") if a_file.is_file()]
105
-
106
- if target_file is None and where in ["dynamic", "d"] and not interactive:
107
- # src/machineconfig/jobs/scripts/python_scripts/a.py
108
- if "." in name:
109
- resolved_names: list[str] = [name]
110
- else:
111
- resolved_names = [f"{name}{a_suffix}" for a_suffix in [".py", ".sh", "", ".ps1", ".bat", ".cmd"]]
112
- for a_resolved_name in resolved_names:
113
- try:
114
- url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/jobs/scripts_dynamic/{a_resolved_name}"""
115
- print(f"Fetching temporary script from {url} ...")
116
- import requests
117
- response = requests.get(url)
118
- if response.status_code != 200:
119
- print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
120
- raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
121
- script_content = response.text
122
- target_file = Path.home().joinpath("tmp_results", "tmp_scripts", "python", f"{name}.py")
123
- target_file.parent.mkdir(parents=True, exist_ok=True)
124
- target_file.write_text(script_content, encoding="utf-8")
125
- except Exception as _e:
126
- pass
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()]
127
137
 
128
138
  if target_file is None:
129
- print(f"Warning: Could not find script '{name}'. Checked {len(potential_matches)} candidate files, trying interactively:")
130
- from machineconfig.utils.options import choose_from_options
131
- # options = ["/".join(p.parts[-3:]) for p in potential_matches]
132
-
133
- options = potential_matches
134
- chosen_file_part = choose_from_options(options, multi=False, msg="Select the script to run:", tv=True)
135
- for an_option, a_path in zip(options, potential_matches):
136
- if chosen_file_part == an_option:
137
- target_file = a_path
138
- break
139
- assert target_file is not None, "No script selected."
140
- target_file = Path(target_file)
141
-
142
- print(f"✅ Found script at: {target_file}")
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))
143
157
  if target_file.suffix == ".py":
144
158
  from machineconfig.utils.code import get_uv_command_executing_python_file, exit_then_run_shell_script
145
159
  shell_script = get_uv_command_executing_python_file(python_file=str(target_file), uv_project_dir=None, uv_with=None, prepend_print=False)
146
160
  exit_then_run_shell_script(script=shell_script)
147
161
  else:
148
- from machineconfig.utils.code import run_shell_file
149
- run_shell_file(script_path=str(target_file), clean_env=False)
162
+ from machineconfig.utils.code import exit_then_run_shell_file
163
+ exit_then_run_shell_file(script_path=str(target_file), strict=True)
150
164
 
151
165
 
152
- def copy_script_to_local(name: Annotated[str, typer.Argument(help="Name of the temporary python script to copy, e.g., 'a' for a.py")],
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")],
153
168
  alias: Annotated[Optional[str], typer.Option("--alias", "-a", help="Whether to create call it a different name locally")] = None
154
169
  ) -> None:
155
170
  """
@@ -159,14 +174,16 @@ def copy_script_to_local(name: Annotated[str, typer.Argument(help="Name of the t
159
174
  import requests
160
175
  response = requests.get(url)
161
176
  if response.status_code != 200:
162
- print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
163
- raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
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)
164
181
  script_content = response.text
165
182
  from machineconfig.utils.source_of_truth import CONFIG_ROOT
166
183
  local_path = CONFIG_ROOT.joinpath(f"scripts_python/{alias or name}.py")
167
184
  with open(local_path, "w") as f:
168
185
  f.write(script_content)
169
- print(f"✅ Script '{name}.py' has been copied to '{local_path}'.")
186
+ typer.echo(typer.style(f"✅ Script '{name}.py' has been copied to '{local_path}'.", fg=typer.colors.GREEN))
170
187
 
171
188
 
172
189
  def get_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