machineconfig 6.52__tar.gz → 6.54__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-6.52/src/machineconfig.egg-info → machineconfig-6.54}/PKG-INFO +1 -1
- {machineconfig-6.52 → machineconfig-6.54}/pyproject.toml +2 -1
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/utils/maker.py +9 -12
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_utils.py +43 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +31 -27
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/sync.py +5 -5
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/code.py +37 -85
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer.py +1 -1
- machineconfig-6.54/src/machineconfig/utils/meta.py +188 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/scheduling.py +0 -1
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ssh.py +50 -49
- {machineconfig-6.52 → machineconfig-6.54/src/machineconfig.egg-info}/PKG-INFO +1 -1
- machineconfig-6.52/src/machineconfig/utils/meta.py +0 -434
- {machineconfig-6.52 → machineconfig-6.54}/MANIFEST.in +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/README.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/setup.cfg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/distribute.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/file_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/job_params.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/run_remote.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/script_execution.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/helpers/enhanced_command_runner.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/templates/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/check_installations.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/installer_data.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/package_groups.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/python/vscode/api.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/logger.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/backup.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/bash_shell_profiles.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_links.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_links_export.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/create_shell_profile.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/mapper.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/generic/shares.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzf2g +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfag +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzffg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/fzfrga +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_cloud.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_nfs +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/share_smb +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/start_docker +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/other/switch_ip +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/skrg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/linux/z_ls +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/agents.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/command_runner/command_runner.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/initai.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ai/vscode_tasks.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/cloud.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/croshell.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/devops.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/devops_navigator.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/entry.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/path_manager_backend.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/env_manager/path_manager_tui.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/ftpx.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_copy.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_mount.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/cloud_sync.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/helpers2.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_cloud/helpers5.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/crosh.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/pomodoro.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/scheduler.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/start_slidev.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/viewer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_croshell/viewer_template.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_config.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_data.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_self.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/cli_terminal.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_status.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/devops_update_repos.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/helpers4.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/prompt.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/template.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire/template.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/cloud_manager.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_builder.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/data_models.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/main_app.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_navigator/search_bar.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/action.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/clone.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/count_lines.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/grource.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/record.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/update.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/interactive.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/add_ssh_key.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/devops_add_identity.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_drive +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nfs +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nfs.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nw_drive +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_nw_drive.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_smb +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/mount_ssh.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/onetimeshare.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/wifi_conn.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/sessions.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/br.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/broot/conf.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/glow/glow.yml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/helix/config.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/helix/languages.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keras/keras.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/colors +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/icons +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/linux/lfrc +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/colors +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/icons +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/lfrc +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.flake8 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.mypy.ini +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.pylintrc +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/linters/.ruff.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/marimo/marimo.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/mprocs/windows/other +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/pistol/pistol.conf +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/presenterm/config.yaml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/procs/.procs.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/rofi/config.rasi +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/bash/init.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/shells/wt/settings.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/streamlit/config.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/svim/linux/init.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/svim/windows/init.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tere/terecd.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/wsl/.wslconfig +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/keymap.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/theme.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/yazi/yazi.toml +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zed/settings.json +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/commands/monitor +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/config.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/hist +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps_desktop.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/apps_gui.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/ssh/openssh_all.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/uv.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/apps.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/ssh/openssh_setup.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_mac/uv.sh +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/apps.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/others/power_options.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/add_identity.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/uv.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/accessories.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ai/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/README.md +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/fat_croco.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/halfwit_croco.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/happy_croco.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/art/water_croco.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ascii_art.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/dbms.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/headers.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ouch/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/ouch/decompress.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/files/read.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/installer_utils/installer_class.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/io.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/links.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/notifications.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/options.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/path_extended.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/path_helper.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/procs.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/scheduler.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/source_of_truth.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ssh_utils/utils.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/terminal.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/tst.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/upgrade_packages.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/utils/ve.py +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/SOURCES.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/dependency_links.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/entry_points.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/requires.txt +0 -0
- {machineconfig-6.52 → machineconfig-6.54}/src/machineconfig.egg-info/top_level.txt +0 -0
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "machineconfig"
|
|
9
|
-
version = "6.
|
|
9
|
+
version = "6.54"
|
|
10
10
|
description = "Dotfiles management package"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = {text = "Apache 2.0"}
|
|
@@ -99,6 +99,7 @@ dev = [
|
|
|
99
99
|
"pre-commit>=4.3.0",
|
|
100
100
|
"pudb>=2025.1",
|
|
101
101
|
"pylint>=3.3.8",
|
|
102
|
+
"pypdf>=6.1.1",
|
|
102
103
|
"pyrefly>=0.33.1",
|
|
103
104
|
"pyright>=1.1.405",
|
|
104
105
|
"pytest>=8.4.2",
|
{machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/cluster/sessions_managers/utils/maker.py
RENAMED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
|
|
2
2
|
from types import FunctionType
|
|
3
|
-
from typing import Literal
|
|
3
|
+
from typing import Optional, Literal
|
|
4
4
|
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
|
-
def
|
|
8
|
-
from machineconfig.utils.meta import
|
|
9
|
-
py_script =
|
|
10
|
-
from machineconfig.utils.
|
|
11
|
-
py_script_path =
|
|
12
|
-
py_script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
13
|
-
py_script_path.write_text(py_script, encoding="utf-8")
|
|
14
|
-
command_to_run = f"uv run --project $HOME/ {py_script_path}"
|
|
7
|
+
def get_fire_tab_using_uv(func: FunctionType, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
|
|
8
|
+
from machineconfig.utils.meta import lambda_to_defstring
|
|
9
|
+
py_script = lambda_to_defstring(lmb=lambda: func, in_global=True)
|
|
10
|
+
from machineconfig.utils.code import get_uv_command_executing_python_script
|
|
11
|
+
command_to_run, py_script_path = get_uv_command_executing_python_script(python_script=py_script, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
15
12
|
tab_config: TabConfig = {
|
|
16
13
|
"command": command_to_run,
|
|
17
14
|
"startDir": "$HOME",
|
|
18
15
|
"tabName": func.__name__
|
|
19
16
|
}
|
|
20
17
|
return tab_config, py_script_path
|
|
21
|
-
def
|
|
18
|
+
def get_fire_tab_using_fire(func: FunctionType):
|
|
22
19
|
import inspect
|
|
23
20
|
path = Path(inspect.getfile(func))
|
|
24
21
|
path_relative = path.relative_to(Path.home())
|
|
@@ -36,10 +33,10 @@ def make_layout_from_functions(functions: list[FunctionType], tab_configs: list[
|
|
|
36
33
|
for a_func in functions:
|
|
37
34
|
match method:
|
|
38
35
|
case "script":
|
|
39
|
-
tab_config, artifact_files_1 =
|
|
36
|
+
tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, uv_with=None, uv_project_dir=None)
|
|
40
37
|
artifact_files = [artifact_files_1]
|
|
41
38
|
case "fire":
|
|
42
|
-
tab_config =
|
|
39
|
+
tab_config = get_fire_tab_using_fire(a_func)
|
|
43
40
|
artifact_files = []
|
|
44
41
|
tabs2artifacts.append((tab_config, artifact_files))
|
|
45
42
|
list_of_tabs = [tab for tab, _ in tabs2artifacts] + tab_configs
|
|
@@ -78,8 +78,51 @@ def download(
|
|
|
78
78
|
raise typer.Exit(code=1)
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
def merge_pdfs(
|
|
82
|
+
pdf1: Annotated[str, typer.Argument(..., help="Path to the first PDF file.")],
|
|
83
|
+
pdf2: Annotated[str, typer.Argument(..., help="Path to the second PDF file.")],
|
|
84
|
+
output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
|
|
85
|
+
compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
|
|
86
|
+
) -> None:
|
|
87
|
+
def merge_pdfs_internal(pdf1: str, pdf2: str, output: Optional[str], compress: bool) -> None:
|
|
88
|
+
from pypdf import PdfReader, PdfWriter
|
|
89
|
+
writer = PdfWriter()
|
|
90
|
+
for pdf_path in [pdf1, pdf2]:
|
|
91
|
+
reader = PdfReader(pdf_path)
|
|
92
|
+
for page in reader.pages:
|
|
93
|
+
writer.add_page(page)
|
|
94
|
+
output_path = output if output else "merged.pdf"
|
|
95
|
+
if compress:
|
|
96
|
+
try:
|
|
97
|
+
for p in writer.pages:
|
|
98
|
+
try:
|
|
99
|
+
# PageObject.compress_content_streams exists in pypdf
|
|
100
|
+
p.compress_content_streams()
|
|
101
|
+
except Exception:
|
|
102
|
+
# best-effort: ignore per-page compression failures
|
|
103
|
+
continue
|
|
104
|
+
except Exception:
|
|
105
|
+
pass
|
|
106
|
+
try:
|
|
107
|
+
writer.compress_identical_objects()
|
|
108
|
+
except Exception:
|
|
109
|
+
# non-fatal if this fails
|
|
110
|
+
pass
|
|
111
|
+
writer.write(output_path)
|
|
112
|
+
print(f"✅ Merged PDF saved to: {output_path}")
|
|
113
|
+
from machineconfig.utils.meta import lambda_to_defstring
|
|
114
|
+
code = lambda_to_defstring(lambda : merge_pdfs_internal(pdf1=pdf1, pdf2=pdf2, output=output, compress=compress), in_global=True)
|
|
115
|
+
import tempfile
|
|
116
|
+
tmp_py_file = Path(tempfile.mkstemp(suffix=".py")[1])
|
|
117
|
+
tmp_py_file.write_text(code, encoding="utf-8")
|
|
118
|
+
from machineconfig.utils.code import run_shell_script
|
|
119
|
+
run_shell_script(f"""uv run --with pypdf {tmp_py_file} """)
|
|
120
|
+
|
|
121
|
+
|
|
81
122
|
def get_app() -> typer.Typer:
|
|
82
123
|
app = typer.Typer(help="🛠️ [u] utilities operations", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
83
124
|
app.command(name="download", no_args_is_help=True, help="[d] Download a file from a URL and optionally decompress it.")(download)
|
|
84
125
|
app.command(name="d", no_args_is_help=True, hidden=True)(download)
|
|
126
|
+
app.command(name="merge-pdfs", no_args_is_help=True, help="[m] Merge two PDF files into one.")(merge_pdfs)
|
|
127
|
+
app.command(name="m", no_args_is_help=True, hidden=True)(merge_pdfs)
|
|
85
128
|
return app
|
|
@@ -6,7 +6,7 @@ import typer
|
|
|
6
6
|
from machineconfig.utils.path_extended import PathExtended
|
|
7
7
|
from machineconfig.utils.terminal import Response
|
|
8
8
|
from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH
|
|
9
|
-
from machineconfig.utils.code import
|
|
9
|
+
from machineconfig.utils.code import get_uv_command_executing_python_script
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
import platform
|
|
12
12
|
import subprocess
|
|
@@ -76,10 +76,17 @@ git pull originEnc master
|
|
|
76
76
|
|
|
77
77
|
"""
|
|
78
78
|
|
|
79
|
-
if Path.home().joinpath("code/machineconfig").exists():
|
|
80
|
-
|
|
79
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
80
|
+
uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
|
|
81
|
+
uv_with = None
|
|
82
|
+
else:
|
|
83
|
+
uv_with = ["machineconfig>=6.52"]
|
|
84
|
+
uv_project_dir = None
|
|
85
|
+
|
|
86
|
+
import tempfile
|
|
87
|
+
shell_path = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
|
|
88
|
+
shell_path.write_text(script, encoding="utf-8")
|
|
81
89
|
|
|
82
|
-
shell_path = write_shell_script_to_file(shell_script=script)
|
|
83
90
|
command = f". {shell_path}"
|
|
84
91
|
if platform.system() == "Windows":
|
|
85
92
|
completed = subprocess.run(["powershell", "-Command", command], capture_output=True, check=False, text=True)
|
|
@@ -100,20 +107,12 @@ git pull originEnc master
|
|
|
100
107
|
|
|
101
108
|
# ================================================================================
|
|
102
109
|
option1 = "Delete remote copy and push local:"
|
|
103
|
-
from machineconfig.utils.meta import
|
|
110
|
+
from machineconfig.utils.meta import lambda_to_defstring
|
|
104
111
|
def func2(remote_repo: str, local_repo: str, cloud: str):
|
|
105
112
|
from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
|
|
106
113
|
delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# from machineconfig.scripts.python.helpers_repos.sync import delete_remote_repo_copy_and_push_local
|
|
110
|
-
# delete_remote_repo_copy_and_push_local(remote_repo=remote_repo, local_repo=local_repo, cloud=cloud)
|
|
111
|
-
# return "done"
|
|
112
|
-
# program_1_py = function_to_script(func=func2, call_with_kwargs=None)
|
|
113
|
-
program_1_py = function_to_script(func=func2, call_with_kwargs={"remote_repo": str(repo_remote_root), "local_repo": str(repo_local_root), "cloud": cloud_resolved})
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=None, executable=executable)
|
|
114
|
+
program_1_py = lambda_to_defstring(lambda: func2(remote_repo=str(repo_remote_root), local_repo=str(repo_local_root), cloud=str(cloud_resolved)), in_global=True)
|
|
115
|
+
uv_command_1, _pyfile1 = get_uv_command_executing_python_script(python_script=program_1_py, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
117
116
|
# ================================================================================
|
|
118
117
|
option2 = "Delete local repo and replace it with remote copy:"
|
|
119
118
|
program_2 = f"""
|
|
@@ -126,15 +125,19 @@ sudo chmod 600 $HOME/.ssh/*
|
|
|
126
125
|
sudo chmod 700 $HOME/.ssh
|
|
127
126
|
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
128
127
|
"""
|
|
129
|
-
|
|
128
|
+
import tempfile
|
|
129
|
+
shell_file_2 = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
|
|
130
|
+
shell_file_2.write_text(program_2, encoding="utf-8")
|
|
131
|
+
|
|
130
132
|
# ================================================================================
|
|
131
133
|
option3 = "Inspect repos:"
|
|
132
134
|
def func(repo_local_root: str, repo_remote_root: str):
|
|
133
135
|
from machineconfig.scripts.python.helpers_repos.sync import inspect_repos
|
|
134
136
|
inspect_repos(repo_local_root=repo_local_root, repo_remote_root=repo_remote_root)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
# program_3_py = function_to_script(func=func, call_with_kwargs={"repo_local_root": str(repo_local_root), "repo_remote_root": str(repo_remote_root)})
|
|
138
|
+
# shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=None, executable=executable)
|
|
139
|
+
program_3_py = lambda_to_defstring(lambda: func(repo_local_root=str(repo_local_root), repo_remote_root=str(repo_remote_root)), in_global=True)
|
|
140
|
+
uv_command_3, _pyfile3 = get_uv_command_executing_python_script(python_script=program_3_py, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
138
141
|
# ================================================================================
|
|
139
142
|
|
|
140
143
|
option4 = "Remove problematic rclone file from repo and replace with remote:"
|
|
@@ -143,16 +146,17 @@ rm $HOME/dotfiles/creds/rclone/rclone.conf
|
|
|
143
146
|
cp $HOME/.config/machineconfig/remote/dotfiles/creds/rclone/rclone.conf $HOME/dotfiles/creds/rclone
|
|
144
147
|
cd $HOME/dotfiles
|
|
145
148
|
git commit -am "finished merging"
|
|
146
|
-
|
|
149
|
+
{uv_command_1}
|
|
147
150
|
"""
|
|
148
|
-
shell_file_4 =
|
|
151
|
+
shell_file_4 = Path(tempfile.mkstemp(suffix=".ps1" if platform.system() == "Windows" else ".sh")[1])
|
|
152
|
+
shell_file_4.write_text(program_4, encoding="utf-8")
|
|
149
153
|
# ================================================================================
|
|
150
154
|
|
|
151
155
|
console.print(Panel("🔄 RESOLVE MERGE CONFLICT\nChoose an option to resolve the conflict:", title_align="left", border_style="blue"))
|
|
152
156
|
|
|
153
|
-
print(f"• {option1:75} 👉 {
|
|
157
|
+
print(f"• {option1:75} 👉 {uv_command_1}")
|
|
154
158
|
print(f"• {option2:75} 👉 {shell_file_2}")
|
|
155
|
-
print(f"• {option3:75} 👉 {
|
|
159
|
+
print(f"• {option3:75} 👉 {uv_command_3}")
|
|
156
160
|
print(f"• {option4:75} 👉 {shell_file_4}")
|
|
157
161
|
print("\n\n")
|
|
158
162
|
|
|
@@ -162,21 +166,21 @@ git commit -am "finished merging"
|
|
|
162
166
|
import questionary
|
|
163
167
|
choice = questionary.select("Choose one option:", choices=[option1, option2, option3, option4]).ask()
|
|
164
168
|
if choice == option1:
|
|
165
|
-
program_content =
|
|
169
|
+
program_content = uv_command_1
|
|
166
170
|
elif choice == option2:
|
|
167
171
|
program_content = program_2
|
|
168
172
|
elif choice == option3:
|
|
169
|
-
program_content =
|
|
173
|
+
program_content = uv_command_3
|
|
170
174
|
elif choice == option4:
|
|
171
175
|
program_content = program_4
|
|
172
176
|
else:
|
|
173
177
|
raise NotImplementedError(f"Choice {choice} not implemented.")
|
|
174
178
|
case "push-local-merge":
|
|
175
|
-
program_content =
|
|
179
|
+
program_content = uv_command_1
|
|
176
180
|
case "overwrite-local":
|
|
177
181
|
program_content = program_2
|
|
178
182
|
case "stop-on-conflict":
|
|
179
|
-
program_content =
|
|
183
|
+
program_content = uv_command_3
|
|
180
184
|
case "remove-rclone-conflict":
|
|
181
185
|
program_content = program_4
|
|
182
186
|
case _:
|
{machineconfig-6.52 → machineconfig-6.54}/src/machineconfig/scripts/python/helpers_repos/sync.py
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from machineconfig.utils.path_extended import PathExtended
|
|
2
|
-
from machineconfig.utils.code import write_shell_script_to_file
|
|
3
2
|
import platform
|
|
4
3
|
from pathlib import Path
|
|
5
4
|
from rich.console import Console
|
|
@@ -56,11 +55,12 @@ def inspect_repos(repo_local_root: str, repo_remote_root: str):
|
|
|
56
55
|
|
|
57
56
|
if platform.system() == "Windows":
|
|
58
57
|
program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
|
|
59
|
-
write_shell_script_to_file(shell_script=program)
|
|
60
|
-
return None
|
|
61
58
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
62
59
|
program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
|
|
63
|
-
write_shell_script_to_file(shell_script=program)
|
|
64
|
-
return None
|
|
65
60
|
else:
|
|
66
61
|
raise NotImplementedError(f"Platform {platform.system()} not implemented.")
|
|
62
|
+
import tempfile
|
|
63
|
+
with tempfile.NamedTemporaryFile(mode='w', suffix=".sh" if platform.system() != "Windows" else ".ps1", delete=False, encoding='utf-8') as temp_file:
|
|
64
|
+
temp_file.write(program)
|
|
65
|
+
temp_script_path = PathExtended(temp_file.name)
|
|
66
|
+
console.print(Panel(f"🚀 Launching repo inspection tool...\n\n[blue]{temp_script_path}[/blue]", border_style="blue"))
|
|
@@ -1,95 +1,18 @@
|
|
|
1
|
+
|
|
1
2
|
import atexit
|
|
2
|
-
import platform
|
|
3
|
+
# import platform
|
|
3
4
|
from typing import Optional
|
|
4
5
|
import subprocess
|
|
5
|
-
from rich.console import Console
|
|
6
|
-
from rich.panel import Panel
|
|
7
|
-
from rich.syntax import Syntax
|
|
8
|
-
|
|
9
6
|
from machineconfig.utils.accessories import randstr
|
|
10
|
-
from machineconfig.utils.
|
|
11
|
-
from
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def get_shell_script_executing_python_file(python_file: str, func: Optional[str], ve_path: Optional[str], executable: Optional[str], strict_execution: bool = True):
|
|
15
|
-
if executable is None: exe_resolved = "python"
|
|
16
|
-
else: exe_resolved = executable
|
|
17
|
-
if func is None: exec_line = f"""{exe_resolved} {python_file}"""
|
|
18
|
-
else: exec_line = f"""{exe_resolved} -m fire {python_file} {func}"""
|
|
19
|
-
if ve_path is None: ve_activate_line = ""
|
|
20
|
-
else: ve_activate_line = get_ve_activate_line(ve_path)
|
|
21
|
-
shell_script = f"""
|
|
22
|
-
echo "Executing {exec_line}"
|
|
23
|
-
{ve_activate_line}
|
|
24
|
-
{exec_line}
|
|
25
|
-
deactivate || true
|
|
26
|
-
"""
|
|
27
|
-
if strict_execution:
|
|
28
|
-
if platform.system() == "Windows":
|
|
29
|
-
shell_script = """$ErrorActionPreference = "Stop" """ + "\n" + shell_script
|
|
30
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
31
|
-
shell_script = "set -e" + "\n" + shell_script
|
|
32
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
33
|
-
shell_script = "#!/bin/bash" + "\n" + shell_script # vs #!/usr/bin/env bash
|
|
34
|
-
return shell_script
|
|
7
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
8
|
+
from pathlib import Path
|
|
35
9
|
|
|
36
10
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
python_script = f"""
|
|
40
|
-
code = r'''{python_script}'''
|
|
41
|
-
try:
|
|
42
|
-
from machineconfig.utils.utils import print_code
|
|
43
|
-
print_code(code=code, lexer="python", desc="Python Script")
|
|
44
|
-
except ImportError:
|
|
11
|
+
def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
|
|
12
|
+
import platform
|
|
45
13
|
from rich.console import Console
|
|
46
14
|
from rich.panel import Panel
|
|
47
|
-
|
|
48
|
-
console.print(Panel(f'''📜 PYTHON SCRIPT:\n\n{{code}}''', title="Python Script", expand=False))
|
|
49
|
-
""" + python_script
|
|
50
|
-
python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
|
|
51
|
-
python_file.parent.mkdir(parents=True, exist_ok=True)
|
|
52
|
-
python_file.write_text(python_script, encoding="utf-8")
|
|
53
|
-
shell_script = get_shell_script_executing_python_file(python_file=str(python_file), func=None, ve_path=ve_path, executable=executable)
|
|
54
|
-
shell_file = write_shell_script_to_file(shell_script)
|
|
55
|
-
return shell_file
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def write_shell_script_to_file(shell_script: str):
|
|
59
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
60
|
-
suffix = ".sh"
|
|
61
|
-
elif platform.system() == "Windows":
|
|
62
|
-
suffix = ".ps1"
|
|
63
|
-
else:
|
|
64
|
-
raise NotImplementedError(f"Platform {platform.system()} not implemented.")
|
|
65
|
-
shell_file = PathExtended.tmp().joinpath("tmp_scripts", "shell", randstr() + suffix)
|
|
66
|
-
shell_file.parent.mkdir(parents=True, exist_ok=True)
|
|
67
|
-
shell_file.write_text(shell_script, encoding="utf-8")
|
|
68
|
-
return shell_file
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def write_shell_script_to_default_program_path(program: str, desc: str, preserve_cwd: bool, display: bool, execute: bool):
|
|
72
|
-
if preserve_cwd:
|
|
73
|
-
if platform.system() == "Windows":
|
|
74
|
-
program = "$orig_path = $pwd\n" + program + "\ncd $orig_path"
|
|
75
|
-
else:
|
|
76
|
-
program = 'orig_path=$(cd -- "." && pwd)\n' + program + '\ncd "$orig_path" || exit'
|
|
77
|
-
if display:
|
|
78
|
-
print_code(code=program, lexer="shell", desc=desc, subtitle="PROGRAM")
|
|
79
|
-
if execute:
|
|
80
|
-
result = subprocess.run(program, shell=True, capture_output=True, text=True)
|
|
81
|
-
success = result.returncode == 0 and result.stderr == ""
|
|
82
|
-
if not success:
|
|
83
|
-
print("❌ 🛠️ EXECUTION | Shell script running failed")
|
|
84
|
-
if result.stdout:
|
|
85
|
-
print(f"STDOUT: {result.stdout}")
|
|
86
|
-
if result.stderr:
|
|
87
|
-
print(f"STDERR: {result.stderr}")
|
|
88
|
-
print(f"Return code: {result.returncode}")
|
|
89
|
-
return None
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
|
|
15
|
+
from rich.syntax import Syntax
|
|
93
16
|
if lexer == "shell":
|
|
94
17
|
if platform.system() == "Windows":
|
|
95
18
|
lexer = "powershell"
|
|
@@ -101,8 +24,32 @@ def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
|
|
|
101
24
|
console.print(Panel(Syntax(code=code, lexer=lexer), title=f"📄 {desc}", subtitle=subtitle), style="bold red")
|
|
102
25
|
|
|
103
26
|
|
|
27
|
+
def get_uv_command_executing_python_script(python_script: str, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[str, Path]:
|
|
28
|
+
python_file = PathExtended.tmp().joinpath("tmp_scripts", "python", randstr() + ".py")
|
|
29
|
+
python_file.parent.mkdir(parents=True, exist_ok=True)
|
|
30
|
+
if uv_with is not None and len(uv_with) > 0:
|
|
31
|
+
uv_with.append("rich")
|
|
32
|
+
uv_with_arg = "--with " + '"' + ",".join(uv_with) + '"'
|
|
33
|
+
else:
|
|
34
|
+
uv_with_arg = "--with rich"
|
|
35
|
+
if uv_project_dir is not None:
|
|
36
|
+
uv_project_dir_arg = "--project" + f' "{uv_project_dir}"'
|
|
37
|
+
else:
|
|
38
|
+
uv_project_dir_arg = ""
|
|
39
|
+
from machineconfig.utils.meta import lambda_to_defstring
|
|
40
|
+
print_code_string = lambda_to_defstring(lambda: print_code(code=python_script, lexer="python", desc="Temporary Python Script", subtitle="Executing via shell script"), in_global=True)
|
|
41
|
+
python_file.write_text(print_code_string + "\n" + python_script, encoding="utf-8")
|
|
42
|
+
shell_script = f"""uv run {uv_with_arg} {uv_project_dir_arg} {str(python_file)} """
|
|
43
|
+
return shell_script, python_file
|
|
44
|
+
|
|
45
|
+
|
|
104
46
|
def run_shell_script(script: str, display_script: bool = True, clean_env: bool = False):
|
|
105
47
|
import tempfile
|
|
48
|
+
import platform
|
|
49
|
+
from rich.console import Console
|
|
50
|
+
from rich.panel import Panel
|
|
51
|
+
from rich.syntax import Syntax
|
|
52
|
+
|
|
106
53
|
if platform.system() == "Windows":
|
|
107
54
|
suffix = ".ps1"
|
|
108
55
|
lexer = "powershell"
|
|
@@ -112,6 +59,7 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
112
59
|
with tempfile.NamedTemporaryFile(mode='w', suffix=suffix, delete=False, encoding='utf-8') as temp_file:
|
|
113
60
|
temp_file.write(script)
|
|
114
61
|
temp_script_path = PathExtended(temp_file.name)
|
|
62
|
+
|
|
115
63
|
console = Console()
|
|
116
64
|
if display_script:
|
|
117
65
|
from rich.syntax import Syntax
|
|
@@ -138,8 +86,12 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
138
86
|
|
|
139
87
|
|
|
140
88
|
def run_shell_script_after_exit(script: str, display_script: bool = True) -> None:
|
|
89
|
+
import platform
|
|
90
|
+
from rich.console import Console
|
|
91
|
+
from rich.panel import Panel
|
|
92
|
+
from rich.syntax import Syntax
|
|
93
|
+
|
|
141
94
|
console = Console()
|
|
142
|
-
|
|
143
95
|
def execute_script_at_exit() -> None:
|
|
144
96
|
if platform.system() == "Windows":
|
|
145
97
|
suffix = ".ps1"
|
|
@@ -5,7 +5,7 @@ from machineconfig.utils.installer_utils.installer_class import Installer
|
|
|
5
5
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData, InstallerDataFiles, get_normalized_arch, get_os_name, OPERATING_SYSTEMS, CPU_ARCHITECTURES
|
|
6
6
|
from machineconfig.jobs.installer.package_groups import PACKAGE_GROUPS, PACKAGE_GROUP2NAMES
|
|
7
7
|
from machineconfig.utils.path_extended import PathExtended
|
|
8
|
-
from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH
|
|
8
|
+
from machineconfig.utils.source_of_truth import INSTALL_VERSION_ROOT, LINUX_INSTALL_PATH
|
|
9
9
|
from machineconfig.utils.io import read_json
|
|
10
10
|
|
|
11
11
|
from rich.console import Console
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"""Metaprogramming utilities for analyzing and serializing Python functions."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def lambda_to_defstring(lmb: Callable[[], Any], in_global: bool = False) -> str:
|
|
8
|
+
"""
|
|
9
|
+
caveats: always use keyword arguments in the lambda call for best results.
|
|
10
|
+
return statement not allowed in the wrapped function (otherwise it can be put in the global space)
|
|
11
|
+
|
|
12
|
+
Given a no-arg lambda like `lambda: func(a=var1, b=var2)`,
|
|
13
|
+
return a string containing the full function definition of `func`
|
|
14
|
+
but with the defaults for the parameters provided in the call replaced
|
|
15
|
+
by the *actual* values (repr) taken from the lambda's globals.
|
|
16
|
+
|
|
17
|
+
All imports are local to this function.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
lmb: A lambda function with no arguments
|
|
21
|
+
in_global: If True, return kwargs as global variable assignments followed by dedented body.
|
|
22
|
+
If False (default), return the full function definition with updated defaults.
|
|
23
|
+
"""
|
|
24
|
+
# local imports
|
|
25
|
+
import inspect as _inspect
|
|
26
|
+
import ast as _ast
|
|
27
|
+
import textwrap as _textwrap
|
|
28
|
+
import types as _types
|
|
29
|
+
|
|
30
|
+
# sanity checks
|
|
31
|
+
if not (callable(lmb) and isinstance(lmb, _types.LambdaType)):
|
|
32
|
+
raise TypeError("Expected a lambda function object")
|
|
33
|
+
|
|
34
|
+
src = _inspect.getsource(lmb)
|
|
35
|
+
src = _textwrap.dedent(src)
|
|
36
|
+
tree = _ast.parse(src)
|
|
37
|
+
|
|
38
|
+
# find first Lambda node
|
|
39
|
+
lambda_node = None
|
|
40
|
+
for n in _ast.walk(tree):
|
|
41
|
+
if isinstance(n, _ast.Lambda):
|
|
42
|
+
lambda_node = n
|
|
43
|
+
break
|
|
44
|
+
if lambda_node is None:
|
|
45
|
+
raise ValueError("Could not find a lambda expression in source")
|
|
46
|
+
|
|
47
|
+
body = lambda_node.body
|
|
48
|
+
if not isinstance(body, _ast.Call):
|
|
49
|
+
raise ValueError("Lambda body is not a call expression")
|
|
50
|
+
|
|
51
|
+
globals_dict = getattr(lmb, "__globals__", {})
|
|
52
|
+
|
|
53
|
+
# Also capture closure variables from the lambda
|
|
54
|
+
closure_dict: dict[str, Any] = {}
|
|
55
|
+
if lmb.__closure__:
|
|
56
|
+
code_obj = lmb.__code__
|
|
57
|
+
freevars = code_obj.co_freevars
|
|
58
|
+
for i, var_name in enumerate(freevars):
|
|
59
|
+
closure_dict[var_name] = lmb.__closure__[i].cell_contents
|
|
60
|
+
|
|
61
|
+
# Merge globals and closures (closures take precedence for shadowing)
|
|
62
|
+
eval_namespace = {**globals_dict, **closure_dict}
|
|
63
|
+
|
|
64
|
+
# resolve the function object being called
|
|
65
|
+
try:
|
|
66
|
+
func_ref_src = _ast.unparse(body.func)
|
|
67
|
+
except AttributeError:
|
|
68
|
+
func_ref_src = _ast.get_source_segment(src, body.func) or ""
|
|
69
|
+
try:
|
|
70
|
+
func_obj = eval(func_ref_src, eval_namespace)
|
|
71
|
+
except Exception as e:
|
|
72
|
+
raise RuntimeError(f"Could not resolve function reference '{func_ref_src}': {e}")
|
|
73
|
+
|
|
74
|
+
if not callable(func_obj):
|
|
75
|
+
raise TypeError("Resolved object is not callable")
|
|
76
|
+
|
|
77
|
+
func_name = getattr(func_obj, "__name__", "<unknown>")
|
|
78
|
+
|
|
79
|
+
# Evaluate each keyword argument value in the lambda's globals to get real Python objects
|
|
80
|
+
call_kwargs = {}
|
|
81
|
+
for kw in body.keywords:
|
|
82
|
+
if kw.arg is None:
|
|
83
|
+
# **kwargs in call — evaluate to dict and merge
|
|
84
|
+
try:
|
|
85
|
+
val = eval(compile(_ast.Expression(kw.value), "<lambda_eval>", "eval"), eval_namespace)
|
|
86
|
+
if isinstance(val, dict):
|
|
87
|
+
call_kwargs.update(val)
|
|
88
|
+
else:
|
|
89
|
+
raise ValueError("Keyword expansion did not evaluate to a dict")
|
|
90
|
+
except Exception as e:
|
|
91
|
+
raise RuntimeError(f"Failed to evaluate **kwargs expression: {e}")
|
|
92
|
+
else:
|
|
93
|
+
try:
|
|
94
|
+
val = eval(compile(_ast.Expression(kw.value), "<lambda_eval>", "eval"), eval_namespace)
|
|
95
|
+
call_kwargs[kw.arg] = val
|
|
96
|
+
except Exception as e:
|
|
97
|
+
raise RuntimeError(f"Failed to evaluate value for kw '{kw.arg}': {e}")
|
|
98
|
+
|
|
99
|
+
# Try to get original source and dedent it for body extraction
|
|
100
|
+
try:
|
|
101
|
+
orig_src = _inspect.getsource(func_obj)
|
|
102
|
+
ded = _textwrap.dedent(orig_src)
|
|
103
|
+
lines = ded.splitlines()
|
|
104
|
+
# find the line that starts with def <name>(
|
|
105
|
+
def_index = None
|
|
106
|
+
for i, ln in enumerate(lines):
|
|
107
|
+
if ln.lstrip().startswith(f"def {func_name}("):
|
|
108
|
+
def_index = i
|
|
109
|
+
break
|
|
110
|
+
if def_index is None:
|
|
111
|
+
body_lines = ded.splitlines()
|
|
112
|
+
else:
|
|
113
|
+
body_lines = lines[def_index + 1 :]
|
|
114
|
+
# ensure we have a body, otherwise use pass
|
|
115
|
+
if not any(line.strip() for line in body_lines):
|
|
116
|
+
body_text = " pass\n"
|
|
117
|
+
else:
|
|
118
|
+
# keep the dedented body lines exactly as-is (they should be indented)
|
|
119
|
+
body_text = "\n".join(body_lines) + ("\n" if not body_lines[-1].endswith("\n") else "")
|
|
120
|
+
except (OSError, IOError, TypeError):
|
|
121
|
+
body_text = " pass\n"
|
|
122
|
+
|
|
123
|
+
# Build a replaced signature using inspect.signature
|
|
124
|
+
sig = _inspect.signature(func_obj)
|
|
125
|
+
new_params = []
|
|
126
|
+
for name, param in sig.parameters.items():
|
|
127
|
+
# If the call provided a value for this parameter, replace default
|
|
128
|
+
if name in call_kwargs:
|
|
129
|
+
new_default = call_kwargs[name]
|
|
130
|
+
else:
|
|
131
|
+
new_default = param.default
|
|
132
|
+
|
|
133
|
+
# Recreate the Parameter (keeping annotation and kind)
|
|
134
|
+
if new_default is _inspect.Parameter.empty:
|
|
135
|
+
new_param = _inspect.Parameter(name, param.kind, annotation=param.annotation)
|
|
136
|
+
else:
|
|
137
|
+
new_param = _inspect.Parameter(
|
|
138
|
+
name, param.kind, default=new_default, annotation=param.annotation
|
|
139
|
+
)
|
|
140
|
+
new_params.append(new_param)
|
|
141
|
+
|
|
142
|
+
new_sig = _inspect.Signature(parameters=new_params, return_annotation=sig.return_annotation)
|
|
143
|
+
|
|
144
|
+
# If in_global mode, return kwargs as global assignments + dedented body
|
|
145
|
+
if in_global:
|
|
146
|
+
global_assignments: list[str] = []
|
|
147
|
+
for name, param in sig.parameters.items():
|
|
148
|
+
# Get the value from call_kwargs if provided, else use original default
|
|
149
|
+
if name in call_kwargs:
|
|
150
|
+
value = call_kwargs[name]
|
|
151
|
+
elif param.default is not _inspect.Parameter.empty:
|
|
152
|
+
value = param.default
|
|
153
|
+
else:
|
|
154
|
+
# No value provided and no default - skip this parameter
|
|
155
|
+
continue
|
|
156
|
+
|
|
157
|
+
# Build type annotation string if available
|
|
158
|
+
if param.annotation is not _inspect.Parameter.empty:
|
|
159
|
+
# Try to get a nice string representation of the annotation
|
|
160
|
+
try:
|
|
161
|
+
if hasattr(param.annotation, "__name__"):
|
|
162
|
+
type_str = param.annotation.__name__
|
|
163
|
+
else:
|
|
164
|
+
type_str = str(param.annotation)
|
|
165
|
+
except Exception:
|
|
166
|
+
type_str = str(param.annotation)
|
|
167
|
+
global_assignments.append(f"{name}: {type_str} = {repr(value)}")
|
|
168
|
+
else:
|
|
169
|
+
global_assignments.append(f"{name} = {repr(value)}")
|
|
170
|
+
|
|
171
|
+
# Dedent the body text to remove function indentation
|
|
172
|
+
dedented_body = _textwrap.dedent(body_text).rstrip()
|
|
173
|
+
|
|
174
|
+
# Combine global assignments and body
|
|
175
|
+
if global_assignments:
|
|
176
|
+
result_parts = ["\n".join(global_assignments), "", dedented_body]
|
|
177
|
+
return "\n".join(result_parts)
|
|
178
|
+
else:
|
|
179
|
+
return dedented_body
|
|
180
|
+
|
|
181
|
+
# Compose final function definition text
|
|
182
|
+
header = f"def {func_name}{new_sig}:\n"
|
|
183
|
+
final_src = header + body_text
|
|
184
|
+
return final_src
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
if __name__ == "__main__":
|
|
188
|
+
pass
|