machineconfig 6.82__py3-none-any.whl → 7.98__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 (294) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/sessions_managers/utils/maker.py +25 -13
  3. machineconfig/cluster/sessions_managers/wt_local.py +16 -221
  4. machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
  5. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  6. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  7. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  8. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  9. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  10. machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
  11. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  12. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  13. machineconfig/jobs/installer/custom/boxes.py +2 -2
  14. machineconfig/jobs/installer/custom/hx.py +75 -18
  15. machineconfig/jobs/installer/custom/yazi.py +119 -0
  16. machineconfig/jobs/installer/custom_dev/brave.py +5 -3
  17. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  18. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  19. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +1 -1
  20. machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
  21. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +27 -22
  22. machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
  23. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  24. machineconfig/jobs/installer/custom_dev/winget.py +10 -14
  25. machineconfig/jobs/installer/installer_data.json +1287 -216
  26. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  27. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  28. machineconfig/jobs/installer/package_groups.py +58 -89
  29. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  30. machineconfig/logger.py +0 -1
  31. machineconfig/profile/create_helper.py +43 -16
  32. machineconfig/profile/create_links.py +2 -1
  33. machineconfig/profile/create_links_export.py +64 -18
  34. machineconfig/profile/create_shell_profile.py +78 -127
  35. machineconfig/profile/mapper.toml +15 -8
  36. machineconfig/scripts/__init__.py +0 -4
  37. machineconfig/scripts/linux/wrap_mcfg +46 -0
  38. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  39. machineconfig/scripts/python/agents.py +52 -37
  40. machineconfig/scripts/python/ai/initai.py +1 -1
  41. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  42. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  43. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  44. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  45. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  46. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  47. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
  48. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  49. machineconfig/scripts/python/ai/solutions/generic.py +1 -1
  50. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  51. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
  52. machineconfig/scripts/python/croshell.py +77 -78
  53. machineconfig/scripts/python/devops.py +39 -21
  54. machineconfig/scripts/python/devops_navigator.py +0 -4
  55. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  56. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  57. machineconfig/scripts/python/fire_jobs.py +84 -115
  58. machineconfig/scripts/python/ftpx.py +42 -16
  59. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  60. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  61. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  62. machineconfig/scripts/python/helpers/run_py_script.py +79 -0
  63. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  64. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
  65. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  66. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  67. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  68. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  69. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  70. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +32 -13
  71. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +11 -14
  72. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  73. machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
  74. machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
  75. machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
  76. machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
  77. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
  78. machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
  79. machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
  80. machineconfig/scripts/python/helpers_devops/cli_config.py +46 -61
  81. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +67 -55
  82. machineconfig/scripts/python/helpers_devops/cli_nw.py +157 -16
  83. machineconfig/scripts/python/helpers_devops/cli_repos.py +55 -21
  84. machineconfig/scripts/python/helpers_devops/cli_self.py +98 -48
  85. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  86. machineconfig/scripts/python/helpers_devops/cli_share_server.py +80 -42
  87. machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
  88. machineconfig/scripts/python/helpers_devops/cli_utils.py +3 -128
  89. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +4 -4
  90. machineconfig/scripts/python/helpers_devops/devops_status.py +7 -19
  91. machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
  92. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  93. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
  94. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  95. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  96. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  97. machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
  98. machineconfig/scripts/python/helpers_network/address.py +132 -0
  99. machineconfig/scripts/python/{nw → helpers_network}/devops_add_ssh_key.py +24 -5
  100. machineconfig/scripts/python/{nw → helpers_network}/mount_nfs +0 -1
  101. machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
  102. machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
  103. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
  104. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
  105. machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
  106. machineconfig/scripts/python/{nw → helpers_network}/wsl_windows_transfer.py +3 -2
  107. machineconfig/scripts/python/helpers_repos/clone.py +0 -1
  108. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +46 -19
  109. machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
  110. machineconfig/scripts/python/helpers_repos/grource.py +1 -1
  111. machineconfig/scripts/python/helpers_repos/record.py +2 -1
  112. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  113. machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
  114. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +20 -13
  115. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  116. machineconfig/scripts/python/helpers_utils/path.py +185 -0
  117. machineconfig/scripts/python/interactive.py +19 -26
  118. machineconfig/scripts/python/{mcfg.py → mcfg_entry.py} +10 -0
  119. machineconfig/scripts/python/msearch.py +71 -0
  120. machineconfig/scripts/python/sessions.py +94 -25
  121. machineconfig/scripts/python/terminal.py +133 -0
  122. machineconfig/scripts/python/utils.py +28 -30
  123. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  124. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  125. machineconfig/settings/broot/conf.toml +1 -1
  126. machineconfig/settings/helix/config.toml +16 -0
  127. machineconfig/settings/helix/languages.toml +13 -4
  128. machineconfig/settings/helix/yazi-picker.sh +12 -0
  129. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  130. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  131. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  132. machineconfig/settings/lf/windows/lfrc +14 -16
  133. machineconfig/settings/marimo/marimo.toml +1 -1
  134. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  135. machineconfig/settings/shells/bash/init.sh +43 -11
  136. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  137. machineconfig/settings/shells/nushell/config.nu +2 -32
  138. machineconfig/settings/shells/nushell/env.nu +45 -6
  139. machineconfig/settings/shells/nushell/init.nu +314 -0
  140. machineconfig/settings/shells/pwsh/init.ps1 +40 -14
  141. machineconfig/settings/shells/starship/starship.toml +16 -0
  142. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  143. machineconfig/settings/shells/wt/settings.json +14 -5
  144. machineconfig/settings/shells/zsh/init.sh +17 -19
  145. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  146. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  147. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  148. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  149. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  150. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  151. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  152. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  153. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  154. machineconfig/settings/television/cable_unix/env.toml +17 -0
  155. machineconfig/settings/television/cable_unix/files.toml +11 -0
  156. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  157. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  158. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  159. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  160. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  161. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  162. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  163. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  164. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  165. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  166. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  167. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  168. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  169. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  170. machineconfig/settings/television/cable_unix/text.toml +17 -0
  171. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  172. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  173. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  174. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  175. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  176. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  177. machineconfig/settings/television/cable_windows/env.toml +17 -0
  178. machineconfig/settings/television/cable_windows/files.toml +14 -0
  179. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  180. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  181. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  182. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  183. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  184. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  185. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  186. machineconfig/settings/television/cable_windows/text.toml +17 -0
  187. machineconfig/settings/yazi/init.lua +61 -0
  188. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  189. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  190. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  191. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  192. machineconfig/settings/yazi/theme.toml +4 -0
  193. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  194. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  195. machineconfig/setup_linux/__init__.py +2 -1
  196. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
  197. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  198. machineconfig/setup_mac/__init__.py +2 -3
  199. machineconfig/setup_mac/apps_gui.sh +248 -0
  200. machineconfig/setup_windows/__init__.py +3 -3
  201. machineconfig/setup_windows/uv.ps1 +8 -1
  202. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -11
  203. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  204. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  205. machineconfig/utils/accessories.py +7 -4
  206. machineconfig/utils/code.py +99 -32
  207. machineconfig/utils/files/ascii_art.py +1 -1
  208. machineconfig/utils/files/headers.py +3 -2
  209. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  210. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  211. machineconfig/utils/installer_utils/installer_class.py +42 -99
  212. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  213. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  214. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
  215. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -61
  216. machineconfig/utils/io.py +69 -1
  217. machineconfig/utils/links.py +56 -38
  218. machineconfig/utils/meta.py +33 -18
  219. machineconfig/utils/options.py +46 -18
  220. machineconfig/utils/options_tv.py +119 -0
  221. machineconfig/utils/path_extended.py +44 -95
  222. machineconfig/utils/path_helper.py +76 -23
  223. machineconfig/utils/procs.py +1 -1
  224. machineconfig/utils/scheduler.py +20 -53
  225. machineconfig/utils/scheduling.py +0 -2
  226. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  227. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  228. machineconfig/utils/ssh.py +159 -412
  229. machineconfig/utils/ssh_utils/abc.py +5 -0
  230. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  231. machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
  232. machineconfig/utils/ssh_utils/utils.py +142 -0
  233. machineconfig/utils/ssh_utils/wsl.py +210 -0
  234. machineconfig/utils/terminal.py +1 -0
  235. machineconfig/utils/upgrade_packages.py +104 -28
  236. machineconfig/utils/ve.py +12 -4
  237. machineconfig-7.98.dist-info/METADATA +132 -0
  238. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/RECORD +259 -196
  239. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/entry_points.txt +4 -1
  240. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  241. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  242. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  243. machineconfig/scripts/linux/fzf2g +0 -21
  244. machineconfig/scripts/linux/fzfag +0 -17
  245. machineconfig/scripts/linux/fzffg +0 -25
  246. machineconfig/scripts/linux/fzfrga +0 -21
  247. machineconfig/scripts/linux/mcfgs +0 -38
  248. machineconfig/scripts/linux/other/share_smb +0 -1
  249. machineconfig/scripts/linux/skrg +0 -4
  250. machineconfig/scripts/linux/warp-cli.sh +0 -122
  251. machineconfig/scripts/linux/z_ls +0 -104
  252. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  253. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  254. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  255. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  256. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  257. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  258. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  259. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  260. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  261. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  262. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  263. machineconfig/scripts/windows/fzfrga.bat +0 -20
  264. machineconfig/scripts/windows/mcfgs.ps1 +0 -17
  265. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  266. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  267. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  268. machineconfig/settings/yazi/yazi.toml +0 -4
  269. machineconfig/setup_linux/apps.sh +0 -66
  270. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  271. machineconfig/setup_mac/apps.sh +0 -73
  272. machineconfig/setup_windows/apps.ps1 +0 -62
  273. machineconfig/utils/installer_utils/installer.py +0 -225
  274. machineconfig-6.82.dist-info/METADATA +0 -82
  275. /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  276. /machineconfig/scripts/python/{helpers_fire → ai/utils}/__init__.py +0 -0
  277. /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_agents}/__init__.py +0 -0
  278. /machineconfig/scripts/python/{nw → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  279. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
  280. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
  281. /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
  282. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
  283. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_network/__init__.py} +0 -0
  284. /machineconfig/scripts/python/{nw → helpers_network}/devops_add_identity.py +0 -0
  285. /machineconfig/scripts/python/{nw → helpers_network}/mount_drive +0 -0
  286. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive +0 -0
  287. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
  288. /machineconfig/scripts/python/{nw → helpers_network}/mount_smb +0 -0
  289. /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
  290. /machineconfig/scripts/{Restore-ThunderbirdProfile.ps1 → windows/mounts/Restore-ThunderbirdProfile.ps1} +0 -0
  291. /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  292. /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  293. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
  294. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,199 @@
