machineconfig 7.50__py3-none-any.whl → 8.14__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 +95 -42
- 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 +180 -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 +30 -31
- 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 +69 -27
- 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.14.dist-info/METADATA +132 -0
- {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/RECORD +264 -215
- {machineconfig-7.50.dist-info → machineconfig-8.14.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/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_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/{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.14.dist-info}/WHEEL +0 -0
- {machineconfig-7.50.dist-info → machineconfig-8.14.dist-info}/top_level.txt +0 -0
|
@@ -18,7 +18,6 @@ from machineconfig.utils.installer_utils.installer_class import Installer
|
|
|
18
18
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
# Nerd Fonts installer configuration data
|
|
22
21
|
nerd_fonts: InstallerData = {
|
|
23
22
|
"appName": "Cascadia Code Nerd Font",
|
|
24
23
|
"repoURL": "https://github.com/ryanoasis/nerd-fonts",
|
|
@@ -38,14 +37,6 @@ nerd_fonts: InstallerData = {
|
|
|
38
37
|
}
|
|
39
38
|
|
|
40
39
|
|
|
41
|
-
# Patterns to match any installed variant (NF, Nerd Font, Mono, Propo, style weights) of Cascadia/Caskaydia
|
|
42
|
-
# We'll compile them at runtime for flexibility. Keep them simple to avoid false positives.
|
|
43
|
-
# REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
|
|
44
|
-
# r"caskaydiacove.*(nf|nerd ?font)",
|
|
45
|
-
# r"cascadiacode.*(nf|nerd ?font)"
|
|
46
|
-
# )
|
|
47
|
-
|
|
48
|
-
|
|
49
40
|
console = Console()
|
|
50
41
|
|
|
51
42
|
|
|
@@ -80,22 +71,28 @@ def _list_installed_fonts() -> list[str]:
|
|
|
80
71
|
|
|
81
72
|
|
|
82
73
|
def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
|
|
83
|
-
"""Check which
|
|
84
|
-
|
|
74
|
+
"""Check which feature fonts are missing from installed fonts.
|
|
75
|
+
|
|
85
76
|
Args:
|
|
86
77
|
installed_fonts: List of installed font names
|
|
87
|
-
|
|
78
|
+
|
|
88
79
|
Returns:
|
|
89
|
-
List of missing font
|
|
80
|
+
List of descriptions for missing font groups
|
|
90
81
|
"""
|
|
91
|
-
import re
|
|
92
82
|
|
|
93
|
-
|
|
83
|
+
def _normalize(name: str) -> str:
|
|
84
|
+
return name.lower().replace(" ", "").replace("_", "")
|
|
85
|
+
|
|
86
|
+
installed_norm = [_normalize(font) for font in installed_fonts]
|
|
87
|
+
requirements: list[tuple[str, str]] = [
|
|
88
|
+
("cascadiacode", "Cascadia Code family"),
|
|
89
|
+
("caskaydiacove", "Caskaydia Cove Nerd Font family"),
|
|
90
|
+
]
|
|
91
|
+
|
|
94
92
|
missing: list[str] = []
|
|
95
|
-
for
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
missing.append(pattern)
|
|
93
|
+
for needle, label in requirements:
|
|
94
|
+
if not any(needle in font for font in installed_norm):
|
|
95
|
+
missing.append(label)
|
|
99
96
|
return missing
|
|
100
97
|
|
|
101
98
|
|
|
@@ -125,18 +122,22 @@ def install_nerd_fonts() -> None:
|
|
|
125
122
|
console.print(f"🔍 Missing fonts detected: {', '.join(missing)}. Proceeding with installation...")
|
|
126
123
|
console.print("🔍 Downloading Nerd Fonts package...")
|
|
127
124
|
|
|
128
|
-
folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).
|
|
125
|
+
folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).binary_download(version=None)
|
|
129
126
|
|
|
130
127
|
console.print("🧹 Cleaning up unnecessary files...")
|
|
131
128
|
[p.delete(sure=True) for p in folder.search("*Windows*")]
|
|
132
129
|
[p.delete(sure=True) for p in folder.search("*readme*")]
|
|
133
130
|
[p.delete(sure=True) for p in folder.search("*LICENSE*")]
|
|
134
131
|
|
|
132
|
+
print("Fonts to be installed:")
|
|
133
|
+
for font in (folder.search("*.ttf") + folder.search("*.otf")):
|
|
134
|
+
print(f" - {font}")
|
|
135
|
+
|
|
135
136
|
console.print("⚙️ Installing fonts via PowerShell...")
|
|
136
137
|
file = PathExtended.tmpfile(suffix=".ps1")
|
|
137
138
|
file.parent.mkdir(parents=True, exist_ok=True)
|
|
138
|
-
|
|
139
|
-
raw_content = LIBRARY_ROOT.joinpath("jobs/installer/
|
|
139
|
+
|
|
140
|
+
raw_content = LIBRARY_ROOT.joinpath("jobs/installer/powershell_scripts/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
|
|
140
141
|
# PowerShell 5.1 can choke on certain unicode chars in some locales; keep ASCII only.
|
|
141
142
|
content = "".join(ch for ch in raw_content if ord(ch) < 128)
|
|
142
143
|
file.write_text(content, encoding="utf-8")
|
|
@@ -156,3 +157,7 @@ def install_nerd_fonts() -> None:
|
|
|
156
157
|
console.print()
|
|
157
158
|
render_banner("✅ Nerd Fonts installation complete! ✅", "Nerd Fonts Installer", "green", box.DOUBLE)
|
|
158
159
|
console.print()
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
if __name__ == "__main__":
|
|
163
|
+
install_nerd_fonts()
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import platform
|
|
4
|
+
from typing import Optional
|
|
5
|
+
from rich import box
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.panel import Panel
|
|
8
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
9
|
+
|
|
10
|
+
ps1 = r"""
|
|
11
|
+
$winget = Get-Command winget -ErrorAction SilentlyContinue
|
|
12
|
+
if (-not $winget) {
|
|
13
|
+
Write-Host "winget not found. Installing..."
|
|
14
|
+
$finalUrl = (Invoke-WebRequest 'https://github.com/microsoft/winget-cli/releases/latest' -UseBasicParsing).BaseResponse.ResponseUri.AbsoluteUri
|
|
15
|
+
$releaseTag = $finalUrl.Split('/')[-1]
|
|
16
|
+
$DownloadUrl = "https://github.com/microsoft/winget-cli/releases/download/$releaseTag/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
|
|
17
|
+
$DestDir = Join-Path $HOME "Downloads"
|
|
18
|
+
$DestFile = Join-Path $DestDir "Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
|
|
19
|
+
# Create folder if it doesn't exist
|
|
20
|
+
if (-not (Test-Path $DestDir)) {
|
|
21
|
+
New-Item -ItemType Directory -Path $DestDir | Out-Null
|
|
22
|
+
}
|
|
23
|
+
Write-Host "Downloading winget installer..."
|
|
24
|
+
# Invoke-WebRequest -Uri $DownloadUrl -OutFile $DestFile
|
|
25
|
+
Start-BitsTransfer -Source $DownloadUrl -Destination $DestFile
|
|
26
|
+
Write-Host "Saved to: $DestFile"
|
|
27
|
+
# We MUST run Add-AppxPackage in Windows PowerShell
|
|
28
|
+
Write-Host "Installing package via Windows PowerShell..."
|
|
29
|
+
powershell.exe -NoLogo -NoProfile -Command "Add-AppxPackage -Path `"$DestFile`" "
|
|
30
|
+
Write-Host "Installation complete."
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
Write-Host "winget already available. Skipping installation."
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# [System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'User')
|
|
37
|
+
# [System.Environment]::SetEnvironmentVariable('PYTHONIOENCODING', 'utf-8', 'User')
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
winget install --no-upgrade --name "Powershell" --Id "Microsoft.PowerShell" --source winget --scope user --accept-package-agreements --accept-source-agreements # powershell require admin
|
|
41
|
+
winget install --no-upgrade --name "Windows Terminal" --Id "Microsoft.WindowsTerminal" --source winget --scope user --accept-package-agreements --accept-source-agreements # Terminal is is installed by default on W 11
|
|
42
|
+
# winget install --no-upgrade --name "GNU Nano" --Id "GNU.Nano" --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
43
|
+
# --GROUP:gui:Brave+VSCode+Git+WezTerm
|
|
44
|
+
# --GROUP:dev2:VSRedistrib+VSBuildTools+Codeblocks+GnuWin32: Make+GnuPG+graphviz+WinFsp+SSHFS-win+xming+Node.js+Rustup+Cloudflare+Cloudflare WARP+Microsoft Garage Mouse without Borders
|
|
45
|
+
# --GROUP:user:nu+Chrome+ChromeRemoteDesktop+Zoom+7zip+Firefox+Thunderbird+StreamlabsOBS+OBSStudio+MiKTeX+TexMaker+notepad+++Lapce+TesseractOCR+perl+DB Browser for SQLite+sql server management studio+Adobe Acrobat Reader DC+julia+Chafa+bottom+onefetch+Just+hyperfine+AWS CLI
|
|
46
|
+
# Install-Module -Name Terminal-Icons -Repository PSGallery -Force -AcceptLicense -PassThru -Confirm # -RequiredVersion 2.5.10
|
|
47
|
+
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
zsh = r"""
|
|
51
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
52
|
+
echo "🔄 Updating Homebrew..."
|
|
53
|
+
brew update || true
|
|
54
|
+
# Note: git and nano are pre-installed on macOS, but we install via Homebrew to ensure latest versions
|
|
55
|
+
# brew install git || true
|
|
56
|
+
# brew install nano || true
|
|
57
|
+
# brew install curl || true
|
|
58
|
+
# Install NVM
|
|
59
|
+
if [ ! -s "$HOME/.nvm/nvm.sh" ]; then
|
|
60
|
+
echo "📥 Installing NVM (Node Version Manager)..."
|
|
61
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
62
|
+
fi
|
|
63
|
+
echo "🔧 Configuring NVM environment..."
|
|
64
|
+
export NVM_DIR="$HOME/.nvm"
|
|
65
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
66
|
+
echo "📥 Installing latest Node.js..."
|
|
67
|
+
nvm install node || true
|
|
68
|
+
# brew install make
|
|
69
|
+
# brew install ffmpeg
|
|
70
|
+
# brew install openssl
|
|
71
|
+
echo "✅ Essential tools installation complete."
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
bash = r"""
|
|
75
|
+
sudo apt update -y || true
|
|
76
|
+
sudo apt install nala -y || true
|
|
77
|
+
sudo nala install curl wget gpg lsb-release apt-transport-https -y || true
|
|
78
|
+
sudo nala install git net-tools htop nano -y || true
|
|
79
|
+
sudo nala install build-essential python3-dev -y || true # C build toolchain: Where build-essential brings gcc, make, etc., and python3-dev ensures headers for your Python version.
|
|
80
|
+
# sudo nala install libssl-dev -y
|
|
81
|
+
# sudo nala install libaa-bin -y
|
|
82
|
+
|
|
83
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
84
|
+
source ~/.bashrc || true
|
|
85
|
+
nvm install node || true
|
|
86
|
+
|
|
87
|
+
sudo nala install samba -y || true
|
|
88
|
+
sudo nala install fuse3 -y || true
|
|
89
|
+
sudo nala install nfs-common -y || true
|
|
90
|
+
|
|
91
|
+
# echo 'keyboard-configuration keyboard-configuration/layout select US English' | sudo debconf-set-selections
|
|
92
|
+
# echo 'keyboard-configuration keyboard-configuration/layoutcode string us' | sudo debconf-set-selections
|
|
93
|
+
# sudo DEBIAN_FRONTEND=noninteractive nala install -y cmatrix
|
|
94
|
+
# sudo nala install hollywood -y || true
|
|
95
|
+
|
|
96
|
+
# sudo nala install ffmpeg -y || true # Required by some dev tools
|
|
97
|
+
# sudo nala install make -y || true # Required by LunarVim and SpaceVim
|
|
98
|
+
# (curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) || true
|
|
99
|
+
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def main(installer_data: InstallerData, version: Optional[str]) -> None:
|
|
104
|
+
console = Console()
|
|
105
|
+
_ = installer_data
|
|
106
|
+
console.print(
|
|
107
|
+
Panel.fit(
|
|
108
|
+
"\n".join([f"💻 Platform: {platform.system()}", f"🔄 Version: {'latest' if version is None else version}"]),
|
|
109
|
+
title="🔧 ABC Installer",
|
|
110
|
+
border_style="blue",
|
|
111
|
+
box=box.ROUNDED,
|
|
112
|
+
)
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
_ = version
|
|
116
|
+
if platform.system() == "Windows":
|
|
117
|
+
console.print("🪟 Installing ABC on Windows using winget...", style="bold")
|
|
118
|
+
program = ps1
|
|
119
|
+
elif platform.system() == "Linux":
|
|
120
|
+
console.print("🐧 Installing ABC on Linux...", style="bold")
|
|
121
|
+
program = bash
|
|
122
|
+
elif platform.system() == "Darwin":
|
|
123
|
+
console.print("🍎 Installing ABC on macOS...", style="bold")
|
|
124
|
+
program = zsh
|
|
125
|
+
else:
|
|
126
|
+
error_msg = f"Unsupported platform: {platform.system()}"
|
|
127
|
+
console.print(
|
|
128
|
+
Panel.fit(
|
|
129
|
+
"\n".join([error_msg]),
|
|
130
|
+
title="❌ Error",
|
|
131
|
+
subtitle="⚠️ Unsupported platform",
|
|
132
|
+
border_style="red",
|
|
133
|
+
box=box.ROUNDED,
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
raise NotImplementedError(error_msg)
|
|
137
|
+
from machineconfig.utils.code import print_code, run_shell_script
|
|
138
|
+
print_code(code=program, lexer="shell", desc="Installation Script Preview")
|
|
139
|
+
run_shell_script(program)
|
|
@@ -9,10 +9,6 @@ from rich.panel import Panel
|
|
|
9
9
|
|
|
10
10
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
# config_dict: InstallerData = {"appName": "Wezterm", "repoURL": "CMD", "doc": "Modern, GPU-accelerated terminal emulator"}
|
|
14
|
-
|
|
15
|
-
|
|
16
12
|
console = Console()
|
|
17
13
|
|
|
18
14
|
|
|
@@ -35,21 +31,8 @@ def main(installer_data: InstallerData, version: Optional[str]):
|
|
|
35
31
|
|
|
36
32
|
_ = version
|
|
37
33
|
if platform.system() == "Windows":
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Panel.fit(
|
|
41
|
-
"\n".join(
|
|
42
|
-
[
|
|
43
|
-
f"❌ ERROR | {error_msg}",
|
|
44
|
-
"💡 TIP: Please download and install manually from the WezTerm website",
|
|
45
|
-
]
|
|
46
|
-
),
|
|
47
|
-
title="Unsupported Platform",
|
|
48
|
-
border_style="red",
|
|
49
|
-
padding=(1, 2),
|
|
50
|
-
)
|
|
51
|
-
)
|
|
52
|
-
raise NotImplementedError(error_msg)
|
|
34
|
+
program = """winget install --no-upgrade --name "WezTerm" --Id "wez.wezterm" --source winget --accept-package-agreements --accept-source-agreements
|
|
35
|
+
"""
|
|
53
36
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
54
37
|
system_name = "LINUX" if platform.system() == "Linux" else "MACOS"
|
|
55
38
|
console.print(
|
|
@@ -3,11 +3,16 @@ import requests
|
|
|
3
3
|
import tempfile
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Optional
|
|
6
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
|
|
9
|
+
r"""
|
|
10
|
+
# download latest from
|
|
11
|
+
cd $HOME/Downloads
|
|
12
|
+
d u "https://github.com/microsoft/winget-cli/releases/download/v1.12.170-preview/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
|
|
13
|
+
# this must be run in windows powershell, not in pwsh
|
|
14
|
+
Add-AppxPackage .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
|
|
15
|
+
"""
|
|
11
16
|
|
|
12
17
|
def is_winget_available() -> bool:
|
|
13
18
|
"""
|
|
@@ -110,7 +115,7 @@ def install_msix_package(package_path: Path) -> bool:
|
|
|
110
115
|
return False
|
|
111
116
|
|
|
112
117
|
|
|
113
|
-
def
|
|
118
|
+
def main(installer_data: InstallerData, version: Optional[str]) -> bool:
|
|
114
119
|
"""
|
|
115
120
|
Ensure winget is available on the system. If not available, download and install it.
|
|
116
121
|
|
|
@@ -118,6 +123,7 @@ def ensure_winget_available() -> bool:
|
|
|
118
123
|
bool: True if winget is available (either was already installed or successfully installed),
|
|
119
124
|
False if installation failed
|
|
120
125
|
"""
|
|
126
|
+
_ = installer_data
|
|
121
127
|
# First check if winget is already available
|
|
122
128
|
if is_winget_available():
|
|
123
129
|
print("Winget is already available on the system.")
|
|
@@ -164,13 +170,3 @@ def ensure_winget_available() -> bool:
|
|
|
164
170
|
else:
|
|
165
171
|
print("Installation completed but winget is still not available. You may need to restart your terminal or add it to PATH.")
|
|
166
172
|
return False
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if __name__ == "__main__":
|
|
170
|
-
# Example usage
|
|
171
|
-
print("=== Winget Installation ===\n")
|
|
172
|
-
|
|
173
|
-
if ensure_winget_available():
|
|
174
|
-
print("Winget is ready to use!")
|
|
175
|
-
else:
|
|
176
|
-
print("Failed to ensure winget availability.")
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
|
|
2
|
+
from typing import Optional
|
|
3
|
+
import platform
|
|
4
|
+
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
5
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
installer_standard: InstallerData = {
|
|
9
|
+
"appName": "yazi",
|
|
10
|
+
"repoURL": "https://github.com/sxyazi/yazi",
|
|
11
|
+
"doc": "⚡ Blazing Fast Terminal File Manager.",
|
|
12
|
+
"fileNamePattern": {
|
|
13
|
+
"amd64": {
|
|
14
|
+
"linux": "yazi-x86_64-unknown-linux-musl.zip",
|
|
15
|
+
"macos": "yazi-x86_64-apple-darwin.zip",
|
|
16
|
+
"windows": "yazi-x86_64-pc-windows-msvc.zip"
|
|
17
|
+
},
|
|
18
|
+
"arm64": {
|
|
19
|
+
"linux": "yazi-aarch64-unknown-linux-musl.zip",
|
|
20
|
+
"macos": "yazi-aarch64-apple-darwin.zip",
|
|
21
|
+
"windows": "yazi-aarch64-pc-windows-msvc.zip"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
def main(installer_data: InstallerData, version: Optional[str]):
|
|
27
|
+
_ = installer_data
|
|
28
|
+
inst = Installer(installer_data=installer_standard)
|
|
29
|
+
inst.install(version=version)
|
|
30
|
+
|
|
31
|
+
print("\n" * 5)
|
|
32
|
+
print("Installing Yazi plugins and flavors...")
|
|
33
|
+
installer_standard["appName"] = "ya"
|
|
34
|
+
inst = Installer(installer_data=installer_standard)
|
|
35
|
+
inst.install(version=version)
|
|
36
|
+
|
|
37
|
+
print("\n" * 5)
|
|
38
|
+
print("Cloning Yazi plugins and flavors repositories...")
|
|
39
|
+
|
|
40
|
+
from pathlib import Path
|
|
41
|
+
system_name = platform.system().lower()
|
|
42
|
+
home_dir = Path.home()
|
|
43
|
+
if system_name == "windows":
|
|
44
|
+
yazi_plugins_dir = home_dir.joinpath("AppData", "Roaming", "yazi", "config")
|
|
45
|
+
else:
|
|
46
|
+
yazi_plugins_dir = home_dir.joinpath(".config", "yazi")
|
|
47
|
+
|
|
48
|
+
yazi_plugins_path = yazi_plugins_dir.joinpath("plugins")
|
|
49
|
+
yazi_flavours_path = yazi_plugins_dir.joinpath("flavors")
|
|
50
|
+
if yazi_plugins_path.exists():
|
|
51
|
+
if yazi_plugins_path.is_file():
|
|
52
|
+
yazi_plugins_path.unlink()
|
|
53
|
+
elif yazi_plugins_path.is_dir():
|
|
54
|
+
import shutil
|
|
55
|
+
shutil.rmtree(yazi_plugins_path)
|
|
56
|
+
yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
|
|
57
|
+
import git
|
|
58
|
+
git.Repo.clone_from("https://github.com/yazi-rs/plugins", yazi_plugins_path)
|
|
59
|
+
if yazi_flavours_path.exists():
|
|
60
|
+
if yazi_flavours_path.is_file():
|
|
61
|
+
yazi_flavours_path.unlink()
|
|
62
|
+
elif yazi_flavours_path.is_dir():
|
|
63
|
+
import shutil
|
|
64
|
+
shutil.rmtree(yazi_flavours_path)
|
|
65
|
+
yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
|
|
66
|
+
import git
|
|
67
|
+
git.Repo.clone_from("https://github.com/yazi-rs/flavors", yazi_flavours_path)
|
|
68
|
+
|
|
69
|
+
# previewers:
|
|
70
|
+
if platform.system() == "Linux":
|
|
71
|
+
script = r"""
|
|
72
|
+
sudo nala install poppler-utils -y || true # For PDF preview, needed by yazi.
|
|
73
|
+
"""
|
|
74
|
+
from machineconfig.utils.code import run_shell_script
|
|
75
|
+
run_shell_script(script)
|
|
76
|
+
elif platform.system() == "Darwin":
|
|
77
|
+
script = r"""
|
|
78
|
+
brew install --upgrade poppler || true # For PDF preview, needed by yazi.
|
|
79
|
+
"""
|
|
80
|
+
from machineconfig.utils.code import run_shell_script
|
|
81
|
+
run_shell_script(script)
|
|
82
|
+
elif platform.system() == "Windows":
|
|
83
|
+
from machineconfig.utils.installer_utils.installer_cli import install_if_missing
|
|
84
|
+
install_if_missing("git")
|
|
85
|
+
popler_installer: InstallerData = {
|
|
86
|
+
"appName": "poppler",
|
|
87
|
+
"repoURL": "https://github.com/oschwartz10612/poppler-windows",
|
|
88
|
+
"doc": "PDF rendering library - Windows builds.",
|
|
89
|
+
"fileNamePattern": {
|
|
90
|
+
"amd64": {
|
|
91
|
+
"windows": "Release-{version}.zip",
|
|
92
|
+
"linux": None,
|
|
93
|
+
"macos": None,
|
|
94
|
+
},
|
|
95
|
+
"arm64": {
|
|
96
|
+
"windows": None,
|
|
97
|
+
"linux": None,
|
|
98
|
+
"macos": None,
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
inst_poppler = Installer(installer_data=popler_installer)
|
|
103
|
+
inst_poppler.install(version=None)
|
|
104
|
+
# assuming ouch is already installed
|
|
105
|
+
script = """
|
|
106
|
+
ya pkg add 'ndtoan96/ouch' # make ouch default previewer in yazi for compressed files
|
|
107
|
+
ya pkg add 'AnirudhG07/rich-preview' # rich-cli based previewer for yazi
|
|
108
|
+
ya pack -a 'stelcodes/bunny'
|
|
109
|
+
ya pkg add 'Tyarel8/goto-drives'
|
|
110
|
+
ya pkg add 'uhs-robert/sshfs'
|
|
111
|
+
ya pkg add 'boydaihungst/file-extra-metadata'
|
|
112
|
+
ya pkg add 'wylie102/duckdb'
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
from machineconfig.utils.code import run_shell_script
|
|
117
|
+
run_shell_script(script)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
if __name__ == "__main__":
|
|
121
|
+
pass
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.14 --with "machineconfig>=7.32" python -m machineconfig.scripts.python.mount_nfs
|
|
9
8
|
# Check if remote server is reachable and share folder exists
|
|
10
9
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
10
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
winget install WinFsp.WinFsp --source winget --scope user --accept-package-agreements --accept-source-agreements; winget install SSHFS-Win.SSHFS-Win --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
4
|
+
|
|
5
|
+
$host = ''
|
|
6
|
+
$user = ''
|
|
7
|
+
$sharePath = ''
|
|
8
|
+
$driveLetter = ''
|
|
9
|
+
|
|
10
|
+
uv run --python 3.14 --with "machineconfig>=8.14" python -m machineconfig.scripts.python.mount_ssh
|
|
11
|
+
|
|
12
|
+
net use T: \\sshfs.kr\$user@$host.local
|
|
13
|
+
# this worked: net use T: \\sshfs\alex@alex-p51s-5.local
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
#!/usr/bin/env -S uv run
|
|
3
|
+
# /// script
|
|
4
|
+
# requires-python = ">=3.13"
|
|
5
|
+
# dependencies = [
|
|
6
|
+
# "rich",
|
|
7
|
+
# "polars",
|
|
8
|
+
# "typer>=0.12",
|
|
9
|
+
# "loguru",
|
|
10
|
+
# "numpy",
|
|
11
|
+
# ]
|
|
12
|
+
# ///
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def main():
|
|
18
|
+
"""a,b,c"""
|
|
19
|
+
print("This is a helper function in a.py")
|
|
20
|
+
import numpy as np
|
|
21
|
+
print("Numpy version:", np.__version__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == "__main__":
|
|
25
|
+
main()
|
machineconfig/logger.py
CHANGED
|
@@ -5,7 +5,7 @@ import shutil
|
|
|
5
5
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, CONFIG_ROOT
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def _copy_path(source: Path, target: Path, overwrite: bool
|
|
8
|
+
def _copy_path(source: Path, target: Path, overwrite: bool) -> None:
|
|
9
9
|
source = source.expanduser().resolve()
|
|
10
10
|
target = target.expanduser().resolve()
|
|
11
11
|
if not source.exists():
|
|
@@ -29,7 +29,6 @@ def _copy_path(source: Path, target: Path, overwrite: bool = False) -> None:
|
|
|
29
29
|
def copy_assets_to_machine(which: Literal["scripts", "settings"]) -> None:
|
|
30
30
|
import platform
|
|
31
31
|
import subprocess
|
|
32
|
-
|
|
33
32
|
system_name = platform.system().lower()
|
|
34
33
|
if system_name == "windows":
|
|
35
34
|
system = "windows"
|
|
@@ -42,33 +41,33 @@ def copy_assets_to_machine(which: Literal["scripts", "settings"]) -> None:
|
|
|
42
41
|
case "scripts":
|
|
43
42
|
source = LIBRARY_ROOT.joinpath("scripts", system)
|
|
44
43
|
target = CONFIG_ROOT.joinpath("scripts")
|
|
45
|
-
|
|
44
|
+
|
|
45
|
+
# _copy_path(source=source, target=target, overwrite=True)
|
|
46
|
+
|
|
47
|
+
for a_path in source.rglob("*"):
|
|
48
|
+
if not a_path.is_file():
|
|
49
|
+
continue
|
|
50
|
+
relative_path = a_path.relative_to(source)
|
|
51
|
+
target_path = target.joinpath(relative_path)
|
|
52
|
+
_copy_path(source=a_path, target=target_path, overwrite=True)
|
|
53
|
+
|
|
46
54
|
wrap_mcfg_source = LIBRARY_ROOT.joinpath("scripts", "nu", "wrap_mcfg.nu")
|
|
47
55
|
wrap_mcfg_target = CONFIG_ROOT.joinpath("scripts", "wrap_mcfg.nu")
|
|
56
|
+
|
|
48
57
|
wrap_mcfg_target.parent.mkdir(parents=True, exist_ok=True)
|
|
49
58
|
_copy_path(source=wrap_mcfg_source, target=wrap_mcfg_target, overwrite=True)
|
|
59
|
+
|
|
60
|
+
if system_name == "linux":
|
|
61
|
+
from rich.console import Console
|
|
62
|
+
console = Console()
|
|
63
|
+
console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
|
|
64
|
+
scripts_path = CONFIG_ROOT.joinpath("scripts")
|
|
65
|
+
subprocess.run(f"chmod +x {scripts_path} -R", shell=True, capture_output=True, text=True, check=False)
|
|
66
|
+
console.print("[green]✅ Script permissions updated[/green]")
|
|
67
|
+
return
|
|
50
68
|
case "settings":
|
|
51
69
|
source = LIBRARY_ROOT.joinpath("settings")
|
|
52
70
|
target = CONFIG_ROOT.joinpath("settings")
|
|
53
71
|
|
|
54
72
|
_copy_path(source=source, target=target, overwrite=True)
|
|
55
73
|
|
|
56
|
-
if system_name == "linux" and which == "scripts":
|
|
57
|
-
from rich.console import Console
|
|
58
|
-
console = Console()
|
|
59
|
-
console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
|
|
60
|
-
scripts_path = CONFIG_ROOT.joinpath("scripts")
|
|
61
|
-
subprocess.run(f"chmod +x {scripts_path} -R", shell=True, capture_output=True, text=True, check=False)
|
|
62
|
-
console.print("[green]✅ Script permissions updated[/green]")
|
|
63
|
-
|
|
64
|
-
home_dir = Path.home()
|
|
65
|
-
if system_name == "windows":
|
|
66
|
-
yazi_plugins_dir = home_dir.joinpath("AppData", "Roaming", "yazi", "config")
|
|
67
|
-
else:
|
|
68
|
-
yazi_plugins_dir = home_dir.joinpath(".config", "yazi")
|
|
69
|
-
|
|
70
|
-
yazi_plugins_path = yazi_plugins_dir.joinpath("plugins")
|
|
71
|
-
if not yazi_plugins_path.exists():
|
|
72
|
-
yazi_plugins_dir.mkdir(parents=True, exist_ok=True)
|
|
73
|
-
import git
|
|
74
|
-
git.Repo.clone_from("https://github.com/yazi-rs/plugins", yazi_plugins_path)
|
|
@@ -15,13 +15,18 @@ ON_CONFLICT_MAPPER: dict[str, ON_CONFLICT_STRICT] = {
|
|
|
15
15
|
"os": "overwrite-self-managed",
|
|
16
16
|
"bs": "backup-self-managed",
|
|
17
17
|
"od": "overwrite-default-path",
|
|
18
|
-
"bd": "backup-default-path"
|
|
18
|
+
"bd": "backup-default-path",
|
|
19
|
+
"throw-error": "throw-error",
|
|
20
|
+
"overwrite-self-managed": "overwrite-self-managed",
|
|
21
|
+
"backup-self-managed": "backup-self-managed",
|
|
22
|
+
"overwrite-default-path": "overwrite-default-path",
|
|
23
|
+
"backup-default-path": "backup-default-path",
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
|
|
22
27
|
def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
|
|
23
28
|
on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
24
|
-
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process
|
|
29
|
+
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = "all",
|
|
25
30
|
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Run in interactive mode")] = False):
|
|
26
31
|
"""Terminology:
|
|
27
32
|
SOURCE = Self-Managed-Config-File-Path
|
|
@@ -32,7 +37,7 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c
|
|
|
32
37
|
if which is None:
|
|
33
38
|
assert interactive is True
|
|
34
39
|
from machineconfig.utils.options import choose_from_options
|
|
35
|
-
items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()),
|
|
40
|
+
items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), tv=True, multi=True)
|
|
36
41
|
else:
|
|
37
42
|
assert interactive is False
|
|
38
43
|
if which == "all":
|
|
@@ -57,24 +62,33 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c
|
|
|
57
62
|
apply_mapper(mapper_data=items_objections, on_conflict=ON_CONFLICT_MAPPER[on_conflict], method=method)
|
|
58
63
|
|
|
59
64
|
|
|
60
|
-
def main_private_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., help="Method to use for linking files")],
|
|
61
|
-
on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., help="Action to take on conflict")] = "throw-error",
|
|
62
|
-
which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] =
|
|
63
|
-
interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
|
|
65
|
+
def main_private_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for linking files")],
|
|
66
|
+
on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
67
|
+
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = "all",
|
|
68
|
+
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Run in interactive mode")] = False):
|
|
64
69
|
from machineconfig.profile.create_links import ConfigMapper, read_mapper
|
|
65
70
|
mapper_full = read_mapper()["private"]
|
|
66
71
|
if which is None:
|
|
67
|
-
|
|
72
|
+
if interactive is False:
|
|
73
|
+
typer.echo("[red]Error:[/] --which must be provided when not running in interactive mode.")
|
|
74
|
+
typer.Exit(code=1)
|
|
75
|
+
return
|
|
68
76
|
from machineconfig.utils.options import choose_from_options
|
|
69
|
-
items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()),
|
|
77
|
+
items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), tv=True, multi=True)
|
|
70
78
|
else:
|
|
71
|
-
|
|
79
|
+
if interactive is True:
|
|
80
|
+
typer.echo("[yellow]Warning:[/] --which is provided, but its not allowed to be used together with --interactive. Ignoring --interactive flag.")
|
|
81
|
+
typer.Exit(code=0)
|
|
82
|
+
return
|
|
72
83
|
if which == "all":
|
|
73
84
|
items_chosen = list(mapper_full.keys())
|
|
74
85
|
else:
|
|
75
86
|
items_chosen = which.split(",")
|
|
76
87
|
items_objections: dict[str, list[ConfigMapper]] = {item: mapper_full[item] for item in items_chosen if item in mapper_full}
|
|
77
|
-
|
|
88
|
+
if len(items_objections) == 0:
|
|
89
|
+
typer.echo("[red]Error:[/] No valid items selected.")
|
|
90
|
+
typer.Exit(code=1)
|
|
91
|
+
return
|
|
78
92
|
from machineconfig.profile.create_links import apply_mapper
|
|
79
93
|
method_map: dict[str, Literal["symlink", "copy"]] = {
|
|
80
94
|
"s": "symlink",
|