machineconfig 6.82__py3-none-any.whl → 7.98__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.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +25 -13
- machineconfig/cluster/sessions_managers/wt_local.py +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- 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/custom/boxes.py +2 -2
- machineconfig/jobs/installer/custom/hx.py +75 -18
- machineconfig/jobs/installer/custom/yazi.py +119 -0
- machineconfig/jobs/installer/custom_dev/brave.py +5 -3
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/custom_dev/winget.py +10 -14
- machineconfig/jobs/installer/installer_data.json +1287 -216
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +58 -89
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +43 -16
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +78 -127
- machineconfig/profile/mapper.toml +15 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +52 -37
- 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/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/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/croshell.py +77 -78
- machineconfig/scripts/python/devops.py +39 -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 +84 -115
- machineconfig/scripts/python/ftpx.py +42 -16
- 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/run_py_script.py +79 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +32 -13
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
- 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 +46 -61
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +67 -55
- machineconfig/scripts/python/helpers_devops/cli_nw.py +157 -16
- machineconfig/scripts/python/helpers_devops/cli_repos.py +55 -21
- machineconfig/scripts/python/helpers_devops/cli_self.py +98 -48
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +80 -42
- machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/helpers_devops/cli_utils.py +3 -128
- 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/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
- machineconfig/scripts/python/helpers_network/address.py +132 -0
- machineconfig/scripts/python/{nw → helpers_network}/devops_add_ssh_key.py +24 -5
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs +0 -1
- 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 → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{nw → helpers_network}/wsl_windows_transfer.py +3 -2
- machineconfig/scripts/python/helpers_repos/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +46 -19
- machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
- machineconfig/scripts/python/helpers_repos/grource.py +1 -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 +20 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/path.py +185 -0
- machineconfig/scripts/python/interactive.py +19 -26
- machineconfig/scripts/python/{mcfg.py → mcfg_entry.py} +10 -0
- machineconfig/scripts/python/msearch.py +71 -0
- machineconfig/scripts/python/sessions.py +94 -25
- machineconfig/scripts/python/terminal.py +133 -0
- machineconfig/scripts/python/utils.py +28 -30
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +43 -11
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -32
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +40 -14
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +14 -5
- machineconfig/settings/shells/zsh/init.sh +17 -19
- 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/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/setup_linux/__init__.py +2 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +2 -3
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +3 -3
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -11
- 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 +99 -32
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/headers.py +3 -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 +42 -99
- 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 -61
- machineconfig/utils/io.py +69 -1
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +33 -18
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +44 -95
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +20 -53
- machineconfig/utils/scheduling.py +0 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +159 -412
- 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 +302 -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 +104 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-7.98.dist-info/METADATA +132 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/RECORD +259 -196
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/entry_points.txt +4 -1
- 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/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/mcfgs +0 -38
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- 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 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.82.dist-info/METADATA +0 -82
- /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- /machineconfig/scripts/python/{helpers_fire → ai/utils}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/devops_add_identity.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_drive +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_smb +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/{Restore-ThunderbirdProfile.ps1 → windows/mounts/Restore-ThunderbirdProfile.ps1} +0 -0
- /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# macOS GUI Application Installation Script
|
|
4
|
+
# Comprehensive GUI application installation via Homebrew Cask and Mac App Store
|
|
5
|
+
# Supports Intel and Apple Silicon architectures
|
|
6
|
+
|
|
7
|
+
set -e # Exit on any error
|
|
8
|
+
|
|
9
|
+
# Color codes for output
|
|
10
|
+
RED='\033[0;31m'
|
|
11
|
+
GREEN='\033[0;32m'
|
|
12
|
+
YELLOW='\033[1;33m'
|
|
13
|
+
BLUE='\033[0;34m'
|
|
14
|
+
NC='\033[0m' # No Color
|
|
15
|
+
|
|
16
|
+
# Logging functions
|
|
17
|
+
log_info() {
|
|
18
|
+
echo -e "${BLUE}ℹ️ $1${NC}"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
log_success() {
|
|
22
|
+
echo -e "${GREEN}✅ $1${NC}"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
log_warning() {
|
|
26
|
+
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
log_error() {
|
|
30
|
+
echo -e "${RED}❌ $1${NC}"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Architecture detection
|
|
34
|
+
detect_architecture() {
|
|
35
|
+
local arch=$(uname -m)
|
|
36
|
+
if [[ "$arch" == "arm64" ]]; then
|
|
37
|
+
echo "arm64"
|
|
38
|
+
elif [[ "$arch" == "x86_64" ]]; then
|
|
39
|
+
echo "amd64"
|
|
40
|
+
else
|
|
41
|
+
log_warning "Unknown architecture: $arch, defaulting to amd64"
|
|
42
|
+
echo "amd64"
|
|
43
|
+
fi
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# Check if Homebrew is installed
|
|
47
|
+
check_homebrew() {
|
|
48
|
+
if ! command -v brew &> /dev/null; then
|
|
49
|
+
log_error "Homebrew is not installed. Please run apps.sh first to install Homebrew."
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
log_success "Homebrew found"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Setup Mac App Store CLI
|
|
56
|
+
setup_mas() {
|
|
57
|
+
log_info "Setting up Mac App Store CLI (mas)..."
|
|
58
|
+
|
|
59
|
+
if ! command -v mas &> /dev/null; then
|
|
60
|
+
log_info "Installing mas (Mac App Store CLI)..."
|
|
61
|
+
brew install mas || {
|
|
62
|
+
log_error "Failed to install mas"
|
|
63
|
+
return 1
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
log_success "mas already installed"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Check if user is signed in to Mac App Store
|
|
70
|
+
if ! mas account &> /dev/null; then
|
|
71
|
+
log_warning "Not signed in to Mac App Store. Some applications may not install."
|
|
72
|
+
log_info "Please sign in to the Mac App Store manually to install App Store applications."
|
|
73
|
+
else
|
|
74
|
+
log_success "Signed in to Mac App Store"
|
|
75
|
+
fi
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# Install a GUI application with error handling
|
|
79
|
+
install_gui_app() {
|
|
80
|
+
local app_name="$1"
|
|
81
|
+
local description="$2"
|
|
82
|
+
local install_cmd="$3"
|
|
83
|
+
local fallback_cmd="$4"
|
|
84
|
+
|
|
85
|
+
log_info "Installing $description..."
|
|
86
|
+
|
|
87
|
+
if eval "$install_cmd"; then
|
|
88
|
+
log_success "$app_name installed successfully"
|
|
89
|
+
return 0
|
|
90
|
+
elif [[ -n "$fallback_cmd" ]]; then
|
|
91
|
+
log_warning "Primary installation failed, trying fallback method..."
|
|
92
|
+
if eval "$fallback_cmd"; then
|
|
93
|
+
log_success "$app_name installed via fallback method"
|
|
94
|
+
return 0
|
|
95
|
+
else
|
|
96
|
+
log_error "Failed to install $app_name via fallback method"
|
|
97
|
+
return 1
|
|
98
|
+
fi
|
|
99
|
+
else
|
|
100
|
+
log_error "Failed to install $app_name"
|
|
101
|
+
return 1
|
|
102
|
+
fi
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# Install GUI applications from a list
|
|
106
|
+
install_gui_app_list() {
|
|
107
|
+
local group_name="$1"
|
|
108
|
+
shift
|
|
109
|
+
local apps=("$@")
|
|
110
|
+
|
|
111
|
+
log_info "Installing $group_name applications..."
|
|
112
|
+
|
|
113
|
+
local failed_apps=()
|
|
114
|
+
for app_info in "${apps[@]}"; do
|
|
115
|
+
IFS='|' read -r app_name description install_cmd fallback_cmd <<< "$app_info"
|
|
116
|
+
if ! install_gui_app "$app_name" "$description" "$install_cmd" "$fallback_cmd"; then
|
|
117
|
+
failed_apps+=("$app_name")
|
|
118
|
+
fi
|
|
119
|
+
done
|
|
120
|
+
|
|
121
|
+
if [[ ${#failed_apps[@]} -gt 0 ]]; then
|
|
122
|
+
log_warning "$group_name: Failed to install: ${failed_apps[*]}"
|
|
123
|
+
else
|
|
124
|
+
log_success "All $group_name applications installed successfully"
|
|
125
|
+
fi
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
# Main installation function
|
|
129
|
+
main() {
|
|
130
|
+
log_info "Starting macOS GUI application installation..."
|
|
131
|
+
log_info "Detected architecture: $(detect_architecture)"
|
|
132
|
+
|
|
133
|
+
# Check prerequisites
|
|
134
|
+
check_homebrew
|
|
135
|
+
setup_mas
|
|
136
|
+
|
|
137
|
+
# --GROUP:BROWSERS - Web browsers
|
|
138
|
+
local browsers=(
|
|
139
|
+
"brave-browser|Brave Browser - Privacy-focused web browser|brew install --cask brave-browser|"
|
|
140
|
+
"google-chrome|Google Chrome web browser|brew install --cask google-chrome|"
|
|
141
|
+
"firefox|Mozilla Firefox web browser|brew install --cask firefox|"
|
|
142
|
+
"microsoft-edge|Microsoft Edge web browser|brew install --cask microsoft-edge|"
|
|
143
|
+
"safari-technology-preview|Safari Technology Preview|brew install --cask safari-technology-preview|"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
install_gui_app_list "Browsers" "${browsers[@]}"
|
|
147
|
+
|
|
148
|
+
# --GROUP:CODE_EDITORS - Code editors and IDEs
|
|
149
|
+
local code_editors=(
|
|
150
|
+
"visual-studio-code|Visual Studio Code|brew install --cask visual-studio-code|"
|
|
151
|
+
"cursor|Cursor AI-powered code editor|brew install --cask cursor|"
|
|
152
|
+
"sublime-text|Sublime Text editor|brew install --cask sublime-text|"
|
|
153
|
+
"atom|Atom text editor|brew install --cask atom|"
|
|
154
|
+
"webstorm|JetBrains WebStorm IDE|brew install --cask webstorm|"
|
|
155
|
+
"pycharm|JetBrains PyCharm IDE|brew install --cask pycharm|"
|
|
156
|
+
"intellij-idea|JetBrains IntelliJ IDEA|brew install --cask intellij-idea|"
|
|
157
|
+
"xcode|Xcode development environment|mas install 497799835|brew install --cask xcode"
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
install_gui_app_list "Code Editors & IDEs" "${code_editors[@]}"
|
|
161
|
+
|
|
162
|
+
# --GROUP:PRODUCTIVITY - Productivity and office applications
|
|
163
|
+
local productivity=(
|
|
164
|
+
"obsidian|Obsidian note-taking app|brew install --cask obsidian|"
|
|
165
|
+
"notion|Notion workspace|brew install --cask notion|"
|
|
166
|
+
"bitwarden|Bitwarden password manager|brew install --cask bitwarden|"
|
|
167
|
+
"1password|1Password password manager|brew install --cask 1password|mas install 1333542190"
|
|
168
|
+
"alfred|Alfred productivity app|brew install --cask alfred|"
|
|
169
|
+
"raycast|Raycast launcher and productivity tool|brew install --cask raycast|"
|
|
170
|
+
"rectangle|Rectangle window management|brew install --cask rectangle|"
|
|
171
|
+
"magnet|Magnet window manager|mas install 441258766|brew install --cask magnet"
|
|
172
|
+
"cleanmymac|CleanMyMac X system cleaner|mas install 1339170533|"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
install_gui_app_list "Productivity" "${productivity[@]}"
|
|
176
|
+
|
|
177
|
+
# --GROUP:MEDIA - Media and entertainment applications
|
|
178
|
+
local media=(
|
|
179
|
+
"vlc|VLC media player|brew install --cask vlc|"
|
|
180
|
+
"obs|OBS Studio for streaming and recording|brew install --cask obs|"
|
|
181
|
+
"handbrake|HandBrake video transcoder|brew install --cask handbrake|"
|
|
182
|
+
"spotify|Spotify music streaming|brew install --cask spotify|mas install 324684580"
|
|
183
|
+
"youtube-music|YouTube Music|brew install --cask youtube-music|"
|
|
184
|
+
"plex|Plex media server|brew install --cask plex|"
|
|
185
|
+
"keka|Keka archive utility|brew install --cask keka|mas install 470158793"
|
|
186
|
+
"the-unarchiver|The Unarchiver|brew install --cask the-unarchiver|mas install 425424353"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
install_gui_app_list "Media & Entertainment" "${media[@]}"
|
|
190
|
+
|
|
191
|
+
# --GROUP:DEVELOPMENT - Development and system tools
|
|
192
|
+
local development=(
|
|
193
|
+
"docker|Docker Desktop|brew install --cask docker|"
|
|
194
|
+
"postman|Postman API development|brew install --cask postman|"
|
|
195
|
+
"insomnia|Insomnia REST client|brew install --cask insomnia|"
|
|
196
|
+
"github-desktop|GitHub Desktop|brew install --cask github-desktop|"
|
|
197
|
+
"sourcetree|Sourcetree Git client|brew install --cask sourcetree|"
|
|
198
|
+
"iterm2|iTerm2 terminal emulator|brew install --cask iterm2|"
|
|
199
|
+
"warp|Warp modern terminal|brew install --cask warp|"
|
|
200
|
+
"alacritty|Alacritty terminal emulator|brew install --cask alacritty|"
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
install_gui_app_list "Development Tools" "${development[@]}"
|
|
204
|
+
|
|
205
|
+
# --GROUP:DATABASE - Database management tools
|
|
206
|
+
local database=(
|
|
207
|
+
"dbeaver-community|DBeaver database tool|brew install --cask dbeaver-community|"
|
|
208
|
+
"sequel-pro|Sequel Pro MySQL client|brew install --cask sequel-pro|"
|
|
209
|
+
"tableplus|TablePlus database client|brew install --cask tableplus|"
|
|
210
|
+
"redis-insight|RedisInsight Redis GUI|brew install --cask redisinsight|"
|
|
211
|
+
"mongodb-compass|MongoDB Compass|brew install --cask mongodb-compass|"
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
install_gui_app_list "Database Tools" "${database[@]}"
|
|
215
|
+
|
|
216
|
+
# --GROUP:COMMUNICATION - Communication and collaboration
|
|
217
|
+
local communication=(
|
|
218
|
+
"slack|Slack team communication|brew install --cask slack|mas install 803453959"
|
|
219
|
+
"discord|Discord voice and text chat|brew install --cask discord|"
|
|
220
|
+
"zoom|Zoom video conferencing|brew install --cask zoom|"
|
|
221
|
+
"microsoft-teams|Microsoft Teams|brew install --cask microsoft-teams|"
|
|
222
|
+
"whatsapp|WhatsApp Desktop|brew install --cask whatsapp|mas install 1147396723"
|
|
223
|
+
"telegram|Telegram messaging|brew install --cask telegram|mas install 747648890"
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
install_gui_app_list "Communication" "${communication[@]}"
|
|
227
|
+
|
|
228
|
+
# --GROUP:SYSTEM_UTILITIES - System utilities and maintenance
|
|
229
|
+
local system_utilities=(
|
|
230
|
+
"appcleaner|AppCleaner uninstaller|brew install --cask appcleaner|"
|
|
231
|
+
"coconutbattery|CoconutBattery system info|brew install --cask coconutbattery|"
|
|
232
|
+
"disk-utility|Disk Utility (built-in)|echo 'Disk Utility is built into macOS'|"
|
|
233
|
+
"activity-monitor|Activity Monitor (built-in)|echo 'Activity Monitor is built into macOS'|"
|
|
234
|
+
"finder|Finder (built-in)|echo 'Finder is built into macOS'|"
|
|
235
|
+
"homebrew|Homebrew package manager|echo 'Homebrew already installed'|"
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
install_gui_app_list "System Utilities" "${system_utilities[@]}"
|
|
239
|
+
|
|
240
|
+
log_success "macOS GUI application installation completed!"
|
|
241
|
+
log_info "Some applications may require additional setup or signing in to your accounts."
|
|
242
|
+
log_info "Check Applications folder for newly installed apps."
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
# Execute main function if script is run directly
|
|
246
|
+
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
247
|
+
main "$@"
|
|
248
|
+
fi
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
|
-
APPS = Path(__file__).parent.joinpath("apps.ps1")
|
|
5
4
|
UV = Path(__file__).parent.joinpath("uv.ps1")
|
|
6
|
-
|
|
7
5
|
DOCKER = Path(__file__).parent.joinpath("others/docker.ps1")
|
|
8
6
|
OBS = Path(__file__).parent.joinpath("others/obs.ps1")
|
|
9
7
|
POWER_OPTIONS = Path(__file__).parent.joinpath("others/power_options.ps1")
|
|
10
|
-
|
|
11
8
|
SSH_SERVER = Path(__file__).parent.joinpath("ssh/openssh_server.ps1")
|
|
9
|
+
INTERACTIVE = Path(__file__).parent.joinpath("web_shortcuts/interactive.ps1")
|
|
10
|
+
LIVE = Path(__file__).parent.joinpath("web_shortcuts/live_from_github.ps1")
|
|
11
|
+
|
|
@@ -7,4 +7,11 @@ if (-not (Test-Path -Path "$HOME\.local\bin\uv.exe")) {
|
|
|
7
7
|
Write-Output "uv binary found, updating..."
|
|
8
8
|
& "$HOME\.local\bin\uv.exe" self update
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
# `C:\Users\aalsaf01\.local\bin` is not on your PATH. To use installed Python executables, run `$env:PATH = "C:\Users\aalsaf01\.local\bin;$env:PATH"` or `uv python update-shell`.
|
|
12
|
+
& "$env:USERPROFILE\.local\bin\uv.exe" python update-shell
|
|
13
|
+
$env:Path = [System.Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' + [System.Environment]::GetEnvironmentVariable('Path', 'User')
|
|
14
|
+
|
|
15
|
+
# & "$HOME\.local\bin\uv.exe" python install 3.14
|
|
16
|
+
uv python install 3.14
|
|
17
|
+
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
function
|
|
8
|
-
function
|
|
9
|
-
function
|
|
10
|
-
function
|
|
11
|
-
function
|
|
12
|
-
function
|
|
13
|
-
function
|
|
14
|
-
function
|
|
4
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
|
|
5
|
+
|
|
6
|
+
function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" devops $args }
|
|
7
|
+
function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" cloud $args }
|
|
8
|
+
function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" agents $args }
|
|
9
|
+
function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" sessions $args }
|
|
10
|
+
function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" ftpx $args }
|
|
11
|
+
function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" fire $args }
|
|
12
|
+
function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" croshell $args }
|
|
13
|
+
function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" utils $args }
|
|
14
|
+
function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" terminal $args }
|
|
15
|
+
function msearch { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.98" msearch $args }
|
|
16
|
+
|
|
17
|
+
function d { wrap_in_shell_script devops @args }
|
|
18
|
+
function c { wrap_in_shell_script cloud @args }
|
|
19
|
+
function a { wrap_in_shell_script agents @args }
|
|
20
|
+
function sx { wrap_in_shell_script sessions @args }
|
|
21
|
+
function fx { wrap_in_shell_script ftpx @args }
|
|
22
|
+
function f { wrap_in_shell_script fire @args }
|
|
23
|
+
function rr { wrap_in_shell_script croshell @args }
|
|
24
|
+
function u { wrap_in_shell_script utils @args }
|
|
25
|
+
function t { wrap_in_shell_script terminal @args }
|
|
26
|
+
function ms { wrap_in_shell_script msearch @args }
|
|
27
|
+
|
|
15
28
|
Write-Host "mcfg command aliases are now defined in this PowerShell session."
|
|
29
|
+
|
|
30
|
+
devops self interactive
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
|
|
5
|
+
|
|
6
|
+
function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "git+https://github.com/thisismygitrepo/machineconfig" mcfg $args }
|
|
7
|
+
|
|
8
|
+
function devops {mcfg devops @args }
|
|
9
|
+
function cloud {mcfg cloud @args }
|
|
10
|
+
function agents {mcfg agents @args }
|
|
11
|
+
function sessions {mcfg sessions @args }
|
|
12
|
+
function ftpx {mcfg ftpx @args }
|
|
13
|
+
function fire {mcfg fire @args }
|
|
14
|
+
function croshell {mcfg croshell @args }
|
|
15
|
+
function utils {mcfg utils @args }
|
|
16
|
+
function terminal {mcfg terminal @args }
|
|
17
|
+
function msearch {mcfg msearch @args }
|
|
18
|
+
|
|
19
|
+
function d { wrap_in_shell_script mcfg devops @args }
|
|
20
|
+
function c { wrap_in_shell_script mcfg cloud @args }
|
|
21
|
+
function a { wrap_in_shell_script mcfg agents @args }
|
|
22
|
+
function sx { wrap_in_shell_script mcfg sessions @args }
|
|
23
|
+
function fx { wrap_in_shell_script mcfg ftpx @args }
|
|
24
|
+
function f { wrap_in_shell_script mcfg fire @args }
|
|
25
|
+
function rr { wrap_in_shell_script mcfg croshell @args }
|
|
26
|
+
function u { wrap_in_shell_script mcfg utils @args }
|
|
27
|
+
function t { wrap_in_shell_script mcfg terminal @args }
|
|
28
|
+
function ms { wrap_in_shell_script mcfg msearch @args }
|
|
29
|
+
|
|
30
|
+
Write-Host "mcfg command aliases are now defined in this PowerShell session."
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
3
|
+
# iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
|
|
4
|
+
|
|
5
|
+
uv tool install --upgrade --python 3.14 machineconfig
|
|
6
|
+
|
|
7
|
+
devops install --group sysabc
|
|
8
|
+
|
|
9
|
+
# configs
|
|
10
|
+
devops config copy-assets both
|
|
11
|
+
devops config public --method copy --on-conflict overwrite-default-path --which all
|
|
12
|
+
devops config shell
|
|
13
|
+
devops config shell --which nushell
|
|
14
|
+
|
|
15
|
+
devops install --group termabc
|
|
16
|
+
wt # start Windows Terminal to pick up config changes
|
|
17
|
+
devops install --group gui
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
1
|
from typing import Optional, Any
|
|
3
2
|
|
|
4
3
|
from datetime import datetime, timezone, timedelta
|
|
@@ -96,14 +95,18 @@ def human_friendly_dict(d: dict[str, Any]) -> dict[str, Any]:
|
|
|
96
95
|
return result
|
|
97
96
|
|
|
98
97
|
|
|
99
|
-
def get_repo_root(path: Path) -> Optional[Path]:
|
|
98
|
+
def get_repo_root(path: "Path") -> Optional["Path"]:
|
|
100
99
|
from git import Repo, InvalidGitRepositoryError
|
|
101
|
-
|
|
102
100
|
try:
|
|
103
|
-
repo = Repo(
|
|
101
|
+
repo = Repo(path, search_parent_directories=True)
|
|
104
102
|
root = repo.working_tree_dir
|
|
105
103
|
if root is not None:
|
|
104
|
+
from pathlib import Path
|
|
106
105
|
return Path(root)
|
|
107
106
|
except InvalidGitRepositoryError:
|
|
108
107
|
pass
|
|
109
108
|
return None
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == "__main__":
|
|
112
|
+
from pathlib import Path
|
machineconfig/utils/code.py
CHANGED
|
@@ -1,48 +1,78 @@
|
|
|
1
1
|
|
|
2
|
-
from typing import Any, Optional, Callable
|
|
2
|
+
from typing import Any, Literal, Optional, Callable, cast
|
|
3
3
|
from machineconfig.utils.accessories import randstr
|
|
4
|
-
from machineconfig.utils.meta import lambda_to_python_script
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
|
|
7
6
|
|
|
7
|
+
def get_uv_run_command(platform: str) -> str:
|
|
8
|
+
res = cast(Literal["Windows", "windows", "nt", "Linux", "linux", "Darwin", "darwin", "macos"], platform)
|
|
9
|
+
match res:
|
|
10
|
+
case "Windows" | "windows" | "nt":
|
|
11
|
+
return """& "$env:USERPROFILE/.local/bin/uv" run"""
|
|
12
|
+
case "Linux" | "linux" | "Darwin" | "darwin" | "macos":
|
|
13
|
+
return """$HOME/.local/bin/uv run"""
|
|
14
|
+
case _:
|
|
15
|
+
return """$HOME/.local/bin/uv run"""
|
|
16
|
+
|
|
8
17
|
def print_code(code: str, lexer: str, desc: str, subtitle: str = ""):
|
|
9
18
|
import platform
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
try:
|
|
20
|
+
from rich.console import Console
|
|
21
|
+
from rich.panel import Panel
|
|
22
|
+
from rich.syntax import Syntax
|
|
23
|
+
if lexer == "shell":
|
|
24
|
+
if platform.system() == "Windows":
|
|
25
|
+
lexer = "powershell"
|
|
26
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
27
|
+
lexer = "sh"
|
|
28
|
+
else:
|
|
29
|
+
raise NotImplementedError(f"Platform {platform.system()} not supported for lexer {lexer}")
|
|
30
|
+
console = Console()
|
|
31
|
+
console.print(Panel(Syntax(code=code, lexer=lexer), title=f"📄 {desc}", subtitle=subtitle), style="bold red")
|
|
32
|
+
except ImportError:
|
|
33
|
+
print(f"--- {desc} ---")
|
|
34
|
+
print(code)
|
|
35
|
+
print(f"--- End of {desc} ---")
|
|
22
36
|
|
|
23
37
|
|
|
24
|
-
def get_uv_command_executing_python_script(python_script: str, uv_with: Optional[list[str]], uv_project_dir: Optional[str]
|
|
38
|
+
def get_uv_command_executing_python_script(python_script: str, uv_with: Optional[list[str]], uv_project_dir: Optional[str],
|
|
39
|
+
prepend_print: bool = True) -> tuple[str, Path]:
|
|
25
40
|
python_file = Path.home().joinpath("tmp_results", "tmp_scripts", "python", randstr() + ".py")
|
|
26
41
|
python_file.parent.mkdir(parents=True, exist_ok=True)
|
|
27
42
|
if uv_with is not None and len(uv_with) > 0:
|
|
28
|
-
uv_with.append("rich")
|
|
43
|
+
if prepend_print: uv_with.append("rich")
|
|
29
44
|
uv_with_arg = "--with " + '"' + ",".join(uv_with) + '"'
|
|
30
45
|
else:
|
|
31
|
-
|
|
46
|
+
if prepend_print:
|
|
47
|
+
uv_with_arg = "--with rich"
|
|
48
|
+
else:
|
|
49
|
+
uv_with_arg = ""
|
|
32
50
|
if uv_project_dir is not None:
|
|
33
51
|
uv_project_dir_arg = "--project" + f' "{uv_project_dir}"'
|
|
34
52
|
else:
|
|
35
53
|
uv_project_dir_arg = ""
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
54
|
+
|
|
55
|
+
if prepend_print:
|
|
56
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
57
|
+
print_code_string = lambda_to_python_script(lambda: print_code(code=python_script, lexer="python", desc="Temporary Python Script", subtitle="Executing via shell script"),
|
|
58
|
+
in_global=True, import_module=False)
|
|
59
|
+
python_file.write_text(print_code_string + "\n" + python_script, encoding="utf-8")
|
|
60
|
+
else:
|
|
61
|
+
python_file.write_text(python_script, encoding="utf-8")
|
|
62
|
+
import platform
|
|
63
|
+
uv_run = get_uv_run_command(platform=platform.system())
|
|
64
|
+
shell_script = f"""{uv_run} {uv_with_arg} {uv_project_dir_arg} {str(python_file)} """
|
|
39
65
|
return shell_script, python_file
|
|
40
66
|
|
|
41
67
|
|
|
42
68
|
def run_lambda_function(lmb: Callable[[], Any], uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> None:
|
|
43
|
-
|
|
69
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
70
|
+
code = lambda_to_python_script(lmb,
|
|
71
|
+
in_global=True, import_module=False)
|
|
44
72
|
uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
45
73
|
run_shell_script(uv_command)
|
|
74
|
+
|
|
75
|
+
|
|
46
76
|
def run_python_script_in_marimo(py_script: str, uv_project_with: Optional[str]):
|
|
47
77
|
tmp_dir = Path.home().joinpath("tmp_results", "tmp_scripts", "marimo", randstr())
|
|
48
78
|
tmp_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -51,7 +81,7 @@ def run_python_script_in_marimo(py_script: str, uv_project_with: Optional[str]):
|
|
|
51
81
|
if uv_project_with is not None:
|
|
52
82
|
requirements = f"""--with "marimo" --project {uv_project_with} """
|
|
53
83
|
else:
|
|
54
|
-
requirements =
|
|
84
|
+
requirements = """--with "marimo" """
|
|
55
85
|
fire_line = f"""
|
|
56
86
|
cd {tmp_dir}
|
|
57
87
|
uv run {requirements} marimo convert {pyfile.name} -o marimo_nb.py
|
|
@@ -77,38 +107,75 @@ def run_shell_script(script: str, display_script: bool = True, clean_env: bool =
|
|
|
77
107
|
lexer = "bash"
|
|
78
108
|
with tempfile.NamedTemporaryFile(mode='w', suffix=suffix, delete=False, encoding='utf-8') as temp_file:
|
|
79
109
|
temp_file.write(script)
|
|
80
|
-
|
|
110
|
+
temp_shell_script_path = Path(temp_file.name)
|
|
81
111
|
console = Console()
|
|
82
112
|
if display_script:
|
|
83
113
|
from rich.syntax import Syntax
|
|
84
|
-
console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 shell script @ {
|
|
114
|
+
console.print(Panel(Syntax(code=script, lexer=lexer), title=f"📄 shell script @ {temp_shell_script_path}", subtitle="shell script being executed"), style="bold red")
|
|
85
115
|
env = {} if clean_env else None
|
|
86
116
|
if platform.system() == "Windows":
|
|
87
117
|
import subprocess
|
|
88
|
-
proc = subprocess.run(f'powershell -ExecutionPolicy Bypass -File "{
|
|
118
|
+
proc = subprocess.run(f'powershell -ExecutionPolicy Bypass -File "{temp_shell_script_path}"', check=True, shell=True, env=env)
|
|
89
119
|
elif platform.system() == "Linux" or platform.system() == "Darwin":
|
|
90
120
|
import subprocess
|
|
91
|
-
proc = subprocess.run(f"bash {str(
|
|
121
|
+
proc = subprocess.run(f"bash {str(temp_shell_script_path)}", check=True, shell=True, env=env)
|
|
92
122
|
else:
|
|
93
123
|
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
94
124
|
# console.print(f"✅ [green]Script executed successfully:[/green] [blue]{temp_script_path}[/blue]")
|
|
95
125
|
if proc.returncode != 0:
|
|
96
|
-
console.print(f"❌ [red]Script execution failed with return code {proc.returncode}:[/red] [blue]{
|
|
126
|
+
console.print(f"❌ [red]Script execution failed with return code {proc.returncode}:[/red] [blue]{temp_shell_script_path}[/blue]")
|
|
97
127
|
elif proc.returncode == 0:
|
|
98
|
-
console.print(f"✅ [green]Script executed successfully:[/green] [blue]{
|
|
128
|
+
console.print(f"✅ [green]Script executed successfully:[/green] [blue]{temp_shell_script_path}[/blue]")
|
|
99
129
|
else:
|
|
100
|
-
console.print(f"⚠️ [yellow]Script executed with warnings (return code {proc.returncode}):[/yellow] [blue]{
|
|
101
|
-
|
|
102
|
-
console.print(f"🗑️ [blue]Temporary script deleted:[/blue] [green]{
|
|
130
|
+
console.print(f"⚠️ [yellow]Script executed with warnings (return code {proc.returncode}):[/yellow] [blue]{temp_shell_script_path}[/blue]")
|
|
131
|
+
temp_shell_script_path.unlink(missing_ok=True)
|
|
132
|
+
console.print(f"🗑️ [blue]Temporary script deleted:[/blue] [green]{temp_shell_script_path}[/green]")
|
|
103
133
|
return proc
|
|
104
134
|
|
|
105
135
|
|
|
106
|
-
def exit_then_run_shell_script(script: str):
|
|
136
|
+
def exit_then_run_shell_script(script: str, strict: bool = False):
|
|
107
137
|
import os
|
|
138
|
+
from rich.console import Console
|
|
139
|
+
|
|
140
|
+
console = Console()
|
|
108
141
|
op_program_path = os.environ.get("OP_PROGRAM_PATH", None)
|
|
109
142
|
if op_program_path is not None:
|
|
143
|
+
exists = Path(op_program_path).exists()
|
|
144
|
+
else:
|
|
145
|
+
exists = False
|
|
146
|
+
# three cases: (op_program_path is None, exists=False), (op_program_path is set, exists=False), (op_program_path is set, exists=True)
|
|
147
|
+
|
|
148
|
+
if strict: # we want to assert op_program_path is set and is not an already existing file
|
|
149
|
+
if (op_program_path is None or exists):
|
|
150
|
+
import platform
|
|
151
|
+
if platform.system() == "Windows":
|
|
152
|
+
suffix = ".ps1"
|
|
153
|
+
lexer = "powershell"
|
|
154
|
+
else:
|
|
155
|
+
suffix = ".sh"
|
|
156
|
+
lexer = "bash"
|
|
157
|
+
op_program_path = Path.home().joinpath("tmp_results", "tmp_scripts", "manual_run", f"manual_script_{randstr()}{suffix}")
|
|
158
|
+
op_program_path.parent.mkdir(parents=True, exist_ok=True)
|
|
159
|
+
op_program_path.write_text(script, encoding="utf-8")
|
|
160
|
+
print_code(code=script, lexer=lexer, desc="script to run manually")
|
|
161
|
+
console.print("[bold yellow]⚠️ STRICT MODE:[/bold yellow] [cyan]Please run the script manually via your shell by executing:[/cyan]")
|
|
162
|
+
console.print(f"[green]{str(op_program_path)}[/green]")
|
|
163
|
+
console.print("[red]❌ OP_PROGRAM_PATH environment variable is not set in strict mode.[/red]")
|
|
164
|
+
import sys
|
|
165
|
+
sys.exit(1)
|
|
166
|
+
|
|
167
|
+
if op_program_path is not None and not exists:
|
|
110
168
|
op_program_path = Path(op_program_path)
|
|
111
169
|
op_program_path.parent.mkdir(parents=True, exist_ok=True)
|
|
112
170
|
op_program_path.write_text(script, encoding="utf-8")
|
|
171
|
+
console.print("[cyan]🚀 Handing over to shell script runner via OP_PROGRAM_PATH:[/cyan]")
|
|
172
|
+
console.print(f"[bold green]{str(op_program_path)}[/bold green]")
|
|
173
|
+
print_code(code=script, lexer="shell", desc="script to run via OP_PROGRAM_PATH")
|
|
113
174
|
else:
|
|
175
|
+
if op_program_path is not None and exists:
|
|
176
|
+
console.print(f"[yellow]⚠️ OP_PROGRAM_PATH @ {str(op_program_path)} already exists.[/yellow] [cyan]Falling back to direct execution.[/cyan]")
|
|
177
|
+
elif op_program_path is None:
|
|
178
|
+
console.print("[cyan]ℹ️ OP_PROGRAM_PATH is not set.[/cyan] [yellow]Falling back to direct execution.[/yellow]")
|
|
114
179
|
run_shell_script(script)
|
|
180
|
+
import sys
|
|
181
|
+
sys.exit(0)
|
|
@@ -62,7 +62,7 @@ def get_art(comment: Optional[str] = None, artlib: Optional[BOX_OR_CHAR] = None,
|
|
|
62
62
|
try:
|
|
63
63
|
comment = subprocess.run("fortune", shell=True, capture_output=True, text=True, check=True).stdout
|
|
64
64
|
except Exception:
|
|
65
|
-
comment = "
|
|
65
|
+
comment = "machineconfig"
|
|
66
66
|
if artlib is None: artlib = random.choice(['boxes', 'cowsay'])
|
|
67
67
|
to_file = '' if not file else f'> {file}'
|
|
68
68
|
if artlib == 'boxes':
|
|
@@ -25,8 +25,9 @@ def print_header():
|
|
|
25
25
|
table.add_row("Virtual Environment", os.getenv('VIRTUAL_ENV', 'None'))
|
|
26
26
|
table.add_row("Running @", str(Path.cwd()))
|
|
27
27
|
|
|
28
|
+
from machineconfig.utils.installer_utils.installer_runner import get_machineconfig_version
|
|
28
29
|
|
|
29
|
-
console.print(Panel(table, title="[bold blue]✨ 🐊
|
|
30
|
+
console.print(Panel(table, title=f"[bold blue]✨ 🐊 Machineconfig Shell {get_machineconfig_version()} ✨ Made with 🐍 | Built with ❤️[/bold blue]", border_style="blue"))
|
|
30
31
|
def print_logo(logo: str):
|
|
31
32
|
from machineconfig.utils.files.ascii_art import font_box_color, character_color, character_or_box_color
|
|
32
33
|
if platform.system() == "Windows":
|
|
@@ -43,7 +44,7 @@ def print_logo(logo: str):
|
|
|
43
44
|
_default_art = Path(random.choice(glob.glob(str(Path(__file__).parent.joinpath("art", "*")))))
|
|
44
45
|
print(_default_art.read_text())
|
|
45
46
|
elif platform.system() in ["Linux", "Darwin"]: # Explicitly handle both Linux and macOS
|
|
46
|
-
from machineconfig.utils.installer_utils.
|
|
47
|
+
from machineconfig.utils.installer_utils.installer_locator_utils import is_executable_in_path
|
|
47
48
|
avail_cowsay = is_executable_in_path("cowsay")
|
|
48
49
|
avail_lolcat = is_executable_in_path("lolcat")
|
|
49
50
|
avail_boxes = is_executable_in_path("boxes")
|