machineconfig 6.82__py3-none-any.whl → 8.51__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.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
- machineconfig/cluster/sessions_managers/wt_local.py +17 -222
- machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
- 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 +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +1500 -310
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +62 -91
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
- 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 +14 -9
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/python_scripts/hx.py +214 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/python_scripts/sysabc.py +145 -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 +139 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- 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 +428 -0
- machineconfig/logger.py +1 -2
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +79 -21
- machineconfig/profile/create_links_export.py +87 -36
- machineconfig/profile/create_shell_profile.py +92 -127
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- 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 +85 -165
- machineconfig/scripts/python/ai/initai.py +4 -2
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- 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.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +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 +6 -6
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +10 -162
- machineconfig/scripts/python/devops.py +73 -36
- machineconfig/scripts/python/devops_navigator.py +16 -6
- machineconfig/scripts/python/fire_jobs.py +8 -222
- machineconfig/scripts/python/ftpx.py +7 -200
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
- machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
- machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +143 -0
- machineconfig/scripts/python/msearch.py +26 -0
- machineconfig/scripts/python/sessions.py +69 -135
- machineconfig/scripts/python/terminal.py +58 -0
- machineconfig/scripts/python/utils.py +115 -38
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -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/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/linters/.ruff.toml +2 -1
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +47 -12
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +25 -33
- machineconfig/settings/shells/nushell/env.nu +21 -8
- machineconfig/settings/shells/nushell/init.nu +138 -0
- machineconfig/settings/shells/pwsh/init.ps1 +111 -17
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
- machineconfig/settings/shells/wt/settings.json +27 -18
- machineconfig/settings/shells/zsh/init.sh +42 -23
- 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/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/wt/__init__.py +0 -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 +94 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +40 -9
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
- machineconfig/setup_mac/__init__.py +1 -4
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +2 -5
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +31 -4
- machineconfig/utils/code.py +163 -51
- machineconfig/utils/files/ascii_art.py +11 -15
- machineconfig/utils/files/headers.py +6 -7
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +53 -102
- machineconfig/utils/installer_utils/installer_cli.py +161 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
- machineconfig/utils/io.py +94 -9
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +38 -21
- machineconfig/utils/options.py +81 -23
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +52 -102
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +26 -53
- machineconfig/utils/scheduling.py +0 -2
- 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 +6 -1
- machineconfig/utils/ssh.py +216 -419
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +158 -0
- machineconfig/utils/ssh_utils/wsl.py +147 -0
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +107 -35
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.51.dist-info/METADATA +140 -0
- machineconfig-8.51.dist-info/RECORD +543 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/installer/custom/hx.py +0 -140
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -256
- 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/mcfgs +0 -38
- 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/helpers_devops/cli_config.py +0 -120
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
- machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- 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/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/mcfg.py +0 -48
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
- machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
- machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- 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/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig/utils/tst.py +0 -20
- machineconfig-6.82.dist-info/METADATA +0 -82
- machineconfig-6.82.dist-info/RECORD +0 -441
- machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/{scripts/python/helpers_cloud → jobs/installer/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/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.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/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
* I have started a watch-exec server in my terminal and its working now.
|
|
4
|
+
* I have set it up to re-run the shell script `.ai/terminal/debug/command_runner.sh` automatically.
|
|
5
|
+
* A re-run is triggered upon any change of any python file in the repo, or, any change in the command_runner.sh script itself.
|
|
6
|
+
* The shell script itself runs the python file we are working on using uv.
|
|
7
|
+
* The script redirects the output from terminal to the file ./.ai* Run takes 50 ms only. So by the time you finish editing any python file or the command runner script, the new output is ready for you to read in that text file.
|
|
8
|
+
* Run takes 50 ms only. So by the time you finish editing any python file or the command runner script, the new output is ready for you to read in that text file.
|
|
9
|
+
|
|
10
|
+
# Why did I set this up?
|
|
11
|
+
* Because this makes it much faster for you to iterate because pulling the terminal and closing it every time is a bit slow.
|
|
12
|
+
* You no longer need the terminal.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# What should you do now?
|
|
16
|
+
Please iterate like this:
|
|
17
|
+
* Please use the terminal_output.txt as your main iteration driver (fix any problems you see there).
|
|
18
|
+
* Change `command_runner.sh` if you need to change which python file to run or how to run it.
|
|
19
|
+
|
|
20
|
+
|
|
@@ -7,7 +7,7 @@ ref: https://github.com/charmbracelet/crush
|
|
|
7
7
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import platform
|
|
10
|
-
from machineconfig.scripts.python.ai.
|
|
10
|
+
from machineconfig.scripts.python.ai.utils.shared import get_generic_instructions_path
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from machineconfig.scripts.python.ai.
|
|
3
|
+
from machineconfig.scripts.python.ai.utils.shared import get_generic_instructions_path
|
|
4
4
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
5
5
|
|
|
6
6
|
def build_configuration(repo_root: Path) -> None:
|
|
@@ -247,7 +247,7 @@ def create_repo_symlinks(repo_root: Path) -> None:
|
|
|
247
247
|
symlink_path.symlink_to(repo_root, target_is_directory=True)
|
|
248
248
|
|
|
249
249
|
|
|
250
|
-
def
|
|
250
|
+
def make_todo_files(
|
|
251
251
|
pattern: Annotated[str, typer.Argument(help="Pattern or keyword to match files by")],
|
|
252
252
|
repo: Annotated[str, typer.Argument(help="Repository path. Can be any directory within a git repository.")] = str(Path.cwd()),
|
|
253
253
|
strategy: Annotated[Literal["name", "keywords"], typer.Option("-s", "--strategy", help="Strategy to filter files: 'name' for filename matching, 'keywords' for content matching")] = "name",
|
|
@@ -344,5 +344,5 @@ def create_symlink_command(num: Annotated[int, typer.Argument(help="Number of sy
|
|
|
344
344
|
console.print(Panel(f"✅ SUCCESS | Created {num} symlinks to {repo_root} in ~/code_copies/", border_style="bold green", expand=False))
|
|
345
345
|
|
|
346
346
|
if __name__ == "__main__":
|
|
347
|
-
typer.run(
|
|
347
|
+
typer.run(make_todo_files)
|
|
348
348
|
# typer.run(create_symlink_command)
|
|
@@ -40,21 +40,8 @@ def adjust_gitignore(repo_root: Path) -> None:
|
|
|
40
40
|
|
|
41
41
|
dot_git_ignore_content = dot_git_ignore_path.read_text(encoding="utf-8")
|
|
42
42
|
entries_to_add: list[str] = []
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"notebooks",
|
|
46
|
-
".ai",
|
|
47
|
-
"GEMINI.md",
|
|
48
|
-
"CLAUDE.md",
|
|
49
|
-
"CRUSH.md",
|
|
50
|
-
".cursor",
|
|
51
|
-
".clinerules",
|
|
52
|
-
".github/instructions",
|
|
53
|
-
".github/chatmodes",
|
|
54
|
-
".github/prompts",
|
|
55
|
-
]
|
|
56
|
-
|
|
57
|
-
for entry in required_entries:
|
|
43
|
+
from machineconfig.utils.source_of_truth import EXCLUDE_DIRS
|
|
44
|
+
for entry in EXCLUDE_DIRS:
|
|
58
45
|
if entry not in dot_git_ignore_content:
|
|
59
46
|
entries_to_add.append(entry)
|
|
60
47
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from pathlib import Path
|
|
3
|
+
from typing import Any
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
def add_lint_and_type_check_task(repo_root: Path) -> None:
|
|
@@ -18,13 +19,20 @@ def add_lint_and_type_check_task(repo_root: Path) -> None:
|
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
if tasks_json_path.exists():
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
json_data = tasks_json_path.read_text(encoding="utf-8")
|
|
23
|
+
if not json_data.strip():
|
|
24
|
+
tasks_config: dict[str, Any] = {"version": "2.0.0", "tasks": []}
|
|
25
|
+
else:
|
|
26
|
+
tasks_config = json.loads(json_data)
|
|
27
|
+
assert isinstance(tasks_config, dict)
|
|
23
28
|
if "tasks" not in tasks_config:
|
|
24
29
|
tasks_config["tasks"] = []
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
|
|
31
|
+
# Remove any existing entries with the same label to prevent duplicates
|
|
32
|
+
tasks_config["tasks"] = [
|
|
33
|
+
t for t in tasks_config["tasks"] if t.get("label") != task_to_add["label"]
|
|
34
|
+
]
|
|
35
|
+
tasks_config["tasks"].append(task_to_add)
|
|
28
36
|
else:
|
|
29
37
|
tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
|
|
30
38
|
|
|
@@ -1,20 +1,67 @@
|
|
|
1
|
+
"""Cloud management commands - lazy loading subcommands."""
|
|
1
2
|
|
|
2
3
|
import typer
|
|
3
|
-
from
|
|
4
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_copy import main as copy_main
|
|
5
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_mount import mount as mount_main
|
|
4
|
+
from typing import Optional, Annotated
|
|
6
5
|
|
|
7
|
-
def get_app():
|
|
8
|
-
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
def sync(
|
|
8
|
+
source: Annotated[str, typer.Argument(help="source")],
|
|
9
|
+
target: Annotated[str, typer.Argument(help="target")],
|
|
10
|
+
transfers: Annotated[int, typer.Option("--transfers", "-t", help="Number of threads in syncing.")] = 10,
|
|
11
|
+
root: Annotated[str, typer.Option("--root", "-R", help="Remote root.")] = "myhome",
|
|
12
|
+
key: Annotated[Optional[str], typer.Option("--key", "-k", help="Key for encryption")] = None,
|
|
13
|
+
pwd: Annotated[Optional[str], typer.Option("--pwd", "-P", help="Password for encryption")] = None,
|
|
14
|
+
encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="Decrypt after receiving.")] = False,
|
|
15
|
+
zip_: Annotated[bool, typer.Option("--zip", "-z", help="unzip after receiving.")] = False,
|
|
16
|
+
bisync: Annotated[bool, typer.Option("--bisync", "-b", help="Bidirectional sync.")] = False,
|
|
17
|
+
delete: Annotated[bool, typer.Option("--delete", "-D", help="Delete files in remote that are not in local.")] = False,
|
|
18
|
+
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
|
|
19
|
+
) -> None:
|
|
20
|
+
"""🔄 Synchronize files/folders between local and cloud storage."""
|
|
21
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_sync import main as sync_main
|
|
22
|
+
sync_main(source=source, target=target, transfers=transfers, root=root, key=key, pwd=pwd, encrypt=encrypt, zip_=zip_, bisync=bisync, delete=delete, verbose=verbose)
|
|
12
23
|
|
|
13
|
-
app.command(name="copy", no_args_is_help=True, short_help="""📤 [c] Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
|
|
14
|
-
app.command(name="c", no_args_is_help=True, hidden=True)(copy_main) # short alias
|
|
15
24
|
|
|
16
|
-
|
|
17
|
-
|
|
25
|
+
def copy(
|
|
26
|
+
source: Annotated[str, typer.Argument(help="📂 file/folder path to be taken from here.")],
|
|
27
|
+
target: Annotated[str, typer.Argument(help="🎯 file/folder path to be be sent to here.")],
|
|
28
|
+
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] = False,
|
|
29
|
+
share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] = False,
|
|
30
|
+
rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] = False,
|
|
31
|
+
root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] = None,
|
|
32
|
+
key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] = None,
|
|
33
|
+
pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] = None,
|
|
34
|
+
encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] = False,
|
|
35
|
+
zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] = False,
|
|
36
|
+
os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] = False,
|
|
37
|
+
config: Annotated[Optional[str], typer.Option("--config", "-c", help="⚙️ path to cloud.json file.")] = None,
|
|
38
|
+
) -> None:
|
|
39
|
+
"""📤 Upload or 📥 Download files/folders to/from cloud storage services."""
|
|
40
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_copy import main as copy_main
|
|
41
|
+
copy_main(source=source, target=target, overwrite=overwrite, share=share, rel2home=rel2home, root=root, key=key, pwd=pwd, encrypt=encrypt, zip_=zip_, os_specific=os_specific, config=config)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def mount(
|
|
45
|
+
cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
|
|
46
|
+
destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
|
|
47
|
+
network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""🔗 Mount cloud storage services as local drives."""
|
|
50
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import mount as mount_main
|
|
51
|
+
mount_main(cloud=cloud, destination=destination, network=network)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_app() -> typer.Typer:
|
|
55
|
+
app = typer.Typer(add_completion=False, no_args_is_help=True, help="☁️ Cloud management commands")
|
|
56
|
+
|
|
57
|
+
app.command(name="sync", no_args_is_help=True, short_help="🔄 [s] Synchronize files/folders between local and cloud storage.")(sync)
|
|
58
|
+
app.command(name="s", no_args_is_help=True, hidden=True)(sync)
|
|
59
|
+
|
|
60
|
+
app.command(name="copy", no_args_is_help=True, short_help="📤 [c] Upload or 📥 Download files/folders to/from cloud storage.")(copy)
|
|
61
|
+
app.command(name="c", no_args_is_help=True, hidden=True)(copy)
|
|
62
|
+
|
|
63
|
+
app.command(name="mount", no_args_is_help=True, short_help="🔗 [m] Mount cloud storage services as local drives.")(mount)
|
|
64
|
+
app.command(name="m", no_args_is_help=True, hidden=True)(mount)
|
|
18
65
|
|
|
19
66
|
return app
|
|
20
67
|
|
|
@@ -1,172 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env -S uv run --no-dev --project
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
croshell
|
|
5
|
-
"""
|
|
3
|
+
"""croshell - Cross-shell command execution."""
|
|
6
4
|
|
|
7
5
|
from typing import Annotated, Optional
|
|
8
|
-
from machineconfig.scripts.python.helpers_croshell.crosh import code, get_read_data_pycode
|
|
9
|
-
from machineconfig.utils.meta import lambda_to_python_script
|
|
10
6
|
import typer
|
|
11
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
from machineconfig.utils.accessories import randstr
|
|
14
|
-
import json
|
|
15
|
-
from machineconfig.utils.options import choose_from_options
|
|
16
|
-
from rich.console import Console
|
|
17
|
-
from rich.panel import Panel
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
console = Console()
|
|
21
7
|
|
|
22
8
|
|
|
23
9
|
def croshell(
|
|
24
|
-
path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] =
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
|
|
11
|
+
project_path: Annotated[Optional[str], typer.Option("--project", "-p", help="specify uv project to use")] = None,
|
|
12
|
+
uv_with: Annotated[Optional[str], typer.Option("--uv-with", "-w", help="specify uv with packages to use")] = None,
|
|
13
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
|
|
27
14
|
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
28
15
|
vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
|
|
29
|
-
streamlit_viewer: Annotated[bool, typer.Option("--streamlit", "-s", help="view in streamlit app")] = False,
|
|
30
16
|
visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
|
|
31
|
-
|
|
17
|
+
python: Annotated[bool, typer.Option("--python", "-P", help="flag to use python over IPython.")] = False,
|
|
18
|
+
profile: Annotated[Optional[str], typer.Option("--profile", "-r", help="ipython profile to use, defaults to default profile.")] = None,
|
|
32
19
|
) -> None:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
interpreter = "python" if python else "ipython"
|
|
37
|
-
ipython_profile: Optional[str] = profile
|
|
38
|
-
file_obj = PathExtended.cwd() # initialization value, could be modified according to args.
|
|
39
|
-
|
|
40
|
-
if path == ".":
|
|
41
|
-
text = "🔍 Searching for Python files..."
|
|
42
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
43
|
-
options = [str(item) for item in PathExtended.cwd().search("*.py", r=True)]
|
|
44
|
-
file_selected = choose_from_options(msg="Choose a python file to run", options=options, fzf=True, multi=False)
|
|
45
|
-
assert isinstance(file_selected, str)
|
|
46
|
-
program = PathExtended(file_selected).read_text(encoding="utf-8")
|
|
47
|
-
text = f"📄 Selected file: {PathExtended(file_selected).name}"
|
|
48
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
49
|
-
|
|
50
|
-
elif path != "" and path is not None:
|
|
51
|
-
if streamlit_viewer:
|
|
52
|
-
# text = "📊 STARTING STREAMLIT VIEWER"
|
|
53
|
-
# console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
54
|
-
# from machineconfig.scripts.python.viewer import run
|
|
55
|
-
# py_file_path = run(data_path=args.read, data=None, get_figure=None)
|
|
56
|
-
# final_program = f"""
|
|
57
|
-
# #!/bin/bash
|
|
58
|
-
# streamlit run {py_file_path}
|
|
59
|
-
# """
|
|
60
|
-
# PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
|
|
61
|
-
print("Streamlit viewer is not yet implemented in this version.")
|
|
62
|
-
return None
|
|
63
|
-
file_obj = PathExtended(str(path).lstrip()).expanduser().absolute()
|
|
64
|
-
program = lambda_to_python_script(lambda: get_read_data_pycode(path=str(file_obj)), in_global=True, import_module=False)
|
|
65
|
-
text = f"📄 Reading data from: {file_obj.name}"
|
|
66
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
67
|
-
else: # if nothing is specified, then run in interactive mode.
|
|
68
|
-
# text = "⌨️ Entering interactive mode"
|
|
69
|
-
# console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
70
|
-
# from machineconfig.scripts.python.croshell import InteractiveShell
|
|
71
|
-
# InteractiveShell().run()
|
|
72
|
-
# return None
|
|
73
|
-
program = ""
|
|
74
|
-
preprogram = """
|
|
75
|
-
#%%
|
|
76
|
-
"""
|
|
77
|
-
def preprogram_func():
|
|
78
|
-
from machineconfig.utils.files.headers import print_header, print_logo
|
|
79
|
-
print_header()
|
|
80
|
-
print_logo("CROCODILE")
|
|
81
|
-
from pathlib import Path
|
|
82
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
83
|
-
_ = Path, PathExtended # avoid unused import warnings
|
|
84
|
-
import inspect, textwrap
|
|
85
|
-
from types import FunctionType
|
|
86
|
-
def get_body_simple_function_no_args(f: FunctionType):
|
|
87
|
-
return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
|
|
88
|
-
preprogram += get_body_simple_function_no_args(preprogram_func)
|
|
89
|
-
|
|
90
|
-
pyfile = PathExtended.tmp().joinpath(f"tmp_scripts/python/croshell/{randstr()}/script.py")
|
|
91
|
-
pyfile.parent.mkdir(parents=True, exist_ok=True)
|
|
92
|
-
|
|
93
|
-
title = "Reading Data"
|
|
94
|
-
def_code = lambda_to_python_script(lambda: code(path=str(pyfile), title=title), in_global=False, import_module=False)
|
|
95
|
-
# print(def_code)
|
|
96
|
-
python_program = preprogram + "\n\n" + def_code + program
|
|
97
|
-
pyfile.write_text(python_program, encoding="utf-8")
|
|
98
|
-
# ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
|
|
99
|
-
ipython_profile = ipython_profile if ipython_profile is not None else "default"
|
|
100
|
-
# ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
|
|
101
|
-
|
|
102
|
-
# prepare notebook target path (avoid relying on locals())
|
|
103
|
-
nb_target = pyfile.with_suffix(".ipynb")
|
|
104
|
-
if jupyter:
|
|
105
|
-
try:
|
|
106
|
-
nb_path = pyfile.with_suffix(".ipynb")
|
|
107
|
-
nb_content = {
|
|
108
|
-
"cells": [
|
|
109
|
-
{
|
|
110
|
-
"cell_type": "code",
|
|
111
|
-
"metadata": {"language": "python"},
|
|
112
|
-
"source": [python_program],
|
|
113
|
-
"outputs": [],
|
|
114
|
-
"execution_count": None,
|
|
115
|
-
}
|
|
116
|
-
],
|
|
117
|
-
"metadata": {},
|
|
118
|
-
"nbformat": 4,
|
|
119
|
-
"nbformat_minor": 5,
|
|
120
|
-
}
|
|
121
|
-
nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
|
|
122
|
-
nb_target = nb_path
|
|
123
|
-
except Exception:
|
|
124
|
-
# if writing fails, fall back to the default nb_target already set
|
|
125
|
-
pass
|
|
126
|
-
if visidata:
|
|
127
|
-
if file_obj.suffix == ".json":
|
|
128
|
-
fire_line = f"uv run --python 3.14 --with visidata vd {str(file_obj)}"
|
|
129
|
-
else:
|
|
130
|
-
fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
|
|
131
|
-
elif marimo:
|
|
132
|
-
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
133
|
-
else: requirements = """--python 3.14 --with "marimo,machineconfig[plot]>=6.57" """
|
|
134
|
-
fire_line = f"""
|
|
135
|
-
cd {str(pyfile.parent)}
|
|
136
|
-
uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
|
|
137
|
-
uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
|
|
138
|
-
"""
|
|
139
|
-
elif jupyter:
|
|
140
|
-
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
|
|
141
|
-
else: requirements = """--with "machineconfig[plot]>=6.57" """
|
|
142
|
-
fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
|
|
143
|
-
elif vscode:
|
|
144
|
-
fire_line = f"""
|
|
145
|
-
cd {str(pyfile.parent)}
|
|
146
|
-
uv init --python 3.14
|
|
147
|
-
uv venv
|
|
148
|
-
uv add "machineconfig[plot]>=6.57"
|
|
149
|
-
# code serve-web
|
|
150
|
-
code --new-window {str(pyfile)}
|
|
151
|
-
"""
|
|
152
|
-
else:
|
|
153
|
-
if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
|
|
154
|
-
else: profile = ""
|
|
155
|
-
if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
156
|
-
else: ve_line = """--python 3.14 --with "machineconfig[plot]>=6.57" """
|
|
157
|
-
# ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
|
|
158
|
-
# --python 3.14
|
|
159
|
-
fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
160
|
-
|
|
161
|
-
import os
|
|
162
|
-
program_path_maybe = os.environ.get("OP_PROGRAM_PATH", None)
|
|
163
|
-
if program_path_maybe is not None:
|
|
164
|
-
program_path_obj = PathExtended(program_path_maybe)
|
|
165
|
-
program_path_obj.parent.mkdir(parents=True, exist_ok=True)
|
|
166
|
-
program_path_obj.write_text(data=fire_line, encoding="utf-8")
|
|
167
|
-
else:
|
|
168
|
-
from machineconfig.utils.code import run_shell_script
|
|
169
|
-
run_shell_script(fire_line, clean_env=False)
|
|
20
|
+
"""Cross-shell command execution."""
|
|
21
|
+
from machineconfig.scripts.python.helpers.helpers_croshell.croshell_impl import croshell as impl
|
|
22
|
+
impl(path=path, project_path=project_path, uv_with=uv_with, marimo=marimo, jupyter=jupyter, vscode=vscode, visidata=visidata, python=python, profile=profile)
|
|
170
23
|
|
|
171
24
|
|
|
172
25
|
def main() -> None:
|
|
@@ -174,9 +27,4 @@ def main() -> None:
|
|
|
174
27
|
|
|
175
28
|
|
|
176
29
|
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()
|
|
182
30
|
main()
|
|
@@ -1,46 +1,83 @@
|
|
|
1
|
-
"""devops with emojis"""
|
|
1
|
+
"""devops with emojis - lazy loading subcommands."""
|
|
2
2
|
|
|
3
3
|
import typer
|
|
4
|
-
from typing import Optional, Annotated
|
|
5
|
-
|
|
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
|
|
4
|
+
from typing import Optional, Annotated, Literal
|
|
11
5
|
|
|
12
6
|
|
|
13
7
|
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
8
|
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", "-
|
|
9
|
+
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of programs to install.")] = False,
|
|
16
10
|
) -> None:
|
|
17
|
-
"""📦 Install
|
|
18
|
-
import machineconfig.utils.installer_utils.
|
|
19
|
-
installer_entry_point.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
11
|
+
"""📦 Install packages"""
|
|
12
|
+
import machineconfig.utils.installer_utils.installer_cli as installer_entry_point
|
|
13
|
+
installer_entry_point.main_installer_cli(which=which, group=group, interactive=interactive)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def repos(ctx: typer.Context) -> None:
|
|
17
|
+
"""📁 [r] Manage development repositories"""
|
|
18
|
+
import machineconfig.scripts.python.helpers.helpers_devops.cli_repos as cli_repos
|
|
19
|
+
cli_repos.get_app()(ctx.args, standalone_mode=False)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def config(ctx: typer.Context) -> None:
|
|
23
|
+
"""⚙️ [c] Configuration management"""
|
|
24
|
+
import machineconfig.scripts.python.helpers.helpers_devops.cli_config as cli_config
|
|
25
|
+
cli_config.get_app()(ctx.args, standalone_mode=False)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def data(ctx: typer.Context) -> None:
|
|
29
|
+
"""💾 [d] Data management"""
|
|
30
|
+
import machineconfig.scripts.python.helpers.helpers_devops.cli_data as cli_data
|
|
31
|
+
cli_data.get_app()(ctx.args, standalone_mode=False)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def self_cmd(ctx: typer.Context) -> None:
|
|
35
|
+
"""🔧 [s] Self management"""
|
|
36
|
+
import machineconfig.scripts.python.helpers.helpers_devops.cli_self as cli_self
|
|
37
|
+
cli_self.get_app()(ctx.args, standalone_mode=False)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def network(ctx: typer.Context) -> None:
|
|
41
|
+
"""🌐 [n] Network management"""
|
|
42
|
+
import machineconfig.scripts.python.helpers.helpers_devops.cli_nw as cli_network
|
|
43
|
+
cli_network.get_app()(ctx.args, standalone_mode=False)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def execute(
|
|
47
|
+
ctx: typer.Context,
|
|
48
|
+
name: Annotated[str, typer.Argument(help="Name of script to run, e.g., 'a' for a.py, or command to execute")] = "",
|
|
49
|
+
where: Annotated[Literal["all", "a", "private", "p", "public", "b", "library", "l", "dynamic", "d", "custom", "c"], typer.Option("--where", "-w", help="Where to look for the script")] = "all",
|
|
50
|
+
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of scripts to run")] = False,
|
|
51
|
+
command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
|
|
52
|
+
list_scripts: Annotated[bool, typer.Option(..., "--list", "-l", help="List available scripts in all locations")] = False,
|
|
53
|
+
) -> None:
|
|
54
|
+
"""🚀 Execute python/shell scripts from pre-defined directories or as command."""
|
|
55
|
+
import machineconfig.scripts.python.helpers.helpers_devops.run_script as run_py_script_module
|
|
56
|
+
run_py_script_module.run_py_script(ctx=ctx, name=name, where=where, interactive=interactive, command=command, list_scripts=list_scripts)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def get_app() -> typer.Typer:
|
|
60
|
+
cli_app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
61
|
+
ctx_settings: dict[str, object] = {"allow_extra_args": True, "allow_interspersed_args": True, "ignore_unknown_options": True, "help_option_names": []}
|
|
62
|
+
|
|
63
|
+
cli_app.command("install", no_args_is_help=True, help=install.__doc__, short_help="🛠️ [i] Install essential packages")(install)
|
|
64
|
+
cli_app.command("i", no_args_is_help=True, help=install.__doc__, hidden=True)(install)
|
|
65
|
+
|
|
66
|
+
cli_app.command("repos", help="📁 [r] Manage development repositories", context_settings=ctx_settings)(repos)
|
|
67
|
+
cli_app.command("r", hidden=True, context_settings=ctx_settings)(repos)
|
|
68
|
+
cli_app.command("config", help="🔩 [c] Configuration management", context_settings=ctx_settings)(config)
|
|
69
|
+
cli_app.command("c", hidden=True, context_settings=ctx_settings)(config)
|
|
70
|
+
cli_app.command("data", help="💾 [d] Data management", context_settings=ctx_settings)(data)
|
|
71
|
+
cli_app.command("d", hidden=True, context_settings=ctx_settings)(data)
|
|
72
|
+
cli_app.command("self", help="🔧 [s] Self management", context_settings=ctx_settings)(self_cmd)
|
|
73
|
+
cli_app.command("s", hidden=True, context_settings=ctx_settings)(self_cmd)
|
|
74
|
+
cli_app.command("network", help="🌐 [n] Network management", context_settings=ctx_settings)(network)
|
|
75
|
+
cli_app.command("n", hidden=True, context_settings=ctx_settings)(network)
|
|
76
|
+
|
|
77
|
+
cli_app.command("execute", no_args_is_help=True, short_help="🚀 [e] Execute python/shell scripts from pre-defined directories or as command")(execute)
|
|
78
|
+
cli_app.command("e", no_args_is_help=True, hidden=True)(execute)
|
|
79
|
+
|
|
80
|
+
return cli_app
|
|
44
81
|
|
|
45
82
|
|
|
46
83
|
def main():
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
""
|
|
1
|
+
#!/usr/bin/env -S uv run --script
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.13"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "machineconfig>=8.51",
|
|
6
|
+
# "textual",
|
|
7
|
+
# ]
|
|
8
|
+
# ///
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
"""Textual TUI for navigating `machineconfig` command structure."""
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def main() -> None:
|
|
14
|
+
from machineconfig.scripts.python.helpers.helpers_navigator.main_app import CommandNavigatorApp
|
|
15
|
+
|
|
16
|
+
CommandNavigatorApp().run()
|
|
6
17
|
|
|
7
18
|
|
|
8
19
|
if __name__ == "__main__":
|
|
9
|
-
|
|
10
|
-
app.run()
|
|
20
|
+
main()
|