machineconfig 6.23__py3-none-any.whl → 8.12__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/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- 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 +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +3 -3
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +5 -3
- machineconfig/cluster/sessions_managers/zellij_remote.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -7
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_with_panes.py +1 -1
- machineconfig/jobs/installer/check_installations.py +0 -1
- machineconfig/jobs/installer/installer_data.json +1408 -201
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +63 -92
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/python_scripts/boxes.py +61 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +75 -18
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +90 -132
- machineconfig/profile/mapper.toml +18 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +82 -60
- machineconfig/scripts/python/ai/initai.py +1 -19
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/cloud.py +14 -9
- machineconfig/scripts/python/croshell.py +135 -117
- machineconfig/scripts/python/devops.py +48 -25
- machineconfig/scripts/python/devops_navigator.py +1 -5
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +18 -9
- machineconfig/scripts/python/fire_jobs.py +127 -118
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +37 -15
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_copy.py +28 -21
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_mount.py +19 -17
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_sync.py +12 -11
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +105 -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 +221 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/cli_repos.py +60 -36
- machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
- machineconfig/scripts/python/{devops_helpers/cli_terminal.py → helpers_devops/cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_backup_retrieve.py +7 -10
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_status.py +7 -19
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +2 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_builder.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_detail.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_tree.py +160 -23
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +80 -37
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/entrypoint.py +5 -5
- machineconfig/scripts/python/helpers_repos/grource.py +2 -2
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/record.py +3 -2
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{repos_helpers/count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/sync.py +5 -5
- machineconfig/scripts/python/{sessions_helpers → helpers_sessions}/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +26 -35
- machineconfig/scripts/python/{entry.py → mcfg_entry.py} +24 -10
- machineconfig/scripts/python/msearch.py +72 -0
- machineconfig/scripts/python/sessions.py +101 -38
- machineconfig/scripts/python/terminal.py +136 -0
- machineconfig/scripts/python/utils.py +62 -0
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/linux/lfrc +10 -11
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +15 -17
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +57 -10
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -35
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +59 -23
- 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/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -11
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- 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 +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/code.py +143 -167
- 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/headers.py +6 -11
- machineconfig/utils/files/read.py +3 -9
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +44 -101
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +39 -87
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +17 -63
- machineconfig/utils/io.py +77 -4
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +235 -145
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +46 -97
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +10 -23
- machineconfig/utils/scheduler.py +84 -115
- 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/ssh.py +214 -476
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +3 -113
- machineconfig/utils/upgrade_packages.py +114 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- machineconfig-8.12.dist-info/RECORD +504 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +5 -1
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- 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/windows/archive/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/devops_helpers/cli_config.py +0 -81
- machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -84
- machineconfig/scripts/python/devops_helpers/cli_data.py +0 -18
- machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -73
- machineconfig/scripts/python/devops_helpers/cli_self.py +0 -117
- machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -104
- machineconfig/scripts/python/helper_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -30
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/python/repos_helpers/action.py +0 -378
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -17
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- machineconfig/settings/yazi/keymap.toml +0 -0
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/nix/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.23.dist-info/METADATA +0 -84
- machineconfig-6.23.dist-info/RECORD +0 -428
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_restart.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_manager_helper.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/web_shortcuts → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{linux/msc → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{devops_helpers → helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{devops_helpers/themes → helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/scheduler.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/data_models.py +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{repos_helpers → helpers_repos}/update.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_sessions}/__init__.py +0 -0
- /machineconfig/{scripts/python/sessions_helpers → settings/wt}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -2,158 +2,171 @@
|
|
|
2
2
|
|
|
3
3
|
"""
|
|
4
4
|
croshell
|
|
5
|
+
|
|
5
6
|
"""
|
|
6
7
|
|
|
7
8
|
from typing import Annotated, Optional
|
|
8
9
|
import typer
|
|
9
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
10
|
-
from machineconfig.utils.accessories import randstr
|
|
11
|
-
|
|
12
|
-
from machineconfig.utils.options import choose_from_options
|
|
13
|
-
# from machineconfig.utils.ve import get_ve_activate_line
|
|
14
|
-
from rich.console import Console
|
|
15
|
-
from rich.panel import Panel
|
|
16
|
-
# from rich.text import Text
|
|
17
|
-
|
|
18
|
-
console = Console()
|
|
19
|
-
|
|
20
10
|
|
|
21
|
-
def add_print_header_pycode(path: str, title: str):
|
|
22
|
-
return f"""
|
|
23
11
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
def croshell(
|
|
13
|
+
path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
|
|
14
|
+
project_path: Annotated[Optional[str], typer.Option("--project", "-p", help="specify uv project to use")] = None,
|
|
15
|
+
uv_with: Annotated[Optional[str], typer.Option("--uv-with", "-w", help="specify uv with packages to use")] = None,
|
|
16
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
|
|
17
|
+
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
18
|
+
vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
|
|
19
|
+
visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
|
|
20
|
+
# streamlit_viewer: Annotated[bool, typer.Option("--streamlit", "-s", help="view in streamlit app")] = False,
|
|
21
|
+
python: Annotated[bool, typer.Option("--python", "-P", help="flag to use python over IPython.")] = False,
|
|
22
|
+
profile: Annotated[Optional[str], typer.Option("--profile", "-r", help="ipython profile to use, defaults to default profile.")] = None,
|
|
23
|
+
|
|
24
|
+
) -> None:
|
|
25
|
+
if uv_with is not None: user_uv_with_line = f"--with {uv_with} "
|
|
26
|
+
else: user_uv_with_line = ""
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
if project_path is not None:
|
|
29
|
+
uv_project_line = f'--project {project_path}'
|
|
30
|
+
uv_python_line = ""
|
|
31
|
+
else:
|
|
32
|
+
uv_project_line = ""
|
|
33
|
+
uv_python_line = "--python 3.14"
|
|
34
|
+
|
|
35
|
+
from machineconfig.scripts.python.helpers_croshell.crosh import get_read_python_file_pycode, get_read_data_pycode
|
|
36
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
from machineconfig.utils.accessories import randstr
|
|
39
|
+
from machineconfig.utils.ve import get_ve_path_and_ipython_profile
|
|
40
|
+
import json
|
|
31
41
|
from rich.console import Console
|
|
32
|
-
from rich.
|
|
42
|
+
from rich.panel import Panel
|
|
33
43
|
console = Console()
|
|
34
|
-
if pycode.strip() != "":
|
|
35
|
-
console.print(Panel(Syntax(pycode, lexer="python"), title='{title}'), style="bold red")
|
|
36
|
-
except Exception: print(pycode)
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def get_read_data_pycode(path: str):
|
|
41
|
-
return f"""
|
|
42
|
-
from rich.panel import Panel
|
|
43
|
-
from rich.text import Text
|
|
44
|
-
from rich.console import Console
|
|
45
|
-
console = Console()
|
|
46
|
-
p = PathExtended(r'{path}').absolute()
|
|
47
|
-
try:
|
|
48
|
-
from machineconfig.utils.files.read import Read
|
|
49
|
-
from machineconfig.utils.accessories import pprint
|
|
50
|
-
dat = Read.read(p)
|
|
51
|
-
if isinstance(dat, dict):
|
|
52
|
-
panel_title = f"📄 File Data: {{p.name}}"
|
|
53
|
-
console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
|
|
54
|
-
pprint(dat, PathExtended.name)
|
|
55
|
-
else:
|
|
56
|
-
panel_title = f"📄 Successfully read the file: {{p.name}}"
|
|
57
|
-
console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
|
|
58
|
-
except Exception as e:
|
|
59
|
-
error_message = f'''❌ ERROR READING FILE\nFile: {{p.name}}\nError: {{e}}'''
|
|
60
|
-
console.print(Panel(Text(error_message, justify="left"), title="Error", expand=False, border_style="red"))
|
|
61
|
-
"""
|
|
62
|
-
|
|
63
44
|
|
|
64
45
|
|
|
65
|
-
def croshell(
|
|
66
|
-
path: Annotated[Optional[str], typer.Argument(help="read a file.")] = "",
|
|
67
|
-
python: Annotated[bool, typer.Option("--python", "-p", help="flag to use python over IPython.")] = False,
|
|
68
|
-
profile: Annotated[Optional[str], typer.Option("--profile", "-P", help="ipython profile to use, defaults to default profile.")] = None,
|
|
69
|
-
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
70
|
-
streamlit_viewer: Annotated[bool, typer.Option("--stViewer", "-s", help="view in streamlit app")] = False,
|
|
71
|
-
visidata: Annotated[bool, typer.Option("--visidata", "-V", help="open data file in visidata")] = False,
|
|
72
|
-
local: Annotated[bool, typer.Option("--local", "-l", help="run in local mode, not in virtual env.")]= False,
|
|
73
|
-
) -> None:
|
|
74
46
|
# ==================================================================================
|
|
75
47
|
# flags processing
|
|
76
48
|
interactivity = "-i"
|
|
77
49
|
interpreter = "python" if python else "ipython"
|
|
78
50
|
ipython_profile: Optional[str] = profile
|
|
79
|
-
file_obj =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
# #!/bin/bash
|
|
99
|
-
# streamlit run {py_file_path}
|
|
100
|
-
# """
|
|
101
|
-
# PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
|
|
102
|
-
return None
|
|
103
|
-
file_obj = PathExtended(str(path).lstrip()).expanduser().absolute()
|
|
104
|
-
program = get_read_data_pycode(str(file_obj))
|
|
105
|
-
text = f"📄 Reading data from: {file_obj.name}"
|
|
106
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
107
|
-
|
|
51
|
+
file_obj = Path.cwd() # initialization value, could be modified according to args.
|
|
52
|
+
if path is not None:
|
|
53
|
+
from machineconfig.utils.path_helper import get_choice_file
|
|
54
|
+
choice_file = get_choice_file(path=path, suffixes={".*"})
|
|
55
|
+
if project_path is None:
|
|
56
|
+
ve_path, _ = get_ve_path_and_ipython_profile(choice_file)
|
|
57
|
+
if ve_path is not None:
|
|
58
|
+
ve_path_obj = Path(ve_path)
|
|
59
|
+
uv_project_line = f'--project {ve_path_obj.parent}'
|
|
60
|
+
uv_python_line = ""
|
|
61
|
+
if choice_file.suffix == ".py":
|
|
62
|
+
program = choice_file.read_text(encoding="utf-8")
|
|
63
|
+
text = f"📄 Selected file: {choice_file.name}"
|
|
64
|
+
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
65
|
+
else:
|
|
66
|
+
program = lambda_to_python_script(lambda: get_read_data_pycode(path=str(choice_file)),
|
|
67
|
+
in_global=True, import_module=False)
|
|
68
|
+
text = f"📄 Reading data from: {file_obj.name}"
|
|
69
|
+
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
108
70
|
else: # if nothing is specified, then run in interactive mode.
|
|
109
|
-
text = "⌨️ Entering interactive mode"
|
|
110
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
111
|
-
# from machineconfig.scripts.python.croshell import InteractiveShell
|
|
112
|
-
# InteractiveShell().run()
|
|
113
|
-
# return None
|
|
114
71
|
program = ""
|
|
115
72
|
|
|
116
|
-
|
|
73
|
+
if Path.home().joinpath("code/machineconfig").exists() and uv_project_line == "":
|
|
74
|
+
uv_project_line = f'--project "{str(Path.home().joinpath("code/machineconfig"))}"'
|
|
117
75
|
|
|
76
|
+
preprogram = """
|
|
118
77
|
#%%
|
|
119
|
-
|
|
120
|
-
from machineconfig.utils.files.headers import print_header, print_logo
|
|
121
|
-
print_header()
|
|
122
|
-
print_logo("CROCODILE")
|
|
123
|
-
from pathlib import Path
|
|
124
|
-
|
|
125
78
|
"""
|
|
126
|
-
|
|
127
|
-
|
|
79
|
+
def preprogram_func():
|
|
80
|
+
from machineconfig.utils.files.headers import print_header, print_logo
|
|
81
|
+
print_header()
|
|
82
|
+
print_logo("Machineconfig")
|
|
83
|
+
from pathlib import Path
|
|
84
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
85
|
+
_ = Path, PathExtended # avoid unused import warnings
|
|
86
|
+
import inspect
|
|
87
|
+
import textwrap
|
|
88
|
+
from types import FunctionType
|
|
89
|
+
def get_body_simple_function_no_args(f: FunctionType):
|
|
90
|
+
return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
|
|
91
|
+
preprogram += get_body_simple_function_no_args(preprogram_func)
|
|
92
|
+
|
|
93
|
+
from pathlib import Path
|
|
94
|
+
pyfile = Path.home().joinpath(f"tmp_results/tmp_scripts/python/croshell/{randstr()}/script.py")
|
|
128
95
|
pyfile.parent.mkdir(parents=True, exist_ok=True)
|
|
129
|
-
|
|
130
96
|
title = "Reading Data"
|
|
131
|
-
|
|
97
|
+
def_code = lambda_to_python_script(lambda: get_read_python_file_pycode(path=str(pyfile), title=title),
|
|
98
|
+
in_global=False, import_module=False)
|
|
99
|
+
# print(def_code)
|
|
100
|
+
python_program = preprogram + "\n\n" + def_code + program
|
|
132
101
|
pyfile.write_text(python_program, encoding="utf-8")
|
|
133
102
|
# ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
|
|
134
103
|
ipython_profile = ipython_profile if ipython_profile is not None else "default"
|
|
135
104
|
# ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
|
|
136
105
|
|
|
106
|
+
# prepare notebook target path (avoid relying on locals())
|
|
107
|
+
nb_target = pyfile.with_suffix(".ipynb")
|
|
108
|
+
if jupyter:
|
|
109
|
+
try:
|
|
110
|
+
nb_path = pyfile.with_suffix(".ipynb")
|
|
111
|
+
nb_content = {
|
|
112
|
+
"cells": [
|
|
113
|
+
{
|
|
114
|
+
"cell_type": "code",
|
|
115
|
+
"metadata": {"language": "python"},
|
|
116
|
+
"source": [python_program],
|
|
117
|
+
"outputs": [],
|
|
118
|
+
"execution_count": None,
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"metadata": {},
|
|
122
|
+
"nbformat": 4,
|
|
123
|
+
"nbformat_minor": 5,
|
|
124
|
+
}
|
|
125
|
+
nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
|
|
126
|
+
nb_target = nb_path
|
|
127
|
+
except Exception:
|
|
128
|
+
# if writing fails, fall back to the default nb_target already set
|
|
129
|
+
pass
|
|
137
130
|
if visidata:
|
|
138
|
-
|
|
131
|
+
if file_obj.suffix == ".json":
|
|
132
|
+
fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata vd {str(file_obj)}"
|
|
133
|
+
else:
|
|
134
|
+
fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata,pyarrow vd {str(file_obj)}"
|
|
135
|
+
elif marimo:
|
|
136
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
137
|
+
requirements = f"""{user_uv_with_line} {uv_project_line} --with marimo """
|
|
138
|
+
else: requirements = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "marimo,cowsay,machineconfig[plot]>=8.12" """
|
|
139
|
+
fire_line = f"""
|
|
140
|
+
cd {str(pyfile.parent)}
|
|
141
|
+
uv run {uv_python_line} --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
|
|
142
|
+
uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
|
|
143
|
+
"""
|
|
139
144
|
elif jupyter:
|
|
140
|
-
|
|
145
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
146
|
+
requirements = f"""{user_uv_with_line} {uv_project_line} --with jupyterlab """
|
|
147
|
+
else: requirements = f"""{user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.12" """
|
|
148
|
+
fire_line = f"uv run {requirements} {uv_project_line} jupyter-lab {str(nb_target)}"
|
|
149
|
+
elif vscode:
|
|
150
|
+
user_uv_add = f"uv add {uv_with}" if uv_with is not None else ""
|
|
151
|
+
fire_line = f"""
|
|
152
|
+
cd {str(pyfile.parent)}
|
|
153
|
+
uv init {uv_python_line}
|
|
154
|
+
uv venv
|
|
155
|
+
uv add "cowsay,machineconfig[plot]>=8.12"
|
|
156
|
+
uv add {user_uv_add}
|
|
157
|
+
# code serve-web
|
|
158
|
+
code --new-window {str(pyfile)}
|
|
159
|
+
"""
|
|
141
160
|
else:
|
|
142
161
|
if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
|
|
143
162
|
else: profile = ""
|
|
144
|
-
if
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
ve_line = f"--project {str(repo_root)}"
|
|
149
|
-
else:
|
|
150
|
-
console.print(Panel("❌ Could not determine the local machineconfig repo root. Please ensure the `REPO_ROOT` in `source_of_truth.py` is correctly set to the local path of the machineconfig repo, or do not use the `--local` flag.", title="Error", border_style="red"))
|
|
151
|
-
return
|
|
152
|
-
else: ve_line = """--with "machineconfig[plot]>=5.87" """
|
|
153
|
-
fire_line = f"uv run --python 3.14 {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
163
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
164
|
+
ve_line = f"""{user_uv_with_line} {uv_project_line} """
|
|
165
|
+
else: ve_line = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.12" """
|
|
166
|
+
fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
154
167
|
|
|
155
|
-
from machineconfig.utils.code import
|
|
156
|
-
|
|
168
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
169
|
+
exit_then_run_shell_script(fire_line, strict=False)
|
|
157
170
|
|
|
158
171
|
|
|
159
172
|
def main() -> None:
|
|
@@ -161,4 +174,9 @@ def main() -> None:
|
|
|
161
174
|
|
|
162
175
|
|
|
163
176
|
if __name__ == "__main__":
|
|
177
|
+
# def func(flag: Annotated[bool, typer.Option("--flag/-nf", help="dummy flag for debugging", flag_value=False, is_flag=True)]=True):
|
|
178
|
+
# console.print(f"flag: {flag}")
|
|
179
|
+
# app = typer.Typer()
|
|
180
|
+
# app.command()(func)
|
|
181
|
+
# app()
|
|
164
182
|
main()
|
|
@@ -3,42 +3,65 @@
|
|
|
3
3
|
import typer
|
|
4
4
|
from typing import Optional, Annotated
|
|
5
5
|
|
|
6
|
-
import machineconfig.scripts.python.
|
|
7
|
-
import machineconfig.scripts.python.
|
|
8
|
-
import machineconfig.scripts.python.
|
|
9
|
-
import machineconfig.scripts.python.
|
|
10
|
-
import machineconfig.scripts.python.
|
|
11
|
-
|
|
6
|
+
import machineconfig.scripts.python.helpers_devops.cli_repos as cli_repos
|
|
7
|
+
import machineconfig.scripts.python.helpers_devops.cli_config as cli_config
|
|
8
|
+
import machineconfig.scripts.python.helpers_devops.cli_self as cli_self
|
|
9
|
+
import machineconfig.scripts.python.helpers_devops.cli_data as cli_data
|
|
10
|
+
import machineconfig.scripts.python.helpers_devops.cli_nw as cli_network
|
|
11
|
+
import machineconfig.scripts.python.helpers_devops.run_script as run_py_script_module
|
|
12
12
|
|
|
13
13
|
def install(which: Annotated[Optional[str], typer.Argument(..., help="Comma-separated list of program names to install, or group name if --group flag is set.")] = None,
|
|
14
14
|
group: Annotated[bool, typer.Option(..., "--group", "-g", help="Treat 'which' as a group name. A group is bundle of apps.")] = False,
|
|
15
|
-
interactive: Annotated[bool, typer.Option(..., "--interactive", "-
|
|
15
|
+
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of programs to install.")] = False,
|
|
16
16
|
) -> None:
|
|
17
|
-
"""📦 Install
|
|
18
|
-
import machineconfig.utils.installer_utils.
|
|
19
|
-
installer_entry_point.
|
|
17
|
+
"""📦 Install packages"""
|
|
18
|
+
import machineconfig.utils.installer_utils.installer_cli as installer_entry_point
|
|
19
|
+
installer_entry_point.main_installer_cli(which=which, group=group, interactive=interactive)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# def get_app():
|
|
24
|
+
# app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
25
|
+
# app.command(name="scripts", help="define all scripts", no_args_is_help=False)(define_scripts)
|
|
26
|
+
# return app
|
|
27
|
+
|
|
28
|
+
# def main():
|
|
29
|
+
# # return app
|
|
30
|
+
# app = get_app()
|
|
31
|
+
# app()
|
|
32
|
+
|
|
33
|
+
# define_app = get_define_app()
|
|
20
34
|
|
|
21
35
|
|
|
22
36
|
def get_app():
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
|
|
38
|
+
cli_app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
39
|
+
cli_app.command("install", no_args_is_help=True, help=install.__doc__, short_help="🛠️ [i] Install essential packages")(install)
|
|
40
|
+
cli_app.command("i", no_args_is_help=True, help=install.__doc__, hidden=True)(install)
|
|
41
|
+
|
|
27
42
|
app_repos = cli_repos.get_app()
|
|
28
|
-
|
|
29
|
-
|
|
43
|
+
cli_app.add_typer(app_repos, name="repos")
|
|
44
|
+
cli_app.add_typer(app_repos, name="r", hidden=True)
|
|
30
45
|
app_config = cli_config.get_app()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
cli_app.add_typer(app_config, name="config")
|
|
47
|
+
cli_app.add_typer(app_config, name="c", hidden=True)
|
|
48
|
+
app_data = cli_data.get_app()
|
|
49
|
+
cli_app.add_typer(app_data, name="data")
|
|
50
|
+
cli_app.add_typer(app_data, name="d", hidden=True)
|
|
35
51
|
app_self = cli_self.get_app()
|
|
36
|
-
|
|
37
|
-
|
|
52
|
+
cli_app.add_typer(app_self, name="self")
|
|
53
|
+
cli_app.add_typer(app_self, name="s", hidden=True)
|
|
38
54
|
app_nw = cli_network.get_app()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
cli_app.add_typer(app_nw, name="network")
|
|
56
|
+
cli_app.add_typer(app_nw, name="n", hidden=True)
|
|
57
|
+
|
|
58
|
+
cli_app.command("execute", no_args_is_help=True, help=run_py_script_module.__doc__,
|
|
59
|
+
short_help="▶️ [e] Execute python/shell scripts from pre-defined directories or as command",
|
|
60
|
+
context_settings={"show_help_on_error": True})(run_py_script_module.run_py_script)
|
|
61
|
+
cli_app.command("e", no_args_is_help=True, help=run_py_script_module.__doc__, hidden=True)(run_py_script_module.run_py_script)
|
|
62
|
+
|
|
63
|
+
return cli_app
|
|
64
|
+
|
|
42
65
|
|
|
43
66
|
def main():
|
|
44
67
|
app = get_app()
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
TUI for navigating through machineconfig command structure using Textual.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from machineconfig.scripts.python.helper_navigator import CommandNavigatorApp
|
|
1
|
+
from machineconfig.scripts.python.helpers_navigator import CommandNavigatorApp
|
|
6
2
|
|
|
7
3
|
|
|
8
4
|
if __name__ == "__main__":
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/usr/bin/env -S uv run --script
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.13"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "machineconfig>=8.12",
|
|
6
|
+
# "textual",
|
|
7
|
+
# "pyperclip",
|
|
8
|
+
# ]
|
|
9
|
+
# ///
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
import platform
|
|
15
|
+
from collections.abc import Mapping
|
|
16
|
+
from typing import Final
|
|
17
|
+
|
|
18
|
+
from rich.text import Text
|
|
19
|
+
from textual import on
|
|
20
|
+
from textual.app import App, ComposeResult
|
|
21
|
+
from textual.binding import Binding
|
|
22
|
+
from textual.containers import Horizontal, Vertical
|
|
23
|
+
from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
VALUE_PREVIEW_LIMIT: Final[int] = 4096
|
|
27
|
+
SUMMARY_LIMIT: Final[int] = 96
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def truncate_text(text: str, limit: int) -> tuple[str, int]:
|
|
31
|
+
length = len(text)
|
|
32
|
+
if length <= limit:
|
|
33
|
+
return text, 0
|
|
34
|
+
return text[:limit], length - limit
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def format_summary(env_key: str, env_value: str, limit: int) -> str:
|
|
38
|
+
sanitized = env_value.replace("\n", "\\n").replace("\t", "\\t")
|
|
39
|
+
preview, remainder = truncate_text(sanitized, limit)
|
|
40
|
+
if preview == "":
|
|
41
|
+
base = f"{env_key} = <empty>"
|
|
42
|
+
else:
|
|
43
|
+
base = f"{env_key} = {preview}"
|
|
44
|
+
if remainder == 0:
|
|
45
|
+
return base
|
|
46
|
+
return f"{base}... (+{remainder} chars)"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def collect_environment(env: Mapping[str, str]) -> list[tuple[str, str]]:
|
|
50
|
+
return sorted(env.items(), key=lambda pair: pair[0].lower())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class EnvListItem(ListItem):
|
|
54
|
+
def __init__(self, env_key: str, summary: str) -> None:
|
|
55
|
+
super().__init__(Label(summary))
|
|
56
|
+
self._env_key = env_key
|
|
57
|
+
|
|
58
|
+
def env_key(self) -> str:
|
|
59
|
+
return self._env_key
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class EnvValuePreview(Static):
|
|
63
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
64
|
+
super().__init__(*args, **kwargs)
|
|
65
|
+
self.border_title = "Environment Value"
|
|
66
|
+
|
|
67
|
+
def show_value(self, env_key: str, env_value: str) -> None:
|
|
68
|
+
preview, remainder = truncate_text(env_value, VALUE_PREVIEW_LIMIT)
|
|
69
|
+
text = Text()
|
|
70
|
+
text.append(f"{env_key}\n\n", style="bold cyan")
|
|
71
|
+
if preview == "":
|
|
72
|
+
text.append("<empty>", style="dim")
|
|
73
|
+
else:
|
|
74
|
+
text.append(preview)
|
|
75
|
+
if remainder > 0:
|
|
76
|
+
text.append(f"\n... truncated {remainder} characters", style="yellow")
|
|
77
|
+
self.update(text)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class StatusBar(Static):
|
|
81
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
82
|
+
super().__init__(*args, **kwargs)
|
|
83
|
+
self.border_title = "Status"
|
|
84
|
+
|
|
85
|
+
def show_message(self, message: str, level: str) -> None:
|
|
86
|
+
palette = {
|
|
87
|
+
"info": "cyan",
|
|
88
|
+
"success": "green",
|
|
89
|
+
"warning": "yellow",
|
|
90
|
+
"error": "red",
|
|
91
|
+
}
|
|
92
|
+
color = palette.get(level, "white")
|
|
93
|
+
self.update(f"[{color}]{message}[/{color}]")
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class EnvExplorerApp(App[None]):
|
|
97
|
+
CSS = """
|
|
98
|
+
Screen { background: $surface; }
|
|
99
|
+
Header { background: $primary; color: $text; }
|
|
100
|
+
Footer { background: $panel; }
|
|
101
|
+
#main-container { height: 100%; }
|
|
102
|
+
#left-panel { width: 50%; height: 100%; border: solid $primary; padding: 1; }
|
|
103
|
+
#right-panel { width: 50%; height: 100%; border: solid $accent; padding: 1; }
|
|
104
|
+
ListView { height: 1fr; border: solid $accent; background: $surface; }
|
|
105
|
+
ListView > ListItem { padding: 0 1; }
|
|
106
|
+
EnvValuePreview { height: 1fr; border: solid $primary; background: $surface; padding: 1; overflow-y: auto; }
|
|
107
|
+
StatusBar { height: 3; border: solid $success; background: $surface; padding: 1; }
|
|
108
|
+
Label { padding: 0 1; height: auto; }
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
BINDINGS = [
|
|
112
|
+
Binding("q", "quit", "Quit", show=True),
|
|
113
|
+
Binding("r", "refresh", "Refresh", show=True),
|
|
114
|
+
Binding("c", "copy_entry", "Copy", show=True),
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
def __init__(self) -> None:
|
|
118
|
+
super().__init__()
|
|
119
|
+
self._env_pairs: list[tuple[str, str]] = []
|
|
120
|
+
self._env_lookup: dict[str, str] = {}
|
|
121
|
+
self._selected_key: str = ""
|
|
122
|
+
|
|
123
|
+
def compose(self) -> ComposeResult:
|
|
124
|
+
platform_name = platform.system()
|
|
125
|
+
yield Header(show_clock=True)
|
|
126
|
+
with Horizontal(id="main-container"):
|
|
127
|
+
with Vertical(id="left-panel"):
|
|
128
|
+
yield Label(f"🌐 Environment Variables ({platform_name})")
|
|
129
|
+
yield ListView(id="env-list")
|
|
130
|
+
with Vertical(id="right-panel"):
|
|
131
|
+
yield EnvValuePreview(id="preview")
|
|
132
|
+
yield StatusBar(id="status")
|
|
133
|
+
yield Footer()
|
|
134
|
+
|
|
135
|
+
def on_mount(self) -> None:
|
|
136
|
+
self.title = "Environment Explorer"
|
|
137
|
+
self.sub_title = f"Platform: {platform.system()}"
|
|
138
|
+
self._reload_environment()
|
|
139
|
+
self._status().show_message("Ready. Select a variable to preview its value.", "info")
|
|
140
|
+
|
|
141
|
+
def _reload_environment(self) -> None:
|
|
142
|
+
self._env_pairs = collect_environment(os.environ)
|
|
143
|
+
self._env_lookup = dict(self._env_pairs)
|
|
144
|
+
self._populate_list()
|
|
145
|
+
|
|
146
|
+
def _populate_list(self) -> None:
|
|
147
|
+
list_view = self.query_one("#env-list", ListView)
|
|
148
|
+
list_view.clear()
|
|
149
|
+
for env_key, env_value in self._env_pairs:
|
|
150
|
+
summary = format_summary(env_key, env_value, SUMMARY_LIMIT)
|
|
151
|
+
list_view.append(EnvListItem(env_key, summary))
|
|
152
|
+
self._status().show_message(f"Loaded {len(self._env_pairs)} environment variables.", "success")
|
|
153
|
+
|
|
154
|
+
def _status(self) -> StatusBar:
|
|
155
|
+
return self.query_one("#status", StatusBar)
|
|
156
|
+
|
|
157
|
+
def _preview(self) -> EnvValuePreview:
|
|
158
|
+
return self.query_one("#preview", EnvValuePreview)
|
|
159
|
+
|
|
160
|
+
@on(ListView.Highlighted)
|
|
161
|
+
def handle_highlight(self, event: ListView.Highlighted) -> None:
|
|
162
|
+
if not isinstance(event.item, EnvListItem):
|
|
163
|
+
return
|
|
164
|
+
env_key = event.item.env_key()
|
|
165
|
+
env_value = self._env_lookup.get(env_key, "")
|
|
166
|
+
self._preview().show_value(env_key, env_value)
|
|
167
|
+
self._status().show_message(f"Previewing {env_key}", "info")
|
|
168
|
+
|
|
169
|
+
@on(ListView.Selected)
|
|
170
|
+
def handle_selection(self, event: ListView.Selected) -> None:
|
|
171
|
+
if not isinstance(event.item, EnvListItem):
|
|
172
|
+
return
|
|
173
|
+
env_key = event.item.env_key()
|
|
174
|
+
self._selected_key = env_key
|
|
175
|
+
env_value = self._env_lookup.get(env_key, "")
|
|
176
|
+
self._preview().show_value(env_key, env_value)
|
|
177
|
+
self._status().show_message(f"Selected {env_key}", "success")
|
|
178
|
+
|
|
179
|
+
def action_refresh(self) -> None:
|
|
180
|
+
self._reload_environment()
|
|
181
|
+
self._status().show_message("Environment reloaded.", "success")
|
|
182
|
+
|
|
183
|
+
def action_copy_entry(self) -> None:
|
|
184
|
+
if self._selected_key == "":
|
|
185
|
+
self._status().show_message("No variable selected.", "warning")
|
|
186
|
+
return
|
|
187
|
+
env_value = self._env_lookup.get(self._selected_key, "")
|
|
188
|
+
payload = f"{self._selected_key}={env_value}"
|
|
189
|
+
try:
|
|
190
|
+
import pyperclip # type: ignore[import]
|
|
191
|
+
|
|
192
|
+
pyperclip.copy(payload)
|
|
193
|
+
self._status().show_message(f"Copied {self._selected_key} to clipboard.", "success")
|
|
194
|
+
except ImportError:
|
|
195
|
+
self._status().show_message("pyperclip unavailable. Install it for clipboard support.", "warning")
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def main() -> None:
|
|
199
|
+
app = EnvExplorerApp()
|
|
200
|
+
app.run()
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
if __name__ == "__main__":
|
|
204
|
+
main()
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env -S uv run --script
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.13"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "machineconfig>=8.12",
|
|
6
|
+
# "textual",
|
|
7
|
+
# "pyperclip",
|
|
8
|
+
# ]
|
|
9
|
+
# ///
|
|
10
|
+
|
|
1
11
|
"""Cross-platform PATH explorer with Textual TUI."""
|
|
2
12
|
|
|
3
13
|
from pathlib import Path
|
|
@@ -198,15 +208,14 @@ class PathExplorerApp(App[None]):
|
|
|
198
208
|
"""Copy selected path to clipboard."""
|
|
199
209
|
if not self.selected_path:
|
|
200
210
|
self.query_one("#status", StatusBar).show_message("No PATH entry selected", "warning")
|
|
201
|
-
return
|
|
202
|
-
|
|
203
|
-
#
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
|
|
211
|
+
return
|
|
212
|
+
# # Try to copy to clipboard
|
|
213
|
+
# try:
|
|
214
|
+
# import pyperclip
|
|
215
|
+
# pyperclip.copy(self.selected_path)
|
|
216
|
+
# self.query_one("#status", StatusBar).show_message(f"Copied to clipboard: {self.selected_path}", "success")
|
|
217
|
+
# except ImportError:
|
|
218
|
+
# self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
|
|
210
219
|
|
|
211
220
|
|
|
212
221
|
def main() -> None:
|