machineconfig 3.99__py3-none-any.whl → 7.66__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 +2 -16
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +69 -53
- machineconfig/jobs/installer/custom/hx.py +77 -20
- machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
- machineconfig/jobs/installer/custom_dev/brave.py +43 -35
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +33 -21
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
- machineconfig/jobs/installer/custom_dev/goes.py +41 -36
- machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
- machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/custom_dev/redis.py +51 -33
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
- machineconfig/jobs/installer/custom_dev/winget.py +1 -0
- machineconfig/jobs/installer/installer_data.json +3406 -0
- machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
- machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/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/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/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/Restore-ThunderbirdProfile.ps1 +92 -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/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- 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 +117 -181
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -124
- machineconfig/scripts/python/devops_navigator.py +10 -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/explore.py +49 -0
- machineconfig/scripts/python/fire_jobs.py +106 -244
- machineconfig/scripts/python/ftpx.py +125 -68
- 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} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +11 -19
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
- 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/helpers_fire_command/__init__.py +0 -0
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -87
- 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_fire_command/fire_jobs_streamlit_helper.py +0 -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 +588 -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/__init__.py +0 -0
- 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 +79 -160
- machineconfig/scripts/python/machineconfig.py +63 -0
- machineconfig/scripts/python/msearch.py +21 -0
- machineconfig/scripts/python/nw/__init__.py +0 -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 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +6 -5
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -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/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 +60 -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 +13 -0
- 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 +26 -6
- 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 +10 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -9
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +7 -5
- 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/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/installer_cli.py +181 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +10 -25
- machineconfig/utils/path_extended.py +94 -104
- 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 +0 -1
- machineconfig/utils/schemas/layouts/layout_types.py +2 -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.66.dist-info/METADATA +124 -0
- machineconfig-7.66.dist-info/RECORD +451 -0
- machineconfig-7.66.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/installer/packages_custom_dev.json +0 -226
- machineconfig/jobs/installer/packages_custom_essential.json +0 -39
- machineconfig/jobs/installer/packages_github_dev.json +0 -1110
- machineconfig/jobs/installer/packages_github_essential.json +0 -804
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
- 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 -49
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- 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 -170
- 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/initai +0 -2
- machineconfig/scripts/linux/kill_process +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/cloud_repo_sync.py +0 -186
- machineconfig/scripts/python/devops_devapps_install.py +0 -159
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -175
- 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 -75
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
- 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 -80
- machineconfig/scripts/python/repos_helper_action.py +0 -335
- machineconfig/scripts/python/share_terminal.py +0 -104
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/t4.py +0 -17
- 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/initai.ps1 +0 -1
- machineconfig/scripts/windows/kill_process.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/utils/ai/generate_file_checklist.py +0 -68
- machineconfig-3.99.dist-info/METADATA +0 -167
- machineconfig-3.99.dist-info/RECORD +0 -409
- machineconfig-3.99.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/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 → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → 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/windows/msc/cli_agents.bat → 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/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.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/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.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/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-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
machineconfig/__init__.py
CHANGED
|
@@ -1,29 +1 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
1
|
|
|
3
|
-
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
import tomllib
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def _get_version() -> str:
|
|
9
|
-
name: str = "machineconfig"
|
|
10
|
-
try:
|
|
11
|
-
return _pkg_version(name)
|
|
12
|
-
except PackageNotFoundError:
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
root: Path = Path(__file__).resolve().parents[2]
|
|
16
|
-
pyproject: Path = root / "pyproject.toml"
|
|
17
|
-
if pyproject.is_file():
|
|
18
|
-
with pyproject.open("rb") as f:
|
|
19
|
-
data: dict[str, object] = tomllib.load(f)
|
|
20
|
-
project = data.get("project")
|
|
21
|
-
if isinstance(project, dict):
|
|
22
|
-
version = project.get("version")
|
|
23
|
-
if isinstance(version, str) and version:
|
|
24
|
-
return version
|
|
25
|
-
return "0.0.0"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
__version__: str = _get_version()
|
|
29
|
-
__all__: list[str] = ["__version__"]
|
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
# self.execution_log_dir.expanduser().joinpath("status.txt").write_text(status)
|
|
86
86
|
# return status
|
|
87
87
|
# pid: int = int(pid_path.read_text(encoding="utf-8").rstrip())
|
|
88
|
-
# import psutil
|
|
89
88
|
# try: proc = psutil.Process(pid=pid)
|
|
90
89
|
# except psutil.NoSuchProcess:
|
|
91
90
|
# print(f"Something wrong happened to job `{self.job_id}`.. Its status log file says `{status}`, but its declared `{pid=}` is dead. Moving to failed.")
|
|
@@ -142,7 +141,6 @@
|
|
|
142
141
|
# break
|
|
143
142
|
|
|
144
143
|
# # --------------- Clearning up queue_file from dead processes -----------------
|
|
145
|
-
# import psutil
|
|
146
144
|
# next_job_in_queue = queue_file[0] # only consider the first job in the queue
|
|
147
145
|
# try: _ = psutil.Process(next_job_in_queue.pid)
|
|
148
146
|
# except psutil.NoSuchProcess:
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
# ⏱️ Total execution time: {delta}
|
|
128
128
|
# 🔍 Error message: {params.error_message}
|
|
129
129
|
# 📂 Results located at: {res_folder.collapseuser().as_posix()}
|
|
130
|
-
#
|
|
130
|
+
# ════════════════════════════════════════════════════════════════
|
|
131
131
|
# """)
|
|
132
132
|
|
|
133
133
|
# # Capture exec_times as string for the readme
|
|
@@ -169,7 +169,6 @@
|
|
|
169
169
|
# if params.session_name != "":
|
|
170
170
|
# if platform.system() in ["Linux", "Darwin"]:
|
|
171
171
|
# Terminal().run(f"""zellij --session {params.session_name} action new-tab --name results """)
|
|
172
|
-
# # --layout ~/code/machineconfig/src/machineconfig/settings/zellij/layouts/d.kdl --cwd {res_folder.as_posix()}
|
|
173
172
|
# Terminal().run(f"""zellij --session {params.session_name} action write-chars "cd {res_folder.as_posix()};lf" """)
|
|
174
173
|
# elif platform.system() == "Windows":
|
|
175
174
|
# Terminal().run(f"""wt --window {params.session_name} new-tab --title results -startingDirectory {res_folder.as_posix()} lf """)
|
|
@@ -95,17 +95,15 @@ def enhanced_zellij_session_start(session_name: str, layout_path: str) -> Dict[s
|
|
|
95
95
|
# Start new session (use -b for background to avoid hanging)
|
|
96
96
|
start_cmd = f"zellij --layout {layout_path} a -b {session_name}"
|
|
97
97
|
start_result = run_enhanced_command(
|
|
98
|
-
start_cmd,
|
|
99
|
-
|
|
100
|
-
False,
|
|
101
|
-
10, # Add timeout to prevent hanging
|
|
98
|
+
command=start_cmd, description=f"Starting session '{session_name}' with layout", show_progress=False,
|
|
99
|
+
timeout=10, # Add timeout to prevent hanging
|
|
102
100
|
)
|
|
103
|
-
|
|
104
101
|
if start_result["success"]:
|
|
105
102
|
console.print(Panel(f"[bold green]✅ Session '{session_name}' is now running![/bold green]\n[dim]Layout: {layout_path}[/dim]", style="green", title="🎉 Success"))
|
|
106
103
|
else:
|
|
107
104
|
console.print(Panel(f"[bold red]❌ Failed to start session '{session_name}'[/bold red]\n[red]{start_result.get('stderr', 'Unknown error')}[/red]", style="red", title="💥 Error"))
|
|
108
|
-
|
|
105
|
+
# print("Sleeping for 3 seconds to allow zellij to initialize...")
|
|
106
|
+
# time.sleep(3) # Brief pause for readability
|
|
109
107
|
return start_result
|
|
110
108
|
|
|
111
109
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
from machineconfig.utils.accessories import split_list
|
|
2
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
3
|
+
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def split_tabs_by_weight(tabs: list[TabConfig], max_weight: int) -> list[list[TabConfig]]:
|
|
8
|
+
"""Split tabs into chunks where each chunk's total weight <= max_weight."""
|
|
9
|
+
chunks: list[list[TabConfig]] = []
|
|
10
|
+
current_chunk: list[TabConfig] = []
|
|
11
|
+
current_weight = 0
|
|
12
|
+
for tab in tabs:
|
|
13
|
+
tab_weight = tab.get("tabWeight", 1)
|
|
14
|
+
if current_weight + tab_weight > max_weight and current_chunk:
|
|
15
|
+
chunks.append(current_chunk)
|
|
16
|
+
current_chunk = [tab]
|
|
17
|
+
current_weight = tab_weight
|
|
18
|
+
else:
|
|
19
|
+
current_chunk.append(tab)
|
|
20
|
+
current_weight += tab_weight
|
|
21
|
+
|
|
22
|
+
if current_chunk:
|
|
23
|
+
chunks.append(current_chunk)
|
|
24
|
+
|
|
25
|
+
return chunks
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def combine_tabs_into_super_tabs(tabs: list[TabConfig], num_super_tabs: int) -> list[TabConfig]:
|
|
29
|
+
"""Combine tabs into num_super_tabs super tabs with combined commands."""
|
|
30
|
+
if len(tabs) <= num_super_tabs:
|
|
31
|
+
return tabs # No need to combine
|
|
32
|
+
|
|
33
|
+
tab_groups = split_list(tabs, to=num_super_tabs)
|
|
34
|
+
super_tabs: list[TabConfig] = []
|
|
35
|
+
for idx, group in enumerate(tab_groups):
|
|
36
|
+
if len(group) == 1:
|
|
37
|
+
super_tabs.append(group[0])
|
|
38
|
+
else:
|
|
39
|
+
combined_command = "; ".join(tab["command"] for tab in group)
|
|
40
|
+
combined_name = f"super_tab_{idx+1}"
|
|
41
|
+
# Use startDir of the first tab
|
|
42
|
+
start_dir = group[0]["startDir"]
|
|
43
|
+
# Sum weights
|
|
44
|
+
total_weight = sum(tab.get("tabWeight", 1) for tab in group)
|
|
45
|
+
super_tabs.append({
|
|
46
|
+
"tabName": combined_name,
|
|
47
|
+
"startDir": start_dir,
|
|
48
|
+
"command": combined_command,
|
|
49
|
+
"tabWeight": total_weight
|
|
50
|
+
})
|
|
51
|
+
return super_tabs
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def combine_tabs_by_weight_into_super_tabs(tabs: list[TabConfig], max_weight: int) -> list[TabConfig]:
|
|
55
|
+
"""Combine tabs into super tabs where each super tab has weight <= max_weight."""
|
|
56
|
+
tab_groups = split_tabs_by_weight(tabs, max_weight=max_weight)
|
|
57
|
+
super_tabs: list[TabConfig] = []
|
|
58
|
+
for idx, group in enumerate(tab_groups):
|
|
59
|
+
if len(group) == 1:
|
|
60
|
+
super_tabs.append(group[0])
|
|
61
|
+
else:
|
|
62
|
+
combined_command = "; ".join(tab["command"] for tab in group)
|
|
63
|
+
combined_name = f"super_tab_{idx+1}"
|
|
64
|
+
start_dir = group[0]["startDir"]
|
|
65
|
+
total_weight = sum(tab.get("tabWeight", 1) for tab in group)
|
|
66
|
+
super_tabs.append({
|
|
67
|
+
"tabName": combined_name,
|
|
68
|
+
"startDir": start_dir,
|
|
69
|
+
"command": combined_command,
|
|
70
|
+
"tabWeight": total_weight
|
|
71
|
+
})
|
|
72
|
+
return super_tabs
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def restrict_num_tabs_helper1(layout_configs: list[LayoutConfig], max_thresh: int, threshold_type: Literal["number"], breaking_method: Literal["moreLayouts"]) -> list[LayoutConfig]:
|
|
76
|
+
"""When threshold is exceeded, create more layouts with max_thresh tabs each."""
|
|
77
|
+
new_layout_configs: list[LayoutConfig] = []
|
|
78
|
+
for a_layout_config in layout_configs:
|
|
79
|
+
if len(a_layout_config["layoutTabs"]) > max_thresh:
|
|
80
|
+
print(f"Layout '{a_layout_config['layoutName']}' has too many tabs ({len(a_layout_config['layoutTabs'])} > {max_thresh}). Splitting into multiple layouts.")
|
|
81
|
+
tab_chunks = split_list(a_layout_config["layoutTabs"], every=max_thresh)
|
|
82
|
+
for idx, tab_chunk in enumerate(tab_chunks):
|
|
83
|
+
new_layout_configs.append({
|
|
84
|
+
"layoutName": f"{a_layout_config['layoutName']}_part{idx+1}",
|
|
85
|
+
"layoutTabs": tab_chunk
|
|
86
|
+
})
|
|
87
|
+
else:
|
|
88
|
+
print(f"Layout '{a_layout_config['layoutName']}' has acceptable number of tabs ({len(a_layout_config['layoutTabs'])} <= {max_thresh}). Keeping as is.")
|
|
89
|
+
new_layout_configs.append(a_layout_config)
|
|
90
|
+
return new_layout_configs
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def restrict_num_tabs_helper2(layout_configs: list[LayoutConfig], max_thresh: int, threshold_type: Literal["number"], breaking_method: Literal["combineTabs"]) -> list[LayoutConfig]:
|
|
94
|
+
"""When threshold is exceeded, combine tabs into super tabs to reduce count to max_thresh."""
|
|
95
|
+
new_layout_configs: list[LayoutConfig] = []
|
|
96
|
+
for a_layout_config in layout_configs:
|
|
97
|
+
num_tabs = len(a_layout_config["layoutTabs"])
|
|
98
|
+
if num_tabs > max_thresh:
|
|
99
|
+
print(f"Layout '{a_layout_config['layoutName']}' has too many tabs ({num_tabs} > {max_thresh}). Combining into {max_thresh} super tabs.")
|
|
100
|
+
super_tabs = combine_tabs_into_super_tabs(a_layout_config["layoutTabs"], num_super_tabs=max_thresh)
|
|
101
|
+
new_layout_configs.append({
|
|
102
|
+
"layoutName": a_layout_config["layoutName"],
|
|
103
|
+
"layoutTabs": super_tabs
|
|
104
|
+
})
|
|
105
|
+
else:
|
|
106
|
+
print(f"Layout '{a_layout_config['layoutName']}' has acceptable number of tabs ({num_tabs} <= {max_thresh}). Keeping as is.")
|
|
107
|
+
new_layout_configs.append(a_layout_config)
|
|
108
|
+
return new_layout_configs
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def restrict_num_tabs_helper3(layout_configs: list[LayoutConfig], max_thresh: int, threshold_type: Literal["weight"], breaking_method: Literal["moreLayouts"]) -> list[LayoutConfig]:
|
|
112
|
+
"""When threshold is exceeded, create more layouts with max_thresh total weight each."""
|
|
113
|
+
new_layout_configs: list[LayoutConfig] = []
|
|
114
|
+
for a_layout_config in layout_configs:
|
|
115
|
+
layout_weight = sum(tab.get("tabWeight", 1) for tab in a_layout_config["layoutTabs"])
|
|
116
|
+
if layout_weight > max_thresh:
|
|
117
|
+
print(f"Layout '{a_layout_config['layoutName']}' has too much weight ({layout_weight} > {max_thresh}). Splitting into multiple layouts.")
|
|
118
|
+
tab_chunks = split_tabs_by_weight(a_layout_config["layoutTabs"], max_weight=max_thresh)
|
|
119
|
+
for idx, tab_chunk in enumerate(tab_chunks):
|
|
120
|
+
new_layout_configs.append({
|
|
121
|
+
"layoutName": f"{a_layout_config['layoutName']}_part{idx+1}",
|
|
122
|
+
"layoutTabs": tab_chunk
|
|
123
|
+
})
|
|
124
|
+
else:
|
|
125
|
+
print(f"Layout '{a_layout_config['layoutName']}' has acceptable total weight ({layout_weight} <= {max_thresh}). Keeping as is.")
|
|
126
|
+
new_layout_configs.append(a_layout_config)
|
|
127
|
+
return new_layout_configs
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def restrict_num_tabs_helper4(layout_configs: list[LayoutConfig], max_thresh: int, threshold_type: Literal["weight"], breaking_method: Literal["combineTabs"]) -> list[LayoutConfig]:
|
|
131
|
+
"""When threshold is exceeded, combine tabs into super tabs with weight <= max_thresh."""
|
|
132
|
+
new_layout_configs: list[LayoutConfig] = []
|
|
133
|
+
for a_layout_config in layout_configs:
|
|
134
|
+
layout_weight = sum(tab.get("tabWeight", 1) for tab in a_layout_config["layoutTabs"])
|
|
135
|
+
if layout_weight > max_thresh:
|
|
136
|
+
print(f"Layout '{a_layout_config['layoutName']}' has too much weight ({layout_weight} > {max_thresh}). Combining into super tabs with weight <= {max_thresh}.")
|
|
137
|
+
super_tabs = combine_tabs_by_weight_into_super_tabs(a_layout_config["layoutTabs"], max_weight=max_thresh)
|
|
138
|
+
new_layout_configs.append({
|
|
139
|
+
"layoutName": a_layout_config["layoutName"],
|
|
140
|
+
"layoutTabs": super_tabs
|
|
141
|
+
})
|
|
142
|
+
else:
|
|
143
|
+
print(f"Layout '{a_layout_config['layoutName']}' has acceptable total weight ({layout_weight} <= {max_thresh}). Keeping as is.")
|
|
144
|
+
new_layout_configs.append(a_layout_config)
|
|
145
|
+
return new_layout_configs
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
3
|
+
# from machineconfig.utils.accessories import split_list
|
|
4
|
+
from typing import Literal, Protocol
|
|
5
|
+
from machineconfig.cluster.sessions_managers.helpers.load_balancer_helper import restrict_num_tabs_helper1, restrict_num_tabs_helper2, restrict_num_tabs_helper3, restrict_num_tabs_helper4
|
|
6
|
+
|
|
7
|
+
class COMMAND_SPLITTER(Protocol):
|
|
8
|
+
def __call__(self, command: str, to: int) -> list[str]: ...
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def limit_tab_num(layout_configs: list[LayoutConfig], max_thresh: int, threshold_type: Literal["number", "weight"], breaking_method: Literal["moreLayouts", "combineTabs"]) -> list[LayoutConfig]:
|
|
12
|
+
match threshold_type, breaking_method:
|
|
13
|
+
case "number", "moreLayouts":
|
|
14
|
+
return restrict_num_tabs_helper1(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=threshold_type, breaking_method=breaking_method)
|
|
15
|
+
case "number", "combineTabs":
|
|
16
|
+
return restrict_num_tabs_helper2(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=threshold_type, breaking_method=breaking_method)
|
|
17
|
+
case "weight", "moreLayouts":
|
|
18
|
+
return restrict_num_tabs_helper3(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=threshold_type, breaking_method=breaking_method)
|
|
19
|
+
case "weight", "combineTabs":
|
|
20
|
+
return restrict_num_tabs_helper4(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=threshold_type, breaking_method=breaking_method)
|
|
21
|
+
case _:
|
|
22
|
+
raise NotImplementedError(f"The combination {threshold_type}, {breaking_method} is not implemented")
|
|
23
|
+
def limit_tab_weight(layout_configs: list[LayoutConfig], max_weight: int, command_splitter: COMMAND_SPLITTER) -> list[LayoutConfig]:
|
|
24
|
+
new_layout_configs: list[LayoutConfig] = []
|
|
25
|
+
for a_layout_config in layout_configs:
|
|
26
|
+
new_tabs: list[TabConfig] = []
|
|
27
|
+
for tab in a_layout_config["layoutTabs"]:
|
|
28
|
+
tab_weight = tab.get("tabWeight", 1)
|
|
29
|
+
if tab_weight > max_weight:
|
|
30
|
+
print(f"Tab '{tab['tabName']}' in layout '{a_layout_config['layoutName']}' has too much weight ({tab_weight} > {max_weight}). Splitting command.")
|
|
31
|
+
split_commands = command_splitter(tab["command"], to=max_weight)
|
|
32
|
+
for idx, cmd in enumerate(split_commands):
|
|
33
|
+
new_tabs.append({
|
|
34
|
+
"tabName": f"{tab['tabName']}_part{idx+1}",
|
|
35
|
+
"startDir": tab["startDir"],
|
|
36
|
+
"command": cmd,
|
|
37
|
+
"tabWeight": max_weight
|
|
38
|
+
})
|
|
39
|
+
else:
|
|
40
|
+
new_tabs.append(tab)
|
|
41
|
+
new_layout_configs.append({
|
|
42
|
+
"layoutName": a_layout_config["layoutName"],
|
|
43
|
+
"layoutTabs": new_tabs
|
|
44
|
+
})
|
|
45
|
+
return new_layout_configs
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def run(layouts: list[LayoutConfig]):
|
|
49
|
+
from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
|
|
50
|
+
manager = ZellijLocalManager(session_layouts=layouts)
|
|
51
|
+
manager.start_all_sessions(poll_interval=2, poll_seconds=2)
|
|
52
|
+
manager.run_monitoring_routine(wait_ms=2000)
|
|
53
|
+
manager.kill_all_sessions()
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
from types import FunctionType
|
|
3
|
+
from typing import Optional, Literal
|
|
4
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
def get_fire_tab_using_uv(func: FunctionType, tab_weight: int, import_module: bool, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
|
|
8
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
9
|
+
if func.__name__ == "<lambda>":
|
|
10
|
+
py_script = lambda_to_python_script(lmb=func,
|
|
11
|
+
in_global=True, import_module=import_module)
|
|
12
|
+
else:
|
|
13
|
+
py_script = lambda_to_python_script(lmb=lambda: func(),
|
|
14
|
+
in_global=True, import_module=import_module)
|
|
15
|
+
from machineconfig.utils.code import get_uv_command_executing_python_script
|
|
16
|
+
command_to_run, py_script_path = get_uv_command_executing_python_script(python_script=py_script, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
17
|
+
tab_config: TabConfig = {
|
|
18
|
+
"command": command_to_run,
|
|
19
|
+
"startDir": "$HOME",
|
|
20
|
+
"tabName": func.__name__,
|
|
21
|
+
"tabWeight": tab_weight
|
|
22
|
+
}
|
|
23
|
+
return tab_config, py_script_path
|
|
24
|
+
def get_fire_tab_using_fire(func: FunctionType, tab_weight: int) -> TabConfig:
|
|
25
|
+
import inspect
|
|
26
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
27
|
+
import platform
|
|
28
|
+
if platform.system().lower() == "windows":
|
|
29
|
+
wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg.ps1"
|
|
30
|
+
wrap_mcfg = f'& "{wrap_mcfg}"'
|
|
31
|
+
elif platform.system().lower() == "linux" or platform.system().lower() == "darwin":
|
|
32
|
+
wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg"
|
|
33
|
+
else:
|
|
34
|
+
raise ValueError(f"Unsupported platform: {platform.system()}")
|
|
35
|
+
path = Path(inspect.getfile(func))
|
|
36
|
+
path_relative = path.relative_to(Path.home())
|
|
37
|
+
command_to_run = f"""{wrap_mcfg} fire {path_relative} {func.__name__} """
|
|
38
|
+
tab_config: TabConfig = {
|
|
39
|
+
"command": command_to_run,
|
|
40
|
+
"startDir": "$HOME",
|
|
41
|
+
"tabName": func.__name__,
|
|
42
|
+
"tabWeight": tab_weight
|
|
43
|
+
}
|
|
44
|
+
return tab_config
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def make_layout_from_functions(functions: list[FunctionType], functions_weights: Optional[list[int]], import_module: bool, tab_configs: list[TabConfig],
|
|
49
|
+
layout_name: str, method: Literal["script", "fire"],
|
|
50
|
+
uv_with: Optional[list[str]] = None, uv_project_dir: Optional[str] = None
|
|
51
|
+
) -> LayoutConfig:
|
|
52
|
+
tabs2artifacts: list[tuple[TabConfig, list[Path]]] = []
|
|
53
|
+
for a_func, tab_weight in zip(functions, functions_weights or [1]*len(functions)):
|
|
54
|
+
match method:
|
|
55
|
+
case "script":
|
|
56
|
+
tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, tab_weight=tab_weight, import_module=import_module,
|
|
57
|
+
uv_with=uv_with, uv_project_dir=uv_project_dir
|
|
58
|
+
)
|
|
59
|
+
artifact_files = [artifact_files_1]
|
|
60
|
+
case "fire":
|
|
61
|
+
tab_config = get_fire_tab_using_fire(a_func, tab_weight=tab_weight)
|
|
62
|
+
artifact_files = []
|
|
63
|
+
tabs2artifacts.append((tab_config, artifact_files))
|
|
64
|
+
list_of_tabs = [tab for tab, _ in tabs2artifacts] + tab_configs
|
|
65
|
+
layout_config: LayoutConfig = {
|
|
66
|
+
"layoutName": layout_name,
|
|
67
|
+
"layoutTabs": list_of_tabs,
|
|
68
|
+
}
|
|
69
|
+
return layout_config
|