machineconfig 5.15__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 +0 -1
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +114 -289
- machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
- 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 -169
- 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 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +1 -7
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/installer_data.json +1101 -115
- 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/q.sh +1 -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 +108 -180
- 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 +92 -103
- 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 +111 -114
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -103
- 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 +115 -152
- machineconfig/scripts/python/ftpx.py +29 -24
- 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/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -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} +10 -18
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
- 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/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
- 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/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
- 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} +56 -20
- machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
- machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
- 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} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
- 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 +64 -84
- 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} +0 -2
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
- 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} +5 -4
- machineconfig/scripts/python/sessions.py +64 -44
- 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 -10
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +133 -106
- 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 +1 -1
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +11 -14
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +10 -18
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +13 -3
- machineconfig/utils/path_extended.py +46 -100
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -264
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +2 -113
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +11 -4
- 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/sessions_managers/ffile.py +0 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/python/vscode/sync_code.py +0 -73
- 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 -303
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/agents +0 -2
- 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/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/scheduler +0 -2
- machineconfig/scripts/linux/sessions +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 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- 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 -116
- machineconfig/scripts/python/repos.py +0 -132
- machineconfig/scripts/python/repos_helper_action.py +0 -378
- 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/agents.ps1 +0 -1
- 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/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.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/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-5.15.dist-info/METADATA +0 -188
- machineconfig-5.15.dist-info/RECORD +0 -415
- machineconfig-5.15.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.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/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.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-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
import shutil
|
|
5
|
+
import subprocess
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import TYPE_CHECKING, Optional
|
|
9
|
+
|
|
10
|
+
from machineconfig.cluster.sessions_managers.zellij_utils.monitoring_types import ActiveSessionInfo, StartResult
|
|
11
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from machineconfig.cluster.sessions_managers.zellij_local import ZellijLayoutGenerator
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
TMP_SERIALIZATION_DIR = Path.home() / "tmp_results" / "zellij_sessions" / "serialized"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def list_saved_sessions() -> list[str]:
|
|
22
|
+
"""List all saved session IDs."""
|
|
23
|
+
if not TMP_SERIALIZATION_DIR.exists():
|
|
24
|
+
return []
|
|
25
|
+
sessions = []
|
|
26
|
+
for item in TMP_SERIALIZATION_DIR.iterdir():
|
|
27
|
+
if item.is_dir() and (item / "metadata.json").exists():
|
|
28
|
+
sessions.append(item.name)
|
|
29
|
+
return sorted(sessions)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def delete_session(session_id: str) -> bool:
|
|
33
|
+
"""Delete a saved session."""
|
|
34
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
35
|
+
if not session_dir.exists():
|
|
36
|
+
logger.warning(f"Session directory not found: {session_dir}")
|
|
37
|
+
return False
|
|
38
|
+
try:
|
|
39
|
+
shutil.rmtree(session_dir)
|
|
40
|
+
logger.info(f"✅ Deleted session: {session_id}")
|
|
41
|
+
return True
|
|
42
|
+
except Exception as e:
|
|
43
|
+
logger.error(f"Failed to delete session {session_id}: {e}")
|
|
44
|
+
return False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_all_session_names(managers: list["ZellijLayoutGenerator"]) -> list[str]:
|
|
48
|
+
"""Get all managed session names."""
|
|
49
|
+
return [manager.session_name for manager in managers]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def attach_to_session(managers: list["ZellijLayoutGenerator"], session_name: Optional[str]) -> str:
|
|
53
|
+
"""
|
|
54
|
+
Generate command to attach to a specific session or list attachment commands for all.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
managers: List of ZellijLayoutGenerator instances
|
|
58
|
+
session_name: Specific session to attach to, or None for all sessions
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
Command string to attach to session(s)
|
|
62
|
+
"""
|
|
63
|
+
if session_name:
|
|
64
|
+
for manager in managers:
|
|
65
|
+
if manager.session_name == session_name:
|
|
66
|
+
return f"zellij attach {session_name}"
|
|
67
|
+
raise ValueError(f"Session '{session_name}' not found")
|
|
68
|
+
else:
|
|
69
|
+
commands: list[str] = []
|
|
70
|
+
for manager in managers:
|
|
71
|
+
commands.append(f"# Attach to session '{manager.session_name}':")
|
|
72
|
+
commands.append(f"zellij attach {manager.session_name}")
|
|
73
|
+
commands.append("")
|
|
74
|
+
return "\n".join(commands)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def list_active_sessions(managers: list["ZellijLayoutGenerator"]) -> list[ActiveSessionInfo]:
|
|
78
|
+
"""List currently active zellij sessions managed by this instance."""
|
|
79
|
+
active_sessions: list[ActiveSessionInfo] = []
|
|
80
|
+
try:
|
|
81
|
+
result = subprocess.run(["zellij", "list-sessions"], capture_output=True, text=True, timeout=10)
|
|
82
|
+
if result.returncode == 0:
|
|
83
|
+
all_sessions = result.stdout.strip().split("\n") if result.stdout.strip() else []
|
|
84
|
+
for manager in managers:
|
|
85
|
+
session_name = manager.session_name
|
|
86
|
+
is_active = any(session_name in session for session in all_sessions)
|
|
87
|
+
tab_info = []
|
|
88
|
+
tab_count = 0
|
|
89
|
+
if manager.layout_config:
|
|
90
|
+
tab_count = len(manager.layout_config["layoutTabs"])
|
|
91
|
+
tab_info = [tab["tabName"] for tab in manager.layout_config["layoutTabs"]]
|
|
92
|
+
active_sessions.append({"session_name": session_name, "is_active": is_active, "tab_count": tab_count, "tabs": tab_info})
|
|
93
|
+
except Exception as e:
|
|
94
|
+
logger.error(f"Error listing active sessions: {e}")
|
|
95
|
+
return active_sessions
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def save_manager(session_layouts: list[LayoutConfig], managers: list["ZellijLayoutGenerator"], session_name_prefix: str, session_id: Optional[str]) -> str:
|
|
99
|
+
"""Save the manager state to disk."""
|
|
100
|
+
if session_id is None:
|
|
101
|
+
import uuid
|
|
102
|
+
session_id = str(uuid.uuid4())[:8]
|
|
103
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
104
|
+
session_dir.mkdir(parents=True, exist_ok=True)
|
|
105
|
+
config_file = session_dir / "session_layouts.json"
|
|
106
|
+
text = json.dumps(session_layouts, indent=2, ensure_ascii=False)
|
|
107
|
+
config_file.write_text(text, encoding="utf-8")
|
|
108
|
+
metadata = {"session_name_prefix": session_name_prefix, "created_at": str(datetime.now()), "num_managers": len(managers), "sessions": [item["layoutName"] for item in session_layouts], "manager_type": "ZellijLocalManager"}
|
|
109
|
+
metadata_file = session_dir / "metadata.json"
|
|
110
|
+
text = json.dumps(metadata, indent=2, ensure_ascii=False)
|
|
111
|
+
metadata_file.write_text(text, encoding="utf-8")
|
|
112
|
+
managers_dir = session_dir / "managers"
|
|
113
|
+
managers_dir.mkdir(exist_ok=True)
|
|
114
|
+
for i, manager in enumerate(managers):
|
|
115
|
+
manager_data = {"session_name": manager.session_name, "layout_config": manager.layout_config, "layout_path": manager.layout_path}
|
|
116
|
+
manager_file = managers_dir / f"manager_{i}_{manager.session_name}.json"
|
|
117
|
+
text = json.dumps(manager_data, indent=2, ensure_ascii=False)
|
|
118
|
+
manager_file.write_text(text, encoding="utf-8")
|
|
119
|
+
logger.info(f"✅ Saved ZellijLocalManager session to: {session_dir}")
|
|
120
|
+
return session_id
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def load_manager(session_id: str):
|
|
124
|
+
"""Load a saved manager state from disk and return the data needed to reconstruct ZellijLocalManager."""
|
|
125
|
+
from machineconfig.cluster.sessions_managers.zellij_local import ZellijLayoutGenerator
|
|
126
|
+
|
|
127
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
128
|
+
if not session_dir.exists():
|
|
129
|
+
raise FileNotFoundError(f"Session directory not found: {session_dir}")
|
|
130
|
+
config_file = session_dir / "session_layouts.json"
|
|
131
|
+
if not config_file.exists():
|
|
132
|
+
raise FileNotFoundError(f"Configuration file not found: {config_file}")
|
|
133
|
+
text = config_file.read_text(encoding="utf-8")
|
|
134
|
+
session_layouts = json.loads(text)
|
|
135
|
+
managers = []
|
|
136
|
+
managers_dir = session_dir / "managers"
|
|
137
|
+
if managers_dir.exists():
|
|
138
|
+
manager_files = sorted(managers_dir.glob("manager_*.json"))
|
|
139
|
+
for manager_file in manager_files:
|
|
140
|
+
try:
|
|
141
|
+
text = manager_file.read_text(encoding="utf-8")
|
|
142
|
+
manager_data = json.loads(text)
|
|
143
|
+
manager = ZellijLayoutGenerator(layout_config=manager_data["layout_config"], session_name=manager_data["session_name"])
|
|
144
|
+
manager.layout_path = manager_data["layout_path"]
|
|
145
|
+
managers.append(manager)
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.warning(f"Failed to load manager from {manager_file}: {e}")
|
|
148
|
+
logger.info(f"✅ Loaded ZellijLocalManager session from: {session_dir}")
|
|
149
|
+
return session_layouts, managers
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def kill_all_sessions(managers: list["ZellijLayoutGenerator"]) -> dict[str, StartResult]:
|
|
153
|
+
"""Kill all managed zellij sessions."""
|
|
154
|
+
results: dict[str, StartResult] = {}
|
|
155
|
+
for manager in managers:
|
|
156
|
+
try:
|
|
157
|
+
session_name = manager.session_name
|
|
158
|
+
cmd = f"zellij delete-session --force {session_name}"
|
|
159
|
+
logger.info(f"Killing session '{session_name}'")
|
|
160
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
|
|
161
|
+
results[session_name] = {"success": result.returncode == 0, "message": "Session killed" if result.returncode == 0 else result.stderr}
|
|
162
|
+
except Exception as e:
|
|
163
|
+
key = getattr(manager, "session_name", None) or f"manager_{managers.index(manager)}"
|
|
164
|
+
results[key] = {"success": False, "error": str(e)}
|
|
165
|
+
return results
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
import platform
|
|
3
|
-
from machineconfig.utils.source_of_truth import
|
|
3
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
APP_SUMMARY_PATH =
|
|
6
|
+
APP_SUMMARY_PATH = CONFIG_ROOT.joinpath(f"profile/records/{platform.system().lower()}/apps_summary_report.csv")
|
|
7
7
|
# CLOUD: str = "gdw" # Read.ini(DEFAULTS_PATH)['general']['rclone_config_name']
|
|
8
8
|
# # my onedrive doesn't allow sharing.
|
|
9
9
|
|
|
@@ -221,7 +221,6 @@ APP_SUMMARY_PATH = LIBRARY_ROOT.joinpath(f"profile/records/{platform.system().lo
|
|
|
221
221
|
# # cli_installers = get_cli_py_installers()
|
|
222
222
|
# # else: raise NotImplementedError(f"Platform {platform.system().lower()} is not supported yet.")
|
|
223
223
|
|
|
224
|
-
# if name == "essentials":
|
|
225
224
|
# print(f"""
|
|
226
225
|
# {'=' * 150}
|
|
227
226
|
# 📥 DOWNLOAD | Downloading {len(self.data)} apps...
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import platform
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.panel import Panel
|
|
8
|
+
from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
|
|
9
|
+
|
|
10
|
+
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
11
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
12
|
+
|
|
13
|
+
installer_data_modified: InstallerData = {
|
|
14
|
+
"appName": "boxes",
|
|
15
|
+
"repoURL": "https://github.com/ascii-boxes/boxes",
|
|
16
|
+
"doc": "📦 ASCI draws boxes around text.",
|
|
17
|
+
"fileNamePattern": {
|
|
18
|
+
"amd64": {
|
|
19
|
+
"windows": "boxes-{version}-intel-win32.zip",
|
|
20
|
+
"linux": None,
|
|
21
|
+
"macos": None
|
|
22
|
+
},
|
|
23
|
+
"arm64": {
|
|
24
|
+
"linux": None,
|
|
25
|
+
"macos": None,
|
|
26
|
+
"windows": None
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
|
|
32
|
+
console = Console()
|
|
33
|
+
_ = installer_data
|
|
34
|
+
console.print(
|
|
35
|
+
Panel.fit(
|
|
36
|
+
"\n".join([f"🖥️ Platform: {platform.system()}", f"🔄 Version: {'latest' if version is None else version}"]),
|
|
37
|
+
title="📦 Boxes Installer",
|
|
38
|
+
border_style="blue",
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
installer = Installer(installer_data=installer_data_modified)
|
|
43
|
+
downloaded, _version_to_be_installed = installer.binary_download(version=version)
|
|
44
|
+
decomp_path = downloaded.decompress()
|
|
45
|
+
from pathlib import Path
|
|
46
|
+
for item in decomp_path.rglob("*"):
|
|
47
|
+
if "boxes.exe" in item.name:
|
|
48
|
+
dest_exe = Path(WINDOWS_INSTALL_PATH) / "boxes.exe"
|
|
49
|
+
if dest_exe.exists():
|
|
50
|
+
dest_exe.unlink()
|
|
51
|
+
item.rename(dest_exe)
|
|
52
|
+
if "boxes.cfg" in item.name:
|
|
53
|
+
dest_cfg = Path(WINDOWS_INSTALL_PATH) / "boxes.cfg"
|
|
54
|
+
if dest_cfg.exists():
|
|
55
|
+
dest_cfg.unlink()
|
|
56
|
+
item.rename(dest_cfg)
|
|
57
|
+
console.print("📦 Boxes downloaded and decompressed.", style="bold green")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
pass
|
|
@@ -3,37 +3,39 @@ Installers do not add runtime files to the machine, hence this script.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
from machineconfig.utils.installer_utils.
|
|
6
|
+
from machineconfig.utils.installer_utils.installer_locator_utils import WINDOWS_INSTALL_PATH
|
|
7
7
|
from typing import Optional
|
|
8
8
|
import platform
|
|
9
9
|
|
|
10
|
-
from machineconfig.utils.installer_utils.
|
|
10
|
+
from machineconfig.utils.installer_utils.installer_locator_utils import LINUX_INSTALL_PATH
|
|
11
11
|
from machineconfig.utils.installer_utils.installer_class import Installer
|
|
12
12
|
from rich.console import Console
|
|
13
13
|
from rich.panel import Panel
|
|
14
14
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
LANGUAGES_SUPPORTED_GRAMMER = ["python.so", "nu.so", "bash.so", "lua.so", "powershell.so"]
|
|
17
18
|
config_dict: InstallerData = {
|
|
18
19
|
"appName": "hx",
|
|
19
20
|
"repoURL": "CMD",
|
|
20
21
|
"doc": "Helix is a post-modern modal text editor.",
|
|
21
22
|
"fileNamePattern": {
|
|
22
23
|
"amd64": {
|
|
23
|
-
"linux": "
|
|
24
|
-
"macos": "
|
|
25
|
-
"windows": "
|
|
24
|
+
"linux": "helix-{version}-x86_64-linux.tar.xz",
|
|
25
|
+
"macos": "helix-{version}-x86_64-macos.tar.xz",
|
|
26
|
+
"windows": "helix-{version}-x86_64-windows.zip",
|
|
26
27
|
},
|
|
27
28
|
"arm64": {
|
|
28
|
-
"linux": "
|
|
29
|
-
"macos": "
|
|
30
|
-
"windows": "
|
|
29
|
+
"linux": "helix-{version}-arm64-linux.tar.xz",
|
|
30
|
+
"macos": "helix-{version}-arm64-macos.tar.xz",
|
|
31
|
+
"windows": "helix-{version}-arm64-windows.zip",
|
|
31
32
|
},
|
|
32
33
|
},
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def main(version: Optional[str], install_lib: bool =
|
|
37
|
+
def main(installer_data: InstallerData, version: Optional[str], install_lib: bool = True):
|
|
38
|
+
_ = installer_data
|
|
37
39
|
console = Console()
|
|
38
40
|
|
|
39
41
|
console.print(Panel(f"HELIX EDITOR INSTALLER 🧬\nPlatform: {platform.system()}\nVersion: {'latest' if version is None else version}", title="Installer", expand=False))
|
|
@@ -43,7 +45,7 @@ def main(version: Optional[str], install_lib: bool = False):
|
|
|
43
45
|
inst = Installer(installer_data=config_dict_copy)
|
|
44
46
|
|
|
45
47
|
print("\n📥 [Step 1/5] Downloading Helix editor...")
|
|
46
|
-
downloaded, _version_to_be_installed = inst.
|
|
48
|
+
downloaded, _version_to_be_installed = inst.binary_download(version=version)
|
|
47
49
|
print(" ✨ Download complete.")
|
|
48
50
|
|
|
49
51
|
print("\n🔍 [Step 2/5] Locating executable and components...")
|
|
@@ -57,6 +59,7 @@ def main(version: Optional[str], install_lib: bool = False):
|
|
|
57
59
|
raise FileNotFoundError(f"Could not find 'hx' executable in {downloaded.name}")
|
|
58
60
|
|
|
59
61
|
assert len(hx_file_search) == 1, f"Expected 1 'hx' executable, found {len(hx_file_search)}"
|
|
62
|
+
|
|
60
63
|
hx_file = hx_file_search[0]
|
|
61
64
|
contrib = hx_file.parent / "contrib"
|
|
62
65
|
runtime = contrib.parent / "runtime"
|
|
@@ -72,21 +75,50 @@ def main(version: Optional[str], install_lib: bool = False):
|
|
|
72
75
|
print("\n🗑️ [Step 3/5] Cleaning up previous installation (if any)...")
|
|
73
76
|
runtime_path = PathExtended.home().joinpath(".config/helix/runtime")
|
|
74
77
|
contrib_path = PathExtended.home().joinpath(".config/helix/contrib")
|
|
75
|
-
runtime_path.delete(sure=True, verbose=False)
|
|
76
|
-
contrib_path.delete(sure=True, verbose=False)
|
|
77
|
-
print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
|
|
78
78
|
|
|
79
79
|
print("\n📦 [Step 4/5] Installing Helix components...")
|
|
80
|
-
target_config_dir = PathExtended("
|
|
80
|
+
target_config_dir = PathExtended.home().joinpath(".config/helix").expanduser()
|
|
81
81
|
target_config_dir.mkdir(parents=True, exist_ok=True)
|
|
82
82
|
|
|
83
83
|
if platform.system() in ["Linux", "Darwin"]:
|
|
84
84
|
target_bin_path = PathExtended(LINUX_INSTALL_PATH) if platform.system() == "Linux" else PathExtended("/usr/local/bin")
|
|
85
85
|
exe_name = "hx"
|
|
86
86
|
hx_file.move(folder=target_bin_path, overwrite=True)
|
|
87
|
+
|
|
88
|
+
# Always install contrib (regardless of install_lib flag) — treat it like the executable.
|
|
89
|
+
contrib_path.delete(sure=True, verbose=False)
|
|
90
|
+
contrib.move(folder=target_config_dir, overwrite=True)
|
|
91
|
+
|
|
92
|
+
# Install runtime only if install_lib is True. When copying runtime, copy all subfolders
|
|
93
|
+
# except 'grammars' (for which we only copy the specific python.so file if present).
|
|
87
94
|
if install_lib:
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
runtime_path.delete(sure=True, verbose=False)
|
|
96
|
+
print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
|
|
97
|
+
target_runtime = target_config_dir.joinpath("runtime")
|
|
98
|
+
target_runtime.mkdir(parents=True, exist_ok=True)
|
|
99
|
+
|
|
100
|
+
# iterate runtime children and copy selectively
|
|
101
|
+
for child in runtime.iterdir():
|
|
102
|
+
# skip non-existent or weird entries
|
|
103
|
+
if not child.exists():
|
|
104
|
+
continue
|
|
105
|
+
if child.name == "grammars":
|
|
106
|
+
# copy only the specific language files from runtime/grammars if they exist
|
|
107
|
+
for a_language in LANGUAGES_SUPPORTED_GRAMMER:
|
|
108
|
+
lang_file = child.joinpath(a_language)
|
|
109
|
+
if lang_file.exists() and lang_file.is_file():
|
|
110
|
+
dest = target_runtime.joinpath("grammars")
|
|
111
|
+
lang_file.copy(folder=dest, overwrite=True)
|
|
112
|
+
else:
|
|
113
|
+
# copy the whole child (file or directory) into target_runtime
|
|
114
|
+
# for directories, copy will create target_runtime/<child.name>
|
|
115
|
+
try:
|
|
116
|
+
child.copy(folder=target_runtime, overwrite=True)
|
|
117
|
+
except Exception:
|
|
118
|
+
# fallback: try copying contents if it's a directory
|
|
119
|
+
if child.is_dir():
|
|
120
|
+
for sub in child.iterdir():
|
|
121
|
+
sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
|
|
90
122
|
system_name = "Linux" if platform.system() == "Linux" else "macOS"
|
|
91
123
|
console.print(
|
|
92
124
|
Panel(
|
|
@@ -102,9 +134,34 @@ def main(version: Optional[str], install_lib: bool = False):
|
|
|
102
134
|
target_bin_path = PathExtended(WINDOWS_INSTALL_PATH)
|
|
103
135
|
exe_name = "hx.exe"
|
|
104
136
|
hx_file.move(folder=target_bin_path, overwrite=True)
|
|
137
|
+
|
|
138
|
+
# Always install contrib (regardless of install_lib flag)
|
|
139
|
+
contrib_path.delete(sure=True, verbose=False)
|
|
140
|
+
contrib.move(folder=target_config_dir, overwrite=True)
|
|
141
|
+
|
|
142
|
+
# Install runtime only if install_lib is True. Copy selectively as on POSIX.
|
|
105
143
|
if install_lib:
|
|
106
|
-
|
|
107
|
-
|
|
144
|
+
runtime_path.delete(sure=True, verbose=False)
|
|
145
|
+
print(f" ✨ Cleaned '{runtime_path}' and '{contrib_path}'.")
|
|
146
|
+
target_runtime = target_config_dir.joinpath("runtime")
|
|
147
|
+
target_runtime.mkdir(parents=True, exist_ok=True)
|
|
148
|
+
|
|
149
|
+
for child in runtime.iterdir():
|
|
150
|
+
if not child.exists():
|
|
151
|
+
continue
|
|
152
|
+
if child.name == "grammars":
|
|
153
|
+
for a_language in LANGUAGES_SUPPORTED_GRAMMER:
|
|
154
|
+
lang_file = child.joinpath(a_language)
|
|
155
|
+
if lang_file.exists() and lang_file.is_file():
|
|
156
|
+
dest = target_runtime.joinpath("grammars")
|
|
157
|
+
lang_file.copy(folder=dest, overwrite=True)
|
|
158
|
+
else:
|
|
159
|
+
try:
|
|
160
|
+
child.copy(folder=target_runtime, overwrite=True)
|
|
161
|
+
except Exception:
|
|
162
|
+
if child.is_dir():
|
|
163
|
+
for sub in child.iterdir():
|
|
164
|
+
sub.copy(folder=target_runtime.joinpath(child.name), overwrite=True)
|
|
108
165
|
console.print(
|
|
109
166
|
Panel(
|
|
110
167
|
f"""✅ SUCCESS | Helix editor installed successfully on Windows!
|
|
@@ -137,4 +194,4 @@ def main(version: Optional[str], install_lib: bool = False):
|
|
|
137
194
|
|
|
138
195
|
|
|
139
196
|
if __name__ == "__main__":
|
|
140
|
-
|
|
197
|
+
pass
|
|
@@ -30,8 +30,8 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
|
|
|
30
30
|
program = """
|
|
31
31
|
|
|
32
32
|
cargo install alacritty
|
|
33
|
-
mkdir -p
|
|
34
|
-
git clone https://github.com/alacritty/alacritty-theme
|
|
33
|
+
mkdir -p $HOME/.config/alacritty/themes
|
|
34
|
+
git clone https://github.com/alacritty/alacritty-theme $HOME/.config/alacritty/themes
|
|
35
35
|
|
|
36
36
|
"""
|
|
37
37
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
@@ -41,8 +41,8 @@ git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/theme
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
cargo install alacritty
|
|
44
|
-
mkdir -p
|
|
45
|
-
git clone https://github.com/alacritty/alacritty-theme
|
|
44
|
+
mkdir -p $HOME/.config/alacritty/themes
|
|
45
|
+
git clone https://github.com/alacritty/alacritty-theme $HOME/.config/alacritty/themes
|
|
46
46
|
|
|
47
47
|
"""
|
|
48
48
|
else:
|
|
@@ -9,12 +9,6 @@ from rich.panel import Panel
|
|
|
9
9
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
# config_dict: InstallerData = {
|
|
13
|
-
# "appName": "Brave",
|
|
14
|
-
# "repoURL": "CMD",
|
|
15
|
-
# "doc": "Privacy-focused web browser with built-in ad blocking",
|
|
16
|
-
# }
|
|
17
|
-
|
|
18
12
|
|
|
19
13
|
def main(installer_data: InstallerData, version: Optional[str]) -> None:
|
|
20
14
|
console = Console()
|
|
@@ -33,7 +27,7 @@ def main(installer_data: InstallerData, version: Optional[str]) -> None:
|
|
|
33
27
|
console.print("🪟 Installing Brave Browser on Windows using winget...", style="bold")
|
|
34
28
|
program = """
|
|
35
29
|
|
|
36
|
-
winget install --
|
|
30
|
+
winget install --no-upgrade --name "Brave" --Id "Brave.Brave" --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
37
31
|
|
|
38
32
|
"""
|
|
39
33
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
from typing import Optional
|
|
3
|
+
import platform
|
|
4
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def main(installer_data: InstallerData, version: Optional[str]):
|
|
8
|
+
_ = installer_data, version
|
|
9
|
+
system = platform.system()
|
|
10
|
+
if system == "Windows":
|
|
11
|
+
raise NotImplementedError("Installer is not yet implemented for Windows.")
|
|
12
|
+
elif system == "Linux":
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
import machineconfig.jobs.installer as module
|
|
15
|
+
program = Path(module.__file__).parent.joinpath("linux_scripts/cloudflare_warp_cli.sh").read_text(encoding="utf-8")
|
|
16
|
+
elif system == "Darwin":
|
|
17
|
+
program = "brew install --cask cloudflare-warp"
|
|
18
|
+
else:
|
|
19
|
+
raise NotImplementedError(f"Unsupported platform: {system}")
|
|
20
|
+
import subprocess
|
|
21
|
+
subprocess.run(program, shell=True, check=True)
|
|
22
|
+
return f"Cloudflare WARP CLI installed successfully on {system}."
|
|
23
|
+
|
|
@@ -32,7 +32,10 @@ def main(installer_data: InstallerData, version: Optional[str] = None) -> None:
|
|
|
32
32
|
install_script = """brew install --cask visual-studio-code"""
|
|
33
33
|
elif platform.system() == "Windows":
|
|
34
34
|
console.print("🪟 Installing VS Code on Windows using winget...", style="bold")
|
|
35
|
-
install_script = """
|
|
35
|
+
install_script = """
|
|
36
|
+
winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
37
|
+
|
|
38
|
+
"""
|
|
36
39
|
else:
|
|
37
40
|
error_msg = f"Unsupported platform: {platform.system()}"
|
|
38
41
|
console.print(
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
installer_data: InstallerData = {
|
|
8
|
+
"appName": "libduckdb.so",
|
|
9
|
+
"repoURL": "https://github.com/duckdb/duckdb",
|
|
10
|
+
"doc": "🗃️ An in-process SQL OLAP database management system",
|
|
11
|
+
"fileNamePattern": {
|
|
12
|
+
"amd64": {
|
|
13
|
+
"linux": "libduckdb-linux-amd64.zip",
|
|
14
|
+
"macos": None,
|
|
15
|
+
"windows": None
|
|
16
|
+
},
|
|
17
|
+
"arm64": {
|
|
18
|
+
"linux": "libduckdb-linux-arm64.zip",
|
|
19
|
+
"macos": None,
|
|
20
|
+
"windows": None
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def main(installer_data: InstallerData, version: Optional[str]) -> None:
|
|
27
|
+
_ = version
|
|
28
|
+
from machineconfig.utils.installer_utils.installer_runner import Installer
|
|
29
|
+
installer = Installer(installer_data)
|
|
30
|
+
installer.install(version=None)
|
|
@@ -18,34 +18,25 @@ from machineconfig.utils.installer_utils.installer_class import Installer
|
|
|
18
18
|
from machineconfig.utils.schemas.installer.installer_types import InstallerData
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
# Nerd Fonts installer configuration data
|
|
22
21
|
nerd_fonts: InstallerData = {
|
|
23
22
|
"appName": "Cascadia Code Nerd Font",
|
|
24
23
|
"repoURL": "https://github.com/ryanoasis/nerd-fonts",
|
|
25
24
|
"doc": "Nerd Fonts is a project that patches developer targeted fonts with a high number of glyphs (icons)",
|
|
26
25
|
"fileNamePattern": {
|
|
27
26
|
"amd64": {
|
|
28
|
-
"windows": "
|
|
29
|
-
"linux": "
|
|
30
|
-
"macos": "
|
|
27
|
+
"windows": "CascadiaCode.zip",
|
|
28
|
+
"linux": "CascadiaCode.zip",
|
|
29
|
+
"macos": "CascadiaCode.zip",
|
|
31
30
|
},
|
|
32
31
|
"arm64": {
|
|
33
|
-
"windows": "
|
|
34
|
-
"linux": "
|
|
35
|
-
"macos": "
|
|
32
|
+
"windows": "CascadiaCode.zip",
|
|
33
|
+
"linux": "CascadiaCode.zip",
|
|
34
|
+
"macos": "CascadiaCode.zip",
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
38
|
|
|
40
39
|
|
|
41
|
-
# Patterns to match any installed variant (NF, Nerd Font, Mono, Propo, style weights) of Cascadia/Caskaydia
|
|
42
|
-
# We'll compile them at runtime for flexibility. Keep them simple to avoid false positives.
|
|
43
|
-
REQUIRED_FONT_PATTERNS: tuple[str, ...] = (
|
|
44
|
-
r"caskaydiacove.*(nf|nerd ?font)",
|
|
45
|
-
r"cascadiacode.*(nf|nerd ?font)"
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
|
|
49
40
|
console = Console()
|
|
50
41
|
|
|
51
42
|
|
|
@@ -92,7 +83,7 @@ def _missing_required_fonts(installed_fonts: Iterable[str]) -> list[str]:
|
|
|
92
83
|
|
|
93
84
|
installed_norm = [f.lower().replace(" ", "") for f in installed_fonts]
|
|
94
85
|
missing: list[str] = []
|
|
95
|
-
for pattern in
|
|
86
|
+
for pattern in ["cascadiacode*"]:
|
|
96
87
|
regex = re.compile(pattern)
|
|
97
88
|
if not any(regex.search(f) for f in installed_norm):
|
|
98
89
|
missing.append(pattern)
|
|
@@ -125,7 +116,7 @@ def install_nerd_fonts() -> None:
|
|
|
125
116
|
console.print(f"🔍 Missing fonts detected: {', '.join(missing)}. Proceeding with installation...")
|
|
126
117
|
console.print("🔍 Downloading Nerd Fonts package...")
|
|
127
118
|
|
|
128
|
-
folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).
|
|
119
|
+
folder, _version_to_be_installed = Installer(installer_data=nerd_fonts).binary_download(version=None)
|
|
129
120
|
|
|
130
121
|
console.print("🧹 Cleaning up unnecessary files...")
|
|
131
122
|
[p.delete(sure=True) for p in folder.search("*Windows*")]
|
|
@@ -136,7 +127,7 @@ def install_nerd_fonts() -> None:
|
|
|
136
127
|
file = PathExtended.tmpfile(suffix=".ps1")
|
|
137
128
|
file.parent.mkdir(parents=True, exist_ok=True)
|
|
138
129
|
|
|
139
|
-
raw_content = LIBRARY_ROOT.joinpath("
|
|
130
|
+
raw_content = LIBRARY_ROOT.joinpath("jobs/installer/pwsh_scripts/install_fonts.ps1").read_text(encoding="utf-8").replace(r".\fonts-to-be-installed", str(folder))
|
|
140
131
|
# PowerShell 5.1 can choke on certain unicode chars in some locales; keep ASCII only.
|
|
141
132
|
content = "".join(ch for ch in raw_content if ord(ch) < 128)
|
|
142
133
|
file.write_text(content, encoding="utf-8")
|