machineconfig 7.50__py3-none-any.whl → 8.14__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 (298) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/sessions_managers/utils/maker.py +23 -11
  3. machineconfig/cluster/sessions_managers/wt_local_manager.py +22 -19
  4. machineconfig/cluster/sessions_managers/wt_remote_manager.py +3 -1
  5. machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
  6. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  7. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  8. machineconfig/jobs/installer/installer_data.json +1185 -165
  9. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  10. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  11. machineconfig/jobs/installer/package_groups.py +52 -84
  12. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  13. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -2
  14. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
  15. machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
  16. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
  17. machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
  18. machineconfig/jobs/installer/{custom → python_scripts}/hx.py +16 -12
  19. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
  20. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
  21. machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
  22. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
  23. machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
  24. machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
  25. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
  26. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  27. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  28. machineconfig/jobs/scripts_dynamic/a.py +25 -0
  29. machineconfig/logger.py +0 -1
  30. machineconfig/profile/create_helper.py +21 -22
  31. machineconfig/profile/create_links_export.py +25 -11
  32. machineconfig/profile/create_shell_profile.py +14 -3
  33. machineconfig/profile/mapper.toml +8 -6
  34. machineconfig/scripts/__init__.py +0 -4
  35. machineconfig/scripts/linux/wrap_mcfg +20 -21
  36. machineconfig/scripts/python/agents.py +74 -50
  37. machineconfig/scripts/python/ai/initai.py +1 -1
  38. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  39. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  40. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
  41. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  42. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  43. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  44. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  45. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
  46. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  47. machineconfig/scripts/python/ai/solutions/generic.py +1 -1
  48. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  49. machineconfig/scripts/python/cloud.py +6 -6
  50. machineconfig/scripts/python/croshell.py +67 -60
  51. machineconfig/scripts/python/devops.py +41 -21
  52. machineconfig/scripts/python/devops_navigator.py +0 -4
  53. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  54. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  55. machineconfig/scripts/python/fire_jobs.py +95 -67
  56. machineconfig/scripts/python/ftpx.py +44 -17
  57. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  58. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  59. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  60. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  61. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +1 -1
  62. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +9 -7
  63. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +21 -8
  64. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +0 -12
  65. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +30 -11
  66. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +9 -2
  67. machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  68. machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  69. machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  70. machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
  71. machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  72. machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
  73. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +8 -4
  74. machineconfig/scripts/python/helpers_agents/templates/template.sh +18 -8
  75. machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
  76. machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
  77. machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
  78. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
  79. machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
  80. machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
  81. machineconfig/scripts/python/helpers_devops/cli_config.py +19 -25
  82. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +22 -13
  83. machineconfig/scripts/python/helpers_devops/cli_nw.py +113 -26
  84. machineconfig/scripts/python/helpers_devops/cli_repos.py +37 -11
  85. machineconfig/scripts/python/helpers_devops/cli_self.py +95 -42
  86. machineconfig/scripts/python/helpers_devops/cli_share_file.py +9 -9
  87. machineconfig/scripts/python/helpers_devops/cli_share_server.py +13 -12
  88. machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
  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/run_script.py +180 -0
  92. machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
  93. machineconfig/scripts/python/helpers_fire_command/file_wrangler.py +2 -19
  94. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +1 -0
  95. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +25 -15
  96. machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfg +3 -3
  97. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +58 -1
  98. machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
  99. machineconfig/scripts/python/helpers_network/address.py +176 -0
  100. machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
  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/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
  104. machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
  105. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
  106. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
  107. machineconfig/scripts/python/helpers_repos/clone.py +0 -1
  108. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -5
  109. machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
  110. machineconfig/scripts/python/helpers_repos/record.py +2 -1
  111. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  112. machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
  113. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +19 -13
  114. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  115. machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
  116. machineconfig/scripts/python/helpers_utils/python.py +187 -0
  117. machineconfig/scripts/python/interactive.py +30 -31
  118. machineconfig/scripts/python/{machineconfig.py → mcfg_entry.py} +4 -5
  119. machineconfig/scripts/python/msearch.py +57 -6
  120. machineconfig/scripts/python/sessions.py +100 -31
  121. machineconfig/scripts/python/terminal.py +26 -17
  122. machineconfig/scripts/python/utils.py +17 -15
  123. machineconfig/scripts/windows/wrap_mcfg.ps1 +6 -3
  124. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  125. machineconfig/settings/linters/.ruff.toml +1 -1
  126. machineconfig/settings/shells/bash/init.sh +29 -2
  127. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  128. machineconfig/settings/shells/nushell/config.nu +2 -2
  129. machineconfig/settings/shells/nushell/env.nu +45 -6
  130. machineconfig/settings/shells/nushell/init.nu +282 -95
  131. machineconfig/settings/shells/pwsh/init.ps1 +1 -0
  132. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  133. machineconfig/settings/shells/zsh/init.sh +1 -8
  134. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  135. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  136. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  137. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  138. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  139. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  140. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  141. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  142. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  143. machineconfig/settings/television/cable_unix/env.toml +17 -0
  144. machineconfig/settings/television/cable_unix/files.toml +11 -0
  145. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  146. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  147. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  148. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  149. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  150. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  151. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  152. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  153. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  154. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  155. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  156. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  157. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  158. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  159. machineconfig/settings/television/cable_unix/text.toml +17 -0
  160. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  161. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  162. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  163. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  164. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  165. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  166. machineconfig/settings/television/cable_windows/env.toml +17 -0
  167. machineconfig/settings/television/cable_windows/files.toml +14 -0
  168. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  169. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  170. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  171. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  172. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  173. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  174. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  175. machineconfig/settings/television/cable_windows/text.toml +17 -0
  176. machineconfig/settings/wt/__init__.py +0 -0
  177. machineconfig/settings/yazi/init.lua +49 -24
  178. machineconfig/settings/yazi/keymap_linux.toml +19 -4
  179. machineconfig/settings/yazi/keymap_windows.toml +0 -1
  180. machineconfig/settings/yazi/shell/yazi_cd.ps1 +29 -5
  181. machineconfig/settings/yazi/theme.toml +4 -0
  182. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  183. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  184. machineconfig/settings/zellij/layouts/st.kdl +39 -8
  185. machineconfig/setup_linux/__init__.py +1 -2
  186. machineconfig/setup_linux/apps_desktop.sh +8 -27
  187. machineconfig/setup_linux/web_shortcuts/interactive.sh +12 -10
  188. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  189. machineconfig/setup_mac/__init__.py +2 -3
  190. machineconfig/setup_windows/__init__.py +3 -5
  191. machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
  192. machineconfig/setup_windows/uv.ps1 +8 -1
  193. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +12 -10
  194. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  195. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  196. machineconfig/utils/accessories.py +7 -4
  197. machineconfig/utils/code.py +69 -27
  198. machineconfig/utils/files/headers.py +2 -2
  199. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  200. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  201. machineconfig/utils/installer_utils/installer_class.py +43 -100
  202. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  203. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  204. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
  205. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -59
  206. machineconfig/utils/io.py +0 -1
  207. machineconfig/utils/links.py +2 -2
  208. machineconfig/utils/meta.py +30 -16
  209. machineconfig/utils/options.py +42 -24
  210. machineconfig/utils/options_tv.py +119 -0
  211. machineconfig/utils/path_extended.py +42 -20
  212. machineconfig/utils/path_helper.py +75 -22
  213. machineconfig/utils/procs.py +1 -1
  214. machineconfig/utils/scheduler.py +20 -53
  215. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  216. machineconfig/utils/ssh.py +159 -418
  217. machineconfig/utils/ssh_utils/abc.py +5 -0
  218. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  219. machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
  220. machineconfig/utils/ssh_utils/utils.py +142 -0
  221. machineconfig/utils/ssh_utils/wsl.py +210 -0
  222. machineconfig/utils/terminal.py +1 -0
  223. machineconfig/utils/upgrade_packages.py +6 -1
  224. machineconfig/utils/ve.py +12 -4
  225. machineconfig-8.14.dist-info/METADATA +132 -0
  226. {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/RECORD +264 -215
  227. {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/entry_points.txt +2 -4
  228. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  229. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  230. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  231. machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
  232. machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
  233. machineconfig/scripts/linux/other/switch_ip +0 -20
  234. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  235. machineconfig/scripts/python/define.py +0 -31
  236. machineconfig/scripts/python/explore.py +0 -49
  237. machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -246
  238. machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfag +0 -17
  239. machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfrga +0 -21
  240. machineconfig/scripts/python/helpers_msearch/scripts_linux/skrg +0 -4
  241. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfb.ps1 +0 -3
  242. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfrga.bat +0 -20
  243. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  244. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  245. machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
  246. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  247. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  248. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  249. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  250. machineconfig/settings/yazi/yazi.toml +0 -17
  251. machineconfig/setup_linux/apps.sh +0 -66
  252. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  253. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  254. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  255. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  256. machineconfig/setup_mac/apps.sh +0 -73
  257. machineconfig/setup_windows/apps.ps1 +0 -62
  258. machineconfig/setup_windows/others/obs.ps1 +0 -4
  259. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  260. machineconfig/utils/installer_utils/installer.py +0 -221
  261. machineconfig-7.50.dist-info/METADATA +0 -92
  262. /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  263. /machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
  264. /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  265. /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  266. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  267. /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  268. /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  269. /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  270. /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  271. /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  272. /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  273. /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  274. /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
  275. /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  276. /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
  277. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  278. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  279. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  280. /machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  281. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  282. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  283. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  284. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  285. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  286. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  287. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  288. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  289. /machineconfig/scripts/python/{nw → ai/utils}/__init__.py +0 -0
  290. /machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +0 -0
  291. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
  292. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers_network}/__init__.py +0 -0
  293. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
  294. /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
  295. /machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +0 -0
  296. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  297. {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/WHEEL +0 -0
  298. {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/top_level.txt +0 -0
@@ -18,7 +18,6 @@ from machineconfig.utils.installer_utils.installer_class import Installer
18
18
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
19
19
 
20
20
 
21
- # Nerd Fonts installer configuration data
22
21
  nerd_fonts: InstallerData = {
23
22
  "appName": "Cascadia Code Nerd Font",
24
23
  "repoURL": "https://github.com/ryanoasis/nerd-fonts",
@@ -38,14 +37,6 @@ nerd_fonts: InstallerData = {
38
37
  }
39
38
 
40
39
 
41
- # Patterns to match any installed variant (NF, Nerd Font, Mono, Propo, style weights) of Cascadia/Caskaydia
42
- # We'll compile them at runtime for flexibility. Keep them simple to avoid false positives.
43
- # REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
44
- # r"caskaydiacove.*(nf|nerd ?font)",
45
- # r"cascadiacode.*(nf|nerd ?font)"
46
- # )
47
-
48
-
49
40
  console = Console()
50
41
 
51
42
 
@@ -80,22 +71,28 @@ def _list_installed_fonts() -> list[str]:
80
71
 
81
72
 
82
73
  def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
83
- """Check which required font patterns are missing from installed fonts.
84
-
74
+ """Check which feature fonts are missing from installed fonts.
75
+
85
76
  Args:
86
77
  installed_fonts: List of installed font names
87
-
78
+
88
79
  Returns:
89
- List of missing font patterns
80
+ List of descriptions for missing font groups
90
81
  """
91
- import re
92
82
 
93
- installed_norm = [f.lower().replace(" ", "") for f in installed_fonts]
83
+ def _normalize(name: str) -> str:
84
+ return name.lower().replace(" ", "").replace("_", "")
85
+
86
+ installed_norm = [_normalize(font) for font in installed_fonts]
87
+ requirements: list[tuple[str, str]] = [
88
+ ("cascadiacode", "Cascadia Code family"),
89
+ ("caskaydiacove", "Caskaydia Cove Nerd Font family"),
90
+ ]
91
+
94
92
  missing: list[str] = []
95
- for pattern in ["cascadiacode*"]:
96
- regex = re.compile(pattern)
97
- if not any(regex.search(f) for f in installed_norm):
98
- missing.append(pattern)
93
+ for needle, label in requirements:
94
+ if not any(needle in font for font in installed_norm):
95
+ missing.append(label)
99
96
  return missing
100
97
 
101
98
 
@@ -125,18 +122,22 @@ def install_nerd_fonts() -> None:
125
122
  console.print(f"🔍 Missing fonts detected: {', '.join(missing)}. Proceeding with installation...")
126
123
  console.print("🔍 Downloading Nerd Fonts package...")
127
124
 
128
- folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).download(version=None)
125
+ folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).binary_download(version=None)
129
126
 
130
127
  console.print("🧹 Cleaning up unnecessary files...")
131
128
  [p.delete(sure=True) for p in folder.search("*Windows*")]
132
129
  [p.delete(sure=True) for p in folder.search("*readme*")]
133
130
  [p.delete(sure=True) for p in folder.search("*LICENSE*")]
134
131
 
132
+ print("Fonts to be installed:")
133
+ for font in (folder.search("*.ttf") + folder.search("*.otf")):
134
+ print(f" - {font}")
135
+
135
136
  console.print("⚙️ Installing fonts via PowerShell...")
136
137
  file = PathExtended.tmpfile(suffix=".ps1")
137
138
  file.parent.mkdir(parents=True, exist_ok=True)
138
-
139
- raw_content = LIBRARY_ROOT.joinpath("jobs/installer/pwsh_scripts/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
139
+
140
+ raw_content = LIBRARY_ROOT.joinpath("jobs/installer/powershell_scripts/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
140
141
  # PowerShell 5.1 can choke on certain unicode chars in some locales; keep ASCII only.
141
142
  content = "".join(ch for ch in raw_content if ord(ch) < 128)
142
143
  file.write_text(content, encoding="utf-8")
@@ -156,3 +157,7 @@ def install_nerd_fonts() -> None:
156
157
  console.print()
157
158
  render_banner("✅ Nerd Fonts installation complete! ✅", "Nerd Fonts Installer", "green", box.DOUBLE)
158
159
  console.print()
160
+
161
+
162
+ if __name__ == "__main__":
163
+ install_nerd_fonts()
@@ -0,0 +1,139 @@
1
+
2
+
3
+ import platform
4
+ from typing import Optional
5
+ from rich import box
6
+ from rich.console import Console
7
+ from rich.panel import Panel
8
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
9
+
10
+ ps1 = r"""
11
+ $winget = Get-Command winget -ErrorAction SilentlyContinue
12
+ if (-not $winget) {
13
+ Write-Host "winget not found. Installing..."
14
+ $finalUrl = (Invoke-WebRequest 'https://github.com/microsoft/winget-cli/releases/latest' -UseBasicParsing).BaseResponse.ResponseUri.AbsoluteUri
15
+ $releaseTag = $finalUrl.Split('/')[-1]
16
+ $DownloadUrl = "https://github.com/microsoft/winget-cli/releases/download/$releaseTag/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
17
+ $DestDir = Join-Path $HOME "Downloads"
18
+ $DestFile = Join-Path $DestDir "Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
19
+ # Create folder if it doesn't exist
20
+ if (-not (Test-Path $DestDir)) {
21
+ New-Item -ItemType Directory -Path $DestDir | Out-Null
22
+ }
23
+ Write-Host "Downloading winget installer..."
24
+ # Invoke-WebRequest -Uri $DownloadUrl -OutFile $DestFile
25
+ Start-BitsTransfer -Source $DownloadUrl -Destination $DestFile
26
+ Write-Host "Saved to: $DestFile"
27
+ # We MUST run Add-AppxPackage in Windows PowerShell
28
+ Write-Host "Installing package via Windows PowerShell..."
29
+ powershell.exe -NoLogo -NoProfile -Command "Add-AppxPackage -Path `"$DestFile`" "
30
+ Write-Host "Installation complete."
31
+ }
32
+ else {
33
+ Write-Host "winget already available. Skipping installation."
34
+ }
35
+
36
+ # [System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'User')
37
+ # [System.Environment]::SetEnvironmentVariable('PYTHONIOENCODING', 'utf-8', 'User')
38
+
39
+
40
+ winget install --no-upgrade --name "Powershell" --Id "Microsoft.PowerShell" --source winget --scope user --accept-package-agreements --accept-source-agreements # powershell require admin
41
+ winget install --no-upgrade --name "Windows Terminal" --Id "Microsoft.WindowsTerminal" --source winget --scope user --accept-package-agreements --accept-source-agreements # Terminal is is installed by default on W 11
42
+ # winget install --no-upgrade --name "GNU Nano" --Id "GNU.Nano" --source winget --scope user --accept-package-agreements --accept-source-agreements
43
+ # --GROUP:gui:Brave+VSCode+Git+WezTerm
44
+ # --GROUP:dev2:VSRedistrib+VSBuildTools+Codeblocks+GnuWin32: Make+GnuPG+graphviz+WinFsp+SSHFS-win+xming+Node.js+Rustup+Cloudflare+Cloudflare WARP+Microsoft Garage Mouse without Borders
45
+ # --GROUP:user:nu+Chrome+ChromeRemoteDesktop+Zoom+7zip+Firefox+Thunderbird+StreamlabsOBS+OBSStudio+MiKTeX+TexMaker+notepad+++Lapce+TesseractOCR+perl+DB Browser for SQLite+sql server management studio+Adobe Acrobat Reader DC+julia+Chafa+bottom+onefetch+Just+hyperfine+AWS CLI
46
+ # Install-Module -Name Terminal-Icons -Repository PSGallery -Force -AcceptLicense -PassThru -Confirm # -RequiredVersion 2.5.10
47
+
48
+ """
49
+
50
+ zsh = r"""
51
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
52
+ echo "🔄 Updating Homebrew..."
53
+ brew update || true
54
+ # Note: git and nano are pre-installed on macOS, but we install via Homebrew to ensure latest versions
55
+ # brew install git || true
56
+ # brew install nano || true
57
+ # brew install curl || true
58
+ # Install NVM
59
+ if [ ! -s "$HOME/.nvm/nvm.sh" ]; then
60
+ echo "📥 Installing NVM (Node Version Manager)..."
61
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
62
+ fi
63
+ echo "🔧 Configuring NVM environment..."
64
+ export NVM_DIR="$HOME/.nvm"
65
+ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
66
+ echo "📥 Installing latest Node.js..."
67
+ nvm install node || true
68
+ # brew install make
69
+ # brew install ffmpeg
70
+ # brew install openssl
71
+ echo "✅ Essential tools installation complete."
72
+ """
73
+
74
+ bash = r"""
75
+ sudo apt update -y || true
76
+ sudo apt install nala -y || true
77
+ sudo nala install curl wget gpg lsb-release apt-transport-https -y || true
78
+ sudo nala install git net-tools htop nano -y || true
79
+ sudo nala install build-essential python3-dev -y || true # C build toolchain: Where build-essential brings gcc, make, etc., and python3-dev ensures headers for your Python version.
80
+ # sudo nala install libssl-dev -y
81
+ # sudo nala install libaa-bin -y
82
+
83
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
84
+ source ~/.bashrc || true
85
+ nvm install node || true
86
+
87
+ sudo nala install samba -y || true
88
+ sudo nala install fuse3 -y || true
89
+ sudo nala install nfs-common -y || true
90
+
91
+ # echo 'keyboard-configuration keyboard-configuration/layout select US English' | sudo debconf-set-selections
92
+ # echo 'keyboard-configuration keyboard-configuration/layoutcode string us' | sudo debconf-set-selections
93
+ # sudo DEBIAN_FRONTEND=noninteractive nala install -y cmatrix
94
+ # sudo nala install hollywood -y || true
95
+
96
+ # sudo nala install ffmpeg -y || true # Required by some dev tools
97
+ # sudo nala install make -y || true # Required by LunarVim and SpaceVim
98
+ # (curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) || true
99
+
100
+ """
101
+
102
+
103
+ def main(installer_data: InstallerData, version: Optional[str]) -> None:
104
+ console = Console()
105
+ _ = installer_data
106
+ console.print(
107
+ Panel.fit(
108
+ "\n".join([f"💻 Platform: {platform.system()}", f"🔄 Version: {'latest' if version is None else version}"]),
109
+ title="🔧 ABC Installer",
110
+ border_style="blue",
111
+ box=box.ROUNDED,
112
+ )
113
+ )
114
+
115
+ _ = version
116
+ if platform.system() == "Windows":
117
+ console.print("🪟 Installing ABC on Windows using winget...", style="bold")
118
+ program = ps1
119
+ elif platform.system() == "Linux":
120
+ console.print("🐧 Installing ABC on Linux...", style="bold")
121
+ program = bash
122
+ elif platform.system() == "Darwin":
123
+ console.print("🍎 Installing ABC on macOS...", style="bold")
124
+ program = zsh
125
+ else:
126
+ error_msg = f"Unsupported platform: {platform.system()}"
127
+ console.print(
128
+ Panel.fit(
129
+ "\n".join([error_msg]),
130
+ title="❌ Error",
131
+ subtitle="⚠️ Unsupported platform",
132
+ border_style="red",
133
+ box=box.ROUNDED,
134
+ )
135
+ )
136
+ raise NotImplementedError(error_msg)
137
+ from machineconfig.utils.code import print_code, run_shell_script
138
+ print_code(code=program, lexer="shell", desc="Installation Script Preview")
139
+ run_shell_script(program)
@@ -9,10 +9,6 @@ from rich.panel import Panel
9
9
 
10
10
  from machineconfig.utils.schemas.installer.installer_types import InstallerData
11
11
 
12
-
13
- # config_dict: InstallerData = {"appName": "Wezterm", "repoURL": "CMD", "doc": "Modern, GPU-accelerated terminal emulator"}
14
-
15
-
16
12
  console = Console()
17
13
 
18
14
 
@@ -35,21 +31,8 @@ def main(installer_data: InstallerData, version: Optional[str]):
35
31
 
36
32
  _ = version
37
33
  if platform.system() == "Windows":
38
- error_msg = "WezTerm installation not supported on Windows through this installer"
39
- console.print(
40
- Panel.fit(
41
- "\n".join(
42
- [
43
- f"❌ ERROR | {error_msg}",
44
- "💡 TIP: Please download and install manually from the WezTerm website",
45
- ]
46
- ),
47
- title="Unsupported Platform",
48
- border_style="red",
49
- padding=(1, 2),
50
- )
51
- )
52
- raise NotImplementedError(error_msg)
34
+ program = """winget install --no-upgrade --name "WezTerm" --Id "wez.wezterm" --source winget --accept-package-agreements --accept-source-agreements
35
+ """
53
36
  elif platform.system() in ["Linux", "Darwin"]:
54
37
  system_name = "LINUX" if platform.system() == "Linux" else "MACOS"
55
38
  console.print(
@@ -3,11 +3,16 @@ import requests
3
3
  import tempfile
4
4
  from pathlib import Path
5
5
  from typing import Optional
6
+ from machineconfig.utils.schemas.installer.installer_types import InstallerData
6
7
 
7
8
 
8
- # config_dict: InstallerData = {"appName": "winget", "repoURL": "CMD", "doc": "winget installer"}
9
- # on older windows, use this to get winget for first time: Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe as per https://learn.microsoft.com/en-us/windows/package-manager/winget/
10
-
9
+ r"""
10
+ # download latest from
11
+ cd $HOME/Downloads
12
+ d u "https://github.com/microsoft/winget-cli/releases/download/v1.12.170-preview/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
13
+ # this must be run in windows powershell, not in pwsh
14
+ Add-AppxPackage .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
15
+ """
11
16
 
12
17
  def is_winget_available() -> bool:
13
18
  """
@@ -110,7 +115,7 @@ def install_msix_package(package_path: Path) -> bool:
110
115
  return False
111
116
 
112
117
 
113
- def ensure_winget_available() -> bool:
118
+ def main(installer_data: InstallerData, version: Optional[str]) -> bool:
114
119
  """
115
120
  Ensure winget is available on the system. If not available, download and install it.
116
121
 
@@ -118,6 +123,7 @@ def ensure_winget_available() -> bool:
118
123
  bool: True if winget is available (either was already installed or successfully installed),
119
124
  False if installation failed
120
125
  """
126
+ _ = installer_data
121
127
  # First check if winget is already available
122
128
  if is_winget_available():
123
129
  print("Winget is already available on the system.")
@@ -164,13 +170,3 @@ def ensure_winget_available() -> bool:
164
170
  else:
165
171
  print("Installation completed but winget is still not available. You may need to restart your terminal or add it to PATH.")
166
172
  return False
167
-
168
-
169
- if __name__ == "__main__":
170
- # Example usage
171
- print("=== Winget Installation ===\n")
172
-
173
- if ensure_winget_available():
174
- print("Winget is ready to use!")
175
- else:
176
- print("Failed to ensure winget availability.")
@@ -0,0 +1,121 @@
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
+ from machineconfig.utils.installer_utils.installer_cli import install_if_missing
84
+ install_if_missing("git")
85
+ popler_installer: InstallerData = {
86
+ "appName": "poppler",
87
+ "repoURL": "https://github.com/oschwartz10612/poppler-windows",
88
+ "doc": "PDF rendering library - Windows builds.",
89
+ "fileNamePattern": {
90
+ "amd64": {
91
+ "windows": "Release-{version}.zip",
92
+ "linux": None,
93
+ "macos": None,
94
+ },
95
+ "arm64": {
96
+ "windows": None,
97
+ "linux": None,
98
+ "macos": None,
99
+ }
100
+ }
101
+ }
102
+ inst_poppler = Installer(installer_data=popler_installer)
103
+ inst_poppler.install(version=None)
104
+ # assuming ouch is already installed
105
+ script = """
106
+ ya pkg add 'ndtoan96/ouch' # make ouch default previewer in yazi for compressed files
107
+ ya pkg add 'AnirudhG07/rich-preview' # rich-cli based previewer for yazi
108
+ ya pack -a 'stelcodes/bunny'
109
+ ya pkg add 'Tyarel8/goto-drives'
110
+ ya pkg add 'uhs-robert/sshfs'
111
+ ya pkg add 'boydaihungst/file-extra-metadata'
112
+ ya pkg add 'wylie102/duckdb'
113
+
114
+
115
+ """
116
+ from machineconfig.utils.code import run_shell_script
117
+ run_shell_script(script)
118
+
119
+
120
+ if __name__ == "__main__":
121
+ pass
@@ -5,7 +5,6 @@
5
5
  # mkdir ~/data/local
6
6
  # sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
7
7
 
8
- uv run --python 3.14 --with "machineconfig>=7.32" python -m machineconfig.scripts.python.mount_nfs
9
8
  # Check if remote server is reachable and share folder exists
10
9
  if ! ping -c 1 "$remote_server" &> /dev/null; then
11
10
  echo "💥 Error: Remote server $remote_server is not reachable."
@@ -0,0 +1,13 @@
1
+
2
+
3
+ winget install WinFsp.WinFsp --source winget --scope user --accept-package-agreements --accept-source-agreements; winget install SSHFS-Win.SSHFS-Win --source winget --scope user --accept-package-agreements --accept-source-agreements
4
+
5
+ $host = ''
6
+ $user = ''
7
+ $sharePath = ''
8
+ $driveLetter = ''
9
+
10
+ uv run --python 3.14 --with "machineconfig>=8.14" python -m machineconfig.scripts.python.mount_ssh
11
+
12
+ net use T: \\sshfs.kr\$user@$host.local
13
+ # this worked: net use T: \\sshfs\alex@alex-p51s-5.local
@@ -0,0 +1,4 @@
1
+
2
+
3
+ winget install Gyan.FFmpeg --source winget --scope user --accept-package-agreements --accept-source-agreements
4
+
@@ -0,0 +1,25 @@
1
+ """
2
+ #!/usr/bin/env -S uv run
3
+ # /// script
4
+ # requires-python = ">=3.13"
5
+ # dependencies = [
6
+ # "rich",
7
+ # "polars",
8
+ # "typer>=0.12",
9
+ # "loguru",
10
+ # "numpy",
11
+ # ]
12
+ # ///
13
+
14
+ """
15
+
16
+
17
+ def main():
18
+ """a,b,c"""
19
+ print("This is a helper function in a.py")
20
+ import numpy as np
21
+ print("Numpy version:", np.__version__)
22
+
23
+
24
+ if __name__ == "__main__":
25
+ main()
machineconfig/logger.py CHANGED
@@ -1,4 +1,3 @@
1
- from __future__ import annotations
2
1
 
3
2
  import logging
4
3
  import os
@@ -5,7 +5,7 @@ import shutil
5
5
  from machineconfig.utils.source_of_truth import LIBRARY_ROOT, CONFIG_ROOT
6
6
 
7
7
 
8
- def _copy_path(source: Path, target: Path, overwrite: bool = False) -> None:
8
+ def _copy_path(source: Path, target: Path, overwrite: bool) -> None:
9
9
  source = source.expanduser().resolve()
10
10
  target = target.expanduser().resolve()
11
11
  if not source.exists():
@@ -29,7 +29,6 @@ def _copy_path(source: Path, target: Path, overwrite: bool = False) -> None:
29
29
  def copy_assets_to_machine(which: Literal["scripts", "settings"]) -> None:
30
30
  import platform
31
31
  import subprocess
32
-
33
32
  system_name = platform.system().lower()
34
33
  if system_name == "windows":
35
34
  system = "windows"
@@ -42,33 +41,33 @@ def copy_assets_to_machine(which: Literal["scripts", "settings"]) -> None:
42
41
  case "scripts":
43
42
  source = LIBRARY_ROOT.joinpath("scripts", system)
44
43
  target = CONFIG_ROOT.joinpath("scripts")
45
-
44
+
45
+ # _copy_path(source=source, target=target, overwrite=True)
46
+
47
+ for a_path in source.rglob("*"):
48
+ if not a_path.is_file():
49
+ continue
50
+ relative_path = a_path.relative_to(source)
51
+ target_path = target.joinpath(relative_path)
52
+ _copy_path(source=a_path, target=target_path, overwrite=True)
53
+
46
54
  wrap_mcfg_source = LIBRARY_ROOT.joinpath("scripts", "nu", "wrap_mcfg.nu")
47
55
  wrap_mcfg_target = CONFIG_ROOT.joinpath("scripts", "wrap_mcfg.nu")
56
+
48
57
  wrap_mcfg_target.parent.mkdir(parents=True, exist_ok=True)
49
58
  _copy_path(source=wrap_mcfg_source, target=wrap_mcfg_target, overwrite=True)
59
+
60
+ if system_name == "linux":
61
+ from rich.console import Console
62
+ console = Console()
63
+ console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
64
+ scripts_path = CONFIG_ROOT.joinpath("scripts")
65
+ subprocess.run(f"chmod +x {scripts_path} -R", shell=True, capture_output=True, text=True, check=False)
66
+ console.print("[green]✅ Script permissions updated[/green]")
67
+ return
50
68
  case "settings":
51
69
  source = LIBRARY_ROOT.joinpath("settings")
52
70
  target = CONFIG_ROOT.joinpath("settings")
53
71
 
54
72
  _copy_path(source=source, target=target, overwrite=True)
55
73
 
56
- if system_name == "linux" and which == "scripts":
57
- from rich.console import Console
58
- console = Console()
59
- console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
60
- scripts_path = CONFIG_ROOT.joinpath("scripts")
61
- subprocess.run(f"chmod +x {scripts_path} -R", shell=True, capture_output=True, text=True, check=False)
62
- console.print("[green]✅ Script permissions updated[/green]")
63
-
64
- home_dir = Path.home()
65
- if system_name == "windows":
66
- yazi_plugins_dir = home_dir.joinpath("AppData", "Roaming", "yazi", "config")
67
- else:
68
- yazi_plugins_dir = home_dir.joinpath(".config", "yazi")
69
-
70
- yazi_plugins_path = yazi_plugins_dir.joinpath("plugins")
71
- if not yazi_plugins_path.exists():
72
- yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
73
- import git
74
- git.Repo.clone_from("https://github.com/yazi-rs/plugins", yazi_plugins_path)
@@ -15,13 +15,18 @@ ON_CONFLICT_MAPPER: dict[str, ON_CONFLICT_STRICT] = {
15
15
  "os": "overwrite-self-managed",
16
16
  "bs": "backup-self-managed",
17
17
  "od": "overwrite-default-path",
18
- "bd": "backup-default-path"
18
+ "bd": "backup-default-path",
19
+ "throw-error": "throw-error",
20
+ "overwrite-self-managed": "overwrite-self-managed",
21
+ "backup-self-managed": "backup-self-managed",
22
+ "overwrite-default-path": "overwrite-default-path",
23
+ "backup-default-path": "backup-default-path",
19
24
  }
20
25
 
21
26
 
22
27
  def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
23
28
  on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
24
- which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process (default: all)")] = None,
29
+ which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = "all",
25
30
  interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Run in interactive mode")] = False):
26
31
  """Terminology:
27
32
  SOURCE = Self-Managed-Config-File-Path
@@ -32,7 +37,7 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c
32
37
  if which is None:
33
38
  assert interactive is True
34
39
  from machineconfig.utils.options import choose_from_options
35
- items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), fzf=True, multi=True)
40
+ items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), tv=True, multi=True)
36
41
  else:
37
42
  assert interactive is False
38
43
  if which == "all":
@@ -57,24 +62,33 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c
57
62
  apply_mapper(mapper_data=items_objections, on_conflict=ON_CONFLICT_MAPPER[on_conflict], method=method)
58
63
 
59
64
 
60
- def main_private_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., help="Method to use for linking files")],
61
- on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., help="Action to take on conflict")] = "throw-error",
62
- which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
63
- interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
65
+ def main_private_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for linking files")],
66
+ on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
67
+ which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = "all",
68
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Run in interactive mode")] = False):
64
69
  from machineconfig.profile.create_links import ConfigMapper, read_mapper
65
70
  mapper_full = read_mapper()["private"]
66
71
  if which is None:
67
- assert interactive is True
72
+ if interactive is False:
73
+ typer.echo("[red]Error:[/] --which must be provided when not running in interactive mode.")
74
+ typer.Exit(code=1)
75
+ return
68
76
  from machineconfig.utils.options import choose_from_options
69
- items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), fzf=True, multi=True)
77
+ items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), tv=True, multi=True)
70
78
  else:
71
- assert interactive is False
79
+ if interactive is True:
80
+ typer.echo("[yellow]Warning:[/] --which is provided, but its not allowed to be used together with --interactive. Ignoring --interactive flag.")
81
+ typer.Exit(code=0)
82
+ return
72
83
  if which == "all":
73
84
  items_chosen = list(mapper_full.keys())
74
85
  else:
75
86
  items_chosen = which.split(",")
76
87
  items_objections: dict[str, list[ConfigMapper]] = {item: mapper_full[item] for item in items_chosen if item in mapper_full}
77
-
88
+ if len(items_objections) == 0:
89
+ typer.echo("[red]Error:[/] No valid items selected.")
90
+ typer.Exit(code=1)
91
+ return
78
92
  from machineconfig.profile.create_links import apply_mapper
79
93
  method_map: dict[str, Literal["symlink", "copy"]] = {
80
94
  "s": "symlink",