machineconfig 8.14__py3-none-any.whl → 8.45__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 (269) hide show
  1. machineconfig/cluster/remote/run_cluster.py +1 -1
  2. machineconfig/cluster/remote/run_remote.py +1 -1
  3. machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
  4. machineconfig/cluster/sessions_managers/wt_local.py +1 -1
  5. machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
  6. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  7. machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
  8. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  9. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  10. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  11. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  12. machineconfig/jobs/installer/installer_data.json +225 -140
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +10 -9
  15. machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
  16. machineconfig/jobs/installer/python_scripts/code.py +10 -8
  17. machineconfig/jobs/installer/python_scripts/hx.py +30 -13
  18. machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
  19. machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
  20. machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
  21. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  22. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
  23. machineconfig/jobs/scripts_dynamic/a.py +413 -10
  24. machineconfig/profile/create_links.py +77 -20
  25. machineconfig/profile/create_links_export.py +40 -51
  26. machineconfig/profile/mapper_data.toml +30 -0
  27. machineconfig/profile/mapper_dotfiles.toml +253 -0
  28. machineconfig/scripts/python/agents.py +70 -172
  29. machineconfig/scripts/python/ai/initai.py +3 -1
  30. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  31. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  32. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
  33. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  34. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  35. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  36. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  37. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  38. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  39. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  40. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  41. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  42. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  43. machineconfig/scripts/python/cloud.py +58 -11
  44. machineconfig/scripts/python/croshell.py +4 -156
  45. machineconfig/scripts/python/devops.py +57 -40
  46. machineconfig/scripts/python/devops_navigator.py +17 -3
  47. machineconfig/scripts/python/fire_jobs.py +8 -207
  48. machineconfig/scripts/python/ftpx.py +5 -225
  49. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  50. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  51. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  52. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  53. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  54. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  55. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  56. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  57. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  58. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
  59. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  60. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  61. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
  62. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  63. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  64. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  65. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  66. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  67. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
  68. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  69. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  70. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
  71. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
  72. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +265 -0
  73. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +39 -23
  74. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  75. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  76. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  77. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  78. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  79. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  80. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
  81. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
  82. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  84. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  85. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  86. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  87. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  88. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  89. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  90. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  91. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  92. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  93. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  94. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  95. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  96. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  97. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  98. machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
  99. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
  100. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
  101. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  102. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  103. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  104. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  105. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  106. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  107. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  108. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  109. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +116 -33
  110. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  111. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  112. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  113. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  114. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  115. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  116. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +177 -0
  117. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
  118. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  119. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  120. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  121. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +46 -26
  122. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  123. machineconfig/scripts/python/mcfg_entry.py +133 -48
  124. machineconfig/scripts/python/msearch.py +15 -61
  125. machineconfig/scripts/python/sessions.py +59 -194
  126. machineconfig/scripts/python/terminal.py +18 -96
  127. machineconfig/scripts/python/utils.py +101 -20
  128. machineconfig/settings/atuin/config.toml +294 -0
  129. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  130. machineconfig/settings/linters/.ruff.toml +1 -0
  131. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  132. machineconfig/settings/shells/bash/init.sh +6 -3
  133. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  134. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  135. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  136. machineconfig/settings/shells/wt/settings.json +20 -7
  137. machineconfig/settings/shells/zsh/init.sh +34 -4
  138. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  139. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  140. machineconfig/settings/tv/config.toml +234 -0
  141. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  142. machineconfig/settings/wsl/.wslconfig +5 -30
  143. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  144. machineconfig/settings/zellij/layouts/st.kdl +2 -2
  145. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  146. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  147. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  148. machineconfig/setup_mac/__init__.py +0 -2
  149. machineconfig/setup_windows/__init__.py +0 -1
  150. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  151. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  152. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  153. machineconfig/type_hinting/sql/__init__.py +1 -0
  154. machineconfig/type_hinting/sql/base.py +216 -0
  155. machineconfig/type_hinting/sql/core_schema.py +64 -0
  156. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  157. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  158. machineconfig/type_hinting/typedict/__init__.py +1 -0
  159. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  160. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  161. machineconfig/type_hinting/typedict/generators.py +231 -0
  162. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  163. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  164. machineconfig/utils/accessories.py +24 -0
  165. machineconfig/utils/code.py +41 -13
  166. machineconfig/utils/files/ascii_art.py +10 -14
  167. machineconfig/utils/files/headers.py +3 -5
  168. machineconfig/utils/files/read.py +8 -1
  169. machineconfig/utils/installer_utils/github_release_bulk.py +1 -0
  170. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  171. machineconfig/utils/installer_utils/installer_class.py +12 -4
  172. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  173. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  174. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  175. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  176. machineconfig/utils/meta.py +6 -4
  177. machineconfig/utils/options.py +49 -19
  178. machineconfig/utils/options_utils/__init__.py +0 -0
  179. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  180. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  181. machineconfig/utils/options_utils/tv_options.py +37 -0
  182. machineconfig/utils/path_extended.py +6 -6
  183. machineconfig/utils/scheduler.py +8 -2
  184. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  185. machineconfig/utils/source_of_truth.py +6 -1
  186. machineconfig/utils/ssh.py +69 -18
  187. machineconfig/utils/ssh_utils/abc.py +1 -1
  188. machineconfig/utils/ssh_utils/wsl.py +107 -170
  189. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  190. machineconfig/utils/upgrade_packages.py +4 -8
  191. {machineconfig-8.14.dist-info → machineconfig-8.45.dist-info}/METADATA +29 -22
  192. {machineconfig-8.14.dist-info → machineconfig-8.45.dist-info}/RECORD +247 -208
  193. machineconfig/jobs/installer/check_installations.py +0 -248
  194. machineconfig/profile/backup.toml +0 -49
  195. machineconfig/profile/mapper.toml +0 -263
  196. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  197. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  198. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  199. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
  200. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  201. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  202. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  203. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  204. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  205. machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
  206. machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
  207. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  208. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  209. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  210. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  211. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  212. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  213. machineconfig/utils/options_tv.py +0 -119
  214. machineconfig/utils/tst.py +0 -20
  215. /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
  216. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  217. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  218. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  219. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  220. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  221. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  222. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  223. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  224. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  225. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  226. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  227. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
  228. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
  229. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
  230. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
  231. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
  232. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
  233. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  234. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  235. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
  236. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  237. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  238. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  239. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  240. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  241. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  242. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  243. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  244. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  245. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  246. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  247. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  248. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  249. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  250. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
  251. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
  252. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  253. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  254. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  255. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  256. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  257. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  258. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  259. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  260. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  261. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  262. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  263. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  264. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  265. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  266. /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
  267. {machineconfig-8.14.dist-info → machineconfig-8.45.dist-info}/WHEEL +0 -0
  268. {machineconfig-8.14.dist-info → machineconfig-8.45.dist-info}/entry_points.txt +0 -0
  269. {machineconfig-8.14.dist-info → machineconfig-8.45.dist-info}/top_level.txt +0 -0
