machineconfig 8.14__py3-none-any.whl → 8.50__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
- machineconfig/cluster/sessions_managers/wt_local.py +1 -1
- machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +225 -140
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/package_groups.py +10 -9
- machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
- machineconfig/jobs/installer/python_scripts/code.py +10 -8
- machineconfig/jobs/installer/python_scripts/hx.py +30 -13
- machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
- machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
- machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
- machineconfig/jobs/scripts_dynamic/a.py +413 -10
- machineconfig/profile/create_links.py +77 -20
- machineconfig/profile/create_links_export.py +63 -58
- machineconfig/profile/mapper_data.toml +30 -0
- machineconfig/profile/mapper_dotfiles.toml +253 -0
- machineconfig/scripts/python/agents.py +70 -172
- machineconfig/scripts/python/ai/initai.py +3 -1
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +4 -156
- machineconfig/scripts/python/devops.py +57 -40
- machineconfig/scripts/python/devops_navigator.py +17 -3
- machineconfig/scripts/python/fire_jobs.py +8 -207
- machineconfig/scripts/python/ftpx.py +5 -225
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +40 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +117 -33
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +47 -26
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +133 -48
- machineconfig/scripts/python/msearch.py +15 -61
- machineconfig/scripts/python/sessions.py +59 -194
- machineconfig/scripts/python/terminal.py +18 -96
- machineconfig/scripts/python/utils.py +101 -20
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/linters/.ruff.toml +1 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +6 -3
- machineconfig/settings/shells/pwsh/init.ps1 +69 -1
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
- machineconfig/settings/shells/wt/settings.json +20 -7
- machineconfig/settings/shells/zsh/init.sh +25 -4
- machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
- machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
- machineconfig/settings/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/yazi/yazi_linux.toml +18 -8
- machineconfig/settings/zellij/layouts/st.kdl +2 -2
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
- machineconfig/setup_mac/__init__.py +0 -2
- machineconfig/setup_windows/__init__.py +0 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +24 -0
- machineconfig/utils/code.py +41 -13
- machineconfig/utils/files/ascii_art.py +10 -14
- machineconfig/utils/files/headers.py +3 -5
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +1 -1
- machineconfig/utils/installer_utils/installer_class.py +12 -4
- machineconfig/utils/installer_utils/installer_cli.py +1 -15
- machineconfig/utils/installer_utils/installer_helper.py +2 -2
- machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
- machineconfig/utils/installer_utils/installer_runner.py +4 -4
- machineconfig/utils/io.py +25 -8
- machineconfig/utils/meta.py +6 -4
- machineconfig/utils/options.py +49 -19
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +6 -6
- machineconfig/utils/scheduler.py +8 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +69 -18
- machineconfig/utils/ssh_utils/abc.py +1 -1
- machineconfig/utils/ssh_utils/copy_from_here.py +17 -12
- machineconfig/utils/ssh_utils/utils.py +21 -5
- machineconfig/utils/ssh_utils/wsl.py +107 -170
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/upgrade_packages.py +4 -8
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/METADATA +29 -22
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/RECORD +251 -211
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -263
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
- machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
- machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
- machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/options_tv.py +0 -119
- machineconfig/utils/tst.py +0 -20
- /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
- /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
- /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
- /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
- /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
- /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
- /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/WHEEL +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/entry_points.txt +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.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"))
|