machineconfig 5.58__tar.gz → 5.60__tar.gz
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-5.58/src/machineconfig.egg-info → machineconfig-5.60}/PKG-INFO +2 -1
- {machineconfig-5.58 → machineconfig-5.60}/pyproject.toml +2 -1
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_config.py +8 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_self.py +1 -1
- machineconfig-5.60/src/machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig-5.60/src/machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig-5.60/src/machineconfig/scripts/python/env_manager/path_manager_tui.py +219 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -14
- machineconfig-5.60/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +31 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/code.py +10 -19
- machineconfig-5.60/src/machineconfig/utils/meta.py +166 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ssh.py +58 -47
- {machineconfig-5.58 → machineconfig-5.60/src/machineconfig.egg-info}/PKG-INFO +2 -1
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/SOURCES.txt +4 -1
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/requires.txt +1 -0
- machineconfig-5.58/src/machineconfig/scripts/python/devops_navigator.py.backup +0 -899
- machineconfig-5.58/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -31
- {machineconfig-5.58 → machineconfig-5.60}/MANIFEST.in +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/README.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/setup.cfg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/distribute.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/file_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/job_params.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/run_remote.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/script_execution.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_restart.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_with_panes.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_manager_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/enhanced_command_runner.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/utils/load_balancer_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/templates/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/check_installations.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/installer_data.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/package_groups.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/vscode/api.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/python/vscode/sync_code.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/logger.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/backup.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/bash_shell_profiles.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_links.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_links_export.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/create_shell_profile.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/mapper.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/generic/shares.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzf2g +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfag +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzffg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/fzfrga +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_cloud.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_nfs +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/share_smb +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/start_docker +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/other/switch_ip +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/skrg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/linux/z_ls +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/agents.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/initai.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_copy.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_helpers.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_mount.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/cloud_sync.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/helpers2.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/cloud_helpers/helpers5.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/pomodoro.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/scheduler.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/start_slidev.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/viewer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/croshell_helpers/viewer_template.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_data.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_repos.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/cli_terminal.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_add_identity.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_add_ssh_key.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_backup_retrieve.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_status.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/devops_update_repos.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_helpers/themes/choose_wezterm_theme.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/devops_navigator.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/ftpx.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/helpers4.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/prompt.txt +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/template.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire/template.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/cloud_manager.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/grource.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/interactive.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_drive +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nfs +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nfs.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nw_drive +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_nw_drive.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_smb +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/mount_ssh.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/onetimeshare.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/wifi_conn.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/action.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/clone.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/count_lines.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/entrypoint.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/record.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/sync.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/repos_helpers/update.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions_helpers/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/python/sessions_helpers/sessions_multiprocess.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/br.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/broot/conf.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/glow/glow.yml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/helix/config.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/helix/languages.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keras/keras.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/colors +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/icons +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/linux/lfrc +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/colors +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/icons +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/lfrc +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.flake8 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.mypy.ini +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.pylintrc +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/linters/.ruff.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/mprocs/windows/other +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/pistol/pistol.conf +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/presenterm/config.yaml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/procs/.procs.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/rofi/config.rasi +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/bash/init.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/shells/wt/settings.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/streamlit/config.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/svim/linux/init.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/svim/windows/init.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tere/terecd.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/wsl/.wslconfig +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/keymap.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/theme.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/yazi/yazi.toml +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zed/settings.json +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/commands/monitor +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/config.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/hist +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps_desktop.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/apps_gui.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/ssh/openssh_all.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/uv.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/apps.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/others/power_options.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/add_identity.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/uv.ps1 +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/accessories.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ai/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ai/generate_file_checklist.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/README.md +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ascii_art.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/dbms.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/headers.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ouch/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/ouch/decompress.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/files/read.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/io.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/links.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/notifications.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/options.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/path_extended.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/path_helper.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/procs.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/scheduler.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/scheduling.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/source_of_truth.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/terminal.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/upgrade_packages.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig/utils/ve.py +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/dependency_links.txt +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/entry_points.txt +0 -0
- {machineconfig-5.58 → machineconfig-5.60}/src/machineconfig.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: machineconfig
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.60
|
|
4
4
|
Summary: Dotfiles management package
|
|
5
5
|
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -27,6 +27,7 @@ Requires-Dist: pyjson5>=1.6.9
|
|
|
27
27
|
Requires-Dist: questionary>=2.1.1
|
|
28
28
|
Requires-Dist: typer-slim>=0.19.2
|
|
29
29
|
Requires-Dist: typer>=0.19.2
|
|
30
|
+
Requires-Dist: textual>=6.2.1
|
|
30
31
|
Provides-Extra: windows
|
|
31
32
|
Requires-Dist: pywin32; extra == "windows"
|
|
32
33
|
Provides-Extra: plot
|
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "machineconfig"
|
|
9
|
-
version = "5.
|
|
9
|
+
version = "5.60"
|
|
10
10
|
description = "Dotfiles management package"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = {text = "Apache 2.0"}
|
|
@@ -36,6 +36,7 @@ dependencies = [
|
|
|
36
36
|
"questionary>=2.1.1",
|
|
37
37
|
"typer-slim>=0.19.2",
|
|
38
38
|
"typer>=0.19.2",
|
|
39
|
+
"textual>=6.2.1",
|
|
39
40
|
]
|
|
40
41
|
|
|
41
42
|
[project.optional-dependencies]
|
|
@@ -41,6 +41,14 @@ def shell():
|
|
|
41
41
|
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
42
42
|
create_default_shell_profile()
|
|
43
43
|
|
|
44
|
+
@config_apps.command(no_args_is_help=False)
|
|
45
|
+
def path():
|
|
46
|
+
"""📚 NAVIGATE PATH variable with TUI"""
|
|
47
|
+
from machineconfig.scripts.python import env_manager as navigator
|
|
48
|
+
from pathlib import Path
|
|
49
|
+
path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
|
|
50
|
+
from machineconfig.utils.code import run_shell_script
|
|
51
|
+
run_shell_script(f"uv run --no-dev --with machineconfig,textual {path}")
|
|
44
52
|
|
|
45
53
|
@config_apps.command(no_args_is_help=False)
|
|
46
54
|
def pwsh_theme():
|
|
@@ -42,7 +42,7 @@ def navigate():
|
|
|
42
42
|
from pathlib import Path
|
|
43
43
|
path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
|
|
44
44
|
from machineconfig.utils.code import run_shell_script
|
|
45
|
-
run_shell_script(f"uv run --with machineconfig {path}")
|
|
45
|
+
run_shell_script(f"uv run --no-dev --with machineconfig,textual {path}")
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
@cli_app.command(no_args_is_help=True)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a = 2
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Cross-platform PATH explorer backend."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Literal
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
PlatformType = Literal["Windows", "Linux", "Darwin"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_platform() -> PlatformType:
|
|
13
|
+
"""Get the current platform."""
|
|
14
|
+
return platform.system() # type: ignore[return-value]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_path_entries() -> list[str]:
|
|
18
|
+
"""Get all PATH entries for the current platform."""
|
|
19
|
+
path_str = os.environ.get("PATH", "")
|
|
20
|
+
separator = ";" if get_platform() == "Windows" else ":"
|
|
21
|
+
return [entry for entry in path_str.split(separator) if entry.strip()]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_directory_contents(directory: str, max_items: int = 50) -> list[str]:
|
|
25
|
+
"""Get contents of a directory, limited to max_items."""
|
|
26
|
+
try:
|
|
27
|
+
path = Path(directory)
|
|
28
|
+
if not path.exists():
|
|
29
|
+
return ["⚠️ Directory does not exist"]
|
|
30
|
+
if not path.is_dir():
|
|
31
|
+
return ["⚠️ Not a directory"]
|
|
32
|
+
|
|
33
|
+
items = []
|
|
34
|
+
for item in sorted(path.iterdir(), key=lambda p: (not p.is_dir(), p.name.lower())):
|
|
35
|
+
if len(items) >= max_items:
|
|
36
|
+
items.append(f"... and {sum(1 for _ in path.iterdir()) - max_items} more items")
|
|
37
|
+
break
|
|
38
|
+
prefix = "📁 " if item.is_dir() else "📄 "
|
|
39
|
+
items.append(f"{prefix}{item.name}")
|
|
40
|
+
|
|
41
|
+
if not items:
|
|
42
|
+
return ["📭 Empty directory"]
|
|
43
|
+
return items
|
|
44
|
+
except PermissionError:
|
|
45
|
+
return ["⚠️ Permission denied"]
|
|
46
|
+
except Exception as e:
|
|
47
|
+
return [f"⚠️ Error: {e!s}"]
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"""Cross-platform PATH explorer with Textual TUI."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from textual import on
|
|
6
|
+
from textual.app import App, ComposeResult
|
|
7
|
+
from textual.binding import Binding
|
|
8
|
+
from textual.containers import Horizontal, Vertical
|
|
9
|
+
from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
|
|
10
|
+
|
|
11
|
+
from machineconfig.scripts.python.env_manager.path_manager_backend import get_directory_contents, get_path_entries, get_platform
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DirectoryPreview(Static):
|
|
15
|
+
"""Widget to display directory contents."""
|
|
16
|
+
|
|
17
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
18
|
+
super().__init__(*args, **kwargs)
|
|
19
|
+
self.border_title = "📂 Directory Preview"
|
|
20
|
+
|
|
21
|
+
def update_preview(self, directory: str) -> None:
|
|
22
|
+
"""Update the preview with directory contents."""
|
|
23
|
+
if not directory:
|
|
24
|
+
self.update("Select a PATH entry to preview its contents")
|
|
25
|
+
return
|
|
26
|
+
|
|
27
|
+
contents = get_directory_contents(directory, max_items=30)
|
|
28
|
+
preview_text = f"[bold cyan]{directory}[/bold cyan]\n\n"
|
|
29
|
+
preview_text += "\n".join(contents)
|
|
30
|
+
self.update(preview_text)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class StatusBar(Static):
|
|
34
|
+
"""Status bar to show messages."""
|
|
35
|
+
|
|
36
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
37
|
+
super().__init__(*args, **kwargs)
|
|
38
|
+
self.border_title = "ℹ️ Status"
|
|
39
|
+
|
|
40
|
+
def show_message(self, message: str, message_type: str = "info") -> None:
|
|
41
|
+
"""Display a status message."""
|
|
42
|
+
color = {"info": "cyan", "success": "green", "error": "red", "warning": "yellow"}.get(message_type, "white")
|
|
43
|
+
self.update(f"[{color}]{message}[/{color}]")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class PathExplorerApp(App[None]):
|
|
47
|
+
"""A Textual app to explore PATH entries."""
|
|
48
|
+
|
|
49
|
+
CSS = """
|
|
50
|
+
Screen {
|
|
51
|
+
background: $surface;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
Header {
|
|
55
|
+
background: $primary;
|
|
56
|
+
color: $text;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
Footer {
|
|
60
|
+
background: $panel;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#main-container {
|
|
64
|
+
height: 100%;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#left-panel {
|
|
68
|
+
width: 50%;
|
|
69
|
+
height: 100%;
|
|
70
|
+
border: solid $primary;
|
|
71
|
+
padding: 1;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
#right-panel {
|
|
75
|
+
width: 50%;
|
|
76
|
+
height: 100%;
|
|
77
|
+
border: solid $accent;
|
|
78
|
+
padding: 1;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
ListView {
|
|
82
|
+
height: 1fr;
|
|
83
|
+
border: solid $accent;
|
|
84
|
+
background: $surface;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
ListView > ListItem {
|
|
88
|
+
padding: 0 1;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
ListView > ListItem.--highlight {
|
|
92
|
+
background: $accent 20%;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
DirectoryPreview {
|
|
96
|
+
height: 1fr;
|
|
97
|
+
border: solid $primary;
|
|
98
|
+
background: $surface;
|
|
99
|
+
padding: 1;
|
|
100
|
+
overflow-y: auto;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
StatusBar {
|
|
104
|
+
height: 3;
|
|
105
|
+
border: solid $success;
|
|
106
|
+
background: $surface;
|
|
107
|
+
padding: 1;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
Label {
|
|
111
|
+
padding: 0 1;
|
|
112
|
+
height: auto;
|
|
113
|
+
}
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
BINDINGS = [
|
|
117
|
+
Binding("q", "quit", "Quit", show=True),
|
|
118
|
+
Binding("r", "refresh", "Refresh", show=True),
|
|
119
|
+
Binding("c", "copy_path", "Copy Path", show=True),
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
def __init__(self) -> None:
|
|
123
|
+
super().__init__()
|
|
124
|
+
self.selected_path: str = ""
|
|
125
|
+
|
|
126
|
+
def compose(self) -> ComposeResult:
|
|
127
|
+
"""Create child widgets for the app."""
|
|
128
|
+
platform_name = get_platform()
|
|
129
|
+
yield Header(show_clock=True)
|
|
130
|
+
|
|
131
|
+
with Horizontal(id="main-container"):
|
|
132
|
+
with Vertical(id="left-panel"):
|
|
133
|
+
yield Label(f"🔧 PATH Entries ({platform_name})")
|
|
134
|
+
yield ListView(id="path-list")
|
|
135
|
+
|
|
136
|
+
with Vertical(id="right-panel"):
|
|
137
|
+
yield DirectoryPreview(id="preview")
|
|
138
|
+
yield StatusBar(id="status")
|
|
139
|
+
|
|
140
|
+
yield Footer()
|
|
141
|
+
|
|
142
|
+
def on_mount(self) -> None:
|
|
143
|
+
"""Initialize the app when mounted."""
|
|
144
|
+
self.title = "PATH Explorer"
|
|
145
|
+
self.sub_title = f"Platform: {get_platform()}"
|
|
146
|
+
self.refresh_path_list()
|
|
147
|
+
self.query_one("#status", StatusBar).show_message("Ready. Select a PATH entry to preview its contents.", "info")
|
|
148
|
+
|
|
149
|
+
def refresh_path_list(self) -> None:
|
|
150
|
+
"""Refresh the list of PATH entries."""
|
|
151
|
+
list_view = self.query_one("#path-list", ListView)
|
|
152
|
+
list_view.clear()
|
|
153
|
+
|
|
154
|
+
entries = get_path_entries()
|
|
155
|
+
for entry in entries:
|
|
156
|
+
path = Path(entry)
|
|
157
|
+
exists = path.exists()
|
|
158
|
+
icon = "✅" if exists else "❌"
|
|
159
|
+
item = ListItem(Label(f"{icon} {entry}"))
|
|
160
|
+
item.set_class(exists, "--valid")
|
|
161
|
+
list_view.append(item)
|
|
162
|
+
|
|
163
|
+
self.query_one("#status", StatusBar).show_message(f"Loaded {len(entries)} PATH entries", "success")
|
|
164
|
+
|
|
165
|
+
@on(ListView.Highlighted)
|
|
166
|
+
def handle_highlight(self, event: ListView.Highlighted) -> None:
|
|
167
|
+
"""Handle highlighting of a PATH entry (scroll preview)."""
|
|
168
|
+
if event.item is None:
|
|
169
|
+
return
|
|
170
|
+
label = event.item.query_one(Label)
|
|
171
|
+
text = label.render()
|
|
172
|
+
# Remove the icon prefix
|
|
173
|
+
highlighted_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
|
|
174
|
+
|
|
175
|
+
preview = self.query_one("#preview", DirectoryPreview)
|
|
176
|
+
preview.update_preview(highlighted_path)
|
|
177
|
+
|
|
178
|
+
self.query_one("#status", StatusBar).show_message(f"Previewing: {highlighted_path}", "info")
|
|
179
|
+
|
|
180
|
+
@on(ListView.Selected)
|
|
181
|
+
def handle_selection(self, event: ListView.Selected) -> None:
|
|
182
|
+
"""Handle selection of a PATH entry (Enter key)."""
|
|
183
|
+
label = event.item.query_one(Label)
|
|
184
|
+
text = label.render()
|
|
185
|
+
# Remove the icon prefix
|
|
186
|
+
self.selected_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
|
|
187
|
+
|
|
188
|
+
preview = self.query_one("#preview", DirectoryPreview)
|
|
189
|
+
preview.update_preview(self.selected_path)
|
|
190
|
+
|
|
191
|
+
self.query_one("#status", StatusBar).show_message(f"Selected: {self.selected_path}", "success")
|
|
192
|
+
|
|
193
|
+
def action_refresh(self) -> None:
|
|
194
|
+
"""Refresh the PATH list."""
|
|
195
|
+
self.refresh_path_list()
|
|
196
|
+
|
|
197
|
+
def action_copy_path(self) -> None:
|
|
198
|
+
"""Copy selected path to clipboard."""
|
|
199
|
+
if not self.selected_path:
|
|
200
|
+
self.query_one("#status", StatusBar).show_message("No PATH entry selected", "warning")
|
|
201
|
+
return
|
|
202
|
+
|
|
203
|
+
# Try to copy to clipboard
|
|
204
|
+
try:
|
|
205
|
+
import pyperclip
|
|
206
|
+
pyperclip.copy(self.selected_path)
|
|
207
|
+
self.query_one("#status", StatusBar).show_message(f"Copied to clipboard: {self.selected_path}", "success")
|
|
208
|
+
except ImportError:
|
|
209
|
+
self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def main() -> None:
|
|
213
|
+
"""Run the PATH Explorer TUI."""
|
|
214
|
+
app = PathExplorerApp()
|
|
215
|
+
app.run()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
if __name__ == "__main__":
|
|
219
|
+
main()
|
|
@@ -11,7 +11,6 @@ from machineconfig.utils.code import get_shell_file_executing_python_script, wri
|
|
|
11
11
|
import platform
|
|
12
12
|
import subprocess
|
|
13
13
|
from typing import Optional, Literal
|
|
14
|
-
from pathlib import Path
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
console = Console()
|
|
@@ -96,13 +95,14 @@ git pull originEnc master
|
|
|
96
95
|
|
|
97
96
|
# ================================================================================
|
|
98
97
|
option1 = "Delete remote copy and push local:"
|
|
99
|
-
|
|
100
|
-
from machineconfig.scripts.python.
|
|
101
|
-
|
|
102
|
-
""
|
|
103
|
-
|
|
98
|
+
def func2(remote_repo: str, local_repo: str, cloud: str):
|
|
99
|
+
from machineconfig.scripts.python.repos_helpers.sync import delete_remote_repo_copy_and_push_local
|
|
100
|
+
delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
|
|
101
|
+
return "done"
|
|
102
|
+
from machineconfig.utils.meta import function_to_script
|
|
103
|
+
program_1_py = function_to_script(func=func2, call_with_args=None, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
|
|
104
|
+
shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable="uv run --with machineconfig")
|
|
104
105
|
# ================================================================================
|
|
105
|
-
|
|
106
106
|
option2 = "Delete local repo and replace it with remote copy:"
|
|
107
107
|
program_2 = f"""
|
|
108
108
|
rm -rfd {repo_local_root}
|
|
@@ -114,16 +114,15 @@ sudo chmod 600 $HOME/.ssh/*
|
|
|
114
114
|
sudo chmod 700 $HOME/.ssh
|
|
115
115
|
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
116
116
|
"""
|
|
117
|
-
|
|
118
117
|
shell_file_2 = write_shell_script_to_file(shell_script=program_2)
|
|
119
|
-
|
|
120
118
|
# ================================================================================
|
|
121
119
|
option3 = "Inspect repos:"
|
|
122
|
-
|
|
123
|
-
from machineconfig.scripts.python.
|
|
124
|
-
|
|
125
|
-
""
|
|
126
|
-
|
|
120
|
+
def func(repo_local_root: str, repo_remote_root: str):
|
|
121
|
+
from machineconfig.scripts.python.repos_helpers.sync import inspect_repos
|
|
122
|
+
inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
|
|
123
|
+
return "done"
|
|
124
|
+
program_3_py = function_to_script(func=func, call_with_args=None, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
|
|
125
|
+
shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable="uv run --with machineconfig")
|
|
127
126
|
# ================================================================================
|
|
128
127
|
|
|
129
128
|
option4 = "Remove problematic rclone file from repo and replace with remote:"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
|
+
function devops {
|
|
5
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig devops $args
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function cloud {
|
|
9
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig cloud $args
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function croshell {
|
|
13
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig croshell $args
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function agents {
|
|
17
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig agents $args
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function fire {
|
|
21
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig fire $args
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function ftpx {
|
|
25
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig ftpx $args
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function sessions {
|
|
29
|
+
& "$HOME\.local\bin\uv.exe" run --python 3.14 --with machineconfig sessions $args
|
|
30
|
+
}
|
|
31
|
+
|
|
@@ -10,14 +10,16 @@ from machineconfig.utils.ve import get_ve_activate_line
|
|
|
10
10
|
from machineconfig.utils.path_extended import PathExtended
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: str, strict_execution: bool = True):
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
|
|
14
|
+
if executable is None: exe_resolved = "python"
|
|
15
|
+
else: exe_resolved = executable
|
|
16
|
+
if func is None: exec_line = f"""{exe_resolved} {python_file}"""
|
|
17
|
+
else: exec_line = f"""{exe_resolved} -m fire {python_file} {func}"""
|
|
18
|
+
if ve_path is None: ve_activate_line = ""
|
|
19
|
+
else: ve_activate_line = get_ve_activate_line(ve_path)
|
|
18
20
|
shell_script = f"""
|
|
19
21
|
echo "Executing `{exec_line}`"
|
|
20
|
-
{
|
|
22
|
+
{ve_activate_line}
|
|
21
23
|
{exec_line}
|
|
22
24
|
deactivate || true
|
|
23
25
|
"""
|
|
@@ -31,7 +33,7 @@ deactivate || true
|
|
|
31
33
|
return shell_script
|
|
32
34
|
|
|
33
35
|
|
|
34
|
-
def get_shell_file_executing_python_script(python_script: str, ve_path: str, verbose: bool = True):
|
|
36
|
+
def get_shell_file_executing_python_script(python_script: str, ve_path: Optional[str], executable: Optional[str], verbose: bool = True):
|
|
35
37
|
if verbose:
|
|
36
38
|
python_script = f"""
|
|
37
39
|
code = r'''{python_script}'''
|
|
@@ -47,7 +49,7 @@ except ImportError:
|
|
|
47
49
|
python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
|
|
48
50
|
python_file.parent.mkdir(parents=True, exist_ok=True)
|
|
49
51
|
python_file.write_text(python_script, encoding="utf-8")
|
|
50
|
-
shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path)
|
|
52
|
+
shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path, executable=executable)
|
|
51
53
|
shell_file = write_shell_script_to_file(shell_script)
|
|
52
54
|
return shell_file
|
|
53
55
|
|
|
@@ -132,14 +134,3 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
132
134
|
temp_script_path.unlink(missing_ok=True)
|
|
133
135
|
console.print(f"🗑️ [blue]Temporary script deleted:[/blue] [green]{temp_script_path}[/green]")
|
|
134
136
|
return proc
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
# def run_command(command: str, description: str) -> bool:
|
|
138
|
-
# """Execute a shell command and return success status."""
|
|
139
|
-
# console.print(f"\n🔧 {description}", style="bold cyan")
|
|
140
|
-
# try:
|
|
141
|
-
# result = subprocess.run(command, shell=True, check=True, capture_output=False)
|
|
142
|
-
# return result.returncode == 0
|
|
143
|
-
# except subprocess.CalledProcessError as e:
|
|
144
|
-
# console.print(f"❌ Error executing command: {e}", style="bold red")
|
|
145
|
-
# return False
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Metaprogramming utilities for analyzing and serializing Python functions."""
|
|
2
|
+
|
|
3
|
+
import ast
|
|
4
|
+
import inspect
|
|
5
|
+
import textwrap
|
|
6
|
+
from types import FunctionType, ModuleType
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def function_to_script(func: FunctionType, call_with_args: tuple[Any, ...] | None = None, call_with_kwargs: dict[str, Any] | None = None) -> str:
|
|
11
|
+
"""Convert a function to a standalone executable Python script.
|
|
12
|
+
|
|
13
|
+
This function analyzes a given function and generates a complete Python script
|
|
14
|
+
that includes all necessary imports, global variables, the function definition,
|
|
15
|
+
and optionally a function call.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
func: The function to convert to a script
|
|
19
|
+
call_with_args: Optional tuple of positional arguments to call the function with
|
|
20
|
+
call_with_kwargs: Optional dict of keyword arguments to call the function with
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
A complete Python script as a string that can be executed independently
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
ValueError: If the function cannot be inspected or analyzed
|
|
27
|
+
"""
|
|
28
|
+
if not callable(func) or not hasattr(func, '__code__'):
|
|
29
|
+
raise ValueError(f"Expected a function, got {type(func)}")
|
|
30
|
+
|
|
31
|
+
call_with_args = call_with_args or ()
|
|
32
|
+
call_with_kwargs = call_with_kwargs or {}
|
|
33
|
+
|
|
34
|
+
imports = _extract_imports(func)
|
|
35
|
+
globals_needed = _extract_globals(func)
|
|
36
|
+
source_code = _get_function_source(func)
|
|
37
|
+
call_statement = _generate_call_statement(func, call_with_args, call_with_kwargs)
|
|
38
|
+
|
|
39
|
+
script_parts: list[str] = []
|
|
40
|
+
|
|
41
|
+
if imports:
|
|
42
|
+
script_parts.append(imports)
|
|
43
|
+
script_parts.append("")
|
|
44
|
+
|
|
45
|
+
if globals_needed:
|
|
46
|
+
script_parts.append(globals_needed)
|
|
47
|
+
script_parts.append("")
|
|
48
|
+
|
|
49
|
+
script_parts.append(source_code)
|
|
50
|
+
script_parts.append("")
|
|
51
|
+
|
|
52
|
+
if call_statement:
|
|
53
|
+
script_parts.append("")
|
|
54
|
+
script_parts.append("if __name__ == '__main__':")
|
|
55
|
+
script_parts.append(f" {call_statement}")
|
|
56
|
+
|
|
57
|
+
return "\n".join(script_parts)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _get_function_source(func: FunctionType) -> str:
|
|
61
|
+
"""Extract the source code of a function."""
|
|
62
|
+
try:
|
|
63
|
+
source = inspect.getsource(func)
|
|
64
|
+
return textwrap.dedent(source)
|
|
65
|
+
except (OSError, TypeError) as e:
|
|
66
|
+
raise ValueError(f"Cannot get source code for function {func.__name__}: {e}") from e
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _extract_imports(func: FunctionType) -> str:
|
|
70
|
+
"""Extract all import statements needed by the function."""
|
|
71
|
+
import_statements: set[str] = set()
|
|
72
|
+
|
|
73
|
+
source = _get_function_source(func)
|
|
74
|
+
func_globals = func.__globals__
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
tree = ast.parse(source)
|
|
78
|
+
except SyntaxError as e:
|
|
79
|
+
raise ValueError(f"Failed to parse function source: {e}") from e
|
|
80
|
+
|
|
81
|
+
used_names: set[str] = set()
|
|
82
|
+
for node in ast.walk(tree):
|
|
83
|
+
if isinstance(node, ast.Name):
|
|
84
|
+
used_names.add(node.id)
|
|
85
|
+
elif isinstance(node, ast.Attribute):
|
|
86
|
+
if isinstance(node.value, ast.Name):
|
|
87
|
+
used_names.add(node.value.id)
|
|
88
|
+
|
|
89
|
+
for name in used_names:
|
|
90
|
+
if name in func_globals:
|
|
91
|
+
obj = func_globals[name]
|
|
92
|
+
|
|
93
|
+
if isinstance(obj, ModuleType):
|
|
94
|
+
module_name = obj.__name__
|
|
95
|
+
if name == module_name.split('.')[-1]:
|
|
96
|
+
import_statements.add(f"import {module_name}")
|
|
97
|
+
else:
|
|
98
|
+
import_statements.add(f"import {module_name} as {name}")
|
|
99
|
+
|
|
100
|
+
elif hasattr(obj, '__module__') and obj.__module__ != '__main__':
|
|
101
|
+
try:
|
|
102
|
+
module_name = obj.__module__
|
|
103
|
+
obj_name = obj.__name__ if hasattr(obj, '__name__') else name
|
|
104
|
+
|
|
105
|
+
if module_name and module_name != 'builtins':
|
|
106
|
+
if obj_name == name:
|
|
107
|
+
import_statements.add(f"from {module_name} import {obj_name}")
|
|
108
|
+
else:
|
|
109
|
+
import_statements.add(f"from {module_name} import {obj_name} as {name}")
|
|
110
|
+
except AttributeError:
|
|
111
|
+
pass
|
|
112
|
+
|
|
113
|
+
return "\n".join(sorted(import_statements))
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _extract_globals(func: FunctionType) -> str:
|
|
117
|
+
"""Extract global variables needed by the function."""
|
|
118
|
+
global_assignments: list[str] = []
|
|
119
|
+
|
|
120
|
+
source = _get_function_source(func)
|
|
121
|
+
func_globals = func.__globals__
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
tree = ast.parse(source)
|
|
125
|
+
except SyntaxError as e:
|
|
126
|
+
raise ValueError(f"Failed to parse function source: {e}") from e
|
|
127
|
+
|
|
128
|
+
used_names: set[str] = set()
|
|
129
|
+
for node in ast.walk(tree):
|
|
130
|
+
if isinstance(node, ast.Name):
|
|
131
|
+
used_names.add(node.id)
|
|
132
|
+
elif isinstance(node, ast.Attribute):
|
|
133
|
+
if isinstance(node.value, ast.Name):
|
|
134
|
+
used_names.add(node.value.id)
|
|
135
|
+
|
|
136
|
+
for name in used_names:
|
|
137
|
+
if name in func_globals:
|
|
138
|
+
obj = func_globals[name]
|
|
139
|
+
|
|
140
|
+
if not isinstance(obj, (ModuleType, FunctionType, type)):
|
|
141
|
+
if not (hasattr(obj, '__module__') and hasattr(obj, '__name__')):
|
|
142
|
+
try:
|
|
143
|
+
repr_str = repr(obj)
|
|
144
|
+
if len(repr_str) < 1000 and '\n' not in repr_str:
|
|
145
|
+
global_assignments.append(f"{name} = {repr_str}")
|
|
146
|
+
except Exception:
|
|
147
|
+
global_assignments.append(f"# Warning: Could not serialize global variable '{name}'")
|
|
148
|
+
|
|
149
|
+
return "\n".join(global_assignments)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _generate_call_statement(func: FunctionType, args: tuple[Any, ...], kwargs: dict[str, Any]) -> str:
|
|
153
|
+
"""Generate a function call statement with the given arguments."""
|
|
154
|
+
if not args and not kwargs:
|
|
155
|
+
return f"{func.__name__}()"
|
|
156
|
+
|
|
157
|
+
arg_parts: list[str] = []
|
|
158
|
+
|
|
159
|
+
for arg in args:
|
|
160
|
+
arg_parts.append(repr(arg))
|
|
161
|
+
|
|
162
|
+
for key, value in kwargs.items():
|
|
163
|
+
arg_parts.append(f"{key}={repr(value)}")
|
|
164
|
+
|
|
165
|
+
args_str = ", ".join(arg_parts)
|
|
166
|
+
return f"{func.__name__}({args_str})"
|