machineconfig 1.94__py3-none-any.whl → 1.96__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/cluster/cloud_manager.py +445 -343
- machineconfig/cluster/data_transfer.py +63 -56
- machineconfig/cluster/distribute.py +284 -280
- machineconfig/cluster/file_manager.py +234 -237
- machineconfig/cluster/job_params.py +133 -133
- machineconfig/cluster/loader_runner.py +183 -149
- machineconfig/cluster/remote_machine.py +269 -252
- machineconfig/cluster/script_execution.py +215 -209
- machineconfig/cluster/script_notify_upon_completion.py +50 -43
- machineconfig/cluster/self_ssh.py +52 -54
- machineconfig/cluster/sessions_managers/__init__.py +0 -0
- machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
- machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
- machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
- machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
- machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
- machineconfig/cluster/sessions_managers/wt_local.py +494 -0
- machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
- machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
- machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
- machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
- machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
- machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
- machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
- machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
- machineconfig/cluster/templates/cli_click.py +0 -1
- machineconfig/cluster/templates/cli_gooey.py +102 -104
- machineconfig/cluster/templates/run_cloud.py +51 -51
- machineconfig/cluster/templates/run_cluster.py +103 -59
- machineconfig/cluster/templates/run_remote.py +57 -58
- machineconfig/cluster/templates/utils.py +69 -36
- machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/linux/msc/lid.sh +2 -4
- machineconfig/jobs/linux/msc/network.sh +3 -6
- machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/check_installations.py +258 -190
- machineconfig/jobs/python/create_bootable_media.py +7 -3
- machineconfig/jobs/python/python_cargo_build_share.py +50 -50
- machineconfig/jobs/python/python_ve_symlink.py +10 -10
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/api.py +3 -3
- machineconfig/jobs/python/vscode/link_ve.py +6 -6
- machineconfig/jobs/python/vscode/select_interpreter.py +13 -9
- machineconfig/jobs/python/vscode/sync_code.py +14 -11
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +5 -5
- machineconfig/jobs/python_custom_installers/dev/aider.py +4 -4
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +7 -6
- machineconfig/jobs/python_custom_installers/dev/brave.py +11 -7
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +7 -8
- machineconfig/jobs/python_custom_installers/dev/code.py +7 -5
- machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +4 -5
- machineconfig/jobs/python_custom_installers/dev/espanso.py +21 -17
- machineconfig/jobs/python_custom_installers/dev/goes.py +6 -12
- machineconfig/jobs/python_custom_installers/dev/lvim.py +7 -6
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +5 -5
- machineconfig/jobs/python_custom_installers/dev/redis.py +11 -7
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +12 -8
- machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
- machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +12 -7
- machineconfig/jobs/python_custom_installers/gh.py +10 -9
- machineconfig/jobs/python_custom_installers/hx.py +36 -65
- machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +4 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +3 -6
- machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +3 -6
- machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +4 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +6 -12
- machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +101 -33
- machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +5 -10
- machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +3 -6
- machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +5 -5
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/config.json +133 -9
- machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
- machineconfig/jobs/python_generic_installers/update.py +3 -0
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_linux_installers/config.json +42 -6
- machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
- machineconfig/jobs/python_windows_installers/config.json +6 -0
- machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
- machineconfig/profile/create.py +5 -5
- machineconfig/profile/create_hardlinks.py +5 -5
- machineconfig/profile/shell.py +69 -63
- machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/cloud/init.sh +9 -18
- machineconfig/scripts/linux/fire +5 -24
- machineconfig/scripts/linux/fire_agents +27 -0
- machineconfig/scripts/linux/share_cloud.sh +6 -12
- machineconfig/scripts/linux/wifi_conn +24 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/archive/im2text.py +28 -30
- machineconfig/scripts/python/archive/tmate_conn.py +10 -13
- machineconfig/scripts/python/archive/tmate_start.py +12 -16
- machineconfig/scripts/python/choose_wezterm_theme.py +12 -21
- machineconfig/scripts/python/cloud_copy.py +49 -104
- machineconfig/scripts/python/cloud_manager.py +77 -91
- machineconfig/scripts/python/cloud_mount.py +36 -46
- machineconfig/scripts/python/cloud_repo_sync.py +33 -79
- machineconfig/scripts/python/cloud_sync.py +35 -45
- machineconfig/scripts/python/croshell.py +70 -92
- machineconfig/scripts/python/devops.py +54 -113
- machineconfig/scripts/python/devops_add_identity.py +71 -109
- machineconfig/scripts/python/devops_add_ssh_key.py +42 -149
- machineconfig/scripts/python/devops_backup_retrieve.py +31 -119
- machineconfig/scripts/python/devops_devapps_install.py +6 -10
- machineconfig/scripts/python/devops_update_repos.py +5 -4
- machineconfig/scripts/python/dotfile.py +10 -7
- machineconfig/scripts/python/fire_agents.py +69 -0
- machineconfig/scripts/python/fire_jobs.py +117 -78
- machineconfig/scripts/python/ftpx.py +8 -8
- machineconfig/scripts/python/get_zellij_cmd.py +3 -3
- machineconfig/scripts/python/gh_models.py +6 -4
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/cloud_helpers.py +49 -46
- machineconfig/scripts/python/helpers/helpers2.py +26 -39
- machineconfig/scripts/python/helpers/helpers4.py +23 -35
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +33 -67
- machineconfig/scripts/python/mount_nfs.py +8 -11
- machineconfig/scripts/python/mount_nw_drive.py +4 -4
- machineconfig/scripts/python/mount_ssh.py +2 -2
- machineconfig/scripts/python/onetimeshare.py +56 -57
- machineconfig/scripts/python/pomodoro.py +55 -55
- machineconfig/scripts/python/repos.py +72 -49
- machineconfig/scripts/python/scheduler.py +70 -53
- machineconfig/scripts/python/snapshot.py +21 -24
- machineconfig/scripts/python/start_slidev.py +6 -5
- machineconfig/scripts/python/start_terminals.py +3 -1
- machineconfig/scripts/python/viewer.py +5 -4
- machineconfig/scripts/python/viewer_template.py +138 -140
- machineconfig/scripts/python/wifi_conn.py +416 -62
- machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
- machineconfig/scripts/windows/fire.ps1 +27 -15
- machineconfig/settings/linters/.pylintrc +6 -7
- machineconfig/settings/lvim/windows/config.lua +0 -0
- machineconfig/settings/shells/bash/init.sh +6 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
- machineconfig/settings/shells/pwsh/init.ps1 +6 -6
- machineconfig/settings/shells/wt/settings.json +51 -266
- machineconfig/setup_linux/nix/cli_installation.sh +9 -18
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +3 -6
- machineconfig/setup_linux/web_shortcuts/all.sh +5 -10
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +7 -14
- machineconfig/setup_linux/web_shortcuts/croshell.sh +6 -12
- machineconfig/setup_linux/web_shortcuts/interactive.sh +39 -70
- machineconfig/setup_linux/web_shortcuts/ssh.sh +8 -16
- machineconfig/setup_linux/web_shortcuts/update_system.sh +7 -14
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +27 -21
- machineconfig/utils/ai/browser_user_wrapper.py +60 -45
- machineconfig/utils/ai/generate_file_checklist.py +4 -7
- machineconfig/utils/ai/url2md.py +15 -7
- machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
- machineconfig/utils/cloud/onedrive/transaction.py +796 -0
- machineconfig/utils/{utils_code.py → code.py} +25 -22
- machineconfig/utils/installer.py +81 -44
- machineconfig/utils/installer_utils/installer_abc.py +7 -6
- machineconfig/utils/installer_utils/installer_class.py +44 -25
- machineconfig/utils/io_save.py +107 -0
- machineconfig/utils/{utils_links.py → links.py} +28 -35
- machineconfig/utils/{utils_options.py → options.py} +14 -28
- machineconfig/utils/path.py +112 -0
- machineconfig/utils/path_reduced.py +608 -0
- machineconfig/utils/procs.py +134 -73
- machineconfig/utils/scheduling.py +312 -222
- machineconfig/utils/utils.py +19 -26
- machineconfig/utils/utils2.py +42 -0
- machineconfig/utils/utils5.py +84 -0
- machineconfig/utils/ve.py +49 -103
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/METADATA +5 -3
- machineconfig-1.96.dist-info/RECORD +437 -0
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/WHEEL +1 -1
- machineconfig/cluster/session_managers.py +0 -183
- machineconfig/cluster/templates/f.py +0 -4
- machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
- machineconfig/jobs/python/checkout_version.py +0 -123
- machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
- machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
- machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
- machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
- machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
- machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
- machineconfig/utils/utils_path.py +0 -151
- machineconfig/utils/ve_utils/ve1.py +0 -111
- machineconfig/utils/ve_utils/ve2.py +0 -142
- machineconfig-1.94.dist-info/RECORD +0 -710
- {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
|
@@ -4,6 +4,7 @@ import os
|
|
|
4
4
|
import shutil
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
import platform
|
|
7
|
+
import subprocess
|
|
7
8
|
from typing import Optional
|
|
8
9
|
|
|
9
10
|
|
|
@@ -17,14 +18,11 @@ config_dict = {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
|
|
20
|
-
def
|
|
21
|
+
def install_linux(version: Optional[str] = None):
|
|
22
|
+
"""Install Cursor on Linux systems."""
|
|
21
23
|
_ = version
|
|
22
|
-
assert platform.system() == "Linux", "This script is intended for Linux systems only."
|
|
23
|
-
# assert flvour is debiean/mint or ubuntu, "This script is intended for Debian-based systems only."
|
|
24
24
|
# Variables
|
|
25
|
-
# username = os.getenv("USER")
|
|
26
25
|
home = str(Path.home())
|
|
27
|
-
# appimage_src = f"{home}/Downloads/Cursor-0.48.8-x86_64.AppImage"
|
|
28
26
|
# search for anything that has Cursor in the name and ends with .AppImage
|
|
29
27
|
appimage_src = next(Path(home).joinpath("Downloads").glob("**/Cursor*.AppImage"), None)
|
|
30
28
|
if appimage_src is None:
|
|
@@ -63,5 +61,68 @@ Categories=Development;IDE;
|
|
|
63
61
|
print("Cursor is now available from the start menu.")
|
|
64
62
|
|
|
65
63
|
|
|
64
|
+
def install_windows(version: Optional[str] = None):
|
|
65
|
+
"""Install Cursor on Windows systems."""
|
|
66
|
+
_ = version
|
|
67
|
+
home = Path.home()
|
|
68
|
+
downloads_dir = home / "Downloads"
|
|
69
|
+
|
|
70
|
+
# Search for Cursor installer in Downloads
|
|
71
|
+
cursor_installer = None
|
|
72
|
+
for pattern in ["**/Cursor*.exe", "**/cursor*.exe"]:
|
|
73
|
+
found = list(downloads_dir.glob(pattern))
|
|
74
|
+
if found:
|
|
75
|
+
cursor_installer = found[0]
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
if cursor_installer is None:
|
|
79
|
+
raise FileNotFoundError("Cursor installer (.exe) not found in Downloads folder.")
|
|
80
|
+
|
|
81
|
+
print(f"Cursor installer found: {cursor_installer}")
|
|
82
|
+
|
|
83
|
+
# Run the installer silently
|
|
84
|
+
try:
|
|
85
|
+
print("Running Cursor installer...")
|
|
86
|
+
subprocess.run([str(cursor_installer), "/SILENT"],
|
|
87
|
+
capture_output=True, text=True, check=True)
|
|
88
|
+
print("Cursor installer completed successfully.")
|
|
89
|
+
except subprocess.CalledProcessError as e:
|
|
90
|
+
print(f"Installer failed with exit code {e.returncode}")
|
|
91
|
+
print(f"Error output: {e.stderr}")
|
|
92
|
+
# Try alternative silent install flags
|
|
93
|
+
try:
|
|
94
|
+
print("Trying alternative silent install...")
|
|
95
|
+
subprocess.run([str(cursor_installer), "/S"],
|
|
96
|
+
capture_output=True, text=True, check=True)
|
|
97
|
+
print("Cursor installer completed successfully with /S flag.")
|
|
98
|
+
except subprocess.CalledProcessError as e2:
|
|
99
|
+
print(f"Alternative installer also failed with exit code {e2.returncode}")
|
|
100
|
+
print(f"Error output: {e2.stderr}")
|
|
101
|
+
# If silent install fails, run normally and let user handle it
|
|
102
|
+
print("Running installer in normal mode (user interaction required)...")
|
|
103
|
+
subprocess.run([str(cursor_installer)])
|
|
104
|
+
|
|
105
|
+
# Clean up installer file
|
|
106
|
+
try:
|
|
107
|
+
cursor_installer.unlink()
|
|
108
|
+
print(f"Installer file removed: {cursor_installer}")
|
|
109
|
+
except OSError as e:
|
|
110
|
+
print(f"Warning: Could not remove installer file: {e}")
|
|
111
|
+
|
|
112
|
+
print("Cursor installation completed. Check your Start Menu or Desktop for Cursor.")
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def main(version: Optional[str] = None):
|
|
116
|
+
"""Main installation function that handles both Linux and Windows."""
|
|
117
|
+
system = platform.system()
|
|
118
|
+
|
|
119
|
+
if system == "Linux":
|
|
120
|
+
install_linux(version)
|
|
121
|
+
elif system == "Windows":
|
|
122
|
+
install_windows(version)
|
|
123
|
+
else:
|
|
124
|
+
raise OSError(f"Unsupported operating system: {system}. This script supports Linux and Windows only.")
|
|
125
|
+
|
|
126
|
+
|
|
66
127
|
if __name__ == "__main__":
|
|
67
128
|
main()
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Installer
|
|
3
3
|
"""
|
|
4
4
|
# from machineconfig.utils.installer import get_latest_release
|
|
5
|
-
# from crocodile.meta import Terminal
|
|
6
5
|
from typing import Optional
|
|
7
6
|
|
|
8
7
|
# https://docs.docker.com/desktop/install/ubuntu/
|
|
@@ -26,11 +25,11 @@ config_dict = {
|
|
|
26
25
|
|
|
27
26
|
def main(version: Optional[str]):
|
|
28
27
|
print(f"""
|
|
29
|
-
{'=' *
|
|
28
|
+
{'=' * 150}
|
|
30
29
|
🐳 DOCKER DESKTOP | Installing Docker Desktop for Ubuntu
|
|
31
30
|
🔄 Version: {'latest' if version is None else version}
|
|
32
31
|
📚 Source: https://docs.docker.com/desktop/install/ubuntu/
|
|
33
|
-
{'=' *
|
|
32
|
+
{'=' * 150}
|
|
34
33
|
""")
|
|
35
34
|
|
|
36
35
|
_ = version
|
|
@@ -62,12 +61,12 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
|
|
|
62
61
|
|
|
63
62
|
"""
|
|
64
63
|
print(f"""
|
|
65
|
-
{'=' *
|
|
64
|
+
{'=' * 150}
|
|
66
65
|
ℹ️ INFO | After installation:
|
|
67
66
|
🔹 Run 'sudo docker run hello-world' to verify installation
|
|
68
67
|
🔹 Add your user to the docker group with 'sudo usermod -aG docker $USER'
|
|
69
68
|
🔹 Log out and back in to apply group changes
|
|
70
|
-
{'=' *
|
|
69
|
+
{'=' * 150}
|
|
71
70
|
""")
|
|
72
71
|
|
|
73
72
|
return code
|
|
@@ -18,11 +18,11 @@ config_dict = {
|
|
|
18
18
|
|
|
19
19
|
def main(version: Optional[str]):
|
|
20
20
|
print(f"""
|
|
21
|
-
{'=' *
|
|
21
|
+
{'=' * 150}
|
|
22
22
|
⚡ ESPANSO INSTALLER | Setting up text expansion tool
|
|
23
23
|
🔄 Version: {'latest' if version is None else version}
|
|
24
24
|
🔗 Source: https://github.com/espanso/espanso
|
|
25
|
-
{'=' *
|
|
25
|
+
{'=' * 150}
|
|
26
26
|
""")
|
|
27
27
|
|
|
28
28
|
_ = version
|
|
@@ -30,25 +30,29 @@ def main(version: Optional[str]):
|
|
|
30
30
|
config_dict["repo_url"] = "https://github.com/espanso/espanso"
|
|
31
31
|
if platform.system() == "Windows":
|
|
32
32
|
print("🪟 Installing Espanso on Windows...")
|
|
33
|
-
elif platform.system()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
34
|
+
if platform.system() == "Linux":
|
|
35
|
+
import os
|
|
36
|
+
env = os.environ["XDG_SESSION_TYPE"]
|
|
37
|
+
if env == "wayland":
|
|
38
|
+
print(f"""
|
|
39
|
+
{'=' * 150}
|
|
39
40
|
🖥️ DISPLAY SERVER | Wayland detected
|
|
40
41
|
📦 Using Wayland-specific package
|
|
41
|
-
{'=' *
|
|
42
|
+
{'=' * 150}
|
|
42
43
|
""")
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{'=' *
|
|
44
|
+
config_dict["filename_template_linux_amd_64"] = "espanso-debian-wayland-amd64.deb"
|
|
45
|
+
else:
|
|
46
|
+
print(f"""
|
|
47
|
+
{'=' * 150}
|
|
47
48
|
🖥️ DISPLAY SERVER | X11 detected
|
|
48
49
|
📦 Using X11-specific package
|
|
49
|
-
{'=' *
|
|
50
|
+
{'=' * 150}
|
|
50
51
|
""")
|
|
51
|
-
|
|
52
|
+
config_dict["filename_template_linux_amd_64"] = "espanso-debian-x11-amd64.deb"
|
|
53
|
+
else: # Darwin/macOS
|
|
54
|
+
print("🍎 Installing Espanso on macOS...")
|
|
55
|
+
config_dict["filename_template_linux_amd_64"] = "Espanso.dmg"
|
|
52
56
|
else:
|
|
53
57
|
error_msg = f"Unsupported platform: {platform.system()}"
|
|
54
58
|
print(f"""
|
|
@@ -70,13 +74,13 @@ espanso install actually-all-emojis
|
|
|
70
74
|
"""
|
|
71
75
|
|
|
72
76
|
print(f"""
|
|
73
|
-
{'=' *
|
|
77
|
+
{'=' * 150}
|
|
74
78
|
✅ SUCCESS | Espanso installation completed
|
|
75
79
|
📋 Post-installation steps:
|
|
76
80
|
1️⃣ Register Espanso as a service
|
|
77
81
|
2️⃣ Start the Espanso service
|
|
78
82
|
3️⃣ Install the emoji package
|
|
79
|
-
{'=' *
|
|
83
|
+
{'=' * 150}
|
|
80
84
|
""")
|
|
81
85
|
|
|
82
86
|
return config
|
|
@@ -3,7 +3,6 @@ natural language to API
|
|
|
3
3
|
https://github.com/ShishirPatil/gorilla
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from machineconfig.utils.ve import get_ve_install_script
|
|
7
6
|
# import subprocess
|
|
8
7
|
|
|
9
8
|
config_dict = {
|
|
@@ -20,34 +19,29 @@ ve_name = "goex"
|
|
|
20
19
|
|
|
21
20
|
def main():
|
|
22
21
|
print(f"""
|
|
23
|
-
{'=' *
|
|
22
|
+
{'=' * 150}
|
|
24
23
|
🦍 GORILLA INSTALLER | Natural language to API converter
|
|
25
24
|
🌐 Source: https://github.com/ShishirPatil/gorilla
|
|
26
25
|
📦 Virtual Environment: {ve_name}
|
|
27
|
-
{'=' *
|
|
26
|
+
{'=' * 150}
|
|
28
27
|
""")
|
|
29
28
|
|
|
30
29
|
print("🔄 Preparing installation script...")
|
|
31
|
-
install_script =
|
|
32
|
-
delete_if_exists=True)
|
|
30
|
+
install_script = """
|
|
33
31
|
|
|
34
|
-
install_script += f"""
|
|
35
|
-
|
|
36
|
-
. $HOME/scripts/activate_ve {ve_name}
|
|
37
32
|
cd ~/code/foreign
|
|
38
33
|
git clone https://github.com/ShishirPatil/gorilla --depth 1
|
|
39
34
|
cd gorilla/goex
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
uv sync
|
|
42
36
|
"""
|
|
43
37
|
|
|
44
38
|
print(f"""
|
|
45
|
-
{'=' *
|
|
39
|
+
{'=' * 150}
|
|
46
40
|
📋 INSTALLATION STEPS:
|
|
47
41
|
1️⃣ Creating Python 3.11 virtual environment: {ve_name}
|
|
48
42
|
2️⃣ Cloning Gorilla repository to ~/code/foreign
|
|
49
43
|
3️⃣ Installing Gorilla in development mode
|
|
50
|
-
{'=' *
|
|
44
|
+
{'=' * 150}
|
|
51
45
|
|
|
52
46
|
✅ Installation script prepared successfully!
|
|
53
47
|
""")
|
|
@@ -23,11 +23,11 @@ config_dict = {
|
|
|
23
23
|
|
|
24
24
|
def main(version: Optional[str]):
|
|
25
25
|
print(f"""
|
|
26
|
-
{'=' *
|
|
26
|
+
{'=' * 150}
|
|
27
27
|
🌙 LUNARVIM INSTALLER | Setting up Neovim-based IDE
|
|
28
28
|
🔄 Version: {'latest' if version is None else version}
|
|
29
29
|
📚 Branch: release-1.4/neovim-0.9
|
|
30
|
-
{'=' *
|
|
30
|
+
{'=' * 150}
|
|
31
31
|
""")
|
|
32
32
|
|
|
33
33
|
_ = version
|
|
@@ -38,8 +38,9 @@ def main(version: Optional[str]):
|
|
|
38
38
|
pwsh -c "`$LV_BRANCH='release-1.4/neovim-0.9'; iwr https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.4/neovim-0.9/utils/installer/install.ps1 -UseBasicParsing | iex"
|
|
39
39
|
|
|
40
40
|
"""
|
|
41
|
-
elif platform.system()
|
|
42
|
-
|
|
41
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
42
|
+
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
43
|
+
print(f"🐧 Installing LunarVim on {system_name}...")
|
|
43
44
|
program = """
|
|
44
45
|
|
|
45
46
|
LV_BRANCH='release-1.4/neovim-0.9' bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.4/neovim-0.9/utils/installer/install.sh)
|
|
@@ -55,14 +56,14 @@ LV_BRANCH='release-1.4/neovim-0.9' bash <(curl -s https://raw.githubusercontent.
|
|
|
55
56
|
raise NotImplementedError(error_msg)
|
|
56
57
|
|
|
57
58
|
print(f"""
|
|
58
|
-
{'=' *
|
|
59
|
+
{'=' * 150}
|
|
59
60
|
ℹ️ INFO | LunarVim features:
|
|
60
61
|
📝 IDE-like experience for Neovim
|
|
61
62
|
🔌 Built-in plugin management
|
|
62
63
|
🛠️ LSP configuration out of the box
|
|
63
64
|
🔍 Powerful fuzzy finding
|
|
64
65
|
⚙️ Simple and unified configuration
|
|
65
|
-
{'=' *
|
|
66
|
+
{'=' * 150}
|
|
66
67
|
|
|
67
68
|
⚠️ NOTE: The installer will prompt for user input during installation.
|
|
68
69
|
""")
|
|
@@ -17,11 +17,11 @@ config_dict = {
|
|
|
17
17
|
|
|
18
18
|
def main(version: Optional[str]):
|
|
19
19
|
print(f"""
|
|
20
|
-
{'=' *
|
|
20
|
+
{'=' * 150}
|
|
21
21
|
🔤 NERD FONTS INSTALLER | Installing programming fonts with icons
|
|
22
22
|
💻 Platform: {platform.system()}
|
|
23
23
|
🔄 Version: {'latest' if version is None else version}
|
|
24
|
-
{'=' *
|
|
24
|
+
{'=' * 150}
|
|
25
25
|
""")
|
|
26
26
|
|
|
27
27
|
_ = version
|
|
@@ -34,7 +34,7 @@ def main(version: Optional[str]):
|
|
|
34
34
|
{'⚠️' * 20}
|
|
35
35
|
""")
|
|
36
36
|
raise NotImplementedError(error_msg)
|
|
37
|
-
elif platform.system()
|
|
37
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
38
38
|
print("🐧 Installing Nerd Fonts on Linux using installation script...")
|
|
39
39
|
import machineconfig.jobs.python_custom_installers as module
|
|
40
40
|
from pathlib import Path
|
|
@@ -49,13 +49,13 @@ def main(version: Optional[str]):
|
|
|
49
49
|
raise NotImplementedError(error_msg)
|
|
50
50
|
|
|
51
51
|
print(f"""
|
|
52
|
-
{'=' *
|
|
52
|
+
{'=' * 150}
|
|
53
53
|
ℹ️ INFO | Nerd Fonts features:
|
|
54
54
|
🎨 Programming fonts patched with icons
|
|
55
55
|
🔣 Includes icons from popular sets (FontAwesome, Devicons, etc.)
|
|
56
56
|
🖥️ Perfect for terminals and coding environments
|
|
57
57
|
🧰 Works with many terminal applications and editors
|
|
58
|
-
{'=' *
|
|
58
|
+
{'=' * 150}
|
|
59
59
|
""")
|
|
60
60
|
|
|
61
61
|
# _res = Terminal(stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).run_script(script=program, shell="default").print(desc="Running custom installer", capture=True)
|
|
@@ -17,11 +17,11 @@ config_dict = {
|
|
|
17
17
|
|
|
18
18
|
def main(version: Optional[str]):
|
|
19
19
|
print(f"""
|
|
20
|
-
{'=' *
|
|
20
|
+
{'=' * 150}
|
|
21
21
|
🗃️ REDIS INSTALLER | Setting up in-memory database
|
|
22
22
|
💻 Platform: {platform.system()}
|
|
23
23
|
🔄 Version: {'latest' if version is None else version}
|
|
24
|
-
{'=' *
|
|
24
|
+
{'=' * 150}
|
|
25
25
|
""")
|
|
26
26
|
|
|
27
27
|
_ = version
|
|
@@ -34,11 +34,15 @@ def main(version: Optional[str]):
|
|
|
34
34
|
{'⚠️' * 20}
|
|
35
35
|
""")
|
|
36
36
|
raise NotImplementedError(error_msg)
|
|
37
|
-
elif platform.system()
|
|
38
|
-
|
|
37
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
38
|
+
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
39
|
+
print(f"🐧 Installing Redis on {system_name} using installation script...")
|
|
39
40
|
import machineconfig.jobs.python_custom_installers as module
|
|
40
41
|
from pathlib import Path
|
|
41
|
-
|
|
42
|
+
if platform.system() == "Linux":
|
|
43
|
+
program = Path(module.__file__).parent.joinpath("scripts/linux/redis.sh").read_text(encoding="utf-8")
|
|
44
|
+
else: # Darwin/macOS
|
|
45
|
+
program = "brew install redis"
|
|
42
46
|
else:
|
|
43
47
|
error_msg = f"Unsupported platform: {platform.system()}"
|
|
44
48
|
print(f"""
|
|
@@ -49,14 +53,14 @@ def main(version: Optional[str]):
|
|
|
49
53
|
raise NotImplementedError(error_msg)
|
|
50
54
|
|
|
51
55
|
print(f"""
|
|
52
|
-
{'=' *
|
|
56
|
+
{'=' * 150}
|
|
53
57
|
ℹ️ INFO | Redis features:
|
|
54
58
|
⚡ In-memory data structure store
|
|
55
59
|
🔑 Key-value database with optional persistence
|
|
56
60
|
🚀 Sub-millisecond response times
|
|
57
61
|
💾 Supports strings, lists, sets, sorted sets, hashes
|
|
58
62
|
🔄 Built-in replication and Lua scripting
|
|
59
|
-
{'=' *
|
|
63
|
+
{'=' * 150}
|
|
60
64
|
""")
|
|
61
65
|
|
|
62
66
|
# _res = Terminal(stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).run_script(script=program, shell="default").print(desc="Running custom installer", capture=True)
|
|
@@ -17,11 +17,11 @@ config_dict = {
|
|
|
17
17
|
|
|
18
18
|
def main(version: Optional[str]):
|
|
19
19
|
print(f"""
|
|
20
|
-
{'═' *
|
|
20
|
+
{'═' * 150}
|
|
21
21
|
🖥️ WEZTERM INSTALLER | Modern, GPU-accelerated terminal emulator
|
|
22
22
|
💻 Platform: {platform.system()}
|
|
23
23
|
🔄 Version: {'latest' if version is None else version}
|
|
24
|
-
{'═' *
|
|
24
|
+
{'═' * 150}
|
|
25
25
|
""")
|
|
26
26
|
|
|
27
27
|
_ = version
|
|
@@ -34,13 +34,17 @@ def main(version: Optional[str]):
|
|
|
34
34
|
{'⚠️' * 20}
|
|
35
35
|
""")
|
|
36
36
|
raise NotImplementedError(error_msg)
|
|
37
|
-
elif platform.system()
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
38
|
+
system_name = "LINUX" if platform.system() == "Linux" else "MACOS"
|
|
39
|
+
print(f"""
|
|
40
|
+
🐧 {system_name} SETUP | Installing WezTerm terminal emulator...
|
|
40
41
|
""")
|
|
41
42
|
import machineconfig.jobs.python_custom_installers as module
|
|
42
43
|
from pathlib import Path
|
|
43
|
-
|
|
44
|
+
if platform.system() == "Linux":
|
|
45
|
+
program = Path(module.__file__).parent.joinpath("scripts/linux/wezterm.sh").read_text(encoding="utf-8")
|
|
46
|
+
else: # Darwin/macOS
|
|
47
|
+
program = "brew install --cask wezterm"
|
|
44
48
|
else:
|
|
45
49
|
error_msg = f"Unsupported platform: {platform.system()}"
|
|
46
50
|
print(f"""
|
|
@@ -51,7 +55,7 @@ def main(version: Optional[str]):
|
|
|
51
55
|
raise NotImplementedError(error_msg)
|
|
52
56
|
|
|
53
57
|
print(f"""
|
|
54
|
-
{'═' *
|
|
58
|
+
{'═' * 150}
|
|
55
59
|
ℹ️ INFO | WezTerm Features:
|
|
56
60
|
⚡ GPU-accelerated rendering
|
|
57
61
|
🎨 Full color emoji support
|
|
@@ -59,7 +63,7 @@ def main(version: Optional[str]):
|
|
|
59
63
|
⚙️ Lua configuration
|
|
60
64
|
📦 Cross-platform support
|
|
61
65
|
🔌 Plugin system
|
|
62
|
-
{'═' *
|
|
66
|
+
{'═' * 150}
|
|
63
67
|
""")
|
|
64
68
|
|
|
65
69
|
# _res = Terminal(stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).run_script(script=program, shell="default").print(desc="Running custom installer", capture=True)
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import requests
|
|
3
|
+
import tempfile
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
config_dict = {
|
|
9
|
+
"repo_url": "CUSTOM",
|
|
10
|
+
"doc": "winget installer",
|
|
11
|
+
"filename_template_windows_amd_64": "",
|
|
12
|
+
"filename_template_linux_amd_64": "",
|
|
13
|
+
"strip_v": False,
|
|
14
|
+
"exe_name": "winget"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def is_winget_available() -> bool:
|
|
19
|
+
"""
|
|
20
|
+
Check if winget is available in the system PATH.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
bool: True if winget is available, False otherwise
|
|
24
|
+
"""
|
|
25
|
+
try:
|
|
26
|
+
result = subprocess.run(
|
|
27
|
+
["winget", "--version"],
|
|
28
|
+
capture_output=True,
|
|
29
|
+
text=True,
|
|
30
|
+
timeout=10
|
|
31
|
+
)
|
|
32
|
+
return result.returncode == 0
|
|
33
|
+
except (subprocess.TimeoutExpired, FileNotFoundError, subprocess.SubprocessError):
|
|
34
|
+
return False
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_latest_winget_release_url() -> Optional[str]:
|
|
38
|
+
"""
|
|
39
|
+
Get the download URL for the latest winget .msixbundle file from GitHub releases.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Optional[str]: URL to the latest .msixbundle file, or None if not found
|
|
43
|
+
"""
|
|
44
|
+
try:
|
|
45
|
+
# Get the latest release information from GitHub API
|
|
46
|
+
api_url = "https://api.github.com/repos/microsoft/winget-cli/releases/latest"
|
|
47
|
+
headers = {"Accept": "application/vnd.github.v3+json"}
|
|
48
|
+
|
|
49
|
+
response = requests.get(api_url, headers=headers, timeout=30)
|
|
50
|
+
response.raise_for_status()
|
|
51
|
+
|
|
52
|
+
release_data = response.json()
|
|
53
|
+
|
|
54
|
+
# Look for .msixbundle file in assets
|
|
55
|
+
for asset in release_data.get("assets", []):
|
|
56
|
+
if asset["name"].endswith(".msixbundle"):
|
|
57
|
+
return asset["browser_download_url"]
|
|
58
|
+
|
|
59
|
+
return None
|
|
60
|
+
except (requests.RequestException, KeyError, ValueError) as e:
|
|
61
|
+
print(f"Error fetching latest winget release: {e}")
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def download_file(url: str, destination: Path) -> bool:
|
|
66
|
+
"""
|
|
67
|
+
Download a file from URL to destination.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
url: URL to download from
|
|
71
|
+
destination: Path where to save the file
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
bool: True if download successful, False otherwise
|
|
75
|
+
"""
|
|
76
|
+
try:
|
|
77
|
+
response = requests.get(url, stream=True, timeout=60)
|
|
78
|
+
response.raise_for_status()
|
|
79
|
+
|
|
80
|
+
with open(destination, 'wb') as f:
|
|
81
|
+
for chunk in response.iter_content(chunk_size=8192):
|
|
82
|
+
if chunk:
|
|
83
|
+
f.write(chunk)
|
|
84
|
+
|
|
85
|
+
return True
|
|
86
|
+
except (requests.RequestException, IOError) as e:
|
|
87
|
+
print(f"Error downloading file: {e}")
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def install_msix_package(package_path: Path) -> bool:
|
|
92
|
+
"""
|
|
93
|
+
Install an MSIX package using PowerShell.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
package_path: Path to the .msixbundle file
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
bool: True if installation successful, False otherwise
|
|
100
|
+
"""
|
|
101
|
+
try:
|
|
102
|
+
# Use PowerShell to install the MSIX package
|
|
103
|
+
powershell_cmd = [
|
|
104
|
+
"powershell.exe",
|
|
105
|
+
"-ExecutionPolicy", "Bypass",
|
|
106
|
+
"-Command",
|
|
107
|
+
f"Add-AppxPackage -Path '{package_path}'"
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
result = subprocess.run(
|
|
111
|
+
powershell_cmd,
|
|
112
|
+
capture_output=True,
|
|
113
|
+
text=True,
|
|
114
|
+
timeout=300 # 5 minutes timeout
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if result.returncode == 0:
|
|
118
|
+
print("Winget installed successfully!")
|
|
119
|
+
return True
|
|
120
|
+
else:
|
|
121
|
+
print(f"Installation failed with return code {result.returncode}")
|
|
122
|
+
print(f"Error output: {result.stderr}")
|
|
123
|
+
return False
|
|
124
|
+
|
|
125
|
+
except (subprocess.SubprocessError, subprocess.TimeoutExpired) as e:
|
|
126
|
+
print(f"Error installing MSIX package: {e}")
|
|
127
|
+
return False
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def ensure_winget_available() -> bool:
|
|
131
|
+
"""
|
|
132
|
+
Ensure winget is available on the system. If not available, download and install it.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
bool: True if winget is available (either was already installed or successfully installed),
|
|
136
|
+
False if installation failed
|
|
137
|
+
"""
|
|
138
|
+
# First check if winget is already available
|
|
139
|
+
if is_winget_available():
|
|
140
|
+
print("Winget is already available on the system.")
|
|
141
|
+
return True
|
|
142
|
+
|
|
143
|
+
print("Winget not found. Attempting to download and install...")
|
|
144
|
+
|
|
145
|
+
# Get the latest release URL
|
|
146
|
+
download_url = get_latest_winget_release_url()
|
|
147
|
+
if not download_url:
|
|
148
|
+
print("Could not find the latest winget release URL.")
|
|
149
|
+
return False
|
|
150
|
+
|
|
151
|
+
print(f"Found latest winget release: {download_url}")
|
|
152
|
+
|
|
153
|
+
# Create temporary directory for download
|
|
154
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
155
|
+
temp_path = Path(temp_dir)
|
|
156
|
+
|
|
157
|
+
# Extract filename from URL
|
|
158
|
+
filename = download_url.split("/")[-1]
|
|
159
|
+
if not filename.endswith(".msixbundle"):
|
|
160
|
+
filename = "winget-latest.msixbundle"
|
|
161
|
+
|
|
162
|
+
package_path = temp_path / filename
|
|
163
|
+
|
|
164
|
+
# Download the package
|
|
165
|
+
print(f"Downloading winget package to {package_path}...")
|
|
166
|
+
if not download_file(download_url, package_path):
|
|
167
|
+
print("Failed to download winget package.")
|
|
168
|
+
return False
|
|
169
|
+
|
|
170
|
+
print("Download completed. Installing winget...")
|
|
171
|
+
|
|
172
|
+
# Install the package
|
|
173
|
+
if not install_msix_package(package_path):
|
|
174
|
+
print("Failed to install winget package.")
|
|
175
|
+
return False
|
|
176
|
+
|
|
177
|
+
# Verify installation
|
|
178
|
+
if is_winget_available():
|
|
179
|
+
print("Winget has been successfully installed and is now available!")
|
|
180
|
+
return True
|
|
181
|
+
else:
|
|
182
|
+
print("Installation completed but winget is still not available. You may need to restart your terminal or add it to PATH.")
|
|
183
|
+
return False
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if __name__ == "__main__":
|
|
187
|
+
# Example usage
|
|
188
|
+
print("=== Winget Installation ===\n")
|
|
189
|
+
|
|
190
|
+
if ensure_winget_available():
|
|
191
|
+
print("Winget is ready to use!")
|
|
192
|
+
else:
|
|
193
|
+
print("Failed to ensure winget availability.")
|
|
194
|
+
|