1
+ import subprocess
2
+ import random
3
+ import string
4
+ import json
5
+ import shlex
6
+ import logging
7
+ from typing import Any
8
+ from pathlib import Path
9
+
10
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+ POWERSHELL_CMD = "powershell" if __import__("platform").system().lower() == "windows" else "pwsh"
15
+
16
+
17
+ def generate_random_suffix(length: int) -> str:
18
+ """Generate a random string suffix for unique PowerShell script names."""
19
+ return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
20
+
21
+
22
+ def parse_command(command: str) -> tuple[str, list[str]]:
23
+ try:
24
+ parts = shlex.split(command)
25
+ if not parts:
26
+ raise ValueError("Empty command provided")
27
+ return parts[0], parts[1:] if len(parts) > 1 else []
28
+ except ValueError as e:
29
+ logger.error(f"Error parsing command '{command}': {e}")
30
+ parts = command.split()
31
+ return parts[0] if parts else "", parts[1:] if len(parts) > 1 else []
32
+
33
+
34
+ def escape_for_wt(text: str) -> str:
35
+ """Escape text for use in Windows Terminal commands."""
36
+ text = text.replace('"', '""')
37
+ if " " in text or ";" in text or "&" in text or "|" in text:
38
+ return f'"{text}"'
39
+ return text
40
+
41
+
42
+ def validate_layout_config(layout_config: LayoutConfig) -> None:
43
+ """Validate layout configuration format and content."""
44
+ if not layout_config["layoutTabs"]:
45
+ raise ValueError("Layout must contain at least one tab")
46
+ for tab in layout_config["layoutTabs"]:
47
+ if not tab["tabName"].strip():
48
+ raise ValueError(f"Invalid tab name: {tab['tabName']}")
49
+ if not tab["command"].strip():
50
+ raise ValueError(f"Invalid command for tab '{tab['tabName']}': {tab['command']}")
51
+ if not tab["startDir"].strip():
52
+ raise ValueError(f"Invalid startDir for tab '{tab['tabName']}': {tab['startDir']}")
53
+
54
+
55
+ def generate_wt_command_string(layout_config: LayoutConfig, window_name: str) -> str:
56
+ """Generate complete Windows Terminal command string."""
57
+ command_parts = []
58
+
59
+ for i, tab in enumerate(layout_config["layoutTabs"]):
60
+ is_first = i == 0
61
+
62
+ if is_first:
63
+ tab_parts = ["wt", "-w", escape_for_wt(window_name)]
64
+ else:
65
+ tab_parts = ["new-tab"]
66
+
67
+ tab_name = tab["tabName"]
68
+ cwd = tab["startDir"]
69
+ command = tab["command"]
70
+
71
+ if cwd.startswith("~/"):
72
+ cwd = cwd.replace("~/", f"{Path.home()}/")
73
+ elif cwd == "~":
74
+ cwd = str(Path.home())
75
+
76
+ tab_parts.extend(["-d", escape_for_wt(cwd)])
77
+ tab_parts.extend(["--title", escape_for_wt(tab_name)])
78
+ tab_parts.append("--")
79
+
80
+ # Split the command into arguments
81
+ command_args = shlex.split(command)
82
+ tab_parts.extend(command_args)
83
+
84
+ command_parts.append(" ".join(tab_parts))
85
+
86
+ return " `; ".join(command_parts)
87
+
88
+
89
+ def check_wt_session_status(session_name: str) -> dict[str, Any]:
90
+ try:
91
+ ps_script = """
92
+ try {
93
+ $wtProcesses = Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue
94
+ if ($wtProcesses) {
95
+ $processInfo = @()
96
+ $wtProcesses | ForEach-Object {
97
+ $info = @{
98
+ "Id" = $_.Id
99
+ "ProcessName" = $_.ProcessName
100
+ "StartTime" = $_.StartTime.ToString()
101
+ }
102
+ $processInfo += $info
103
+ }
104
+ $processInfo | ConvertTo-Json -Depth 2
105
+ }
106
+ } catch {
107
+ # No Windows Terminal processes found
108
+ }
109
+ """
110
+
111
+ result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
112
+
113
+ if result.returncode == 0:
114
+ output = result.stdout.strip()
115
+ if output and output != "":
116
+ try:
117
+ processes = json.loads(output)
118
+ if not isinstance(processes, list):
119
+ processes = [processes]
120
+
121
+ return {"wt_running": True, "session_exists": len(processes) > 0, "session_name": session_name, "all_windows": processes, "session_windows": processes}
122
+ except Exception as e:
123
+ return {"wt_running": True, "session_exists": False, "error": f"Failed to parse process info: {e}", "session_name": session_name}
124
+ else:
125
+ return {"wt_running": False, "session_exists": False, "session_name": session_name, "all_windows": []}
126
+ else:
127
+ return {"wt_running": False, "error": result.stderr, "session_name": session_name}
128
+
129
+ except subprocess.TimeoutExpired:
130
+ return {"wt_running": False, "error": "Timeout while checking Windows Terminal processes", "session_name": session_name}
131
+ except FileNotFoundError:
132
+ return {"wt_running": False, "error": f"PowerShell ({POWERSHELL_CMD}) not found in PATH", "session_name": session_name}
133
+ except Exception as e:
134
+ return {"wt_running": False, "error": str(e), "session_name": session_name}
135
+
136
+
137
+ def check_command_status(tab_name: str, layout_config: LayoutConfig) -> dict[str, Any]:
138
+ """Check if a command is running by looking for processes."""
139
+ tab_config = None
140
+ for tab in layout_config["layoutTabs"]:
141
+ if tab["tabName"] == tab_name:
142
+ tab_config = tab
143
+ break
144
+
145
+ if tab_config is None:
146
+ return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None}
147
+
148
+ command = tab_config["command"]
149
+
150
+ try:
151
+ primary_cmd = command.split()[0] if command.strip() else ""
152
+ if not primary_cmd:
153
+ return {"status": "error", "error": "Empty command", "running": False, "command": command, "tab_name": tab_name}
154
+
155
+ ps_script = f"""
156
+ try {{
157
+ $processes = Get-Process -Name '{primary_cmd}' -ErrorAction SilentlyContinue
158
+ if ($processes) {{
159
+ $processes | ForEach-Object {{
160
+ $procInfo = @{{
161
+ "pid" = $_.Id
162
+ "name" = $_.ProcessName
163
+ "start_time" = $_.StartTime.ToString()
164
+ }}
165
+ Write-Output ($procInfo | ConvertTo-Json -Compress)
166
+ }}
167
+ }}
168
+ }} catch {{
169
+ # No processes found or other error
170
+ }}
171
+ """
172
+
173
+ result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
174
+
175
+ if result.returncode == 0:
176
+ output_lines = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()]
177
+ matching_processes = []
178
+
179
+ for line in output_lines:
180
+ if line.startswith("{") and line.endswith("}"):
181
+ try:
182
+ proc_info = json.loads(line)
183
+ matching_processes.append(proc_info)
184
+ except json.JSONDecodeError:
185
+ continue
186
+
187
+ if matching_processes:
188
+ return {"status": "running", "running": True, "processes": matching_processes, "command": command, "tab_name": tab_name}
189
+ else:
190
+ return {"status": "not_running", "running": False, "processes": [], "command": command, "tab_name": tab_name}
191
+ else:
192
+ return {"status": "error", "error": f"Command failed: {result.stderr}", "running": False, "command": command, "tab_name": tab_name}
193
+
194
+ except subprocess.TimeoutExpired:
195
+ logger.error(f"Timeout checking command status for tab '{tab_name}'")
196
+ return {"status": "timeout", "error": "Timeout checking process status", "running": False, "command": command, "tab_name": tab_name}
197
+ except Exception as e:
198
+ logger.error(f"Error checking command status for tab '{tab_name}': {e}")
199
+ return {"status": "error", "error": str(e), "running": False, "command": command, "tab_name": tab_name}
@@ -276,7 +276,9 @@ class ZellijLocalManager:
276
276
  print(f"📊 Quick Summary: {global_summary['running_commands']}/{global_summary['total_commands']} commands running across {global_summary['healthy_sessions']}/{global_summary['total_sessions']} sessions")
