machineconfig 7.50__py3-none-any.whl → 8.12__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/remote/cloud_manager.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +23 -11
- machineconfig/cluster/sessions_managers/wt_local_manager.py +22 -19
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/installer_data.json +1185 -165
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +52 -84
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +16 -12
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +21 -22
- machineconfig/profile/create_links_export.py +25 -11
- machineconfig/profile/create_shell_profile.py +14 -3
- machineconfig/profile/mapper.toml +8 -6
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +20 -21
- machineconfig/scripts/python/agents.py +74 -50
- machineconfig/scripts/python/ai/initai.py +1 -1
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/cloud.py +6 -6
- machineconfig/scripts/python/croshell.py +67 -60
- machineconfig/scripts/python/devops.py +41 -21
- machineconfig/scripts/python/devops_navigator.py +0 -4
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
- machineconfig/scripts/python/fire_jobs.py +95 -67
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +9 -7
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +21 -8
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +0 -12
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +30 -11
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +9 -2
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +8 -4
- machineconfig/scripts/python/helpers_agents/templates/template.sh +18 -8
- machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
- machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
- machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
- machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
- machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +19 -25
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +22 -13
- machineconfig/scripts/python/helpers_devops/cli_nw.py +113 -26
- machineconfig/scripts/python/helpers_devops/cli_repos.py +37 -11
- machineconfig/scripts/python/helpers_devops/cli_self.py +84 -39
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +9 -9
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +13 -12
- machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +4 -4
- machineconfig/scripts/python/helpers_devops/devops_status.py +7 -19
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/helpers_fire_command/file_wrangler.py +2 -19
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +25 -15
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +58 -1
- machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/helpers_repos/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -5
- machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
- machineconfig/scripts/python/helpers_repos/record.py +2 -1
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +17 -26
- machineconfig/scripts/python/{machineconfig.py → mcfg_entry.py} +4 -5
- machineconfig/scripts/python/msearch.py +57 -6
- machineconfig/scripts/python/sessions.py +100 -31
- machineconfig/scripts/python/terminal.py +26 -17
- machineconfig/scripts/python/utils.py +17 -15
- machineconfig/scripts/windows/wrap_mcfg.ps1 +6 -3
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/shells/bash/init.sh +29 -2
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -2
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +282 -95
- machineconfig/settings/shells/pwsh/init.ps1 +1 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/zsh/init.sh +1 -8
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/wt/__init__.py +0 -0
- machineconfig/settings/yazi/init.lua +49 -24
- machineconfig/settings/yazi/keymap_linux.toml +19 -4
- machineconfig/settings/yazi/keymap_windows.toml +0 -1
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +29 -5
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +1 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +12 -10
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +2 -3
- machineconfig/setup_windows/__init__.py +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +12 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -4
- machineconfig/utils/code.py +39 -11
- machineconfig/utils/files/headers.py +2 -2
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +43 -100
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -59
- machineconfig/utils/io.py +0 -1
- machineconfig/utils/links.py +2 -2
- machineconfig/utils/meta.py +30 -16
- machineconfig/utils/options.py +42 -24
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +42 -20
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +20 -53
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +159 -418
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +6 -1
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/RECORD +265 -215
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +2 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/define.py +0 -31
- machineconfig/scripts/python/explore.py +0 -49
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -246
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfag +0 -17
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfrga +0 -21
- machineconfig/scripts/python/helpers_msearch/scripts_linux/skrg +0 -4
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfb.ps1 +0 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfrga.bat +0 -20
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -17
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/utils/installer_utils/installer.py +0 -221
- machineconfig-7.50.dist-info/METADATA +0 -92
- /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- /machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- /machineconfig/scripts/python/{nw → ai/utils}/__init__.py +0 -0
- /machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import platform
|
|
3
|
+
import stat
|
|
4
|
+
import shutil
|
|
5
|
+
import subprocess
|
|
6
|
+
from pathlib import Path, PureWindowsPath
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _ensure_relative_path(requested: Path | str) -> Path:
|
|
10
|
+
path = Path(requested)
|
|
11
|
+
if path.is_absolute():
|
|
12
|
+
raise ValueError("paths must be relative to the home directory")
|
|
13
|
+
if any(part == ".." for part in path.parts):
|
|
14
|
+
raise ValueError("paths must stay within the home directory")
|
|
15
|
+
return path
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _remove_path(path: Path) -> None:
|
|
19
|
+
if path.is_symlink() or path.is_file():
|
|
20
|
+
path.unlink()
|
|
21
|
+
return
|
|
22
|
+
shutil.rmtree(path)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _ensure_wsl_environment() -> None:
|
|
26
|
+
if os.environ.get("WSL_DISTRO_NAME"):
|
|
27
|
+
return
|
|
28
|
+
if "microsoft" in platform.release().lower():
|
|
29
|
+
return
|
|
30
|
+
raise RuntimeError("copy_when_inside_wsl must run inside WSL")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _ensure_windows_environment() -> None:
|
|
34
|
+
if os.name != "nt":
|
|
35
|
+
raise RuntimeError("copy_when_inside_windows must run inside Windows")
|
|
36
|
+
if os.environ.get("WSL_DISTRO_NAME"):
|
|
37
|
+
raise RuntimeError("copy_when_inside_windows must run inside Windows")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _infer_windows_home_from_permissions() -> Path:
|
|
41
|
+
base_dir = Path("/mnt/c/Users")
|
|
42
|
+
try:
|
|
43
|
+
entries = list(base_dir.iterdir())
|
|
44
|
+
except FileNotFoundError as exc:
|
|
45
|
+
raise RuntimeError("unable to find /mnt/c/Users") from exc
|
|
46
|
+
candidates: list[Path] = []
|
|
47
|
+
for entry in entries:
|
|
48
|
+
if not entry.is_dir():
|
|
49
|
+
continue
|
|
50
|
+
if entry.name.lower() == "public" or entry.name.lower() == "all users":
|
|
51
|
+
continue
|
|
52
|
+
try:
|
|
53
|
+
mode = stat.S_IMODE(entry.stat().st_mode)
|
|
54
|
+
except OSError:
|
|
55
|
+
continue
|
|
56
|
+
if mode == 0o777:
|
|
57
|
+
candidates.append(entry)
|
|
58
|
+
if len(candidates) != 1:
|
|
59
|
+
options = ", ".join(sorted(candidate.name for candidate in candidates)) or "none"
|
|
60
|
+
raise RuntimeError(f"unable to infer Windows home directory (candidates: {options})")
|
|
61
|
+
return candidates[0]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _resolve_windows_home_from_wsl() -> Path:
|
|
65
|
+
user_profile = os.environ.get("USERPROFILE")
|
|
66
|
+
if user_profile:
|
|
67
|
+
windows_path = PureWindowsPath(user_profile)
|
|
68
|
+
drive = windows_path.drive
|
|
69
|
+
if drive:
|
|
70
|
+
drive_letter = drive.rstrip(":").lower()
|
|
71
|
+
tail = Path(*windows_path.parts[1:])
|
|
72
|
+
candidate = Path("/mnt") / drive_letter / tail
|
|
73
|
+
if candidate.exists():
|
|
74
|
+
return candidate
|
|
75
|
+
return _infer_windows_home_from_permissions()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _decode_wsl_output(raw_bytes: bytes) -> str:
|
|
79
|
+
try:
|
|
80
|
+
return raw_bytes.decode("utf-16-le")
|
|
81
|
+
except UnicodeDecodeError:
|
|
82
|
+
return raw_bytes.decode()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _get_single_wsl_distribution() -> str:
|
|
86
|
+
process = subprocess.run(["wsl.exe", "-l"], capture_output=True, text=False, check=True)
|
|
87
|
+
stdout = _decode_wsl_output(process.stdout).replace("\ufeff", "")
|
|
88
|
+
distributions: list[str] = []
|
|
89
|
+
for raw_line in stdout.splitlines():
|
|
90
|
+
line = raw_line.strip()
|
|
91
|
+
if not line or line.lower().startswith("windows subsystem for linux"):
|
|
92
|
+
continue
|
|
93
|
+
normalized = line.lstrip("* ").replace("(Default)", "").strip()
|
|
94
|
+
if normalized:
|
|
95
|
+
distributions.append(normalized)
|
|
96
|
+
if len(distributions) != 1:
|
|
97
|
+
raise RuntimeError("unable to pick a single WSL distribution")
|
|
98
|
+
return distributions[0]
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _resolve_wsl_home_on_windows() -> Path:
|
|
102
|
+
distribution = _get_single_wsl_distribution()
|
|
103
|
+
home_root = Path(rf"\\wsl$\{distribution}\home")
|
|
104
|
+
try:
|
|
105
|
+
entries = list(home_root.iterdir())
|
|
106
|
+
except FileNotFoundError as exc:
|
|
107
|
+
raise RuntimeError(f"unable to locate WSL home directories for {distribution}") from exc
|
|
108
|
+
except OSError as exc:
|
|
109
|
+
raise RuntimeError(f"unable to inspect WSL home directories for {distribution}") from exc
|
|
110
|
+
user_dirs = [entry for entry in entries if entry.is_dir()]
|
|
111
|
+
if len(user_dirs) != 1:
|
|
112
|
+
options = ", ".join(sorted(entry.name for entry in user_dirs)) or "none"
|
|
113
|
+
raise RuntimeError(f"unable to infer WSL user directory (candidates: {options})")
|
|
114
|
+
return user_dirs[0]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _quote_for_powershell(path: Path) -> str:
|
|
118
|
+
return "'" + str(path).replace("'", "''") + "'"
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _run_windows_copy_command(source_path: Path, target_path: Path) -> None:
|
|
122
|
+
source_is_dir = source_path.is_dir()
|
|
123
|
+
parent_literal = _quote_for_powershell(target_path.parent)
|
|
124
|
+
source_literal = _quote_for_powershell(source_path)
|
|
125
|
+
target_literal = _quote_for_powershell(target_path)
|
|
126
|
+
script = (
|
|
127
|
+
"$ErrorActionPreference = 'Stop'; "
|
|
128
|
+
f"New-Item -ItemType Directory -Path {parent_literal} -Force | Out-Null; "
|
|
129
|
+
f"Copy-Item -LiteralPath {source_literal} -Destination {target_literal}"
|
|
130
|
+
f"{' -Recurse' if source_is_dir else ''} -Force"
|
|
131
|
+
)
|
|
132
|
+
print(f"Copying {source_path} to {target_path}")
|
|
133
|
+
subprocess.run(
|
|
134
|
+
["powershell.exe", "-NoLogo", "-NoProfile", "-Command", script],
|
|
135
|
+
check=True,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _ensure_symlink(link_path: Path, target_path: Path) -> None:
|
|
140
|
+
if not target_path.exists():
|
|
141
|
+
raise FileNotFoundError(target_path)
|
|
142
|
+
if link_path.is_symlink():
|
|
143
|
+
existing_target = Path(os.path.realpath(link_path))
|
|
144
|
+
desired_target = Path(os.path.realpath(target_path))
|
|
145
|
+
if os.path.normcase(str(existing_target)) == os.path.normcase(str(desired_target)):
|
|
146
|
+
return
|
|
147
|
+
link_path.unlink()
|
|
148
|
+
elif link_path.exists():
|
|
149
|
+
raise FileExistsError(link_path)
|
|
150
|
+
link_path.symlink_to(target_path, target_is_directory=True)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def copy_when_inside_wsl(source: Path | str, target: Path | str, overwrite: bool) -> None:
|
|
154
|
+
_ensure_wsl_environment()
|
|
155
|
+
source_relative = _ensure_relative_path(source)
|
|
156
|
+
target_relative = _ensure_relative_path(target)
|
|
157
|
+
source_path = Path.home() / source_relative
|
|
158
|
+
target_path = _resolve_windows_home_from_wsl() / target_relative
|
|
159
|
+
if not source_path.exists():
|
|
160
|
+
raise FileNotFoundError(source_path)
|
|
161
|
+
if target_path.exists():
|
|
162
|
+
if not overwrite:
|
|
163
|
+
raise FileExistsError(target_path)
|
|
164
|
+
_remove_path(target_path)
|
|
165
|
+
target_path.parent.mkdir(parents=True, exist_ok=True)
|
|
166
|
+
if source_path.is_dir():
|
|
167
|
+
shutil.copytree(source_path, target_path, dirs_exist_ok=False)
|
|
168
|
+
return
|
|
169
|
+
print(f"Copying {source_path} to {target_path}")
|
|
170
|
+
shutil.copy2(source_path, target_path)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def copy_when_inside_windows(source: Path | str, target: Path | str, overwrite: bool) -> None:
|
|
174
|
+
_ensure_windows_environment()
|
|
175
|
+
source_relative = _ensure_relative_path(source)
|
|
176
|
+
target_relative = _ensure_relative_path(target)
|
|
177
|
+
source_path = Path.home() / source_relative
|
|
178
|
+
target_path = _resolve_wsl_home_on_windows() / target_relative
|
|
179
|
+
if not source_path.exists():
|
|
180
|
+
raise FileNotFoundError(source_path)
|
|
181
|
+
if target_path.exists():
|
|
182
|
+
if not overwrite:
|
|
183
|
+
raise FileExistsError(target_path)
|
|
184
|
+
_remove_path(target_path)
|
|
185
|
+
_run_windows_copy_command(source_path, target_path)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def link_wsl_and_windows() -> None:
|
|
189
|
+
system = platform.system()
|
|
190
|
+
if system == "Darwin":
|
|
191
|
+
raise RuntimeError("link_wsl_and_windows is not designed for macOS")
|
|
192
|
+
try:
|
|
193
|
+
_ensure_wsl_environment()
|
|
194
|
+
except RuntimeError:
|
|
195
|
+
try:
|
|
196
|
+
_ensure_windows_environment()
|
|
197
|
+
except RuntimeError as exc:
|
|
198
|
+
raise RuntimeError("link_wsl_and_windows must run inside Windows or WSL") from exc
|
|
199
|
+
target_path = _resolve_wsl_home_on_windows()
|
|
200
|
+
link_path = Path.home() / "wsl"
|
|
201
|
+
_ensure_symlink(link_path, target_path)
|
|
202
|
+
return
|
|
203
|
+
target_path = _resolve_windows_home_from_wsl()
|
|
204
|
+
link_path = Path.home() / "win"
|
|
205
|
+
_ensure_symlink(link_path, target_path)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
if __name__ == "__main__":
|
|
209
|
+
copy_when_inside_wsl(Path("projects/source.txt"), Path("windows_projects/source.txt"), True)
|
|
210
|
+
copy_when_inside_windows(Path("documents/example.txt"), Path("linux_documents/example.txt"), True)
|
machineconfig/utils/terminal.py
CHANGED
|
@@ -4,6 +4,7 @@ from typing import Any, BinaryIO, Optional, Union
|
|
|
4
4
|
from typing import Literal, TypeAlias
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
SHELLS: TypeAlias = Literal["default", "cmd", "powershell", "pwsh", "bash"] # pwsh.exe is PowerShell (community) and powershell.exe is Windows Powershell (msft)
|
|
8
9
|
CONSOLE: TypeAlias = Literal["wt", "cmd"]
|
|
9
10
|
MACHINE: TypeAlias = Literal["Windows", "Linux", "Darwin"]
|
|
@@ -138,6 +138,10 @@ def upgrade_machine_config_version() -> None:
|
|
|
138
138
|
# Find all Python files and replace version constraints
|
|
139
139
|
py_files: list[Path] = list(current_dir.glob("**/*.py")) + list(current_dir.glob("**/*.sh")) + list(current_dir.glob("**/*.ps1"))
|
|
140
140
|
|
|
141
|
+
# Also include Dockerfile files
|
|
142
|
+
dockerfile_files: list[Path] = [f for f in current_dir.glob("**/Dockerfile*") if f.is_file()]
|
|
143
|
+
py_files.extend(dockerfile_files)
|
|
144
|
+
|
|
141
145
|
files_updated: int = 0
|
|
142
146
|
for file_path in py_files:
|
|
143
147
|
try:
|
|
@@ -164,8 +168,9 @@ def upgrade_machine_config_version() -> None:
|
|
|
164
168
|
except (UnicodeDecodeError, PermissionError):
|
|
165
169
|
# Skip files that can't be read as text
|
|
166
170
|
pass
|
|
167
|
-
|
|
168
171
|
print(f"Updated {files_updated} files with version constraint")
|
|
172
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
173
|
+
exit_then_run_shell_script(f"cd {current_dir}; uv sync")
|
|
169
174
|
|
|
170
175
|
|
|
171
176
|
if __name__ == "__main__":
|
machineconfig/utils/ve.py
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
import platform
|
|
1
|
+
|
|
3
2
|
from typing import Optional
|
|
4
|
-
from pathlib import Path
|
|
5
3
|
|
|
6
4
|
|
|
7
|
-
def get_ve_path_and_ipython_profile(init_path: Path) -> tuple[Optional[str], Optional[str]]:
|
|
5
|
+
def get_ve_path_and_ipython_profile(init_path: "Path") -> tuple[Optional[str], Optional[str]]:
|
|
8
6
|
"""Works with .ve.ini .venv and .ve_path"""
|
|
9
7
|
ve_path: Optional[str] = None
|
|
10
8
|
ipy_profile: Optional[str] = None
|
|
11
9
|
tmp = init_path
|
|
10
|
+
|
|
11
|
+
from machineconfig.utils.io import read_ini
|
|
12
|
+
|
|
12
13
|
for _ in init_path.parents:
|
|
13
14
|
if tmp.joinpath(".ve.ini").exists():
|
|
14
15
|
ini = read_ini(tmp.joinpath(".ve.ini"))
|
|
15
16
|
if ve_path is None:
|
|
17
|
+
|
|
16
18
|
try:
|
|
17
19
|
ve_path = ini["specs"]["ve_path"]
|
|
18
20
|
except KeyError:
|
|
@@ -39,6 +41,8 @@ def get_ve_path_and_ipython_profile(init_path: Path) -> tuple[Optional[str], Opt
|
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
def get_ve_activate_line(ve_root: str):
|
|
44
|
+
import platform
|
|
45
|
+
from pathlib import Path
|
|
42
46
|
if platform.system() == "Windows":
|
|
43
47
|
q = Path(ve_root).expanduser().relative_to(Path.home()).as_posix()
|
|
44
48
|
activate_ve_line = f". $HOME/{q}/Scripts/activate.ps1"
|
|
@@ -47,3 +51,7 @@ def get_ve_activate_line(ve_root: str):
|
|
|
47
51
|
else:
|
|
48
52
|
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
49
53
|
return activate_ve_line
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
from pathlib import Path
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: machineconfig
|
|
3
|
+
Version: 8.12
|
|
4
|
+
Summary: Dotfiles management package
|
|
5
|
+
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
|
+
License: Apache 2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/thisismygitrepo/machineconfig
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/thisismygitrepo/machineconfig/issues
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: >=3.13
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
Requires-Dist: cryptography>=44.0.2
|
|
15
|
+
Requires-Dist: fire>=0.7.0
|
|
16
|
+
Requires-Dist: joblib>=1.5.2
|
|
17
|
+
Requires-Dist: paramiko>=3.5.1
|
|
18
|
+
Requires-Dist: randomname>=0.2.1
|
|
19
|
+
Requires-Dist: requests>=2.32.5
|
|
20
|
+
Requires-Dist: rich>=14.0.0
|
|
21
|
+
Requires-Dist: tenacity>=9.1.2
|
|
22
|
+
Requires-Dist: psutil>=7.0.0
|
|
23
|
+
Requires-Dist: gitpython>=3.1.44
|
|
24
|
+
Requires-Dist: rclone-python>=0.1.23
|
|
25
|
+
Requires-Dist: questionary>=2.1.1
|
|
26
|
+
Requires-Dist: typer-slim>=0.19.2
|
|
27
|
+
Requires-Dist: typer>=0.19.2
|
|
28
|
+
Provides-Extra: windows
|
|
29
|
+
Requires-Dist: pywin32; extra == "windows"
|
|
30
|
+
Provides-Extra: plot
|
|
31
|
+
Requires-Dist: sqlalchemy>=2.0.43; extra == "plot"
|
|
32
|
+
Requires-Dist: ipykernel>=6.30.1; extra == "plot"
|
|
33
|
+
Requires-Dist: ipython>=9.5.0; extra == "plot"
|
|
34
|
+
Requires-Dist: jupyterlab>=4.4.9; extra == "plot"
|
|
35
|
+
Requires-Dist: kaleido>=1.1.0; extra == "plot"
|
|
36
|
+
Requires-Dist: matplotlib>=3.10.6; extra == "plot"
|
|
37
|
+
Requires-Dist: nbformat>=5.10.4; extra == "plot"
|
|
38
|
+
Requires-Dist: numpy>=2.3.3; extra == "plot"
|
|
39
|
+
Requires-Dist: plotly>=6.3.0; extra == "plot"
|
|
40
|
+
Requires-Dist: polars>=1.33.1; extra == "plot"
|
|
41
|
+
Requires-Dist: python-magic>=0.4.27; extra == "plot"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
|
|
46
|
+
<a href="https://github.com/thisismygitrepo/machineconfig/commits">
|
|
47
|
+
<img src="https://img.shields.io/github/commit-activity/m/thisismygitrepo/machineconfig" />
|
|
48
|
+
</a>
|
|
49
|
+
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# 🧠 Welcome to **Machineconfig**
|
|
54
|
+
|
|
55
|
+
**Machineconfig** is a cli-based cross-platform **Stack Manager** — It is a swiss-army knife; a *Package Manager*, *Configuration Manager*, *Automation Tool*, *Dotfiles Manager*, *Data Solution*, and *Code Manager*, among other functionalities covered, all rolled into one seamless experience, that is consistent across different platforms.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 💡 Motivation
|
|
59
|
+
Your stack is awesome, but you need stack a manager for it, to put it together and maintain it.
|
|
60
|
+
What is your stack? Say you have a new computer/ VM, how to set it?
|
|
61
|
+
* A bunch of CLI tools.
|
|
62
|
+
* [Optional] A bunch of softwares (GUIs for desktop environment)
|
|
63
|
+
* [Public] A bunch of configuration files for your tools.
|
|
64
|
+
* [Private] A bunch of secrets, passowords, tokens, credentials etc, etc.
|
|
65
|
+
* Data (Both highly sensitive and encrypted less serious unencrypted data)
|
|
66
|
+
* Code (your repositories).
|
|
67
|
+
|
|
68
|
+
Wouldn't be nice if you can set it all up in 2 minutes? This is a hackable tool to get it done.
|
|
69
|
+
|
|
70
|
+
Consider this concrete scenario: When setting up a new machine, VM, or Docker container, you often face dependency chains like this:
|
|
71
|
+
|
|
72
|
+
```mermaid
|
|
73
|
+
flowchart TD
|
|
74
|
+
A["Need to setup my [dev] environment"] --> B["need my tool x, e.g.: yadm"]
|
|
75
|
+
B --> C["Requires git"]
|
|
76
|
+
C --> D["Requires package manager, e.g. brew"]
|
|
77
|
+
D --> E["Requires curl"]
|
|
78
|
+
E --> F["Requires network setup / system update"]
|
|
79
|
+
F --> G["Requires system configuration access"]
|
|
80
|
+
G --> H["Finally ready to start setup the tool x."]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Machineconfig builds on shoulder of giants. A suite of best-in-class stack of projects on github are used, the most starred, active and written in Rust tools are used when possible. The goal is to provide a seamless experience that abstracts away the complexity of setting up and maintaining your digital environment. The goal of machineconfig is to replicate your setup, config, code, data and secrets on any machine, any os, in 5 minutes, using minimal user input. Then, from that point, machineconfig will help you maintain, update, backup and sync your digital life across all your devices, automatically.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## ⚙️ Functional Overview
|
|
87
|
+
|
|
88
|
+
| Category | Comparable Tools | Description |
|
|
89
|
+
|------------------------|----------------------------------------------|-----------------------------------------------------------|
|
|
90
|
+
| **Package Manager** | `winget`, `apt`, `brew`, `nix` | Installs and manages software packages across systems. |
|
|
91
|
+
| **Configuration Manager** | `Ansible`, `Chef`, `Puppet` | Configures and maintains system‐level preferences. |
|
|
92
|
+
| **Automation Tool** | `Airflow`, `Prefect`, `Dagster`, `Celery` | Automates repetitive tasks, pipelines, orchestration. |
|
|
93
|
+
| **Dotfiles Manager** | `chezmoi`, `yadm`, `rcm`, `GNU Stow` | Synchronises dotfiles & personal configs across systems. |
|
|
94
|
+
| **Data Solution** | `rclone`, `rsync` | Handles backups, mirroring and secure file sync. |
|
|
95
|
+
| **Code Manager** | `strong‐box`, `Vault` | Manages and protects code snippets, secrets and creds. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# Install On Windows:
|
|
101
|
+
|
|
102
|
+
```powershell
|
|
103
|
+
# install tool the tool only:
|
|
104
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Skip if UV is already installed
|
|
105
|
+
uv tool install --upgrade --python 3.14 machineconfig
|
|
106
|
+
# interactive install of machineconfig and following on to run it and make basic machine configuration (RECOMMENDED):
|
|
107
|
+
iex (iwr bit.ly/cfgwindows).Content # Or, if UV is installed: iex (uvx machineconfig define)
|
|
108
|
+
# Quick install and configure (optionals are accepted by default):
|
|
109
|
+
iex (iwr bit.ly/cfgwq).Content
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# Install On Linux and MacOS
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# install the tool only:
|
|
117
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # Skip if UV is already installed
|
|
118
|
+
uv tool install --upgrade --python 3.14 machineconfig
|
|
119
|
+
# interactive install of machineconfig and following on to run it and make basic machine configuration (RECOMMENDED):
|
|
120
|
+
. <(curl -L bit.ly/cfglinux) # Or, if UV is installed: . <(uvx machineconfig define)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# Author
|
|
125
|
+
Alex Al-Saffar. [email](mailto:programmer@usa.com)
|
|
126
|
+
|
|
127
|
+
# Contributor
|
|
128
|
+
Ruby Chan. [email](mailto:ruby.chan@sa.gov.au)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
[](https://github.com/ashutosh00710/github-readme-activity-graph)
|
|
132
|
+
|