machineconfig 7.98__py3-none-any.whl → 8.61__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.
- 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 +271 -152
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/package_groups.py +11 -9
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +1 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +1 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +10 -8
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +30 -13
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +1 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +6 -5
- machineconfig/jobs/installer/{custom_dev → python_scripts}/sysabc.py +28 -43
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/yazi.py +39 -19
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts_dynamic/a.py +428 -0
- machineconfig/logger.py +1 -1
- machineconfig/profile/create_helper.py +21 -10
- machineconfig/profile/create_links.py +77 -20
- machineconfig/profile/create_links_export.py +63 -58
- machineconfig/profile/create_shell_profile.py +14 -0
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- machineconfig/scripts/python/agents.py +76 -171
- 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 +8 -6
- 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 -155
- machineconfig/scripts/python/devops.py +57 -38
- machineconfig/scripts/python/devops_navigator.py +17 -3
- machineconfig/scripts/python/fire_jobs.py +10 -193
- machineconfig/scripts/python/ftpx.py +5 -224
- 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 +10 -7
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +3 -1
- 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 +4 -4
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +229 -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 +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +130 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_mount.py +77 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +71 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +285 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +84 -33
- 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/helpers_devops/cli_share_temp.py +69 -0
- 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} +64 -50
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/commands.py +25 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/device_entry.py +17 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/devices.py +17 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/linux.py +103 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/macos.py +100 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/selection.py +47 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/utils.py +28 -0
- machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/windows.py +91 -0
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- 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_fire_command → helpers/helpers_fire_command}/file_wrangler.py +1 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- 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_fire_command/fire_jobs_streamlit_helper.py +0 -0
- 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 +2 -7
- 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 +52 -10
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_key_windows.py +23 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_ssh_key.py +169 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_cloud_init.py +33 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux.py +338 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux_utils.py +35 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows.py +245 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows_utils.py +34 -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 +120 -37
- 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/attach_impl.py +87 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +114 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -2
- machineconfig/scripts/python/helpers/helpers_sessions/utils.py +69 -0
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
- machineconfig/scripts/python/{helpers_devops/cli_utils.py → helpers/helpers_utils/pdf.py} +2 -2
- machineconfig/scripts/python/{helpers_utils/path.py → helpers/helpers_utils/python.py} +65 -40
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +126 -48
- machineconfig/scripts/python/msearch.py +16 -61
- machineconfig/scripts/python/sessions.py +137 -191
- machineconfig/scripts/python/utils.py +104 -24
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/linters/.ruff.toml +2 -1
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +6 -10
- machineconfig/settings/shells/nushell/config.nu +23 -1
- machineconfig/settings/shells/nushell/env.nu +22 -48
- machineconfig/settings/shells/nushell/init.nu +64 -240
- machineconfig/settings/shells/pwsh/init.ps1 +71 -5
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +4 -0
- machineconfig/settings/shells/wt/settings.json +31 -37
- machineconfig/settings/shells/zsh/init.sh +25 -5
- 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/wt/__init__.py +0 -0
- machineconfig/settings/yazi/yazi_linux.toml +18 -8
- machineconfig/settings/zellij/__init__.py +0 -0
- machineconfig/settings/zellij/config.kdl +0 -295
- machineconfig/settings/zellij/layouts/__init__.py +0 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -9
- machineconfig/settings/zellij/layouts/st2.kdl +6 -2
- machineconfig/setup_linux/__init__.py +0 -1
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- 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 +2 -5
- 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 +78 -33
- 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 +7 -17
- machineconfig/utils/installer_utils/installer_helper.py +52 -36
- machineconfig/utils/installer_utils/installer_locator_utils.py +15 -25
- 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 +8 -7
- machineconfig/utils/procs.py +35 -27
- machineconfig/utils/scheduler.py +8 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +10 -0
- machineconfig/utils/source_of_truth.py +7 -1
- machineconfig/utils/ssh.py +73 -23
- machineconfig/utils/ssh_utils/abc.py +1 -1
- machineconfig/utils/ssh_utils/copy_from_here.py +19 -14
- machineconfig/utils/ssh_utils/copy_to_here.py +2 -1
- machineconfig/utils/ssh_utils/utils.py +23 -7
- 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-7.98.dist-info → machineconfig-8.61.dist-info}/METADATA +30 -23
- machineconfig-8.61.dist-info/RECORD +539 -0
- {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/entry_points.txt +0 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -263
- machineconfig/scripts/linux/other/share_cloud.sh +0 -64
- machineconfig/scripts/linux/other/share_nfs +0 -49
- machineconfig/scripts/linux/other/start_docker +0 -23
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/python/helpers/run_py_script.py +0 -79
- machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +0 -26
- 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_nw.py +0 -214
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -215
- 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/devops_add_identity.py +0 -82
- machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +0 -153
- machineconfig/scripts/python/helpers_network/mount_drive +0 -128
- machineconfig/scripts/python/helpers_network/mount_nfs +0 -49
- machineconfig/scripts/python/helpers_network/mount_nfs.py +0 -85
- machineconfig/scripts/python/helpers_network/mount_nw_drive +0 -61
- machineconfig/scripts/python/helpers_network/mount_nw_drive.py +0 -48
- machineconfig/scripts/python/helpers_network/mount_smb +0 -3
- machineconfig/scripts/python/helpers_network/mount_ssh.py +0 -64
- 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_network/wsl_windows_transfer.py +0 -67
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
- machineconfig/scripts/python/terminal.py +0 -133
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +0 -92
- machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -42
- machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -9
- machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -2
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -34
- machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -16
- machineconfig/settings/zellij/config.orig.kdl +0 -295
- machineconfig/setup_linux/others/android.sh +0 -2
- machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/others/docker.ps1 +0 -7
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/others/power_options.ps1 +0 -7
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/setup_windows/ssh/openssh-server_add_key.ps1 +0 -7
- machineconfig/setup_windows/ssh/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/utils/options_tv.py +0 -119
- machineconfig/utils/tst.py +0 -20
- machineconfig-7.98.dist-info/RECORD +0 -504
- /machineconfig/{jobs/installer/custom_dev → cluster/sessions_managers/wt_utils/examples}/__init__.py +0 -0
- /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
- /machineconfig/{scripts/python/helpers_agents/agentic_frameworks → jobs/installer/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}/cloudflare_warp_cli.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.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/jobs/installer/{custom_dev → python_scripts}/winget.py +0 -0
- /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- /machineconfig/scripts/python/{helpers_cloud → graph}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → 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_devops → helpers/helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes → 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}/templates/prompt.txt +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → 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_network → 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_sessions → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/mount_helpers}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → 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_fire_command/f.py → 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/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.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}/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/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/WHEEL +0 -0
- {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
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.helpers_repos.cloud_repo_sync import main as secure_repo_main
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _resolve_directory(directory: Optional[str]) -> Path:
|
|
15
|
+
if directory is None:
|
|
16
|
+
directory = Path.cwd().as_posix()
|
|
17
|
+
typer.echo(f"📁 Using directory: {directory}")
|
|
18
|
+
return Path(directory).expanduser().absolute().resolve()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def push(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None, recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")] = False, auto_uv_sync: Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")] = False) -> None:
|
|
22
|
+
"""🚀 Push changes across repositories."""
|
|
23
|
+
repos_root = _resolve_directory(directory)
|
|
24
|
+
from machineconfig.scripts.python.helpers.helpers_repos.action import perform_git_operations
|
|
25
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
26
|
+
perform_git_operations(repos_root=PathExtended(repos_root), pull=False, commit=False, push=True, recursive=recursive, auto_uv_sync=auto_uv_sync)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def pull(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None, recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")] = False, auto_uv_sync: Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")] = False) -> None:
|
|
30
|
+
"""⬇️ Pull changes across repositories."""
|
|
31
|
+
repos_root = _resolve_directory(directory)
|
|
32
|
+
from machineconfig.scripts.python.helpers.helpers_repos.action import perform_git_operations
|
|
33
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
34
|
+
perform_git_operations(repos_root=PathExtended(repos_root), pull=True, commit=False, push=False, recursive=recursive, auto_uv_sync=auto_uv_sync)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def commit(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None, recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")] = False, auto_uv_sync: Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")] = False) -> None:
|
|
38
|
+
"""💾 Commit changes across repositories."""
|
|
39
|
+
repos_root = _resolve_directory(directory)
|
|
40
|
+
from machineconfig.scripts.python.helpers.helpers_repos.action import perform_git_operations
|
|
41
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
42
|
+
perform_git_operations(repos_root=PathExtended(repos_root), pull=False, commit=True, push=False, recursive=recursive, auto_uv_sync=auto_uv_sync)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def sync(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None, recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")] = False, auto_uv_sync: Annotated[bool, typer.Option("--uv-sync/--no-uv-sync", "-u/-ns", help="Automatic uv sync after pulls.")] = False) -> None:
|
|
46
|
+
"""🔄 Pull, commit, and push changes across repositories."""
|
|
47
|
+
repos_root = _resolve_directory(directory)
|
|
48
|
+
from machineconfig.scripts.python.helpers.helpers_repos.action import perform_git_operations
|
|
49
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
50
|
+
perform_git_operations(repos_root=PathExtended(repos_root), pull=True, commit=True, push=True, recursive=recursive, auto_uv_sync=auto_uv_sync)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def capture(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None) -> None:
|
|
54
|
+
"""📝 Record repositories into a repos.json specification."""
|
|
55
|
+
from machineconfig.scripts.python.helpers.helpers_repos.record import main_record as record_repos
|
|
56
|
+
save_path = record_repos(repos_root_str=directory)
|
|
57
|
+
print(f"\n✅ Saved repository specification to {save_path}")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def clone(directory: Annotated[str, typer.Argument(help="📁 Directory containing repo(s).")] = ".",
|
|
61
|
+
specs_path: Annotated[Optional[str], typer.Option("--specs-path", "-s", help="Path to repos.json specification file.")] = None,
|
|
62
|
+
interactive: Annotated[bool, typer.Option("--interactive/--no-interactive", "-i/-ni", help="Select interactively.")]=False
|
|
63
|
+
) -> None:
|
|
64
|
+
"""📥 Clone repositories described by a repos.json specification."""
|
|
65
|
+
if interactive:
|
|
66
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import BACKUP_ROOT_PRIVATE, BACKUP_ROOT_PUBLIC, get_original_path_from_backup_path
|
|
67
|
+
results_public = list(BACKUP_ROOT_PUBLIC.rglob("repos.json"))
|
|
68
|
+
results_private = list(BACKUP_ROOT_PRIVATE.rglob("repos.json"))
|
|
69
|
+
if len(results_public) + len(results_private) == 0:
|
|
70
|
+
print("❌ No repos.json specifications found in backup directories.")
|
|
71
|
+
return
|
|
72
|
+
from machineconfig.utils.options import choose_from_options
|
|
73
|
+
chosen_files: list[str] = choose_from_options(options=[str(p) for p in results_public + results_private], msg="Select a repos.json specification to clone from:", multi=True, tv=True)
|
|
74
|
+
for file in chosen_files:
|
|
75
|
+
if str(file).startswith(str(BACKUP_ROOT_PRIVATE)):
|
|
76
|
+
original_path = get_original_path_from_backup_path(Path(file), sensitivity="private", destination=None, shared=False)
|
|
77
|
+
else:
|
|
78
|
+
original_path = get_original_path_from_backup_path(Path(file), sensitivity="public", destination=None, shared=False)
|
|
79
|
+
typer.echo("\n📥 Cloning or checking out repositories...")
|
|
80
|
+
dir_obj = _resolve_directory(str(original_path))
|
|
81
|
+
spec_path_default = dir_obj.joinpath("repos.json")
|
|
82
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import get_backup_path
|
|
83
|
+
spec_path_self_managed = get_backup_path(orig_path=spec_path_default, sensitivity="private", destination=None, shared=False)
|
|
84
|
+
from machineconfig.scripts.python.helpers.helpers_repos.clone import clone_repos
|
|
85
|
+
clone_repos(spec_path=spec_path_self_managed, preferred_remote=None, checkout_branch_flag=False, checkout_commit_flag=False)
|
|
86
|
+
return
|
|
87
|
+
if specs_path is not None:
|
|
88
|
+
spec_path_self_managed = Path(specs_path).expanduser().absolute()
|
|
89
|
+
else:
|
|
90
|
+
dir_obj = _resolve_directory(directory)
|
|
91
|
+
spec_path_default = dir_obj.joinpath("repos.json")
|
|
92
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import get_backup_path
|
|
93
|
+
spec_path_self_managed = get_backup_path(orig_path=spec_path_default, sensitivity="private", destination=None, shared=False)
|
|
94
|
+
if not spec_path_self_managed.exists():
|
|
95
|
+
print(f"❌ Specification file not found: {spec_path_self_managed}. Ensure this file exists or provide it explicitly using --specs-path.")
|
|
96
|
+
return
|
|
97
|
+
from machineconfig.scripts.python.helpers.helpers_repos.clone import clone_repos
|
|
98
|
+
clone_repos(spec_path=spec_path_self_managed, preferred_remote=None, checkout_branch_flag=False, checkout_commit_flag=False)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def checkout_command(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None) -> None:
|
|
102
|
+
"""🔀 Check out specific commits listed in the specification."""
|
|
103
|
+
typer.echo("\n📥 Cloning or checking out repositories...")
|
|
104
|
+
dir_obj = _resolve_directory(directory)
|
|
105
|
+
spec_path_default = dir_obj.joinpath("repos.json")
|
|
106
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import get_backup_path
|
|
107
|
+
spec_path_self_managed = get_backup_path(orig_path=spec_path_default, sensitivity="private", destination=None, shared=False)
|
|
108
|
+
from machineconfig.scripts.python.helpers.helpers_repos.clone import clone_repos
|
|
109
|
+
clone_repos(spec_path=spec_path_self_managed, preferred_remote=None, checkout_branch_flag=False, checkout_commit_flag=True)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def checkout_to_branch_command(directory: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None) -> None:
|
|
113
|
+
"""🔀 Check out to the main branch defined in the specification."""
|
|
114
|
+
typer.echo("\n📥 Cloning or checking out repositories...")
|
|
115
|
+
dir_obj = _resolve_directory(directory)
|
|
116
|
+
spec_path_default = dir_obj.joinpath("repos.json")
|
|
117
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import get_backup_path
|
|
118
|
+
spec_path_self_managed = get_backup_path(orig_path=spec_path_default, sensitivity="private", destination=None, shared=False)
|
|
119
|
+
from machineconfig.scripts.python.helpers.helpers_repos.clone import clone_repos
|
|
120
|
+
clone_repos(spec_path=spec_path_self_managed, preferred_remote=None, checkout_branch_flag=True, checkout_commit_flag=False)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def count_lines_in_repo(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
|
|
124
|
+
# def func(repo_path: str):
|
|
125
|
+
# from machineconfig.scripts.python.helpers.helpers_repos import repo_analyzer_1
|
|
126
|
+
# repo_analyzer_1.count_historical_line_edits(repo_path=repo_path)
|
|
127
|
+
# from machineconfig.utils.code import run_lambda_function
|
|
128
|
+
# run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig>=8.61"])
|
|
129
|
+
from machineconfig.scripts.python.helpers.helpers_repos import repo_analyzer_1
|
|
130
|
+
try:
|
|
131
|
+
repo_analyzer_1.count_historical_line_edits(repo_path=repo_path)
|
|
132
|
+
except Exception as e:
|
|
133
|
+
typer.echo(f"❌ Error counting lines in repo {repo_path}: {e}")
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def print_python_files_by_size(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
|
|
137
|
+
# def func(repo_path: str):
|
|
138
|
+
# from machineconfig.scripts.python.helpers.helpers_repos.repo_analyzer_2 import print_python_files_by_size_impl
|
|
139
|
+
# print_python_files_by_size_impl(repo_path=repo_path)
|
|
140
|
+
# from machineconfig.utils.code import run_lambda_function
|
|
141
|
+
# run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig[plot]>=8.61"])
|
|
142
|
+
from machineconfig.scripts.python.helpers.helpers_repos.repo_analyzer_2 import print_python_files_by_size_impl
|
|
143
|
+
print_python_files_by_size_impl(repo_path=repo_path)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def analyze_repo_development(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
|
|
147
|
+
# def func(repo_path: str):
|
|
148
|
+
# from machineconfig.scripts.python.helpers.helpers_repos.repo_analyzer_2 import analyze_over_time
|
|
149
|
+
# analyze_over_time(repo_path=repo_path)
|
|
150
|
+
# from machineconfig.utils.code import run_lambda_function
|
|
151
|
+
# run_lambda_function(lambda: func(repo_path=repo_path), uv_project_dir=None, uv_with=["machineconfig[plot]>=8.61"])
|
|
152
|
+
from machineconfig.scripts.python.helpers.helpers_repos.repo_analyzer_2 import analyze_over_time
|
|
153
|
+
analyze_over_time(repo_path=repo_path)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def gource_viz(
|
|
157
|
+
repo: Annotated[str, typer.Option(..., "--repo", "-r", help="Path to git repository to visualize")] = ".",
|
|
158
|
+
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,
|
|
159
|
+
resolution: Annotated[str, typer.Option(..., "--resolution", "-res", help="Video resolution (e.g., 1920x1080, 1280x720)")] = "1920x1080",
|
|
160
|
+
seconds_per_day: Annotated[float, typer.Option(..., "--seconds-per-day", "-spd", help="Speed of simulation (lower = faster)")] = 0.1,
|
|
161
|
+
auto_skip_seconds: Annotated[float, typer.Option(..., "--auto-skip-seconds", "-as", help="Skip to next entry if nothing happens for X seconds")] = 1.0,
|
|
162
|
+
title: Annotated[Optional[str], typer.Option(..., "--title", "-t", help="Title for the visualization")] = None,
|
|
163
|
+
hide_items: Annotated[list[str], typer.Option(..., "--hide", "-h", help="Items to hide: bloom, date, dirnames, files, filenames, mouse, progress, root, tree, users, usernames")] = [],
|
|
164
|
+
key_items: Annotated[bool, typer.Option(..., "--key", "-k", help="Show file extension key")] = False,
|
|
165
|
+
fullscreen: Annotated[bool, typer.Option(..., "--fullscreen", "-f", help="Run in fullscreen mode")] = False,
|
|
166
|
+
viewport: Annotated[Optional[str], typer.Option(..., "--viewport", "-v", help="Camera viewport (e.g., '1000x1000')")] = None,
|
|
167
|
+
start_date: Annotated[Optional[str], typer.Option(..., "--start-date", help="Start date (YYYY-MM-DD)")] = None,
|
|
168
|
+
stop_date: Annotated[Optional[str], typer.Option(..., "--stop-date", help="Stop date (YYYY-MM-DD)")] = None,
|
|
169
|
+
user_image_dir: Annotated[Optional[Path], typer.Option(..., "--user-image-dir", help="Directory with user avatar images")] = None,
|
|
170
|
+
max_files: Annotated[int, typer.Option(..., "--max-files", help="Maximum number of files to show (0 = no limit)")] = 0,
|
|
171
|
+
max_file_lag: Annotated[float, typer.Option(..., "--max-file-lag", help="Max time files remain on screen after last change")] = 5.0,
|
|
172
|
+
file_idle_time: Annotated[int, typer.Option(..., "--file-idle-time", help="Time in seconds files remain idle before being removed")] = 0,
|
|
173
|
+
framerate: Annotated[int, typer.Option(..., "--framerate", help="Frames per second for video output")] = 60,
|
|
174
|
+
background_color: Annotated[str, typer.Option(..., "--background-color", help="Background color in hex (e.g., 000000 for black)")] = "000000",
|
|
175
|
+
font_size: Annotated[int, typer.Option(..., "--font-size", help="Font size")] = 22,
|
|
176
|
+
camera_mode: Annotated[str, typer.Option(..., "--camera-mode", help="Camera mode: overview or track")] = "overview",
|
|
177
|
+
self: Annotated[bool, typer.Option(..., "--self", help="Clone machineconfig repository and act on it")] = False,
|
|
178
|
+
) -> None:
|
|
179
|
+
"""🎬 Visualize repository activity using Gource."""
|
|
180
|
+
from machineconfig.scripts.python.helpers.helpers_repos.grource import visualize
|
|
181
|
+
if self:
|
|
182
|
+
repo_path = Path.home().joinpath("machineconfig")
|
|
183
|
+
if not repo_path.exists():
|
|
184
|
+
import git
|
|
185
|
+
repo_url = "https://github.com/thisismygitrepo/machineconfig.git"
|
|
186
|
+
git.Repo.clone_from(repo_url, to_path=repo_path.as_posix())
|
|
187
|
+
repo = repo_path.as_posix()
|
|
188
|
+
visualize(repo=repo, output_file=output_file, resolution=resolution, seconds_per_day=seconds_per_day,
|
|
189
|
+
auto_skip_seconds=auto_skip_seconds, title=title, hide_items=hide_items, key_items=key_items,
|
|
190
|
+
fullscreen=fullscreen, viewport=viewport, start_date=start_date, stop_date=stop_date,
|
|
191
|
+
user_image_dir=user_image_dir, max_files=max_files, max_file_lag=max_file_lag,
|
|
192
|
+
file_idle_time=file_idle_time, framerate=framerate, background_color=background_color,
|
|
193
|
+
font_size=font_size, camera_mode=camera_mode)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def cleanup(repo: Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")] = None, recursive: Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")] = False) -> None:
|
|
197
|
+
"""🧹 Clean repository directories from cache files."""
|
|
198
|
+
if repo is None:
|
|
199
|
+
repo = Path.cwd().as_posix()
|
|
200
|
+
|
|
201
|
+
arg_path = Path(repo).expanduser().absolute()
|
|
202
|
+
from git import Repo, InvalidGitRepositoryError
|
|
203
|
+
if not recursive:
|
|
204
|
+
# Check if the directory is a git repo
|
|
205
|
+
try:
|
|
206
|
+
Repo(str(arg_path), search_parent_directories=False)
|
|
207
|
+
except InvalidGitRepositoryError:
|
|
208
|
+
typer.echo(f"❌ {arg_path} is not a git repository. Use -r flag for recursive cleanup.")
|
|
209
|
+
return
|
|
210
|
+
# Run cleanup on this repo
|
|
211
|
+
repos_to_clean = [arg_path]
|
|
212
|
+
else:
|
|
213
|
+
# Find all git repos recursively under the directory
|
|
214
|
+
git_dirs = list(arg_path.rglob('.git'))
|
|
215
|
+
repos_to_clean = [git_dir.parent for git_dir in git_dirs if git_dir.is_dir()]
|
|
216
|
+
if not repos_to_clean:
|
|
217
|
+
typer.echo(f"❌ No git repositories found under {arg_path}")
|
|
218
|
+
return
|
|
219
|
+
|
|
220
|
+
for repo_path in repos_to_clean:
|
|
221
|
+
typer.echo(f"🧹 Cleaning {repo_path}")
|
|
222
|
+
script = fr"""
|
|
223
|
+
cd "{repo_path}"
|
|
224
|
+
uv run --with cleanpy cleanpy .
|
|
225
|
+
# mcinit .
|
|
226
|
+
# find "." -type f \( -name "*.py" -o -name "*.md" -o -name "*.json" \) -not -path "*/\.*" -not -path "*/__pycache__/*" -print0 | xargs -0 sed -i 's/[[:space:]]*$//'
|
|
227
|
+
"""
|
|
228
|
+
from machineconfig.utils.code import run_shell_script
|
|
229
|
+
run_shell_script(script, display_script=True, clean_env=False)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def get_app():
|
|
233
|
+
repos_apps = typer.Typer(help="📁 [r] Manage development repositories", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
234
|
+
mirror_app = typer.Typer(help="🔄 [m] Manage repository specifications and syncing", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
235
|
+
repos_apps.add_typer(mirror_app, name="mirror", help="🔄 [m] mirror repositories using saved specs")
|
|
236
|
+
repos_apps.add_typer(mirror_app, name="m", help="mirror repositories using saved specs", hidden=True)
|
|
237
|
+
|
|
238
|
+
repos_apps.command(name="push", help="🚀 [p] Push changes across repositories")(push)
|
|
239
|
+
repos_apps.command(name="p", help="Push changes across repositories", hidden=True)(push)
|
|
240
|
+
repos_apps.command(name="pull", help="⬇️ [P] Pull changes across repositories")(pull)
|
|
241
|
+
repos_apps.command(name="P", help="Pull changes across repositories", hidden=True)(pull)
|
|
242
|
+
repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
|
|
243
|
+
repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
|
|
244
|
+
repos_apps.command(name="sync", help="🔄 [y] Pull, commit, and push changes across repositories")(sync)
|
|
245
|
+
repos_apps.command(name="y", help="Pull, commit, and push changes across repositories", hidden=True)(sync)
|
|
246
|
+
repos_apps.command(name="analyze", help="📊 [a] Analyze repository development over time")(analyze_repo_development)
|
|
247
|
+
repos_apps.command(name="a", help="Analyze repository development over time", hidden=True)(analyze_repo_development)
|
|
248
|
+
|
|
249
|
+
repos_apps.command(name="secure", help="🔐 [s] Securely sync git repository to/from cloud with encryption")(secure_repo_main)
|
|
250
|
+
repos_apps.command(name="s", help="Securely sync git repository to/from cloud with encryption", hidden=True)(secure_repo_main)
|
|
251
|
+
|
|
252
|
+
repos_apps.command(name="viz", help="🎬 [v] Visualize repository activity using Gource")(gource_viz)
|
|
253
|
+
repos_apps.command(name="v", help="Visualize repository activity using Gource", hidden=True)(gource_viz)
|
|
254
|
+
|
|
255
|
+
repos_apps.command(name="count-lines", help="📄 [l] Count python lines of code in current repo + historical edits.")(count_lines_in_repo)
|
|
256
|
+
repos_apps.command(name="l", help="Count python lines of code in current repo + historical edits.", hidden=True)(count_lines_in_repo)
|
|
257
|
+
|
|
258
|
+
repos_apps.command(name="cleanup", help="🧹 [n] Clean repository directories from cache files")(cleanup)
|
|
259
|
+
repos_apps.command(name="n", help="Clean repository directories from cache files", hidden=True)(cleanup)
|
|
260
|
+
|
|
261
|
+
mirror_app.command(name="capture", help="📝 [cap] Record repositories into a repos.json specification")(capture)
|
|
262
|
+
mirror_app.command(name="cap", help="Record repositories into a repos.json specification", hidden=True)(capture)
|
|
263
|
+
|
|
264
|
+
mirror_app.command(name="clone", help="📥 [clo] Clone repositories described by a repos.json specification")(clone)
|
|
265
|
+
mirror_app.command(name="clo", help="Clone repositories described by a repos.json specification", hidden=True)(clone)
|
|
266
|
+
|
|
267
|
+
mirror_app.command(name="checkout-to-commit", help="🔀 [ctc] Check out specific commits listed in the specification")(checkout_command)
|
|
268
|
+
mirror_app.command(name="ctc", help="Check out specific commits listed in the specification", hidden=True)(checkout_command)
|
|
269
|
+
|
|
270
|
+
mirror_app.command(name="checkout-to-branch", help="🔀 [ctb] Check out to the main branch defined in the specification")(checkout_to_branch_command)
|
|
271
|
+
mirror_app.command(name="ctb", help="Check out to the main branch defined in the specification", hidden=True)(checkout_to_branch_command)
|
|
272
|
+
|
|
273
|
+
return repos_apps
|
|
274
|
+
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import typer
|
|
3
3
|
from typing import Annotated, Literal
|
|
4
|
+
from machineconfig.utils.ssh_utils.abc import MACHINECONFIG_VERSION
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def copy_both_assets():
|
|
@@ -69,12 +70,12 @@ def update(copy_assets: Annotated[bool, typer.Option("--assets-copy/--no-assets-
|
|
|
69
70
|
uv self update
|
|
70
71
|
cd ~/code/machineconfig
|
|
71
72
|
git pull
|
|
72
|
-
uv tool install --upgrade --editable $HOME/code/machineconfig
|
|
73
|
+
uv tool install --no-cache --upgrade --editable $HOME/code/machineconfig
|
|
73
74
|
"""
|
|
74
75
|
else:
|
|
75
76
|
shell_script = """
|
|
76
77
|
uv self update
|
|
77
|
-
uv tool install --upgrade machineconfig
|
|
78
|
+
uv tool install --no-cache --upgrade machineconfig
|
|
78
79
|
"""
|
|
79
80
|
import platform
|
|
80
81
|
if platform.system() == "Windows":
|
|
@@ -86,38 +87,63 @@ uv tool install --upgrade machineconfig
|
|
|
86
87
|
exit_then_run_shell_script(shell_script + "\n" + uv_command, strict=True)
|
|
87
88
|
else:
|
|
88
89
|
from machineconfig.utils.code import run_shell_script
|
|
89
|
-
run_shell_script(shell_script)
|
|
90
|
+
run_shell_script(shell_script, display_script=True, clean_env=False)
|
|
90
91
|
if copy_assets:
|
|
91
92
|
copy_both_assets()
|
|
92
93
|
if link_public_configs:
|
|
93
94
|
import machineconfig.profile.create_links_export as create_links_export
|
|
94
|
-
create_links_export.
|
|
95
|
+
create_links_export.main_from_parser(sensitivity="public", method="copy", on_conflict="overwrite-default-path", which="all")
|
|
95
96
|
|
|
96
97
|
|
|
97
|
-
def install(
|
|
98
|
+
def install(copy_assets: Annotated[bool, typer.Option("--copy-assets/--no-assets-copy", "-a/-na", help="Copy (overwrite) assets to the machine after the update")] = True,
|
|
99
|
+
dev: Annotated[bool, typer.Option("--dev", "-d", help="Install from local development code instead of PyPI")] = False,
|
|
100
|
+
|
|
101
|
+
):
|
|
98
102
|
"""📋 CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates."""
|
|
99
|
-
from machineconfig.utils.code import run_shell_script,
|
|
103
|
+
from machineconfig.utils.code import run_shell_script, get_uv_command, get_shell_script_running_lambda_function, exit_then_run_shell_script
|
|
100
104
|
from pathlib import Path
|
|
101
105
|
import platform
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
mcfg_path = Path.home().joinpath("code/machineconfig")
|
|
107
|
+
_ = run_shell_script
|
|
108
|
+
if dev and not mcfg_path.exists():
|
|
109
|
+
# clone: https://github.com/thisismygitrepo/machineconfig.git
|
|
110
|
+
import git
|
|
111
|
+
mcfg_path.parent.mkdir(parents=True, exist_ok=True)
|
|
112
|
+
git.Repo.clone_from("https://github.com/thisismygitrepo/machineconfig.git", str(mcfg_path))
|
|
113
|
+
# now we need to run `uv sync` to install dependencies
|
|
114
|
+
|
|
115
|
+
uv_command = get_uv_command(platform=platform.system())
|
|
116
|
+
if copy_assets:
|
|
117
|
+
def func():
|
|
118
|
+
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
119
|
+
create_default_shell_profile() # involves copying assets too
|
|
120
|
+
uv_command2, _script_path = get_shell_script_running_lambda_function(lambda: func(),
|
|
121
|
+
uv_with=["machineconfig"], uv_project_dir=None)
|
|
105
122
|
else:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
123
|
+
uv_command2 = ""
|
|
124
|
+
if mcfg_path.exists():
|
|
125
|
+
exit_then_run_shell_script(f"""
|
|
126
|
+
cd {str(mcfg_path)}
|
|
127
|
+
{uv_command} sync
|
|
128
|
+
{uv_command} tool install --upgrade --editable "{str(mcfg_path)}"
|
|
129
|
+
{uv_command2}
|
|
130
|
+
""")
|
|
131
|
+
else:
|
|
132
|
+
exit_then_run_shell_script(rf"""
|
|
133
|
+
{uv_command} tool install --upgrade "{MACHINECONFIG_VERSION}"
|
|
134
|
+
{uv_command2}
|
|
135
|
+
""")
|
|
110
136
|
|
|
111
137
|
|
|
112
138
|
|
|
113
139
|
def interactive():
|
|
114
140
|
"""🤖 INTERACTIVE configuration of machine."""
|
|
115
|
-
from machineconfig.scripts.python.interactive import main
|
|
141
|
+
from machineconfig.scripts.python.helpers.helpers_devops.interactive import main
|
|
116
142
|
main()
|
|
117
143
|
|
|
118
144
|
def status():
|
|
119
145
|
"""📊 STATUS of machine, shell profile, apps, symlinks, dotfiles, etc."""
|
|
120
|
-
import machineconfig.scripts.python.helpers_devops.devops_status as helper
|
|
146
|
+
import machineconfig.scripts.python.helpers.helpers_devops.devops_status as helper
|
|
121
147
|
helper.main()
|
|
122
148
|
|
|
123
149
|
|
|
@@ -128,7 +154,7 @@ def navigate():
|
|
|
128
154
|
path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
|
|
129
155
|
from machineconfig.utils.code import exit_then_run_shell_script
|
|
130
156
|
if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
|
|
131
|
-
else: executable = """--with "
|
|
157
|
+
else: executable = f"""--with "{MACHINECONFIG_VERSION},textual" """
|
|
132
158
|
exit_then_run_shell_script(f"""uv run {executable} {path}""")
|
|
133
159
|
|
|
134
160
|
def readme():
|
|
@@ -151,22 +177,47 @@ def readme():
|
|
|
151
177
|
console.print(md)
|
|
152
178
|
|
|
153
179
|
|
|
180
|
+
def buid_docker(
|
|
181
|
+
variant: Annotated[Literal["slim", "ai"], typer.Argument(..., help="Variant to build: 'slim' or 'ai'")] = "slim",
|
|
182
|
+
) -> None:
|
|
183
|
+
"""🧱 `buid_docker` — wrapper for `jobs/shell/docker_build_and_publish.sh`"""
|
|
184
|
+
from pathlib import Path
|
|
185
|
+
import machineconfig
|
|
186
|
+
script_path = Path(machineconfig.__file__).resolve().parent.parent.parent.joinpath("jobs", "shell", "docker_build_and_publish.sh")
|
|
187
|
+
if not script_path.exists():
|
|
188
|
+
typer.echo(f"❌ Script not found: {str(script_path)}")
|
|
189
|
+
raise typer.Exit(code=1)
|
|
190
|
+
|
|
191
|
+
# shell_cmd = f'VARIANT="{variant}" && bash "{str(script_path)}"'\
|
|
192
|
+
from machineconfig.utils.source_of_truth import REPO_ROOT
|
|
193
|
+
shell_cmd = f"""
|
|
194
|
+
export VARIANT="{variant}"
|
|
195
|
+
cd "{str(REPO_ROOT)}"
|
|
196
|
+
bash "{str(script_path)}"
|
|
197
|
+
"""
|
|
198
|
+
# Use exit_then_run_shell_script for interactive runs (keeps tty), otherwise run shell script non-interactively
|
|
199
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
200
|
+
exit_then_run_shell_script(shell_cmd, strict=True)
|
|
201
|
+
|
|
202
|
+
|
|
154
203
|
def get_app():
|
|
155
|
-
cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True, add_help_option=
|
|
156
|
-
cli_app.command("update", no_args_is_help=False, help="🔄 [u] UPDATE machineconfig")(update)
|
|
157
|
-
cli_app.command("u", no_args_is_help=False, hidden=True)(update)
|
|
158
|
-
cli_app.command("interactive", no_args_is_help=False, help="🤖 [
|
|
159
|
-
cli_app.command("
|
|
160
|
-
cli_app.command(name="init", no_args_is_help=False, help="🦐 [t] Define and manage configurations")(init)
|
|
161
|
-
cli_app.command(name="t", no_args_is_help=False, hidden=True)(init)
|
|
162
|
-
cli_app.command("status", no_args_is_help=False, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
|
|
163
|
-
cli_app.command("s", no_args_is_help=False, help="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.", hidden=True)(status)
|
|
164
|
-
cli_app.command("install", no_args_is_help=False, help="📋 [
|
|
165
|
-
cli_app.command("
|
|
166
|
-
cli_app.command("navigate", no_args_is_help=False, help="📚 [n] NAVIGATE command structure with TUI")(navigate)
|
|
167
|
-
cli_app.command("n", no_args_is_help=False, help="NAVIGATE command structure with TUI", hidden=True)(navigate)
|
|
168
|
-
|
|
169
|
-
cli_app.command("
|
|
170
|
-
cli_app.command("
|
|
204
|
+
cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
205
|
+
cli_app.command(name= "update", no_args_is_help=False, help="🔄 [u] UPDATE machineconfig")(update)
|
|
206
|
+
cli_app.command(name= "u", no_args_is_help=False, hidden=True)(update)
|
|
207
|
+
cli_app.command(name= "interactive", no_args_is_help=False, help="🤖 [ia] INTERACTIVE configuration of machine.")(interactive)
|
|
208
|
+
cli_app.command(name= "ia", no_args_is_help=False, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
|
|
209
|
+
cli_app.command(name= "init", no_args_is_help=False, help="🦐 [t] Define and manage configurations")(init)
|
|
210
|
+
cli_app.command(name= "t", no_args_is_help=False, hidden=True)(init)
|
|
211
|
+
cli_app.command(name= "status", no_args_is_help=False, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
|
|
212
|
+
cli_app.command(name= "s", no_args_is_help=False, help="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.", hidden=True)(status)
|
|
213
|
+
cli_app.command(name= "install", no_args_is_help=False, help="📋 [i] CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.")(install)
|
|
214
|
+
cli_app.command(name= "i", no_args_is_help=False, help="CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.", hidden=True)(install)
|
|
215
|
+
cli_app.command(name= "navigate", no_args_is_help=False, help="📚 [n] NAVIGATE command structure with TUI")(navigate)
|
|
216
|
+
cli_app.command(name= "n", no_args_is_help=False, help="NAVIGATE command structure with TUI", hidden=True)(navigate)
|
|
217
|
+
|
|
218
|
+
cli_app.command(name= "buid_docker", no_args_is_help=False, help="🧱 [d] Build docker images (wraps jobs/shell/docker_build_and_publish.sh)")(buid_docker)
|
|
219
|
+
cli_app.command(name= "d", no_args_is_help=False, help="Build docker images (wraps jobs/shell/docker_build_and_publish.sh)", hidden=True)(buid_docker)
|
|
220
|
+
|
|
221
|
+
cli_app.command(name= "readme", no_args_is_help=False, help="📚 [r] render readme markdown in terminal.")(readme)
|
|
222
|
+
cli_app.command(name= "r", no_args_is_help=False, hidden=True)(readme)
|
|
171
223
|
return cli_app
|
|
172
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import typer
|
|
3
|
-
from typing import Annotated
|
|
3
|
+
from typing import Annotated, Literal
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
|
|
@@ -97,41 +97,55 @@ def share_file_send(path: Annotated[str, typer.Argument(help="Path to the file o
|
|
|
97
97
|
code: Annotated[str | None, typer.Option("--code", "-c", help="Codephrase used to connect to relay")] = None,
|
|
98
98
|
text: Annotated[str | None, typer.Option("--text", "-t", help="Send some text")] = None,
|
|
99
99
|
qrcode: Annotated[bool, typer.Option("--qrcode", "--qr", help="Show receive code as a qrcode")] = False,
|
|
100
|
+
backend: Annotated[Literal["wormhole", "w", "croc", "c"], typer.Option("--backend", "-b", help="Backend to use")] = "croc",
|
|
100
101
|
) -> None:
|
|
101
102
|
"""Send a file using croc with relay server."""
|
|
102
|
-
from machineconfig.utils.installer_utils.installer_cli import install_if_missing
|
|
103
|
-
install_if_missing(which="croc")
|
|
104
|
-
# Get relay server IP from environment or use default
|
|
105
|
-
import machineconfig.scripts.python.helpers_network.address as helper
|
|
106
|
-
res = helper.select_lan_ipv4(prefer_vpn=False)
|
|
107
|
-
if res is None:
|
|
108
|
-
typer.echo("❌ Error: Could not determine local LAN IPv4 address for relay.", err=True)
|
|
109
|
-
raise typer.Exit(code=1)
|
|
110
|
-
local_ip_v4 = res
|
|
111
103
|
import platform
|
|
112
|
-
relay_port = "443"
|
|
113
|
-
is_windows = platform.system() == "Windows"
|
|
114
|
-
|
|
115
|
-
# Build command parts
|
|
116
|
-
relay_arg = f"--relay {local_ip_v4}:{relay_port} --ip {local_ip_v4}:{relay_port}"
|
|
117
|
-
zip_arg = "--zip" if zip_folder else ""
|
|
118
|
-
text_arg = f"--text '{text}'" if text else ""
|
|
119
|
-
qrcode_arg = "--qrcode" if qrcode else ""
|
|
120
|
-
path_arg = f"{path}" if not text else ""
|
|
121
104
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
105
|
+
match backend:
|
|
106
|
+
case "wormhole" | "w":
|
|
107
|
+
if code is None: code_line = ""
|
|
108
|
+
else: code_line = f"--code {code}"
|
|
109
|
+
if text is not None: text_line = f"--text '{text}'"
|
|
110
|
+
else: text_line = f"'{path}'"
|
|
111
|
+
script = f"""
|
|
112
|
+
uvx magic-wormhole send {code_line} {text_line}
|
|
113
|
+
"""
|
|
114
|
+
print(f"🚀 Sending file: {path}. Use: uvx magic-wormhole receive ")
|
|
115
|
+
case "croc" | "c":
|
|
116
|
+
from machineconfig.utils.installer_utils.installer_cli import install_if_missing
|
|
117
|
+
install_if_missing(which="croc")
|
|
118
|
+
|
|
119
|
+
# Get relay server IP from environment or use default
|
|
120
|
+
import machineconfig.scripts.python.helpers.helpers_network.address as helper
|
|
121
|
+
res = helper.select_lan_ipv4(prefer_vpn=False)
|
|
122
|
+
if res is None:
|
|
123
|
+
typer.echo("❌ Error: Could not determine local LAN IPv4 address for relay.", err=True)
|
|
124
|
+
raise typer.Exit(code=1)
|
|
125
|
+
local_ip_v4 = res
|
|
126
|
+
relay_port = "443"
|
|
127
|
+
is_windows = platform.system() == "Windows"
|
|
128
|
+
# Build command parts
|
|
129
|
+
relay_arg = f"--relay {local_ip_v4}:{relay_port} --ip {local_ip_v4}:{relay_port}"
|
|
130
|
+
zip_arg = "--zip" if zip_folder else ""
|
|
131
|
+
text_arg = f"--text '{text}'" if text else ""
|
|
132
|
+
qrcode_arg = "--qrcode" if qrcode else ""
|
|
133
|
+
path_arg = f"{path}" if not text else ""
|
|
134
|
+
|
|
135
|
+
if is_windows:
|
|
136
|
+
# Windows PowerShell format
|
|
137
|
+
code_arg = f"--code {code}" if code else ""
|
|
138
|
+
script = f"""croc {relay_arg} send {zip_arg} {code_arg} {qrcode_arg} {text_arg} {path_arg}"""
|
|
139
|
+
else:
|
|
140
|
+
# Linux/macOS Bash format
|
|
141
|
+
if code:
|
|
142
|
+
script = f"""
|
|
143
|
+
export CROC_SECRET="{code}"
|
|
130
144
|
croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
|
|
131
|
-
|
|
132
|
-
|
|
145
|
+
else:
|
|
146
|
+
script = f"""croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
|
|
133
147
|
|
|
134
148
|
typer.echo(f"🚀 Sending file: {path}. Use: devops network receive")
|
|
135
149
|
from machineconfig.utils.code import exit_then_run_shell_script, print_code
|
|
136
150
|
print_code(code=script, desc="🚀 sending file with croc", lexer="bash" if platform.system() != "Windows" else "powershell")
|
|
137
|
-
exit_then_run_shell_script(script=script, strict=False)
|
|
151
|
+
exit_then_run_shell_script(script=script, strict=False)
|