machineconfig 5.77__tar.gz → 5.79__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.77/src/machineconfig.egg-info → machineconfig-5.79}/PKG-INFO +6 -16
- {machineconfig-5.77 → machineconfig-5.79}/README.md +5 -15
- {machineconfig-5.77 → machineconfig-5.79}/pyproject.toml +1 -1
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/installer_data.json +6 -6
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_nw.py +15 -4
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_self.py +2 -2
- {machineconfig-5.77/src/machineconfig/scripts/python/devops_helpers → machineconfig-5.79/src/machineconfig/scripts/python/nw}/devops_add_ssh_key.py +4 -13
- machineconfig-5.79/src/machineconfig/scripts/python/nw/ssh_debug_linux.py +299 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/installer_class.py +17 -3
- {machineconfig-5.77 → machineconfig-5.79/src/machineconfig.egg-info}/PKG-INFO +6 -16
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig.egg-info/SOURCES.txt +2 -2
- machineconfig-5.77/src/machineconfig/scripts/python/devops_helpers/devops_add_identity.py +0 -84
- {machineconfig-5.77 → machineconfig-5.79}/MANIFEST.in +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/setup.cfg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/cloud_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/data_transfer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/distribute.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/file_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/job_params.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/loader_runner.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/remote_machine.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/run_cloud.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/run_cluster.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/run_remote.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/script_execution.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/remote/script_notify_upon_completion.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_restart.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_helper_with_panes.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/helpers/zellij_local_manager_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/utils/enhanced_command_runner.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/utils/load_balancer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/utils/load_balancer_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_local.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_local_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_remote.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_remote_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_local.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_local_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_remote.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_remote_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/templates/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/cluster/templates/cli_trogon.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/check_installations.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom/gh.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom/hx.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/alacritty.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/brave.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/bypass_paywall.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/code.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/cursor.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/espanso.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/goes.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/lvim.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/nerdfont.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/redis.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/wezterm.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/custom_dev/winget.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/brave.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/docker.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/docker_start.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/edge.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/nerdfont.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/ngrok.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/q.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/redis.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/vscode.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/warp-cli.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/linux_scripts/wezterm.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/package_groups.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/linux/msc/cli_agents.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/linux/msc/lid.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/linux/msc/network.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/python/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/python/python_ve_symlink.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/python/vscode/api.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/python/vscode/sync_code.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/logger.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/backup.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/bash_shell_profiles.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/create_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/create_links.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/create_links_export.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/create_shell_profile.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/mapper.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/records/generic/shares.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/records/linux/apps_summary_report.csv +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/records/linux/apps_summary_report.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/records/windows/apps_summary_report.csv +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/profile/records/windows/apps_summary_report.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/fzf2g +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/fzfag +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/fzffg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/fzfg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/fzfrga +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/other/share_cloud.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/other/share_nfs +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/other/share_smb +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/other/start_docker +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/other/switch_ip +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/skrg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/warp-cli.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/linux/z_ls +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/agents.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/command_runner/command_runner.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/generate_files.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/initai.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/_shared.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/claude/claude.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/cline/cline.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/chatmodes/deepResearch.chatmode.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/privacy.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/crush/crush.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/crush/crush.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/crush/privacy.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/cursor/cursors.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/gemini/gemini.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/gemini/settings.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/generic.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/solutions/opencode/opencode.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ai/vscode_tasks.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/cloud_copy.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/cloud_helpers.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/cloud_mount.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/cloud_sync.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/helpers2.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/cloud_helpers/helpers5.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/pomodoro.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/scheduler.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/start_slidev.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/viewer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/croshell_helpers/viewer_template.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_config.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_data.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_repos.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_terminal.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/devops_backup_retrieve.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/devops_status.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/devops_update_repos.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/themes/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/themes/choose_pwsh_theme.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/themes/choose_wezterm_theme.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_navigator.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/entry.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/env_manager/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/env_manager/path_manager_backend.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/env_manager/path_manager_tui.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/fire_jobs.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/ftpx.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/command_builder.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/command_detail.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/command_tree.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/data_models.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/main_app.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helper_navigator/search_bar.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/helpers4.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/prompt.txt +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/template.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire/template.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire_command/cloud_manager.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_repos/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_repos/grource.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/interactive.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/add_ssh_key.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/devops_add_identity.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_drive +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_nfs +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_nfs.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_nw_drive +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_nw_drive.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_smb +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/mount_ssh.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/onetimeshare.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/wifi_conn.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/action.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/clone.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/count_lines.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/entrypoint.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/record.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/sync.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/repos_helpers/update.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/sessions.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/sessions_helpers/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/sessions_helpers/sessions_multiprocess.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/fzfb.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/fzfg.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/fzfrga.bat +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/broot/br.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/broot/brootcd.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/broot/conf.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/glow/glow.yml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/gromit-mpx/gromit-mpx.cfg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/helix/config.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/helix/languages.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/keras/keras.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/keyboard/espanso/config/default.yml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/keyboard/espanso/match/base.yml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/keyboard/kanata/kanata.kbd +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/delete.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/on-cd.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/on-quit.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/open.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/paste.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/pre-cd.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/autocall/rename.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/colors +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/cleaner.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/lfcd.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/previewer.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/exe/previewer_archive.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/icons +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/linux/lfrc +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/delete.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/on-cd.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/on-quit.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/open.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/paste.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/autocall/rename.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/cd_tere.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/cd_zoxide.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/cd_zoxide2.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/colors +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/icons +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/leftpane_previewer.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/lfcd.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/lfrc +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/mkdir.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/mkfile.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/previewer.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lf/windows/tst.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/linters/.flake8 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/linters/.mypy.ini +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/linters/.pylintrc +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/linters/.ruff.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lvim/linux/config.lua +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lvim/windows/config.lua +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/lvim/windows/lua/user/custom_config.lua +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/mprocs/windows/mprocs.yaml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/mprocs/windows/other +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/pistol/pistol.conf +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/presenterm/config.yaml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/procs/.procs.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/pudb/pudb.cfg +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/rofi/config.rasi +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/rofi/config_default.rasi +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/alacritty/alacritty.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/alacritty/alacritty.yml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/bash/init.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/hyper/.hyper.js +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/ipy/profiles/default/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/kitty/kitty.conf +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/nushell/config.nu +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/nushell/env.nu +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/pwsh/init.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/starship/starship.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/vtm/settings.xml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/wezterm/wezterm.lua +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/shells/wt/settings.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/streamlit/config.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/svim/linux/init.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/svim/windows/init.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/tere/terecd.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/tere/terecd.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/tmux/.tmate.conf +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/tmux/.tmux.conf +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/wsl/.wslconfig +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/yazi/keymap.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/yazi/theme.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/yazi/yazi.toml +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zed/settings.json +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/commands/monitor +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/commands/standard_panes +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/config.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/config.orig.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/layouts/hist +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/layouts/panes.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/layouts/st.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/layouts/st2.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/settings/zellij/layouts/stacked_panes.kdl +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/apps.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/apps_desktop.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/apps_gui.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/nix/cli_installation.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/ssh/openssh_all.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/uv.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/web_shortcuts/android.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_linux/web_shortcuts/interactive.sh +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/apps.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/others/docker.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/others/obs.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/others/power_options.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/ssh/add_identity.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/uv.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/web_shortcuts/interactive.ps1 +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/accessories.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/ai/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/cloud/onedrive/README.md +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/cloud/onedrive/setup_oauth.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/cloud/onedrive/transaction.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/code.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/ascii_art.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/dbms.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/headers.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/ouch/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/ouch/decompress.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/files/read.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/__init__.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/github_release_bulk.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/installer.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/installer_abc.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/io.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/links.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/meta.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/notifications.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/options.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/path_extended.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/path_helper.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/procs.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/scheduler.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/scheduling.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/schemas/fire_agents/fire_agents_input.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/schemas/installer/installer_types.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/schemas/layouts/layout_types.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/schemas/repos/repos_types.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/source_of_truth.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/ssh.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/ssh_utils/utils.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/terminal.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/upgrade_packages.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/ve.py +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig.egg-info/dependency_links.txt +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig.egg-info/entry_points.txt +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/src/machineconfig.egg-info/requires.txt +0 -0
- {machineconfig-5.77 → machineconfig-5.79}/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.79
|
|
4
4
|
Summary: Dotfiles management package
|
|
5
5
|
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -56,29 +56,19 @@ Requires-Dist: python-magic>=0.4.27; extra == "plot"
|
|
|
56
56
|
# Welcome to machineconfig
|
|
57
57
|
|
|
58
58
|
Machineconfig is a package for managing configuration files (aka dotfiles). The idea is to collect those critical, time-consuming-files-to-setup in one directory and reference them via symbolic links from their original locations. Thus, when a new machine is to be setup, all that is required is to clone the repo in that machine and create the symbolic links.
|
|
59
|
-
Dotfiles
|
|
60
|
-
* `~/.gitconfig`
|
|
61
|
-
* `~/.ssh`
|
|
62
|
-
* `~/.aws`
|
|
63
|
-
* `~/.bash_profile`
|
|
64
|
-
* `~/.bashrc`
|
|
65
|
-
* `~/.config`
|
|
66
|
-
* `$profile` in Windows Powershell
|
|
67
|
-
* etc
|
|
59
|
+
Dotfiles are divided into private and public. Examples of private ones are, `~/.gitconfig`, `~/.ssh`, etc. Whereas public config files are ones like `lfrc`. The private dotfiles are placed @ `~/dotfiles`. The files therein are encrypted before backedup.
|
|
68
60
|
|
|
69
|
-
|
|
70
|
-
Additionally, files that contain data, sensitive information that should not be pushed to a repository are contained in a directory `~/dotfiles`. The files therein are encrypted before backedup.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# Windows:
|
|
61
|
+
# Install On Windows:
|
|
74
62
|
|
|
75
63
|
```powershell
|
|
64
|
+
|
|
76
65
|
iex (iwr bit.ly/cfgwindows).Content
|
|
77
66
|
```
|
|
78
67
|
|
|
79
|
-
# Linux and MacOS
|
|
68
|
+
# Install On Linux and MacOS
|
|
80
69
|
|
|
81
70
|
```bash
|
|
71
|
+
|
|
82
72
|
. <(curl -sL bit.ly/cfglinux)
|
|
83
73
|
```
|
|
84
74
|
|
|
@@ -11,29 +11,19 @@
|
|
|
11
11
|
# Welcome to machineconfig
|
|
12
12
|
|
|
13
13
|
Machineconfig is a package for managing configuration files (aka dotfiles). The idea is to collect those critical, time-consuming-files-to-setup in one directory and reference them via symbolic links from their original locations. Thus, when a new machine is to be setup, all that is required is to clone the repo in that machine and create the symbolic links.
|
|
14
|
-
Dotfiles
|
|
15
|
-
* `~/.gitconfig`
|
|
16
|
-
* `~/.ssh`
|
|
17
|
-
* `~/.aws`
|
|
18
|
-
* `~/.bash_profile`
|
|
19
|
-
* `~/.bashrc`
|
|
20
|
-
* `~/.config`
|
|
21
|
-
* `$profile` in Windows Powershell
|
|
22
|
-
* etc
|
|
14
|
+
Dotfiles are divided into private and public. Examples of private ones are, `~/.gitconfig`, `~/.ssh`, etc. Whereas public config files are ones like `lfrc`. The private dotfiles are placed @ `~/dotfiles`. The files therein are encrypted before backedup.
|
|
23
15
|
|
|
24
|
-
|
|
25
|
-
Additionally, files that contain data, sensitive information that should not be pushed to a repository are contained in a directory `~/dotfiles`. The files therein are encrypted before backedup.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# Windows:
|
|
16
|
+
# Install On Windows:
|
|
29
17
|
|
|
30
18
|
```powershell
|
|
19
|
+
|
|
31
20
|
iex (iwr bit.ly/cfgwindows).Content
|
|
32
21
|
```
|
|
33
22
|
|
|
34
|
-
# Linux and MacOS
|
|
23
|
+
# Install On Linux and MacOS
|
|
35
24
|
|
|
36
25
|
```bash
|
|
26
|
+
|
|
37
27
|
. <(curl -sL bit.ly/cfglinux)
|
|
38
28
|
```
|
|
39
29
|
|
{machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/jobs/installer/installer_data.json
RENAMED
|
@@ -1469,14 +1469,14 @@
|
|
|
1469
1469
|
"doc": "🌐 cli to get info of ips",
|
|
1470
1470
|
"fileNamePattern": {
|
|
1471
1471
|
"amd64": {
|
|
1472
|
-
"linux": "
|
|
1473
|
-
"windows": "
|
|
1474
|
-
"macos": "
|
|
1472
|
+
"linux": "{version}_linux_amd64.tar.gz",
|
|
1473
|
+
"windows": "{version}_windows_amd64.zip",
|
|
1474
|
+
"macos": "{version}_darwin_amd64.tar.gz"
|
|
1475
1475
|
},
|
|
1476
1476
|
"arm64": {
|
|
1477
|
-
"linux": "
|
|
1478
|
-
"windows": "
|
|
1479
|
-
"macos": "
|
|
1477
|
+
"linux": "{version}_linux_arm64.tar.gz",
|
|
1478
|
+
"windows": "{version}_windows_arm64.zip",
|
|
1479
|
+
"macos": "{version}_darwin_arm64.tar.gz"
|
|
1480
1480
|
}
|
|
1481
1481
|
}
|
|
1482
1482
|
},
|
{machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/scripts/python/devops_helpers/cli_nw.py
RENAMED
|
@@ -18,17 +18,18 @@ def install_ssh_server():
|
|
|
18
18
|
from machineconfig.utils.code import run_shell_script
|
|
19
19
|
run_shell_script(script=SSH_SERVER.read_text(encoding="utf-8"))
|
|
20
20
|
|
|
21
|
+
|
|
21
22
|
def add_ssh_key(path: Optional[str] = typer.Option(None, help="Path to the public key file"),
|
|
22
23
|
choose: bool = typer.Option(False, "--choose", "-c", help="Choose from available public keys in ~/.ssh/*.pub"),
|
|
23
24
|
value: bool = typer.Option(False, "--value", "-v", help="Paste the public key content manually"),
|
|
24
25
|
github: Optional[str] = typer.Option(None, "--github", "-g", help="Fetch public keys from a GitHub username")
|
|
25
26
|
):
|
|
26
27
|
"""🔑 SSH add pub key to this machine so its accessible by owner of corresponding private key."""
|
|
27
|
-
import machineconfig.scripts.python.
|
|
28
|
+
import machineconfig.scripts.python.nw.devops_add_ssh_key as helper
|
|
28
29
|
helper.main(pub_path=path, pub_choose=choose, pub_val=value, from_github=github)
|
|
29
30
|
def add_ssh_identity():
|
|
30
31
|
"""🗝️ SSH add identity (private key) to this machine"""
|
|
31
|
-
import machineconfig.scripts.python.
|
|
32
|
+
import machineconfig.scripts.python.nw.devops_add_identity as helper
|
|
32
33
|
helper.main()
|
|
33
34
|
|
|
34
35
|
|
|
@@ -41,6 +42,16 @@ def show_address():
|
|
|
41
42
|
print(f"This computer is @ {local_ip_v4}")
|
|
42
43
|
|
|
43
44
|
|
|
45
|
+
def debug_ssh():
|
|
46
|
+
"""🐛 SSH debug"""
|
|
47
|
+
from platform import system
|
|
48
|
+
if system() == "Linux" or system() == "Darwin":
|
|
49
|
+
import machineconfig.scripts.python.nw.ssh_debug_linux as helper
|
|
50
|
+
helper.ssh_debug_linux()
|
|
51
|
+
elif system() == "Windows":
|
|
52
|
+
raise NotImplementedError("SSH debug for Windows is not implemented yet.")
|
|
53
|
+
else:
|
|
54
|
+
raise NotImplementedError(f"Platform {system()} is not supported.")
|
|
44
55
|
|
|
45
56
|
def get_app():
|
|
46
57
|
nw_apps = typer.Typer(help="🔐 [n] Network subcommands", no_args_is_help=True)
|
|
@@ -50,8 +61,8 @@ def get_app():
|
|
|
50
61
|
nw_apps.command(name="s", help="Start local/global server to share files/folders via web browser", hidden=True, no_args_is_help=True)(cli_share_server.main)
|
|
51
62
|
nw_apps.command(name="install-ssh-server", help="📡 [i] Install SSH server")(install_ssh_server)
|
|
52
63
|
nw_apps.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
|
|
53
|
-
nw_apps.command(name="add-ssh-key", help="🔑 [k] Add SSH public key to this machine")(add_ssh_key)
|
|
54
|
-
nw_apps.command(name="k", help="Add SSH public key to this machine", hidden=True)(add_ssh_key)
|
|
64
|
+
nw_apps.command(name="add-ssh-key", help="🔑 [k] Add SSH public key to this machine", no_args_is_help=True)(add_ssh_key)
|
|
65
|
+
nw_apps.command(name="k", help="Add SSH public key to this machine", hidden=True, no_args_is_help=True)(add_ssh_key)
|
|
55
66
|
nw_apps.command(name="add-ssh-identity", help="🗝️ [a] Add SSH identity (private key) to this machine")(add_ssh_identity)
|
|
56
67
|
nw_apps.command(name="a", help="Add SSH identity (private key) to this machine", hidden=True)(add_ssh_identity)
|
|
57
68
|
nw_apps.command(name="show-address", help="[A] Show this computer addresses on network")(show_address)
|
|
@@ -75,8 +75,8 @@ def readme():
|
|
|
75
75
|
|
|
76
76
|
def get_app():
|
|
77
77
|
cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True)
|
|
78
|
-
cli_app.command("update", no_args_is_help=False, help="🔄 [u] UPDATE
|
|
79
|
-
cli_app.command("u", no_args_is_help=False,
|
|
78
|
+
cli_app.command("update", no_args_is_help=False, help="🔄 [u] UPDATE machineconfig")(update)
|
|
79
|
+
cli_app.command("u", no_args_is_help=False, hidden=True)(update)
|
|
80
80
|
cli_app.command("interactive", no_args_is_help=False, help="🤖 [i] INTERACTIVE configuration of machine.")(interactive)
|
|
81
81
|
cli_app.command("i", no_args_is_help=False, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
|
|
82
82
|
cli_app.command("status", no_args_is_help=False, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
|
|
@@ -5,25 +5,13 @@ from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
|
5
5
|
from machineconfig.utils.path_extended import PathExtended
|
|
6
6
|
from rich.console import Console
|
|
7
7
|
from rich.panel import Panel
|
|
8
|
-
from rich import box
|
|
8
|
+
from rich import box
|
|
9
9
|
from typing import Optional
|
|
10
10
|
import typer
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
console = Console()
|
|
14
14
|
|
|
15
|
-
"""
|
|
16
|
-
if (!$pubkey_string) {
|
|
17
|
-
$pubkey_url = 'https://github.com/thisismygitrepo.keys' # (CHANGE APPROPRIATELY)
|
|
18
|
-
$pubkey_string = (Invoke-WebRequest $pubkey_url).Content
|
|
19
|
-
} else {
|
|
20
|
-
Write-Output "pubkey_string is already defined."
|
|
21
|
-
}
|
|
22
|
-
echo $null >> $HOME/.ssh/authorized_keys # powershell way of touching a file if it doesn't exist
|
|
23
|
-
echo $pubkey_string >> $HOME/.ssh/authorized_keys
|
|
24
|
-
echo $pubkey_string > $HOME/.ssh/pubkey.pub
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
15
|
|
|
28
16
|
def get_add_ssh_key_script(path_to_key: PathExtended):
|
|
29
17
|
console.print(Panel("🔑 SSH KEY CONFIGURATION", title="[bold blue]SSH Setup[/bold blue]"))
|
|
@@ -86,6 +74,7 @@ def main(pub_path: Optional[str] = typer.Argument(None, help="Path to the public
|
|
|
86
74
|
|
|
87
75
|
if pub_path:
|
|
88
76
|
key_path = PathExtended(pub_path).expanduser().absolute()
|
|
77
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
89
78
|
if not key_path.exists():
|
|
90
79
|
console.print(Panel(f"❌ ERROR: Provided key path does not exist\nPath: {key_path}", title="[bold red]Error[/bold red]"))
|
|
91
80
|
raise FileNotFoundError(f"Provided key path does not exist: {key_path}")
|
|
@@ -111,6 +100,7 @@ def main(pub_path: Optional[str] = typer.Argument(None, help="Path to the public
|
|
|
111
100
|
console.print(Panel("📋 Please provide a filename and paste the public key content", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
|
|
112
101
|
key_filename = input("📝 File name (default: my_pasted_key.pub): ") or "my_pasted_key.pub"
|
|
113
102
|
key_path = PathExtended.home().joinpath(f".ssh/{key_filename}")
|
|
103
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
114
104
|
key_path.write_text(input("🔑 Paste the public key here: "), encoding="utf-8")
|
|
115
105
|
console.print(Panel(f"💾 Key saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
116
106
|
program = get_add_ssh_key_script(key_path)
|
|
@@ -127,6 +117,7 @@ def main(pub_path: Optional[str] = typer.Argument(None, help="Path to the public
|
|
|
127
117
|
return
|
|
128
118
|
console.print(Panel(f"✅ Found {len(keys)} public key(s) for user: {from_github}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
129
119
|
key_path = PathExtended.home().joinpath(f".ssh/{from_github}_github_keys.pub")
|
|
120
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
130
121
|
key_path.write_text("\n".join([key["key"] for key in keys]), encoding="utf-8")
|
|
131
122
|
console.print(Panel(f"💾 Keys saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
132
123
|
program = get_add_ssh_key_script(key_path)
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from platform import system
|
|
4
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
5
|
+
from rich.console import Console
|
|
6
|
+
from rich.panel import Panel
|
|
7
|
+
from rich import box
|
|
8
|
+
import subprocess
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
console = Console()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def ssh_debug_linux() -> dict[str, dict[str, str | bool]]:
|
|
15
|
+
"""
|
|
16
|
+
Comprehensive SSH debugging function that checks for common pitfalls on Linux systems.
|
|
17
|
+
|
|
18
|
+
Returns a dictionary with diagnostic results for each check performed.
|
|
19
|
+
"""
|
|
20
|
+
if system() != "Linux":
|
|
21
|
+
console.print(Panel("❌ This function is only supported on Linux systems", title="[bold red]Error[/bold red]", border_style="red"))
|
|
22
|
+
raise NotImplementedError("ssh_debug_linux is only supported on Linux")
|
|
23
|
+
|
|
24
|
+
console.print(Panel("🔍 SSH DEBUG - COMPREHENSIVE DIAGNOSTICS", box=box.DOUBLE_EDGE, title_align="left"))
|
|
25
|
+
|
|
26
|
+
results: dict[str, dict[str, str | bool]] = {}
|
|
27
|
+
issues_found: list[str] = []
|
|
28
|
+
|
|
29
|
+
ssh_dir = PathExtended.home().joinpath(".ssh")
|
|
30
|
+
authorized_keys = ssh_dir.joinpath("authorized_keys")
|
|
31
|
+
|
|
32
|
+
console.print(Panel("🔐 Checking SSH directory and authorized_keys...", title="[bold blue]File Permissions[/bold blue]", border_style="blue"))
|
|
33
|
+
|
|
34
|
+
if not ssh_dir.exists():
|
|
35
|
+
results["ssh_directory"] = {"status": "error", "message": "~/.ssh directory does not exist", "action": "Create with: mkdir -p ~/.ssh && chmod 700 ~/.ssh"}
|
|
36
|
+
issues_found.append("SSH directory missing")
|
|
37
|
+
console.print(Panel("❌ ~/.ssh directory does not exist\n💡 Run: mkdir -p ~/.ssh && chmod 700 ~/.ssh", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
38
|
+
else:
|
|
39
|
+
ssh_dir_stat = os.stat(ssh_dir)
|
|
40
|
+
ssh_dir_perms = oct(ssh_dir_stat.st_mode)[-3:]
|
|
41
|
+
if ssh_dir_perms != "700":
|
|
42
|
+
results["ssh_directory"] = {"status": "warning", "message": f"~/.ssh has incorrect permissions: {ssh_dir_perms} (should be 700)", "action": "Fix with: chmod 700 ~/.ssh"}
|
|
43
|
+
issues_found.append(f"SSH directory permissions incorrect: {ssh_dir_perms}")
|
|
44
|
+
console.print(Panel(f"⚠️ ~/.ssh permissions: {ssh_dir_perms} (should be 700)\n💡 Fix: chmod 700 ~/.ssh", title="[bold yellow]Permission Issue[/bold yellow]", border_style="yellow"))
|
|
45
|
+
else:
|
|
46
|
+
results["ssh_directory"] = {"status": "ok", "message": "~/.ssh directory permissions correct (700)", "action": ""}
|
|
47
|
+
console.print(Panel("✅ ~/.ssh directory permissions correct (700)", title="[bold green]OK[/bold green]", border_style="green"))
|
|
48
|
+
|
|
49
|
+
if not authorized_keys.exists():
|
|
50
|
+
results["authorized_keys"] = {"status": "warning", "message": "authorized_keys file does not exist", "action": "Create authorized_keys file and add public keys"}
|
|
51
|
+
issues_found.append("authorized_keys missing")
|
|
52
|
+
console.print(Panel("⚠️ authorized_keys file does not exist\n💡 Add your public key to ~/.ssh/authorized_keys", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
53
|
+
else:
|
|
54
|
+
ak_stat = os.stat(authorized_keys)
|
|
55
|
+
ak_perms = oct(ak_stat.st_mode)[-3:]
|
|
56
|
+
if ak_perms not in ["600", "644"]:
|
|
57
|
+
results["authorized_keys"] = {"status": "warning", "message": f"authorized_keys has incorrect permissions: {ak_perms} (should be 600 or 644)", "action": "Fix with: chmod 644 ~/.ssh/authorized_keys"}
|
|
58
|
+
issues_found.append(f"authorized_keys permissions incorrect: {ak_perms}")
|
|
59
|
+
console.print(Panel(f"⚠️ authorized_keys permissions: {ak_perms} (should be 600 or 644)\n💡 Fix: chmod 644 ~/.ssh/authorized_keys", title="[bold yellow]Permission Issue[/bold yellow]", border_style="yellow"))
|
|
60
|
+
else:
|
|
61
|
+
key_count = len([line for line in authorized_keys.read_text(encoding="utf-8").split("\n") if line.strip()])
|
|
62
|
+
results["authorized_keys"] = {"status": "ok", "message": f"authorized_keys permissions correct ({ak_perms}), contains {key_count} key(s)", "action": ""}
|
|
63
|
+
console.print(Panel(f"✅ authorized_keys permissions correct ({ak_perms})\n🔑 Contains {key_count} authorized key(s)", title="[bold green]OK[/bold green]", border_style="green"))
|
|
64
|
+
|
|
65
|
+
console.print(Panel("🔧 Checking SSH service status...", title="[bold blue]Service Status[/bold blue]", border_style="blue"))
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
ssh_service_check = subprocess.run(["systemctl", "is-active", "ssh"], capture_output=True, text=True, check=False)
|
|
69
|
+
sshd_service_check = subprocess.run(["systemctl", "is-active", "sshd"], capture_output=True, text=True, check=False)
|
|
70
|
+
|
|
71
|
+
ssh_active = ssh_service_check.returncode == 0
|
|
72
|
+
sshd_active = sshd_service_check.returncode == 0
|
|
73
|
+
|
|
74
|
+
if not ssh_active and not sshd_active:
|
|
75
|
+
results["ssh_service"] = {"status": "error", "message": "SSH service is not running (checked both 'ssh' and 'sshd')", "action": "Start with: sudo systemctl start ssh (or sshd)"}
|
|
76
|
+
issues_found.append("SSH service not running")
|
|
77
|
+
console.print(Panel("❌ SSH service is not running\n💡 Start: sudo systemctl start ssh (or sshd)\n💡 Enable on boot: sudo systemctl enable ssh", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
78
|
+
elif ssh_active or sshd_active:
|
|
79
|
+
service_name = "ssh" if ssh_active else "sshd"
|
|
80
|
+
results["ssh_service"] = {"status": "ok", "message": f"SSH service is running ({service_name})", "action": ""}
|
|
81
|
+
console.print(Panel(f"✅ SSH service is running ({service_name})", title="[bold green]OK[/bold green]", border_style="green"))
|
|
82
|
+
except FileNotFoundError:
|
|
83
|
+
results["ssh_service"] = {"status": "warning", "message": "systemctl not found, cannot check service status", "action": "Check SSH service manually"}
|
|
84
|
+
console.print(Panel("⚠️ systemctl not found\n💡 Check SSH service status manually", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
85
|
+
|
|
86
|
+
console.print(Panel("🔌 Checking SSH port and listening status...", title="[bold blue]Network Status[/bold blue]", border_style="blue"))
|
|
87
|
+
|
|
88
|
+
sshd_config_paths = [PathExtended("/etc/ssh/sshd_config"), PathExtended("/etc/sshd_config")]
|
|
89
|
+
sshd_config = None
|
|
90
|
+
for config_path in sshd_config_paths:
|
|
91
|
+
if config_path.exists():
|
|
92
|
+
sshd_config = config_path
|
|
93
|
+
break
|
|
94
|
+
|
|
95
|
+
if sshd_config:
|
|
96
|
+
config_text = sshd_config.read_text(encoding="utf-8")
|
|
97
|
+
port_lines = [line for line in config_text.split("\n") if line.strip().startswith("Port") and not line.strip().startswith("#")]
|
|
98
|
+
if port_lines:
|
|
99
|
+
ssh_port = port_lines[0].split()[1]
|
|
100
|
+
else:
|
|
101
|
+
ssh_port = "22"
|
|
102
|
+
|
|
103
|
+
results["sshd_config"] = {"status": "ok", "message": f"SSH configured to listen on port {ssh_port}", "action": ""}
|
|
104
|
+
console.print(Panel(f"✅ SSH configured to listen on port {ssh_port}", title="[bold green]Config[/bold green]", border_style="green"))
|
|
105
|
+
|
|
106
|
+
password_auth_lines = [line for line in config_text.split("\n") if "PasswordAuthentication" in line and not line.strip().startswith("#")]
|
|
107
|
+
if password_auth_lines:
|
|
108
|
+
password_auth_enabled = "yes" in password_auth_lines[-1].lower()
|
|
109
|
+
if not password_auth_enabled:
|
|
110
|
+
console.print(Panel("ℹ️ Password authentication is disabled\n💡 Only SSH keys will work", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
111
|
+
|
|
112
|
+
pubkey_auth_lines = [line for line in config_text.split("\n") if "PubkeyAuthentication" in line and not line.strip().startswith("#")]
|
|
113
|
+
if pubkey_auth_lines:
|
|
114
|
+
pubkey_auth_enabled = "yes" in pubkey_auth_lines[-1].lower()
|
|
115
|
+
if not pubkey_auth_enabled:
|
|
116
|
+
results["pubkey_auth"] = {"status": "error", "message": "PubkeyAuthentication is disabled in sshd_config", "action": "Enable with: PubkeyAuthentication yes in sshd_config"}
|
|
117
|
+
issues_found.append("PubkeyAuthentication disabled")
|
|
118
|
+
console.print(Panel("❌ PubkeyAuthentication is DISABLED\n💡 Edit /etc/ssh/sshd_config and set: PubkeyAuthentication yes\n💡 Then restart: sudo systemctl restart ssh", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
119
|
+
else:
|
|
120
|
+
results["pubkey_auth"] = {"status": "ok", "message": "PubkeyAuthentication is enabled", "action": ""}
|
|
121
|
+
console.print(Panel("✅ PubkeyAuthentication is enabled", title="[bold green]OK[/bold green]", border_style="green"))
|
|
122
|
+
else:
|
|
123
|
+
results["sshd_config"] = {"status": "warning", "message": "sshd_config not found", "action": "Check SSH configuration manually"}
|
|
124
|
+
ssh_port = "22"
|
|
125
|
+
console.print(Panel("⚠️ sshd_config not found\n💡 Assuming default port 22", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
126
|
+
|
|
127
|
+
try:
|
|
128
|
+
listening_check = subprocess.run(["ss", "-tlnp"], capture_output=True, text=True, check=False)
|
|
129
|
+
if listening_check.returncode == 0:
|
|
130
|
+
listening_output = listening_check.stdout
|
|
131
|
+
if f":{ssh_port}" in listening_output:
|
|
132
|
+
results["ssh_listening"] = {"status": "ok", "message": f"SSH is listening on port {ssh_port}", "action": ""}
|
|
133
|
+
console.print(Panel(f"✅ SSH is listening on port {ssh_port}", title="[bold green]OK[/bold green]", border_style="green"))
|
|
134
|
+
else:
|
|
135
|
+
results["ssh_listening"] = {"status": "error", "message": f"SSH is NOT listening on port {ssh_port}", "action": "Check if SSH service is running and configured correctly"}
|
|
136
|
+
issues_found.append(f"SSH not listening on port {ssh_port}")
|
|
137
|
+
console.print(Panel(f"❌ SSH is NOT listening on port {ssh_port}\n💡 Check: sudo ss -tlnp | grep {ssh_port}\n💡 Restart: sudo systemctl restart ssh", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
138
|
+
else:
|
|
139
|
+
results["ssh_listening"] = {"status": "warning", "message": "Could not check listening status", "action": "Check manually with: ss -tlnp"}
|
|
140
|
+
console.print(Panel("⚠️ Could not check listening status\n💡 Check manually: ss -tlnp | grep ssh", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
141
|
+
except FileNotFoundError:
|
|
142
|
+
results["ssh_listening"] = {"status": "warning", "message": "ss command not found", "action": "Install net-tools or check manually"}
|
|
143
|
+
console.print(Panel("⚠️ 'ss' command not found\n💡 Try: netstat -tlnp | grep ssh", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
144
|
+
|
|
145
|
+
console.print(Panel("🧱 Checking firewall status...", title="[bold blue]Firewall[/bold blue]", border_style="blue"))
|
|
146
|
+
|
|
147
|
+
firewall_checked = False
|
|
148
|
+
|
|
149
|
+
try:
|
|
150
|
+
ufw_status = subprocess.run(["ufw", "status"], capture_output=True, text=True, check=False)
|
|
151
|
+
if ufw_status.returncode == 0:
|
|
152
|
+
firewall_checked = True
|
|
153
|
+
ufw_output = ufw_status.stdout
|
|
154
|
+
if "Status: active" in ufw_output:
|
|
155
|
+
if f"{ssh_port}/tcp" in ufw_output.lower() or f"{ssh_port}" in ufw_output.lower() or "ssh" in ufw_output.lower():
|
|
156
|
+
results["firewall_ufw"] = {"status": "ok", "message": f"UFW is active and SSH port {ssh_port} is allowed", "action": ""}
|
|
157
|
+
console.print(Panel(f"✅ UFW is active and SSH port {ssh_port} is allowed", title="[bold green]OK[/bold green]", border_style="green"))
|
|
158
|
+
else:
|
|
159
|
+
results["firewall_ufw"] = {"status": "error", "message": f"UFW is active but SSH port {ssh_port} is NOT allowed", "action": f"Allow with: sudo ufw allow {ssh_port}/tcp"}
|
|
160
|
+
issues_found.append(f"UFW blocking port {ssh_port}")
|
|
161
|
+
console.print(Panel(f"❌ UFW is active but SSH port {ssh_port} is NOT allowed\n💡 Fix: sudo ufw allow {ssh_port}/tcp", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
162
|
+
else:
|
|
163
|
+
results["firewall_ufw"] = {"status": "ok", "message": "UFW is inactive", "action": ""}
|
|
164
|
+
console.print(Panel("ℹ️ UFW is inactive (no firewall blocking)", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
165
|
+
except FileNotFoundError:
|
|
166
|
+
pass
|
|
167
|
+
|
|
168
|
+
if not firewall_checked:
|
|
169
|
+
try:
|
|
170
|
+
firewalld_status = subprocess.run(["firewall-cmd", "--state"], capture_output=True, text=True, check=False)
|
|
171
|
+
if firewalld_status.returncode == 0 and "running" in firewalld_status.stdout.lower():
|
|
172
|
+
firewall_checked = True
|
|
173
|
+
firewalld_check = subprocess.run(["firewall-cmd", "--list-services"], capture_output=True, text=True, check=False)
|
|
174
|
+
if firewalld_check.returncode == 0:
|
|
175
|
+
if "ssh" in firewalld_check.stdout.lower():
|
|
176
|
+
results["firewall_firewalld"] = {"status": "ok", "message": "firewalld is active and SSH service is allowed", "action": ""}
|
|
177
|
+
console.print(Panel("✅ firewalld is active and SSH service is allowed", title="[bold green]OK[/bold green]", border_style="green"))
|
|
178
|
+
else:
|
|
179
|
+
results["firewall_firewalld"] = {"status": "error", "message": "firewalld is active but SSH service is NOT allowed", "action": "Allow with: sudo firewall-cmd --permanent --add-service=ssh && sudo firewall-cmd --reload"}
|
|
180
|
+
issues_found.append("firewalld blocking SSH")
|
|
181
|
+
console.print(Panel("❌ firewalld is active but SSH is NOT allowed\n💡 Fix: sudo firewall-cmd --permanent --add-service=ssh\n💡 Then: sudo firewall-cmd --reload", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
182
|
+
except FileNotFoundError:
|
|
183
|
+
pass
|
|
184
|
+
|
|
185
|
+
if not firewall_checked:
|
|
186
|
+
try:
|
|
187
|
+
iptables_check = subprocess.run(["iptables", "-L", "-n"], capture_output=True, text=True, check=False)
|
|
188
|
+
if iptables_check.returncode == 0:
|
|
189
|
+
firewall_checked = True
|
|
190
|
+
iptables_output = iptables_check.stdout
|
|
191
|
+
if f"dpt:{ssh_port}" in iptables_output or "ACCEPT" in iptables_output.split("\n")[0]:
|
|
192
|
+
results["firewall_iptables"] = {"status": "ok", "message": f"iptables appears to allow SSH traffic on port {ssh_port}", "action": ""}
|
|
193
|
+
console.print(Panel(f"ℹ️ iptables detected - appears to allow SSH on port {ssh_port}", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
194
|
+
else:
|
|
195
|
+
results["firewall_iptables"] = {"status": "warning", "message": f"iptables may be blocking SSH traffic on port {ssh_port}", "action": "Check rules manually: sudo iptables -L -n"}
|
|
196
|
+
console.print(Panel(f"⚠️ iptables detected - may be blocking SSH\n💡 Check: sudo iptables -L -n\n💡 Allow: sudo iptables -A INPUT -p tcp --dport {ssh_port} -j ACCEPT", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
197
|
+
except FileNotFoundError:
|
|
198
|
+
pass
|
|
199
|
+
|
|
200
|
+
if not firewall_checked:
|
|
201
|
+
results["firewall"] = {"status": "ok", "message": "No firewall detected or firewall commands not available", "action": ""}
|
|
202
|
+
console.print(Panel("ℹ️ No firewall detected", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
203
|
+
|
|
204
|
+
console.print(Panel("🗂️ Checking for problematic files in /etc/...", title="[bold blue]System Files[/bold blue]", border_style="blue"))
|
|
205
|
+
|
|
206
|
+
hosts_deny = PathExtended("/etc/hosts.deny")
|
|
207
|
+
if hosts_deny.exists():
|
|
208
|
+
hosts_deny_content = hosts_deny.read_text(encoding="utf-8")
|
|
209
|
+
if "sshd" in hosts_deny_content.lower() or "all" in hosts_deny_content.lower():
|
|
210
|
+
results["hosts_deny"] = {"status": "error", "message": "/etc/hosts.deny may be blocking SSH connections", "action": "Review /etc/hosts.deny and remove SSH blocks"}
|
|
211
|
+
issues_found.append("/etc/hosts.deny blocking SSH")
|
|
212
|
+
console.print(Panel("❌ /etc/hosts.deny may be blocking SSH\n💡 Check: cat /etc/hosts.deny\n💡 Remove any lines blocking 'sshd' or 'ALL'", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
213
|
+
else:
|
|
214
|
+
results["hosts_deny"] = {"status": "ok", "message": "/etc/hosts.deny exists but doesn't appear to block SSH", "action": ""}
|
|
215
|
+
console.print(Panel("✅ /etc/hosts.deny doesn't block SSH", title="[bold green]OK[/bold green]", border_style="green"))
|
|
216
|
+
else:
|
|
217
|
+
results["hosts_deny"] = {"status": "ok", "message": "/etc/hosts.deny does not exist", "action": ""}
|
|
218
|
+
console.print(Panel("✅ /etc/hosts.deny not present", title="[bold green]OK[/bold green]", border_style="green"))
|
|
219
|
+
|
|
220
|
+
hosts_allow = PathExtended("/etc/hosts.allow")
|
|
221
|
+
if hosts_allow.exists():
|
|
222
|
+
results["hosts_allow"] = {"status": "ok", "message": "/etc/hosts.allow exists (check if needed)", "action": ""}
|
|
223
|
+
console.print(Panel("ℹ️ /etc/hosts.allow exists\n💡 Ensure it allows SSH if using TCP wrappers", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
224
|
+
|
|
225
|
+
console.print(Panel("👤 Checking home directory permissions...", title="[bold blue]User Permissions[/bold blue]", border_style="blue"))
|
|
226
|
+
|
|
227
|
+
home_dir = PathExtended.home()
|
|
228
|
+
home_stat = os.stat(home_dir)
|
|
229
|
+
home_perms = oct(home_stat.st_mode)[-3:]
|
|
230
|
+
|
|
231
|
+
if home_perms[2] in ["7", "6"]:
|
|
232
|
+
results["home_directory"] = {"status": "error", "message": f"Home directory has world-writable permissions: {home_perms} (SSH may refuse to work)", "action": f"Fix with: chmod 755 {home_dir}"}
|
|
233
|
+
issues_found.append(f"Home directory world-writable: {home_perms}")
|
|
234
|
+
console.print(Panel(f"❌ Home directory is world-writable ({home_perms})\n💡 SSH may refuse connections for security\n💡 Fix: chmod 755 {home_dir}", title="[bold red]Critical Issue[/bold red]", border_style="red"))
|
|
235
|
+
else:
|
|
236
|
+
results["home_directory"] = {"status": "ok", "message": f"Home directory permissions OK: {home_perms}", "action": ""}
|
|
237
|
+
console.print(Panel(f"✅ Home directory permissions OK: {home_perms}", title="[bold green]OK[/bold green]", border_style="green"))
|
|
238
|
+
|
|
239
|
+
console.print(Panel("🔍 Checking SELinux status...", title="[bold blue]SELinux[/bold blue]", border_style="blue"))
|
|
240
|
+
|
|
241
|
+
try:
|
|
242
|
+
selinux_check = subprocess.run(["getenforce"], capture_output=True, text=True, check=False)
|
|
243
|
+
if selinux_check.returncode == 0:
|
|
244
|
+
selinux_status = selinux_check.stdout.strip()
|
|
245
|
+
if selinux_status == "Enforcing":
|
|
246
|
+
restorecon_check = subprocess.run(["restorecon", "-Rv", str(ssh_dir)], capture_output=True, text=True, check=False)
|
|
247
|
+
if restorecon_check.returncode == 0:
|
|
248
|
+
results["selinux"] = {"status": "ok", "message": f"SELinux is {selinux_status}, SSH contexts restored", "action": ""}
|
|
249
|
+
console.print(Panel(f"✅ SELinux is {selinux_status}\n✅ SSH contexts restored", title="[bold green]OK[/bold green]", border_style="green"))
|
|
250
|
+
else:
|
|
251
|
+
results["selinux"] = {"status": "warning", "message": f"SELinux is {selinux_status}, may need context restoration", "action": f"Run: sudo restorecon -Rv {ssh_dir}"}
|
|
252
|
+
console.print(Panel(f"⚠️ SELinux is {selinux_status}\n💡 Fix contexts: sudo restorecon -Rv {ssh_dir}", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
253
|
+
else:
|
|
254
|
+
results["selinux"] = {"status": "ok", "message": f"SELinux is {selinux_status}", "action": ""}
|
|
255
|
+
console.print(Panel(f"ℹ️ SELinux is {selinux_status}", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
256
|
+
except FileNotFoundError:
|
|
257
|
+
results["selinux"] = {"status": "ok", "message": "SELinux not installed", "action": ""}
|
|
258
|
+
console.print(Panel("ℹ️ SELinux not installed", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
259
|
+
|
|
260
|
+
console.print(Panel("📋 Checking SSH logs for errors...", title="[bold blue]Logs[/bold blue]", border_style="blue"))
|
|
261
|
+
|
|
262
|
+
log_files = [PathExtended("/var/log/auth.log"), PathExtended("/var/log/secure")]
|
|
263
|
+
log_found = False
|
|
264
|
+
for log_file in log_files:
|
|
265
|
+
if log_file.exists():
|
|
266
|
+
log_found = True
|
|
267
|
+
try:
|
|
268
|
+
tail_check = subprocess.run(["tail", "-n", "50", str(log_file)], capture_output=True, text=True, check=False)
|
|
269
|
+
if tail_check.returncode == 0:
|
|
270
|
+
log_content = tail_check.stdout
|
|
271
|
+
error_keywords = ["error", "failed", "refused", "denied", "invalid"]
|
|
272
|
+
ssh_errors = [line for line in log_content.split("\n") if any(keyword in line.lower() for keyword in error_keywords) and "ssh" in line.lower()]
|
|
273
|
+
if ssh_errors:
|
|
274
|
+
results["ssh_logs"] = {"status": "warning", "message": f"Found {len(ssh_errors)} potential SSH errors in {log_file}", "action": f"Review: sudo tail -f {log_file}"}
|
|
275
|
+
console.print(Panel(f"⚠️ Found {len(ssh_errors)} potential SSH errors in {log_file}\n💡 Review: sudo tail -f {log_file}\n\nRecent errors:\n" + "\n".join(ssh_errors[-3:]), title="[bold yellow]Log Errors[/bold yellow]", border_style="yellow"))
|
|
276
|
+
else:
|
|
277
|
+
results["ssh_logs"] = {"status": "ok", "message": f"No recent SSH errors in {log_file}", "action": ""}
|
|
278
|
+
console.print(Panel(f"✅ No recent SSH errors in {log_file}", title="[bold green]OK[/bold green]", border_style="green"))
|
|
279
|
+
except Exception:
|
|
280
|
+
results["ssh_logs"] = {"status": "warning", "message": f"Could not read {log_file}", "action": f"Check manually: sudo tail {log_file}"}
|
|
281
|
+
console.print(Panel(f"⚠️ Could not read {log_file}\n💡 Check: sudo tail {log_file}", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
282
|
+
break
|
|
283
|
+
|
|
284
|
+
if not log_found:
|
|
285
|
+
results["ssh_logs"] = {"status": "warning", "message": "SSH log files not found", "action": "Check journalctl: sudo journalctl -u ssh"}
|
|
286
|
+
console.print(Panel("⚠️ SSH log files not found\n💡 Check: sudo journalctl -u ssh -n 50", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
287
|
+
|
|
288
|
+
console.print(Panel("📊 DIAGNOSTIC SUMMARY", box=box.DOUBLE_EDGE, title_align="left"))
|
|
289
|
+
|
|
290
|
+
if issues_found:
|
|
291
|
+
console.print(Panel(f"⚠️ Found {len(issues_found)} issue(s):\n\n" + "\n".join([f"• {issue}" for issue in issues_found]), title="[bold yellow]Issues Found[/bold yellow]", border_style="yellow"))
|
|
292
|
+
else:
|
|
293
|
+
console.print(Panel("✅ No critical issues detected\n\nIf you still cannot connect:\n• Check client-side configuration\n• Verify network connectivity\n• Ensure correct username and hostname\n• Check if public key is correctly added to authorized_keys", title="[bold green]All Checks Passed[/bold green]", border_style="green"))
|
|
294
|
+
|
|
295
|
+
return results
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
if __name__ == "__main__":
|
|
299
|
+
ssh_debug_linux()
|
{machineconfig-5.77 → machineconfig-5.79}/src/machineconfig/utils/installer_utils/installer_class.py
RENAMED
|
@@ -276,9 +276,23 @@ class Installer:
|
|
|
276
276
|
an_dl = asset.get("browser_download_url", "NA")
|
|
277
277
|
available_filenames.append(an_dl.split("/")[-1])
|
|
278
278
|
if filename not in available_filenames:
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
279
|
+
candidates = [
|
|
280
|
+
filename,
|
|
281
|
+
filename_pattern.format(version=actual_version),
|
|
282
|
+
filename_pattern.format(version=actual_version.replace("v", "")),
|
|
283
|
+
]
|
|
284
|
+
|
|
285
|
+
# Include hyphen/underscore variants
|
|
286
|
+
variants = []
|
|
287
|
+
for f in candidates:
|
|
288
|
+
variants += [f, f.replace("-", "_"), f.replace("_", "-")]
|
|
289
|
+
|
|
290
|
+
for f in variants:
|
|
291
|
+
if f in available_filenames:
|
|
292
|
+
filename = f
|
|
293
|
+
break
|
|
294
|
+
else:
|
|
295
|
+
print(f"❌ Filename not found in assets. Tried: {variants}\nAvailable: {available_filenames}")
|
|
282
296
|
return None, None
|
|
283
297
|
browser_download_url = f"{repo_url}/releases/download/{actual_version}/{filename}"
|
|
284
298
|
return browser_download_url, actual_version
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: machineconfig
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.79
|
|
4
4
|
Summary: Dotfiles management package
|
|
5
5
|
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -56,29 +56,19 @@ Requires-Dist: python-magic>=0.4.27; extra == "plot"
|
|
|
56
56
|
# Welcome to machineconfig
|
|
57
57
|
|
|
58
58
|
Machineconfig is a package for managing configuration files (aka dotfiles). The idea is to collect those critical, time-consuming-files-to-setup in one directory and reference them via symbolic links from their original locations. Thus, when a new machine is to be setup, all that is required is to clone the repo in that machine and create the symbolic links.
|
|
59
|
-
Dotfiles
|
|
60
|
-
* `~/.gitconfig`
|
|
61
|
-
* `~/.ssh`
|
|
62
|
-
* `~/.aws`
|
|
63
|
-
* `~/.bash_profile`
|
|
64
|
-
* `~/.bashrc`
|
|
65
|
-
* `~/.config`
|
|
66
|
-
* `$profile` in Windows Powershell
|
|
67
|
-
* etc
|
|
59
|
+
Dotfiles are divided into private and public. Examples of private ones are, `~/.gitconfig`, `~/.ssh`, etc. Whereas public config files are ones like `lfrc`. The private dotfiles are placed @ `~/dotfiles`. The files therein are encrypted before backedup.
|
|
68
60
|
|
|
69
|
-
|
|
70
|
-
Additionally, files that contain data, sensitive information that should not be pushed to a repository are contained in a directory `~/dotfiles`. The files therein are encrypted before backedup.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# Windows:
|
|
61
|
+
# Install On Windows:
|
|
74
62
|
|
|
75
63
|
```powershell
|
|
64
|
+
|
|
76
65
|
iex (iwr bit.ly/cfgwindows).Content
|
|
77
66
|
```
|
|
78
67
|
|
|
79
|
-
# Linux and MacOS
|
|
68
|
+
# Install On Linux and MacOS
|
|
80
69
|
|
|
81
70
|
```bash
|
|
71
|
+
|
|
82
72
|
. <(curl -sL bit.ly/cfglinux)
|
|
83
73
|
```
|
|
84
74
|
|
|
@@ -191,8 +191,6 @@ src/machineconfig/scripts/python/devops_helpers/cli_repos.py
|
|
|
191
191
|
src/machineconfig/scripts/python/devops_helpers/cli_self.py
|
|
192
192
|
src/machineconfig/scripts/python/devops_helpers/cli_share_server.py
|
|
193
193
|
src/machineconfig/scripts/python/devops_helpers/cli_terminal.py
|
|
194
|
-
src/machineconfig/scripts/python/devops_helpers/devops_add_identity.py
|
|
195
|
-
src/machineconfig/scripts/python/devops_helpers/devops_add_ssh_key.py
|
|
196
194
|
src/machineconfig/scripts/python/devops_helpers/devops_backup_retrieve.py
|
|
197
195
|
src/machineconfig/scripts/python/devops_helpers/devops_status.py
|
|
198
196
|
src/machineconfig/scripts/python/devops_helpers/devops_update_repos.py
|
|
@@ -236,6 +234,7 @@ src/machineconfig/scripts/python/helpers_repos/secure_repo.py
|
|
|
236
234
|
src/machineconfig/scripts/python/nw/__init__.py
|
|
237
235
|
src/machineconfig/scripts/python/nw/add_ssh_key.py
|
|
238
236
|
src/machineconfig/scripts/python/nw/devops_add_identity.py
|
|
237
|
+
src/machineconfig/scripts/python/nw/devops_add_ssh_key.py
|
|
239
238
|
src/machineconfig/scripts/python/nw/mount_drive
|
|
240
239
|
src/machineconfig/scripts/python/nw/mount_nfs
|
|
241
240
|
src/machineconfig/scripts/python/nw/mount_nfs.py
|
|
@@ -244,6 +243,7 @@ src/machineconfig/scripts/python/nw/mount_nw_drive.py
|
|
|
244
243
|
src/machineconfig/scripts/python/nw/mount_smb
|
|
245
244
|
src/machineconfig/scripts/python/nw/mount_ssh.py
|
|
246
245
|
src/machineconfig/scripts/python/nw/onetimeshare.py
|
|
246
|
+
src/machineconfig/scripts/python/nw/ssh_debug_linux.py
|
|
247
247
|
src/machineconfig/scripts/python/nw/wifi_conn.py
|
|
248
248
|
src/machineconfig/scripts/python/nw/wsl_windows_transfer.py
|
|
249
249
|
src/machineconfig/scripts/python/repos_helpers/action.py
|