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

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

Potentially problematic release.


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

Files changed (418) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +1 -2
  5. machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
  6. machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +128 -330
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  13. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  14. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  17. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  18. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  19. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  20. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  23. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  24. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  25. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  26. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  31. machineconfig/jobs/{python → installer}/check_installations.py +2 -16
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +69 -53
  34. machineconfig/jobs/installer/custom/hx.py +77 -20
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
  36. machineconfig/jobs/installer/custom_dev/brave.py +43 -35
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +33 -21
  40. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  41. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  42. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  43. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  44. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  45. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
  46. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  47. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  48. machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
  49. machineconfig/jobs/installer/custom_dev/winget.py +1 -0
  50. machineconfig/jobs/installer/installer_data.json +3406 -0
  51. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  52. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  53. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  54. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  55. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  56. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  57. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  58. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  59. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  60. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  61. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  62. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  63. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  64. machineconfig/jobs/installer/package_groups.py +255 -0
  65. machineconfig/logger.py +0 -1
  66. machineconfig/profile/backup.toml +49 -0
  67. machineconfig/profile/bash_shell_profiles.md +11 -0
  68. machineconfig/profile/create_helper.py +74 -0
  69. machineconfig/profile/create_links.py +288 -0
  70. machineconfig/profile/create_links_export.py +100 -0
  71. machineconfig/profile/create_shell_profile.py +136 -0
  72. machineconfig/profile/mapper.toml +258 -0
  73. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  74. machineconfig/scripts/__init__.py +0 -4
  75. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  76. machineconfig/scripts/linux/wrap_mcfg +47 -0
  77. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  78. machineconfig/scripts/python/agents.py +198 -0
  79. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  80. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  81. machineconfig/scripts/python/ai/generate_files.py +307 -42
  82. machineconfig/scripts/python/ai/initai.py +3 -28
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  89. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  90. machineconfig/scripts/python/cloud.py +29 -0
  91. machineconfig/scripts/python/croshell.py +117 -181
  92. machineconfig/scripts/python/define.py +31 -0
  93. machineconfig/scripts/python/devops.py +44 -124
  94. machineconfig/scripts/python/devops_navigator.py +10 -0
  95. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  96. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  97. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  98. machineconfig/scripts/python/explore.py +49 -0
  99. machineconfig/scripts/python/fire_jobs.py +106 -244
  100. machineconfig/scripts/python/ftpx.py +125 -68
  101. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  102. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  103. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  106. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  107. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  108. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  109. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  110. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  111. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  112. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  113. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +11 -19
  114. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  115. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  116. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  117. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
  118. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  119. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  120. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  121. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  122. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  123. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  124. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  125. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  126. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  127. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  128. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  129. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  130. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  131. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  132. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  133. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  134. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  135. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -87
  136. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  137. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  138. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  139. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  140. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  141. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  142. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  143. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  144. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  145. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  146. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  147. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  148. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  149. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  150. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  151. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  152. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  153. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  154. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  155. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  156. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  157. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  158. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  159. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  160. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  161. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  162. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  163. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  164. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  165. machineconfig/scripts/python/interactive.py +79 -160
  166. machineconfig/scripts/python/machineconfig.py +63 -0
  167. machineconfig/scripts/python/msearch.py +21 -0
  168. machineconfig/scripts/python/nw/__init__.py +0 -0
  169. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  170. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  171. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  172. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  173. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  174. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  175. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  176. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  177. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  178. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  179. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +6 -5
  180. machineconfig/scripts/python/sessions.py +167 -0
  181. machineconfig/scripts/python/terminal.py +127 -0
  182. machineconfig/scripts/python/utils.py +66 -0
  183. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  184. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  185. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  186. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  187. machineconfig/settings/broot/br.sh +0 -4
  188. machineconfig/settings/broot/conf.toml +1 -1
  189. machineconfig/settings/helix/config.toml +16 -0
  190. machineconfig/settings/helix/languages.toml +13 -4
  191. machineconfig/settings/helix/yazi-picker.sh +12 -0
  192. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  193. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  194. machineconfig/settings/lf/linux/lfrc +10 -12
  195. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  196. machineconfig/settings/lf/windows/lfrc +18 -38
  197. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  198. machineconfig/settings/linters/.ruff.toml +1 -1
  199. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  200. machineconfig/settings/marimo/marimo.toml +80 -0
  201. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  202. machineconfig/settings/pistol/pistol.conf +1 -1
  203. machineconfig/settings/shells/bash/init.sh +55 -31
  204. machineconfig/settings/shells/nushell/config.nu +1 -34
  205. machineconfig/settings/shells/nushell/init.nu +127 -0
  206. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  207. machineconfig/settings/shells/starship/starship.toml +16 -0
  208. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  209. machineconfig/settings/shells/wt/settings.json +32 -17
  210. machineconfig/settings/shells/zsh/init.sh +89 -0
  211. machineconfig/settings/svim/linux/init.toml +0 -4
  212. machineconfig/settings/svim/windows/init.toml +0 -3
  213. machineconfig/settings/yazi/init.lua +57 -0
  214. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  215. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  216. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  217. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  218. machineconfig/settings/yazi/yazi.toml +13 -0
  219. machineconfig/setup_linux/__init__.py +10 -0
  220. machineconfig/setup_linux/apps_desktop.sh +89 -0
  221. machineconfig/setup_linux/apps_gui.sh +64 -0
  222. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  223. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  224. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  225. machineconfig/setup_linux/uv.sh +15 -0
  226. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  227. machineconfig/setup_mac/__init__.py +16 -0
  228. machineconfig/setup_mac/apps_gui.sh +248 -0
  229. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  230. machineconfig/setup_mac/uv.sh +36 -0
  231. machineconfig/setup_windows/__init__.py +8 -0
  232. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  233. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  234. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  235. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  236. machineconfig/setup_windows/uv.ps1 +10 -0
  237. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -9
  238. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  239. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  240. machineconfig/utils/accessories.py +7 -5
  241. machineconfig/utils/cloud/onedrive/README.md +139 -0
  242. machineconfig/utils/code.py +140 -93
  243. machineconfig/utils/files/art/fat_croco.txt +10 -0
  244. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  245. machineconfig/utils/files/art/happy_croco.txt +22 -0
  246. machineconfig/utils/files/art/water_croco.txt +11 -0
  247. machineconfig/utils/files/ascii_art.py +118 -0
  248. machineconfig/utils/files/dbms.py +257 -0
  249. machineconfig/utils/files/headers.py +68 -0
  250. machineconfig/utils/files/ouch/__init__.py +0 -0
  251. machineconfig/utils/files/ouch/decompress.py +45 -0
  252. machineconfig/utils/files/read.py +95 -0
  253. machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
  254. machineconfig/utils/installer_utils/installer_class.py +68 -126
  255. machineconfig/utils/installer_utils/installer_cli.py +181 -0
  256. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
  257. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
  258. machineconfig/utils/io.py +77 -23
  259. machineconfig/utils/links.py +309 -100
  260. machineconfig/utils/meta.py +255 -0
  261. machineconfig/utils/notifications.py +1 -1
  262. machineconfig/utils/options.py +10 -25
  263. machineconfig/utils/path_extended.py +94 -104
  264. machineconfig/utils/path_helper.py +75 -22
  265. machineconfig/utils/procs.py +50 -74
  266. machineconfig/utils/scheduler.py +94 -97
  267. machineconfig/utils/scheduling.py +0 -3
  268. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  269. machineconfig/utils/schemas/installer/installer_types.py +0 -1
  270. machineconfig/utils/schemas/layouts/layout_types.py +2 -1
  271. machineconfig/utils/source_of_truth.py +3 -6
  272. machineconfig/utils/ssh.py +742 -254
  273. machineconfig/utils/ssh_utils/utils.py +0 -0
  274. machineconfig/utils/terminal.py +3 -140
  275. machineconfig/utils/tst.py +20 -0
  276. machineconfig/utils/upgrade_packages.py +109 -28
  277. machineconfig/utils/ve.py +13 -5
  278. machineconfig-7.66.dist-info/METADATA +124 -0
  279. machineconfig-7.66.dist-info/RECORD +451 -0
  280. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  281. machineconfig/cluster/templates/utils.py +0 -51
  282. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  283. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  284. machineconfig/jobs/installer/packages_custom_dev.json +0 -226
  285. machineconfig/jobs/installer/packages_custom_essential.json +0 -39
  286. machineconfig/jobs/installer/packages_github_dev.json +0 -1110
  287. machineconfig/jobs/installer/packages_github_essential.json +0 -804
  288. machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
  289. machineconfig/jobs/python/create_bootable_media.py +0 -16
  290. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  291. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  292. machineconfig/jobs/python/tasks.py +0 -3
  293. machineconfig/jobs/python/vscode/api.py +0 -49
  294. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  295. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  296. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  297. machineconfig/jobs/windows/startup_file.cmd +0 -2
  298. machineconfig/profile/create.py +0 -170
  299. machineconfig/profile/shell.py +0 -176
  300. machineconfig/scripts/cloud/init.sh +0 -119
  301. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  302. machineconfig/scripts/linux/cloud_copy +0 -2
  303. machineconfig/scripts/linux/cloud_mount +0 -2
  304. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  305. machineconfig/scripts/linux/cloud_sync +0 -2
  306. machineconfig/scripts/linux/croshell +0 -3
  307. machineconfig/scripts/linux/devops +0 -2
  308. machineconfig/scripts/linux/fire +0 -2
  309. machineconfig/scripts/linux/fire_agents +0 -2
  310. machineconfig/scripts/linux/ftpx +0 -2
  311. machineconfig/scripts/linux/fzf2g +0 -21
  312. machineconfig/scripts/linux/fzffg +0 -25
  313. machineconfig/scripts/linux/gh_models +0 -2
  314. machineconfig/scripts/linux/initai +0 -2
  315. machineconfig/scripts/linux/kill_process +0 -2
  316. machineconfig/scripts/linux/programs +0 -21
  317. machineconfig/scripts/linux/repos +0 -2
  318. machineconfig/scripts/linux/scheduler +0 -2
  319. machineconfig/scripts/linux/share_smb +0 -1
  320. machineconfig/scripts/linux/start_slidev +0 -2
  321. machineconfig/scripts/linux/start_terminals +0 -3
  322. machineconfig/scripts/linux/warp-cli.sh +0 -122
  323. machineconfig/scripts/linux/wifi_conn +0 -2
  324. machineconfig/scripts/linux/z_ls +0 -104
  325. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  326. machineconfig/scripts/python/cloud_repo_sync.py +0 -186
  327. machineconfig/scripts/python/devops_devapps_install.py +0 -159
  328. machineconfig/scripts/python/devops_update_repos.py +0 -180
  329. machineconfig/scripts/python/dotfile.py +0 -52
  330. machineconfig/scripts/python/fire_agents.py +0 -175
  331. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  332. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  333. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
  334. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
  335. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  336. machineconfig/scripts/python/gh_models.py +0 -104
  337. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  338. machineconfig/scripts/python/repos.py +0 -80
  339. machineconfig/scripts/python/repos_helper_action.py +0 -335
  340. machineconfig/scripts/python/share_terminal.py +0 -104
  341. machineconfig/scripts/python/snapshot.py +0 -25
  342. machineconfig/scripts/python/start_terminals.py +0 -121
  343. machineconfig/scripts/python/t4.py +0 -17
  344. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  345. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  346. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  347. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  348. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  349. machineconfig/scripts/windows/croshell.ps1 +0 -1
  350. machineconfig/scripts/windows/devops.ps1 +0 -1
  351. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  352. machineconfig/scripts/windows/fire.ps1 +0 -1
  353. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  354. machineconfig/scripts/windows/gpt.ps1 +0 -1
  355. machineconfig/scripts/windows/grep.ps1 +0 -2
  356. machineconfig/scripts/windows/initai.ps1 +0 -1
  357. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  358. machineconfig/scripts/windows/nano.ps1 +0 -3
  359. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  360. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  361. machineconfig/scripts/windows/repos.ps1 +0 -1
  362. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  363. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  364. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  365. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  366. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  367. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  368. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  369. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  370. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  371. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  372. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  373. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  374. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  375. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  376. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  377. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  378. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  379. machineconfig-3.99.dist-info/METADATA +0 -167
  380. machineconfig-3.99.dist-info/RECORD +0 -409
  381. machineconfig-3.99.dist-info/entry_points.txt +0 -18
  382. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  383. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  384. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  385. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  386. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  387. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  388. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  389. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  390. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  391. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  392. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  393. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  394. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  395. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  396. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  397. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  398. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  399. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  400. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  401. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  402. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  403. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  404. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  405. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  406. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  407. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  408. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  409. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  410. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  411. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  412. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  413. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  414. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  415. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  416. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  417. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  418. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
