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,73 @@
|
|
|
1
1
|
|
|
2
2
|
from typing import Literal
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import shutil
|
|
3
5
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, CONFIG_ROOT
|
|
4
6
|
|
|
5
7
|
|
|
6
|
-
def
|
|
7
|
-
|
|
8
|
+
def _copy_path(source: Path, target: Path, overwrite: bool) -> None:
|
|
9
|
+
source = source.expanduser().resolve()
|
|
10
|
+
target = target.expanduser().resolve()
|
|
11
|
+
if not source.exists():
|
|
12
|
+
raise FileNotFoundError(f"Source path does not exist: {source}")
|
|
13
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
14
|
+
if target.exists() and not overwrite:
|
|
15
|
+
raise FileExistsError(f"Target already exists and overwrite=False: {target}")
|
|
16
|
+
if target.exists() and overwrite:
|
|
17
|
+
if target.is_dir():
|
|
18
|
+
shutil.rmtree(target)
|
|
19
|
+
else:
|
|
20
|
+
target.unlink()
|
|
21
|
+
if source.is_file():
|
|
22
|
+
shutil.copy2(source, target)
|
|
23
|
+
elif source.is_dir():
|
|
24
|
+
shutil.copytree(source, target, dirs_exist_ok=overwrite)
|
|
25
|
+
else:
|
|
26
|
+
raise ValueError(f"Source is neither file nor directory: {source}")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def copy_assets_to_machine(which: Literal["scripts", "settings"]) -> None:
|
|
8
30
|
import platform
|
|
9
|
-
|
|
31
|
+
import subprocess
|
|
32
|
+
system_name = platform.system().lower()
|
|
33
|
+
if system_name == "windows":
|
|
10
34
|
system = "windows"
|
|
11
|
-
elif
|
|
35
|
+
elif system_name in {"linux", "darwin"}:
|
|
12
36
|
system = "linux"
|
|
13
37
|
else:
|
|
14
|
-
raise NotImplementedError(f"System {
|
|
38
|
+
raise NotImplementedError(f"System {system_name} not supported")
|
|
39
|
+
|
|
15
40
|
match which:
|
|
16
41
|
case "scripts":
|
|
17
42
|
source = LIBRARY_ROOT.joinpath("scripts", system)
|
|
18
|
-
target = CONFIG_ROOT.joinpath("scripts"
|
|
43
|
+
target = CONFIG_ROOT.joinpath("scripts")
|
|
44
|
+
|
|
45
|
+
# _copy_path(source=source, target=target, overwrite=True)
|
|
19
46
|
|
|
47
|
+
for a_path in source.rglob("*"):
|
|
48
|
+
if not a_path.is_file():
|
|
49
|
+
continue
|
|
50
|
+
relative_path = a_path.relative_to(source)
|
|
51
|
+
target_path = target.joinpath(relative_path)
|
|
52
|
+
_copy_path(source=a_path, target=target_path, overwrite=True)
|
|
53
|
+
|
|
54
|
+
wrap_mcfg_source = LIBRARY_ROOT.joinpath("scripts", "nu", "wrap_mcfg.nu")
|
|
55
|
+
wrap_mcfg_target = CONFIG_ROOT.joinpath("scripts", "wrap_mcfg.nu")
|
|
56
|
+
|
|
57
|
+
wrap_mcfg_target.parent.mkdir(parents=True, exist_ok=True)
|
|
58
|
+
_copy_path(source=wrap_mcfg_source, target=wrap_mcfg_target, overwrite=True)
|
|
59
|
+
|
|
60
|
+
if system_name == "linux":
|
|
61
|
+
from rich.console import Console
|
|
62
|
+
console = Console()
|
|
63
|
+
console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
|
|
64
|
+
scripts_path = CONFIG_ROOT.joinpath("scripts")
|
|
65
|
+
subprocess.run(f"chmod +x {scripts_path} -R", shell=True, capture_output=True, text=True, check=False)
|
|
66
|
+
console.print("[green]✅ Script permissions updated[/green]")
|
|
67
|
+
return
|
|
20
68
|
case "settings":
|
|
21
69
|
source = LIBRARY_ROOT.joinpath("settings")
|
|
22
70
|
target = CONFIG_ROOT.joinpath("settings")
|
|
23
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
24
|
-
PathExtended(source).copy(folder=target.parent, overwrite=True)
|
|
25
|
-
import platform
|
|
26
|
-
system = platform.system().lower()
|
|
27
|
-
if system == "linux" and which == "scripts":
|
|
28
|
-
import subprocess
|
|
29
|
-
from rich.console import Console
|
|
30
|
-
console = Console()
|
|
31
|
-
console.print("\n[bold]📜 Setting executable permissions for scripts...[/bold]")
|
|
32
|
-
subprocess.run(f"chmod +x {CONFIG_ROOT.joinpath(f'scripts/{system.lower()}')} -R", shell=True, capture_output=True, text=True)
|
|
33
|
-
console.print("[green]✅ Script permissions updated[/green]")
|
|
34
|
-
|
|
35
71
|
|
|
72
|
+
_copy_path(source=source, target=target, overwrite=True)
|
|
73
|
+
|
|
@@ -13,59 +13,117 @@ from rich.table import Table
|
|
|
13
13
|
|
|
14
14
|
from machineconfig.utils.path_extended import PathExtended
|
|
15
15
|
from machineconfig.utils.links import symlink_map, copy_map
|
|
16
|
+
from machineconfig.profile.create_links_export import ON_CONFLICT_STRICT
|
|
16
17
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, CONFIG_ROOT
|
|
17
18
|
|
|
18
19
|
import platform
|
|
19
20
|
import subprocess
|
|
20
21
|
import tomllib
|
|
21
|
-
from typing import Optional, Any, TypedDict, Literal
|
|
22
|
+
from typing import Optional, Any, TypedDict, Literal, TypeAlias
|
|
23
|
+
from pathlib import Path
|
|
22
24
|
|
|
23
25
|
|
|
26
|
+
LIBRARY_MAPPER_PATH = LIBRARY_ROOT.joinpath("profile/mapper_dotfiles.toml")
|
|
27
|
+
USER_MAPPER_PATH = Path.home().joinpath("dotfiles/machineconfig/mapper_dotfiles.toml")
|
|
28
|
+
|
|
24
29
|
system = platform.system() # Linux or Windows
|
|
25
30
|
ERROR_LIST: list[Any] = [] # append to this after every exception captured.
|
|
26
31
|
SYSTEM = system.lower()
|
|
27
32
|
|
|
28
33
|
console = Console()
|
|
29
34
|
|
|
35
|
+
OS_ALIASES = {
|
|
36
|
+
"mac": "darwin",
|
|
37
|
+
"macos": "darwin",
|
|
38
|
+
"osx": "darwin",
|
|
39
|
+
}
|
|
40
|
+
REPO_ALIASES = {
|
|
41
|
+
"l": "library",
|
|
42
|
+
"i": "user",
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _normalize_os_name(value: str) -> str:
|
|
47
|
+
return OS_ALIASES.get(value.strip().lower(), value.strip().lower())
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _normalize_repo_name(value: str) -> str:
|
|
51
|
+
return REPO_ALIASES.get(value.strip().lower(), value.strip().lower())
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _parse_os_field(os_field: Any) -> set[str]:
|
|
55
|
+
if not os_field:
|
|
56
|
+
return {"any"}
|
|
57
|
+
if isinstance(os_field, list):
|
|
58
|
+
raw_values = [str(item) for item in os_field]
|
|
59
|
+
else:
|
|
60
|
+
raw_values = str(os_field).split(",")
|
|
61
|
+
values: set[str] = set()
|
|
62
|
+
for raw in raw_values:
|
|
63
|
+
token = _normalize_os_name(raw)
|
|
64
|
+
if not token:
|
|
65
|
+
continue
|
|
66
|
+
if token in {"any", "all", "*"}:
|
|
67
|
+
return {"any"}
|
|
68
|
+
values.add(token)
|
|
69
|
+
return values or {"any"}
|
|
70
|
+
|
|
30
71
|
|
|
31
72
|
class Base(TypedDict):
|
|
32
|
-
|
|
33
|
-
|
|
73
|
+
original: str
|
|
74
|
+
self_managed: str
|
|
34
75
|
contents: Optional[bool]
|
|
35
76
|
copy: Optional[bool]
|
|
77
|
+
os: Optional[str]
|
|
36
78
|
class ConfigMapper(TypedDict):
|
|
37
79
|
file_name: str
|
|
38
80
|
config_file_default_path: str
|
|
39
81
|
self_managed_config_file_path: str
|
|
40
82
|
contents: Optional[bool]
|
|
41
83
|
copy: Optional[bool]
|
|
84
|
+
os: Optional[str]
|
|
42
85
|
class MapperFileData(TypedDict):
|
|
43
86
|
public: dict[str, list[ConfigMapper]]
|
|
44
87
|
private: dict[str, list[ConfigMapper]]
|
|
45
|
-
|
|
46
|
-
|
|
88
|
+
|
|
89
|
+
RepoLoose: TypeAlias = Literal["user", "library", "all"]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def read_mapper(repo: RepoLoose) -> MapperFileData:
|
|
93
|
+
repo_key = _normalize_repo_name(repo)
|
|
94
|
+
match repo_key:
|
|
95
|
+
case "user":
|
|
96
|
+
mapper_path = USER_MAPPER_PATH
|
|
97
|
+
case "library":
|
|
98
|
+
mapper_path = LIBRARY_MAPPER_PATH
|
|
99
|
+
case "all":
|
|
100
|
+
# Merge both mappers
|
|
101
|
+
if not USER_MAPPER_PATH.exists():
|
|
102
|
+
user_mapper = {"public": {}, "private": {}}
|
|
103
|
+
else:
|
|
104
|
+
user_mapper = read_mapper(repo="user")
|
|
105
|
+
library_mapper = read_mapper(repo="library")
|
|
106
|
+
merged_public: dict[str, list[ConfigMapper]] = {**library_mapper["public"], **user_mapper["public"]}
|
|
107
|
+
merged_private: dict[str, list[ConfigMapper]] = {**library_mapper["private"], **user_mapper["private"]}
|
|
108
|
+
return {"public": merged_public, "private": merged_private}
|
|
109
|
+
case _:
|
|
110
|
+
raise ValueError(f"Unsupported repo value: {repo}")
|
|
111
|
+
mapper_data: dict[str, dict[str, Base]] = tomllib.loads(mapper_path.read_text(encoding="utf-8"))
|
|
47
112
|
public: dict[str, list[ConfigMapper]] = {}
|
|
48
113
|
private: dict[str, list[ConfigMapper]] = {}
|
|
49
|
-
|
|
50
|
-
# all_systems = ["linux", "windows", "darwin"]
|
|
51
|
-
# return [s for s in all_systems if s != current_system.lower()]
|
|
52
|
-
# OTHER_SYSTEMS = get_other_systems(SYSTEM)
|
|
114
|
+
normalized_system = _normalize_os_name(SYSTEM)
|
|
53
115
|
for program_key, program_map in mapper_data.items():
|
|
54
|
-
parts = program_key.split("_")
|
|
55
|
-
if len(parts) > 1:
|
|
56
|
-
if parts[-1].lower() == "windows" and SYSTEM != "windows":
|
|
57
|
-
# console.print(f"Skipping Windows-only program mapping: {program_key}")
|
|
58
|
-
continue
|
|
59
|
-
elif parts[-1].lower() == "linux" and SYSTEM == "windows":
|
|
60
|
-
# console.print(f"Skipping Linux-only program mapping: {program_key}")
|
|
61
|
-
continue
|
|
62
116
|
for file_name, file_base in program_map.items():
|
|
117
|
+
os_values = _parse_os_field(file_base.get("os"))
|
|
118
|
+
if "any" not in os_values and normalized_system not in os_values:
|
|
119
|
+
continue
|
|
63
120
|
file_map: ConfigMapper = {
|
|
64
121
|
"file_name": file_name,
|
|
65
|
-
"config_file_default_path": file_base["
|
|
66
|
-
"self_managed_config_file_path": file_base["
|
|
122
|
+
"config_file_default_path": file_base["original"],
|
|
123
|
+
"self_managed_config_file_path": file_base["self_managed"],
|
|
67
124
|
"contents": file_base.get("contents"),
|
|
68
125
|
"copy": file_base.get("copy"),
|
|
126
|
+
"os": file_base.get("os"),
|
|
69
127
|
}
|
|
70
128
|
if "CONFIG_ROOT" in file_map["self_managed_config_file_path"]:
|
|
71
129
|
if program_key not in public:
|
|
@@ -79,7 +137,7 @@ def read_mapper() -> MapperFileData:
|
|
|
79
137
|
|
|
80
138
|
|
|
81
139
|
def apply_mapper(mapper_data: dict[str, list[ConfigMapper]],
|
|
82
|
-
on_conflict:
|
|
140
|
+
on_conflict: ON_CONFLICT_STRICT,
|
|
83
141
|
method: Literal["symlink", "copy"]
|
|
84
142
|
):
|
|
85
143
|
operation_records: list[OperationRecord] = []
|
|
@@ -116,7 +174,7 @@ def apply_mapper(mapper_data: dict[str, list[ConfigMapper]],
|
|
|
116
174
|
# Determine whether to use copy or symlink
|
|
117
175
|
use_copy = method == "copy" or a_mapper.get("copy", False)
|
|
118
176
|
if "contents" in a_mapper and a_mapper["contents"]:
|
|
119
|
-
targets = list(self_managed_config_file_path.expanduser().
|
|
177
|
+
targets = list(self_managed_config_file_path.expanduser().glob("*"))
|
|
120
178
|
for a_target in targets:
|
|
121
179
|
operation_type = "contents_copy" if use_copy else "contents_symlink"
|
|
122
180
|
try:
|
|
@@ -1,54 +1,105 @@
|
|
|
1
1
|
|
|
2
2
|
import typer
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Literal, Annotated, Optional, TypeAlias
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
ON_CONFLICT_LOOSE: TypeAlias = Literal[
|
|
7
|
+
"throw-error", "t",
|
|
8
|
+
"overwrite-self-managed", "os",
|
|
9
|
+
"backup-self-managed", "bs",
|
|
10
|
+
"overwrite-default-path", "od",
|
|
11
|
+
"backup-default-path", "bd"
|
|
12
|
+
]
|
|
13
|
+
ON_CONFLICT_STRICT: TypeAlias = Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"]
|
|
14
|
+
ON_CONFLICT_MAPPER: dict[ON_CONFLICT_LOOSE, ON_CONFLICT_STRICT] = {
|
|
15
|
+
"t": "throw-error",
|
|
16
|
+
"os": "overwrite-self-managed",
|
|
17
|
+
"bs": "backup-self-managed",
|
|
18
|
+
"od": "overwrite-default-path",
|
|
19
|
+
"bd": "backup-default-path",
|
|
20
|
+
"throw-error": "throw-error",
|
|
21
|
+
"overwrite-self-managed": "overwrite-self-managed",
|
|
22
|
+
"backup-self-managed": "backup-self-managed",
|
|
23
|
+
"overwrite-default-path": "overwrite-default-path",
|
|
24
|
+
"backup-default-path": "backup-default-path",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
SENSITIVITY_LOOSE: TypeAlias = Literal["private", "p", "public", "b", "all", "a"]
|
|
28
|
+
SENSITIVITY_STRICT: TypeAlias = Literal["private", "public", "all"]
|
|
29
|
+
SENSITIVITY_MAP: dict[SENSITIVITY_LOOSE, SENSITIVITY_STRICT] = {
|
|
30
|
+
"private": "private",
|
|
31
|
+
"p": "private",
|
|
32
|
+
"public": "public",
|
|
33
|
+
"b": "public",
|
|
34
|
+
"all": "all",
|
|
35
|
+
"a": "all",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
REPO_STRICT: TypeAlias = Literal["library", "user", "all"]
|
|
39
|
+
REPO_LOOSE: TypeAlias = Literal["library", "l", "user", "u", "all", "a"]
|
|
40
|
+
REPO_MAP: dict[REPO_LOOSE, REPO_STRICT] = {
|
|
41
|
+
"library": "library",
|
|
42
|
+
"l": "library",
|
|
43
|
+
"user": "user",
|
|
44
|
+
"u": "user",
|
|
45
|
+
"a": "all",
|
|
46
|
+
"all": "all",
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
METHOD_STRICT: TypeAlias = Literal["symlink", "copy"]
|
|
50
|
+
METHOD_LOOSE: TypeAlias = Literal["symlink", "s", "copy", "c"]
|
|
51
|
+
METHOD_MAP: dict[METHOD_LOOSE, METHOD_STRICT] = {
|
|
52
|
+
"symlink": "symlink",
|
|
53
|
+
"s": "symlink",
|
|
54
|
+
"copy": "copy",
|
|
55
|
+
"c": "copy",
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def main_from_parser(
|
|
61
|
+
sensitivity: Annotated[SENSITIVITY_LOOSE, typer.Option(..., "--sensitivity", "-s", help="Sensitivity of the configuration files to manage.")],
|
|
62
|
+
method: Annotated[METHOD_LOOSE, typer.Option(..., "--method", "-m", help="Method to use for linking files")],
|
|
63
|
+
repo: Annotated[REPO_LOOSE, typer.Option(..., "--repo", "-r", help="Mapper source to use for config files.")] = "library",
|
|
64
|
+
on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
65
|
+
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process ('all' for all items) (default is None, selection is interactive)")] = None,
|
|
66
|
+
):
|
|
10
67
|
"""Terminology:
|
|
11
68
|
SOURCE = Self-Managed-Config-File-Path
|
|
12
69
|
TARGET = Config-File-Default-Path
|
|
13
|
-
For public config files, the source always exists
|
|
70
|
+
For public config files in the library repo, the source always exists."""
|
|
14
71
|
from machineconfig.profile.create_links import ConfigMapper, read_mapper
|
|
15
|
-
|
|
72
|
+
repo_key = REPO_MAP[repo]
|
|
73
|
+
mapper_full_obj = read_mapper(repo=repo_key)
|
|
74
|
+
match sensitivity:
|
|
75
|
+
case "private" | "p":
|
|
76
|
+
mapper_full = mapper_full_obj["private"]
|
|
77
|
+
case "public" | "b":
|
|
78
|
+
mapper_full = mapper_full_obj["public"]
|
|
79
|
+
case "all" | "a":
|
|
80
|
+
mapper_full = {**mapper_full_obj["private"], **mapper_full_obj["public"]}
|
|
81
|
+
|
|
16
82
|
if which is None:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
83
|
+
from machineconfig.utils.options_utils.tv_options import choose_from_dict_with_preview
|
|
84
|
+
import pprint
|
|
85
|
+
options_with_preview: dict[str, str] = {key: pprint.pformat(value, width=88, sort_dicts=True) for key, value in mapper_full.items()}
|
|
86
|
+
items_chosen = choose_from_dict_with_preview(options_with_preview, extension="toml", multi=True, preview_size_percent=75.0)
|
|
20
87
|
else:
|
|
21
|
-
assert interactive is False
|
|
22
88
|
if which == "all":
|
|
23
89
|
items_chosen = list(mapper_full.keys())
|
|
24
90
|
else:
|
|
25
91
|
items_chosen = which.split(",")
|
|
26
92
|
items_objections: dict[str, list[ConfigMapper]] = {item: mapper_full[item] for item in items_chosen if item in mapper_full}
|
|
93
|
+
if len(items_objections) == 0:
|
|
94
|
+
msg = typer.style("Error: ", fg=typer.colors.RED) + "No valid items selected."
|
|
95
|
+
typer.echo(msg)
|
|
96
|
+
typer.Exit(code=1)
|
|
97
|
+
return
|
|
27
98
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
apply_mapper(mapper_data=items_objections, on_conflict=on_conflict, method=method)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def main_private_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for linking files")],
|
|
35
|
-
on_conflict: Annotated[Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"], typer.Option(..., help="Action to take on conflict")] = "throwError",
|
|
36
|
-
which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
|
|
37
|
-
interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
|
|
38
|
-
from machineconfig.profile.create_links import ConfigMapper, read_mapper
|
|
39
|
-
|
|
40
|
-
mapper_full = read_mapper()["private"]
|
|
41
|
-
if which is None:
|
|
42
|
-
assert interactive is True
|
|
43
|
-
from machineconfig.utils.options import choose_from_options
|
|
44
|
-
items_chosen = choose_from_options(msg="Which symlink to create?", options=list(mapper_full.keys()), fzf=True, multi=True)
|
|
45
|
-
else:
|
|
46
|
-
assert interactive is False
|
|
47
|
-
if which == "all":
|
|
48
|
-
items_chosen = list(mapper_full.keys())
|
|
49
|
-
else:
|
|
50
|
-
items_chosen = which.split(",")
|
|
51
|
-
items_objections: dict[str, list[ConfigMapper]] = {item: mapper_full[item] for item in items_chosen if item in mapper_full}
|
|
99
|
+
if (sensitivity == "public" or sensitivity == "b") and repo_key == "library":
|
|
100
|
+
from machineconfig.profile.create_helper import copy_assets_to_machine
|
|
101
|
+
copy_assets_to_machine(which="settings") # config files live here and will be linked to.
|
|
52
102
|
|
|
103
|
+
method = METHOD_MAP[method]
|
|
53
104
|
from machineconfig.profile.create_links import apply_mapper
|
|
54
|
-
apply_mapper(mapper_data=items_objections, on_conflict=on_conflict, method=method)
|
|
105
|
+
apply_mapper(mapper_data=items_objections, on_conflict=ON_CONFLICT_MAPPER[on_conflict], method=method)
|