@@ -1,89 +0,0 @@
1
-
2
- """Like yadm and dotter."""
3
-
4
- from machineconfig.profile.create_links_export import ON_CONFLICT_LOOSE, ON_CONFLICT_MAPPER
5
- from typing import Annotated, Literal
6
- import typer
7
-
8
-
9
-
10
- def main(
11
- file: Annotated[str, typer.Argument(help="file/folder path.")],
12
- method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for linking files")] = "copy",
13
- on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
14
- sensitivity: Annotated[Literal["private", "v", "public", "b"], typer.Option(..., "--sensitivity", "-s", help="Sensitivity of the config file.")] = "private",
15
- destination: Annotated[str, typer.Option("--destination", "-d", help="destination folder (override the default, use at your own risk)")] = "",
16
- shared: Annotated[bool, typer.Option("--shared", "-sh", help="Whether the config file is shared across destinations directory.")] = False,
17
- ) -> None:
18
- from rich.console import Console
19
- from rich.panel import Panel
20
- from machineconfig.utils.links import symlink_map, copy_map
21
- from pathlib import Path
22
- match sensitivity:
23
- case "private" | "v":
24
- backup_root = Path.home().joinpath("dotfiles/mapper")
25
- case "public" | "b":
26
- from machineconfig.utils.source_of_truth import CONFIG_ROOT
27
- backup_root = Path(CONFIG_ROOT).joinpath("dotfiles/mapper")
28
-
29
- console = Console()
30
- orig_path = Path(file).expanduser().absolute()
31
- if destination == "":
32
- if shared:
33
- new_path = backup_root.joinpath("shared").joinpath(orig_path.name)
34
- new_path.parent.mkdir(parents=True, exist_ok=True)
35
- else:
36
- new_path = backup_root.joinpath(orig_path.relative_to(Path.home()))
37
- new_path.parent.mkdir(parents=True, exist_ok=True)
38
- else:
39
- if shared:
40
- dest_path = Path(destination).expanduser().absolute()
41
- dest_path.mkdir(parents=True, exist_ok=True)
42
- new_path = dest_path.joinpath("shared").joinpath(orig_path.name)
43
- new_path.parent.mkdir(parents=True, exist_ok=True)
44
- else:
45
- dest_path = Path(destination).expanduser().absolute()
46
- dest_path.mkdir(parents=True, exist_ok=True)
47
- new_path = dest_path.joinpath(orig_path.name)
48
- match method:
49
- case "copy" | "c":
50
- try:
51
- copy_map(config_file_default_path=orig_path, self_managed_config_file_path=new_path, on_conflict=ON_CONFLICT_MAPPER[on_conflict]) # type: ignore[arg-type]
52
- except Exception as e:
53
- typer.echo(f"[red]Error:[/] {e}")
54
- typer.Exit(code=1)
55
- return
56
- case "symlink" | "s":
57
- try:
58
- symlink_map(config_file_default_path=orig_path, self_managed_config_file_path=new_path, on_conflict=ON_CONFLICT_MAPPER[on_conflict]) # type: ignore[arg-type]
59
- except Exception as e:
60
- typer.echo(f"[red]Error:[/] {e}")
61
- typer.Exit(code=1)
62
- case _:
63
- raise ValueError(f"Unknown method: {method}")
64
- console.print(Panel("\n".join(["✅ Symbolic link created successfully!", "🔄 Add the following snippet to mapper.toml to persist this mapping:",]), title="Symlink Created", border_style="green", padding=(1, 2),))
65
-
66
- # mapper_snippet = "\n".join(
67
- # [
68
- # f"[bold]📝 Edit configuration file:[/] [cyan]nano {Path(CONFIG_ROOT)}/symlinks/mapper.toml[/cyan]",
69
- # "",
70
- # f"[{new_path.parent.name}]",
71
- # f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.as_posix()}', to_this = '{new_path.as_posix()}' }}",
72
- # ]
73
- # )
74
- # console.print(
75
- # Panel(
76
- # mapper_snippet,
77
- # title="Mapper Entry",
78
- # border_style="cyan",
79
- # padding=(1, 2),
80
- # )
81
- # )
82
-
83
-
84
- def arg_parser() -> None:
85
- typer.run(main)
86
-
87
-
88
- if __name__ == "__main__":
89
- arg_parser()
@@ -1,25 +0,0 @@
1
-
2
- import typer
3
- from typing import Annotated, Optional
4
-
5
- def backup(cloud: Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Cloud configuration name (rclone config name)")] = None,
6
- which: Annotated[Optional[str], typer.Option("--which", "-w", help="📝 Comma-separated list of items to BACKUP (from backup.toml), or 'all' for all items")] = None):
7
- """💾 BACKUP"""
8
- from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
9
- main_backup_retrieve(direction="BACKUP", which=which, cloud=cloud)
10
-
11
-
12
- def retrieve(cloud: Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Cloud configuration name (rclone config name)")] = None,
13
- which: Annotated[Optional[str], typer.Option("--which", "-w", help="📝 Comma-separated list of items to RETRIEVE (from backup.toml), or 'all' for all items")] = None):
14
- """📥 RETRIEVE"""
15
- from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
16
- main_backup_retrieve(direction="RETRIEVE", which=which, cloud=cloud)
17
-
18
-
19
- def get_app() -> typer.Typer:
20
- app = typer.Typer(name="data", help="💾 [d] Backup and Retrieve configuration files and directories to/from cloud storage using rclone.", no_args_is_help=True)
21
- app.command(name="backup", no_args_is_help=True, hidden=False, help="💾 [b] Backup files and directories to cloud storage using rclone.")(backup)
22
- app.command(name="b", no_args_is_help=True, hidden=True,)(backup)
23
- app.command(name="retrieve", no_args_is_help=True, hidden=False, help="📥 [r] Retrieve files and directories from cloud storage using rclone.")(retrieve)
24
- app.command(name="r", no_args_is_help=True, hidden=True, )(retrieve)
25
- return app
@@ -1,208 +0,0 @@
1
- """Repos CLI powered by Typer.
2
-
3
- # TODO use gh api user --jq '.login' to get the username and use it to clone the repos.
4
- in the event that username@github.com is not mentioned in the remote url.
5
-
6
- """
7
-
8
- from pathlib import Path
9
- from typing import Annotated, Optional
10
- import typer
11
- from machineconfig.scripts.python.helpers_repos.cloud_repo_sync import main as secure_repo_main
12
-
13
-
14
- DirectoryArgument = Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")]
15
- RecursiveOption = Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")]
16
- UVsyncOption = Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")]
17
- CloudOption = Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote.")]
18
-
19
-
20
- def push(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
21
- """🚀 Push changes across repositories."""
22
- from machineconfig.scripts.python.helpers_repos.entrypoint import git_operations
23
- git_operations(directory, pull=False, commit=False, push=True, recursive=recursive, auto_uv_sync=auto_uv_sync)
24
-
25
-
26
- def pull(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
27
- """⬇️ Pull changes across repositories."""
28
- from machineconfig.scripts.python.helpers_repos.entrypoint import git_operations
29
-
30
- git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, auto_uv_sync=auto_uv_sync)
31
-
32
-
33
- def commit(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
34
- """💾 Commit changes across repositories."""
35
- from machineconfig.scripts.python.helpers_repos.entrypoint import git_operations
36
- git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, auto_uv_sync=auto_uv_sync)
37
-
38
-
39
- def sync(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
40
- """🔄 Pull, commit, and push changes across repositories."""
41
- from machineconfig.scripts.python.helpers_repos.entrypoint import git_operations
42
- git_operations(directory, pull=True, commit=True, push=True, recursive=recursive, auto_uv_sync=auto_uv_sync)
43
-
44
-
45
- def capture(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
46
- """📝 Record repositories into a repos.json specification."""
47
- from machineconfig.scripts.python.helpers_repos.entrypoint import resolve_directory
48
- repos_root = resolve_directory(directory)
49
- from machineconfig.scripts.python.helpers_repos.record import main_record as record_repos
50
- save_path = record_repos(repos_root=repos_root)
51
- from machineconfig.utils.path_extended import PathExtended
52
- if cloud is not None:
53
- PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
54
-
55
-
56
- def clone(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
57
- """📥 Clone repositories described by a repos.json specification."""
58
- from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
59
- clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
60
-
61
-
62
- def checkout_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
63
- """🔀 Check out specific commits listed in the specification."""
64
- from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
65
- clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
66
-
67
-
68
- def checkout_to_branch_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
69
- """🔀 Check out to the main branch defined in the specification."""
70
- from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
71
- clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
72
-
73
-
74
- def count_lines_in_repo(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
75
- def func(repo_path: str):
76
- from machineconfig.scripts.python.helpers_repos import repo_analyzer_1
77
- repo_analyzer_1.count_historical_line_edits(repo_path=repo_path)
78
- from machineconfig.utils.code import run_lambda_function
79
- run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig>=8.14"])
80
-
81
-
82
- def print_python_files_by_size(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
83
- def func(repo_path: str):
84
- from machineconfig.scripts.python.helpers_repos.repo_analyzer_2 import print_python_files_by_size_impl
85
- print_python_files_by_size_impl(repo_path=repo_path)
86
- from machineconfig.utils.code import run_lambda_function
87
- run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig[plot]>=8.14"])
88
-
89
-
90
- def analyze_repo_development(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
91
- def func(repo_path: str):
92
- from machineconfig.scripts.python.helpers_repos.repo_analyzer_2 import analyze_over_time
93
- analyze_over_time(repo_path=repo_path)
94
- from machineconfig.utils.code import run_lambda_function
95
- run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig[plot]>=8.14"])
96
-
97
-
98
- def gource_viz(
99
- repo: Annotated[str, typer.Option(..., "--repo", "-r", help="Path to git repository to visualize")] = ".",
100
- output_file: Annotated[Optional[Path], typer.Option(..., "--output", "-o", help="Output video file (e.g., output.mp4). If specified, gource will render to video.")] = None,
101
- resolution: Annotated[str, typer.Option(..., "--resolution", "-res", help="Video resolution (e.g., 1920x1080, 1280x720)")] = "1920x1080",
102
- seconds_per_day: Annotated[float, typer.Option(..., "--seconds-per-day", "-spd", help="Speed of simulation (lower = faster)")] = 0.1,
103
- auto_skip_seconds: Annotated[float, typer.Option(..., "--auto-skip-seconds", "-as", help="Skip to next entry if nothing happens for X seconds")] = 1.0,
104
- title: Annotated[Optional[str], typer.Option(..., "--title", "-t", help="Title for the visualization")] = None,
105
- hide_items: Annotated[list[str], typer.Option(..., "--hide", "-h", help="Items to hide: bloom, date, dirnames, files, filenames, mouse, progress, root, tree, users, usernames")] = [],
106
- key_items: Annotated[bool, typer.Option(..., "--key", "-k", help="Show file extension key")] = False,
107
- fullscreen: Annotated[bool, typer.Option(..., "--fullscreen", "-f", help="Run in fullscreen mode")] = False,
108
- viewport: Annotated[Optional[str], typer.Option(..., "--viewport", "-v", help="Camera viewport (e.g., '1000x1000')")] = None,
109
- start_date: Annotated[Optional[str], typer.Option(..., "--start-date", help="Start date (YYYY-MM-DD)")] = None,
110
- stop_date: Annotated[Optional[str], typer.Option(..., "--stop-date", help="Stop date (YYYY-MM-DD)")] = None,
111
- user_image_dir: Annotated[Optional[Path], typer.Option(..., "--user-image-dir", help="Directory with user avatar images")] = None,
112
- max_files: Annotated[int, typer.Option(..., "--max-files", help="Maximum number of files to show (0 = no limit)")] = 0,
113
- max_file_lag: Annotated[float, typer.Option(..., "--max-file-lag", help="Max time files remain on screen after last change")] = 5.0,
114
- file_idle_time: Annotated[int, typer.Option(..., "--file-idle-time", help="Time in seconds files remain idle before being removed")] = 0,
115
- framerate: Annotated[int, typer.Option(..., "--framerate", help="Frames per second for video output")] = 60,
116
- background_color: Annotated[str, typer.Option(..., "--background-color", help="Background color in hex (e.g., 000000 for black)")] = "000000",
117
- font_size: Annotated[int, typer.Option(..., "--font-size", help="Font size")] = 22,
118
- camera_mode: Annotated[str, typer.Option(..., "--camera-mode", help="Camera mode: overview or track")] = "overview",
119
- ) -> None:
120
- """🎬 Visualize repository activity using Gource."""
121
- from machineconfig.scripts.python.helpers_repos.grource import visualize
122
- visualize(repo=repo, output_file=output_file, resolution=resolution, seconds_per_day=seconds_per_day,
123
- auto_skip_seconds=auto_skip_seconds, title=title, hide_items=hide_items, key_items=key_items,
124
- fullscreen=fullscreen, viewport=viewport, start_date=start_date, stop_date=stop_date,
125
- user_image_dir=user_image_dir, max_files=max_files, max_file_lag=max_file_lag,
126
- file_idle_time=file_idle_time, framerate=framerate, background_color=background_color,
127
- font_size=font_size, camera_mode=camera_mode)
128
-
129
-
130
- def cleanup(repo: DirectoryArgument = None, recursive: RecursiveOption = False) -> None:
131
- """🧹 Clean repository directories from cache files."""
132
- if repo is None:
133
- repo = Path.cwd().as_posix()
134
-
135
- arg_path = Path(repo).expanduser().absolute()
136
- from git import Repo, InvalidGitRepositoryError
137
- if not recursive:
138
- # Check if the directory is a git repo
139
- try:
140
- Repo(str(arg_path), search_parent_directories=False)
141
- except InvalidGitRepositoryError:
142
- typer.echo(f"❌ {arg_path} is not a git repository. Use -r flag for recursive cleanup.")
143
- return
144
- # Run cleanup on this repo
145
- repos_to_clean = [arg_path]
146
- else:
147
- # Find all git repos recursively under the directory
148
- git_dirs = list(arg_path.rglob('.git'))
149
- repos_to_clean = [git_dir.parent for git_dir in git_dirs if git_dir.is_dir()]
150
- if not repos_to_clean:
151
- typer.echo(f"❌ No git repositories found under {arg_path}")
152
- return
153
-
154
- for repo_path in repos_to_clean:
155
- typer.echo(f"🧹 Cleaning {repo_path}")
156
- script = fr"""
157
- cd "{repo_path}"
158
- uv run --with cleanpy cleanpy .
159
- # mcinit .
160
- # find "." -type f \( -name "*.py" -o -name "*.md" -o -name "*.json" \) -not -path "*/\.*" -not -path "*/__pycache__/*" -print0 | xargs -0 sed -i 's/[[:space:]]*$//'
161
- """
162
- from machineconfig.utils.code import run_shell_script
163
- run_shell_script(script)
164
-
165
-
166
- def get_app():
167
- repos_apps = typer.Typer(help="📁 [r] Manage development repositories", no_args_is_help=True, add_help_option=False, add_completion=False)
168
- mirror_app = typer.Typer(help="🔄 [m] Manage repository specifications and syncing", no_args_is_help=True, add_help_option=False, add_completion=False)
169
- repos_apps.add_typer(mirror_app, name="mirror", help="🔄 [m] mirror repositories using saved specs")
170
- repos_apps.add_typer(mirror_app, name="m", help="mirror repositories using saved specs", hidden=True)
171
-
172
- repos_apps.command(name="push", help="🚀 [p] Push changes across repositories")(push)
173
- repos_apps.command(name="p", help="Push changes across repositories", hidden=True)(push)
174
- repos_apps.command(name="pull", help="⬇️ [P] Pull changes across repositories")(pull)
175
- repos_apps.command(name="P", help="Pull changes across repositories", hidden=True)(pull)
176
- repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
177
- repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
178
- repos_apps.command(name="sync", help="🔄 [y] Pull, commit, and push changes across repositories")(sync)
179
- repos_apps.command(name="y", help="Pull, commit, and push changes across repositories", hidden=True)(sync)
180
- repos_apps.command(name="analyze", help="📊 [a] Analyze repository development over time")(analyze_repo_development)
181
- repos_apps.command(name="a", help="Analyze repository development over time", hidden=True)(analyze_repo_development)
182
-
183
- repos_apps.command(name="secure", help="🔐 [s] Securely sync git repository to/from cloud with encryption")(secure_repo_main)
184
- repos_apps.command(name="s", help="Securely sync git repository to/from cloud with encryption", hidden=True)(secure_repo_main)
185
-
186
- repos_apps.command(name="viz", help="🎬 [v] Visualize repository activity using Gource")(gource_viz)
187
- repos_apps.command(name="v", help="Visualize repository activity using Gource", hidden=True)(gource_viz)
188
-
189
- repos_apps.command(name="count-lines", help="📄 [l] Count python lines of code in current repo + historical edits.")(count_lines_in_repo)
190
- repos_apps.command(name="l", help="Count python lines of code in current repo + historical edits.", hidden=True)(count_lines_in_repo)
191
-
192
- repos_apps.command(name="cleanup", help="🧹 [n] Clean repository directories from cache files")(cleanup)
193
- repos_apps.command(name="n", help="Clean repository directories from cache files", hidden=True)(cleanup)
194
-
195
- mirror_app.command(name="capture", help="📝 [cap] Record repositories into a repos.json specification")(capture)
196
- mirror_app.command(name="cap", help="Record repositories into a repos.json specification", hidden=True)(capture)
197
-
198
- mirror_app.command(name="clone", help="📥 [clo] Clone repositories described by a repos.json specification")(clone)
199
- mirror_app.command(name="clo", help="Clone repositories described by a repos.json specification", hidden=True)(clone)
200
-
201
- mirror_app.command(name="checkout-to-commit", help="🔀 [ctc] Check out specific commits listed in the specification")(checkout_command)
202
- mirror_app.command(name="ctc", help="Check out specific commits listed in the specification", hidden=True)(checkout_command)
203
-
204
- mirror_app.command(name="checkout-to-branch", help="🔀 [ctb] Check out to the main branch defined in the specification")(checkout_to_branch_command)
205
- mirror_app.command(name="ctb", help="Check out to the main branch defined in the specification", hidden=True)(checkout_to_branch_command)
206
-
207
- return repos_apps
208
-
@@ -1,80 +0,0 @@
1
- """BR: Backup and Retrieve"""
2
-
3
- # import subprocess
4
- from machineconfig.utils.io import read_ini
5
- from machineconfig.utils.source_of_truth import LIBRARY_ROOT, DEFAULTS_PATH
6
- from machineconfig.utils.code import print_code
7
- from machineconfig.utils.options import choose_cloud_interactively, choose_from_options
8
- from machineconfig.scripts.python.helpers_cloud.helpers2 import ES
9
- from platform import system
10
- from typing import Any, Literal, Optional
11
- from rich.console import Console
12
- from rich.panel import Panel
13
- from pathlib import Path
14
- import tomllib
15
-
16
-
17
- OPTIONS = Literal["BACKUP", "RETRIEVE"]
18
-
19
-
20
- def main_backup_retrieve(direction: OPTIONS, which: Optional[str], cloud: Optional[str]) -> None:
21
- console = Console()
22
- try:
23
- cloud = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
24
- console.print(Panel(f"⚠️ DEFAULT CLOUD CONFIGURATION\n🌥️ Using default cloud: {cloud}", title="[bold blue]Cloud Configuration[/bold blue]", border_style="blue"))
25
- except (FileNotFoundError, KeyError, IndexError):
26
- console.print(Panel("🔍 DEFAULT CLOUD NOT FOUND\n🔄 Please select a cloud configuration from the options below", title="[bold red]Error: Cloud Not Found[/bold red]", border_style="red"))
27
- cloud = choose_cloud_interactively()
28
- bu_file: dict[str, Any] = tomllib.loads(LIBRARY_ROOT.joinpath("profile/backup.toml").read_text(encoding="utf-8"))
29
- console.print(Panel(f"🧰 LOADING BACKUP CONFIGURATION\n📄 File: {LIBRARY_ROOT.joinpath('profile/backup.toml')}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
30
-
31
- if system() == "Linux":
32
- bu_file = {key: val for key, val in bu_file.items() if "windows" not in key}
33
- console.print(Panel(f"🐧 LINUX ENVIRONMENT DETECTED\n🔍 Filtering out Windows-specific entries\n✅ Found {len(bu_file)} applicable backup configuration entries", title="[bold blue]Linux Environment[/bold blue]", border_style="blue"))
34
- elif system() == "Windows":
35
- bu_file = {key: val for key, val in bu_file.items() if "linux" not in key}
36
- console.print(Panel(f"🪟 WINDOWS ENVIRONMENT DETECTED\n🔍 Filtering out Linux-specific entries\n✅ Found {len(bu_file)} applicable backup configuration entries", title="[bold blue]Windows Environment[/bold blue]", border_style="blue"))
37
-
38
- if which is None:
39
- console.print(Panel(f"🔍 SELECT {direction} ITEMS\n📋 Choose which configuration entries to process", title="[bold blue]Select Items[/bold blue]", border_style="blue"))
40
- choices = choose_from_options(multi=True, msg=f"WHICH FILE of the following do you want to {direction}?", options=["all"] + list(bu_file.keys()))
41
- else:
42
- choices = which.split(",") if which else []
43
- console.print(Panel(f"🔖 PRE-SELECTED ITEMS\n📝 Using: {', '.join(choices)}", title="[bold blue]Pre-selected Items[/bold blue]", border_style="blue"))
44
-
45
- if "all" in choices:
46
- items = bu_file
47
- console.print(Panel(f"📋 PROCESSING ALL ENTRIES\n🔢 Total entries to process: {len(bu_file)}", title="[bold blue]Process All Entries[/bold blue]", border_style="blue"))
48
- else:
49
- items = {key: val for key, val in bu_file.items() if key in choices}
50
- console.print(Panel(f"📋 PROCESSING SELECTED ENTRIES\n🔢 Total entries to process: {len(items)}", title="[bold blue]Process Selected Entries[/bold blue]", border_style="blue"))
51
- program = f"""$cloud = "{cloud}:{ES}" \n """ if system() == "Windows" else f"""cloud="{cloud}:{ES}" \n """
52
- console.print(Panel(f"🚀 GENERATING {direction} SCRIPT\n🌥️ Cloud: {cloud}\n🗂️ Items: {len(items)}", title="[bold blue]Script Generation[/bold blue]", border_style="blue"))
53
- for item_name, item in items.items():
54
- flags = ""
55
- flags += "z" if item["zip"] == "True" else ""
56
- flags += "e" if item["encrypt"] == "True" else ""
57
- flags += "r" if item["rel2home"] == "True" else ""
58
- flags += "o" if system().lower() in item_name else ""
59
- console.print(Panel(f"📦 PROCESSING: {item_name}\n📂 Path: {Path(item['path']).as_posix()}\n🏳️ Flags: {flags or 'None'}", title=f"[bold blue]Processing Item: {item_name}[/bold blue]", border_style="blue"))
60
- if flags:
61
- flags = "-" + flags
62
- if direction == "BACKUP":
63
- program += f"""\ncloud_copy "{Path(item["path"]).as_posix()}" $cloud {flags}\n"""
64
- elif direction == "RETRIEVE":
65
- program += f"""\ncloud_copy $cloud "{Path(item["path"]).as_posix()}" {flags}\n"""
66
- else:
67
- console.print(Panel('❌ ERROR: INVALID DIRECTION\n⚠️ Direction must be either "BACKUP" or "RETRIEVE"', title="[bold red]Error: Invalid Direction[/bold red]", border_style="red"))
68
- raise RuntimeError(f"Unknown direction: {direction}")
69
- if item_name == "dotfiles" and system() == "Linux":
70
- program += """\nchmod 700 ~/.ssh/*\n"""
71
- console.print(Panel("🔒 SPECIAL HANDLING: SSH PERMISSIONS\n🛠️ Setting secure permissions for SSH files\n📝 Command: chmod 700 ~/.ssh/*", title="[bold blue]Special Handling: SSH Permissions[/bold blue]", border_style="blue"))
72
- print_code(program, lexer="shell", desc=f"{direction} script")
73
- console.print(Panel(f"✅ {direction} SCRIPT GENERATION COMPLETE\n🚀 Ready to execute the operations", title="[bold green]Script Generation Complete[/bold green]", border_style="green"))
74
- import subprocess
75
-
76
- subprocess.run(program, shell=True, check=True)
77
-
78
-
79
- if __name__ == "__main__":
80
- pass
@@ -1,20 +0,0 @@
1
- """
2
- Helper modules for the devops navigator TUI application.
3
- """
4
-
5
- from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo, ArgumentInfo
6
- from machineconfig.scripts.python.helpers_navigator.command_builder import CommandBuilderScreen
7
- from machineconfig.scripts.python.helpers_navigator.command_tree import CommandTree
8
- from machineconfig.scripts.python.helpers_navigator.command_detail import CommandDetail
9
- from machineconfig.scripts.python.helpers_navigator.search_bar import SearchBar
10
- from machineconfig.scripts.python.helpers_navigator.main_app import CommandNavigatorApp
11
-
12
- __all__ = [
13
- "CommandInfo",
14
- "ArgumentInfo",
15
- "CommandBuilderScreen",
16
- "CommandTree",
17
- "CommandDetail",
18
- "SearchBar",
19
- "CommandNavigatorApp",
20
- ]
@@ -1,44 +0,0 @@
1
- """
2
- Command detail widget for displaying command information.
3
- """
4
-
5
- from typing import Optional
6
- from textual.widgets import Static
7
- from rich.panel import Panel
8
- from rich.text import Text
9
- from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo
10
-
11
-
12
- class CommandDetail(Static):
13
- """Widget for displaying command details."""
14
-
15
- def __init__(self, *, id: str) -> None: # type: ignore
16
- super().__init__(id=id)
17
- self.command_info: Optional[CommandInfo] = None
18
-
19
- def update_command(self, command_info: Optional[CommandInfo]) -> None:
20
- """Update displayed command information."""
21
- self.command_info = command_info
22
- if command_info is None:
23
- self.update("Select a command to view details")
24
- return
25
-
26
- content = Text()
27
- content.append(f"{'🗂️ Group' if command_info.is_group else '⚡ Command'}: ", style="bold cyan")
28
- content.append(f"{command_info.name}\n\n", style="bold yellow")
29
-
30
- content.append("Description: ", style="bold green")
31
- content.append(f"{command_info.description}\n\n", style="white")
32
-
33
- content.append("Command: ", style="bold blue")
34
- content.append(f"{command_info.command}\n\n", style="bold white")
35
-
36
- if command_info.help_text:
37
- content.append("Usage: ", style="bold magenta")
38
- content.append(f"{command_info.help_text}\n\n", style="white")
39
-
40
- if command_info.module_path:
41
- content.append("Module: ", style="bold red")
42
- content.append(f"{command_info.module_path}\n", style="white")
43
-
44
- self.update(Panel(content, title=f"[bold]{command_info.name}[/bold]", border_style="blue"))