@@ -1,37 +0,0 @@
1
- #!/bin/bash
2
-
3
-
4
- # Terminal-based CLI agents and tools for productivity and coding.
5
- npm install -g @github/copilot
6
- npm install -g @google/gemini-cli
7
- npm install -g @charmland/crush
8
- npm install -g opencode-ai@latest # or curl -fsSL https://opencode.ai/install | bash
9
- uv tool install --force --python python3.12 --with pip aider-chat@latest
10
- curl -fsSL https://app.factory.ai/cli | sh
11
- # WARP TERMINAL CLI
12
- # droid
13
-
14
-
15
- # cursor-cli
16
- curl https://cursor.com/install -fsS | bash
17
- cd $HOME/Downloads
18
- curl --proto '=https' --tlsv1.2 -sSf "https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip" -o "q.zip"
19
- unzip q.zip
20
- ./q/install.sh # goes to ~/.local/bin.
21
- rm q.zip
22
- rm -rfd q
23
-
24
- # Vscode extensions for AI-assisted coding.
25
- # Github copilot
26
- # Roo
27
- # Cline
28
- # Kilocode
29
- # Continue
30
- # CodeGPT
31
- # qodo (and cli)
32
-
33
- # Editors based on AI
34
- # Kiro
35
- # Cursor
36
- # Warp
37
-
@@ -1,16 +0,0 @@
1
- # try ventory or netboot.xyz
2
-
3
- # # one can either install rufus: https://rufus.ie/en/
4
- # # however, to create bootable media with multiple OSs to choose from:
5
-
6
- # PathExtended(r'https://github.com/ventoy/Ventoy/archive/refs/tags/v1.0.78.zip').download().unzip().search[0]()
7
- # download_folder = PathExtended.home().joinpath("Downloads/os")
8
- # download_folder.mkdir(parents=True, exist_ok=True)
9
- # PathExtended(r'https://mirrors.layeronline.com/linuxmint/stable/21/linuxmint-21-cinnamon-64bit.iso').download(folder=download_folder)
10
- # download_folder2 = PathExtended.home().joinpath("Downloads/os")
11
- # download_folder2.mkdir(parents=True, exist_ok=True)
12
- # PathExtended(r'https://download.manjaro.org/kde/21.3.7/manjaro-kde-21.3.7-minimal-220816-linux515.iso').download(folder=download_folder2)
13
-
14
-
15
- # if __name__ == '__main__':
16
- # pass
@@ -1,59 +0,0 @@
1
- """
2
- cargo install
3
- """
4
-
5
- # from machineconfig.utils.terminal import Terminal
6
- # from machineconfig.utils.path_reduced import P as PathExtended
7
- # import platform
8
-
9
-
10
- # def build_rust_executable(url: str=r"https://github.com/atanunq/viu"):
11
- # tool_name = url.split('/')[-1]
12
-
13
- # # move command is not required since tool will go to .cargo/bin which is in PATH by default.
14
- # # move_command = f"mv {exe} {tb.get_env().WindowsApps.as_posix()}/" if platform.platform() == "Windows" else f"sudo mv {exe} /usr/local/bin/"
15
- # # {move_command}
16
-
17
- # script = f"""
18
- # cd ~
19
- # git clone --depth 1 {url}
20
- # cd {tool_name}
21
- # cargo install --path .
22
- # """
23
- # print(f"""
24
- # {'=' * 150}
25
- # 🦀 CARGO BUILD | Building Rust project: {tool_name}
26
- # 📦 Source: {url}
27
- # {'=' * 150}
28
- # """)
29
- # if platform.system() == "Windows":
30
- # Terminal(stdout=None).run(f". {PathExtended.tmpfile(suffix='.ps1').write_text(script, encoding="utf-8")}", shell="pwsh").print()
31
- # else:
32
- # Terminal(stdout=None).run(script, shell="pwsh")
33
-
34
- # exe = PathExtended.home().joinpath(f".cargo/bin/{tool_name}" + (".exe" if platform.system() == "Windows" else ""))
35
-
36
- # try:
37
- # PathExtended.home().joinpath(tool_name).delete(sure=True)
38
- # except PermissionError:
39
- # print(f"""
40
- # {'⚠️' * 20}
41
- # ⚠️ WARNING | Permission error when cleaning up
42
- # 📂 Path: {PathExtended.home().joinpath(tool_name)}
43
- # {'⚠️' * 20}
44
- # """)
45
-
46
- # if platform.system() == "Windows":
47
- # exe = exe.move(folder=PathExtended.get_env().WindowsPaths().WindowsApps)
48
- # elif platform.system() in ["Linux", "Darwin"]:
49
- # Terminal().run(f"sudo mv {exe} /usr/local/bin")
50
- # exe = PathExtended(r"/usr/local/bin").joinpath(exe.name)
51
- # else:
52
- # raise NotImplementedError(f"🚫 Platform {platform.system()} not supported.")
53
- # share_link = exe.to_cloud("gdpo", share=True)
54
- # return share_link
55
-
56
-
57
- # after cargo install diskonaut
58
- # then mv ~/.cargo/bin/diskonaut.exe ~/AppData/Local/Microsoft/WindowsApps/
59
- # then bu_gdrive_sx.ps1 .\diskonaut.exe -sRz # zipping is vital to avoid security layers and keep file metadata.
@@ -1,29 +0,0 @@
1
- """Symlinks"""
2
-
3
- from machineconfig.utils.path_extended import PathExtended as PathExtended
4
- # from machineconfig.utils.utils import choose_from_options
5
-
6
-
7
- def main():
8
- print(f"""
9
- {"=" * 150}
10
- 🔗 SYMLINK CREATOR | Create symlinks for virtual environments
11
- {"=" * 150}
12
- """)
13
- target = PathExtended(input("🎯 Symlink to which target? ")).expanduser().absolute()
14
- source = input(f"📍 Symlink from which source? [default to: CWD/{target.name}] ") or PathExtended.cwd().joinpath(target.name)
15
- if isinstance(source, str):
16
- source = PathExtended(source).expanduser().absolute()
17
- source.symlink_to(target, overwrite=True)
18
- print(f"""
19
- {"=" * 150}
20
- ✅ SUCCESS | Symlink created successfully
21
- 📍 Source: {source}
22
- 🎯 Target: {target}
23
- {"=" * 150}
24
- """)
25
- print("🔗 Finished creating symlink.")
26
-
27
-
28
- if __name__ == "__main__":
29
- pass
@@ -1,3 +0,0 @@
1
- from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
2
-
3
- program = main_backup_retrieve(direction="BACKUP", which="all")
@@ -1,49 +0,0 @@
1
- from pathlib import Path
2
- from machineconfig.utils.accessories import randstr
3
- from typing import Annotated
4
- import typer
5
-
6
-
7
- def open_file_in_new_instance(file_path: str):
8
- import git
9
-
10
- repo = git.Repo(search_parent_directories=True)
11
- repo_path = repo.working_tree_dir
12
- # Ensure repo_path is not None before passing to Path
13
- repo_name = Path(repo_path if repo_path is not None else ".").name
14
- repo_copy_name = f"{repo_name}_{randstr(5)}"
15
- copy_path = Path.home().joinpath(".config", "machingconfig", "vscode_api", repo_name, repo_copy_name)
16
- copy_path.parent.mkdir(parents=True, exist_ok=True)
17
- code = f"""
18
- ln -s {repo_path} {copy_path}
19
- cd {copy_path}
20
- code --profile bitProfile --new-window {file_path}
21
- """
22
- from rich.console import Console
23
- from rich.syntax import Syntax
24
- from rich.panel import Panel
25
-
26
- console = Console()
27
- console.print(f"\n{'=' * 150}")
28
- console.print(Panel(Syntax(code, lexer="bash"), title="🔍 VS CODE API | Opening file in new instance", subtitle=f"📂 {file_path}"), style="bold blue")
29
- console.print(f"{'=' * 150}\n")
30
-
31
- code_path = Path.home().joinpath(".config", "machingconfig", "vscode_api", "code_temp")
32
- code_path.parent.mkdir(parents=True, exist_ok=True)
33
- code_path.write_text(code, encoding="utf-8")
34
- code_path.chmod(0o755)
35
- import subprocess
36
-
37
- subprocess.run([str(code_path)], shell=True, check=True)
38
-
39
-
40
- def main(file_path: Annotated[str, typer.Argument(help="Path to the file to open")]) -> None:
41
- open_file_in_new_instance(file_path)
42
-
43
-
44
- def arg_parser() -> None:
45
- typer.run(main)
46
-
47
-
48
- if __name__ == "__main__":
49
- arg_parser()
@@ -1,58 +0,0 @@
1
- from pathlib import Path
2
- from configparser import SectionProxy
3
- from machineconfig.utils.io import read_ini
4
-
5
- config = read_ini(Path.home().joinpath(".ssh", "config"))
6
-
7
-
8
- def sync_remote(machine_name: str):
9
- print(f"""
10
- {"=" * 150}
11
- 🔄 SYNC REMOTE | Initiating remote code synchronization
12
- 🖥️ Target machine: {machine_name}
13
- {"=" * 150}
14
- """)
15
-
16
- # Handle config as a ConfigParser object
17
- machine_config: SectionProxy | None = None
18
- if machine_name in config:
19
- machine_config = config[machine_name]
20
-
21
- if machine_config is None:
22
- error_msg = f"Machine {machine_name} not found in SSH config."
23
- print(f"""
24
- {"⚠️" * 20}
25
- ❌ ERROR | {error_msg}
26
- {"⚠️" * 20}
27
- """)
28
- raise ValueError(error_msg)
29
-
30
- code = f"""
31
- ssh -o "HostName={machine_config["HostName"]}" -o "User={machine_config["User"]}" -o "ProxyCommand=cloudflared access ssh --hostname %h" -o "Port={machine_config["Port"]}" -o "RequestTTY=yes" -o "RemoteCommand=devops --which update; bash" {machine_name}
32
- """
33
- from rich.console import Console
34
- from rich.syntax import Syntax
35
- from rich.panel import Panel
36
-
37
- console = Console()
38
- console.print(f"\n{'=' * 150}")
39
- console.print(Panel(Syntax(code, lexer="bash"), title=f"🔄 SYNC COMMAND | Connecting to {machine_name}", subtitle=f"🌐 Host: {machine_config['HostName']}"), style="bold blue")
40
- console.print(f"{'=' * 150}\n")
41
-
42
- code_path = Path.home().joinpath(".config", "machingconfig", "vscode_api", "code_temp")
43
- code_path.parent.mkdir(parents=True, exist_ok=True)
44
- code_path.write_text(code, encoding="utf-8")
45
- code_path.chmod(0o755)
46
-
47
- print(f"🚀 Executing sync command for {machine_name}...")
48
-
49
- import subprocess
50
-
51
- subprocess.run([str(code_path)], shell=True, check=True)
52
-
53
- print(f"""
54
- {"=" * 150}
55
- ✅ SUCCESS | Remote sync completed successfully
56
- 🖥️ Machine: {machine_name}
57
- {"=" * 150}
58
- """)
@@ -1,14 +0,0 @@
1
-
2
- # install https://visualstudio.microsoft.com/visual-cpp-build-tools/
3
- # include
4
- # winget install Microsoft.VisualStudio.2022.BuildTools
5
- # winget install Microsoft.VC++2015-2022Redist-x86
6
-
7
-
8
- . "$env:USERPROFILE\code\machineconfig\.venv\Scripts\Activate.ps1"
9
- Set-Location C:
10
- python -m pip install --global-option=build_ext --global-option="-IC:\Program Files\Graphviz\include" --global-option="-LC:\Program Files\Graphviz\lib" pygraphviz
11
- # not including the options as above (from https://pygraphviz.github.io/documentation/stable/install.html)
12
- # would result in an error like this: pygraphviz/graphviz_wrap.c(2711): fatal error C1083: Cannot open include file: 'graphviz/cgraph.h': No such file or directory
13
-
14
-
@@ -1,6 +0,0 @@
1
-
2
- wt --profile croshell -d . --title "MyTerminal" --tabColor "red"`; split-pane --vertical --size 0.55 pwsh machineconfig-workingdirectory ~/code/machineconfig -Command "pwd" `; split-pane -V PowerShell -NoExit -Command "cd code/machineconfig" `; split-pane -H wsl.exe cmatrix`; split-pane -V wsl.exe sl
3
- # wt -p "Command Prompt" `; split-pane -p "Windows PowerShell" `; split-pane -H wsl.exe
4
-
5
- # See more settings here: https://docs.microsoft.com/en-us/windows/terminal/
6
-
@@ -1,2 +0,0 @@
1
-
2
- powershell %USERPROFILE%/code/machineconfig/src/machineconfig/jobs/windows/start_terminal.ps1
@@ -1,170 +0,0 @@
1
- """
2
- This script Takes away all config files from the computer, place them in one directory
3
- `dotfiles`, and create symlinks to those files from thier original locations.
4
-
5
- """
6
-
7
- from rich.console import Console
8
-
9
- from machineconfig.utils.path_extended import PathExtended as PathExtended
10
- from machineconfig.utils.links import symlink_func, symlink_copy
11
- from machineconfig.utils.options import choose_from_options
12
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT, REPO_ROOT
13
- from machineconfig.profile.shell import create_default_shell_profile
14
-
15
- import platform
16
- import os
17
- import ctypes
18
- import subprocess
19
- import tomllib
20
- from typing import Optional, Any, TypedDict
21
-
22
- system = platform.system() # Linux or Windows
23
- ERROR_LIST: list[Any] = [] # append to this after every exception captured.
24
- SYSTEM = system.lower()
25
-
26
-
27
- def get_other_systems(current_system: str) -> list[str]:
28
- all_systems = ["linux", "windows", "darwin"]
29
- return [s for s in all_systems if s != current_system.lower()]
30
-
31
-
32
- OTHER_SYSTEMS = get_other_systems(SYSTEM)
33
-
34
-
35
- class SymlinkMapper(TypedDict):
36
- this: str
37
- to_this: str
38
- contents: Optional[bool]
39
-
40
-
41
- def apply_mapper(choice: Optional[str] = None):
42
- symlink_mapper: dict[str, dict[str, SymlinkMapper]] = tomllib.loads(LIBRARY_ROOT.joinpath("profile/mapper.toml").read_text(encoding="utf-8"))
43
- prioritize_to_this = True
44
- exclude: list[str] = [] # "wsl_linux", "wsl_windows"
45
-
46
- program_keys_raw: list[str] = list(symlink_mapper.keys())
47
- program_keys: list[str] = []
48
- for program_key in program_keys_raw:
49
- if program_key in exclude or any([another_system in program_key for another_system in OTHER_SYSTEMS]):
50
- continue
51
- else:
52
- program_keys.append(program_key)
53
-
54
- program_keys.sort()
55
- if choice is None:
56
- choice_selected = choose_from_options(msg="Which symlink to create?", options=program_keys + ["all", "none(EXIT)"], default="none(EXIT)", fzf=True, multi=True)
57
- assert isinstance(choice_selected, list)
58
- if len(choice_selected) == 1 and choice_selected[0] == "none(EXIT)":
59
- return # terminate function.
60
- elif len(choice_selected) == 1 and choice_selected[0] == "all":
61
- choice_selected = "all" # i.e. program_keys = program_keys
62
- # overwrite = choose_from_options(msg="Overwrite existing source file?", options=["yes", "no"], default="yes") == "yes"
63
- from rich.prompt import Confirm
64
-
65
- prioritize_to_this = Confirm.ask("Overwrite existing source file?", default=True)
66
- else:
67
- choice_selected = choice
68
-
69
- if isinstance(choice_selected, str):
70
- if str(choice_selected) == "all" and system == "Windows":
71
- if os.name == "nt":
72
- try:
73
- is_admin = ctypes.windll.shell32.IsUserAnAdmin()
74
- except Exception:
75
- is_admin = False
76
- else:
77
- is_admin = False
78
- if not is_admin:
79
- print(f"""
80
- {"*" * 80}
81
- ⚠️ WARNING: Administrator privileges required
82
- {"*" * 80}
83
- """)
84
- raise RuntimeError("Run terminal as admin and try again, otherwise, there will be too many popups for admin requests and no chance to terminate the program.")
85
- elif choice_selected == "all":
86
- print(f"""
87
- 🔍 Processing all program keys:
88
- {program_keys}
89
- """)
90
- pass # i.e. program_keys = program_keys
91
- else:
92
- program_keys = [choice_selected]
93
- else:
94
- program_keys = choice_selected
95
-
96
- for program_key in program_keys:
97
- print(f"\n🔄 Processing {program_key} symlinks...")
98
- for file_key, file_map in symlink_mapper[program_key].items():
99
- this = PathExtended(file_map["this"])
100
- to_this = PathExtended(file_map["to_this"].replace("REPO_ROOT", REPO_ROOT.as_posix()).replace("LIBRARY_ROOT", LIBRARY_ROOT.as_posix()))
101
- if "contents" in file_map:
102
- try:
103
- for a_target in to_this.expanduser().search("*"):
104
- symlink_func(this=this.joinpath(a_target.name), to_this=a_target, prioritize_to_this=prioritize_to_this)
105
- except Exception as ex:
106
- print(f"❌ Config error: {program_key} | {file_key} | missing keys 'this ==> to_this'. {ex}")
107
- if "copy" in file_map:
108
- try:
109
- symlink_copy(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
110
- except Exception as ex:
111
- print(f"❌ Config error: {program_key} | {file_key} | {ex}")
112
- else:
113
- try:
114
- symlink_func(this=this, to_this=to_this, prioritize_to_this=prioritize_to_this)
115
- except Exception as ex:
116
- print(f"❌ Config error: {program_key} | {file_key} | missing keys 'this ==> to_this'. {ex}")
117
-
118
- if program_key == "ssh" and system == "Linux": # permissions of ~/dotfiles/.ssh should be adjusted
119
- try:
120
- print("\n🔒 Setting secure permissions for SSH files...")
121
- subprocess.run("chmod 700 ~/.ssh/", check=True)
122
- subprocess.run("chmod 700 ~/dotfiles/creds/.ssh/", check=True) # may require sudo
123
- subprocess.run("chmod 600 ~/dotfiles/creds/.ssh/*", check=True)
124
- print("✅ SSH permissions set successfully")
125
- except Exception as e:
126
- ERROR_LIST.append(e)
127
- print(f"❌ Error setting SSH permissions: {e}")
128
-
129
- if system == "Linux":
130
- print("\n📜 Setting executable permissions for scripts...")
131
- subprocess.run(f"chmod +x {LIBRARY_ROOT.joinpath(f'scripts/{system.lower()}')} -R", shell=True, capture_output=True, text=True)
132
- print("✅ Script permissions updated")
133
-
134
- if len(ERROR_LIST) > 0:
135
- print(f"""
136
- {"*" * 80}
137
- ❗ ERRORS ENCOUNTERED DURING PROCESSING
138
- {"*" * 80}
139
- {ERROR_LIST}
140
- {"*" * 80}
141
- """)
142
- else:
143
- print(f"""
144
- {"*" * 80}
145
- ✅ All symlinks created successfully!
146
- {"*" * 80}
147
- """)
148
-
149
-
150
- def main_symlinks():
151
- console = Console()
152
- print("\n")
153
- console.rule("[bold blue]🔗 CREATING SYMLINKS 🔗")
154
- apply_mapper(choice="all")
155
-
156
-
157
- def main_profile():
158
- console = Console()
159
- print("\n")
160
- console.rule("[bold green]🐚 CREATING SHELL PROFILE 🐚")
161
- create_default_shell_profile()
162
- print(f"""
163
- {"=" * 80}
164
- ✨ Configuration setup complete! ✨
165
- {"=" * 80}
166
- """)
167
-
168
-
169
- if __name__ == "__main__":
170
- pass
@@ -1,176 +0,0 @@
1
- """shell"""
2
-
3
- from machineconfig.utils.path_extended import PathExtended as PathExtended
4
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT
5
-
6
- import platform
7
- import os
8
- import subprocess
9
- from rich.console import Console
10
- from rich.panel import Panel
11
-
12
-
13
- system = platform.system()
14
- sep = ";" if system == "Windows" else ":" # PATH separator, this is special for PATH object, not to be confused with PathExtended.sep (normal paths), usually / or \
15
- PATH = os.environ["PATH"].split(sep) # this is a list of paths in PATH variable, not a crocodile.file_management.P object.
16
- console = Console()
17
- BOX_WIDTH = 100 # Define BOX_WIDTH or get it from a config
18
-
19
-
20
- def get_shell_profile_path() -> PathExtended:
21
- if system == "Windows":
22
- result = subprocess.run(["pwsh", "-Command", "$PROFILE"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=False)
23
- if result.returncode == 0 and result.stdout.strip():
24
- profile_path = PathExtended(result.stdout.strip())
25
- else:
26
- print(f"Command failed with return code {result.returncode}")
27
- print(f"stdout: {result.stdout}")
28
- print(f"stderr: {result.stderr}")
29
- raise ValueError(f"""Could not get profile path for Windows. Got stdout: {result.stdout}, stderr: {result.stderr}""")
30
- elif system == "Linux":
31
- profile_path = PathExtended("~/.bashrc").expanduser()
32
- else:
33
- raise ValueError(f"""Not implemented for this system {system}""")
34
- console.print(Panel(f"""🐚 SHELL PROFILE | Working with path: `{profile_path}`""", title="[bold blue]Shell Profile[/bold blue]", border_style="blue"))
35
- return profile_path
36
-
37
-
38
- def create_default_shell_profile() -> None:
39
- shell_profile_path = get_shell_profile_path()
40
- shell_profile = shell_profile_path.read_text(encoding="utf-8")
41
- if system == "Windows":
42
- source = f""". {str(PathExtended(LIBRARY_ROOT).joinpath("settings/shells/pwsh/init.ps1").collapseuser()).replace("~", "$HOME")}"""
43
- else:
44
- source = f"""source {str(PathExtended(LIBRARY_ROOT).joinpath("settings/shells/bash/init.sh").collapseuser()).replace("~", "$HOME")}"""
45
- if source in shell_profile:
46
- console.print(Panel("🔄 PROFILE | Skipping init script sourcing - already present in profile", title="[bold blue]Profile[/bold blue]", border_style="blue"))
47
- else:
48
- console.print(Panel("📝 PROFILE | Adding init script sourcing to profile", title="[bold blue]Profile[/bold blue]", border_style="blue"))
49
- shell_profile += "\n" + source + "\n"
50
- if system == "Linux":
51
- result = subprocess.run(["cat", "/proc/version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=False)
52
- if result.returncode == 0 and result.stdout:
53
- version_info = result.stdout.lower()
54
- if "microsoft" in version_info or "wsl" in version_info:
55
- shell_profile += "\ncd ~"
56
- console.print("📌 WSL detected - adding 'cd ~' to profile to avoid Windows filesystem")
57
- shell_profile_path.parent.mkdir(parents=True, exist_ok=True)
58
- shell_profile_path.write_text(shell_profile, encoding="utf-8")
59
- console.print(Panel("✅ Profile updated successfully", title="[bold blue]Profile[/bold blue]", border_style="blue"))
60
-
61
-
62
- # def append_temporarily(dirs: list[str], kind: Literal["append", "prefix", "replace"]) -> str:
63
- # dirs_ = []
64
- # for path in dirs:
65
- # path_rel = PathExtended(path).collapseuser(strict=False)
66
- # if path_rel.as_posix() in PATH or str(path_rel) in PATH or str(path_rel.expanduser()) in PATH or path_rel.expanduser().as_posix() in PATH:
67
- # print(f"Path passed `{path}` is already in PATH, skipping the appending.")
68
- # else:
69
- # dirs_.append(path_rel.as_posix() if system == "Linux" else str(path_rel))
70
- # dirs = dirs_
71
- # if len(dirs) == 0:
72
- # return ""
73
-
74
- # if system == "Windows":
75
- # """Source: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.2"""
76
- # if kind == "append":
77
- # command = rf'$env:Path += ";{sep.join(dirs)}"' # Append to the Path variable in the current window:
78
- # elif kind == "prefix":
79
- # command = rf'$env:Path = "{sep.join(dirs)};" + $env:Path' # Prefix the Path variable in the current window:
80
- # elif kind == "replace":
81
- # command = rf'$env:Path = "{sep.join(dirs)}"' # Replace the Path variable in the current window (use with caution!):
82
- # else:
83
- # raise KeyError
84
- # return command # if run is False else tm.run(command, shell="powershell")
85
- # elif system in ["Linux", "Darwin"]:
86
- # result = f'export PATH="{sep.join(dirs)}:$PATH"'
87
- # else:
88
- # raise ValueError
89
- # return result
90
-
91
-
92
- # def main_add_sources_to_shell_profile(profile_path: Optional[str], choice: Optional[str]) -> None:
93
- # sources: list[str] = read_toml(LIBRARY_ROOT.joinpath("profile/sources.toml"))[system.lower()]["files"]
94
- # console.print(Panel("🔄 Adding sources to shell profile", title="[bold blue]Sources[/bold blue]", border_style="blue"))
95
-
96
- # if choice is None:
97
- # choice_obj = choose_from_options(msg="Which patch to add?", options=sources + ["all", "none(EXIT)"], default="none(EXIT)", multi=True)
98
- # if isinstance(choice_obj, str):
99
- # if choice_obj == "all":
100
- # choice = choice_obj
101
- # elif choice_obj == "none(EXIT)":
102
- # return
103
- # else:
104
- # sources = [choice_obj]
105
- # else: # isinstance(choice_obj, list):
106
- # sources = choice_obj
107
- # elif choice == "none(EXIT)":
108
- # return
109
-
110
- # if isinstance(profile_path, str):
111
- # profile_path_obj = PathExtended(profile_path)
112
- # else:
113
- # profile_path_obj = get_shell_profile_path()
114
- # profile = profile_path_obj.read_text(encoding="utf-8")
115
-
116
- # for a_file in sources:
117
- # tmp = a_file.replace("REPO_ROOT", REPO_ROOT.as_posix()).replace("LIBRARY_ROOT", LIBRARY_ROOT.as_posix())
118
- # file = PathExtended(tmp).collapseuser() # this makes the shell profile interuseable across machines.
119
- # file = file.as_posix() if system == "Linux" else str(file)
120
- # if file not in profile:
121
- # if system == "Windows":
122
- # profile += f"\n. {file}"
123
- # console.print(f"➕ Added PowerShell source: {file}")
124
- # elif system == "Linux":
125
- # profile += f"\nsource {file}"
126
- # console.print(f"➕ Added Bash source: {file}")
127
- # else:
128
- # raise ValueError(f"Not implemented for this system {system}")
129
- # else:
130
- # console.print(f"⏭️ Source already present: {file}")
131
-
132
- # profile_path_obj.write_text(profile, encoding="utf-8")
133
- # console.print(Panel("✅ Shell profile updated with sources", title="[bold blue]Sources[/bold blue]", border_style="blue"))
134
-
135
-
136
- # def main_add_patches_to_shell_profile(profile_path: Optional[str], choice: Optional[str]) -> None:
137
- # patches: list[str] = [item.as_posix() for item in PathExtended(LIBRARY_ROOT).joinpath(f"profile/patches/{system.lower()}").search()]
138
-
139
- # console.print(Panel("🩹 Adding patches to shell profile", title="[bold blue]Patches[/bold blue]", border_style="blue"))
140
-
141
- # if choice is None:
142
- # choice_chosen = choose_from_options(msg="Which patch to add?", options=list(patches) + ["all", "none(EXIT)"], default="none(EXIT)", multi=False)
143
- # assert isinstance(choice_chosen, str), f"Choice must be a string or a list of strings, not {type(choice)}"
144
- # choice = choice_chosen
145
- # if choice == "none(EXIT)":
146
- # return None
147
- # elif str(choice) == "all":
148
- # console.print("📌 Adding all patches to profile")
149
- # else:
150
- # patches = [choice]
151
- # console.print(f"📌 Adding selected patch: {choice}")
152
-
153
- # profile_path_obj = PathExtended(profile_path) if isinstance(profile_path, str) else get_shell_profile_path()
154
- # profile = profile_path_obj.read_text(encoding="utf-8")
155
-
156
- # for patch_path in patches:
157
- # patch_path_obj = PathExtended(patch_path)
158
- # patch = patch_path_obj.read_text(encoding="utf-8")
159
- # if patch in profile:
160
- # console.print(f"⏭️ Patch already present: {patch_path_obj.name}")
161
- # else:
162
- # profile += "\n" + patch
163
- # console.print(f"➕ Added patch: {patch_path_obj.name}")
164
-
165
- # if system == "Linux":
166
- # res = Terminal().run("cat /proc/version").op
167
- # if "microsoft" in res.lower() or "wsl" in res.lower():
168
- # profile += "\ncd ~" # this is to make sure that the current dir is not in the windows file system, which is terribly slow and its a bad idea to be there anyway.
169
- # console.print("📌 WSL detected - adding 'cd ~' to profile to avoid Windows filesystem")
170
-
171
- # profile_path_obj.write_text(profile, encoding="utf-8")
172
- # console.print(Panel("✅ Shell profile updated with patches", title="[bold blue]Patches[/bold blue]", border_style="blue"))
173
-
174
-
175
- if __name__ == "__main__":
176
- pass