machineconfig 6.23__py3-none-any.whl → 8.12__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/cloud_manager.py +1 -1
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +3 -3
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +5 -3
- machineconfig/cluster/sessions_managers/zellij_remote.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -7
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_with_panes.py +1 -1
- machineconfig/jobs/installer/check_installations.py +0 -1
- machineconfig/jobs/installer/installer_data.json +1408 -201
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +63 -92
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/python_scripts/boxes.py +61 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +75 -18
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +90 -132
- machineconfig/profile/mapper.toml +18 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +82 -60
- machineconfig/scripts/python/ai/initai.py +1 -19
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/cloud.py +14 -9
- machineconfig/scripts/python/croshell.py +135 -117
- machineconfig/scripts/python/devops.py +48 -25
- machineconfig/scripts/python/devops_navigator.py +1 -5
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +18 -9
- machineconfig/scripts/python/fire_jobs.py +127 -118
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +37 -15
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_copy.py +28 -21
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_mount.py +19 -17
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_sync.py +12 -11
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +221 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/cli_repos.py +60 -36
- machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
- machineconfig/scripts/python/{devops_helpers/cli_terminal.py → helpers_devops/cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_backup_retrieve.py +7 -10
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_status.py +7 -19
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +2 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_builder.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_detail.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_tree.py +160 -23
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +80 -37
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/entrypoint.py +5 -5
- machineconfig/scripts/python/helpers_repos/grource.py +2 -2
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/record.py +3 -2
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{repos_helpers/count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/sync.py +5 -5
- machineconfig/scripts/python/{sessions_helpers → helpers_sessions}/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +26 -35
- machineconfig/scripts/python/{entry.py → mcfg_entry.py} +24 -10
- machineconfig/scripts/python/msearch.py +72 -0
- machineconfig/scripts/python/sessions.py +101 -38
- machineconfig/scripts/python/terminal.py +136 -0
- machineconfig/scripts/python/utils.py +62 -0
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/linux/lfrc +10 -11
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +15 -17
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +57 -10
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -35
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +59 -23
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -11
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/code.py +143 -167
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/headers.py +6 -11
- machineconfig/utils/files/read.py +3 -9
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +44 -101
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +39 -87
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +17 -63
- machineconfig/utils/io.py +77 -4
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +235 -145
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +46 -97
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +10 -23
- machineconfig/utils/scheduler.py +84 -115
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +214 -476
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +3 -113
- machineconfig/utils/upgrade_packages.py +114 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- machineconfig-8.12.dist-info/RECORD +504 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +5 -1
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/devops_helpers/cli_config.py +0 -81
- machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -84
- machineconfig/scripts/python/devops_helpers/cli_data.py +0 -18
- machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -73
- machineconfig/scripts/python/devops_helpers/cli_self.py +0 -117
- machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -104
- machineconfig/scripts/python/helper_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -30
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/python/repos_helpers/action.py +0 -378
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -17
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- machineconfig/settings/yazi/keymap.toml +0 -0
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/nix/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.23.dist-info/METADATA +0 -84
- machineconfig-6.23.dist-info/RECORD +0 -428
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_restart.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_manager_helper.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/web_shortcuts → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{linux/msc → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{devops_helpers → helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{devops_helpers/themes → helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/scheduler.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/data_models.py +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{repos_helpers → helpers_repos}/update.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_sessions}/__init__.py +0 -0
- /machineconfig/{scripts/python/sessions_helpers → settings/wt}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from typing import Literal, Annotated
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import typer
|
|
6
|
+
import machineconfig.scripts.python.helpers_devops.cli_config_dotfile as dotfile_module
|
|
7
|
+
import machineconfig.profile.create_links_export as create_links_export
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def configure_shell_profile(which: Annotated[Literal["default", "d", "nushell", "n"], typer.Option(..., "--which", "-w", help="Which shell profile to create/configure")]="default"):
|
|
11
|
+
"""🔗 Configure your shell profile."""
|
|
12
|
+
from machineconfig.profile.create_shell_profile import create_default_shell_profile, create_nu_shell_profile
|
|
13
|
+
match which:
|
|
14
|
+
case "nushell" | "n":
|
|
15
|
+
create_nu_shell_profile()
|
|
16
|
+
return
|
|
17
|
+
case "default" | "d":
|
|
18
|
+
create_default_shell_profile()
|
|
19
|
+
return
|
|
20
|
+
typer.echo(f"[red]Error:[/] Unknown shell profile type: {which}")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def pwsh_theme():
|
|
25
|
+
"""🔗 Select powershell prompt theme."""
|
|
26
|
+
import machineconfig.scripts.python.helpers_devops.themes as themes
|
|
27
|
+
file = Path(themes.__file__).parent / "choose_pwsh_theme.ps1"
|
|
28
|
+
import subprocess
|
|
29
|
+
subprocess.run(["pwsh", "-File", str(file)])
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def starship_theme():
|
|
33
|
+
"""🔗 Select starship prompt theme."""
|
|
34
|
+
import subprocess
|
|
35
|
+
from machineconfig.utils.code import run_shell_script
|
|
36
|
+
|
|
37
|
+
presets: list[str] = ["catppuccin-powerline", "pastel-powerline", "tokyo-night", "gruvbox-rainbow", "jetpack"]
|
|
38
|
+
config_path: Path = Path.home() / ".config" / "starship.toml"
|
|
39
|
+
|
|
40
|
+
typer.echo("\n🚀 Starship Theme Selector\n")
|
|
41
|
+
for idx, preset in enumerate(presets, start=1):
|
|
42
|
+
typer.echo(f"{idx}. {preset}")
|
|
43
|
+
|
|
44
|
+
choice: str = typer.prompt("Select a preset")
|
|
45
|
+
|
|
46
|
+
try:
|
|
47
|
+
choice_idx: int = int(choice)
|
|
48
|
+
if 1 <= choice_idx <= len(presets):
|
|
49
|
+
selected_preset: str = presets[choice_idx - 1]
|
|
50
|
+
typer.echo(f"\n✨ Applying {selected_preset}...")
|
|
51
|
+
run_shell_script(f"""starship preset {selected_preset} -o {config_path}""")
|
|
52
|
+
typer.echo("\n📋 Preview:")
|
|
53
|
+
subprocess.run(["starship", "module", "all"], check=False)
|
|
54
|
+
typer.echo(f"\n✅ {selected_preset} applied!")
|
|
55
|
+
else:
|
|
56
|
+
typer.echo("❌ Invalid selection")
|
|
57
|
+
except ValueError:
|
|
58
|
+
typer.echo("❌ Please enter a valid number")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def copy_assets(which: Annotated[Literal["scripts", "s", "settings", "t", "both", "b"], typer.Argument(..., help="Which assets to copy")]):
|
|
62
|
+
"""🔗 Copy asset files from library to machine."""
|
|
63
|
+
import machineconfig.profile.create_helper as create_helper
|
|
64
|
+
match which:
|
|
65
|
+
case "both" | "b":
|
|
66
|
+
create_helper.copy_assets_to_machine(which="scripts")
|
|
67
|
+
create_helper.copy_assets_to_machine(which="settings")
|
|
68
|
+
return
|
|
69
|
+
case "scripts" | "s":
|
|
70
|
+
create_helper.copy_assets_to_machine(which="scripts")
|
|
71
|
+
return
|
|
72
|
+
case "settings" | "t":
|
|
73
|
+
create_helper.copy_assets_to_machine(which="settings")
|
|
74
|
+
return
|
|
75
|
+
typer.echo(f"[red]Error:[/] Unknown asset type: {which}")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def link_wsl_and_windows_home():
|
|
79
|
+
"""🔗 Link WSL home and Windows home directories."""
|
|
80
|
+
import machineconfig.utils.ssh_utils.wsl as wsl_utils
|
|
81
|
+
wsl_utils.link_wsl_and_windows()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_app():
|
|
85
|
+
config_apps = typer.Typer(help="⚙️ [c] configuration subcommands", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
86
|
+
config_apps.command("private", no_args_is_help=True, help="🔗 [v] Manage private configuration files.")(create_links_export.main_private_from_parser)
|
|
87
|
+
config_apps.command("v", no_args_is_help=True, hidden=True)(create_links_export.main_private_from_parser)
|
|
88
|
+
config_apps.command("public", no_args_is_help=True, help="🔗 [b] Manage public configuration files.")(create_links_export.main_public_from_parser)
|
|
89
|
+
config_apps.command("b", no_args_is_help=True, help="Manage public configuration files.", hidden=True)(create_links_export.main_public_from_parser)
|
|
90
|
+
config_apps.command("dotfile", no_args_is_help=True, help="🔗 [d] Manage dotfiles.")(dotfile_module.main)
|
|
91
|
+
config_apps.command("d", no_args_is_help=True, hidden=True)(dotfile_module.main)
|
|
92
|
+
config_apps.command("shell", no_args_is_help=False, help="🔗 [s] Configure your shell profile.")(configure_shell_profile)
|
|
93
|
+
config_apps.command("s", no_args_is_help=False, help="Configure your shell profile.", hidden=True)(configure_shell_profile)
|
|
94
|
+
config_apps.command("starship-theme", no_args_is_help=False, help="🔗 [t] Select starship prompt theme.")(starship_theme)
|
|
95
|
+
config_apps.command("t", no_args_is_help=False, help="Select starship prompt theme.", hidden=True)(starship_theme)
|
|
96
|
+
config_apps.command("pwsh-theme", no_args_is_help=False, help="🔗 [T] Select powershell prompt theme.")(pwsh_theme)
|
|
97
|
+
config_apps.command("T", no_args_is_help=False, help="Select powershell prompt theme.", hidden=True)(pwsh_theme)
|
|
98
|
+
|
|
99
|
+
config_apps.command("copy-assets", no_args_is_help=True, help="🔗 [c] Copy asset files from library to machine.", hidden=False)(copy_assets)
|
|
100
|
+
config_apps.command("c", no_args_is_help=True, help="Copy asset files from library to machine.", hidden=True)(copy_assets)
|
|
101
|
+
|
|
102
|
+
config_apps.command("link-wsl-windows", no_args_is_help=False, help="🔗 [l] Link WSL home and Windows home directories.", hidden=False)(link_wsl_and_windows_home)
|
|
103
|
+
config_apps.command("l", no_args_is_help=False, help="Link WSL home and Windows home directories.", hidden=True)(link_wsl_and_windows_home)
|
|
104
|
+
|
|
105
|
+
return config_apps
|
|
@@ -0,0 +1,89 @@
|
|
|
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()
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
|
|
2
|
+
import machineconfig.scripts.python.helpers_devops.cli_share_file
|
|
3
|
+
import machineconfig.scripts.python.helpers_devops.cli_share_terminal as cli_share_terminal
|
|
4
|
+
import machineconfig.scripts.python.helpers_devops.cli_share_server as cli_share_server
|
|
5
|
+
import typer
|
|
6
|
+
from typing import Optional, Annotated
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def switch_public_ip_address(
|
|
10
|
+
wait_seconds: Annotated[float, typer.Option(..., "--wait", "-w", help="Seconds to wait between steps")] = 2.0,
|
|
11
|
+
max_trials: Annotated[int, typer.Option(..., "--max-trials", "-m", help="Max number of switch attempts")] = 10,
|
|
12
|
+
) -> None:
|
|
13
|
+
"""🔁 Switch public IP address (Cloudflare WARP)"""
|
|
14
|
+
import machineconfig.scripts.python.helpers_network.address_switch as helper
|
|
15
|
+
helper.switch_public_ip_address(max_trials=max_trials, wait_seconds=wait_seconds)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def install_ssh_server():
|
|
19
|
+
"""📡 SSH install server""" # VRPR66JD$X3FQ3
|
|
20
|
+
import platform
|
|
21
|
+
if platform.system() == "Windows":
|
|
22
|
+
from machineconfig.setup_windows import SSH_SERVER
|
|
23
|
+
script = SSH_SERVER.read_text(encoding="utf-8")
|
|
24
|
+
elif platform.system() == "Linux" or platform.system() == "Darwin":
|
|
25
|
+
script = """
|
|
26
|
+
sudo nala install openssh-server -y || true # try to install first
|
|
27
|
+
# sudo nala purge openssh-server -y
|
|
28
|
+
# sudo nala install openssh-server -y
|
|
29
|
+
echo "✅ FINISHED installing openssh-server."""
|
|
30
|
+
else:
|
|
31
|
+
raise NotImplementedError(f"Platform {platform.system()} is not supported.")
|
|
32
|
+
from machineconfig.utils.code import run_shell_script
|
|
33
|
+
run_shell_script(script=script)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def add_ssh_key(path: Annotated[Optional[str], typer.Option(..., help="Path to the public key file")] = None,
|
|
37
|
+
choose: Annotated[bool, typer.Option(..., "--choose", "-c", help="Choose from available public keys in ~/.ssh/*.pub")] = False,
|
|
38
|
+
value: Annotated[bool, typer.Option(..., "--value", "-v", help="Paste the public key content manually")] = False,
|
|
39
|
+
github: Annotated[Optional[str], typer.Option(..., "--github", "-g", help="Fetch public keys from a GitHub username")] = None
|
|
40
|
+
):
|
|
41
|
+
"""🔑 SSH add pub key to this machine so its accessible by owner of corresponding private key."""
|
|
42
|
+
import machineconfig.scripts.python.helpers_network.ssh_add_ssh_key as helper
|
|
43
|
+
helper.main(pub_path=path, pub_choose=choose, pub_val=value, from_github=github)
|
|
44
|
+
def add_ssh_identity():
|
|
45
|
+
"""🗝️ SSH add identity (private key) to this machine"""
|
|
46
|
+
import machineconfig.scripts.python.helpers_network.ssh_add_identity as helper
|
|
47
|
+
helper.main()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def show_address() -> None:
|
|
51
|
+
"""📌 Show this computer addresses on network"""
|
|
52
|
+
import machineconfig.scripts.python.helpers_network.address as helper
|
|
53
|
+
loaded_json = helper.get_public_ip_address()
|
|
54
|
+
from rich import print_json
|
|
55
|
+
print_json(data=loaded_json)
|
|
56
|
+
|
|
57
|
+
from rich.table import Table
|
|
58
|
+
from rich.console import Console
|
|
59
|
+
res = helper.get_all_ipv4_addresses()
|
|
60
|
+
res.append( ("Public IP", loaded_json.get("ip", "N/A")))
|
|
61
|
+
|
|
62
|
+
# loc = loaded_json["loc"]
|
|
63
|
+
# cmd = f"""curl "https://maps.geoapify.com/v1/staticmap?style=osm-bright&width=600&height=300¢er=lonlat:{loc}&zoom=6&marker=lonlat:{loc};color:%23ff0000;size:medium&apiKey=$GEOAPIFY_API_KEY" -o map.png && chafa map.png"""
|
|
64
|
+
# from machineconfig.utils.code import run_shell_script
|
|
65
|
+
# run_shell_script(script=cmd)
|
|
66
|
+
|
|
67
|
+
table = Table(title="Network Interfaces")
|
|
68
|
+
table.add_column("Interface", style="cyan")
|
|
69
|
+
table.add_column("IP Address", style="green")
|
|
70
|
+
|
|
71
|
+
for iface, ip in res:
|
|
72
|
+
table.add_row(iface, ip)
|
|
73
|
+
|
|
74
|
+
console = Console()
|
|
75
|
+
console.print(table)
|
|
76
|
+
|
|
77
|
+
res = helper.select_lan_ipv4(prefer_vpn=False)
|
|
78
|
+
if res is not None:
|
|
79
|
+
# ip, iface = res
|
|
80
|
+
# print(f"Selected IP: {ip} on interface: {iface}")
|
|
81
|
+
print(f"LAN IPv4: {res}")
|
|
82
|
+
else:
|
|
83
|
+
print("No network interfaces found.")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def bind_wsl_port(port: Annotated[int, typer.Option(..., "--port", "-p", help="Port number to bind")]):
|
|
88
|
+
code = f"""
|
|
89
|
+
|
|
90
|
+
$wsl_ip = (wsl.exe hostname -I).Trim().Split(' ')[0]
|
|
91
|
+
netsh interface portproxy add v4tov4 listenport={port} listenaddress=0.0.0.0 connectport={port} connectaddress=$wsl_ip
|
|
92
|
+
|
|
93
|
+
"""
|
|
94
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
95
|
+
exit_then_run_shell_script(code)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def debug_ssh():
|
|
99
|
+
"""🐛 SSH debug"""
|
|
100
|
+
from platform import system
|
|
101
|
+
if system() == "Linux" or system() == "Darwin":
|
|
102
|
+
import machineconfig.scripts.python.helpers_network.ssh_debug_linux as helper
|
|
103
|
+
helper.ssh_debug_linux()
|
|
104
|
+
elif system() == "Windows":
|
|
105
|
+
import machineconfig.scripts.python.helpers_network.ssh_debug_windows as helper
|
|
106
|
+
helper.ssh_debug_windows()
|
|
107
|
+
else:
|
|
108
|
+
raise NotImplementedError(f"Platform {system()} is not supported.")
|
|
109
|
+
|
|
110
|
+
def wifi_select(
|
|
111
|
+
ssid: Annotated[str, typer.Option("-n", "--ssid", help="🔗 SSID of WiFi (from config)")] = "MyPhoneHotSpot",
|
|
112
|
+
manual: Annotated[bool, typer.Option("-m", "--manual", help="🔍 Manual network selection mode")] = False,
|
|
113
|
+
list_: Annotated[bool, typer.Option("-l", "--list", help="📡 List available networks only")] = False,
|
|
114
|
+
) -> None:
|
|
115
|
+
"""Main function with fallback network selection"""
|
|
116
|
+
from rich.panel import Panel
|
|
117
|
+
from rich.prompt import Confirm
|
|
118
|
+
from rich.console import Console
|
|
119
|
+
from machineconfig.scripts.python.helpers_network.wifi_conn import try_config_connection, manual_network_selection, display_available_networks
|
|
120
|
+
console = Console()
|
|
121
|
+
console.print(Panel("📶 Welcome to the WiFi Connector Tool", title="[bold blue]WiFi Connection[/bold blue]", border_style="blue"))
|
|
122
|
+
|
|
123
|
+
# If user just wants to list networks
|
|
124
|
+
if list_:
|
|
125
|
+
display_available_networks()
|
|
126
|
+
return
|
|
127
|
+
|
|
128
|
+
# If user wants manual mode, skip config and go straight to selection
|
|
129
|
+
if manual:
|
|
130
|
+
console.print("[blue]🔍 Manual network selection mode[/blue]")
|
|
131
|
+
if manual_network_selection():
|
|
132
|
+
console.print("[green]🎉 Successfully connected![/green]")
|
|
133
|
+
else:
|
|
134
|
+
console.print("[red]❌ Failed to connect[/red]")
|
|
135
|
+
return
|
|
136
|
+
|
|
137
|
+
# Try to connect using configuration first
|
|
138
|
+
console.print(f"[blue]🔍 Attempting to connect to configured network: {ssid}[/blue]")
|
|
139
|
+
|
|
140
|
+
if try_config_connection(ssid):
|
|
141
|
+
console.print("[green]🎉 Successfully connected using configuration![/green]")
|
|
142
|
+
return
|
|
143
|
+
|
|
144
|
+
# Configuration failed, offer fallback options
|
|
145
|
+
console.print("\n[yellow]⚠️ Configuration connection failed or not available[/yellow]")
|
|
146
|
+
|
|
147
|
+
if Confirm.ask("[blue]Would you like to manually select a network?[/blue]", default=True):
|
|
148
|
+
if manual_network_selection():
|
|
149
|
+
console.print("[green]🎉 Successfully connected![/green]")
|
|
150
|
+
else:
|
|
151
|
+
console.print("[red]❌ Failed to connect[/red]")
|
|
152
|
+
else:
|
|
153
|
+
console.print("[blue]👋 Goodbye![/blue]")
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def reset_cloudflare_tunnel():
|
|
158
|
+
code = """
|
|
159
|
+
# cloudflared tunnel route dns glenn # creates CNAMES in Cloudflare dashboard
|
|
160
|
+
# sudo systemctl stop cloudflared
|
|
161
|
+
# test: cloudflared tunnel run glenn
|
|
162
|
+
home_dir=$HOME
|
|
163
|
+
cloudflared_path="$home_dir/.local/bin/cloudflared"
|
|
164
|
+
sudo $cloudflared_path service uninstall
|
|
165
|
+
sudo rm /etc/cloudflared/config.yml || true
|
|
166
|
+
sudo $cloudflared_path --config $home_dir/.cloudflared/config.yml service install
|
|
167
|
+
"""
|
|
168
|
+
print(code)
|
|
169
|
+
def add_ip_exclusion_to_warp(ip: Annotated[str, typer.Option(..., "--ip", help="IP address to exclude from WARP")]):
|
|
170
|
+
code = f"""
|
|
171
|
+
sudo warp-cli tunnel ip add {ip}
|
|
172
|
+
sudo warp-cli disconnect
|
|
173
|
+
sudo warp-cli connect
|
|
174
|
+
"""
|
|
175
|
+
print(code)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def get_app():
|
|
179
|
+
nw_apps = typer.Typer(help="🔐 [n] Network subcommands", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
180
|
+
nw_apps.command(name="share-terminal", help="📡 [t] Share terminal via web browser")(cli_share_terminal.share_terminal)
|
|
181
|
+
nw_apps.command(name="t", help="Share terminal via web browser", hidden=True)(cli_share_terminal.share_terminal)
|
|
182
|
+
|
|
183
|
+
nw_apps.command(name="share-server", help="🌐 [s] Start local/global server to share files/folders via web browser", no_args_is_help=True)(cli_share_server.web_file_explorer)
|
|
184
|
+
nw_apps.command(name="s", help="Start local/global server to share files/folders via web browser", hidden=True, no_args_is_help=True)(cli_share_server.web_file_explorer)
|
|
185
|
+
|
|
186
|
+
# app = cli_share_server.get_share_file_app()
|
|
187
|
+
# nw_apps.add_typer(app, name="share-file", help="📁 [f] Share a file via relay server", no_args_is_help=True)
|
|
188
|
+
# nw_apps.add_typer(app, name="f", help="Share a file via relay server", hidden=True, no_args_is_help=True)
|
|
189
|
+
nw_apps.command(name="send", no_args_is_help=True, hidden=False, help="📁 [sx] send files from here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_send)
|
|
190
|
+
nw_apps.command(name="sx", no_args_is_help=True, hidden=True, help="📁 [sx] send files from here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_send)
|
|
191
|
+
nw_apps.command(name="receive", no_args_is_help=True, hidden=False, help="📁 [rx] receive files to here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_receive)
|
|
192
|
+
nw_apps.command(name="rx", no_args_is_help=True, hidden=True, help="📁 [rx] receive files to here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_receive)
|
|
193
|
+
|
|
194
|
+
nw_apps.command(name="install-ssh-server", help="📡 [i] Install SSH server")(install_ssh_server)
|
|
195
|
+
nw_apps.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
|
|
196
|
+
nw_apps.command(name="add-ssh-key", help="🔑 [k] Add SSH public key to this machine", no_args_is_help=True)(add_ssh_key)
|
|
197
|
+
nw_apps.command(name="k", help="Add SSH public key to this machine", hidden=True, no_args_is_help=True)(add_ssh_key)
|
|
198
|
+
nw_apps.command(name="add-ssh-identity", help="🗝️ [A] Add SSH identity (private key) to this machine")(add_ssh_identity)
|
|
199
|
+
nw_apps.command(name="A", help="Add SSH identity (private key) to this machine", hidden=True)(add_ssh_identity)
|
|
200
|
+
|
|
201
|
+
nw_apps.command(name="show-address", help="📌 [a] Show this computer addresses on network")(show_address)
|
|
202
|
+
nw_apps.command(name="a", help="Show this computer addresses on network", hidden=True)(show_address)
|
|
203
|
+
|
|
204
|
+
nw_apps.command(name="switch-public-ip", help="🔁 [c] Switch public IP address (Cloudflare WARP)")(switch_public_ip_address)
|
|
205
|
+
nw_apps.command(name="c", help="Switch public IP address (Cloudflare WARP)", hidden=True)(switch_public_ip_address)
|
|
206
|
+
|
|
207
|
+
nw_apps.command(name="debug-ssh", help="🐛 [d] Debug SSH connection")(debug_ssh)
|
|
208
|
+
nw_apps.command(name="d", help="Debug SSH connection", hidden=True)(debug_ssh)
|
|
209
|
+
|
|
210
|
+
nw_apps.command(name="wifi-select", no_args_is_help=True, help="📶 [w] WiFi connection utility.")(wifi_select)
|
|
211
|
+
nw_apps.command(name="w", no_args_is_help=True, hidden=True)(wifi_select)
|
|
212
|
+
|
|
213
|
+
nw_apps.command(name="bind-wsl-port", help="🔌 [b] Bind WSL port to Windows host", no_args_is_help=True)(bind_wsl_port)
|
|
214
|
+
nw_apps.command(name="b", help="Bind WSL port to Windows host", hidden=True, no_args_is_help=True)(bind_wsl_port)
|
|
215
|
+
|
|
216
|
+
nw_apps.command(name="reset-cloudflare-tunnel", help="☁️ [r] Reset Cloudflare tunnel service")(reset_cloudflare_tunnel)
|
|
217
|
+
nw_apps.command(name="r", help="Reset Cloudflare tunnel service", hidden=True)(reset_cloudflare_tunnel)
|
|
218
|
+
nw_apps.command(name="add-ip-exclusion-to-warp", help="🚫 [p] Add IP exclusion to WARP")(add_ip_exclusion_to_warp)
|
|
219
|
+
nw_apps.command(name="p", help="Add IP exclusion to WARP", hidden=True)(add_ip_exclusion_to_warp)
|
|
220
|
+
|
|
221
|
+
return nw_apps
|
|
@@ -8,81 +8,95 @@ in the event that username@github.com is not mentioned in the remote url.
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from typing import Annotated, Optional
|
|
10
10
|
import typer
|
|
11
|
-
from machineconfig.scripts.python.helpers_repos.
|
|
11
|
+
from machineconfig.scripts.python.helpers_repos.cloud_repo_sync import main as secure_repo_main
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
DirectoryArgument = Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")]
|
|
15
15
|
RecursiveOption = Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")]
|
|
16
|
-
|
|
16
|
+
UVsyncOption = Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")]
|
|
17
17
|
CloudOption = Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote.")]
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def push(directory: DirectoryArgument = None, recursive: RecursiveOption = False,
|
|
20
|
+
def push(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
|
|
21
21
|
"""🚀 Push changes across repositories."""
|
|
22
|
-
from machineconfig.scripts.python.
|
|
23
|
-
git_operations(directory, pull=False, commit=False, push=True, recursive=recursive,
|
|
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
24
|
|
|
25
25
|
|
|
26
|
-
def pull(directory: DirectoryArgument = None, recursive: RecursiveOption = False,
|
|
26
|
+
def pull(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
|
|
27
27
|
"""⬇️ Pull changes across repositories."""
|
|
28
|
-
from machineconfig.scripts.python.
|
|
28
|
+
from machineconfig.scripts.python.helpers_repos.entrypoint import git_operations
|
|
29
29
|
|
|
30
|
-
git_operations(directory, pull=True, commit=False, push=False, recursive=recursive,
|
|
30
|
+
git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, auto_uv_sync=auto_uv_sync)
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def commit(directory: DirectoryArgument = None, recursive: RecursiveOption = False,
|
|
33
|
+
def commit(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
|
|
34
34
|
"""💾 Commit changes across repositories."""
|
|
35
|
-
from machineconfig.scripts.python.
|
|
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)
|
|
36
37
|
|
|
37
|
-
git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, no_sync=no_sync)
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
def sync(directory: DirectoryArgument = None, recursive: RecursiveOption = False, no_sync: NoSyncOption = False) -> None:
|
|
39
|
+
def sync(directory: DirectoryArgument = None, recursive: RecursiveOption = False, auto_uv_sync: UVsyncOption = False) -> None:
|
|
41
40
|
"""🔄 Pull, commit, and push changes across repositories."""
|
|
42
|
-
from machineconfig.scripts.python.
|
|
43
|
-
git_operations(directory, pull=True, commit=True, push=True, recursive=recursive,
|
|
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)
|
|
44
43
|
|
|
45
44
|
|
|
46
45
|
def capture(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
47
46
|
"""📝 Record repositories into a repos.json specification."""
|
|
48
|
-
from machineconfig.scripts.python.
|
|
47
|
+
from machineconfig.scripts.python.helpers_repos.entrypoint import resolve_directory
|
|
49
48
|
repos_root = resolve_directory(directory)
|
|
50
|
-
from machineconfig.scripts.python.
|
|
51
|
-
|
|
49
|
+
from machineconfig.scripts.python.helpers_repos.record import main_record as record_repos
|
|
52
50
|
save_path = record_repos(repos_root=repos_root)
|
|
53
51
|
from machineconfig.utils.path_extended import PathExtended
|
|
54
|
-
|
|
55
52
|
if cloud is not None:
|
|
56
53
|
PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
|
|
57
54
|
|
|
58
55
|
|
|
59
56
|
def clone(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
60
57
|
"""📥 Clone repositories described by a repos.json specification."""
|
|
61
|
-
from machineconfig.scripts.python.
|
|
58
|
+
from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
|
|
62
59
|
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
|
|
63
60
|
|
|
64
61
|
|
|
65
62
|
def checkout_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
66
63
|
"""🔀 Check out specific commits listed in the specification."""
|
|
67
|
-
from machineconfig.scripts.python.
|
|
64
|
+
from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
|
|
68
65
|
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
|
|
69
66
|
|
|
70
67
|
|
|
71
68
|
def checkout_to_branch_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
72
69
|
"""🔀 Check out to the main branch defined in the specification."""
|
|
73
|
-
from machineconfig.scripts.python.
|
|
70
|
+
from machineconfig.scripts.python.helpers_repos.entrypoint import clone_from_specs
|
|
74
71
|
clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
|
|
75
72
|
|
|
76
73
|
|
|
77
|
-
def
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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.12"])
|
|
80
|
+
|
|
82
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.12"])
|
|
83
88
|
|
|
84
|
-
|
|
85
|
-
|
|
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.12"])
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def gource_viz(
|
|
99
|
+
repo: Annotated[str, typer.Option(..., "--repo", "-r", help="Path to git repository to visualize")] = ".",
|
|
86
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,
|
|
87
101
|
resolution: Annotated[str, typer.Option(..., "--resolution", "-res", help="Video resolution (e.g., 1920x1080, 1280x720)")] = "1920x1080",
|
|
88
102
|
seconds_per_day: Annotated[float, typer.Option(..., "--seconds-per-day", "-spd", help="Speed of simulation (lower = faster)")] = 0.1,
|
|
@@ -150,8 +164,8 @@ uv run --with cleanpy cleanpy .
|
|
|
150
164
|
|
|
151
165
|
|
|
152
166
|
def get_app():
|
|
153
|
-
repos_apps = typer.Typer(help="📁 [r] Manage development repositories", no_args_is_help=True)
|
|
154
|
-
mirror_app = typer.Typer(help="🔄 [m] Manage repository specifications and syncing", no_args_is_help=True)
|
|
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)
|
|
155
169
|
repos_apps.add_typer(mirror_app, name="mirror", help="🔄 [m] mirror repositories using saved specs")
|
|
156
170
|
repos_apps.add_typer(mirror_app, name="m", help="mirror repositories using saved specs", hidden=True)
|
|
157
171
|
|
|
@@ -162,23 +176,33 @@ def get_app():
|
|
|
162
176
|
repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
|
|
163
177
|
repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
|
|
164
178
|
repos_apps.command(name="sync", help="🔄 [y] Pull, commit, and push changes across repositories")(sync)
|
|
165
|
-
repos_apps.command(name="
|
|
166
|
-
repos_apps.command(name="analyze", help="📊 [a] Analyze repository development over time")(
|
|
167
|
-
repos_apps.command(name="a", help="Analyze repository development over time", hidden=True)(
|
|
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
|
+
|
|
168
183
|
repos_apps.command(name="secure", help="🔐 [s] Securely sync git repository to/from cloud with encryption")(secure_repo_main)
|
|
169
184
|
repos_apps.command(name="s", help="Securely sync git repository to/from cloud with encryption", hidden=True)(secure_repo_main)
|
|
170
|
-
|
|
171
|
-
repos_apps.command(name="
|
|
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
|
+
|
|
172
192
|
repos_apps.command(name="cleanup", help="🧹 [n] Clean repository directories from cache files")(cleanup)
|
|
173
193
|
repos_apps.command(name="n", help="Clean repository directories from cache files", hidden=True)(cleanup)
|
|
174
194
|
|
|
175
195
|
mirror_app.command(name="capture", help="📝 [cap] Record repositories into a repos.json specification")(capture)
|
|
176
196
|
mirror_app.command(name="cap", help="Record repositories into a repos.json specification", hidden=True)(capture)
|
|
197
|
+
|
|
177
198
|
mirror_app.command(name="clone", help="📥 [clo] Clone repositories described by a repos.json specification")(clone)
|
|
178
199
|
mirror_app.command(name="clo", help="Clone repositories described by a repos.json specification", hidden=True)(clone)
|
|
200
|
+
|
|
179
201
|
mirror_app.command(name="checkout-to-commit", help="🔀 [ctc] Check out specific commits listed in the specification")(checkout_command)
|
|
180
202
|
mirror_app.command(name="ctc", help="Check out specific commits listed in the specification", hidden=True)(checkout_command)
|
|
203
|
+
|
|
181
204
|
mirror_app.command(name="checkout-to-branch", help="🔀 [ctb] Check out to the main branch defined in the specification")(checkout_to_branch_command)
|
|
182
205
|
mirror_app.command(name="ctb", help="Check out to the main branch defined in the specification", hidden=True)(checkout_to_branch_command)
|
|
183
206
|
|
|
184
207
|
return repos_apps
|
|
208
|
+
|