277
277
 
278
278
  logger.info(f"Starting monitoring routine with {wait_ms}ms intervals")
279
- sched = Scheduler(routine=routine, wait_ms=wait_ms, logger=logger)
279
+ from machineconfig.utils.scheduler import LoggerTemplate
280
+ from typing import cast
281
+ sched = Scheduler(routine=routine, wait_ms=wait_ms, logger=cast(LoggerTemplate, logger))
280
282
  sched.run()
281
283
 
282
284
  def save(self, session_id: Optional[str]) -> str:
@@ -88,8 +88,9 @@ class ZellijSessionManager:
88
88
  # Print statuses
89
89
  for i, status in enumerate(statuses):
90
90
  print(f"Manager {i}: {status}")
91
-
92
- sched = Scheduler(routine=routine, wait_ms=60_000, logger=logger)
91
+ from machineconfig.utils.scheduler import LoggerTemplate
92
+ from typing import cast
93
+ sched = Scheduler(routine=routine, wait_ms=60_000, logger=cast(LoggerTemplate, logger))
93
94
  sched.run()
94
95
 
95
96
  def save(self, session_id: Optional[str]) -> str:
@@ -53,7 +53,7 @@ class ProcessMonitor:
53
53
  command = tab_config["command"]
54
54
  try:
