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
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
from machineconfig.utils.accessories import randstr
|
|
2
|
-
|
|
3
|
-
import random
|
|
4
|
-
import shlex
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
from typing import Literal, TypeAlias
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
AGENTS: TypeAlias = Literal[
|
|
10
|
-
"cursor-agent", "gemini", "crush", "q", "onlyPrepPromptFiles"
|
|
11
|
-
# warp terminal
|
|
12
|
-
]
|
|
13
|
-
AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def get_gemini_api_keys() -> list[str]:
|
|
17
|
-
from machineconfig.utils.io import read_ini
|
|
18
|
-
|
|
19
|
-
config = read_ini(Path.home().joinpath("dotfiles/creds/llm/gemini/api_keys.ini"))
|
|
20
|
-
res: list[str] = []
|
|
21
|
-
for a_section_name in list(config.sections()):
|
|
22
|
-
a_section = config[a_section_name]
|
|
23
|
-
if "api_key" in a_section:
|
|
24
|
-
api_key = a_section["api_key"].strip()
|
|
25
|
-
if api_key:
|
|
26
|
-
res.append(api_key)
|
|
27
|
-
print(f"Found {len(res)} Gemini API keys configured.")
|
|
28
|
-
return res
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def prep_agent_launch(repo_root: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool, agent: AGENTS, *, job_name: str) -> Path:
|
|
32
|
-
session_root = repo_root / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
|
|
33
|
-
session_root.mkdir(parents=True, exist_ok=True)
|
|
34
|
-
prompt_folder = session_root / "prompts"
|
|
35
|
-
prompt_folder.mkdir(parents=True, exist_ok=True)
|
|
36
|
-
|
|
37
|
-
all_materials_scripts: list[Path] = []
|
|
38
|
-
for idx, a_prompt_material in enumerate(prompts_material):
|
|
39
|
-
prompt_root = prompt_folder / f"agent_{idx}"
|
|
40
|
-
prompt_root.mkdir(parents=True, exist_ok=True)
|
|
41
|
-
prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
|
|
42
|
-
if keep_material_in_separate_file:
|
|
43
|
-
prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
|
|
44
|
-
prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
|
|
45
|
-
prompt_path.write_text(prompt_prefix + f"""\nPlease only look @ {prompt_material_path}. You don't need to do any other work beside the content of this material file.""", encoding="utf-8")
|
|
46
|
-
all_materials_scripts.append(prompt_material_path)
|
|
47
|
-
else:
|
|
48
|
-
prompt_material_path = prompt_path
|
|
49
|
-
prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
|
|
50
|
-
|
|
51
|
-
agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
|
|
52
|
-
random_sleep_time = random.uniform(0, 5)
|
|
53
|
-
cmd_prefix = f"""
|
|
54
|
-
#!/usr/bin/env bash
|
|
55
|
-
|
|
56
|
-
# AGENT-{idx}-LAUNCH-SCRIPT
|
|
57
|
-
# Auto-generated by fire_agents.py
|
|
58
|
-
|
|
59
|
-
export FIRE_AGENTS_AGENT_NAME="{agent}"
|
|
60
|
-
export FIRE_AGENTS_JOB_NAME="{job_name}"
|
|
61
|
-
export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
|
|
62
|
-
export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
|
|
63
|
-
export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
|
|
64
|
-
|
|
65
|
-
echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
|
|
66
|
-
sleep {random_sleep_time:.2f}
|
|
67
|
-
echo "Launching agent {agent} with prompt from {prompt_path}"
|
|
68
|
-
echo "Launching agent {agent} with command from {agent_cmd_launch_path}"
|
|
69
|
-
echo "--------START OF AGENT OUTPUT--------"
|
|
70
|
-
sleep 0.1
|
|
71
|
-
|
|
72
|
-
"""
|
|
73
|
-
match agent:
|
|
74
|
-
case "gemini":
|
|
75
|
-
model = "gemini-2.5-pro"
|
|
76
|
-
# model = "gemini-2.5-flash-lite"
|
|
77
|
-
# model = None # auto-select
|
|
78
|
-
# if model is None:
|
|
79
|
-
# model_arg = ""
|
|
80
|
-
# else:
|
|
81
|
-
model_arg = f"--model {shlex.quote(model)}"
|
|
82
|
-
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
83
|
-
safe_path = shlex.quote(str(prompt_path))
|
|
84
|
-
api_keys = get_gemini_api_keys()
|
|
85
|
-
api_key = api_keys[idx % len(api_keys)] if api_keys else ""
|
|
86
|
-
# Export the environment variable so it's available to subshells
|
|
87
|
-
cmd = f"""
|
|
88
|
-
export GEMINI_API_KEY={shlex.quote(api_key)}
|
|
89
|
-
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
90
|
-
bash -lc 'cat {safe_path} | gemini {model_arg} --yolo --prompt'
|
|
91
|
-
"""
|
|
92
|
-
case "cursor-agent":
|
|
93
|
-
# As originally implemented
|
|
94
|
-
cmd = f"""
|
|
95
|
-
|
|
96
|
-
cursor-agent --print --output-format text < {prompt_path}
|
|
97
|
-
|
|
98
|
-
"""
|
|
99
|
-
case "crush":
|
|
100
|
-
cmd = f"""
|
|
101
|
-
crush run {prompt_path}
|
|
102
|
-
"""
|
|
103
|
-
case "q":
|
|
104
|
-
cmd = f"""
|
|
105
|
-
q chat --no-interactive --trust-all-tools {prompt_path}
|
|
106
|
-
"""
|
|
107
|
-
case "onlyPrepPromptFiles":
|
|
108
|
-
cmd = f"""
|
|
109
|
-
echo "Prepared prompt file at {prompt_path}"
|
|
110
|
-
"""
|
|
111
|
-
case _:
|
|
112
|
-
raise ValueError(f"Unsupported agent type: {agent}")
|
|
113
|
-
cmd_postfix = """
|
|
114
|
-
sleep 0.1
|
|
115
|
-
echo "---------END OF AGENT OUTPUT---------"
|
|
116
|
-
"""
|
|
117
|
-
agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
|
|
118
|
-
|
|
119
|
-
# print(f"Launching a template with #{len(tab_config)} agents")
|
|
120
|
-
if len(all_materials_scripts) > 0:
|
|
121
|
-
all_materials_list_path = session_root / "all_materials_redistributed.txt"
|
|
122
|
-
all_materials_list_path.write_text("\n".join(str(p) for p in all_materials_scripts), encoding="utf-8")
|
|
123
|
-
print(f"All prompt materials listed @ {all_materials_list_path}")
|
|
124
|
-
return session_root
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def get_agents_launch_layout(session_root: Path):
|
|
128
|
-
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
|
|
129
|
-
|
|
130
|
-
tab_config: list[TabConfig] = []
|
|
131
|
-
prompt_root = session_root / "prompts"
|
|
132
|
-
all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
|
|
133
|
-
launch_agents_squentially = ""
|
|
134
|
-
for a_prompt_dir in all_dirs_under_prompts:
|
|
135
|
-
idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
|
|
136
|
-
agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
|
|
137
|
-
fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
|
|
138
|
-
tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
|
|
139
|
-
launch_agents_squentially += f". {shlex.quote(str(agent_cmd_path))}\n"
|
|
140
|
-
layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
|
|
141
|
-
(session_root / "launch_all_agents_sequentially.sh").write_text(launch_agents_squentially, encoding="utf-8")
|
|
142
|
-
layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
|
|
143
|
-
return layouts_file
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
from typing import Literal, TypeAlias
|
|
2
|
-
from math import ceil
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
SPLITTING_STRATEGY: TypeAlias = Literal[
|
|
7
|
-
"agent_cap", # User decides number of agents, rows/tasks determined automatically
|
|
8
|
-
"task_rows", # User decides number of rows/tasks, number of agents determined automatically
|
|
9
|
-
]
|
|
10
|
-
DEFAULT_AGENT_CAP = 6
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def chunk_prompts(prompt_material_path: Path, strategy: SPLITTING_STRATEGY, joiner: str, *, agent_cap: int | None, task_rows: int | None) -> list[str]:
|
|
14
|
-
"""Chunk prompts based on splitting strategy.
|
|
15
|
-
|
|
16
|
-
Args:
|
|
17
|
-
prompts: List of prompts to chunk
|
|
18
|
-
strategy: Either 'agent_cap' or 'task_rows'
|
|
19
|
-
agent_cap: Maximum number of agents (used with 'agent_cap' strategy)
|
|
20
|
-
task_rows: Number of rows/tasks per agent (used with 'task_rows' strategy)
|
|
21
|
-
"""
|
|
22
|
-
prompts = [p for p in prompt_material_path.read_text(encoding="utf-8", errors="ignore").split(joiner) if p.strip() != ""] # drop blank entries
|
|
23
|
-
|
|
24
|
-
if strategy == "agent_cap":
|
|
25
|
-
if agent_cap is None:
|
|
26
|
-
raise ValueError("agent_cap must be provided when using 'agent_cap' strategy")
|
|
27
|
-
|
|
28
|
-
if len(prompts) <= agent_cap:
|
|
29
|
-
return prompts
|
|
30
|
-
|
|
31
|
-
print(f"Chunking {len(prompts)} prompts into groups for up to {agent_cap} agents because it exceeds the cap.")
|
|
32
|
-
chunk_size = ceil(len(prompts) / agent_cap)
|
|
33
|
-
grouped: list[str] = []
|
|
34
|
-
for i in range(0, len(prompts), chunk_size):
|
|
35
|
-
grouped.append(joiner.join(prompts[i : i + chunk_size]))
|
|
36
|
-
return grouped
|
|
37
|
-
|
|
38
|
-
elif strategy == "task_rows":
|
|
39
|
-
if task_rows is None:
|
|
40
|
-
raise ValueError("task_rows must be provided when using 'task_rows' strategy")
|
|
41
|
-
if task_rows >= len(prompts):
|
|
42
|
-
return prompts
|
|
43
|
-
print(f"Chunking {len(prompts)} prompts into groups of {task_rows} rows/tasks each.")
|
|
44
|
-
grouped: list[str] = []
|
|
45
|
-
for i in range(0, len(prompts), task_rows):
|
|
46
|
-
grouped.append(joiner.join(prompts[i : i + task_rows]))
|
|
47
|
-
return grouped
|
|
48
|
-
|
|
49
|
-
else:
|
|
50
|
-
raise ValueError(f"Unknown splitting strategy: {strategy}")
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from typing import Optional
|
|
3
|
-
import argparse
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@dataclass
|
|
7
|
-
class FireJobArgs:
|
|
8
|
-
"""Type-safe dataclass for fire_jobs command line arguments."""
|
|
9
|
-
|
|
10
|
-
path: str = "."
|
|
11
|
-
function: Optional[str] = None
|
|
12
|
-
ve: str = ""
|
|
13
|
-
cmd: bool = False
|
|
14
|
-
interactive: bool = False
|
|
15
|
-
debug: bool = False
|
|
16
|
-
choose_function: bool = False
|
|
17
|
-
loop: bool = False
|
|
18
|
-
jupyter: bool = False
|
|
19
|
-
submit_to_cloud: bool = False
|
|
20
|
-
remote: bool = False
|
|
21
|
-
module: bool = False
|
|
22
|
-
streamlit: bool = False
|
|
23
|
-
environment: str = ""
|
|
24
|
-
holdDirectory: bool = False
|
|
25
|
-
PathExport: bool = False
|
|
26
|
-
git_pull: bool = False
|
|
27
|
-
optimized: bool = False
|
|
28
|
-
Nprocess: int = 1
|
|
29
|
-
zellij_tab: Optional[str] = None
|
|
30
|
-
watch: bool = False
|
|
31
|
-
kw: Optional[list[str]] = None
|
|
32
|
-
layout: bool = False
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def get_args() -> FireJobArgs:
|
|
36
|
-
parser = argparse.ArgumentParser()
|
|
37
|
-
parser.add_argument("path", nargs="?", type=str, help="The directory containing the jobs", default=".")
|
|
38
|
-
parser.add_argument("function", nargs="?", type=str, help="Fuction to run", default=None)
|
|
39
|
-
parser.add_argument("--ve", "-v", type=str, help="virtual enviroment name", default="")
|
|
40
|
-
parser.add_argument("--cmd", "-B", action="store_true", help="Create a cmd fire command to launch the the job asynchronously.")
|
|
41
|
-
parser.add_argument("--interactive", "-i", action="store_true", help="Whether to run the job interactively using IPython")
|
|
42
|
-
parser.add_argument("--debug", "-d", action="store_true", help="debug")
|
|
43
|
-
parser.add_argument("--choose_function", "-c", action="store_true", help="debug")
|
|
44
|
-
parser.add_argument("--loop", "-l", action="store_true", help="infinite recusion (runs again after completion/interruption)")
|
|
45
|
-
parser.add_argument("--jupyter", "-j", action="store_true", help="open in a jupyter notebook")
|
|
46
|
-
parser.add_argument("--submit_to_cloud", "-C", action="store_true", help="submit to cloud compute")
|
|
47
|
-
parser.add_argument("--remote", "-r", action="store_true", help="launch on a remote machine")
|
|
48
|
-
parser.add_argument("--module", "-m", action="store_true", help="launch the main file")
|
|
49
|
-
parser.add_argument("--streamlit", "-S", action="store_true", help="run as streamlit app")
|
|
50
|
-
parser.add_argument("--environment", "-E", type=str, help="Choose ip, localhost, hostname or arbitrary url", default="")
|
|
51
|
-
parser.add_argument("--holdDirectory", "-D", action="store_true", help="hold current directory and avoid cd'ing to the script directory")
|
|
52
|
-
parser.add_argument("--PathExport", "-P", action="store_true", help="augment the PYTHONPATH with repo root.")
|
|
53
|
-
parser.add_argument("--git_pull", "-g", action="store_true", help="Start by pulling the git repo")
|
|
54
|
-
parser.add_argument("--optimized", "-O", action="store_true", help="Run the optimized version of the function")
|
|
55
|
-
parser.add_argument("--Nprocess", "-p", type=int, help="Number of processes to use", default=1)
|
|
56
|
-
parser.add_argument("--zellij_tab", "-z", type=str, dest="zellij_tab", help="open in a new zellij tab")
|
|
57
|
-
parser.add_argument("--watch", "-w", action="store_true", help="watch the file for changes")
|
|
58
|
-
parser.add_argument("--kw", nargs="*", default=None, help="keyword arguments to pass to the function in the form of k1 v1 k2 v2 ... (meaning k1=v1, k2=v2, etc)")
|
|
59
|
-
parser.add_argument("--layout", "-L", action="store_true", help="use layout configuration (Zellij Or WindowsTerminal)")
|
|
60
|
-
|
|
61
|
-
try:
|
|
62
|
-
args_raw = parser.parse_args()
|
|
63
|
-
except Exception as ex:
|
|
64
|
-
print(f"❌ Failed to parse arguments: {ex}")
|
|
65
|
-
parser.print_help()
|
|
66
|
-
raise ex
|
|
67
|
-
args = FireJobArgs(**vars(args_raw))
|
|
68
|
-
return args
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def extract_kwargs(args: FireJobArgs) -> dict[str, object]:
|
|
72
|
-
str2obj = {"True": True, "False": False, "None": None}
|
|
73
|
-
if args.kw is not None:
|
|
74
|
-
assert len(args.kw) % 2 == 0, f"args.kw must be a list of even length. Got {len(args.kw)}"
|
|
75
|
-
kwargs = dict(zip(args.kw[::2], args.kw[1::2]))
|
|
76
|
-
kwargs: dict[str, object]
|
|
77
|
-
for key, value in kwargs.items():
|
|
78
|
-
if value in str2obj:
|
|
79
|
-
kwargs[key] = str2obj[str(value)]
|
|
80
|
-
if args.function is None: # if user passed arguments and forgot to pass function, then assume they want to run the main function.
|
|
81
|
-
args.choose_function = True
|
|
82
|
-
else:
|
|
83
|
-
kwargs = {}
|
|
84
|
-
return kwargs
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, LayoutsFile
|
|
3
|
-
from typing import Optional, TYPE_CHECKING
|
|
4
|
-
from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
|
|
5
|
-
from machineconfig.utils.options import choose_from_options
|
|
6
|
-
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
7
|
-
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
8
|
-
|
|
9
|
-
if TYPE_CHECKING:
|
|
10
|
-
from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def select_layout(layouts_json_file: Path, layout_name: Optional[str]):
|
|
14
|
-
import json
|
|
15
|
-
|
|
16
|
-
layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
|
|
17
|
-
if len(layout_file["layouts"]) == 0:
|
|
18
|
-
raise ValueError(f"No layouts found in {layouts_json_file}")
|
|
19
|
-
if layout_name is None:
|
|
20
|
-
options = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
21
|
-
from machineconfig.utils.options import choose_from_options
|
|
22
|
-
|
|
23
|
-
layout_name = choose_from_options(multi=False, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
|
|
24
|
-
print(f"Selected layout: {layout_name}")
|
|
25
|
-
layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layout_name), None)
|
|
26
|
-
if layout_chosen is None:
|
|
27
|
-
layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == layout_name.lower()), None)
|
|
28
|
-
if layout_chosen is None:
|
|
29
|
-
available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
30
|
-
raise ValueError(f"Layout '{layout_name}' not found. Available layouts: {available_layouts}")
|
|
31
|
-
return layout_chosen
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def launch_layout(layout_config: LayoutConfig) -> Optional[Exception]:
|
|
35
|
-
import platform
|
|
36
|
-
|
|
37
|
-
if platform.system() == "Linux" or platform.system() == "Darwin":
|
|
38
|
-
print("🧑💻 Launching layout using Zellij terminal multiplexer...")
|
|
39
|
-
from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
|
|
40
|
-
|
|
41
|
-
run_zellij_layout(layout_config=layout_config)
|
|
42
|
-
elif platform.system() == "Windows":
|
|
43
|
-
print("🧑💻 Launching layout using Windows Terminal...")
|
|
44
|
-
from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
|
|
45
|
-
|
|
46
|
-
run_wt_layout(layout_config=layout_config)
|
|
47
|
-
else:
|
|
48
|
-
print(f"❌ Unsupported platform: {platform.system()}")
|
|
49
|
-
return None
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def handle_layout_args(args: "FireJobArgs") -> None:
|
|
53
|
-
# args.function = args.path
|
|
54
|
-
# args.path = "layout.json"
|
|
55
|
-
path_obj = sanitize_path(args.path)
|
|
56
|
-
if not path_obj.exists():
|
|
57
|
-
choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes={".json"})
|
|
58
|
-
elif path_obj.is_dir():
|
|
59
|
-
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
60
|
-
files = search_for_files_of_interest(path_obj)
|
|
61
|
-
print(f"🔍 Got #{len(files)} results.")
|
|
62
|
-
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
63
|
-
choice_file = PathExtended(choice_file)
|
|
64
|
-
else:
|
|
65
|
-
choice_file = path_obj
|
|
66
|
-
launch_layout(layout_config=select_layout(layouts_json_file=choice_file, layout_name=args.function))
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
|
|
5
|
-
_ = wd1, wd2
|
|
6
|
-
lines = [
|
|
7
|
-
""" zellij action new-tab --name gitdiff""",
|
|
8
|
-
"""zellij action new-pane --direction down --name local --cwd ./data """,
|
|
9
|
-
"""zellij action write-chars "cd '{wd1}'; git status" """,
|
|
10
|
-
"""zellij action move-focus up; zellij action close-pane """,
|
|
11
|
-
"""zellij action new-pane --direction down --name remote --cwd code """,
|
|
12
|
-
"""zellij action write-chars "cd '{wd2}' """,
|
|
13
|
-
"""git status" """,
|
|
14
|
-
]
|
|
15
|
-
return "; ".join(lines)
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# # as per https://github.com/marketplace/models/azure-openai/o1-preview
|
|
2
|
-
# from openai import OpenAI
|
|
3
|
-
# from machineconfig.utils.path_reduced import P as PathExtended
|
|
4
|
-
# from machineconfig.utils.utils2 import read_ini
|
|
5
|
-
# from rich import print as rprint
|
|
6
|
-
# from rich.panel import Panel
|
|
7
|
-
# from typing import Any
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
|
|
11
|
-
# endpoint = "https://models.inference.ai.azure.com"
|
|
12
|
-
# model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
|
|
13
|
-
# client__ = OpenAI(
|
|
14
|
-
# base_url=endpoint,
|
|
15
|
-
# api_key=gh_token,
|
|
16
|
-
# )
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
|
|
20
|
-
# print(f"""
|
|
21
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
22
|
-
# │ 🤖 Querying Model: {model_name}
|
|
23
|
-
# │ Sending request to API...
|
|
24
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
25
|
-
# try:
|
|
26
|
-
# response = client.chat.completions.create(
|
|
27
|
-
# messages=messages,
|
|
28
|
-
# model=model_name
|
|
29
|
-
# )
|
|
30
|
-
# return response.choices
|
|
31
|
-
# except Exception as e:
|
|
32
|
-
# print(f"""
|
|
33
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
34
|
-
# ┃ ❌ API Error with model {model_name}
|
|
35
|
-
# ┃ {str(e)}
|
|
36
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
37
|
-
# return None
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# def interactive_chat():
|
|
41
|
-
# conversation_history = []
|
|
42
|
-
# model_index = 0
|
|
43
|
-
# model_name = model_name_preferences[model_index]
|
|
44
|
-
|
|
45
|
-
# print("""
|
|
46
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
-
# ┃ 🚀 Interactive Chat Started
|
|
48
|
-
# ┃ Type your message and press Enter to chat
|
|
49
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
50
|
-
|
|
51
|
-
# while True:
|
|
52
|
-
# header = f" 🤖 Using Model: {model_name} "
|
|
53
|
-
# print(f"\n{header.center(80, '═')}\n")
|
|
54
|
-
|
|
55
|
-
# while True:
|
|
56
|
-
# try:
|
|
57
|
-
# user_input = input("💬 You: ")
|
|
58
|
-
# conversation_history.append({"role": "user", "content": user_input})
|
|
59
|
-
|
|
60
|
-
# while True:
|
|
61
|
-
# choices = get_response(client__, model_name, conversation_history)
|
|
62
|
-
# if choices is None:
|
|
63
|
-
# model_index += 1
|
|
64
|
-
# model_name = model_name_preferences[model_index % len(model_name_preferences)]
|
|
65
|
-
# print(f"""
|
|
66
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
67
|
-
# │ 🔄 Model Switch
|
|
68
|
-
# │ Now using: {model_name}
|
|
69
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
70
|
-
# continue
|
|
71
|
-
# else:
|
|
72
|
-
# break
|
|
73
|
-
|
|
74
|
-
# for a_choice in choices:
|
|
75
|
-
# response_content = a_choice.message.content
|
|
76
|
-
# print("\n" * 2)
|
|
77
|
-
# try:
|
|
78
|
-
# rprint(Panel(
|
|
79
|
-
# f"{response_content}",
|
|
80
|
-
# title=f"🤖 AI ({model_name})",
|
|
81
|
-
# border_style="blue"
|
|
82
|
-
# ))
|
|
83
|
-
# except Exception:
|
|
84
|
-
# # Fallback if rich formatting fails
|
|
85
|
-
# print(f"""
|
|
86
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
87
|
-
# │ 🤖 AI ({model_name}):
|
|
88
|
-
# │
|
|
89
|
-
# {response_content}
|
|
90
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
91
|
-
|
|
92
|
-
# conversation_history.append({"role": "assistant", "content": response_content})
|
|
93
|
-
# print("\n")
|
|
94
|
-
# except KeyboardInterrupt:
|
|
95
|
-
# print("""
|
|
96
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
|
-
# ┃ 👋 Chat Session Ended
|
|
98
|
-
# ┃ Thank you for using the interactive chat!
|
|
99
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
100
|
-
# return
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
# if __name__ == "__main__":
|
|
104
|
-
# interactive_chat()
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
2
|
-
from machineconfig.utils.terminal import Terminal
|
|
3
|
-
from machineconfig.scripts.python.get_zellij_cmd import get_zellij_cmd
|
|
4
|
-
from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
|
|
5
|
-
from machineconfig.utils.io import read_ini
|
|
6
|
-
from machineconfig.utils.code import write_shell_script_to_file
|
|
7
|
-
import platform
|
|
8
|
-
from rich.console import Console
|
|
9
|
-
from rich.panel import Panel
|
|
10
|
-
|
|
11
|
-
console = Console()
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def delete_remote_repo_copy_and_push_local(remote_repo: str, local_repo: str, cloud: str):
|
|
15
|
-
console.print(Panel("🗑️ Deleting remote repo copy and pushing local copy", title="[bold blue]Repo Sync[/bold blue]", border_style="blue"))
|
|
16
|
-
repo_sync_root = PathExtended(remote_repo).expanduser().absolute()
|
|
17
|
-
repo_root_path = PathExtended(local_repo).expanduser().absolute()
|
|
18
|
-
repo_sync_root.delete(sure=True)
|
|
19
|
-
print("🧹 Removed temporary remote copy")
|
|
20
|
-
from git.remote import Remote
|
|
21
|
-
from git.repo import Repo
|
|
22
|
-
|
|
23
|
-
try:
|
|
24
|
-
Remote.remove(Repo(repo_root_path), "originEnc")
|
|
25
|
-
console.print(Panel("🔗 Removed originEnc remote reference", border_style="blue"))
|
|
26
|
-
except Exception:
|
|
27
|
-
pass # type: ignore
|
|
28
|
-
console.print(Panel("📈 Deleting remote repository copy and pushing local changes", width=150, border_style="blue"))
|
|
29
|
-
|
|
30
|
-
repo_root_path.to_cloud(cloud=cloud, zip=True, encrypt=True, rel2home=True, os_specific=False)
|
|
31
|
-
|
|
32
|
-
console.print(Panel("✅ Repository successfully pushed to cloud", title="[bold green]Repo Sync[/bold green]", border_style="green"))
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
# import sys
|
|
36
|
-
# import subprocess
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def get_wt_cmd(wd1: PathExtended, wd2: PathExtended) -> str:
|
|
40
|
-
lines = [
|
|
41
|
-
f"""wt --window 0 new-tab --profile pwsh --title "gitdiff" --tabColor `#3b04d1 --startingDirectory {wd1} ` --colorScheme "Solarized Dark" """,
|
|
42
|
-
f"""split-pane --horizontal --profile pwsh --startingDirectory {wd2} --size 0.5 --colorScheme "Tango Dark" -- pwsh -Interactive """,
|
|
43
|
-
]
|
|
44
|
-
return " `; ".join(lines)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
def inspect_repos(repo_local_root: str, repo_remote_root: str):
|
|
48
|
-
console.print(Panel(f"📂 Local: {repo_local_root}\n📂 Remote: {repo_remote_root}", title="[bold blue]🔍 Inspecting Repositories[/bold blue]", border_style="blue"))
|
|
49
|
-
|
|
50
|
-
if platform.system() == "Windows":
|
|
51
|
-
program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
|
|
52
|
-
write_shell_script_to_file(shell_script=program)
|
|
53
|
-
return None
|
|
54
|
-
elif platform.system() in ["Linux", "Darwin"]:
|
|
55
|
-
program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
|
|
56
|
-
write_shell_script_to_file(shell_script=program)
|
|
57
|
-
return None
|
|
58
|
-
else:
|
|
59
|
-
raise NotImplementedError(f"Platform {platform.system()} not implemented.")
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def fetch_dotfiles():
|
|
63
|
-
console.print(Panel("📁 Fetching Dotfiles", title="[bold blue]Dotfiles[/bold blue]", border_style="blue"))
|
|
64
|
-
|
|
65
|
-
cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
|
|
66
|
-
console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", width=150, border_style="yellow"))
|
|
67
|
-
|
|
68
|
-
dotfiles_local = PathExtended.home().joinpath("dotfiles")
|
|
69
|
-
CONFIG_PATH.joinpath("remote").mkdir(parents=True, exist_ok=True)
|
|
70
|
-
dotfiles_remote = PathExtended(CONFIG_PATH).joinpath("remote", dotfiles_local.rel2home())
|
|
71
|
-
remote_path = dotfiles_local.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
|
|
72
|
-
|
|
73
|
-
console.print(Panel("📥 Downloading dotfiles from cloud...", width=150, border_style="blue"))
|
|
74
|
-
|
|
75
|
-
dotfiles_remote.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=None)
|
|
76
|
-
|
|
77
|
-
console.print(Panel("🗑️ Removing old dotfiles and replacing with cloud version...", width=150, border_style="blue"))
|
|
78
|
-
|
|
79
|
-
dotfiles_local.delete(sure=True)
|
|
80
|
-
dotfiles_remote.move(folder=PathExtended.home())
|
|
81
|
-
script = f"""
|
|
82
|
-
# rm -rf {dotfiles_local}
|
|
83
|
-
# mv {dotfiles_remote} {dotfiles_local}
|
|
84
|
-
"""
|
|
85
|
-
if platform.system() == "Linux":
|
|
86
|
-
script += """
|
|
87
|
-
sudo chmod 600 $HOME/.ssh/*
|
|
88
|
-
sudo chmod 700 $HOME/.ssh
|
|
89
|
-
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
90
|
-
"""
|
|
91
|
-
shell_path = write_shell_script_to_file(shell_script=script)
|
|
92
|
-
Terminal().run(f". {shell_path}", shell="bash").capture().print()
|
|
93
|
-
|
|
94
|
-
console.print(Panel("✅ Dotfiles successfully fetched and installed", title="[bold green]Dotfiles[/bold green]", border_style="green"))
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool) -> bool:
|
|
98
|
-
dotfiles_path = str(PathExtended.home().joinpath("dotfiles"))
|
|
99
|
-
from git import Repo
|
|
100
|
-
|
|
101
|
-
repo = Repo(path=dotfiles_path)
|
|
102
|
-
last_commit = repo.head.commit
|
|
103
|
-
dtm = last_commit.committed_datetime
|
|
104
|
-
from datetime import datetime # make it tz unaware
|
|
105
|
-
|
|
106
|
-
dtm = datetime(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, dtm.second)
|
|
107
|
-
res = dtm > datetime.fromisoformat(commit_dtm)
|
|
108
|
-
if res is False and update is True:
|
|
109
|
-
console = Console()
|
|
110
|
-
console.print(Panel(f"🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}", border_style="bold blue", expand=False))
|
|
111
|
-
from machineconfig.scripts.python.cloud_repo_sync import main
|
|
112
|
-
|
|
113
|
-
main(cloud=None, path=dotfiles_path)
|
|
114
|
-
return res
|