machineconfig 3.99__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 +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- 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 -172
- 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 -16
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +69 -53
- machineconfig/jobs/installer/custom/hx.py +77 -20
- machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
- machineconfig/jobs/installer/custom_dev/brave.py +43 -35
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +33 -21
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
- machineconfig/jobs/installer/custom_dev/goes.py +41 -36
- machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
- machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/custom_dev/redis.py +51 -33
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
- machineconfig/jobs/installer/custom_dev/winget.py +1 -0
- machineconfig/jobs/installer/installer_data.json +3406 -0
- 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/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -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 +255 -0
- 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 +198 -0
- 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 +117 -181
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -124
- 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 +106 -244
- machineconfig/scripts/python/ftpx.py +125 -68
- 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/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -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} +11 -19
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
- 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/helpers_devops/cli_terminal.py +156 -0
- 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/helpers_devops/devops_update_repos.py +269 -0
- 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} +57 -87
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- 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} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- 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 +79 -160
- 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} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- 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} +6 -5
- machineconfig/scripts/python/sessions.py +167 -0
- 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 -9
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- 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 +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/installer_cli.py +181 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +10 -25
- machineconfig/utils/path_extended.py +94 -104
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +0 -1
- machineconfig/utils/schemas/layouts/layout_types.py +2 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- 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/templates/utils.py +0 -51
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/installer/packages_custom_dev.json +0 -226
- machineconfig/jobs/installer/packages_custom_essential.json +0 -39
- machineconfig/jobs/installer/packages_github_dev.json +0 -1110
- machineconfig/jobs/installer/packages_github_essential.json +0 -804
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -49
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- 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 -170
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- 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/fire_agents +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/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +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 -186
- machineconfig/scripts/python/devops_devapps_install.py +0 -159
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -175
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
- 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 -114
- machineconfig/scripts/python/repos.py +0 -80
- machineconfig/scripts/python/repos_helper_action.py +0 -335
- machineconfig/scripts/python/share_terminal.py +0 -104
- 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/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/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.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/ascii_art.sh +0 -93
- 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-3.99.dist-info/METADATA +0 -167
- machineconfig-3.99.dist-info/RECORD +0 -409
- machineconfig-3.99.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.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/{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-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Optional
|
|
4
|
+
import typer
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def download(
|
|
9
|
+
url: Annotated[Optional[str], typer.Argument(..., help="The URL to download the file from.")] = None,
|
|
10
|
+
decompress: Annotated[bool, typer.Option(..., "--decompress", "-d", help="Decompress the file if it's an archive.")] = False,
|
|
11
|
+
output: Annotated[Optional[str], typer.Option("--output", "-o", help="The output file path.")] = None,
|
|
12
|
+
output_dir: Annotated[Optional[str], typer.Option("--output-dir", help="Directory to place the downloaded file in.")] = None,
|
|
13
|
+
) -> Optional["Path"]:
|
|
14
|
+
|
|
15
|
+
import subprocess
|
|
16
|
+
from urllib.parse import parse_qs, unquote, urlparse
|
|
17
|
+
from requests import Response
|
|
18
|
+
import requests
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
if url is None:
|
|
21
|
+
typer.echo("❌ Error: URL is required.", err=True)
|
|
22
|
+
return None
|
|
23
|
+
if output is not None and output_dir is not None:
|
|
24
|
+
typer.echo("❌ Error: --output and --output-dir cannot be used together.", err=True)
|
|
25
|
+
return None
|
|
26
|
+
typer.echo(f"📥 Downloading from: {url}")
|
|
27
|
+
|
|
28
|
+
def _sanitize_candidate_filename(name: str) -> Optional[str]:
|
|
29
|
+
candidate = Path(name).name.strip()
|
|
30
|
+
if not candidate or candidate in {".", ".."}:
|
|
31
|
+
return None
|
|
32
|
+
return candidate
|
|
33
|
+
|
|
34
|
+
def _filename_from_content_disposition(header_value: Optional[str]) -> Optional[str]:
|
|
35
|
+
if header_value is None:
|
|
36
|
+
return None
|
|
37
|
+
parts = [segment.strip() for segment in header_value.split(";")]
|
|
38
|
+
for part in parts:
|
|
39
|
+
lower = part.lower()
|
|
40
|
+
if lower.startswith("filename*="):
|
|
41
|
+
value = part.split("=", 1)[1]
|
|
42
|
+
value = value.strip().strip('"')
|
|
43
|
+
if "''" in value:
|
|
44
|
+
value = value.split("''", 1)[1]
|
|
45
|
+
decoded = unquote(value)
|
|
46
|
+
sanitized = _sanitize_candidate_filename(decoded)
|
|
47
|
+
if sanitized is not None:
|
|
48
|
+
return sanitized
|
|
49
|
+
if lower.startswith("filename="):
|
|
50
|
+
value = part.split("=", 1)[1].strip().strip('"')
|
|
51
|
+
decoded = unquote(value)
|
|
52
|
+
sanitized = _sanitize_candidate_filename(decoded)
|
|
53
|
+
if sanitized is not None:
|
|
54
|
+
return sanitized
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
def _filename_from_url(source_url: str) -> Optional[str]:
|
|
58
|
+
parsed = urlparse(source_url)
|
|
59
|
+
url_candidate = _sanitize_candidate_filename(unquote(Path(parsed.path).name))
|
|
60
|
+
if url_candidate is not None:
|
|
61
|
+
return url_candidate
|
|
62
|
+
query_params = parse_qs(parsed.query, keep_blank_values=True)
|
|
63
|
+
for key, values in query_params.items():
|
|
64
|
+
lower_key = key.lower()
|
|
65
|
+
if "name" in lower_key or "file" in lower_key:
|
|
66
|
+
for value in values:
|
|
67
|
+
sanitized = _sanitize_candidate_filename(unquote(value))
|
|
68
|
+
if sanitized is not None:
|
|
69
|
+
return sanitized
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
def _resolve_download_path(request_url: str, response: Response, requested_output: Optional[str], requested_output_dir: Optional[str]) -> Path:
|
|
73
|
+
if requested_output is not None:
|
|
74
|
+
return Path(requested_output)
|
|
75
|
+
header_candidate = _filename_from_content_disposition(response.headers.get("content-disposition"))
|
|
76
|
+
if header_candidate is None:
|
|
77
|
+
header_candidate = _filename_from_url(response.url)
|
|
78
|
+
if header_candidate is None:
|
|
79
|
+
header_candidate = _filename_from_url(request_url)
|
|
80
|
+
if header_candidate is None:
|
|
81
|
+
header_candidate = "downloaded_file"
|
|
82
|
+
if requested_output_dir is not None:
|
|
83
|
+
return Path(requested_output_dir) / header_candidate
|
|
84
|
+
return Path(header_candidate)
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
with requests.get(url, allow_redirects=True, stream=True, timeout=60) as response:
|
|
88
|
+
response.raise_for_status()
|
|
89
|
+
download_path = _resolve_download_path(url, response, output, output_dir)
|
|
90
|
+
download_path.parent.mkdir(parents=True, exist_ok=True)
|
|
91
|
+
total_size_header = response.headers.get("content-length", "0")
|
|
92
|
+
try:
|
|
93
|
+
total_size = int(total_size_header)
|
|
94
|
+
except (TypeError, ValueError):
|
|
95
|
+
total_size = 0
|
|
96
|
+
if total_size <= 0:
|
|
97
|
+
with open(download_path, "wb") as file_handle:
|
|
98
|
+
file_handle.write(response.content)
|
|
99
|
+
else:
|
|
100
|
+
downloaded = 0
|
|
101
|
+
chunk_size = 8192 * 4
|
|
102
|
+
with open(download_path, "wb") as file_handle:
|
|
103
|
+
for chunk in response.iter_content(chunk_size=chunk_size):
|
|
104
|
+
if not chunk:
|
|
105
|
+
continue
|
|
106
|
+
file_handle.write(chunk)
|
|
107
|
+
downloaded += len(chunk)
|
|
108
|
+
progress = (downloaded / total_size) * 100
|
|
109
|
+
typer.echo(f"\r⏬ Progress: {progress:.1f}% ({downloaded}/{total_size} bytes)", nl=False)
|
|
110
|
+
typer.echo()
|
|
111
|
+
except requests.exceptions.RequestException as exception:
|
|
112
|
+
typer.echo(f"❌ Download failed: {exception}", err=True)
|
|
113
|
+
return None
|
|
114
|
+
except OSError as exception:
|
|
115
|
+
typer.echo(f"❌ File write error: {exception}", err=True)
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
typer.echo(f"✅ Downloaded to: {download_path}")
|
|
119
|
+
result_path: Path = download_path
|
|
120
|
+
|
|
121
|
+
if decompress:
|
|
122
|
+
typer.echo(f"📦 Decompressing: {download_path}")
|
|
123
|
+
base_name = download_path.stem
|
|
124
|
+
if base_name in {"", ".", ".."}:
|
|
125
|
+
base_name = "extracted"
|
|
126
|
+
extract_dir = download_path.parent / base_name
|
|
127
|
+
extract_dir.mkdir(parents=True, exist_ok=True)
|
|
128
|
+
try:
|
|
129
|
+
subprocess.run(
|
|
130
|
+
["ouch", "decompress", str(download_path), "--dir", str(extract_dir)],
|
|
131
|
+
check=True,
|
|
132
|
+
capture_output=True,
|
|
133
|
+
text=True,
|
|
134
|
+
)
|
|
135
|
+
typer.echo(f"✅ Decompressed to: {extract_dir}")
|
|
136
|
+
if download_path.exists():
|
|
137
|
+
download_path.unlink()
|
|
138
|
+
typer.echo(f"🗑️ Removed archive: {download_path}")
|
|
139
|
+
result_path = extract_dir
|
|
140
|
+
except subprocess.CalledProcessError as exception:
|
|
141
|
+
typer.echo(f"❌ Decompression failed: {exception.stderr}", err=True)
|
|
142
|
+
return None
|
|
143
|
+
except FileNotFoundError:
|
|
144
|
+
typer.echo("❌ Error: ouch command not found. Please install ouch.", err=True)
|
|
145
|
+
typer.echo("💡 Install with: cargo install ouch", err=True)
|
|
146
|
+
return None
|
|
147
|
+
|
|
148
|
+
return result_path.resolve()
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
if __name__ == "__main__":
|
|
152
|
+
pass
|
|
@@ -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
|
+
|
|
@@ -17,45 +17,59 @@ for better user experience with checkbox selections.
|
|
|
17
17
|
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
import subprocess
|
|
21
20
|
import sys
|
|
22
21
|
from pathlib import Path
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
import platform
|
|
25
23
|
import questionary
|
|
26
24
|
from questionary import Choice
|
|
27
25
|
from rich.console import Console
|
|
28
26
|
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
30
|
console = Console()
|
|
33
31
|
|
|
34
32
|
|
|
35
|
-
def run_command(command: str, description: str) -> bool:
|
|
36
|
-
"""Execute a shell command and return success status."""
|
|
37
|
-
console.print(f"\n🔧 {description}", style="bold cyan")
|
|
38
|
-
try:
|
|
39
|
-
result = subprocess.run(command, shell=True, check=True, capture_output=False)
|
|
40
|
-
return result.returncode == 0
|
|
41
|
-
except subprocess.CalledProcessError as e:
|
|
42
|
-
console.print(f"❌ Error executing command: {e}", style="bold red")
|
|
43
|
-
return False
|
|
44
33
|
def display_header() -> None:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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()
|
|
49
66
|
def display_completion_message() -> None:
|
|
50
|
-
"""Display completion message."""
|
|
51
67
|
completion_text = Text("INSTALLATION COMPLETE", style="bold green")
|
|
52
68
|
subtitle_text = Text("System setup finished successfully", style="italic green")
|
|
53
69
|
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)))
|
|
54
70
|
def display_dotfiles_instructions() -> None:
|
|
55
|
-
"""Display instructions for dotfiles migration."""
|
|
56
71
|
header_text = Text("DOTFILES MIGRATION", style="bold yellow")
|
|
57
72
|
subtitle_text = Text("Configuration transfer options", style="italic yellow")
|
|
58
|
-
|
|
59
73
|
instructions = """
|
|
60
74
|
🖱️ [bold blue]Method 1: USING MOUSE WITHOUT KB OR BROWSER SHARE[/bold blue]
|
|
61
75
|
On original machine, run:
|
|
@@ -73,194 +87,99 @@ def display_dotfiles_instructions() -> None:
|
|
|
73
87
|
[dim]cd ~
|
|
74
88
|
cloud_copy SHARE_URL . --config ss[/dim]
|
|
75
89
|
(requires symlinks to be created first)"""
|
|
76
|
-
|
|
77
90
|
console.print(Panel(f"📂 {header_text}\n{subtitle_text}\n\n{instructions}", border_style="yellow", padding=(1, 2)))
|
|
78
91
|
|
|
79
92
|
|
|
80
|
-
def install_windows_desktop_apps() -> bool:
|
|
81
|
-
"""Install Windows desktop applications using winget."""
|
|
82
|
-
if system() != "Windows":
|
|
83
|
-
console.print("❌ This function is only available on Windows systems.", style="bold red")
|
|
84
|
-
return False
|
|
85
|
-
|
|
86
|
-
console.print(Panel("💻 [bold cyan]WINDOWS DESKTOP APPS[/bold cyan]\n[italic]Installing Brave, Windows Terminal, PowerShell, and VSCode[/italic]", border_style="cyan"))
|
|
87
|
-
|
|
88
|
-
# Install winget applications
|
|
89
|
-
winget_commands = [
|
|
90
|
-
('winget install --no-upgrade --name "Windows Terminal" --Id "Microsoft.WindowsTerminal" --source winget --scope user --accept-package-agreements --accept-source-agreements', "Installing Windows Terminal"),
|
|
91
|
-
('winget install --no-upgrade --name "Powershell" --Id "Microsoft.PowerShell" --source winget --scope user --accept-package-agreements --accept-source-agreements', "Installing PowerShell"),
|
|
92
|
-
('winget install --no-upgrade --name "Brave" --Id "Brave.Brave" --source winget --scope user --accept-package-agreements --accept-source-agreements', "Installing Brave Browser"),
|
|
93
|
-
('winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements', "Installing Visual Studio Code"),
|
|
94
|
-
]
|
|
95
|
-
|
|
96
|
-
success = True
|
|
97
|
-
for command, description in winget_commands:
|
|
98
|
-
if not run_command(command, description):
|
|
99
|
-
success = False
|
|
100
|
-
|
|
101
|
-
# Install Nerd Fonts via Python
|
|
102
|
-
console.print("🔧 Installing Nerd Fonts", style="bold cyan")
|
|
103
|
-
try:
|
|
104
|
-
from machineconfig.jobs.installer.custom_dev.nerfont_windows_helper import install_nerd_fonts
|
|
105
|
-
install_nerd_fonts()
|
|
106
|
-
console.print("✅ Nerd Fonts installed successfully", style="bold green")
|
|
107
|
-
except Exception as e:
|
|
108
|
-
console.print(f"❌ Error installing Nerd Fonts: {e}", style="bold red")
|
|
109
|
-
success = False
|
|
110
|
-
|
|
111
|
-
# Set Windows Terminal settings via Python
|
|
112
|
-
console.print("🔧 Setting Windows Terminal settings", style="bold cyan")
|
|
113
|
-
try:
|
|
114
|
-
from machineconfig.setup_windows.wt_and_pwsh.set_wt_settings import main as set_wt_settings_main
|
|
115
|
-
set_wt_settings_main()
|
|
116
|
-
console.print("✅ Windows Terminal settings configured successfully", style="bold green")
|
|
117
|
-
except Exception as e:
|
|
118
|
-
console.print(f"❌ Error setting Windows Terminal settings: {e}", style="bold red")
|
|
119
|
-
success = False
|
|
120
|
-
|
|
121
|
-
return success
|
|
122
|
-
|
|
123
|
-
|
|
124
93
|
def get_installation_choices() -> list[str]:
|
|
125
94
|
"""Get user choices for installation options."""
|
|
126
95
|
choices = [
|
|
127
|
-
Choice(value="
|
|
128
|
-
Choice(value="
|
|
129
|
-
Choice(value="
|
|
130
|
-
Choice(value="
|
|
131
|
-
Choice(value="
|
|
132
|
-
Choice(value="
|
|
133
|
-
Choice(value="
|
|
134
|
-
Choice(value="retrieve_repositories", title="📚 Retrieve Repositories - Clone repositories to ~/code", checked=False),
|
|
135
|
-
Choice(value="retrieve_data", title="💾 Retrieve Data - Backup restoration", checked=False),
|
|
136
|
-
Choice(value="install_ascii_art", title="🎨 Install ASCII Art Libraries - Terminal visualization tools", 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),
|
|
137
103
|
]
|
|
138
|
-
# Add Windows-specific options
|
|
139
|
-
if system() == "Windows":
|
|
140
|
-
choices.append(Choice(value="install_windows_desktop", title="💻 Install Windows Desktop Apps - Brave, Windows Terminal, PowerShell, VSCode (Windows only)", checked=False))
|
|
141
104
|
selected = questionary.checkbox("Select the installation options you want to execute:", choices=choices, show_description=True).ask()
|
|
142
105
|
return selected or []
|
|
143
106
|
|
|
144
107
|
|
|
145
108
|
def execute_installations(selected_options: list[str]) -> None:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
else:
|
|
159
|
-
# Linux: Use existing bash script approach
|
|
160
|
-
from machineconfig import setup_linux as module
|
|
161
|
-
script = Path(module.__file__).parent / "apps.sh"
|
|
162
|
-
run_command(f"bash {script}", "Installing Linux base system applications")
|
|
163
|
-
|
|
164
|
-
if "upgrade_system" in selected_options:
|
|
165
|
-
console.print(Panel("🔄 [bold magenta]SYSTEM UPDATE[/bold magenta]\n[italic]Package management[/italic]", border_style="magenta"))
|
|
166
|
-
run_command("sudo nala upgrade -y", "Upgrading system packages")
|
|
109
|
+
for maybe_a_group in selected_options:
|
|
110
|
+
if maybe_a_group in ("termabc", "sysabc"):
|
|
111
|
+
console.print(Panel("⚡ [bold bright_yellow]CLI APPLICATIONS[/bold bright_yellow]\n[italic]Command-line tools installation[/italic]", border_style="bright_yellow"))
|
|
112
|
+
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
113
|
+
try:
|
|
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)
|
|
116
|
+
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
117
|
+
except Exception as e:
|
|
118
|
+
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
119
|
+
if platform.system() != "Windows":
|
|
120
|
+
run_shell_script(". $HOME/.bashrc")
|
|
167
121
|
|
|
168
|
-
if "
|
|
122
|
+
if "install_machineconfig" in selected_options:
|
|
169
123
|
console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
|
|
170
|
-
from machineconfig import
|
|
171
|
-
|
|
172
|
-
run_command(f"bash {script}", "Setting up Python environment and repositories")
|
|
124
|
+
from machineconfig.scripts.python.helpers_devops.cli_self import install
|
|
125
|
+
install()
|
|
173
126
|
|
|
174
127
|
if "install_ssh_server" in selected_options:
|
|
175
128
|
console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
|
|
176
|
-
if system() == "Windows":
|
|
129
|
+
if platform.system() == "Windows":
|
|
177
130
|
powershell_script = """Write-Host "🔧 Installing and configuring SSH server..."
|
|
178
131
|
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
|
179
132
|
Start-Service sshd
|
|
180
133
|
Set-Service -Name sshd -StartupType 'Automatic'"""
|
|
181
|
-
|
|
182
|
-
else:
|
|
183
|
-
run_command("sudo nala install openssh-server -y", "Installing SSH server")
|
|
184
|
-
|
|
185
|
-
if "create_symlinks" in selected_options:
|
|
186
|
-
display_dotfiles_instructions()
|
|
187
|
-
dotfiles_ready = questionary.confirm("📂 Have you finished copying dotfiles?", default=True).ask()
|
|
188
|
-
if dotfiles_ready:
|
|
189
|
-
console.print(Panel("🔗 [bold cyan]SYMLINK CREATION[/bold cyan]\n[italic]Configuration setup[/italic]", border_style="cyan"))
|
|
190
|
-
console.print("🔧 Creating symlinks", style="bold cyan")
|
|
191
|
-
try:
|
|
192
|
-
from machineconfig.profile.create import main_symlinks
|
|
193
|
-
main_symlinks()
|
|
194
|
-
console.print("✅ Symlinks created successfully", style="bold green")
|
|
195
|
-
except Exception as e:
|
|
196
|
-
console.print(f"❌ Error creating symlinks: {e}", style="bold red")
|
|
197
|
-
run_command("sudo chmod 600 $HOME/.ssh/*", "Setting SSH key permissions")
|
|
198
|
-
run_command("sudo chmod 700 $HOME/.ssh", "Setting SSH directory permissions")
|
|
134
|
+
run_shell_script(f'powershell -Command "{powershell_script}"')
|
|
199
135
|
else:
|
|
200
|
-
|
|
136
|
+
run_shell_script("sudo nala install openssh-server -y")
|
|
201
137
|
|
|
202
|
-
if "
|
|
203
|
-
console.print(Panel("
|
|
204
|
-
console.print("🔧
|
|
138
|
+
if "install_shell_profile" in selected_options:
|
|
139
|
+
console.print(Panel("🐚 [bold green]SHELL PROFILE[/bold green]\n[italic]Shell configuration setup[/italic]", border_style="green"))
|
|
140
|
+
console.print("🔧 Configuring shell profile", style="bold cyan")
|
|
205
141
|
try:
|
|
206
|
-
from machineconfig.
|
|
207
|
-
|
|
208
|
-
console.print("✅
|
|
142
|
+
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
143
|
+
create_default_shell_profile()
|
|
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()
|
|
209
152
|
except Exception as e:
|
|
210
|
-
console.print(f"❌ Error
|
|
211
|
-
run_command(". $HOME/.bashrc", "Reloading bash configuration")
|
|
212
|
-
|
|
213
|
-
if "install_dev_tools" in selected_options:
|
|
214
|
-
console.print(Panel("🛠️ [bold bright_blue]DEVELOPMENT TOOLS[/bold bright_blue]\n[italic]Software development packages[/italic]", border_style="bright_blue"))
|
|
215
|
-
run_command("(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) || true", "Installing Rust toolchain")
|
|
216
|
-
run_command("sudo nala install libssl-dev -y", "Installing libssl-dev")
|
|
217
|
-
run_command("sudo nala install ffmpeg -y", "Installing ffmpeg")
|
|
218
|
-
console.print("🔧 Installing development applications", style="bold cyan")
|
|
219
|
-
try:
|
|
220
|
-
from machineconfig.scripts.python.devops_devapps_install import main as devops_devapps_install_main
|
|
221
|
-
devops_devapps_install_main(which="wezterm,brave,code")
|
|
222
|
-
console.print("✅ Development applications installed successfully", style="bold green")
|
|
223
|
-
except Exception as e:
|
|
224
|
-
console.print(f"❌ Error installing development applications: {e}", style="bold red")
|
|
153
|
+
console.print(f"❌ Error configuring shell profile: {e}", style="bold red")
|
|
225
154
|
|
|
226
155
|
if "retrieve_repositories" in selected_options:
|
|
227
156
|
console.print(Panel("📚 [bold bright_magenta]REPOSITORIES[/bold bright_magenta]\n[italic]Project code retrieval[/italic]", border_style="bright_magenta"))
|
|
228
|
-
from machineconfig.scripts.python import
|
|
229
|
-
|
|
157
|
+
from machineconfig.scripts.python.helpers_devops import cli_repos
|
|
158
|
+
cli_repos.clone(directory=str(Path.home() / "code"), cloud="odg1")
|
|
230
159
|
|
|
231
160
|
if "retrieve_data" in selected_options:
|
|
232
161
|
console.print(Panel("💾 [bold bright_cyan]DATA RETRIEVAL[/bold bright_cyan]\n[italic]Backup restoration[/italic]", border_style="bright_cyan"))
|
|
233
162
|
console.print("🔧 Retrieving backup data", style="bold cyan")
|
|
234
163
|
try:
|
|
235
|
-
from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
|
|
236
|
-
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)
|
|
237
166
|
console.print("✅ Backup data retrieved successfully", style="bold green")
|
|
238
167
|
except Exception as e:
|
|
239
168
|
console.print(f"❌ Error retrieving backup data: {e}", style="bold red")
|
|
240
169
|
|
|
241
|
-
if "install_ascii_art" in selected_options:
|
|
242
|
-
console.print(Panel("🎨 [bold bright_green]ASCII ART[/bold bright_green]\n[italic]Terminal visualization tools[/italic]", border_style="bright_green"))
|
|
243
|
-
from machineconfig import setup_linux as module
|
|
244
|
-
script = Path(module.__file__).parent / "web_shortcuts" / "ascii_art.sh"
|
|
245
|
-
run_command(f"bash {script}", "Installing ASCII art libraries")
|
|
246
|
-
|
|
247
|
-
if "install_windows_desktop" in selected_options:
|
|
248
|
-
install_windows_desktop_apps()
|
|
249
|
-
|
|
250
170
|
|
|
251
171
|
def main() -> None:
|
|
252
|
-
"""Main function to run the interactive installation."""
|
|
253
172
|
display_header()
|
|
254
173
|
selected_options = get_installation_choices()
|
|
255
174
|
if not selected_options:
|
|
256
175
|
console.print("❌ No options selected. Exiting...", style="bold red")
|
|
257
176
|
sys.exit(0)
|
|
258
|
-
console.print(f"\n✅ Selected options: {'
|
|
177
|
+
console.print(f"\n✅ Selected options: {'\n'.join(selected_options)}", style="bold green")
|
|
259
178
|
proceed = questionary.confirm("🚀 Proceed with installation?", default=True).ask()
|
|
260
179
|
if not proceed:
|
|
261
180
|
console.print("❌ Installation cancelled.", style="bold red")
|
|
262
181
|
sys.exit(0)
|
|
263
|
-
execute_installations(selected_options)
|
|
182
|
+
execute_installations(selected_options=selected_options)
|
|
264
183
|
display_completion_message()
|
|
265
184
|
|
|
266
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()
|