55
55
  check_script = self._create_process_check_script(command)
56
- remote_cmd = f"$HOME/.local/bin devops self run-python -c {shlex.quote(check_script)}"
56
+ remote_cmd = f"$HOME/.local/bin devops self python -c {shlex.quote(check_script)}"
57
57
  result = self.remote_executor.run_command(remote_cmd, timeout=15)
58
58
  if result.returncode == 0:
59
59
  try:
@@ -139,7 +139,7 @@ if __name__ == "__main__":
139
139
  check_timestamp = timestamp_result.stdout.strip() if timestamp_result.returncode == 0 else "unknown"
140
140
 
141
141
  check_script = self._create_fresh_check_script(command)
142
- remote_cmd = f"$HOME/.local/bin/devops self run-python -c {shlex.quote(check_script)}"
142
+ remote_cmd = f"$HOME/.local/bin/devops self python -c {shlex.quote(check_script)}"
143
143
  result = self.remote_executor.run_command(remote_cmd, timeout=15)
144
144
 
145
145
  if result.returncode == 0:
@@ -5,7 +5,7 @@ from typing import Optional
5
5
 
6
6
  from rich.console import Console
7
7
  from rich.panel import Panel
8
- from machineconfig.utils.installer_utils.installer_abc import WINDOWS_INSTALL_PATH
8
+ from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
9
9
 
