machineconfig 3.7__py3-none-any.whl → 7.69__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +7 -21
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +128 -0
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
- machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
- machineconfig/jobs/installer/custom_dev/brave.py +82 -0
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
- machineconfig/jobs/installer/custom_dev/goes.py +68 -0
- machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
- machineconfig/jobs/installer/custom_dev/redis.py +88 -0
- machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
- machineconfig/jobs/installer/installer_data.json +3440 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
- machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +255 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +198 -0
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/{mcinit.py → initai.py} +3 -38
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +129 -198
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +45 -131
- machineconfig/scripts/python/devops_navigator.py +6 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/fire_jobs.py +166 -235
- machineconfig/scripts/python/ftpx.py +164 -100
- machineconfig/scripts/python/helpers/ast_search.py +74 -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 +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +187 -0
- machineconfig/scripts/python/mcfg_entry.py +63 -0
- machineconfig/scripts/python/msearch.py +40 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +61 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/yazi.toml +14 -1
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +52 -12
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
- machineconfig/utils/installer_utils/install_from_url.py +180 -0
- machineconfig/utils/installer_utils/installer_class.py +239 -316
- machineconfig/utils/installer_utils/installer_cli.py +186 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
- machineconfig/utils/installer_utils/installer_runner.py +191 -0
- machineconfig/utils/io.py +77 -24
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +19 -47
- machineconfig/utils/path_extended.py +111 -121
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +28 -6
- machineconfig/utils/schemas/layouts/layout_types.py +34 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- machineconfig-7.69.dist-info/METADATA +124 -0
- machineconfig-7.69.dist-info/RECORD +454 -0
- machineconfig-7.69.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/cli_click.py +0 -102
- machineconfig/cluster/templates/cli_gooey.py +0 -115
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -48
- machineconfig/jobs/python/vscode/link_ve.py +0 -63
- machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
- machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/gh.py +0 -97
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -169
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/fire_agents +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/mcinit +0 -2
- machineconfig/scripts/linux/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/archive/im2text.py +0 -34
- machineconfig/scripts/python/archive/tmate_conn.py +0 -41
- machineconfig/scripts/python/archive/tmate_start.py +0 -44
- machineconfig/scripts/python/cloud_repo_sync.py +0 -192
- machineconfig/scripts/python/cloud_sync.py +0 -85
- machineconfig/scripts/python/devops_devapps_install.py +0 -202
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -176
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
- machineconfig/scripts/python/repos.py +0 -160
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/mcinit.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer.py +0 -255
- machineconfig-3.7.dist-info/METADATA +0 -165
- machineconfig-3.7.dist-info/RECORD +0 -432
- machineconfig-3.7.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
- machineconfig/jobs/{python → installer}/__init__.py +0 -0
- machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
- machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
- /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"""Update repositories with fancy output"""
|
|
2
|
+
|
|
3
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import git
|
|
7
|
+
from rich.console import Console
|
|
8
|
+
from rich.panel import Panel
|
|
9
|
+
from rich.table import Table
|
|
10
|
+
from rich.text import Text
|
|
11
|
+
|
|
12
|
+
from machineconfig.scripts.python.helpers_repos.update import RepositoryUpdateResult, run_uv_sync, update_repository
|
|
13
|
+
from machineconfig.utils.io import read_ini
|
|
14
|
+
from machineconfig.utils.source_of_truth import DEFAULTS_PATH
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
console = Console()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _process_single_repo(expanded_path: Path, allow_password_prompt: bool) -> tuple[RepositoryUpdateResult, Path | None]:
|
|
21
|
+
"""Process a single repository and return the result."""
|
|
22
|
+
try:
|
|
23
|
+
repo = git.Repo(str(expanded_path), search_parent_directories=True)
|
|
24
|
+
# Update repository and get detailed results
|
|
25
|
+
result = update_repository(repo, allow_password_prompt=allow_password_prompt, auto_uv_sync=True)
|
|
26
|
+
|
|
27
|
+
# Keep track of repos with dependency changes for additional uv sync
|
|
28
|
+
repo_path = None
|
|
29
|
+
if result["dependencies_changed"] and not result["uv_sync_ran"]:
|
|
30
|
+
repo_path = Path(repo.working_dir)
|
|
31
|
+
|
|
32
|
+
return result, repo_path
|
|
33
|
+
|
|
34
|
+
except Exception as ex:
|
|
35
|
+
# Create a result for failed repos
|
|
36
|
+
error_result: RepositoryUpdateResult = {
|
|
37
|
+
"repo_path": str(expanded_path),
|
|
38
|
+
"status": "error",
|
|
39
|
+
"had_uncommitted_changes": False,
|
|
40
|
+
"uncommitted_files": [],
|
|
41
|
+
"commit_before": "",
|
|
42
|
+
"commit_after": "",
|
|
43
|
+
"commits_changed": False,
|
|
44
|
+
"pyproject_changed": False,
|
|
45
|
+
"dependencies_changed": False,
|
|
46
|
+
"uv_sync_ran": False,
|
|
47
|
+
"uv_sync_success": False,
|
|
48
|
+
"remotes_processed": [],
|
|
49
|
+
"remotes_skipped": [],
|
|
50
|
+
"error_message": str(ex),
|
|
51
|
+
"is_machineconfig_repo": False,
|
|
52
|
+
"permissions_updated": False,
|
|
53
|
+
}
|
|
54
|
+
console.print(
|
|
55
|
+
Panel(
|
|
56
|
+
"\n".join(
|
|
57
|
+
[
|
|
58
|
+
f"❌ Repository error: {expanded_path}",
|
|
59
|
+
f"Exception: {ex}",
|
|
60
|
+
]
|
|
61
|
+
),
|
|
62
|
+
border_style="red",
|
|
63
|
+
padding=(1, 2),
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
return error_result, None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _display_summary(results: list[RepositoryUpdateResult]) -> None:
|
|
70
|
+
"""Display a comprehensive summary of all repository update operations."""
|
|
71
|
+
|
|
72
|
+
console.rule("[bold blue]📊 Repository Update Summary[/bold blue]")
|
|
73
|
+
|
|
74
|
+
total_repos = len(results)
|
|
75
|
+
successful_repos = sum(1 for r in results if r["status"] == "success")
|
|
76
|
+
error_repos = sum(1 for r in results if r["status"] == "error")
|
|
77
|
+
skipped_repos = sum(1 for r in results if r["status"] == "skipped")
|
|
78
|
+
auth_failed_repos = sum(1 for r in results if r["status"] == "auth_failed")
|
|
79
|
+
|
|
80
|
+
repos_with_changes = sum(1 for r in results if r["commits_changed"])
|
|
81
|
+
repos_with_uncommitted = sum(1 for r in results if r["had_uncommitted_changes"])
|
|
82
|
+
repos_with_dep_changes = sum(1 for r in results if r["dependencies_changed"])
|
|
83
|
+
uv_sync_runs = sum(1 for r in results if r["uv_sync_ran"])
|
|
84
|
+
uv_sync_successes = sum(1 for r in results if r["uv_sync_ran"] and r["uv_sync_success"])
|
|
85
|
+
|
|
86
|
+
overview_lines = [
|
|
87
|
+
f"[bold]Total repositories processed:[/] {total_repos}",
|
|
88
|
+
f"✅ Successful updates: {successful_repos}",
|
|
89
|
+
f"❌ Failed updates: {error_repos}",
|
|
90
|
+
f"⏭️ Skipped: {skipped_repos}",
|
|
91
|
+
]
|
|
92
|
+
if auth_failed_repos > 0:
|
|
93
|
+
overview_lines.append(f"🔐 Authentication failed: {auth_failed_repos}")
|
|
94
|
+
|
|
95
|
+
console.print(
|
|
96
|
+
Panel(
|
|
97
|
+
"\n".join(overview_lines),
|
|
98
|
+
title="� Overview",
|
|
99
|
+
border_style="blue",
|
|
100
|
+
padding=(1, 2),
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
changes_lines = [
|
|
105
|
+
f"Repositories with new commits: {repos_with_changes}",
|
|
106
|
+
f"Repositories with dependency changes: {repos_with_dep_changes}",
|
|
107
|
+
f"Repositories with uncommitted changes: {repos_with_uncommitted}",
|
|
108
|
+
]
|
|
109
|
+
console.print(
|
|
110
|
+
Panel(
|
|
111
|
+
"\n".join(changes_lines),
|
|
112
|
+
title="� Changes",
|
|
113
|
+
border_style="magenta",
|
|
114
|
+
padding=(1, 2),
|
|
115
|
+
)
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
uv_sync_lines = [
|
|
119
|
+
f"uv sync operations attempted: {uv_sync_runs}",
|
|
120
|
+
f"uv sync operations successful: {uv_sync_successes}",
|
|
121
|
+
]
|
|
122
|
+
if uv_sync_runs > uv_sync_successes:
|
|
123
|
+
uv_sync_lines.append(f"uv sync operations failed: {uv_sync_runs - uv_sync_successes}")
|
|
124
|
+
|
|
125
|
+
console.print(
|
|
126
|
+
Panel(
|
|
127
|
+
"\n".join(uv_sync_lines),
|
|
128
|
+
title="📦 uv sync",
|
|
129
|
+
border_style="cyan",
|
|
130
|
+
padding=(1, 2),
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
table = Table(title="📋 Detailed Results", show_lines=True, header_style="bold blue")
|
|
135
|
+
table.add_column("Repository", style="bold")
|
|
136
|
+
table.add_column("Status")
|
|
137
|
+
table.add_column("Details", overflow="fold")
|
|
138
|
+
|
|
139
|
+
for result in results:
|
|
140
|
+
repo_name = Path(result["repo_path"]).name
|
|
141
|
+
status_icon = {"success": "✅", "error": "❌", "skipped": "⏭️", "auth_failed": "🔐"}.get(result["status"], "❓")
|
|
142
|
+
status_label = result["status"].replace("_", " ").title()
|
|
143
|
+
|
|
144
|
+
detail_lines: list[str] = []
|
|
145
|
+
|
|
146
|
+
if result["status"] == "error" and result["error_message"]:
|
|
147
|
+
detail_lines.append(f"💥 Error: {result['error_message']}")
|
|
148
|
+
|
|
149
|
+
if result["commits_changed"]:
|
|
150
|
+
detail_lines.append(f"🔄 Updated: {result['commit_before'][:8]} → {result['commit_after'][:8]}")
|
|
151
|
+
elif result["status"] == "success":
|
|
152
|
+
detail_lines.append("📍 Already up to date")
|
|
153
|
+
|
|
154
|
+
if result["had_uncommitted_changes"]:
|
|
155
|
+
files_str = ", ".join(result["uncommitted_files"])
|
|
156
|
+
detail_lines.append(f"⚠️ Uncommitted changes: {files_str}")
|
|
157
|
+
|
|
158
|
+
if result["dependencies_changed"]:
|
|
159
|
+
changes = []
|
|
160
|
+
if result["pyproject_changed"]:
|
|
161
|
+
changes.append("pyproject.toml")
|
|
162
|
+
if changes:
|
|
163
|
+
detail_lines.append(f"📋 Dependencies changed: {', '.join(changes)}")
|
|
164
|
+
|
|
165
|
+
if result["uv_sync_ran"]:
|
|
166
|
+
sync_status = "✅" if result["uv_sync_success"] else "❌"
|
|
167
|
+
detail_lines.append(f"📦 uv sync: {sync_status}")
|
|
168
|
+
|
|
169
|
+
if result["is_machineconfig_repo"] and result["permissions_updated"]:
|
|
170
|
+
detail_lines.append("🛠 Updated permissions for machineconfig files")
|
|
171
|
+
|
|
172
|
+
if result["remotes_processed"]:
|
|
173
|
+
detail_lines.append(f"📡 Processed remotes: {', '.join(result['remotes_processed'])}")
|
|
174
|
+
if result["remotes_skipped"]:
|
|
175
|
+
detail_lines.append(f"⏭️ Skipped remotes: {', '.join(result['remotes_skipped'])}")
|
|
176
|
+
|
|
177
|
+
table.add_row(f"{status_icon} {repo_name}", status_label, "\n".join(detail_lines) or "—")
|
|
178
|
+
|
|
179
|
+
console.print(table)
|
|
180
|
+
|
|
181
|
+
if error_repos == 0 and auth_failed_repos == 0:
|
|
182
|
+
summary_text = Text("🎉 All repositories processed successfully!", style="green", justify="center")
|
|
183
|
+
border = "green"
|
|
184
|
+
elif successful_repos > 0:
|
|
185
|
+
summary_text = Text(
|
|
186
|
+
f"⚠️ {successful_repos}/{total_repos} repositories processed successfully",
|
|
187
|
+
style="yellow",
|
|
188
|
+
justify="center",
|
|
189
|
+
)
|
|
190
|
+
border = "yellow"
|
|
191
|
+
else:
|
|
192
|
+
summary_text = Text("❌ No repositories were successfully processed", style="red", justify="center")
|
|
193
|
+
border = "red"
|
|
194
|
+
|
|
195
|
+
console.print(Panel(summary_text, title="Summary", border_style=border, padding=(1, 2)))
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def main(verbose: bool = True, allow_password_prompt: bool = False) -> None:
|
|
199
|
+
"""Main function to update all configured repositories."""
|
|
200
|
+
_ = verbose
|
|
201
|
+
repos: list[Path] = []
|
|
202
|
+
try:
|
|
203
|
+
tmp = read_ini(DEFAULTS_PATH)["general"]["repos"].split(",")
|
|
204
|
+
if tmp[-1] == "":
|
|
205
|
+
tmp = tmp[:-1]
|
|
206
|
+
for item in tmp:
|
|
207
|
+
item_obj = Path(item).expanduser()
|
|
208
|
+
if item_obj not in repos:
|
|
209
|
+
repos.append(item_obj)
|
|
210
|
+
except (FileNotFoundError, KeyError, IndexError):
|
|
211
|
+
console.print(
|
|
212
|
+
Panel(
|
|
213
|
+
"\n".join(
|
|
214
|
+
[
|
|
215
|
+
f"🚫 Configuration error: missing {DEFAULTS_PATH} or the [general] section / repos key.",
|
|
216
|
+
"ℹ️ Using default repositories instead.",
|
|
217
|
+
]
|
|
218
|
+
),
|
|
219
|
+
title="Configuration Missing",
|
|
220
|
+
border_style="red",
|
|
221
|
+
padding=(1, 2),
|
|
222
|
+
)
|
|
223
|
+
)
|
|
224
|
+
console.print(
|
|
225
|
+
Panel(
|
|
226
|
+
"\n".join(
|
|
227
|
+
[
|
|
228
|
+
"✨ Example configuration:",
|
|
229
|
+
"",
|
|
230
|
+
"[general]",
|
|
231
|
+
"repos = ~/code/repo1,~/code/repo2",
|
|
232
|
+
"rclone_config_name = onedrivePersonal",
|
|
233
|
+
"email_config_name = Yahoo3",
|
|
234
|
+
"to_email = myemail@email.com",
|
|
235
|
+
]
|
|
236
|
+
),
|
|
237
|
+
border_style="cyan",
|
|
238
|
+
padding=(1, 2),
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
update_repos(repos, allow_password_prompt)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def update_repos(repos: list[Path], allow_password_prompt: bool) -> None:
|
|
245
|
+
# Process repositories in parallel
|
|
246
|
+
results: list[RepositoryUpdateResult] = []
|
|
247
|
+
repos_with_changes = []
|
|
248
|
+
with ThreadPoolExecutor(max_workers=min(len(repos), 8)) as executor:
|
|
249
|
+
# Submit all tasks
|
|
250
|
+
future_to_repo = {
|
|
251
|
+
executor.submit(_process_single_repo, expanded_path, allow_password_prompt): expanded_path
|
|
252
|
+
for expanded_path in repos
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# Collect results as they complete
|
|
256
|
+
for future in as_completed(future_to_repo):
|
|
257
|
+
result, repo_path = future.result()
|
|
258
|
+
results.append(result)
|
|
259
|
+
if repo_path is not None:
|
|
260
|
+
repos_with_changes.append(repo_path)
|
|
261
|
+
# Run uv sync for repositories where pyproject.toml changed but sync wasn't run yet
|
|
262
|
+
for repo_path in repos_with_changes:
|
|
263
|
+
run_uv_sync(repo_path)
|
|
264
|
+
# Generate and display summary
|
|
265
|
+
_display_summary(results)
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
if __name__ == "__main__":
|
|
269
|
+
main()
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Requires: fzf, oh-my-posh
|
|
2
|
+
# Purpose: Interactive Oh My Posh theme chooser with live preview
|
|
3
|
+
|
|
4
|
+
# Path to your Oh My Posh themes directory
|
|
5
|
+
$themesDir = "$env:LOCALAPPDATA\Programs\oh-my-posh\themes"
|
|
6
|
+
|
|
7
|
+
if (-not (Test-Path $themesDir)) {
|
|
8
|
+
Write-Host "Themes directory not found at $themesDir" -ForegroundColor Red
|
|
9
|
+
exit 1
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
# Get all theme files and extract just the theme names for display
|
|
13
|
+
$themes = Get-ChildItem $themesDir -Filter "*.omp.json" | ForEach-Object {
|
|
14
|
+
[PSCustomObject]@{
|
|
15
|
+
Name = $_.BaseName
|
|
16
|
+
Path = $_.FullName
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Create a simple preview command that shows theme name and a sample prompt
|
|
21
|
+
$previewCommand = "pwsh -NoProfile -Command `"Write-Host 'Theme: ' -NoNewline -ForegroundColor Cyan; Write-Host (Split-Path '{}' -Leaf); Write-Host ''; oh-my-posh print primary --config '{}' 2>`$null`""
|
|
22
|
+
|
|
23
|
+
# Run fzf with preview
|
|
24
|
+
$selectedThemeName = $themes | ForEach-Object { $_.Path } |
|
|
25
|
+
fzf --height 80% --border --ansi --reverse `
|
|
26
|
+
--header "Select an Oh My Posh theme (Ctrl+C to cancel)" `
|
|
27
|
+
--preview $previewCommand `
|
|
28
|
+
--preview-window=right:60%:wrap
|
|
29
|
+
|
|
30
|
+
# After fzf selection
|
|
31
|
+
if ($selectedThemeName) {
|
|
32
|
+
Write-Host "`nYou selected:" -ForegroundColor Green
|
|
33
|
+
Write-Host (Split-Path $selectedThemeName -Leaf) -ForegroundColor Yellow
|
|
34
|
+
Write-Host "`nApplying theme..." -ForegroundColor Cyan
|
|
35
|
+
|
|
36
|
+
# Apply the theme to current session
|
|
37
|
+
oh-my-posh init pwsh --config $selectedThemeName | Invoke-Expression
|
|
38
|
+
|
|
39
|
+
Write-Host "`nTheme applied to current session!" -ForegroundColor Green
|
|
40
|
+
|
|
41
|
+
# Safely update the PowerShell profile
|
|
42
|
+
$profilePath = $PROFILE
|
|
43
|
+
$ompLine = "oh-my-posh init pwsh --config '$selectedThemeName' | Invoke-Expression"
|
|
44
|
+
|
|
45
|
+
# Create profile directory if it doesn't exist
|
|
46
|
+
$profileDir = Split-Path $profilePath -Parent
|
|
47
|
+
if (-not (Test-Path $profileDir)) {
|
|
48
|
+
New-Item -ItemType Directory -Path $profileDir -Force | Out-Null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# Read existing profile content or create empty array
|
|
52
|
+
if (Test-Path $profilePath) {
|
|
53
|
+
$profileContent = Get-Content $profilePath -Raw
|
|
54
|
+
} else {
|
|
55
|
+
$profileContent = ""
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Check if oh-my-posh line already exists and replace it
|
|
59
|
+
if ($profileContent -match "oh-my-posh init pwsh[^\r\n]*") {
|
|
60
|
+
# Replace existing oh-my-posh line
|
|
61
|
+
$profileContent = $profileContent -replace "oh-my-posh init pwsh[^\r\n]*", $ompLine
|
|
62
|
+
} else {
|
|
63
|
+
# Add the oh-my-posh line with proper newlines
|
|
64
|
+
if ($profileContent.Length -gt 0 -and -not $profileContent.EndsWith("`n")) {
|
|
65
|
+
$profileContent += "`n"
|
|
66
|
+
}
|
|
67
|
+
if ($profileContent.Length -gt 0) {
|
|
68
|
+
$profileContent += "`n"
|
|
69
|
+
}
|
|
70
|
+
$profileContent += $ompLine
|
|
71
|
+
$profileContent += "`n"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# Write back to profile
|
|
75
|
+
$profileContent | Set-Content $profilePath -Encoding UTF8 -NoNewline
|
|
76
|
+
|
|
77
|
+
Write-Host "Profile updated successfully!" -ForegroundColor Green
|
|
78
|
+
Write-Host "The theme will be applied automatically in future PowerShell sessions." -ForegroundColor Cyan
|
|
79
|
+
} else {
|
|
80
|
+
Write-Host "`nNo theme selected." -ForegroundColor DarkGray
|
|
81
|
+
}
|
|
@@ -52,14 +52,14 @@ def main2():
|
|
|
52
52
|
|
|
53
53
|
def set_theme(theme: str):
|
|
54
54
|
print(f"🔄 Setting WezTerm theme to: {theme}")
|
|
55
|
-
txt_lines = PathExtended("
|
|
55
|
+
txt_lines = PathExtended.home().joinpath(".config/wezterm/wezterm.lua").expanduser().read_text(encoding="utf-8").splitlines()
|
|
56
56
|
res_lines = []
|
|
57
57
|
for line in txt_lines:
|
|
58
58
|
if "config.color_scheme = " in line:
|
|
59
59
|
res_lines.append(f"config.color_scheme = '{theme}'")
|
|
60
60
|
else:
|
|
61
61
|
res_lines.append(line)
|
|
62
|
-
PathExtended("
|
|
62
|
+
PathExtended.home().joinpath(".config/wezterm/wezterm.lua").expanduser().write_text("\n".join(res_lines), encoding="utf-8")
|
|
63
63
|
time.sleep(0.1)
|
|
64
64
|
print("💾 Configuration saved")
|
|
65
65
|
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
# from machineconfig.cluster.cloud_manager import CloudManager
|
|
5
5
|
# from rich.console import Console # Add import for Console
|
|
6
6
|
# from rich.panel import Panel # Add import for Panel
|
|
7
|
-
# import argparse
|
|
8
7
|
|
|
9
8
|
# console = Console()
|
|
10
9
|
|
|
@@ -21,7 +20,6 @@
|
|
|
21
20
|
# console = Console() # Add console initialization
|
|
22
21
|
# console.print(Panel("☁️ Cloud Manager", title_align="left", expand=False))
|
|
23
22
|
|
|
24
|
-
# parser = argparse.ArgumentParser()
|
|
25
23
|
# parser.add_argument("-c", "--cloud", help="Rclone Config Name", action="store", type=str, default=None)
|
|
26
24
|
# parser.add_argument("-s", "--serve", help="Start job server", action="store_true", default=False)
|
|
27
25
|
# parser.add_argument("-R", "--reset_local", help="Clear local cache", action="store_true", default=False)
|
|
@@ -1,40 +1,7 @@
|
|
|
1
|
-
from typing import
|
|
2
|
-
import inspect
|
|
1
|
+
from typing import Optional
|
|
3
2
|
import os
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
7
|
-
# from machineconfig.utils.utils import choose_ssh_host
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def search_for_files_of_interest(path_obj: PathExtended):
|
|
11
|
-
if path_obj.joinpath(".venv").exists():
|
|
12
|
-
path_objects = path_obj.search("*", not_in=[".venv"])
|
|
13
|
-
files: list[PathExtended] = []
|
|
14
|
-
for a_path_obj in path_objects:
|
|
15
|
-
files += search_for_files_of_interest(path_obj=a_path_obj)
|
|
16
|
-
return files
|
|
17
|
-
if path_obj.is_file():
|
|
18
|
-
return [path_obj]
|
|
19
|
-
py_files = path_obj.search(pattern="*.py", not_in=["__init__.py"], r=True)
|
|
20
|
-
ps_files = path_obj.search(pattern="*.ps1", r=True)
|
|
21
|
-
sh_files = path_obj.search(pattern="*.sh", r=True)
|
|
22
|
-
files = py_files + ps_files + sh_files
|
|
23
|
-
return files
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def convert_kwargs_to_fire_kwargs_str(kwargs: dict[str, Any]) -> str:
|
|
27
|
-
# https://google.github.io/python-fire/guide/
|
|
28
|
-
# https://github.com/google/python-fire/blob/master/docs/guide.md#argument-parsing
|
|
29
|
-
if not kwargs: # empty dict
|
|
30
|
-
kwargs_str = ""
|
|
31
|
-
else:
|
|
32
|
-
# For fire module, all keyword arguments should be passed as --key value pairs
|
|
33
|
-
tmp_list: list[str] = []
|
|
34
|
-
for k, v in kwargs.items():
|
|
35
|
-
tmp_list.append(f"--{k} {v}")
|
|
36
|
-
kwargs_str = " " + " ".join(tmp_list) + " "
|
|
37
|
-
return kwargs_str
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import platform
|
|
38
5
|
|
|
39
6
|
|
|
40
7
|
def parse_pyfile(file_path: str):
|
|
@@ -45,7 +12,7 @@ def parse_pyfile(file_path: str):
|
|
|
45
12
|
func_args: list[list[args_spec]] = [[]] # this firt prepopulated dict is for the option 'RUN AS MAIN' which has no args
|
|
46
13
|
import ast
|
|
47
14
|
|
|
48
|
-
parsed_ast = ast.parse(
|
|
15
|
+
parsed_ast = ast.parse(Path(file_path).read_text(encoding="utf-8"))
|
|
49
16
|
functions = [node for node in ast.walk(parsed_ast) if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef))]
|
|
50
17
|
module__doc__ = ast.get_docstring(parsed_ast)
|
|
51
18
|
main_option = f"RUN AS MAIN -- {module__doc__ if module__doc__ is not None else 'NoDocs'}"
|
|
@@ -86,58 +53,6 @@ def parse_pyfile(file_path: str):
|
|
|
86
53
|
return options, func_args
|
|
87
54
|
|
|
88
55
|
|
|
89
|
-
def interactively_run_function(func: Callable[[Any], Any]):
|
|
90
|
-
sig = inspect.signature(func)
|
|
91
|
-
params = list(sig.parameters.values())
|
|
92
|
-
args = []
|
|
93
|
-
kwargs = {}
|
|
94
|
-
for param in params:
|
|
95
|
-
if param.annotation is not inspect.Parameter.empty:
|
|
96
|
-
hint = f" ({param.annotation.__name__})"
|
|
97
|
-
else:
|
|
98
|
-
hint = ""
|
|
99
|
-
if param.default is not inspect.Parameter.empty:
|
|
100
|
-
default = param.default
|
|
101
|
-
value = input(f"Please enter a value for argument `{param.name}` (type = {hint}) (default = {default}) : ")
|
|
102
|
-
if value == "":
|
|
103
|
-
value = default
|
|
104
|
-
else:
|
|
105
|
-
value = input(f"Please enter a value for argument `{param.name}` (type = {hint}) : ")
|
|
106
|
-
try:
|
|
107
|
-
if param.annotation is not inspect.Parameter.empty:
|
|
108
|
-
value = param.annotation
|
|
109
|
-
except (TypeError, ValueError) as err:
|
|
110
|
-
raise ValueError(f"Invalid input: {value} is not of type {param.annotation}") from err
|
|
111
|
-
if param.kind == inspect.Parameter.KEYWORD_ONLY:
|
|
112
|
-
kwargs[param.name] = value
|
|
113
|
-
else:
|
|
114
|
-
args.append((param.name, value))
|
|
115
|
-
args_to_kwargs = dict(args)
|
|
116
|
-
return args_to_kwargs, kwargs
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def get_attrs_recursively(obj: Any):
|
|
120
|
-
if hasattr(obj, "__dict__"):
|
|
121
|
-
res = {}
|
|
122
|
-
for k, v in obj.__dict__.items():
|
|
123
|
-
res[k] = get_attrs_recursively(v)
|
|
124
|
-
return res
|
|
125
|
-
return obj
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
# def run_on_remote(func_file: str, args: argparse.Namespace):
|
|
129
|
-
# host = choose_ssh_host(multi=False)
|
|
130
|
-
# assert isinstance(host, str), f"host must be a string. Got {type(host)}"
|
|
131
|
-
# from machineconfig.cluster.remote_machine import RemoteMachine, RemoteMachineConfig
|
|
132
|
-
# config = RemoteMachineConfig(copy_repo=True, update_repo=False, update_essential_repos=True,
|
|
133
|
-
# notify_upon_completion=True, ssh_params=dict(host=host),
|
|
134
|
-
# # to_email=None, email_config_name='enaut',
|
|
135
|
-
# data=[],
|
|
136
|
-
# ipython=False, interactive=args.interactive, pdb=False, pudb=args.debug, wrap_in_try_except=False,
|
|
137
|
-
# transfer_method="sftp")
|
|
138
|
-
# m = RemoteMachine(func=func_file, func_kwargs=None, config=config)
|
|
139
|
-
# m.run()
|
|
140
|
-
|
|
141
56
|
|
|
142
57
|
def find_repo_root_path(start_path: str) -> Optional[str]:
|
|
143
58
|
root_files = ["setup.py", "pyproject.toml", ".git"]
|
|
@@ -178,3 +93,56 @@ def get_import_module_code(module_path: str):
|
|
|
178
93
|
module_name = "IncorrectModuleName"
|
|
179
94
|
# TODO: use py_compile to check if the statement is valid code to avoid syntax errors that can't be caught.
|
|
180
95
|
return f"from {module_name} import *"
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def wrap_import_in_try_except(import_line: str, pyfile: str, repo_root: Optional[str] = None) -> None:
|
|
99
|
+
try:
|
|
100
|
+
exec(import_line) # type: ignore
|
|
101
|
+
except (ImportError, ModuleNotFoundError) as ex:
|
|
102
|
+
print(fr"❌ Failed to import `{pyfile}` as a module: {ex} ")
|
|
103
|
+
print("⚠️ Attempting import with ad-hoc `$PATH` manipulation. DO NOT pickle any objects in this session as correct deserialization cannot be guaranteed.")
|
|
104
|
+
import sys
|
|
105
|
+
sys.path.append(str(Path(pyfile).parent))
|
|
106
|
+
if repo_root is not None:
|
|
107
|
+
sys.path.append(repo_root)
|
|
108
|
+
exec(f"from {Path(pyfile).stem} import *")
|
|
109
|
+
print(fr"✅ Successfully imported `{pyfile}`")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def add_to_path(path_variable: str, directory: str) -> str:
|
|
113
|
+
"""
|
|
114
|
+
Generate shell script to add directory to path_variable.
|
|
115
|
+
Handles both Windows (cmd) and Unix-like systems (bash/zsh).
|
|
116
|
+
Checks if variable exists before appending, otherwise creates it.
|
|
117
|
+
"""
|
|
118
|
+
system = platform.system()
|
|
119
|
+
|
|
120
|
+
if system == "Windows":
|
|
121
|
+
script = f"""# Check if {path_variable} is defined
|
|
122
|
+
if (Test-Path env:{path_variable}) {{
|
|
123
|
+
Write-Host "Adding {directory} to existing {path_variable}"
|
|
124
|
+
$currentValue = [Environment]::GetEnvironmentVariable("{path_variable}", "User")
|
|
125
|
+
$newValue = "$currentValue;{directory}"
|
|
126
|
+
[Environment]::SetEnvironmentVariable("{path_variable}", $newValue, "User")
|
|
127
|
+
$env:{path_variable} = $newValue
|
|
128
|
+
}} else {{
|
|
129
|
+
Write-Host "Creating new {path_variable} variable"
|
|
130
|
+
[Environment]::SetEnvironmentVariable("{path_variable}", "{directory}", "User")
|
|
131
|
+
$env:{path_variable} = "{directory}"
|
|
132
|
+
}}
|
|
133
|
+
Write-Host "{path_variable} is now: $env:{path_variable}\""""
|
|
134
|
+
return script
|
|
135
|
+
else:
|
|
136
|
+
script = f"""#!/bin/bash
|
|
137
|
+
# Check if {path_variable} is defined and not empty
|
|
138
|
+
if [ -z "${{{path_variable}}}" ]; then
|
|
139
|
+
echo "Creating new {path_variable} variable"
|
|
140
|
+
export {path_variable}="{directory}"
|
|
141
|
+
else
|
|
142
|
+
echo "Adding {directory} to existing {path_variable}"
|
|
143
|
+
export {path_variable}="${{{path_variable}}}:{directory}"
|
|
144
|
+
fi
|
|
145
|
+
echo "{path_variable} is now: ${{{path_variable}}}"
|
|
146
|
+
"""
|
|
147
|
+
return script
|
|
148
|
+
|