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
|
@@ -1,35 +1,31 @@
|
|
|
1
1
|
"""Cloud mount script"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.options import choose_from_options
|
|
4
|
-
from machineconfig.utils.io import read_ini
|
|
5
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
|
|
7
|
-
import platform
|
|
8
|
-
from typing import Optional, Annotated
|
|
9
3
|
import typer
|
|
10
|
-
from
|
|
11
|
-
from rich.panel import Panel
|
|
12
|
-
|
|
13
|
-
console = Console()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
DEFAULT_MOUNT = "~/data/rclone"
|
|
4
|
+
from typing import Optional, Annotated
|
|
17
5
|
|
|
18
6
|
|
|
19
7
|
def get_rclone_config():
|
|
8
|
+
from machineconfig.utils.io import read_ini
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import platform
|
|
20
11
|
if platform.system() == "Windows":
|
|
21
|
-
config = read_ini(
|
|
12
|
+
config = read_ini(Path.home().joinpath("AppData/Roaming/rclone/rclone.conf"))
|
|
22
13
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
23
|
-
config = read_ini(
|
|
14
|
+
config = read_ini(Path.home().joinpath(".config/rclone/rclone.conf"))
|
|
24
15
|
else:
|
|
25
16
|
raise ValueError("unsupported platform")
|
|
26
17
|
return config
|
|
27
18
|
|
|
28
19
|
|
|
29
20
|
def get_mprocs_mount_txt(cloud: str, rclone_cmd: str, cloud_brand: str): # cloud_brand = config[cloud]["type"]
|
|
21
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
22
|
+
from machineconfig.utils.accessories import randstr
|
|
23
|
+
import platform
|
|
24
|
+
DEFAULT_MOUNT = "~/data/rclone"
|
|
25
|
+
|
|
30
26
|
header = f"{' ' + cloud + ' | ' + cloud_brand + ' '}".center(50, "=")
|
|
31
27
|
if platform.system() == "Windows":
|
|
32
|
-
sub_text_path = PathExtended.
|
|
28
|
+
sub_text_path = PathExtended("~/tmp_results/tmp_files").expanduser().joinpath(f"{randstr()}.ps1")
|
|
33
29
|
sub_text_path.parent.mkdir(parents=True, exist_ok=True)
|
|
34
30
|
sub_text_path.write_text(
|
|
35
31
|
f"""
|
|
@@ -57,6 +53,13 @@ def mount(
|
|
|
57
53
|
destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
|
|
58
54
|
network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
|
|
59
55
|
) -> None:
|
|
56
|
+
from machineconfig.utils.options import choose_from_options
|
|
57
|
+
from pathlib import Path
|
|
58
|
+
import platform
|
|
59
|
+
from rich.console import Console
|
|
60
|
+
from rich.panel import Panel
|
|
61
|
+
console = Console()
|
|
62
|
+
DEFAULT_MOUNT = "~/data/rclone"
|
|
60
63
|
|
|
61
64
|
# draw header box dynamically
|
|
62
65
|
title = "☁️ Cloud Mount Utility"
|
|
@@ -68,14 +71,15 @@ def mount(
|
|
|
68
71
|
if type(res) is str:
|
|
69
72
|
cloud = res
|
|
70
73
|
else:
|
|
71
|
-
|
|
74
|
+
print("❌ Error: No cloud selected")
|
|
75
|
+
raise typer.Exit(code=1)
|
|
72
76
|
print(f"🌩️ Selected cloud: {cloud}")
|
|
73
77
|
|
|
74
78
|
if network is None:
|
|
75
79
|
if destination is None:
|
|
76
|
-
mount_loc =
|
|
80
|
+
mount_loc = Path(DEFAULT_MOUNT).expanduser().joinpath(cloud)
|
|
77
81
|
else:
|
|
78
|
-
mount_loc =
|
|
82
|
+
mount_loc = Path(destination)
|
|
79
83
|
|
|
80
84
|
mount_info = f"📂 Mount location: {mount_loc}"
|
|
81
85
|
console.print(Panel(mount_info, border_style="blue"))
|
|
@@ -95,13 +99,15 @@ def mount(
|
|
|
95
99
|
console.print(Panel(f"{warning_line}\n{err_line}", title="Warning", border_style="yellow"))
|
|
96
100
|
pass
|
|
97
101
|
else:
|
|
98
|
-
|
|
102
|
+
print("❌ Error: Unsupported platform")
|
|
103
|
+
raise typer.Exit(code=1)
|
|
99
104
|
|
|
100
105
|
elif network and platform.system() == "Windows":
|
|
101
106
|
mount_loc = "X: --network-mode"
|
|
102
107
|
print(f"🔌 Setting up network mount at {mount_loc}")
|
|
103
108
|
else:
|
|
104
|
-
|
|
109
|
+
print("❌ Error: Network mount only supported on Windows")
|
|
110
|
+
raise typer.Exit(code=1)
|
|
105
111
|
|
|
106
112
|
mount_cmd = f"rclone mount {cloud}: {mount_loc} --vfs-cache-mode full --file-perms=0777"
|
|
107
113
|
console.print(Panel(f"🚀 Preparing mount command:\n{mount_cmd}", border_style="blue"))
|
|
@@ -146,7 +152,8 @@ zellij run --in-place --cwd $HOME/data/rclone/{cloud} -- bash
|
|
|
146
152
|
zellij action move-focus up
|
|
147
153
|
"""
|
|
148
154
|
else:
|
|
149
|
-
|
|
155
|
+
print("❌ Error: Unsupported platform")
|
|
156
|
+
raise typer.Exit(code=1)
|
|
150
157
|
# print(f"running command: \n{txt}")
|
|
151
158
|
# PROGRAM_PATH.write_text(txt, encoding="utf-8")
|
|
152
159
|
import subprocess
|
|
@@ -2,16 +2,9 @@
|
|
|
2
2
|
TODO: use typer or typed-argument-parser to parse args
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
6
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
7
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
8
5
|
|
|
9
6
|
from typing import Annotated, Optional
|
|
10
7
|
import typer
|
|
11
|
-
from rich.console import Console
|
|
12
|
-
from rich.panel import Panel
|
|
13
|
-
|
|
14
|
-
console = Console()
|
|
15
8
|
|
|
16
9
|
|
|
17
10
|
def main(
|
|
@@ -27,6 +20,14 @@ def main(
|
|
|
27
20
|
delete: Annotated[bool, typer.Option("--delete", "-D", help="Delete files in remote that are not in local.")] = False,
|
|
28
21
|
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
|
|
29
22
|
) -> None:
|
|
23
|
+
|
|
24
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
25
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
|
|
26
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
27
|
+
from rich.console import Console
|
|
28
|
+
from rich.panel import Panel
|
|
29
|
+
console = Console()
|
|
30
|
+
|
|
30
31
|
title = "☁️ Cloud Sync Utility"
|
|
31
32
|
console.print(Panel(title, title_align="left", border_style="blue"))
|
|
32
33
|
|
|
@@ -76,5 +77,5 @@ def main(
|
|
|
76
77
|
# import subprocess
|
|
77
78
|
# subprocess.run(txt, shell=True, check=True)
|
|
78
79
|
from machineconfig.utils.code import run_shell_script
|
|
79
|
-
run_shell_script(txt)
|
|
80
|
+
run_shell_script(txt, display_script=True, clean_env=False)
|
|
80
81
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
|
|
1
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
|
|
2
2
|
from machineconfig.utils.io import read_ini
|
|
3
3
|
from machineconfig.utils.source_of_truth import DEFAULTS_PATH
|
|
4
4
|
from machineconfig.utils.accessories import pprint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
def
|
|
3
|
+
def get_read_python_file_pycode(path: str, title: str):
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
print("Reading code from path:", path)
|
|
6
6
|
pycode = Path(path).read_text(encoding="utf-8")
|
|
@@ -20,9 +20,9 @@ def get_read_data_pycode(path: str):
|
|
|
20
20
|
from rich.panel import Panel
|
|
21
21
|
from rich.text import Text
|
|
22
22
|
from rich.console import Console
|
|
23
|
-
from
|
|
23
|
+
from pathlib import Path
|
|
24
24
|
console = Console()
|
|
25
|
-
p =
|
|
25
|
+
p = Path(path).absolute()
|
|
26
26
|
try:
|
|
27
27
|
from machineconfig.utils.files.read import Read
|
|
28
28
|
from machineconfig.utils.accessories import pprint
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"""Pure Python implementation for croshell command - no typer dependencies."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def croshell(
|
|
8
|
+
path: Optional[str],
|
|
9
|
+
project_path: Optional[str],
|
|
10
|
+
uv_with: Optional[str],
|
|
11
|
+
marimo: bool,
|
|
12
|
+
jupyter: bool,
|
|
13
|
+
vscode: bool,
|
|
14
|
+
visidata: bool,
|
|
15
|
+
python: bool,
|
|
16
|
+
profile: Optional[str],
|
|
17
|
+
) -> None:
|
|
18
|
+
"""Cross-shell command execution."""
|
|
19
|
+
interactivity = "-i"
|
|
20
|
+
interpreter = "python" if python else "ipython"
|
|
21
|
+
if uv_with is not None:
|
|
22
|
+
match interpreter:
|
|
23
|
+
case "ipython":
|
|
24
|
+
user_uv_with_line = f"--with {uv_with},ipython"
|
|
25
|
+
case "python":
|
|
26
|
+
user_uv_with_line = f"--with {uv_with}"
|
|
27
|
+
else:
|
|
28
|
+
match interpreter:
|
|
29
|
+
case "ipython":
|
|
30
|
+
user_uv_with_line = "--with ipython"
|
|
31
|
+
case "python":
|
|
32
|
+
user_uv_with_line = ""
|
|
33
|
+
|
|
34
|
+
if project_path is not None:
|
|
35
|
+
uv_project_line = f'--project {project_path}'
|
|
36
|
+
uv_python_line = ""
|
|
37
|
+
else:
|
|
38
|
+
uv_project_line = ""
|
|
39
|
+
uv_python_line = "--python 3.14"
|
|
40
|
+
|
|
41
|
+
from machineconfig.scripts.python.helpers.helpers_croshell.crosh import get_read_python_file_pycode, get_read_data_pycode
|
|
42
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
43
|
+
from machineconfig.utils.accessories import randstr
|
|
44
|
+
from machineconfig.utils.ve import get_ve_path_and_ipython_profile
|
|
45
|
+
import json
|
|
46
|
+
from rich.console import Console
|
|
47
|
+
from rich.panel import Panel
|
|
48
|
+
console = Console()
|
|
49
|
+
|
|
50
|
+
ipython_profile: Optional[str] = profile
|
|
51
|
+
file_obj = Path.cwd()
|
|
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(
|
|
67
|
+
lambda: get_read_data_pycode(path=str(choice_file)),
|
|
68
|
+
in_global=True, import_module=False
|
|
69
|
+
)
|
|
70
|
+
text = f"📄 Reading data from: {file_obj.name}"
|
|
71
|
+
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
72
|
+
else:
|
|
73
|
+
program = ""
|
|
74
|
+
|
|
75
|
+
if Path.home().joinpath("code/machineconfig").exists() and uv_project_line == "":
|
|
76
|
+
uv_project_line = f'--project "{str(Path.home().joinpath("code/machineconfig"))}"'
|
|
77
|
+
|
|
78
|
+
preprogram = _build_preprogram()
|
|
79
|
+
|
|
80
|
+
pyfile = Path.home().joinpath(f"tmp_results/tmp_scripts/python/croshell/{randstr()}/script.py")
|
|
81
|
+
pyfile.parent.mkdir(parents=True, exist_ok=True)
|
|
82
|
+
title = "Reading Data"
|
|
83
|
+
def_code = lambda_to_python_script(
|
|
84
|
+
lambda: get_read_python_file_pycode(path=str(pyfile), title=title),
|
|
85
|
+
in_global=False, import_module=False
|
|
86
|
+
)
|
|
87
|
+
python_program = preprogram + "\n\n" + def_code + program
|
|
88
|
+
pyfile.write_text(python_program, encoding="utf-8")
|
|
89
|
+
ipython_profile = ipython_profile if ipython_profile is not None else "default"
|
|
90
|
+
|
|
91
|
+
nb_target = pyfile.with_suffix(".ipynb")
|
|
92
|
+
if jupyter:
|
|
93
|
+
try:
|
|
94
|
+
nb_path = pyfile.with_suffix(".ipynb")
|
|
95
|
+
nb_content = {
|
|
96
|
+
"cells": [
|
|
97
|
+
{
|
|
98
|
+
"cell_type": "code",
|
|
99
|
+
"metadata": {"language": "python"},
|
|
100
|
+
"source": [python_program],
|
|
101
|
+
"outputs": [],
|
|
102
|
+
"execution_count": None,
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"metadata": {},
|
|
106
|
+
"nbformat": 4,
|
|
107
|
+
"nbformat_minor": 5,
|
|
108
|
+
}
|
|
109
|
+
nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
|
|
110
|
+
nb_target = nb_path
|
|
111
|
+
except Exception:
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
fire_line = _build_fire_line(
|
|
115
|
+
file_obj=file_obj,
|
|
116
|
+
pyfile=pyfile,
|
|
117
|
+
nb_target=nb_target,
|
|
118
|
+
visidata=visidata,
|
|
119
|
+
marimo=marimo,
|
|
120
|
+
jupyter=jupyter,
|
|
121
|
+
vscode=vscode,
|
|
122
|
+
interpreter=interpreter,
|
|
123
|
+
interactivity=interactivity,
|
|
124
|
+
ipython_profile=ipython_profile,
|
|
125
|
+
uv_python_line=uv_python_line,
|
|
126
|
+
uv_project_line=uv_project_line,
|
|
127
|
+
user_uv_with_line=user_uv_with_line,
|
|
128
|
+
uv_with=uv_with,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
132
|
+
exit_then_run_shell_script(fire_line, strict=False)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _build_preprogram() -> str:
|
|
136
|
+
"""Build the preprogram code for croshell."""
|
|
137
|
+
import inspect
|
|
138
|
+
import textwrap
|
|
139
|
+
from types import FunctionType
|
|
140
|
+
|
|
141
|
+
def get_body_simple_function_no_args(f: FunctionType) -> str:
|
|
142
|
+
return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
|
|
143
|
+
|
|
144
|
+
preprogram = """
|
|
145
|
+
#%%
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
def preprogram_func() -> None:
|
|
149
|
+
try:
|
|
150
|
+
from machineconfig.utils.files.headers import print_header, print_logo
|
|
151
|
+
print_header()
|
|
152
|
+
print_logo("Machineconfig")
|
|
153
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
154
|
+
_ = PathExtended
|
|
155
|
+
except ImportError:
|
|
156
|
+
print("machineconfig is not installed in the current environment.")
|
|
157
|
+
pass
|
|
158
|
+
from pathlib import Path
|
|
159
|
+
_ = Path
|
|
160
|
+
|
|
161
|
+
preprogram += get_body_simple_function_no_args(preprogram_func)
|
|
162
|
+
return preprogram
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def _build_fire_line(
|
|
166
|
+
file_obj: Path,
|
|
167
|
+
pyfile: Path,
|
|
168
|
+
nb_target: Path,
|
|
169
|
+
visidata: bool,
|
|
170
|
+
marimo: bool,
|
|
171
|
+
jupyter: bool,
|
|
172
|
+
vscode: bool,
|
|
173
|
+
interpreter: str,
|
|
174
|
+
interactivity: str,
|
|
175
|
+
ipython_profile: str,
|
|
176
|
+
uv_python_line: str,
|
|
177
|
+
uv_project_line: str,
|
|
178
|
+
user_uv_with_line: str,
|
|
179
|
+
uv_with: Optional[str],
|
|
180
|
+
) -> str:
|
|
181
|
+
"""Build the fire line command for croshell."""
|
|
182
|
+
if visidata:
|
|
183
|
+
if file_obj.suffix == ".json":
|
|
184
|
+
fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata vd {str(file_obj)}"
|
|
185
|
+
else:
|
|
186
|
+
fire_line = f"uv run {uv_python_line} {user_uv_with_line} {uv_project_line} --with visidata,pyarrow vd {str(file_obj)}"
|
|
187
|
+
elif marimo:
|
|
188
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
189
|
+
requirements = f"""{user_uv_with_line} {uv_project_line} --with marimo,sqlglot """
|
|
190
|
+
else:
|
|
191
|
+
requirements = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "marimo,sqlglot,cowsay,machineconfig[plot]>=8.51" """
|
|
192
|
+
fire_line = f"""
|
|
193
|
+
cd {str(pyfile.parent)}
|
|
194
|
+
uv run {uv_python_line} --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
|
|
195
|
+
uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
|
|
196
|
+
"""
|
|
197
|
+
elif jupyter:
|
|
198
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
199
|
+
requirements = f"""{user_uv_with_line} {uv_project_line} --with jupyterlab """
|
|
200
|
+
else:
|
|
201
|
+
requirements = f"""{user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.51" """
|
|
202
|
+
fire_line = f"uv run {requirements} {uv_project_line} jupyter-lab {str(nb_target)}"
|
|
203
|
+
elif vscode:
|
|
204
|
+
user_uv_add = f"uv add {uv_with}" if uv_with is not None else ""
|
|
205
|
+
fire_line = f"""
|
|
206
|
+
cd {str(pyfile.parent)}
|
|
207
|
+
uv init {uv_python_line}
|
|
208
|
+
uv venv
|
|
209
|
+
uv add "cowsay,machineconfig[plot]>=8.51"
|
|
210
|
+
uv add {user_uv_add}
|
|
211
|
+
# code serve-web
|
|
212
|
+
code --new-window {str(pyfile)}
|
|
213
|
+
"""
|
|
214
|
+
else:
|
|
215
|
+
if interpreter == "ipython":
|
|
216
|
+
profile = f" --profile {ipython_profile} --no-banner"
|
|
217
|
+
else:
|
|
218
|
+
profile = ""
|
|
219
|
+
if Path.home().joinpath("code/machineconfig").exists():
|
|
220
|
+
ve_line = f"""{user_uv_with_line} {uv_project_line} """
|
|
221
|
+
else:
|
|
222
|
+
ve_line = f"""{uv_python_line} {user_uv_with_line} {uv_project_line} --with "cowsay,machineconfig[plot]>=8.51" """
|
|
223
|
+
fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
224
|
+
|
|
225
|
+
return fire_line
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
|
|
27
27
|
# print(f"\n✅ Running tasks in {root}\n")
|
|
28
28
|
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
29
|
+
# if args.report:
|
|
30
|
+
# print("📊 Generating report...")
|
|
31
|
+
# reports: list[Report] = [Report.from_path(read_task_from_dir(x).report_path) for x in PathExtended(root).glob("*")]
|
|
32
32
|
|
|
33
|
-
#
|
|
33
|
+
# Format as markdown table
|
|
34
34
|
# report_data = [r.__dict__ for r in reports]
|
|
35
35
|
# if report_data:
|
|
36
36
|
# # Get keys from first report
|
|
@@ -83,32 +83,32 @@ def main(
|
|
|
83
83
|
|
|
84
84
|
md_file = report_dir.joinpath("slides.md")
|
|
85
85
|
if not md_file.exists():
|
|
86
|
-
res = report_dir.
|
|
86
|
+
res = list(report_dir.glob("*.md"))
|
|
87
87
|
if len(res) == 1:
|
|
88
88
|
md_file = res[0]
|
|
89
89
|
else:
|
|
90
|
-
|
|
90
|
+
print(f"❌ Error: slides.md not found in {report_dir}")
|
|
91
|
+
raise typer.Exit(code=1)
|
|
91
92
|
|
|
92
93
|
print("📂 Copying files to Slidev repository...")
|
|
93
|
-
for item in report_dir.
|
|
94
|
-
item.copy(folder=SLIDEV_REPO, overwrite=True)
|
|
94
|
+
for item in report_dir.glob("*"):
|
|
95
|
+
PathExtended(item).copy(folder=SLIDEV_REPO, overwrite=True)
|
|
95
96
|
if md_file.name != "slides.md":
|
|
96
97
|
SLIDEV_REPO.joinpath(md_file.name).with_name(name="slides.md", inplace=True, overwrite=True)
|
|
97
98
|
|
|
98
|
-
import
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
local_ip_v4 = socket.gethostbyname(socket.gethostname())
|
|
99
|
+
import machineconfig.scripts.python.helpers.helpers_network.address as helper
|
|
100
|
+
res = helper.select_lan_ipv4(prefer_vpn=False)
|
|
101
|
+
if res is None:
|
|
102
|
+
print("❌ Error: Could not determine local LAN IPv4 address for presentation.")
|
|
103
|
+
raise typer.Exit(code=1)
|
|
104
|
+
local_ip_v4 = res
|
|
105
105
|
|
|
106
106
|
print("🌐 Presentation will be served at:")
|
|
107
107
|
print(f" - http://{platform.node()}:{port}")
|
|
108
108
|
print(f" - http://localhost:{port}")
|
|
109
109
|
print(f" - http://{local_ip_v4}:{port}\n")
|
|
110
110
|
|
|
111
|
-
program = "
|
|
111
|
+
program = "bun run dev slides.md -- --remote"
|
|
112
112
|
# PROGRAM_PATH.write_text(program, encoding="utf-8")
|
|
113
113
|
import subprocess
|
|
114
114
|
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""Backup configuration types, parsing, and reading utilities."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import TypedDict
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.panel import Panel
|
|
8
|
+
import tomllib
|
|
9
|
+
|
|
10
|
+
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
11
|
+
from machineconfig.profile.create_links_export import REPO_LOOSE
|
|
12
|
+
|
|
13
|
+
LIBRARY_BACKUP_PATH = LIBRARY_ROOT.joinpath("profile/mapper_data.toml")
|
|
14
|
+
USER_BACKUP_PATH = Path.home().joinpath("dotfiles/machineconfig/mapper_data.toml")
|
|
15
|
+
DEFAULT_BACKUP_HEADER = "# User-defined backup configuration\n# Created by `devops data register`\n"
|
|
16
|
+
VALID_OS = {"any", "windows", "linux", "darwin"}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BackupItem(TypedDict):
|
|
20
|
+
path_local: str
|
|
21
|
+
path_cloud: str | None
|
|
22
|
+
zip: bool
|
|
23
|
+
encrypt: bool
|
|
24
|
+
rel2home: bool
|
|
25
|
+
os: set[str]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
BackupGroup = dict[str, BackupItem]
|
|
29
|
+
BackupConfig = dict[str, BackupGroup]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def normalize_os_name(value: str) -> str:
|
|
33
|
+
return value.strip().lower()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _parse_os_field(os_field: object, item_name: str) -> set[str]:
|
|
37
|
+
if os_field is None:
|
|
38
|
+
raise ValueError(f"Backup entry '{item_name}' must define a non-empty 'os'.")
|
|
39
|
+
if isinstance(os_field, list):
|
|
40
|
+
raw_values = [str(item) for item in os_field]
|
|
41
|
+
elif isinstance(os_field, str):
|
|
42
|
+
raw_values = os_field.split(",")
|
|
43
|
+
else:
|
|
44
|
+
raise ValueError(f"Backup entry '{item_name}' has an invalid 'os' value: {os_field!r}.")
|
|
45
|
+
values: set[str] = set()
|
|
46
|
+
for raw in raw_values:
|
|
47
|
+
token = normalize_os_name(raw)
|
|
48
|
+
if not token:
|
|
49
|
+
continue
|
|
50
|
+
if token in {"any", "all", "*"}:
|
|
51
|
+
return {"any"}
|
|
52
|
+
if token not in VALID_OS:
|
|
53
|
+
raise ValueError(f"Backup entry '{item_name}' has an invalid 'os' value: {os_field!r}.")
|
|
54
|
+
values.add(token)
|
|
55
|
+
if not values:
|
|
56
|
+
raise ValueError(f"Backup entry '{item_name}' must define a non-empty 'os'.")
|
|
57
|
+
return values
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def os_applies(os_values: set[str], system_name: str) -> bool:
|
|
61
|
+
return "any" in os_values or system_name in os_values
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _parse_bool(value: object, field: str, item_name: str) -> bool:
|
|
65
|
+
if isinstance(value, bool):
|
|
66
|
+
return value
|
|
67
|
+
raise ValueError(f"Backup entry '{item_name}' has an invalid '{field}' value.")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _require_mapping(value: object, item_name: str) -> Mapping[str, object]:
|
|
71
|
+
if not isinstance(value, Mapping):
|
|
72
|
+
raise ValueError(f"Backup entry '{item_name}' must be a table.")
|
|
73
|
+
return value
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _require_str_field(raw: Mapping[str, object], field: str, item_name: str) -> str:
|
|
77
|
+
value = raw.get(field)
|
|
78
|
+
if not isinstance(value, str) or not value.strip():
|
|
79
|
+
raise ValueError(f"Backup entry '{item_name}' must define a non-empty '{field}'.")
|
|
80
|
+
return value.strip()
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _optional_str_field(raw: Mapping[str, object], field: str, item_name: str) -> str | None:
|
|
84
|
+
if field not in raw:
|
|
85
|
+
return None
|
|
86
|
+
value = raw.get(field)
|
|
87
|
+
if not isinstance(value, str):
|
|
88
|
+
raise ValueError(f"Backup entry '{item_name}' has a non-string '{field}'.")
|
|
89
|
+
token = value.strip()
|
|
90
|
+
if not token:
|
|
91
|
+
raise ValueError(f"Backup entry '{item_name}' has an empty '{field}'.")
|
|
92
|
+
return token
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _require_bool_field(raw: Mapping[str, object], field: str, item_name: str) -> bool:
|
|
96
|
+
if field not in raw:
|
|
97
|
+
raise ValueError(f"Backup entry '{item_name}' must define '{field}'.")
|
|
98
|
+
return _parse_bool(raw[field], field=field, item_name=item_name)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _parse_backup_config(raw: Mapping[str, object]) -> BackupConfig:
|
|
102
|
+
config: BackupConfig = {}
|
|
103
|
+
for group_name, group_value in raw.items():
|
|
104
|
+
group = _require_mapping(group_value, group_name)
|
|
105
|
+
group_items: dict[str, BackupItem] = {}
|
|
106
|
+
for item_name, value in group.items():
|
|
107
|
+
item_key = f"{group_name}.{item_name}"
|
|
108
|
+
item = _require_mapping(value, item_key)
|
|
109
|
+
if "path" in item:
|
|
110
|
+
raise ValueError(f"Backup entry '{item_key}' uses 'path'; use 'path_local' instead.")
|
|
111
|
+
if "path_remote" in item:
|
|
112
|
+
raise ValueError(f"Backup entry '{item_key}' uses 'path_remote'; use 'path_cloud' instead.")
|
|
113
|
+
if "os_specific" in item:
|
|
114
|
+
raise ValueError(f"Backup entry '{item_key}' uses 'os_specific'; use 'os' only.")
|
|
115
|
+
group_items[item_name] = {
|
|
116
|
+
"path_local": _require_str_field(item, "path_local", item_key),
|
|
117
|
+
"path_cloud": _optional_str_field(item, "path_cloud", item_key),
|
|
118
|
+
"zip": _require_bool_field(item, "zip", item_key),
|
|
119
|
+
"encrypt": _require_bool_field(item, "encrypt", item_key),
|
|
120
|
+
"rel2home": _require_bool_field(item, "rel2home", item_key),
|
|
121
|
+
"os": _parse_os_field(item.get("os"), item_key),
|
|
122
|
+
}
|
|
123
|
+
if group_items:
|
|
124
|
+
config[group_name] = group_items
|
|
125
|
+
return config
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def read_backup_config(repo: REPO_LOOSE) -> BackupConfig:
|
|
129
|
+
match repo:
|
|
130
|
+
case "library" | "l":
|
|
131
|
+
path = LIBRARY_BACKUP_PATH
|
|
132
|
+
raw_config: dict[str, object] = tomllib.loads(path.read_text(encoding="utf-8"))
|
|
133
|
+
bu_file = _parse_backup_config(raw_config)
|
|
134
|
+
case "user" | "u":
|
|
135
|
+
path = USER_BACKUP_PATH
|
|
136
|
+
raw_config = tomllib.loads(path.read_text(encoding="utf-8"))
|
|
137
|
+
bu_file = _parse_backup_config(raw_config)
|
|
138
|
+
case "all" | "a":
|
|
139
|
+
console = Console()
|
|
140
|
+
console.print(Panel(f"🧰 LOADING LIBRARY BACKUP CONFIGURATION\n📄 File: {LIBRARY_BACKUP_PATH}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
|
|
141
|
+
raw_library: dict[str, object] = tomllib.loads(LIBRARY_BACKUP_PATH.read_text(encoding="utf-8"))
|
|
142
|
+
bu_library = _parse_backup_config(raw_library)
|
|
143
|
+
console.print(Panel(f"🧰 LOADING USER BACKUP CONFIGURATION\n📄 File: {USER_BACKUP_PATH}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
|
|
144
|
+
raw_user: dict[str, object] = tomllib.loads(USER_BACKUP_PATH.read_text(encoding="utf-8"))
|
|
145
|
+
bu_user = _parse_backup_config(raw_user)
|
|
146
|
+
bu_file = {**bu_library, **bu_user}
|
|
147
|
+
case _:
|
|
148
|
+
raise ValueError(f"Invalid which_backup value: {repo!r}.")
|
|
149
|
+
return bu_file
|