10
10
  from machineconfig.utils.installer_utils.installer_class import Installer
11
11
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
@@ -40,7 +40,7 @@ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
40
40
  )
41
41
 
42
42
  installer = Installer(installer_data=installer_data_modified)
43
- downloaded, _version_to_be_installed = installer.download(version=version)
43
+ downloaded, _version_to_be_installed = installer.binary_download(version=version)
44
44
  decomp_path = downloaded.decompress()
45
45
  from pathlib import Path
46
46
  for item in decomp_path.rglob("*"):
@@ -3,37 +3,39 @@ Installers do not add runtime files to the machine, hence this script.
3
3
  """
4
4
 
5
5
  from machineconfig.utils.path_extended import PathExtended
6
- from machineconfig.utils.installer_utils.installer_abc import WINDOWS_INSTALL_PATH
6
+ from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
7
7
  from typing import Optional
8
8
  import platform
9
9
 
10
- from machineconfig.utils.installer_utils.installer_abc import LINUX_INSTALL_PATH
10
+ from machineconfig.utils.installer_utils.installer_locator_utils import LINUX_INSTALL_PATH
11
11
  from machineconfig.utils.installer_utils.installer_class import Installer
12
12
  from rich.console import Console
13
13
  from rich.panel import Panel
14
14
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
15
15
 
16
16
 
17
+ LANGUAGES_SUPPORTED_GRAMMER = ["python.so", "nu.so", "bash.so", "lua.so", "powershell.so"]
17
18
  config_dict: InstallerData = {
18
19
  "appName": "hx",
19
20
  "repoURL": "CMD",
20
21
  "doc": "Helix is a post-modern modal text editor.",
21
22
  "fileNamePattern": {
22
23
  "amd64": {
23
- "linux": "hx-linux-amd64.tar.xz",
24
- "macos": "hx-macos-amd64.tar.xz",
25
- "windows": "hx-windows-amd64.zip",
24
+ "linux": "helix-{version}-x86_64-linux.tar.xz",
25
+ "macos": "helix-{version}-x86_64-macos.tar.xz",
26
+ "windows": "helix-{version}-x86_64-windows.zip",
26
27
  },
27
28
  "arm64": {
28
- "linux": "hx-linux-arm64.tar.xz",
29
- "macos": "hx-macos-arm64.tar.xz",
30
- "windows": "hx-windows-arm64.zip",
29
+ "linux": "helix-{version}-arm64-linux.tar.xz",
30
+ "macos": "helix-{version}-arm64-macos.tar.xz",
31
+ "windows": "helix-{version}-arm64-windows.zip",
31
32
  },
32
33
  },
33
34
  }
34
35
 
35
36
 
36
- def main(version: Optional[str], install_lib: bool = False):
37
+ def main(installer_data: InstallerData, version: Optional[str], install_lib: bool = True):
38
+ _ = installer_data
37
39
  console = Console()
38
40
 
39
41
  console.print(Panel(f"HELIX EDITOR INSTALLER 🧬\nPlatform: {platform.system()}\nVersion: {'latest' if version is None else version}", title="Installer", expand=False))
@@ -43,7 +45,7 @@ def main(version: Optional[str], install_lib: bool = False):
43
45
  inst = Installer(installer_data=config_dict_copy)
44
46
 
45
47
  print("\n📥 [Step 1/5] Downloading Helix editor...")
46
- downloaded, _version_to_be_installed = inst.download(version=version)
48
+ downloaded, _version_to_be_installed = inst.binary_download(version=version)
47
49
  print(" ✨ Download complete.")
48
50
 
49
51
  print("\n🔍 [Step 2/5] Locating executable and components...")
@@ -57,6 +59,7 @@ def main(version: Optional[str], install_lib: bool = False):
57
59
  raise FileNotFoundError(f"Could not find 'hx' executable in {downloaded.name}")
58
60
 
59
61
  assert len(hx_file_search) == 1, f"Expected 1 'hx' executable, found {len(hx_file_search)}"
62
+
60
63
  hx_file = hx_file_search[0]
61
64
  contrib = hx_file.parent / "contrib"
62
65
  runtime = contrib.parent / "runtime"
@@ -72,9 +75,6 @@ def main(version: Optional[str], install_lib: bool = False):
72
75
  print("\n🗑️ [Step 3/5] Cleaning up previous installation (if any)...")
73
76
  runtime_path = PathExtended.home().joinpath(".config/helix/runtime")
74
77
  contrib_path = PathExtended.home().joinpath(".config/helix/contrib")
75
- runtime_path.delete(sure=True, verbose=False)
76
- contrib_path.delete(sure=True, verbose=False)
77
- print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
78
78
 
79
79
  print("\n📦 [Step 4/5] Installing Helix components...")
80
80
  target_config_dir = PathExtended.home().joinpath(".config/helix").expanduser()
@@ -84,9 +84,41 @@ def main(version: Optional[str], install_lib: bool = False):
84
84
  target_bin_path = PathExtended(LINUX_INSTALL_PATH) if platform.system() == "Linux" else PathExtended("/usr/local/bin")
85
85
  exe_name = "hx"
86
86
  hx_file.move(folder=target_bin_path, overwrite=True)
87
+
88
+ # Always install contrib (regardless of install_lib flag) — treat it like the executable.
89
+ contrib_path.delete(sure=True, verbose=False)
90
+ contrib.move(folder=target_config_dir, overwrite=True)
91
+
92
+ # Install runtime only if install_lib is True. When copying runtime, copy all subfolders
93
+ # except 'grammars' (for which we only copy the specific python.so file if present).
87
94
  if install_lib:
88
- contrib.move(folder=target_config_dir, overwrite=True)
89
- runtime.move(folder=target_config_dir, overwrite=True)
95
+ runtime_path.delete(sure=True, verbose=False)
96
+ print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
97
+ target_runtime = target_config_dir.joinpath("runtime")
98
+ target_runtime.mkdir(parents=True, exist_ok=True)
99
+
100
+ # iterate runtime children and copy selectively
101
+ for child in runtime.iterdir():
102
+ # skip non-existent or weird entries
103
+ if not child.exists():
104
+ continue
105
+ if child.name == "grammars":
106
+ # copy only the specific language files from runtime/grammars if they exist
107
+ for a_language in LANGUAGES_SUPPORTED_GRAMMER:
108
+ lang_file = child.joinpath(a_language)
109
+ if lang_file.exists() and lang_file.is_file():
110
+ dest = target_runtime.joinpath("grammars")
111
+ lang_file.copy(folder=dest, overwrite=True)
112
+ else:
113
+ # copy the whole child (file or directory) into target_runtime
114
+ # for directories, copy will create target_runtime/<child.name>
115
+ try:
116
+ child.copy(folder=target_runtime, overwrite=True)
117
+ except Exception:
118
+ # fallback: try copying contents if it's a directory
119
+ if child.is_dir():
120
+ for sub in child.iterdir():
121
+ sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
90
122
  system_name = "Linux" if platform.system() == "Linux" else "macOS"
91
123
  console.print(
92
124
  Panel(
@@ -102,9 +134,34 @@ def main(version: Optional[str], install_lib: bool = False):
102
134
  target_bin_path = PathExtended(WINDOWS_INSTALL_PATH)
103
135
  exe_name = "hx.exe"
104
136
  hx_file.move(folder=target_bin_path, overwrite=True)
137
+
138
+ # Always install contrib (regardless of install_lib flag)
139
+ contrib_path.delete(sure=True, verbose=False)
140
+ contrib.move(folder=target_config_dir, overwrite=True)
141
+
142
+ # Install runtime only if install_lib is True. Copy selectively as on POSIX.
105
143
  if install_lib:
106
- contrib.move(folder=target_config_dir, overwrite=True)
107
- runtime.move(folder=target_config_dir, overwrite=True)
144
+ runtime_path.delete(sure=True, verbose=False)
145
+ print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
146
+ target_runtime = target_config_dir.joinpath("runtime")
147
+ target_runtime.mkdir(parents=True, exist_ok=True)
148
+
149
+ for child in runtime.iterdir():
150
+ if not child.exists():
151
+ continue
152
+ if child.name == "grammars":
153
+ for a_language in LANGUAGES_SUPPORTED_GRAMMER:
154
+ lang_file = child.joinpath(a_language)
155
+ if lang_file.exists() and lang_file.is_file():
156
+ dest = target_runtime.joinpath("grammars")
157
+ lang_file.copy(folder=dest, overwrite=True)
158
+ else:
159
+ try:
160
+ child.copy(folder=target_runtime, overwrite=True)
161
+ except Exception:
162
+ if child.is_dir():
163
+ for sub in child.iterdir():
164
+ sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
108
165
  console.print(
109
166
  Panel(
110
167
  f"""✅ SUCCESS | Helix editor installed successfully on Windows!
