machineconfig 6.82__py3-none-any.whl → 8.51__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
- machineconfig/cluster/sessions_managers/wt_local.py +17 -222
- machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +1500 -310
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +62 -91
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/python_scripts/hx.py +214 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +428 -0
- machineconfig/logger.py +1 -2
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +79 -21
- machineconfig/profile/create_links_export.py +87 -36
- machineconfig/profile/create_shell_profile.py +92 -127
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +85 -165
- machineconfig/scripts/python/ai/initai.py +4 -2
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +10 -162
- machineconfig/scripts/python/devops.py +73 -36
- machineconfig/scripts/python/devops_navigator.py +16 -6
- machineconfig/scripts/python/fire_jobs.py +8 -222
- machineconfig/scripts/python/ftpx.py +7 -200
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
- machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
- machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +143 -0
- machineconfig/scripts/python/msearch.py +26 -0
- machineconfig/scripts/python/sessions.py +69 -135
- machineconfig/scripts/python/terminal.py +58 -0
- machineconfig/scripts/python/utils.py +115 -38
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/linters/.ruff.toml +2 -1
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +47 -12
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +25 -33
- machineconfig/settings/shells/nushell/env.nu +21 -8
- machineconfig/settings/shells/nushell/init.nu +138 -0
- machineconfig/settings/shells/pwsh/init.ps1 +111 -17
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
- machineconfig/settings/shells/wt/settings.json +27 -18
- machineconfig/settings/shells/zsh/init.sh +42 -23
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/wt/__init__.py +0 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +94 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +40 -9
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
- machineconfig/setup_mac/__init__.py +1 -4
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +2 -5
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +31 -4
- machineconfig/utils/code.py +163 -51
- machineconfig/utils/files/ascii_art.py +11 -15
- machineconfig/utils/files/headers.py +6 -7
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +53 -102
- machineconfig/utils/installer_utils/installer_cli.py +161 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
- machineconfig/utils/io.py +94 -9
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +38 -21
- machineconfig/utils/options.py +81 -23
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +52 -102
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +26 -53
- machineconfig/utils/scheduling.py +0 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +216 -419
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +158 -0
- machineconfig/utils/ssh_utils/wsl.py +147 -0
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +107 -35
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.51.dist-info/METADATA +140 -0
- machineconfig-8.51.dist-info/RECORD +543 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/installer/custom/hx.py +0 -140
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -256
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/mcfgs +0 -38
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
- machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/mcfg.py +0 -48
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
- machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
- machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig/utils/tst.py +0 -20
- machineconfig-6.82.dist-info/METADATA +0 -82
- machineconfig-6.82.dist-info/RECORD +0 -441
- machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import typer
|
|
2
|
+
from typing import Optional, Annotated
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def install_ssh_server() -> None:
|
|
6
|
+
"""📡 Install SSH server"""
|
|
7
|
+
import platform
|
|
8
|
+
if platform.system() == "Windows":
|
|
9
|
+
script = _get_windows_ssh_server_install_script()
|
|
10
|
+
elif platform.system() == "Linux" or platform.system() == "Darwin":
|
|
11
|
+
script = """
|
|
12
|
+
sudo nala install openssh-server -y || true # try to install first
|
|
13
|
+
# sudo nala purge openssh-server -y
|
|
14
|
+
# sudo nala install openssh-server -y
|
|
15
|
+
echo "✅ FINISHED installing openssh-server."
|
|
16
|
+
"""
|
|
17
|
+
else:
|
|
18
|
+
print(f"❌ Error: Platform {platform.system()} is not supported.")
|
|
19
|
+
raise typer.Exit(code=1)
|
|
20
|
+
from machineconfig.utils.code import run_shell_script
|
|
21
|
+
run_shell_script(script=script, display_script=True, clean_env=False)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def change_ssh_port(port: Annotated[int, typer.Option(..., "--port", "-p", help="SSH port to use")] = 2222) -> None:
|
|
25
|
+
"""🔌 Change SSH port (Linux/WSL only, default: 2222)"""
|
|
26
|
+
import platform
|
|
27
|
+
if platform.system() != "Linux":
|
|
28
|
+
print("❌ Error: change_ssh_port requires Linux environment")
|
|
29
|
+
raise typer.Exit(code=1)
|
|
30
|
+
from machineconfig.utils.ssh_utils.wsl import change_ssh_port as _change_ssh_port
|
|
31
|
+
_change_ssh_port(port=port)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _get_windows_ssh_server_install_script(use_winget: bool = True) -> str:
|
|
35
|
+
install_winget = r'''
|
|
36
|
+
Write-Host "Installing OpenSSH via winget..." -ForegroundColor Cyan
|
|
37
|
+
winget install --no-upgrade --Id Microsoft.OpenSSH.Preview --source winget --accept-package-agreements --accept-source-agreements
|
|
38
|
+
$wingetSshPath = "C:\Program Files\OpenSSH"
|
|
39
|
+
$currentMachinePath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
|
|
40
|
+
if ($currentMachinePath -notlike "*$wingetSshPath*") {
|
|
41
|
+
Write-Host "Adding OpenSSH to system PATH..." -ForegroundColor Yellow
|
|
42
|
+
[System.Environment]::SetEnvironmentVariable("Path", "$currentMachinePath;$wingetSshPath", "Machine")
|
|
43
|
+
}
|
|
44
|
+
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
|
|
45
|
+
'''
|
|
46
|
+
install_capability = r'''
|
|
47
|
+
Write-Host "Installing OpenSSH via Windows Capability..." -ForegroundColor Cyan
|
|
48
|
+
Add-WindowsCapability -Online -Name OpenSSH.Server
|
|
49
|
+
Add-WindowsCapability -Online -Name OpenSSH.Client
|
|
50
|
+
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
|
|
51
|
+
'''
|
|
52
|
+
configure_sshd_service = r'''
|
|
53
|
+
$serviceExists = Get-Service -Name sshd -ErrorAction SilentlyContinue
|
|
54
|
+
if (-not $serviceExists) {
|
|
55
|
+
Write-Host "sshd service not found, registering manually..." -ForegroundColor Yellow
|
|
56
|
+
sc.exe create sshd binPath= "$sshdExePath" start= auto
|
|
57
|
+
if ($LASTEXITCODE -ne 0) { throw "Failed to create sshd service" }
|
|
58
|
+
}
|
|
59
|
+
Set-Service -Name sshd -StartupType Automatic
|
|
60
|
+
Start-Service sshd
|
|
61
|
+
Write-Host "sshd service started successfully." -ForegroundColor Green
|
|
62
|
+
'''
|
|
63
|
+
configure_firewall = r'''
|
|
64
|
+
$existingRule = Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue
|
|
65
|
+
if (-not $existingRule) {
|
|
66
|
+
Write-Host "Creating firewall rule for SSH..." -ForegroundColor Yellow
|
|
67
|
+
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -DisplayName "OpenSSH SSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program $sshdExePath
|
|
68
|
+
} else {
|
|
69
|
+
Write-Host "Firewall rule already exists." -ForegroundColor Green
|
|
70
|
+
}
|
|
71
|
+
'''
|
|
72
|
+
configure_default_shell = r'''
|
|
73
|
+
Write-Host "Configuring default shell for SSH..." -ForegroundColor Cyan
|
|
74
|
+
$shell = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
75
|
+
if (-not (Test-Path "HKLM:\SOFTWARE\OpenSSH")) { New-Item -Path "HKLM:\SOFTWARE\OpenSSH" -Force | Out-Null }
|
|
76
|
+
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value $shell -PropertyType String -Force | Out-Null
|
|
77
|
+
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force | Out-Null
|
|
78
|
+
Write-Host "Default shell set to: $shell" -ForegroundColor Green
|
|
79
|
+
'''
|
|
80
|
+
configure_ssh_agent = r'''
|
|
81
|
+
Write-Host "Configuring ssh-agent service..." -ForegroundColor Cyan
|
|
82
|
+
$agentService = Get-Service -Name ssh-agent -ErrorAction SilentlyContinue
|
|
83
|
+
if ($agentService) {
|
|
84
|
+
Set-Service -Name ssh-agent -StartupType Automatic
|
|
85
|
+
Start-Service ssh-agent -ErrorAction SilentlyContinue
|
|
86
|
+
Write-Host "ssh-agent service configured and started." -ForegroundColor Green
|
|
87
|
+
} else {
|
|
88
|
+
Write-Host "ssh-agent service not available." -ForegroundColor Yellow
|
|
89
|
+
}
|
|
90
|
+
'''
|
|
91
|
+
ensure_ssh_directory = r'''
|
|
92
|
+
$sshDir = Join-Path $env:USERPROFILE ".ssh"
|
|
93
|
+
if (-not (Test-Path $sshDir)) {
|
|
94
|
+
New-Item -ItemType Directory -Path $sshDir -Force | Out-Null
|
|
95
|
+
Write-Host "Created .ssh directory at: $sshDir" -ForegroundColor Green
|
|
96
|
+
}
|
|
97
|
+
'''
|
|
98
|
+
if use_winget:
|
|
99
|
+
install_method = install_winget
|
|
100
|
+
sshd_exe_path = r'C:\Program Files\OpenSSH\sshd.exe'
|
|
101
|
+
else:
|
|
102
|
+
install_method = install_capability
|
|
103
|
+
sshd_exe_path = r'$env:WINDIR\System32\OpenSSH\sshd.exe'
|
|
104
|
+
return fr'''
|
|
105
|
+
$ErrorActionPreference = "Stop"
|
|
106
|
+
try {{ Set-ExecutionPolicy -Scope CurrentUser Bypass -ErrorAction SilentlyContinue }} catch {{ }}
|
|
107
|
+
Write-Host "========================================" -ForegroundColor Magenta
|
|
108
|
+
Write-Host "OpenSSH Server Installation for Windows" -ForegroundColor Magenta
|
|
109
|
+
Write-Host "========================================" -ForegroundColor Magenta
|
|
110
|
+
{install_method}
|
|
111
|
+
$sshdExePath = "{sshd_exe_path}"
|
|
112
|
+
{configure_sshd_service}
|
|
113
|
+
{configure_firewall}
|
|
114
|
+
{configure_default_shell}
|
|
115
|
+
{configure_ssh_agent}
|
|
116
|
+
{ensure_ssh_directory}
|
|
117
|
+
Write-Host "========================================" -ForegroundColor Magenta
|
|
118
|
+
Write-Host "OpenSSH Server installation complete!" -ForegroundColor Green
|
|
119
|
+
Write-Host "SSH config directory: $env:ProgramData\ssh" -ForegroundColor Cyan
|
|
120
|
+
Write-Host "========================================" -ForegroundColor Magenta
|
|
121
|
+
'''
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def add_ssh_key(
|
|
125
|
+
path: Annotated[Optional[str], typer.Option(..., help="Path to the public key file")] = None,
|
|
126
|
+
choose: Annotated[bool, typer.Option(..., "--choose", "-c", help="Choose from available public keys in ~/.ssh/*.pub")] = False,
|
|
127
|
+
value: Annotated[bool, typer.Option(..., "--value", "-v", help="Paste the public key content manually")] = False,
|
|
128
|
+
github: Annotated[Optional[str], typer.Option(..., "--github", "-g", help="Fetch public keys from a GitHub username")] = None,
|
|
129
|
+
) -> None:
|
|
130
|
+
"""🔑 Add SSH public key to this machine so its accessible by owner of corresponding private key."""
|
|
131
|
+
import machineconfig.scripts.python.helpers.helpers_network.ssh_add_ssh_key as helper
|
|
132
|
+
helper.main(pub_path=path, pub_choose=choose, pub_val=value, from_github=github)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def add_ssh_identity() -> None:
|
|
136
|
+
"""🗝️ Add SSH identity (private key) to this machine"""
|
|
137
|
+
import machineconfig.scripts.python.helpers.helpers_network.ssh_add_identity as helper
|
|
138
|
+
helper.main()
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def debug_ssh() -> None:
|
|
142
|
+
"""🐛 Debug SSH connection"""
|
|
143
|
+
from platform import system
|
|
144
|
+
if system() == "Linux" or system() == "Darwin":
|
|
145
|
+
import machineconfig.scripts.python.helpers.helpers_network.ssh_debug_linux as helper
|
|
146
|
+
helper.ssh_debug_linux()
|
|
147
|
+
elif system() == "Windows":
|
|
148
|
+
import machineconfig.scripts.python.helpers.helpers_network.ssh_debug_windows as helper
|
|
149
|
+
helper.ssh_debug_windows()
|
|
150
|
+
else:
|
|
151
|
+
print(f"❌ Error: Platform {system()} is not supported.")
|
|
152
|
+
raise typer.Exit(code=1)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def get_app() -> typer.Typer:
|
|
156
|
+
ssh_app = typer.Typer(help="🔐 SSH subcommands", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
157
|
+
ssh_app.command(name="install-server", help="📡 [i] Install SSH server")(install_ssh_server)
|
|
158
|
+
ssh_app.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
|
|
159
|
+
ssh_app.command(name="change-port", help="🔌 [p] Change SSH port (Linux/WSL only)")(change_ssh_port)
|
|
160
|
+
ssh_app.command(name="p", help="Change SSH port", hidden=True)(change_ssh_port)
|
|
161
|
+
ssh_app.command(name="add-key", help="🔑 [k] Add SSH public key to this machine", no_args_is_help=True)(add_ssh_key)
|
|
162
|
+
ssh_app.command(name="k", help="Add SSH public key to this machine", hidden=True, no_args_is_help=True)(add_ssh_key)
|
|
163
|
+
ssh_app.command(name="add-identity", help="🗝️ [A] Add SSH identity (private key) to this machine")(add_ssh_identity)
|
|
164
|
+
ssh_app.command(name="A", help="Add SSH identity (private key) to this machine", hidden=True)(add_ssh_identity)
|
|
165
|
+
ssh_app.command(name="debug", help="🐛 [d] Debug SSH connection")(debug_ssh)
|
|
166
|
+
ssh_app.command(name="d", help="Debug SSH connection", hidden=True)(debug_ssh)
|
|
167
|
+
return ssh_app
|
|
@@ -11,28 +11,12 @@ from rich.table import Table
|
|
|
11
11
|
from rich.text import Text
|
|
12
12
|
|
|
13
13
|
from machineconfig.utils.path_extended import PathExtended
|
|
14
|
-
from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH
|
|
14
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT, DEFAULTS_PATH
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
console = Console()
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def _check_system_info() -> dict[str, str]:
|
|
21
|
-
"""Gather basic system information."""
|
|
22
|
-
import socket
|
|
23
|
-
import os
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
"hostname": socket.gethostname(),
|
|
27
|
-
"system": platform.system(),
|
|
28
|
-
"release": platform.release(),
|
|
29
|
-
"version": platform.version(),
|
|
30
|
-
"machine": platform.machine(),
|
|
31
|
-
"processor": platform.processor() or "Unknown",
|
|
32
|
-
"python_version": platform.python_version(),
|
|
33
|
-
"user": os.getenv("USER") or os.getenv("USERNAME") or "Unknown",
|
|
34
|
-
}
|
|
35
|
-
|
|
36
20
|
|
|
37
21
|
def _check_shell_profile_status() -> dict[str, Any]:
|
|
38
22
|
"""Check shell profile configuration status."""
|
|
@@ -153,7 +137,7 @@ def _check_config_files_status() -> dict[str, Any]:
|
|
|
153
137
|
from machineconfig.profile.create_links import read_mapper
|
|
154
138
|
|
|
155
139
|
try:
|
|
156
|
-
mapper = read_mapper()
|
|
140
|
+
mapper = read_mapper(repo="library")
|
|
157
141
|
public_configs = list(mapper.get("public", {}).keys())
|
|
158
142
|
private_configs = list(mapper.get("private", {}).keys())
|
|
159
143
|
|
|
@@ -221,10 +205,16 @@ def _check_backup_config() -> dict[str, Any]:
|
|
|
221
205
|
cloud_config = "Not configured"
|
|
222
206
|
|
|
223
207
|
try:
|
|
224
|
-
|
|
208
|
+
from machineconfig.scripts.python.helpers.helpers_devops.backup_config import LIBRARY_BACKUP_PATH
|
|
209
|
+
backup_file = LIBRARY_BACKUP_PATH
|
|
225
210
|
if backup_file.exists():
|
|
226
211
|
backup_data = tomllib.loads(backup_file.read_text(encoding="utf-8"))
|
|
227
|
-
backup_items =
|
|
212
|
+
backup_items: list[str] = []
|
|
213
|
+
for group_name, entries in backup_data.items():
|
|
214
|
+
if isinstance(entries, dict):
|
|
215
|
+
backup_items.extend([f"{group_name}.{entry_name}" for entry_name in entries.keys()])
|
|
216
|
+
else:
|
|
217
|
+
backup_items.append(str(group_name))
|
|
228
218
|
backup_items_count = len(backup_items)
|
|
229
219
|
else:
|
|
230
220
|
backup_items = []
|
|
@@ -480,10 +470,14 @@ def main() -> None:
|
|
|
480
470
|
console.print("\n")
|
|
481
471
|
console.print(Panel(Text("📊 Machine Status Report", justify="center", style="bold white"), style="bold blue", padding=(1, 2)))
|
|
482
472
|
console.print("\n")
|
|
483
|
-
|
|
484
|
-
system_info = _check_system_info()
|
|
473
|
+
|
|
474
|
+
# system_info = _check_system_info()
|
|
475
|
+
# from machineconfig.scripts.python.helpers.helpers_devops.devops_system_info import _check_system_info
|
|
476
|
+
from machineconfig.scripts.python.helpers.helpers_utils.python import get_machine_specs
|
|
477
|
+
system_info = get_machine_specs()
|
|
478
|
+
from typing import cast
|
|
479
|
+
system_info = cast(dict[str, str], system_info)
|
|
485
480
|
_display_system_info(system_info)
|
|
486
|
-
|
|
487
481
|
shell_status = _check_shell_profile_status()
|
|
488
482
|
_display_shell_status(shell_status)
|
|
489
483
|
|
machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py
RENAMED
|
@@ -9,7 +9,7 @@ from rich.panel import Panel
|
|
|
9
9
|
from rich.table import Table
|
|
10
10
|
from rich.text import Text
|
|
11
11
|
|
|
12
|
-
from machineconfig.scripts.python.helpers_repos.update import RepositoryUpdateResult, run_uv_sync, update_repository
|
|
12
|
+
from machineconfig.scripts.python.helpers.helpers_repos.update import RepositoryUpdateResult, run_uv_sync, update_repository
|
|
13
13
|
from machineconfig.utils.io import read_ini
|
|
14
14
|
from machineconfig.utils.source_of_truth import DEFAULTS_PATH
|
|
15
15
|
|
|
@@ -2,26 +2,13 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Interactive Machine Configuration Setup Script
|
|
4
4
|
|
|
5
|
-
A Python version of the interactive installation script that uses questionary
|
|
6
|
-
for better user experience with checkbox selections.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# echo # 📧 Thunderbird Setup Note:
|
|
10
|
-
# Run after installing Thunderbird and starting it once:
|
|
11
|
-
# cd ~/AppData/Roaming/ThunderBird/Profiles
|
|
12
|
-
# $res = ls
|
|
13
|
-
# $name = $res[0].Name
|
|
14
|
-
# mv $backup_folder $name
|
|
15
|
-
#
|
|
16
5
|
|
|
17
6
|
|
|
18
7
|
"""
|
|
19
8
|
|
|
20
9
|
import sys
|
|
21
10
|
from pathlib import Path
|
|
22
|
-
# from typing import cast
|
|
23
11
|
import platform
|
|
24
|
-
|
|
25
12
|
import questionary
|
|
26
13
|
from questionary import Choice
|
|
27
14
|
from rich.console import Console
|
|
@@ -29,12 +16,11 @@ from rich.panel import Panel
|
|
|
29
16
|
from rich.text import Text
|
|
30
17
|
from machineconfig.utils.code import run_shell_script
|
|
31
18
|
|
|
32
|
-
# _ = cast
|
|
33
19
|
console = Console()
|
|
34
20
|
|
|
35
21
|
|
|
36
22
|
def display_header() -> None:
|
|
37
|
-
from machineconfig.utils.
|
|
23
|
+
from machineconfig.utils.installer_utils.installer_runner import get_machineconfig_version
|
|
38
24
|
from rich.align import Align
|
|
39
25
|
|
|
40
26
|
# Fancy ASCII art header
|
|
@@ -66,82 +52,52 @@ def display_header() -> None:
|
|
|
66
52
|
console.print()
|
|
67
53
|
console.print(Align.center(Text(bug_report, style="dim white")))
|
|
68
54
|
console.print()
|
|
69
|
-
def display_completion_message() -> None:
|
|
70
|
-
completion_text = Text("INSTALLATION COMPLETE", style="bold green")
|
|
71
|
-
subtitle_text = Text("System setup finished successfully", style="italic green")
|
|
72
|
-
console.print(Panel(f"✨ {completion_text}\n{subtitle_text}\n\n🎉 Your system has been configured successfully!\n🔄 You may need to reboot to apply all changes.", border_style="green", padding=(1, 2)))
|
|
73
|
-
def display_dotfiles_instructions() -> None:
|
|
74
|
-
header_text = Text("DOTFILES MIGRATION", style="bold yellow")
|
|
75
|
-
subtitle_text = Text("Configuration transfer options", style="italic yellow")
|
|
76
|
-
instructions = """
|
|
77
|
-
🖱️ [bold blue]Method 1: USING MOUSE WITHOUT KB OR BROWSER SHARE[/bold blue]
|
|
78
|
-
On original machine, run:
|
|
79
|
-
[dim]cd ~/dotfiles/creds/msc
|
|
80
|
-
easy-sharing . --password rew --username al[/dim]
|
|
81
|
-
Then open brave on new machine to get MouseWithoutBorders password
|
|
82
|
-
|
|
83
|
-
🔐 [bold blue]Method 2: USING SSH[/bold blue]
|
|
84
|
-
FROM REMOTE, RUN:
|
|
85
|
-
[dim]fptx ~/dotfiles $USER@$(hostname):^ -z
|
|
86
|
-
# OR, using IP address if router has not yet found the hostname:
|
|
87
|
-
fptx ~/dotfiles $USER@$(hostname -I | awk '{print $1}'):^ -z[/dim]
|
|
88
|
-
|
|
89
|
-
☁️ [bold blue]Method 3: USING INTERNET SECURE SHARE[/bold blue]
|
|
90
|
-
[dim]cd ~
|
|
91
|
-
cloud_copy SHARE_URL . --config ss[/dim]
|
|
92
|
-
(requires symlinks to be created first)"""
|
|
93
|
-
console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
|
|
94
55
|
|
|
95
56
|
|
|
96
57
|
def get_installation_choices() -> list[str]:
|
|
97
58
|
"""Get user choices for installation options."""
|
|
98
59
|
choices = [
|
|
99
|
-
Choice(value="install_machineconfig", title="🐍 Install machineconfig.", checked=False),
|
|
100
|
-
Choice(value="
|
|
101
|
-
Choice(value="
|
|
102
|
-
Choice(value="
|
|
103
|
-
Choice(value="
|
|
104
|
-
Choice(value="
|
|
105
|
-
Choice(value="
|
|
106
|
-
Choice(value="retrieve_repositories", title="📚 Retrieve Repositories", checked=False),
|
|
107
|
-
Choice(value="retrieve_data", title="💾 Retrieve Data.", checked=False),
|
|
60
|
+
Choice(value="install_machineconfig", title="🐍 Install machineconfig cli.", checked=False),
|
|
61
|
+
Choice(value="sysabc", title="📥 Install System Package Manager (Needed for other apps to be installed).", checked=False),
|
|
62
|
+
Choice(value="termabc", title="⚡ Install Terminal CLI apps essentials (group `termabc`)", checked=False),
|
|
63
|
+
Choice(value="install_shell_profile", title="🐚 Configure Shell Profile And Map Other Configs.", checked=False),
|
|
64
|
+
Choice(value="install_ssh_server", title="🔒 [ADVANCED] Configure SSH Server", checked=False),
|
|
65
|
+
Choice(value="retrieve_repositories", title="📚 [ADVANCED] Retrieve Repositories", checked=False),
|
|
66
|
+
Choice(value="retrieve_data", title="💾 [ADVANCED] Retrieve Data.", checked=False),
|
|
108
67
|
]
|
|
109
|
-
# Add Windows-specific options
|
|
110
|
-
if platform.system() == "Windows":
|
|
111
|
-
choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps - Install nerd fonts and set WT config.", checked=False))
|
|
112
68
|
selected = questionary.checkbox("Select the installation options you want to execute:", choices=choices, show_description=True).ask()
|
|
113
69
|
return selected or []
|
|
114
70
|
|
|
115
71
|
|
|
116
72
|
def execute_installations(selected_options: list[str]) -> None:
|
|
117
73
|
for maybe_a_group in selected_options:
|
|
118
|
-
if maybe_a_group in ("
|
|
74
|
+
if maybe_a_group in ("termabc", "sysabc"):
|
|
119
75
|
console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
|
|
120
76
|
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
121
77
|
try:
|
|
122
|
-
from machineconfig.utils.installer_utils.
|
|
78
|
+
from machineconfig.utils.installer_utils.installer_cli import main_installer_cli as devops_devapps_install_main
|
|
123
79
|
devops_devapps_install_main(group=True, which=maybe_a_group, interactive=False)
|
|
124
80
|
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
125
81
|
except Exception as e:
|
|
126
82
|
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
127
|
-
|
|
83
|
+
if platform.system() != "Windows":
|
|
84
|
+
run_shell_script(". $HOME/.bashrc", display_script=True, clean_env=False)
|
|
128
85
|
|
|
129
86
|
if "install_machineconfig" in selected_options:
|
|
130
87
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
|
|
131
|
-
from machineconfig.scripts.python.helpers_devops.cli_self import install
|
|
132
|
-
install()
|
|
88
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_self import install
|
|
89
|
+
install(copy_assets=True, dev=False)
|
|
133
90
|
|
|
134
91
|
if "install_ssh_server" in selected_options:
|
|
135
92
|
console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
|
|
136
|
-
import platform
|
|
137
93
|
if platform.system() == "Windows":
|
|
138
94
|
powershell_script = """Write-Host "🔧 Installing and configuring SSH server..."
|
|
139
95
|
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
|
140
96
|
Start-Service sshd
|
|
141
97
|
Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
142
|
-
run_shell_script(f'powershell -Command "{powershell_script}"')
|
|
98
|
+
run_shell_script(f'powershell -Command "{powershell_script}"', display_script=True, clean_env=False)
|
|
143
99
|
else:
|
|
144
|
-
run_shell_script("sudo nala install openssh-server -y")
|
|
100
|
+
run_shell_script("sudo nala install openssh-server -y", display_script=True, clean_env=False)
|
|
145
101
|
|
|
146
102
|
if "install_shell_profile" in selected_options:
|
|
147
103
|
console.print(Panel("🐚 [bold green]SHELL PROFILE[/bold green]\n[italic]Shell configuration setup[/italic]", border_style="green"))
|
|
@@ -150,30 +106,75 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
|
150
106
|
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
151
107
|
create_default_shell_profile()
|
|
152
108
|
console.print("✅ Shell profile configured successfully", style="bold green")
|
|
109
|
+
from machineconfig.profile.create_links_export import main_from_parser
|
|
110
|
+
main_from_parser(sensitivity="public", method="copy", on_conflict="overwrite-default-path", which="all")
|
|
111
|
+
if platform.system() == "Windows":
|
|
112
|
+
from machineconfig.jobs.installer.python_scripts.nerfont_windows_helper import install_nerd_fonts
|
|
113
|
+
install_nerd_fonts()
|
|
114
|
+
from machineconfig.settings.wt.set_wt_settings import main as set_wt_settings_main
|
|
115
|
+
set_wt_settings_main()
|
|
153
116
|
except Exception as e:
|
|
154
117
|
console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
|
|
155
118
|
|
|
119
|
+
if "retrieve_repositories" in selected_options or "retrieve_data" in selected_options:
|
|
120
|
+
# we cannot proceed before dotfiles are in place
|
|
121
|
+
if Path.home().joinpath("dotfiles").exists():
|
|
122
|
+
console.print("✅ Dotfiles directory found.", style="bold green")
|
|
123
|
+
else:
|
|
124
|
+
header_text = Text("DOTFILES MIGRATION", style="bold yellow")
|
|
125
|
+
subtitle_text = Text("Configuration transfer options", style="italic yellow")
|
|
126
|
+
instructions = """
|
|
127
|
+
On remote, run:
|
|
128
|
+
devops config export-dotfiles --password pwd
|
|
129
|
+
On new machine, run:
|
|
130
|
+
devops config import-dotfiles --password pwd
|
|
131
|
+
"""
|
|
132
|
+
console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
|
|
133
|
+
i_sorted_it_out = "I have sorted out dotfiles migration already and want to proceed."
|
|
134
|
+
exit_now = "Exit now and sort out dotfiles migration first."
|
|
135
|
+
fetch_over_lan = "I already exposed dotfiles over LAN, let's fetch them now."
|
|
136
|
+
fetch_over_ssh = "I wanted to bring them using SSH SCP now."
|
|
137
|
+
options: list[str] = [
|
|
138
|
+
i_sorted_it_out,
|
|
139
|
+
exit_now,
|
|
140
|
+
fetch_over_lan,
|
|
141
|
+
fetch_over_ssh,
|
|
142
|
+
]
|
|
143
|
+
answer = questionary.select("⚠️ DOTFILES NOT FOUND. How do you want to proceed?", choices=options).ask()
|
|
144
|
+
if answer == i_sorted_it_out:
|
|
145
|
+
console.print("✅ Proceeding as per user confirmation.", style="bold green")
|
|
146
|
+
elif answer == exit_now:
|
|
147
|
+
console.print("❌ Exiting for dotfiles migration.", style="bold red")
|
|
148
|
+
sys.exit(0)
|
|
149
|
+
elif answer == fetch_over_lan:
|
|
150
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
|
|
151
|
+
import_dotfiles(use_ssh=False)
|
|
152
|
+
elif answer == fetch_over_ssh:
|
|
153
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_config_dotfile import import_dotfiles
|
|
154
|
+
import_dotfiles(use_ssh=True)
|
|
155
|
+
if not Path.home().joinpath("dotfiles").exists():
|
|
156
|
+
console.print("❌ Dotfiles directory still not found after attempted import. Exiting...", style="bold red")
|
|
157
|
+
sys.exit(1)
|
|
158
|
+
# devops config sync --sensitivity public --method symlink --on-conflict overwrite-default-path --which all
|
|
159
|
+
# devops config sync --sensitivity private --method symlink --on-conflict overwrite-default-path --which all
|
|
160
|
+
from machineconfig.profile.create_links_export import main_from_parser
|
|
161
|
+
main_from_parser(sensitivity="private", method="symlink", on_conflict="overwrite-default-path", which="all")
|
|
162
|
+
|
|
156
163
|
if "retrieve_repositories" in selected_options:
|
|
157
164
|
console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
|
|
158
|
-
from machineconfig.scripts.python.helpers_devops import cli_repos
|
|
159
|
-
cli_repos.clone(
|
|
165
|
+
from machineconfig.scripts.python.helpers.helpers_devops import cli_repos
|
|
166
|
+
cli_repos.clone(interactive=True)
|
|
160
167
|
|
|
161
168
|
if "retrieve_data" in selected_options:
|
|
162
169
|
console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
|
|
163
170
|
console.print("🔧 Retrieving backup data", style="bold cyan")
|
|
164
171
|
try:
|
|
165
|
-
from machineconfig.scripts.python.helpers_devops.
|
|
166
|
-
main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None)
|
|
172
|
+
from machineconfig.scripts.python.helpers.helpers_devops.cli_backup_retrieve import main_backup_retrieve
|
|
173
|
+
main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None, repo="all")
|
|
167
174
|
console.print("✅ Backup data retrieved successfully", style="bold green")
|
|
168
175
|
except Exception as e:
|
|
169
176
|
console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
|
|
170
177
|
|
|
171
|
-
if "install_windows_desktop" in selected_options:
|
|
172
|
-
from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
|
|
173
|
-
install_nerd_fonts()
|
|
174
|
-
from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
|
|
175
|
-
set_wt_settings_main()
|
|
176
|
-
|
|
177
178
|
|
|
178
179
|
def main() -> None:
|
|
179
180
|
display_header()
|
|
@@ -187,7 +188,13 @@ def main() -> None:
|
|
|
187
188
|
console.print("❌ Installation cancelled.", style="bold red")
|
|
188
189
|
sys.exit(0)
|
|
189
190
|
execute_installations(selected_options=selected_options)
|
|
190
|
-
|
|
191
|
+
completion_text = Text("INSTALLATION COMPLETE", style="bold green")
|
|
192
|
+
subtitle_text = Text("System setup finished successfully", style="italic green")
|
|
193
|
+
console.print(Panel(f"✨ {completion_text}\n{subtitle_text}\n\n🎉 Your system has been configured successfully!\n🔄 You may need to reboot to apply all changes.", border_style="green", padding=(1, 2)))
|
|
194
|
+
|
|
195
|
+
from machineconfig.profile.create_shell_profile import reload_shell_profile_and_exit
|
|
196
|
+
reload_shell_profile_and_exit()
|
|
197
|
+
|
|
191
198
|
|
|
192
199
|
|
|
193
200
|
if __name__ == "__main__":
|