machineconfig 6.23__py3-none-any.whl → 8.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +3 -3
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +5 -3
- machineconfig/cluster/sessions_managers/zellij_remote.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -7
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_with_panes.py +1 -1
- machineconfig/jobs/installer/check_installations.py +0 -1
- machineconfig/jobs/installer/installer_data.json +1408 -201
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +63 -92
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/python_scripts/boxes.py +61 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +75 -18
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +90 -132
- machineconfig/profile/mapper.toml +18 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +82 -60
- machineconfig/scripts/python/ai/initai.py +1 -19
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/cloud.py +14 -9
- machineconfig/scripts/python/croshell.py +135 -117
- machineconfig/scripts/python/devops.py +48 -25
- machineconfig/scripts/python/devops_navigator.py +1 -5
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +18 -9
- machineconfig/scripts/python/fire_jobs.py +127 -118
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +37 -15
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_copy.py +28 -21
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_mount.py +19 -17
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_sync.py +12 -11
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +221 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/cli_repos.py +60 -36
- machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
- machineconfig/scripts/python/{devops_helpers/cli_terminal.py → helpers_devops/cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_backup_retrieve.py +7 -10
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_status.py +7 -19
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +2 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_builder.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_detail.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_tree.py +160 -23
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +80 -37
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/entrypoint.py +5 -5
- machineconfig/scripts/python/helpers_repos/grource.py +2 -2
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/record.py +3 -2
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{repos_helpers/count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/sync.py +5 -5
- machineconfig/scripts/python/{sessions_helpers → helpers_sessions}/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +26 -35
- machineconfig/scripts/python/{entry.py → mcfg_entry.py} +24 -10
- machineconfig/scripts/python/msearch.py +72 -0
- machineconfig/scripts/python/sessions.py +101 -38
- machineconfig/scripts/python/terminal.py +136 -0
- machineconfig/scripts/python/utils.py +62 -0
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/linux/lfrc +10 -11
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +15 -17
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +57 -10
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -35
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +59 -23
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -11
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/code.py +143 -167
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/headers.py +6 -11
- machineconfig/utils/files/read.py +3 -9
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +44 -101
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +39 -87
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +17 -63
- machineconfig/utils/io.py +77 -4
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +235 -145
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +46 -97
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +10 -23
- machineconfig/utils/scheduler.py +84 -115
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +214 -476
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +3 -113
- machineconfig/utils/upgrade_packages.py +114 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- machineconfig-8.12.dist-info/RECORD +504 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +5 -1
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/devops_helpers/cli_config.py +0 -81
- machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -84
- machineconfig/scripts/python/devops_helpers/cli_data.py +0 -18
- machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -73
- machineconfig/scripts/python/devops_helpers/cli_self.py +0 -117
- machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -104
- machineconfig/scripts/python/helper_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py +0 -30
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/python/repos_helpers/action.py +0 -378
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -17
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/shells/pwsh/profile.ps1 +0 -0
- machineconfig/settings/yazi/keymap.toml +0 -0
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/nix/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.23.dist-info/METADATA +0 -84
- machineconfig-6.23.dist-info/RECORD +0 -428
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_restart.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_manager_helper.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/web_shortcuts → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{linux/msc → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{devops_helpers → helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{devops_helpers/themes → helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/scheduler.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/data_models.py +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{repos_helpers → helpers_repos}/update.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_sessions}/__init__.py +0 -0
- /machineconfig/{scripts/python/sessions_helpers → settings/wt}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"""SSH"""
|
|
2
|
-
|
|
3
|
-
from platform import system
|
|
4
|
-
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
5
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
from rich.console import Console
|
|
7
|
-
from rich.panel import Panel
|
|
8
|
-
from rich import box # Import box
|
|
9
|
-
from typing import Optional, Annotated
|
|
10
|
-
import typer
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
console = Console()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def get_add_ssh_key_script(path_to_key: PathExtended):
|
|
17
|
-
console.print(Panel("🔑 SSH KEY CONFIGURATION", title="[bold blue]SSH Setup[/bold blue]"))
|
|
18
|
-
if system() == "Linux" or system() == "Darwin":
|
|
19
|
-
authorized_keys = PathExtended.home().joinpath(".ssh/authorized_keys")
|
|
20
|
-
console.print(Panel(f"🐧 Linux SSH configuration\n📄 Authorized keys file: {authorized_keys}", title="[bold blue]System Info[/bold blue]"))
|
|
21
|
-
elif system() == "Windows":
|
|
22
|
-
authorized_keys = PathExtended("C:/ProgramData/ssh/administrators_authorized_keys")
|
|
23
|
-
console.print(Panel(f"🪟 Windows SSH configuration\n📄 Authorized keys file: {authorized_keys}", title="[bold blue]System Info[/bold blue]"))
|
|
24
|
-
else:
|
|
25
|
-
console.print(Panel("❌ ERROR: Unsupported operating system\nOnly Linux and Windows are supported", title="[bold red]Error[/bold red]"))
|
|
26
|
-
raise NotImplementedError
|
|
27
|
-
|
|
28
|
-
if authorized_keys.exists():
|
|
29
|
-
split = "\n"
|
|
30
|
-
keys_text = authorized_keys.read_text(encoding="utf-8").split(split)
|
|
31
|
-
key_count = len([k for k in keys_text if k.strip()])
|
|
32
|
-
console.print(Panel(f"🔍 Current SSH authorization status\n✅ Found {key_count} authorized key(s)", title="[bold blue]Status[/bold blue]"))
|
|
33
|
-
if path_to_key.read_text(encoding="utf-8") in authorized_keys.read_text(encoding="utf-8"):
|
|
34
|
-
console.print(Panel(f"⚠️ Key already authorized\nKey: {path_to_key.name}\nStatus: Already present in authorized_keys file\nNo action required", title="[bold yellow]Warning[/bold yellow]"))
|
|
35
|
-
program = ""
|
|
36
|
-
else:
|
|
37
|
-
console.print(Panel(f"➕ Adding new SSH key to authorized keys\n🔑 Key file: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
|
|
38
|
-
if system() == "Linux":
|
|
39
|
-
program = f"cat {path_to_key} >> ~/.ssh/authorized_keys"
|
|
40
|
-
elif system() == "Windows":
|
|
41
|
-
program_path = LIBRARY_ROOT.joinpath("setup_windows/add-sshkey.ps1")
|
|
42
|
-
program = program_path.expanduser().read_text(encoding="utf-8")
|
|
43
|
-
place_holder = r'$sshfile = "$env:USERPROFILE\.ssh\pubkey.pub"'
|
|
44
|
-
assert place_holder in program, f"This section performs string manipulation on the script {program_path} to add the key to the authorized_keys file. The script has changed and the string {place_holder} is not found."
|
|
45
|
-
program = program.replace(place_holder, f'$sshfile = "{path_to_key}"')
|
|
46
|
-
console.print(Panel("🔧 Configured PowerShell script for Windows\n📝 Replaced placeholder with actual key path", title="[bold blue]Configuration[/bold blue]"))
|
|
47
|
-
else:
|
|
48
|
-
raise NotImplementedError
|
|
49
|
-
else:
|
|
50
|
-
console.print(Panel(f"📝 Creating new authorized_keys file\n🔑 Using key: {path_to_key.name}", title="[bold blue]Action[/bold blue]"))
|
|
51
|
-
if system() == "Linux":
|
|
52
|
-
program = f"cat {path_to_key} > ~/.ssh/authorized_keys"
|
|
53
|
-
else:
|
|
54
|
-
program_path = LIBRARY_ROOT.joinpath("setup_windows/openssh-server_add-sshkey.ps1")
|
|
55
|
-
program = PathExtended(program_path).expanduser().read_text(encoding="utf-8").replace('$sshfile=""', f'$sshfile="{path_to_key}"')
|
|
56
|
-
console.print(Panel("🔧 Configured PowerShell script for Windows\n📝 Set key path in script", title="[bold blue]Configuration[/bold blue]"))
|
|
57
|
-
|
|
58
|
-
if system() == "Linux" or system() == "Darwin":
|
|
59
|
-
program += """
|
|
60
|
-
sudo chmod 700 ~/.ssh
|
|
61
|
-
sudo chmod 644 ~/.ssh/authorized_keys
|
|
62
|
-
sudo chmod 644 ~/.ssh/*.pub
|
|
63
|
-
sudo service ssh --full-restart
|
|
64
|
-
# from superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
|
|
65
|
-
"""
|
|
66
|
-
return program
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"""
|
|
71
|
-
# Common pitfalls:
|
|
72
|
-
# 🚫 Wrong line endings (LF/CRLF) in config files
|
|
73
|
-
# 🌐 Network port conflicts (try 2222 -> 2223) between WSL and Windows
|
|
74
|
-
# sudo service ssh restart
|
|
75
|
-
# sudo service ssh status
|
|
76
|
-
# sudo nano /etc/ssh/sshd_config
|
|
77
|
-
"""
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def main(pub_path: Annotated[Optional[str], typer.Argument(..., help="Path to the public key file")] = None,
|
|
81
|
-
pub_choose: Annotated[bool, typer.Option(..., "--choose", "-c", help="Choose from available public keys in ~/.ssh")] = False,
|
|
82
|
-
pub_val: Annotated[bool, typer.Option(..., "--paste", "-p", help="Paste the public key content manually")] = False,
|
|
83
|
-
from_github: Annotated[Optional[str], typer.Option(..., "--from-github", "-g", help="Fetch public keys from a GitHub username")] = None
|
|
84
|
-
) -> None:
|
|
85
|
-
if pub_path:
|
|
86
|
-
key_path = PathExtended(pub_path).expanduser().absolute()
|
|
87
|
-
if not key_path.exists():
|
|
88
|
-
console.print(Panel(f"❌ ERROR: Provided key path does not exist\nPath: {key_path}", title="[bold red]Error[/bold red]"))
|
|
89
|
-
raise FileNotFoundError(f"Provided key path does not exist: {key_path}")
|
|
90
|
-
console.print(Panel(f"📄 Using provided public key file: {key_path}", title="[bold blue]Info[/bold blue]"))
|
|
91
|
-
program = get_add_ssh_key_script(key_path)
|
|
92
|
-
from machineconfig.utils.code import run_shell_script
|
|
93
|
-
run_shell_script(script=program)
|
|
94
|
-
console.print(Panel("✅ SSH KEY AUTHORIZATION COMPLETED", box=box.DOUBLE_EDGE, title_align="left"))
|
|
95
|
-
return
|
|
96
|
-
elif pub_choose:
|
|
97
|
-
console.print(Panel("🔐 SSH PUBLIC KEY AUTHORIZATION TOOL", box=box.DOUBLE_EDGE, title_align="left"))
|
|
98
|
-
console.print(Panel("🔍 Searching for public keys...", title="[bold blue]SSH Setup[/bold blue]", border_style="blue"))
|
|
99
|
-
pub_keys = PathExtended.home().joinpath(".ssh").search("*.pub")
|
|
100
|
-
if pub_keys:
|
|
101
|
-
console.print(Panel(f"✅ Found {len(pub_keys)} public key(s)", title="[bold green]Status[/bold green]", border_style="green"))
|
|
102
|
-
else:
|
|
103
|
-
console.print(Panel("⚠️ No public keys found", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
104
|
-
return
|
|
105
|
-
console.print(Panel(f"🔄 Processing all {len(pub_keys)} public keys...", title="[bold blue]Processing[/bold blue]", border_style="blue"))
|
|
106
|
-
program = "\n\n\n".join([get_add_ssh_key_script(key) for key in pub_keys])
|
|
107
|
-
|
|
108
|
-
elif pub_val:
|
|
109
|
-
console.print(Panel("📋 Please provide a filename and paste the public key content", title="[bold blue]Input Required[/bold blue]", border_style="blue"))
|
|
110
|
-
key_filename = input("📝 File name (default: my_pasted_key.pub): ") or "my_pasted_key.pub"
|
|
111
|
-
key_path = PathExtended.home().joinpath(f".ssh/{key_filename}")
|
|
112
|
-
key_path.write_text(input("🔑 Paste the public key here: "), encoding="utf-8")
|
|
113
|
-
console.print(Panel(f"💾 Key saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
114
|
-
program = get_add_ssh_key_script(key_path)
|
|
115
|
-
elif from_github:
|
|
116
|
-
console.print(Panel(f"🌐 Fetching public keys from GitHub user: {from_github}", title="[bold blue]GitHub Fetch[/bold blue]", border_style="blue"))
|
|
117
|
-
import requests
|
|
118
|
-
# $pubkey_url = 'https://github.com/thisismygitrepo.keys' # $pubkey_string = (Invoke-WebRequest $pubkey_url).Content
|
|
119
|
-
response = requests.get(f"https://api.github.com/users/{from_github}/keys")
|
|
120
|
-
if response.status_code != 200:
|
|
121
|
-
console.print(Panel(f"❌ ERROR: Failed to fetch keys from GitHub user {from_github}\nStatus Code: {response.status_code}", title="[bold red]Error[/bold red]", border_style="red"))
|
|
122
|
-
raise RuntimeError(f"Failed to fetch keys from GitHub user {from_github}: Status Code {response.status_code}")
|
|
123
|
-
keys = response.json()
|
|
124
|
-
if not keys:
|
|
125
|
-
console.print(Panel(f"⚠️ No public keys found for GitHub user: {from_github}", title="[bold yellow]Warning[/bold yellow]", border_style="yellow"))
|
|
126
|
-
return
|
|
127
|
-
console.print(Panel(f"✅ Found {len(keys)} public key(s) for user: {from_github}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
128
|
-
key_path = PathExtended.home().joinpath(f".ssh/{from_github}_github_keys.pub")
|
|
129
|
-
key_path.write_text("\n".join([key["key"] for key in keys]), encoding="utf-8")
|
|
130
|
-
console.print(Panel(f"💾 Keys saved to: {key_path}", title="[bold green]Success[/bold green]", border_style="green"))
|
|
131
|
-
program = get_add_ssh_key_script(key_path)
|
|
132
|
-
else:
|
|
133
|
-
console.print(Panel("❌ ERROR: No method provided to add SSH key\nUse --help for options", title="[bold red]Error[/bold red]", border_style="red"))
|
|
134
|
-
raise ValueError("No method provided to add SSH key. Use --help for options.")
|
|
135
|
-
console.print(Panel("🚀 SSH KEY AUTHORIZATION READY\nRun the generated script to apply changes", box=box.DOUBLE_EDGE, title_align="left"))
|
|
136
|
-
from machineconfig.utils.code import run_shell_script
|
|
137
|
-
run_shell_script(script=program)
|
|
138
|
-
import socket
|
|
139
|
-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
140
|
-
s.connect(('8.8.8.8',80))
|
|
141
|
-
local_ip_v4 = s.getsockname()[0]
|
|
142
|
-
s.close()
|
|
143
|
-
print(f"This computer is @ {local_ip_v4}")
|
|
144
|
-
console.print(Panel("✅ SSH KEY AUTHORIZATION COMPLETED", box=box.DOUBLE_EDGE, title_align="left"))
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if __name__ == "__main__":
|
|
148
|
-
pass
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"""TWSL"""
|
|
2
|
-
|
|
3
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
4
|
-
from typing import Annotated, Optional
|
|
5
|
-
import typer
|
|
6
|
-
import platform
|
|
7
|
-
import getpass
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
system = platform.system() # e.g. "Windows", "Linux", "Darwin" (macOS)
|
|
11
|
-
# HostName = platform.node() # e.g. "MY-SURFACE", os.env["COMPUTERNAME") only works for windows.
|
|
12
|
-
UserName = getpass.getuser() # e.g: username, os.env["USERNAME") only works for windows.
|
|
13
|
-
# UserDomain = os.environ["USERDOMAIN"] # e.g. HAD OR MY-SURFACE
|
|
14
|
-
# UserDomainRoaming = PathExtended(os.environ["USERDOMAIN_ROAMINGPROFILE"]) # e.g. SURFACE
|
|
15
|
-
# LogonServer = os.environ["LOGONSERVER"] # e.g. "\\MY-SURFACE"
|
|
16
|
-
# UserProfile = PathExtended(os.env["USERPROFILE")) # e.g C:\Users\username
|
|
17
|
-
# HomePath = PathExtended(os.env["HOMEPATH")) # e.g. C:\Users\username
|
|
18
|
-
# Public = PathExtended(os.environ["PUBLIC"]) # C:\Users\Public
|
|
19
|
-
|
|
20
|
-
WSL_FROM_WIN = Path(r"\\wsl.localhost\Ubuntu-22.04\home") # PathExtended(rf"\\wsl$\Ubuntu\home") # see localappdata/canonical
|
|
21
|
-
WIN_FROM_WSL = Path(r"/mnt/c/Users")
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def main(
|
|
25
|
-
path: Annotated[str, typer.Argument(help="📁 Path of file/folder to transfer over.")],
|
|
26
|
-
same_file_system: Annotated[bool, typer.Option("--same_file_system", "-s", help="⚠️ Move file across the same file system (not recommended).")] = False,
|
|
27
|
-
destination: Annotated[str, typer.Option("--destination", "-d", help="📍 New path.")] = "",
|
|
28
|
-
pwd: Annotated[Optional[str], typer.Option("--pwd", "-P", help="🔑 Password for encryption.")] = None,
|
|
29
|
-
sshkey: Annotated[Optional[str], typer.Option("--sshkey", "-i", help="🔐 Path to SSH private key.")] = None,
|
|
30
|
-
port: Annotated[Optional[str], typer.Option("--port", "-p", help="🔌 Port number.")] = None,
|
|
31
|
-
zip_first: Annotated[bool, typer.Option("--zip_first", "-z", help="📦 Zip before transferring.")] = False,
|
|
32
|
-
) -> None:
|
|
33
|
-
print("\n" + "=" * 50)
|
|
34
|
-
print("🔄 Welcome to the WSL-Windows File Transfer Tool")
|
|
35
|
-
print("=" * 50 + "\n")
|
|
36
|
-
|
|
37
|
-
path_obj = PathExtended(path).expanduser().absolute()
|
|
38
|
-
|
|
39
|
-
if same_file_system:
|
|
40
|
-
print("⚠️ Using a not recommended transfer method! Copying files across the same file system.")
|
|
41
|
-
if system == "Windows": # move files over to WSL
|
|
42
|
-
print("📤 Transferring files from Windows to WSL...")
|
|
43
|
-
path_obj.copy(folder=WSL_FROM_WIN.joinpath(UserName).joinpath(path_obj.rel2home().parent), overwrite=True) # the following works for files and folders alike.
|
|
44
|
-
else: # move files from WSL to win
|
|
45
|
-
print("📤 Transferring files from WSL to Windows...")
|
|
46
|
-
path_obj.copy(folder=WIN_FROM_WSL.joinpath(UserName).joinpath(path_obj.rel2home().parent), overwrite=True)
|
|
47
|
-
print("✅ Transfer completed successfully!\n")
|
|
48
|
-
else:
|
|
49
|
-
from machineconfig.utils.ssh import SSH
|
|
50
|
-
import platform
|
|
51
|
-
|
|
52
|
-
port_int = int(port) if port else (2222 if system == "Windows" else 22)
|
|
53
|
-
username = UserName
|
|
54
|
-
hostname = platform.node()
|
|
55
|
-
ssh = SSH(host=None, username=username, hostname=hostname, ssh_key_path=sshkey, password=pwd, port=port_int, enable_compression=False)
|
|
56
|
-
print("🌐 Initiating SSH transfer...")
|
|
57
|
-
ssh.copy_from_here(source_path=path_obj, target_path=Path(destination) if destination else None, compress_with_zip=zip_first, recursive=False, overwrite_existing=False)
|
|
58
|
-
print("✅ SSH transfer completed successfully!\n")
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def arg_parser() -> None:
|
|
62
|
-
typer.run(main)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if __name__ == "__main__":
|
|
66
|
-
arg_parser()
|
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
2
|
-
from machineconfig.utils.accessories import randstr
|
|
3
|
-
from machineconfig.scripts.python.repos_helpers.update import update_repository
|
|
4
|
-
|
|
5
|
-
from typing import Optional
|
|
6
|
-
from dataclasses import dataclass
|
|
7
|
-
from enum import Enum
|
|
8
|
-
|
|
9
|
-
from rich import print as pprint
|
|
10
|
-
from rich.table import Table
|
|
11
|
-
from rich.panel import Panel
|
|
12
|
-
from rich.columns import Columns
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class GitAction(Enum):
|
|
16
|
-
commit = "commit"
|
|
17
|
-
push = "push"
|
|
18
|
-
pull = "pull"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@dataclass
|
|
22
|
-
class GitOperationResult:
|
|
23
|
-
"""Result of a git operation on a single repository."""
|
|
24
|
-
repo_path: PathExtended
|
|
25
|
-
action: str
|
|
26
|
-
success: bool
|
|
27
|
-
message: str
|
|
28
|
-
is_git_repo: bool = True
|
|
29
|
-
had_changes: bool = False
|
|
30
|
-
remote_count: int = 0
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@dataclass
|
|
34
|
-
class GitOperationSummary:
|
|
35
|
-
"""Summary of all git operations performed."""
|
|
36
|
-
# Basic statistics
|
|
37
|
-
total_paths_processed: int = 0
|
|
38
|
-
git_repos_found: int = 0
|
|
39
|
-
non_git_paths: int = 0
|
|
40
|
-
|
|
41
|
-
# Per-operation statistics
|
|
42
|
-
commits_attempted: int = 0
|
|
43
|
-
commits_successful: int = 0
|
|
44
|
-
commits_no_changes: int = 0
|
|
45
|
-
commits_failed: int = 0
|
|
46
|
-
|
|
47
|
-
pulls_attempted: int = 0
|
|
48
|
-
pulls_successful: int = 0
|
|
49
|
-
pulls_failed: int = 0
|
|
50
|
-
|
|
51
|
-
pushes_attempted: int = 0
|
|
52
|
-
pushes_successful: int = 0
|
|
53
|
-
pushes_failed: int = 0
|
|
54
|
-
|
|
55
|
-
def __post_init__(self):
|
|
56
|
-
self.failed_operations: list[GitOperationResult] = []
|
|
57
|
-
self.repos_without_remotes: list[PathExtended] = []
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def git_action(path: PathExtended, action: GitAction, mess: Optional[str] = None, r: bool = False, auto_sync: bool = True) -> GitOperationResult:
|
|
61
|
-
"""Perform git actions using Python instead of shell scripts. Returns detailed operation result."""
|
|
62
|
-
from git.exc import InvalidGitRepositoryError
|
|
63
|
-
from git.repo import Repo
|
|
64
|
-
|
|
65
|
-
try:
|
|
66
|
-
repo = Repo(str(path), search_parent_directories=False)
|
|
67
|
-
except InvalidGitRepositoryError:
|
|
68
|
-
pprint(f"⚠️ Skipping {path} because it is not a git repository.")
|
|
69
|
-
if r:
|
|
70
|
-
results = [git_action(path=sub_path, action=action, mess=mess, r=r, auto_sync=auto_sync) for sub_path in path.search()]
|
|
71
|
-
# For recursive calls, we need to aggregate results somehow
|
|
72
|
-
# For now, return success if all recursive operations succeeded
|
|
73
|
-
all_successful = all(result.success for result in results)
|
|
74
|
-
return GitOperationResult(
|
|
75
|
-
repo_path=path,
|
|
76
|
-
action=action.value,
|
|
77
|
-
success=all_successful,
|
|
78
|
-
message=f"Recursive operation: {len([r for r in results if r.success])}/{len(results)} succeeded",
|
|
79
|
-
is_git_repo=False
|
|
80
|
-
)
|
|
81
|
-
else:
|
|
82
|
-
return GitOperationResult(
|
|
83
|
-
repo_path=path,
|
|
84
|
-
action=action.value,
|
|
85
|
-
success=False,
|
|
86
|
-
message="Not a git repository",
|
|
87
|
-
is_git_repo=False
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
print(f">>>>>>>>> 🔧{action} - {path}")
|
|
91
|
-
remote_count = len(repo.remotes)
|
|
92
|
-
|
|
93
|
-
try:
|
|
94
|
-
if action == GitAction.commit:
|
|
95
|
-
if mess is None:
|
|
96
|
-
mess = "auto_commit_" + randstr()
|
|
97
|
-
|
|
98
|
-
# Check if there are changes to commit
|
|
99
|
-
if repo.is_dirty() or repo.untracked_files:
|
|
100
|
-
repo.git.add(A=True) # Stage all changes
|
|
101
|
-
repo.index.commit(mess)
|
|
102
|
-
print(f"✅ Committed changes with message: {mess}")
|
|
103
|
-
return GitOperationResult(
|
|
104
|
-
repo_path=path,
|
|
105
|
-
action=action.value,
|
|
106
|
-
success=True,
|
|
107
|
-
message=f"Committed changes with message: {mess}",
|
|
108
|
-
had_changes=True,
|
|
109
|
-
remote_count=remote_count
|
|
110
|
-
)
|
|
111
|
-
else:
|
|
112
|
-
print("ℹ️ No changes to commit")
|
|
113
|
-
return GitOperationResult(
|
|
114
|
-
repo_path=path,
|
|
115
|
-
action=action.value,
|
|
116
|
-
success=True,
|
|
117
|
-
message="No changes to commit",
|
|
118
|
-
had_changes=False,
|
|
119
|
-
remote_count=remote_count
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
elif action == GitAction.push:
|
|
123
|
-
if not repo.remotes:
|
|
124
|
-
print("⚠️ No remotes configured for push")
|
|
125
|
-
return GitOperationResult(
|
|
126
|
-
repo_path=path,
|
|
127
|
-
action=action.value,
|
|
128
|
-
success=False,
|
|
129
|
-
message="No remotes configured",
|
|
130
|
-
remote_count=0
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
success = True
|
|
134
|
-
failed_remotes = []
|
|
135
|
-
for remote in repo.remotes:
|
|
136
|
-
try:
|
|
137
|
-
print(f"🚀 Pushing to {remote.url}")
|
|
138
|
-
remote.push(repo.active_branch.name)
|
|
139
|
-
print(f"✅ Pushed to {remote.name}")
|
|
140
|
-
except Exception as e:
|
|
141
|
-
print(f"❌ Failed to push to {remote.name}: {e}")
|
|
142
|
-
failed_remotes.append(f"{remote.name}: {str(e)}")
|
|
143
|
-
success = False
|
|
144
|
-
|
|
145
|
-
message = "Push successful" if success else f"Push failed for: {', '.join(failed_remotes)}"
|
|
146
|
-
return GitOperationResult(
|
|
147
|
-
repo_path=path,
|
|
148
|
-
action=action.value,
|
|
149
|
-
success=success,
|
|
150
|
-
message=message,
|
|
151
|
-
remote_count=remote_count
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
elif action == GitAction.pull:
|
|
155
|
-
# Use the enhanced update function with uv sync support
|
|
156
|
-
try:
|
|
157
|
-
update_repository(repo, auto_uv_sync=auto_sync, allow_password_prompt=False)
|
|
158
|
-
print("✅ Pull completed")
|
|
159
|
-
return GitOperationResult(
|
|
160
|
-
repo_path=path,
|
|
161
|
-
action=action.value,
|
|
162
|
-
success=True,
|
|
163
|
-
message="Pull completed successfully",
|
|
164
|
-
remote_count=remote_count
|
|
165
|
-
)
|
|
166
|
-
except Exception as e:
|
|
167
|
-
print(f"❌ Pull failed: {e}")
|
|
168
|
-
return GitOperationResult(
|
|
169
|
-
repo_path=path,
|
|
170
|
-
action=action.value,
|
|
171
|
-
success=False,
|
|
172
|
-
message=f"Pull failed: {str(e)}",
|
|
173
|
-
remote_count=remote_count
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
except Exception as e:
|
|
177
|
-
print(f"❌ Error performing {action} on {path}: {e}")
|
|
178
|
-
return GitOperationResult(
|
|
179
|
-
repo_path=path,
|
|
180
|
-
action=action.value,
|
|
181
|
-
success=False,
|
|
182
|
-
message=f"Error: {str(e)}",
|
|
183
|
-
remote_count=remote_count
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
# This should never be reached, but just in case
|
|
187
|
-
return GitOperationResult(
|
|
188
|
-
repo_path=path,
|
|
189
|
-
action=action.value,
|
|
190
|
-
success=False,
|
|
191
|
-
message="Unknown error",
|
|
192
|
-
remote_count=remote_count
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
def print_git_operations_summary(summary: GitOperationSummary, operations_performed: list[str]) -> None:
|
|
197
|
-
"""Print a detailed summary of git operations with rich formatting and tables."""
|
|
198
|
-
from rich.console import Console
|
|
199
|
-
console = Console()
|
|
200
|
-
|
|
201
|
-
# Main summary panel
|
|
202
|
-
summary_stats = [
|
|
203
|
-
f"Total paths processed: {summary.total_paths_processed}",
|
|
204
|
-
f"Git repositories found: {summary.git_repos_found}",
|
|
205
|
-
f"Non-git paths skipped: {summary.non_git_paths}"
|
|
206
|
-
]
|
|
207
|
-
|
|
208
|
-
console.print(Panel.fit(
|
|
209
|
-
"\n".join(summary_stats),
|
|
210
|
-
title="[bold blue]📊 Git Operations Summary[/bold blue]",
|
|
211
|
-
border_style="blue"
|
|
212
|
-
))
|
|
213
|
-
|
|
214
|
-
# Statistics panels in columns
|
|
215
|
-
stat_panels = []
|
|
216
|
-
|
|
217
|
-
if "commit" in operations_performed:
|
|
218
|
-
commit_stats = [
|
|
219
|
-
f"Attempted: {summary.commits_attempted}",
|
|
220
|
-
f"Successful: {summary.commits_successful}",
|
|
221
|
-
f"No changes: {summary.commits_no_changes}",
|
|
222
|
-
f"Failed: {summary.commits_failed}"
|
|
223
|
-
]
|
|
224
|
-
stat_panels.append(Panel.fit(
|
|
225
|
-
"\n".join(commit_stats),
|
|
226
|
-
title="[bold green]💾 Commit Operations[/bold green]",
|
|
227
|
-
border_style="green"
|
|
228
|
-
))
|
|
229
|
-
|
|
230
|
-
if "pull" in operations_performed:
|
|
231
|
-
pull_stats = [
|
|
232
|
-
f"Attempted: {summary.pulls_attempted}",
|
|
233
|
-
f"Successful: {summary.pulls_successful}",
|
|
234
|
-
f"Failed: {summary.pulls_failed}"
|
|
235
|
-
]
|
|
236
|
-
stat_panels.append(Panel.fit(
|
|
237
|
-
"\n".join(pull_stats),
|
|
238
|
-
title="[bold cyan]⬇️ Pull Operations[/bold cyan]",
|
|
239
|
-
border_style="cyan"
|
|
240
|
-
))
|
|
241
|
-
|
|
242
|
-
if "push" in operations_performed:
|
|
243
|
-
push_stats = [
|
|
244
|
-
f"Attempted: {summary.pushes_attempted}",
|
|
245
|
-
f"Successful: {summary.pushes_successful}",
|
|
246
|
-
f"Failed: {summary.pushes_failed}"
|
|
247
|
-
]
|
|
248
|
-
stat_panels.append(Panel.fit(
|
|
249
|
-
"\n".join(push_stats),
|
|
250
|
-
title="[bold magenta]🚀 Push Operations[/bold magenta]",
|
|
251
|
-
border_style="magenta"
|
|
252
|
-
))
|
|
253
|
-
|
|
254
|
-
if stat_panels:
|
|
255
|
-
console.print(Columns(stat_panels, equal=True, expand=True))
|
|
256
|
-
|
|
257
|
-
# Repositories without remotes warning
|
|
258
|
-
if summary.repos_without_remotes:
|
|
259
|
-
repos_table = Table(title="[bold yellow]⚠️ Repositories Without Remotes[/bold yellow]")
|
|
260
|
-
repos_table.add_column("Repository Name", style="cyan", no_wrap=True)
|
|
261
|
-
repos_table.add_column("Full Path", style="dim")
|
|
262
|
-
|
|
263
|
-
for repo_path in summary.repos_without_remotes:
|
|
264
|
-
repos_table.add_row(repo_path.name, str(repo_path))
|
|
265
|
-
|
|
266
|
-
console.print(repos_table)
|
|
267
|
-
console.print("[yellow]These repositories cannot be pushed to remote servers.[/yellow]")
|
|
268
|
-
elif "push" in operations_performed:
|
|
269
|
-
console.print("[green]✅ All repositories have remote configurations.[/green]")
|
|
270
|
-
|
|
271
|
-
# Failed operations table
|
|
272
|
-
if summary.failed_operations:
|
|
273
|
-
failed_table = Table(title=f"[bold red]❌ Failed Operations ({len(summary.failed_operations)} total)[/bold red]")
|
|
274
|
-
failed_table.add_column("Action", style="bold red", no_wrap=True)
|
|
275
|
-
failed_table.add_column("Repository", style="cyan", no_wrap=True)
|
|
276
|
-
failed_table.add_column("Problem", style="red")
|
|
277
|
-
|
|
278
|
-
# Group failed operations by type for better organization
|
|
279
|
-
failed_by_action = {}
|
|
280
|
-
for failed_op in summary.failed_operations:
|
|
281
|
-
if failed_op.action not in failed_by_action:
|
|
282
|
-
failed_by_action[failed_op.action] = []
|
|
283
|
-
failed_by_action[failed_op.action].append(failed_op)
|
|
284
|
-
|
|
285
|
-
for action, failures in failed_by_action.items():
|
|
286
|
-
for failure in failures:
|
|
287
|
-
repo_name = failure.repo_path.name if failure.is_git_repo else f"{failure.repo_path.name} (not git repo)"
|
|
288
|
-
problem = failure.message if failure.is_git_repo else "Not a git repository"
|
|
289
|
-
failed_table.add_row(action.upper(), repo_name, problem)
|
|
290
|
-
|
|
291
|
-
console.print(failed_table)
|
|
292
|
-
else:
|
|
293
|
-
console.print("[green]✅ All git operations completed successfully![/green]")
|
|
294
|
-
|
|
295
|
-
# Overall success assessment
|
|
296
|
-
total_failed = len(summary.failed_operations)
|
|
297
|
-
total_operations = (summary.commits_attempted + summary.pulls_attempted +
|
|
298
|
-
summary.pushes_attempted)
|
|
299
|
-
|
|
300
|
-
if total_failed == 0 and total_operations > 0:
|
|
301
|
-
console.print(f"\n[bold green]🎉 SUCCESS: All {total_operations} operations completed successfully![/bold green]")
|
|
302
|
-
elif total_operations == 0:
|
|
303
|
-
console.print("\n[blue]📝 No git operations were performed.[/blue]")
|
|
304
|
-
else:
|
|
305
|
-
success_rate = ((total_operations - total_failed) / total_operations * 100) if total_operations > 0 else 0
|
|
306
|
-
if total_failed > 0:
|
|
307
|
-
console.print(f"\n[bold yellow]⚖️ SUMMARY: {total_operations - total_failed}/{total_operations} operations succeeded ({success_rate:.1f}% success rate)[/bold yellow]")
|
|
308
|
-
console.print("[yellow]Review the failed operations table above for details on what needs attention.[/yellow]")
|
|
309
|
-
else:
|
|
310
|
-
console.print(f"\n[bold green]⚖️ SUMMARY: {total_operations}/{total_operations} operations succeeded (100% success rate)[/bold green]")
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
def perform_git_operations(repos_root: PathExtended, pull: bool, commit: bool, push: bool, recursive: bool, auto_uv_sync: bool) -> None:
|
|
314
|
-
"""Perform git operations on all repositories and provide detailed summary."""
|
|
315
|
-
print(f"\n🔄 Performing Git actions on repositories @ `{repos_root}`...")
|
|
316
|
-
summary = GitOperationSummary()
|
|
317
|
-
operations_performed = []
|
|
318
|
-
# Determine which operations to perform
|
|
319
|
-
if pull:
|
|
320
|
-
operations_performed.append("pull")
|
|
321
|
-
if commit:
|
|
322
|
-
operations_performed.append("commit")
|
|
323
|
-
if push:
|
|
324
|
-
operations_performed.append("push")
|
|
325
|
-
|
|
326
|
-
for a_path in repos_root.search("*"):
|
|
327
|
-
print(f"{('Handling ' + str(a_path)).center(80, '-')}")
|
|
328
|
-
summary.total_paths_processed += 1
|
|
329
|
-
|
|
330
|
-
# Check if this is a git repository first
|
|
331
|
-
from git.exc import InvalidGitRepositoryError
|
|
332
|
-
from git.repo import Repo
|
|
333
|
-
|
|
334
|
-
try:
|
|
335
|
-
repo = Repo(str(a_path), search_parent_directories=False)
|
|
336
|
-
summary.git_repos_found += 1
|
|
337
|
-
|
|
338
|
-
# Track repos without remotes
|
|
339
|
-
if len(repo.remotes) == 0:
|
|
340
|
-
summary.repos_without_remotes.append(a_path)
|
|
341
|
-
|
|
342
|
-
# Now perform the actual operations
|
|
343
|
-
if pull:
|
|
344
|
-
result = git_action(path=a_path, action=GitAction.pull, r=recursive, auto_sync=auto_uv_sync)
|
|
345
|
-
summary.pulls_attempted += 1
|
|
346
|
-
if result.success:
|
|
347
|
-
summary.pulls_successful += 1
|
|
348
|
-
else:
|
|
349
|
-
summary.pulls_failed += 1
|
|
350
|
-
summary.failed_operations.append(result)
|
|
351
|
-
|
|
352
|
-
if commit:
|
|
353
|
-
result = git_action(a_path, action=GitAction.commit, r=recursive, auto_sync=auto_uv_sync)
|
|
354
|
-
summary.commits_attempted += 1
|
|
355
|
-
if result.success:
|
|
356
|
-
if result.had_changes:
|
|
357
|
-
summary.commits_successful += 1
|
|
358
|
-
else:
|
|
359
|
-
summary.commits_no_changes += 1
|
|
360
|
-
else:
|
|
361
|
-
summary.commits_failed += 1
|
|
362
|
-
summary.failed_operations.append(result)
|
|
363
|
-
|
|
364
|
-
if push:
|
|
365
|
-
result = git_action(a_path, action=GitAction.push, r=recursive, auto_sync=auto_uv_sync)
|
|
366
|
-
summary.pushes_attempted += 1
|
|
367
|
-
if result.success:
|
|
368
|
-
summary.pushes_successful += 1
|
|
369
|
-
else:
|
|
370
|
-
summary.pushes_failed += 1
|
|
371
|
-
summary.failed_operations.append(result)
|
|
372
|
-
|
|
373
|
-
except InvalidGitRepositoryError:
|
|
374
|
-
summary.non_git_paths += 1
|
|
375
|
-
pprint(f"⚠️ Skipping {a_path} because it is not a git repository.")
|
|
376
|
-
|
|
377
|
-
# Print the detailed summary
|
|
378
|
-
print_git_operations_summary(summary, operations_performed)
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import typer
|
|
3
|
-
from typing import Annotated
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def analyze_repo_development(repo_path: Annotated[str, typer.Argument(..., help="Path to the git repository")]):
|
|
7
|
-
from machineconfig.scripts.python.repos_helpers import count_lines
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
count_lines_path = Path(count_lines.__file__)
|
|
10
|
-
# --project $HOME/code/ machineconfig --group plot
|
|
11
|
-
cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=5.87" {count_lines_path} analyze-over-time {repo_path}"""
|
|
12
|
-
from machineconfig.utils.code import run_shell_script
|
|
13
|
-
run_shell_script(cmd)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if __name__ == "__main__":
|
|
17
|
-
pass
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
REM adopted from https://github.com/phiresky/ripgrep-all/wiki/fzf-Integration
|
|
3
|
-
|
|
4
|
-
@echo off
|
|
5
|
-
setlocal
|
|
6
|
-
|
|
7
|
-
set RG_PREFIX=rga --files-with-matches
|
|
8
|
-
set FZF_DEFAULT_COMMAND=%RG_PREFIX% %1
|
|
9
|
-
for /f "delims=" %%i in ('fzf --sort --preview "rga --pretty --context 5 {q} {}" --phony -q %1 --bind "change:reload:%RG_PREFIX% {q}" --preview-window="70%:wrap"') do (
|
|
10
|
-
set FILE=%%i
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
if not "%FILE%" == "" (
|
|
14
|
-
echo Opening %FILE%
|
|
15
|
-
start "" "%FILE%"
|
|
16
|
-
) else (
|
|
17
|
-
echo No file selected.
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
endlocal
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
winget install WinFsp.WinFsp; winget install SSHFS-Win.SSHFS-Win
|
|
4
|
-
|
|
5
|
-
$host = ''
|
|
6
|
-
$user = ''
|
|
7
|
-
$sharePath = ''
|
|
8
|
-
$driveLetter = ''
|
|
9
|
-
|
|
10
|
-
uv run --python 3.14 --with "machineconfig>=5.87" python -m machineconfig.scripts.python.mount_ssh
|
|
11
|
-
|
|
12
|
-
net use T: \\sshfs.kr\$user@$host.local
|
|
13
|
-
# this worked: net use T: \\sshfs\alex@alex-p51s-5.local
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# 🔍 Fuzzy Finder with Nano Editor Integration
|
|
3
|
-
|
|
4
|
-
# 📝 Open selected file in nano
|
|
5
|
-
nano (~/scripts/fzf2g) # space used for precedence in execution
|
|
6
|
-
|
|
7
|
-
# 💡 Alternative commands (commented):
|
|
8
|
-
# 🔎 FZF with bat preview:
|
|
9
|
-
# fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}'
|
|
10
|
-
|
|
11
|
-
# 🪟 Windows Git Bash version:
|
|
12
|
-
# & "C:\Program Files\Git\usr\bin\nano.exe" (fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}')
|
|
13
|
-
|
|
14
|
-
# 📜 PowerShell script integration:
|
|
15
|
-
# fzf | ~/scripts/nano.ps1
|
|
16
|
-
|