machineconfig 5.15__py3-none-any.whl → 7.66__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.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +0 -1
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +114 -289
- machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- 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_reporter.py +4 -2
- 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 +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +2 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +1 -7
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/installer_data.json +1101 -115
- machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
- machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
- machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +108 -180
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +92 -103
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +111 -114
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -103
- machineconfig/scripts/python/devops_navigator.py +10 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/explore.py +49 -0
- machineconfig/scripts/python/fire_jobs.py +115 -152
- machineconfig/scripts/python/ftpx.py +29 -24
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
- machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +64 -84
- machineconfig/scripts/python/machineconfig.py +63 -0
- machineconfig/scripts/python/msearch.py +21 -0
- machineconfig/scripts/python/nw/__init__.py +0 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
- machineconfig/scripts/python/sessions.py +64 -44
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- 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 +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +60 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -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/yazi.toml +13 -0
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +10 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +133 -106
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +11 -14
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +10 -18
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +13 -3
- machineconfig/utils/path_extended.py +46 -100
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- 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 +3 -6
- machineconfig/utils/ssh.py +742 -264
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +2 -113
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +11 -4
- machineconfig-7.66.dist-info/METADATA +124 -0
- machineconfig-7.66.dist-info/RECORD +451 -0
- machineconfig-7.66.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/sessions_managers/ffile.py +0 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/python/vscode/sync_code.py +0 -73
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -303
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/agents +0 -2
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/initai +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/cloud_repo_sync.py +0 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
- machineconfig/scripts/python/repos.py +0 -132
- machineconfig/scripts/python/repos_helper_action.py +0 -378
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/t4.py +0 -17
- machineconfig/scripts/windows/agents.ps1 +0 -1
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/initai.ps1 +0 -1
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig-5.15.dist-info/METADATA +0 -188
- machineconfig-5.15.dist-info/RECORD +0 -415
- machineconfig-5.15.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import typer
|
|
5
|
+
|
|
6
|
+
from typing import Optional
|
|
7
|
+
from typing import Annotated, Literal, TypedDict
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def path():
|
|
11
|
+
"""📚 NAVIGATE PATH variable with TUI"""
|
|
12
|
+
from machineconfig.scripts.python import env_manager as navigator
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
|
|
15
|
+
from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
|
|
16
|
+
uv_with = ["textual"]
|
|
17
|
+
uv_project_dir = None
|
|
18
|
+
if not Path.home().joinpath("code/machineconfig").exists():
|
|
19
|
+
uv_with.append("machineconfig>=7.66")
|
|
20
|
+
else:
|
|
21
|
+
uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
|
|
22
|
+
run_shell_script(get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0])
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def init_project(python: Annotated[Literal["3.13", "3.14"], typer.Option("--python", "-p", help="Python version for the uv virtual environment.")]= "3.13") -> None:
|
|
26
|
+
_ = python
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
repo_root = Path.cwd()
|
|
29
|
+
if not (repo_root / "pyproject.toml").exists():
|
|
30
|
+
typer.echo("❌ Error: pyproject.toml not found.", err=True)
|
|
31
|
+
raise typer.Exit(code=1)
|
|
32
|
+
print("Adding group `plot` with common data science and plotting packages...")
|
|
33
|
+
script = """
|
|
34
|
+
uv add --group plot \
|
|
35
|
+
# Data & computation
|
|
36
|
+
numpy pandas polars duckdb-engine python-magic \
|
|
37
|
+
# Plotting / visualization
|
|
38
|
+
matplotlib plotly kaleido \
|
|
39
|
+
# Notebooks / interactive
|
|
40
|
+
ipython ipykernel jupyterlab nbformat marimo \
|
|
41
|
+
# Code analysis / type checking / linting
|
|
42
|
+
mypy pyright ruff pylint pyrefly \
|
|
43
|
+
# Packaging / build / dev
|
|
44
|
+
cleanpy \
|
|
45
|
+
# CLI / debugging / utilities
|
|
46
|
+
ipdb pudb \
|
|
47
|
+
# Type hints for packages
|
|
48
|
+
types-python-dateutil types-pyyaml types-requests types-tqdm \
|
|
49
|
+
types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3 \
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
from machineconfig.utils.code import run_shell_script
|
|
53
|
+
run_shell_script(script)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def edit_file_with_hx(path: Annotated[Optional[str], typer.Argument(..., help="The root directory of the project to edit, or a file path.")] = None) -> None:
|
|
57
|
+
from pathlib import Path
|
|
58
|
+
if path is None:
|
|
59
|
+
root_path = Path.cwd()
|
|
60
|
+
print(f"No path provided. Using current working directory: {root_path}")
|
|
61
|
+
else:
|
|
62
|
+
root_path = Path(path).expanduser().resolve()
|
|
63
|
+
print(f"Using provided path: {root_path}")
|
|
64
|
+
from machineconfig.utils.accessories import get_repo_root
|
|
65
|
+
repo_root = get_repo_root(root_path)
|
|
66
|
+
if repo_root is not None and repo_root.joinpath("pyproject.toml").exists():
|
|
67
|
+
code = f"""
|
|
68
|
+
cd {repo_root}
|
|
69
|
+
uv add --dev pylsp-mypy python-lsp-server[all] pyright ruff-lsp # for helix editor.
|
|
70
|
+
source ./.venv/bin/activate
|
|
71
|
+
"""
|
|
72
|
+
else:
|
|
73
|
+
code = ""
|
|
74
|
+
if root_path.is_file():
|
|
75
|
+
code += f"hx {root_path}"
|
|
76
|
+
else:
|
|
77
|
+
code += "hx"
|
|
78
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
79
|
+
exit_then_run_shell_script(code)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class MachineSpecs(TypedDict):
|
|
83
|
+
system: str
|
|
84
|
+
distro: str
|
|
85
|
+
home_dir: str
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def get_machine_specs() -> MachineSpecs:
|
|
89
|
+
"""Write print and return the local machine specs."""
|
|
90
|
+
import platform
|
|
91
|
+
UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
|
|
92
|
+
command = f"""{UV_RUN_CMD} --with distro python -c "import distro; print(distro.name(pretty=True))" """
|
|
93
|
+
import subprocess
|
|
94
|
+
from pathlib import Path
|
|
95
|
+
distro = subprocess.run(command, shell=True, capture_output=True, text=True).stdout.strip()
|
|
96
|
+
specs: MachineSpecs = {
|
|
97
|
+
"system": platform.system(),
|
|
98
|
+
"distro": distro,
|
|
99
|
+
"home_dir": str(Path.home()),
|
|
100
|
+
}
|
|
101
|
+
print(specs)
|
|
102
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
103
|
+
path = CONFIG_ROOT.joinpath("machine_specs.json")
|
|
104
|
+
CONFIG_ROOT.mkdir(parents=True, exist_ok=True)
|
|
105
|
+
import json
|
|
106
|
+
path.write_text(json.dumps(specs, indent=4), encoding="utf-8")
|
|
107
|
+
return specs
|
|
108
|
+
|
|
@@ -19,9 +19,7 @@ for better user experience with checkbox selections.
|
|
|
19
19
|
|
|
20
20
|
import sys
|
|
21
21
|
from pathlib import Path
|
|
22
|
-
|
|
23
|
-
from typing import cast
|
|
24
|
-
|
|
22
|
+
import platform
|
|
25
23
|
import questionary
|
|
26
24
|
from questionary import Choice
|
|
27
25
|
from rich.console import Console
|
|
@@ -29,14 +27,42 @@ from rich.panel import Panel
|
|
|
29
27
|
from rich.text import Text
|
|
30
28
|
from machineconfig.utils.code import run_shell_script
|
|
31
29
|
|
|
32
|
-
_ = cast
|
|
33
30
|
console = Console()
|
|
34
31
|
|
|
35
32
|
|
|
36
33
|
def display_header() -> None:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
from machineconfig.utils.installer_utils.installer_runner import get_machineconfig_version
|
|
35
|
+
from rich.align import Align
|
|
36
|
+
|
|
37
|
+
# Fancy ASCII art header
|
|
38
|
+
ascii_art = """
|
|
39
|
+
╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
|
|
40
|
+
║ ║
|
|
41
|
+
║ ███╗ ███╗ █████╗ ██████╗██╗ ██╗██╗███╗ ██╗███████╗ ██████╗ ██████╗ ███╗ ██╗███████╗██╗ ██████╗ ║
|
|
42
|
+
║ ████╗ ████║██╔══██╗██╔════╝██║ ██║██║████╗ ██║██╔════╝██╔════╝██╔═══██╗████╗ ██║██╔════╝██║██╔════╝ ║
|
|
43
|
+
║ ██╔████╔██║███████║██║ ███████║██║██╔██╗ ██║█████╗ ██║ ██║ ██║██╔██╗ ██║█████╗ ██║██║ ███╗ ║
|
|
44
|
+
║ ██║╚██╔╝██║██╔══██║██║ ██╔══██║██║██║╚██╗██║██╔══╝ ██║ ██║ ██║██║╚██╗██║██╔══╝ ██║██║ ██║ ║
|
|
45
|
+
║ ██║ ╚═╝ ██║██║ ██║╚██████╗██║ ██║██║██║ ╚████║███████╗╚██████╗╚██████╔╝██║ ╚████║██║ ██║╚██████╔╝ ║
|
|
46
|
+
║ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═════╝ ║
|
|
47
|
+
║ ║
|
|
48
|
+
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
version = get_machineconfig_version()
|
|
52
|
+
title = f"✨ MACHINE CONFIGURATION v{version} ✨"
|
|
53
|
+
subtitle = "🎯 Your digital life manager. Dotfiles, data, code and more."
|
|
54
|
+
bug_report = "🐛 Please report bugs to Alex Al-Saffar @ https://github.com/thisismygitrepo/machineconfig"
|
|
55
|
+
|
|
56
|
+
# Print ASCII art
|
|
57
|
+
console.print(Text(ascii_art, style="bold cyan"))
|
|
58
|
+
console.print()
|
|
59
|
+
|
|
60
|
+
# Print centered text elements
|
|
61
|
+
console.print(Align.center(Text(title, style="bold bright_magenta")))
|
|
62
|
+
console.print(Align.center(Text(subtitle, style="italic bright_blue")))
|
|
63
|
+
console.print()
|
|
64
|
+
console.print(Align.center(Text(bug_report, style="dim white")))
|
|
65
|
+
console.print()
|
|
40
66
|
def display_completion_message() -> None:
|
|
41
67
|
completion_text = Text("INSTALLATION COMPLETE", style="bold green")
|
|
42
68
|
subtitle_text = Text("System setup finished successfully", style="italic green")
|
|
@@ -67,68 +93,40 @@ def display_dotfiles_instructions() -> None:
|
|
|
67
93
|
def get_installation_choices() -> list[str]:
|
|
68
94
|
"""Get user choices for installation options."""
|
|
69
95
|
choices = [
|
|
70
|
-
Choice(value="
|
|
71
|
-
Choice(value="
|
|
72
|
-
Choice(value="
|
|
73
|
-
Choice(value="
|
|
74
|
-
Choice(value="
|
|
75
|
-
Choice(value="
|
|
76
|
-
Choice(value="
|
|
77
|
-
Choice(value="install_shell_profile", title="🐚 Configure Shell Profile - Source machineconfig shell initialization", checked=False),
|
|
78
|
-
Choice(value="create_symlinks", title="🔗 Create Symlinks - Set up configuration symlinks (finish dotfiles transfer first)", checked=False),
|
|
79
|
-
Choice(value="retrieve_repositories", title="📚 Retrieve Repositories - Clone repositories to ~/code", checked=False),
|
|
80
|
-
Choice(value="retrieve_data", title="💾 Retrieve Data - Backup restoration", checked=False),
|
|
96
|
+
Choice(value="install_machineconfig", title="🐍 Install machineconfig cli.", checked=False),
|
|
97
|
+
Choice(value="sysabc", title="📥 Install System Package Manager (Needed for other apps to be installed).", checked=False),
|
|
98
|
+
Choice(value="termabc", title="⚡ Install Terminal CLI apps essentials (group `termabc`)", checked=False),
|
|
99
|
+
Choice(value="install_shell_profile", title="🐚 Configure Shell Profile And Map Other Configs.", checked=False),
|
|
100
|
+
Choice(value="install_ssh_server", title="🔒 [ADVANCED] Configure SSH Server", checked=False),
|
|
101
|
+
Choice(value="retrieve_repositories", title="📚 [ADVANCED] Retrieve Repositories", checked=False),
|
|
102
|
+
Choice(value="retrieve_data", title="💾 [ADVANCED] Retrieve Data.", checked=False),
|
|
81
103
|
]
|
|
82
|
-
# Add Windows-specific options
|
|
83
|
-
if system() == "Windows":
|
|
84
|
-
choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps - Brave, Windows Terminal, PowerShell, VSCode (Windows only)", checked=False))
|
|
85
104
|
selected = questionary.checkbox("Select the installation options you want to execute:", choices=choices, show_description=True).ask()
|
|
86
105
|
return selected or []
|
|
87
106
|
|
|
88
107
|
|
|
89
108
|
def execute_installations(selected_options: list[str]) -> None:
|
|
90
|
-
if system() == "Windows":
|
|
91
|
-
from machineconfig import setup_windows as module
|
|
92
|
-
script_path = Path(module.__file__).parent / "ve.ps1"
|
|
93
|
-
run_shell_script(script_path.read_text(encoding="utf-8"))
|
|
94
|
-
else:
|
|
95
|
-
from machineconfig import setup_linux as module
|
|
96
|
-
script_path = Path(module.__file__).parent / "ve.sh"
|
|
97
|
-
run_shell_script(script_path.read_text(encoding="utf-8"))
|
|
98
|
-
|
|
99
109
|
for maybe_a_group in selected_options:
|
|
100
|
-
if maybe_a_group in ("
|
|
110
|
+
if maybe_a_group in ("termabc", "sysabc"):
|
|
101
111
|
console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
|
|
102
112
|
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
103
113
|
try:
|
|
104
|
-
from machineconfig.utils.installer_utils.
|
|
105
|
-
devops_devapps_install_main(group=maybe_a_group)
|
|
114
|
+
from machineconfig.utils.installer_utils.installer_cli import main as devops_devapps_install_main
|
|
115
|
+
devops_devapps_install_main(group=True, which=maybe_a_group, interactive=False)
|
|
106
116
|
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
107
117
|
except Exception as e:
|
|
108
118
|
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
console.print("❌ System upgrade is not applicable on Windows via this script.", style="bold red")
|
|
114
|
-
elif system() == "Linux":
|
|
115
|
-
console.print(Panel("🔄 [bold magenta]SYSTEM UPDATE[/bold magenta]\n[italic]Package management[/italic]", border_style="magenta"))
|
|
116
|
-
run_shell_script("sudo nala upgrade -y")
|
|
117
|
-
else:
|
|
118
|
-
console.print(f"❌ System upgrade not supported on {system()}.", style="bold red")
|
|
119
|
-
if "install_repos" in selected_options:
|
|
119
|
+
if platform.system() != "Windows":
|
|
120
|
+
run_shell_script(". $HOME/.bashrc")
|
|
121
|
+
|
|
122
|
+
if "install_machineconfig" in selected_options:
|
|
120
123
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
script_path = Path(module.__file__).parent / "repos.ps1"
|
|
124
|
-
else:
|
|
125
|
-
from machineconfig import setup_linux as module
|
|
126
|
-
script_path = Path(module.__file__).parent / "repos.sh"
|
|
127
|
-
run_shell_script(script_path.read_text(encoding="utf-8"))
|
|
124
|
+
from machineconfig.scripts.python.helpers_devops.cli_self import install
|
|
125
|
+
install()
|
|
128
126
|
|
|
129
127
|
if "install_ssh_server" in selected_options:
|
|
130
128
|
console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
|
|
131
|
-
if system() == "Windows":
|
|
129
|
+
if platform.system() == "Windows":
|
|
132
130
|
powershell_script = """Write-Host "🔧 Installing and configuring SSH server..."
|
|
133
131
|
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
|
134
132
|
Start-Service sshd
|
|
@@ -141,54 +139,36 @@ Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
|
141
139
|
console.print(Panel("🐚 [bold green]SHELL PROFILE[/bold green]\n[italic]Shell configuration setup[/italic]", border_style="green"))
|
|
142
140
|
console.print("🔧 Configuring shell profile", style="bold cyan")
|
|
143
141
|
try:
|
|
144
|
-
from machineconfig.profile.
|
|
145
|
-
|
|
146
|
-
main_profile()
|
|
142
|
+
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
143
|
+
create_default_shell_profile()
|
|
147
144
|
console.print("✅ Shell profile configured successfully", style="bold green")
|
|
145
|
+
from machineconfig.profile.create_links_export import main_public_from_parser
|
|
146
|
+
main_public_from_parser(method="copy", on_conflict="overwrite-default-path", which="all", interactive=False)
|
|
147
|
+
if platform.system() == "Windows":
|
|
148
|
+
from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
|
|
149
|
+
install_nerd_fonts()
|
|
150
|
+
from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
|
|
151
|
+
set_wt_settings_main()
|
|
148
152
|
except Exception as e:
|
|
149
153
|
console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
|
|
150
154
|
|
|
151
|
-
if "create_symlinks" in selected_options:
|
|
152
|
-
display_dotfiles_instructions()
|
|
153
|
-
dotfiles_ready = questionary.confirm("📂 Have you finished copying dotfiles?", default=True).ask()
|
|
154
|
-
if dotfiles_ready:
|
|
155
|
-
console.print(Panel("🔗 [bold cyan]SYMLINK CREATION[/bold cyan]\n[italic]Configuration setup[/italic]", border_style="cyan"))
|
|
156
|
-
console.print("🔧 Creating symlinks", style="bold cyan")
|
|
157
|
-
try:
|
|
158
|
-
from machineconfig.profile.create import main_symlinks
|
|
159
|
-
main_symlinks()
|
|
160
|
-
console.print("✅ Symlinks created successfully", style="bold green")
|
|
161
|
-
except Exception as e:
|
|
162
|
-
console.print(f"❌ Error creating symlinks: {e}", style="bold red")
|
|
163
|
-
run_shell_script("sudo chmod 600 $HOME/.ssh/*")
|
|
164
|
-
run_shell_script("sudo chmod 700 $HOME/.ssh")
|
|
165
|
-
else:
|
|
166
|
-
console.print("⏭️ Skipping symlink creation - finish dotfiles transfer first", style="yellow")
|
|
167
|
-
|
|
168
155
|
if "retrieve_repositories" in selected_options:
|
|
169
156
|
console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
|
|
170
|
-
from machineconfig.scripts.python import
|
|
171
|
-
|
|
157
|
+
from machineconfig.scripts.python.helpers_devops import cli_repos
|
|
158
|
+
cli_repos.clone(directory=str(Path.home() / "code"), cloud="odg1")
|
|
172
159
|
|
|
173
160
|
if "retrieve_data" in selected_options:
|
|
174
161
|
console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
|
|
175
162
|
console.print("🔧 Retrieving backup data", style="bold cyan")
|
|
176
163
|
try:
|
|
177
|
-
from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
|
|
178
|
-
main_backup_retrieve(direction="RETRIEVE")
|
|
164
|
+
from machineconfig.scripts.python.helpers_devops.devops_backup_retrieve import main_backup_retrieve
|
|
165
|
+
main_backup_retrieve(direction="RETRIEVE", cloud=None, which=None)
|
|
179
166
|
console.print("✅ Backup data retrieved successfully", style="bold green")
|
|
180
167
|
except Exception as e:
|
|
181
168
|
console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
|
|
182
169
|
|
|
183
|
-
if "install_windows_desktop" in selected_options:
|
|
184
|
-
from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
|
|
185
|
-
install_nerd_fonts()
|
|
186
|
-
from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
|
|
187
|
-
set_wt_settings_main()
|
|
188
|
-
|
|
189
170
|
|
|
190
171
|
def main() -> None:
|
|
191
|
-
"""Main function to run the interactive installation."""
|
|
192
172
|
display_header()
|
|
193
173
|
selected_options = get_installation_choices()
|
|
194
174
|
if not selected_options:
|
|
@@ -199,7 +179,7 @@ def main() -> None:
|
|
|
199
179
|
if not proceed:
|
|
200
180
|
console.print("❌ Installation cancelled.", style="bold red")
|
|
201
181
|
sys.exit(0)
|
|
202
|
-
execute_installations(selected_options)
|
|
182
|
+
execute_installations(selected_options=selected_options)
|
|
203
183
|
display_completion_message()
|
|
204
184
|
|
|
205
185
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
|
|
2
|
+
from machineconfig.scripts.python.devops import get_app as get_devops_app
|
|
3
|
+
from machineconfig.scripts.python.cloud import get_app as get_cloud_app
|
|
4
|
+
from machineconfig.scripts.python.agents import get_app as get_agents_app
|
|
5
|
+
from machineconfig.scripts.python.sessions import get_app as get_sessions_app
|
|
6
|
+
from machineconfig.scripts.python.utils import get_app as get_utils_app
|
|
7
|
+
|
|
8
|
+
from machineconfig.scripts.python.ftpx import ftpx as ftpx_func
|
|
9
|
+
from machineconfig.scripts.python.croshell import croshell as croshell_func
|
|
10
|
+
from machineconfig.scripts.python.fire_jobs import fire as get_fire_jobs_app
|
|
11
|
+
from machineconfig.scripts.python.define import get_app as get_define_app
|
|
12
|
+
from machineconfig.scripts.python.terminal import get_app as get_terminal_app
|
|
13
|
+
|
|
14
|
+
def get_app():
|
|
15
|
+
import typer
|
|
16
|
+
app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
17
|
+
devops_app = get_devops_app()
|
|
18
|
+
app.add_typer(devops_app, name="devops", help="[d] DevOps related commands", no_args_is_help=True)
|
|
19
|
+
app.add_typer(devops_app, name="d", hidden=True) # short alias
|
|
20
|
+
|
|
21
|
+
cloud_app = get_cloud_app()
|
|
22
|
+
app.add_typer(cloud_app, name="cloud", help="[c] Cloud management commands", no_args_is_help=True)
|
|
23
|
+
app.add_typer(cloud_app, name="c", hidden=True) # short alias
|
|
24
|
+
|
|
25
|
+
sessions_app = get_sessions_app()
|
|
26
|
+
app.add_typer(sessions_app, name="sessions", help="[s] Session and layout management", no_args_is_help=True)
|
|
27
|
+
app.add_typer(sessions_app, name="s", hidden=True) # short alias
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
agents_app = get_agents_app()
|
|
31
|
+
app.add_typer(agents_app, name="agents", help="[a] 🤖 AI Agents management commands", no_args_is_help=True)
|
|
32
|
+
app.add_typer(agents_app, name="a", hidden=True) # short alias
|
|
33
|
+
|
|
34
|
+
app.command(name="fire", help="[f] Fire and manage jobs", no_args_is_help=False)(get_fire_jobs_app)
|
|
35
|
+
app.command(name="f", hidden=True, no_args_is_help=False)(get_fire_jobs_app)
|
|
36
|
+
app.command("ftpx", no_args_is_help=True, help="[ff] File transfer utility though SSH")(ftpx_func)
|
|
37
|
+
app.command("ff", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
|
|
38
|
+
app.command("croshell", no_args_is_help=False, help="[r] Cross-shell command execution")(croshell_func)
|
|
39
|
+
app.command("r", no_args_is_help=False, hidden=True)(croshell_func) # short alias
|
|
40
|
+
|
|
41
|
+
utils_app = get_utils_app()
|
|
42
|
+
app.add_typer(utils_app, name="utils", help="[u] Utility commands", no_args_is_help=True)
|
|
43
|
+
app.add_typer(utils_app, name="u", hidden=True) # short alias
|
|
44
|
+
|
|
45
|
+
define_app = get_define_app()
|
|
46
|
+
app.add_typer(define_app, name="define", help="[df] Define and manage configurations", no_args_is_help=True)
|
|
47
|
+
app.add_typer(define_app, name="df", hidden=True) # short alias
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
terminal_app = get_terminal_app()
|
|
51
|
+
app.add_typer(terminal_app, name="terminal", help="[t] Terminal management commands", no_args_is_help=True)
|
|
52
|
+
app.add_typer(terminal_app, name="t", hidden=True) # short alias
|
|
53
|
+
|
|
54
|
+
return app
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def main():
|
|
58
|
+
app = get_app()
|
|
59
|
+
app()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
if __name__ == "__main__":
|
|
63
|
+
main()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
import typer
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def machineconfig_find():
|
|
6
|
+
from machineconfig.scripts.python.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
|
|
7
|
+
import platform
|
|
8
|
+
if platform.system() == "Linux":
|
|
9
|
+
script_path = FZFG_LINUX_PATH
|
|
10
|
+
elif platform.system() == "Windows":
|
|
11
|
+
script_path = FZFG_WINDOWS_PATH
|
|
12
|
+
else:
|
|
13
|
+
raise RuntimeError("Unsupported platform")
|
|
14
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
15
|
+
exit_then_run_shell_script(script=script_path.read_text(encoding="utf-8"), strict=False)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main():
|
|
19
|
+
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
20
|
+
app.command(name="msearch", help="machineconfig search helper", no_args_is_help=False)(machineconfig_find)
|
|
21
|
+
app()
|
|
File without changes
|
|
@@ -12,9 +12,7 @@ BOX_WIDTH = 150 # width for box drawing
|
|
|
12
12
|
def main() -> None:
|
|
13
13
|
title = "🔑 SSH IDENTITY MANAGEMENT"
|
|
14
14
|
print(Panel(Text(title, justify="center"), expand=False))
|
|
15
|
-
|
|
16
15
|
print(Panel("🔍 Searching for existing SSH keys...", expand=False))
|
|
17
|
-
|
|
18
16
|
private_keys = [x.with_name(x.stem) for x in PathExtended.home().joinpath(".ssh").search("*.pub")]
|
|
19
17
|
private_keys = [x for x in private_keys if x.exists()]
|
|
20
18
|
if private_keys:
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
from platform import system
|
|
4
4
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
5
|
-
from machineconfig.utils.options import choose_from_options
|
|
6
5
|
from machineconfig.utils.path_extended import PathExtended
|
|
7
6
|
from rich.console import Console
|
|
8
7
|
from rich.panel import Panel
|
|
9
|
-
from rich import box
|
|
8
|
+
from rich import box
|
|
9
|
+
from typing import Optional, Annotated
|
|
10
|
+
import typer
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
console = Console()
|
|
13
14
|
|
|
14
15
|
|
|
15
|
-
def get_add_ssh_key_script(path_to_key: PathExtended):
|
|
16
|
+
def get_add_ssh_key_script(path_to_key: PathExtended) -> str:
|
|
16
17
|
console.print(Panel("🔑 SSH KEY CONFIGURATION", title="[bold blue]SSH Setup[/bold blue]"))
|
|
17
|
-
|
|
18
|
-
if system() == "Linux":
|
|
18
|
+
if system() == "Linux" or system() == "Darwin":
|
|
19
19
|
authorized_keys = PathExtended.home().joinpath(".ssh/authorized_keys")
|
|
20
20
|
console.print(Panel(f"🐧 Linux SSH configuration\n📄 Authorized keys file: {authorized_keys}", title="[bold blue]System Info[/bold blue]"))
|
|
21
21
|
elif system() == "Windows":
|
|
@@ -30,16 +30,15 @@ def get_add_ssh_key_script(path_to_key: PathExtended):
|
|
|
30
30
|
keys_text = authorized_keys.read_text(encoding="utf-8").split(split)
|
|
31
31
|
key_count = len([k for k in keys_text if k.strip()])
|
|
32
32
|
console.print(Panel(f"🔍 Current SSH authorization status\n✅ Found {key_count} authorized key(s)", title="[bold blue]Status[/bold blue]"))
|
|
33
|
-
|
|
34
33
|
if path_to_key.read_text(encoding="utf-8") in authorized_keys.read_text(encoding="utf-8"):
|
|
35
34
|
console.print(Panel(f"⚠️ Key already authorized\nKey: {path_to_key.name}\nStatus: Already present in authorized_keys file\nNo action required", title="[bold yellow]Warning[/bold yellow]"))
|
|
36
35
|
program = ""
|
|
37
36
|
else:
|
|
38
37
|
console.print(Panel(f"➕ Adding new SSH key to authorized keys\n🔑 Key file: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
|
|
39
|
-
if system() == "Linux":
|
|
38
|
+
if system() == "Linux" or system() == "Darwin":
|
|
40
39
|
program = f"cat {path_to_key} >> ~/.ssh/authorized_keys"
|
|
41
40
|
elif system() == "Windows":
|
|
42
|
-
program_path = LIBRARY_ROOT.joinpath("setup_windows/
|
|
41
|
+
program_path = LIBRARY_ROOT.joinpath("setup_windows/add-sshkey.ps1")
|
|
43
42
|
program = program_path.expanduser().read_text(encoding="utf-8")
|
|
44
43
|
place_holder = r'$sshfile = "$env:USERPROFILE\.ssh\pubkey.pub"'
|
|
45
44
|
assert place_holder in program, f"This section performs string manipulation on the script {program_path} to add the key to the authorized_keys file. The script has changed and the string {place_holder} is not found."
|
|
@@ -49,16 +48,15 @@ def get_add_ssh_key_script(path_to_key: PathExtended):
|
|
|
49
48
|
raise NotImplementedError
|
|
50
49
|
else:
|
|
51
50
|
console.print(Panel(f"📝 Creating new authorized_keys file\n🔑 Using key: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
|
|
52
|
-
if system() == "Linux":
|
|
51
|
+
if system() == "Linux" or system() == "Darwin":
|
|
53
52
|
program = f"cat {path_to_key} > ~/.ssh/authorized_keys"
|
|
54
53
|
else:
|
|
55
54
|
program_path = LIBRARY_ROOT.joinpath("setup_windows/openssh-server_add-sshkey.ps1")
|
|
56
55
|
program = PathExtended(program_path).expanduser().read_text(encoding="utf-8").replace('$sshfile=""', f'$sshfile="{path_to_key}"')
|
|
57
56
|
console.print(Panel("🔧 Configured PowerShell script for Windows\n📝 Set key path in script", title="[bold blue]Configuration[/bold blue]"))
|
|
58
57
|
|
|
59
|
-
if system() == "Linux":
|
|
58
|
+
if system() == "Linux" or system() == "Darwin":
|
|
60
59
|
program += """
|
|
61
|
-
|
|
62
60
|
sudo chmod 700 ~/.ssh
|
|
63
61
|
sudo chmod 644 ~/.ssh/authorized_keys
|
|
64
62
|
sudo chmod 644 ~/.ssh/*.pub
|
|
@@ -68,51 +66,83 @@ sudo service ssh --full-restart
|
|
|
68
66
|
return program
|
|
69
67
|
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
console.print(Panel(f"✅ Found {len(pub_keys)} public key(s)", title="[bold green]Status[/bold green]", border_style="green"))
|
|
80
|
-
else:
|
|
81
|
-
console.print(Panel("⚠️ No public keys found", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
69
|
+
"""
|
|
70
|
+
Common pitfalls:
|
|
71
|
+
🚫 Wrong line endings (LF/CRLF) in config files
|
|
72
|
+
🌐 Network port conflicts (try 2222 -> 2223) between WSL and Windows
|
|
73
|
+
sudo service ssh restart
|
|
74
|
+
sudo service ssh status
|
|
75
|
+
sudo nano /etc/ssh/sshd_config
|
|
76
|
+
"""
|
|
82
77
|
|
|
83
|
-
all_keys_option = f"all pub keys available ({len(pub_keys)})"
|
|
84
|
-
i_have_path_option = "I have the path to the key file"
|
|
85
|
-
i_paste_option = "I want to paste the key itself"
|
|
86
78
|
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
def main(pub_path: Annotated[Optional[str], typer.Argument(..., help="Path to the public key file")] = None,
|
|
80
|
+
pub_choose: Annotated[bool, typer.Option(..., "--choose", "-c", help="Choose from available public keys in ~/.ssh")] = False,
|
|
81
|
+
pub_val: Annotated[bool, typer.Option(..., "--paste", "-p", help="Paste the public key content manually")] = False,
|
|
82
|
+
from_github: Annotated[Optional[str], typer.Option(..., "--from-github", "-g", help="Fetch public keys from a GitHub username")] = None
|
|
83
|
+
) -> None:
|
|
84
|
+
|
|
85
|
+
if pub_path:
|
|
86
|
+
key_path = PathExtended(pub_path).expanduser().absolute()
|
|
87
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
88
|
+
if not key_path.exists():
|
|
89
|
+
console.print(Panel(f"❌ ERROR: Provided key path does not exist\nPath: {key_path}", title="[bold red]Error[/bold red]"))
|
|
90
|
+
raise FileNotFoundError(f"Provided key path does not exist: {key_path}")
|
|
91
|
+
console.print(Panel(f"📄 Using provided public key file: {key_path}", title="[bold blue]Info[/bold blue]"))
|
|
92
|
+
program = get_add_ssh_key_script(key_path)
|
|
93
|
+
from machineconfig.utils.code import run_shell_script
|
|
94
|
+
run_shell_script(script=program)
|
|
95
|
+
console.print(Panel("✅ SSH KEY AUTHORIZATION COMPLETED", box=box.DOUBLE_EDGE, title_align="left"))
|
|
96
|
+
return
|
|
97
|
+
elif pub_choose:
|
|
98
|
+
console.print(Panel("🔐 SSH PUBLIC KEY AUTHORIZATION TOOL", box=box.DOUBLE_EDGE, title_align="left"))
|
|
99
|
+
console.print(Panel("🔍 Searching for public keys...", title="[bold blue]SSH Setup[/bold blue]", border_style="blue"))
|
|
100
|
+
pub_keys = PathExtended.home().joinpath(".ssh").search("*.pub")
|
|
101
|
+
if pub_keys:
|
|
102
|
+
console.print(Panel(f"✅ Found {len(pub_keys)} public key(s)", title="[bold green]Status[/bold green]", border_style="green"))
|
|
103
|
+
else:
|
|
104
|
+
console.print(Panel("⚠️ No public keys found", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
105
|
+
return
|
|
89
106
|
console.print(Panel(f"🔄 Processing all {len(pub_keys)} public keys...", title="[bold blue]Processing[/bold blue]", border_style="blue"))
|
|
90
107
|
program = "\n\n\n".join([get_add_ssh_key_script(key) for key in pub_keys])
|
|
91
108
|
|
|
92
|
-
elif
|
|
93
|
-
console.print(Panel("📂 Please provide the path to your public key", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
|
|
94
|
-
key_path = PathExtended(input("📋 Path: ")).expanduser().absolute()
|
|
95
|
-
console.print(Panel(f"📄 Using key from path: {key_path}", title="[bold blue]Info[/bold blue]", border_style="blue"))
|
|
96
|
-
program = get_add_ssh_key_script(key_path)
|
|
97
|
-
|
|
98
|
-
elif res == i_paste_option:
|
|
109
|
+
elif pub_val:
|
|
99
110
|
console.print(Panel("📋 Please provide a filename and paste the public key content", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
|
|
100
111
|
key_filename = input("📝 File name (default: my_pasted_key.pub): ") or "my_pasted_key.pub"
|
|
101
112
|
key_path = PathExtended.home().joinpath(f".ssh/{key_filename}")
|
|
113
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
102
114
|
key_path.write_text(input("🔑 Paste the public key here: "), encoding="utf-8")
|
|
103
115
|
console.print(Panel(f"💾 Key saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
104
116
|
program = get_add_ssh_key_script(key_path)
|
|
105
|
-
|
|
117
|
+
elif from_github:
|
|
118
|
+
console.print(Panel(f"🌐 Fetching public keys from GitHub user: {from_github}", title="[bold blue]GitHub Fetch[/bold blue]", border_style="blue"))
|
|
119
|
+
import requests
|
|
120
|
+
response = requests.get(f"https://api.github.com/users/{from_github}/keys")
|
|
121
|
+
if response.status_code != 200:
|
|
122
|
+
console.print(Panel(f"❌ ERROR: Failed to fetch keys from GitHub user {from_github}\nStatus Code: {response.status_code}", title="[bold red]Error[/bold red]", border_style="red"))
|
|
123
|
+
raise RuntimeError(f"Failed to fetch keys from GitHub user {from_github}: Status Code {response.status_code}")
|
|
124
|
+
keys = response.json()
|
|
125
|
+
if not keys:
|
|
126
|
+
console.print(Panel(f"⚠️ No public keys found for GitHub user: {from_github}", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
127
|
+
return
|
|
128
|
+
console.print(Panel(f"✅ Found {len(keys)} public key(s) for user: {from_github}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
129
|
+
key_path = PathExtended.home().joinpath(f".ssh/{from_github}_github_keys.pub")
|
|
130
|
+
key_path.parent.mkdir(parents=True, exist_ok=True)
|
|
131
|
+
key_path.write_text("\n".join([key["key"] for key in keys]), encoding="utf-8")
|
|
132
|
+
console.print(Panel(f"💾 Keys saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
133
|
+
program = get_add_ssh_key_script(key_path)
|
|
106
134
|
else:
|
|
107
|
-
console.print(Panel(
|
|
108
|
-
|
|
109
|
-
|
|
135
|
+
console.print(Panel("❌ ERROR: No method provided to add SSH key\nUse --help for options", title="[bold red]Error[/bold red]", border_style="red"))
|
|
136
|
+
raise ValueError("No method provided to add SSH key. Use --help for options.")
|
|
110
137
|
console.print(Panel("🚀 SSH KEY AUTHORIZATION READY\nRun the generated script to apply changes", box=box.DOUBLE_EDGE, title_align="left"))
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
import
|
|
114
|
-
|
|
115
|
-
|
|
138
|
+
from machineconfig.utils.code import run_shell_script
|
|
139
|
+
run_shell_script(script=program)
|
|
140
|
+
import socket
|
|
141
|
+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
142
|
+
s.connect(('8.8.8.8', 80))
|
|
143
|
+
local_ip_v4 = s.getsockname()[0]
|
|
144
|
+
s.close()
|
|
145
|
+
console.print(Panel(f"🌐 This computer is accessible at: {local_ip_v4}", title="[bold green]Network Info[/bold green]", border_style="green"))
|
|
116
146
|
console.print(Panel("✅ SSH KEY AUTHORIZATION COMPLETED", box=box.DOUBLE_EDGE, title_align="left"))
|
|
117
147
|
|
|
118
148
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.
|
|
8
|
+
uv run --python 3.14 --with "machineconfig>=7.32" python -m machineconfig.scripts.python.mount_nfs
|
|
9
9
|
# Check if remote server is reachable and share folder exists
|
|
10
10
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
11
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -19,9 +19,9 @@ def main():
|
|
|
19
19
|
print("\n🔍 Interactive mode selected for choosing share path.")
|
|
20
20
|
tmp = choose_ssh_host(multi=False)
|
|
21
21
|
assert isinstance(tmp, str)
|
|
22
|
-
ssh = SSH(tmp)
|
|
23
|
-
default = f"{ssh.hostname}:{ssh.
|
|
24
|
-
share_info = choose_from_options(msg="📂 Choose a share path:", options=[f"{ssh.hostname}:{item.split(' ')[0]}" for item in ssh.
|
|
22
|
+
ssh = SSH(host=tmp, username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=False)
|
|
23
|
+
default = f"{ssh.hostname}:{ssh.run_shell(command='echo $HOME', verbose_output=False, description='Get home directory', strict_stderr=False, strict_return_code=True).op}/data/share_nfs"
|
|
24
|
+
share_info = choose_from_options(msg="📂 Choose a share path:", options=[f"{ssh.hostname}:{item.split(' ')[0]}" for item in ssh.run_shell(command="cat /etc/exports", verbose_output=False, description='Get NFS exports', strict_stderr=False, strict_return_code=False).op.split("\n") if not item.startswith("#")] + [default], default=default, multi=False)
|
|
25
25
|
assert isinstance(share_info, str), f"❌ share_info must be a string. Got {type(share_info)}"
|
|
26
26
|
|
|
27
27
|
remote_server = share_info.split(":")[0]
|