@@ -137,4 +194,4 @@ def main(version: Optional[str], install_lib: bool = False):
137
194
 
138
195
 
139
196
  if __name__ == "__main__":
140
- main(version=None)
197
+ pass
@@ -0,0 +1,119 @@
1
+
2
+ from typing import Optional
3
+ import platform
4
+ from machineconfig.utils.installer_utils.installer_class import Installer
5
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
6
+
7
+
8
+ installer_standard: InstallerData = {
9
+ "appName": "yazi",
10
+ "repoURL": "https://github.com/sxyazi/yazi",
11
+ "doc": "⚡ Blazing Fast Terminal File Manager.",
12
+ "fileNamePattern": {
13
+ "amd64": {
14
+ "linux": "yazi-x86_64-unknown-linux-musl.zip",
15
+ "macos": "yazi-x86_64-apple-darwin.zip",
16
+ "windows": "yazi-x86_64-pc-windows-msvc.zip"
17
+ },
18
+ "arm64": {
19
+ "linux": "yazi-aarch64-unknown-linux-musl.zip",
20
+ "macos": "yazi-aarch64-apple-darwin.zip",
21
+ "windows": "yazi-aarch64-pc-windows-msvc.zip"
22
+ }
23
+ }
24
+ }
25
+
26
+ def main(installer_data: InstallerData, version: Optional[str]):
27
+ _ = installer_data
28
+ inst = Installer(installer_data=installer_standard)
29
+ inst.install(version=version)
30
+
31
+ print("\n" * 5)
32
+ print("Installing Yazi plugins and flavors...")
33
+ installer_standard["appName"] = "ya"
34
+ inst = Installer(installer_data=installer_standard)
35
+ inst.install(version=version)
36
+
37
+ print("\n" * 5)
38
+ print("Cloning Yazi plugins and flavors repositories...")
39
+
40
+ from pathlib import Path
41
+ system_name = platform.system().lower()
42
+ home_dir = Path.home()
43
+ if system_name == "windows":
44
+ yazi_plugins_dir = home_dir.joinpath("AppData", "Roaming", "yazi", "config")
45
+ else:
46
+ yazi_plugins_dir = home_dir.joinpath(".config", "yazi")
47
+
48
+ yazi_plugins_path = yazi_plugins_dir.joinpath("plugins")
49
+ yazi_flavours_path = yazi_plugins_dir.joinpath("flavors")
50
+ if yazi_plugins_path.exists():
51
+ if yazi_plugins_path.is_file():
52
+ yazi_plugins_path.unlink()
53
+ elif yazi_plugins_path.is_dir():
54
+ import shutil
55
+ shutil.rmtree(yazi_plugins_path)
56
+ yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
57
+ import git
58
+ git.Repo.clone_from("https://github.com/yazi-rs/plugins", yazi_plugins_path)
59
+ if yazi_flavours_path.exists():
60
+ if yazi_flavours_path.is_file():
61
+ yazi_flavours_path.unlink()
62
+ elif yazi_flavours_path.is_dir():
63
+ import shutil
64
+ shutil.rmtree(yazi_flavours_path)
65
+ yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
66
+ import git
67
+ git.Repo.clone_from("https://github.com/yazi-rs/flavors", yazi_flavours_path)
68
+
69
+ # previewers:
70
+ if platform.system() == "Linux":
71
+ script = r"""
72
+ sudo nala install poppler-utils -y || true # For PDF preview, needed by yazi.
73
+ """
74
+ from machineconfig.utils.code import run_shell_script
75
+ run_shell_script(script)
76
+ elif platform.system() == "Darwin":
77
+ script = r"""
78
+ brew install --upgrade poppler || true # For PDF preview, needed by yazi.
79
+ """
80
+ from machineconfig.utils.code import run_shell_script
81
+ run_shell_script(script)
82
+ elif platform.system() == "Windows":
83
+ popler_installer: InstallerData = {
84
+ "appName": "poppler",
85
+ "repoURL": "https://github.com/oschwartz10612/poppler-windows",
86
+ "doc": "PDF rendering library - Windows builds.",
87
+ "fileNamePattern": {
88
+ "amd64": {
89
+ "windows": "Release-{version}.zip",
90
+ "linux": None,
91
+ "macos": None,
92
+ },
93
+ "arm64": {
94
+ "windows": None,
95
+ "linux": None,
96
+ "macos": None,
97
+ }
98
+ }
99
+ }
100
+ inst_poppler = Installer(installer_data=popler_installer)
101
+ inst_poppler.install(version=None)
102
+ # assuming ouch is already installed
103
+ script = """
104
+ ya pkg add 'ndtoan96/ouch' # make ouch default previewer in yazi for compressed files
105
+ ya pkg add 'AnirudhG07/rich-preview' # rich-cli based previewer for yazi
106
+ ya pack -a 'stelcodes/bunny'
107
+ ya pkg add 'Tyarel8/goto-drives'
108
+ ya pkg add 'uhs-robert/sshfs'
109
+ ya pkg add 'boydaihungst/file-extra-metadata'
110
+ ya pkg add 'wylie102/duckdb'
111
+
112
+
113
+ """
114
+ from machineconfig.utils.code import run_shell_script
115
+ run_shell_script(script)
116
+
117
+
118
+ if __name__ == "__main__":
119
+ pass
@@ -27,7 +27,7 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
27
27
  console.print("🪟 Installing Brave Browser on Windows using winget...", style="bold")
28
28
  program = """
29
29
 
30
- winget install --Name "Brave Browser" --Id Brave.Brave --source winget --accept-package-agreements --accept-source-agreements
30
+ winget install --no-upgrade --name "Brave" --Id "Brave.Brave" --source winget --scope user --accept-package-agreements --accept-source-agreements
31
31
 
32
32
  """
33
33
  elif platform.system() in ["Linux", "Darwin"]:
@@ -70,9 +70,11 @@ winget install --Name "Brave Browser" --Id Brave.Brave --source winget --accept-
70
70
  )
71
71
 
72
72
  console.print("🔄 EXECUTING | Running Brave Browser installation...", style="bold yellow")
73
+ from machineconfig.utils.code import print_code, run_shell_script
73
74
  try:
74
- subprocess.run(program, shell=True, text=True, check=True)
75
- console.print("✅ Brave Browser installation completed successfully", style="bold green")
75
+ print_code(code=program, lexer="shell", desc="Installation Script Preview")
76
+ run_shell_script(program)
77
+ console.print("✅ Installation completed successfully!", style="bold green")
76
78
  except subprocess.CalledProcessError as e:
77
79
  console.print(f"❌ Installation failed with exit code {e.returncode}", style="bold red")
78
80
  raise
@@ -0,0 +1,23 @@
1
+
2
+ from typing import Optional
3
+ import platform
4
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
5
+
6
+
7
+ def main(installer_data: InstallerData, version: Optional[str]):
8
+ _ = installer_data, version
9
+ system = platform.system()
10
+ if system == "Windows":
11
+ raise NotImplementedError("Installer is not yet implemented for Windows.")
12
+ elif system == "Linux":
13
+ from pathlib import Path
14
+ import machineconfig.jobs.installer as module
15
+ program = Path(module.__file__).parent.joinpath("linux_scripts/cloudflare_warp_cli.sh").read_text(encoding="utf-8")
16
+ elif system == "Darwin":
17
+ program = "brew install --cask cloudflare-warp"
18
+ else:
19
+ raise NotImplementedError(f"Unsupported platform: {system}")
20
+ import subprocess
21
+ subprocess.run(program, shell=True, check=True)
22
+ return f"Cloudflare WARP CLI installed successfully on {system}."
23
+
@@ -32,7 +32,10 @@ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
32
32
  install_script = """brew install --cask visual-studio-code"""
33
33
  elif platform.system() == "Windows":
34
34
  console.print("🪟 Installing VS Code on Windows using winget...", style="bold")
35
- install_script = """winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements"""
35
+ install_script = """
36
+ winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements
37
+
38
+ """
36
39
  else:
37
40
  error_msg = f"Unsupported platform: {platform.system()}"
38
41
  console.print(
@@ -25,6 +25,6 @@ installer_data: InstallerData = {
25
25
 
26
26
  def main(installer_data: InstallerData, version: Optional[str]) -> None:
27
27
  _ = version
28
- from machineconfig.utils.installer import Installer
28
+ from machineconfig.utils.installer_utils.installer_runner import Installer
29
29
  installer = Installer(installer_data)
30
30
  installer.install(version=None)
@@ -108,4 +108,4 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
108
108
 
109
109
 
110
110
  if __name__ == "__main__":
111
- pass
111
+ main(1, None) # type: ignore