machineconfig 5.15__py3-none-any.whl → 7.66__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/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +0 -1
- 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 +114 -289
- machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- 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_reporter.py +4 -2
- 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 +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +2 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +1 -7
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/installer_data.json +1101 -115
- machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
- machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
- machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +108 -180
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +92 -103
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +111 -114
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -103
- machineconfig/scripts/python/devops_navigator.py +10 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/explore.py +49 -0
- machineconfig/scripts/python/fire_jobs.py +115 -152
- machineconfig/scripts/python/ftpx.py +29 -24
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -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 +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
- machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +64 -84
- machineconfig/scripts/python/machineconfig.py +63 -0
- machineconfig/scripts/python/msearch.py +21 -0
- machineconfig/scripts/python/nw/__init__.py +0 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
- machineconfig/scripts/python/sessions.py +64 -44
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- 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 +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +60 -43
- 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/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -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/yazi.toml +13 -0
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
- 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 +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +10 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +133 -106
- 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/dbms.py +257 -0
- machineconfig/utils/files/headers.py +11 -14
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +10 -18
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +13 -3
- machineconfig/utils/path_extended.py +46 -100
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +94 -97
- 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/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -264
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +2 -113
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +11 -4
- machineconfig-7.66.dist-info/METADATA +124 -0
- machineconfig-7.66.dist-info/RECORD +451 -0
- machineconfig-7.66.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/sessions_managers/ffile.py +0 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- 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/python/vscode/sync_code.py +0 -73
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -303
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/agents +0 -2
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/initai +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/cloud_repo_sync.py +0 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
- machineconfig/scripts/python/repos.py +0 -132
- machineconfig/scripts/python/repos_helper_action.py +0 -378
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/t4.py +0 -17
- machineconfig/scripts/windows/agents.ps1 +0 -1
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/initai.ps1 +0 -1
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig-5.15.dist-info/METADATA +0 -188
- machineconfig-5.15.dist-info/RECORD +0 -415
- machineconfig-5.15.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
"""utils"""
|
|
2
|
-
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
import git
|
|
5
|
-
from machineconfig.utils.io import read_ini
|
|
6
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
7
|
-
from machineconfig.utils.terminal import Response
|
|
8
|
-
|
|
9
|
-
from machineconfig.scripts.python.helpers.repo_sync_helpers import fetch_dotfiles
|
|
10
|
-
from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
|
|
11
|
-
from machineconfig.utils.options import choose_from_options
|
|
12
|
-
from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
|
|
13
|
-
import platform
|
|
14
|
-
import subprocess
|
|
15
|
-
from typing import Optional, Literal
|
|
16
|
-
from rich.console import Console
|
|
17
|
-
from rich.panel import Panel
|
|
18
|
-
|
|
19
|
-
console = Console()
|
|
20
|
-
|
|
21
|
-
_ = fetch_dotfiles
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def main(cloud: Optional[str] = None, path: Optional[str] = None, message: Optional[str] = None, action: Literal["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"] = "ask", pwd: Optional[str] = None):
|
|
25
|
-
if cloud is None:
|
|
26
|
-
try:
|
|
27
|
-
cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
|
|
28
|
-
console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", title="Default Cloud", border_style="yellow"))
|
|
29
|
-
except FileNotFoundError:
|
|
30
|
-
console.print(Panel(f"❌ ERROR: No cloud profile found\nLocation: {DEFAULTS_PATH}\nPlease set one up or provide one via the --cloud flag.", title="Error", border_style="red"))
|
|
31
|
-
return ""
|
|
32
|
-
else:
|
|
33
|
-
cloud_resolved = cloud
|
|
34
|
-
|
|
35
|
-
# repo_root = PathExtended(args.repo).expanduser().absolute()
|
|
36
|
-
repo_local_root = PathExtended.cwd() if path is None else PathExtended(path).expanduser().absolute()
|
|
37
|
-
repo_local_obj = git.Repo(repo_local_root, search_parent_directories=True)
|
|
38
|
-
repo_local_root = PathExtended(repo_local_obj.working_dir) # cwd might have been in a sub directory of repo_root, so its better to redefine it.
|
|
39
|
-
PathExtended(CONFIG_PATH).joinpath("remote").mkdir(parents=True, exist_ok=True)
|
|
40
|
-
repo_remote_root = PathExtended(CONFIG_PATH).joinpath("remote", repo_local_root.rel2home()) # .delete(sure=True)
|
|
41
|
-
|
|
42
|
-
try:
|
|
43
|
-
console.print(Panel("📥 DOWNLOADING REMOTE REPOSITORY", title_align="left", border_style="blue"))
|
|
44
|
-
remote_path = repo_local_root.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
|
|
45
|
-
repo_remote_root.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=pwd)
|
|
46
|
-
except AssertionError:
|
|
47
|
-
console.print(Panel("🆕 Remote repository doesn't exist\n📤 Creating new remote and exiting...", title_align="left", border_style="green"))
|
|
48
|
-
repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
|
|
49
|
-
return ""
|
|
50
|
-
|
|
51
|
-
repo_remote_obj = git.Repo(repo_remote_root)
|
|
52
|
-
if repo_remote_obj.is_dirty():
|
|
53
|
-
console.print(Panel(f"⚠️ WARNING: REMOTE REPOSITORY IS DIRTY\nLocation: {repo_remote_root}\nPlease commit or stash changes before proceeding.", title="Warning", border_style="yellow"))
|
|
54
|
-
|
|
55
|
-
script = f"""
|
|
56
|
-
echo ""
|
|
57
|
-
echo 'echo -e "\\033[1;34m═════ COMMITTING LOCAL CHANGES ═════\\033[0m"'
|
|
58
|
-
cd {repo_local_root}
|
|
59
|
-
git status
|
|
60
|
-
git add .
|
|
61
|
-
git commit -am "{message}"
|
|
62
|
-
echo ""
|
|
63
|
-
echo ""
|
|
64
|
-
echo 'echo -e "\\033[1;34m═════ PULLING LATEST FROM REMOTE ═════\\033[0m"'
|
|
65
|
-
cd {repo_local_root}
|
|
66
|
-
echo '-> Trying to removing originEnc remote from local repo if it exists.'
|
|
67
|
-
# git remote remove originEnc
|
|
68
|
-
git remote remove originEnc 2>/dev/null || true
|
|
69
|
-
echo '-> Adding originEnc remote to local repo'
|
|
70
|
-
git remote add originEnc {repo_remote_root}
|
|
71
|
-
echo '-> Fetching originEnc remote.'
|
|
72
|
-
git pull originEnc master
|
|
73
|
-
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
shell_path = write_shell_script_to_file(shell_script=script)
|
|
77
|
-
command = f". {shell_path}"
|
|
78
|
-
if platform.system() == "Windows":
|
|
79
|
-
completed = subprocess.run(["powershell", "-Command", command], capture_output=True, check=False, text=True)
|
|
80
|
-
else:
|
|
81
|
-
completed = subprocess.run(command, shell=True, capture_output=True, check=False, text=True)
|
|
82
|
-
res = Response.from_completed_process(completed).capture().print()
|
|
83
|
-
|
|
84
|
-
if res.is_successful(strict_err=True, strict_returcode=True):
|
|
85
|
-
console.print(Panel("✅ Pull succeeded!\n🧹 Removing originEnc remote and local copy\n📤 Pushing merged repository to cloud storage", title="Success", border_style="green"))
|
|
86
|
-
repo_remote_root.delete(sure=True)
|
|
87
|
-
from git.remote import Remote
|
|
88
|
-
|
|
89
|
-
Remote.remove(repo_local_obj, "originEnc")
|
|
90
|
-
repo_local_root.to_cloud(cloud=cloud_resolved, zip=True, encrypt=True, rel2home=True, pwd=pwd, os_specific=False)
|
|
91
|
-
return "success"
|
|
92
|
-
else:
|
|
93
|
-
console.print(Panel(f"⚠️ MERGE FAILED\n💾 Keeping local copy of remote at:\n📂 {repo_remote_root}", title="Merge Failed", border_style="red"))
|
|
94
|
-
|
|
95
|
-
# ================================================================================
|
|
96
|
-
option1 = "Delete remote copy and push local:"
|
|
97
|
-
program_1_py = f"""
|
|
98
|
-
from machineconfig.scripts.python.helpers.repo_sync_helpers import delete_remote_repo_copy_and_push_local as func
|
|
99
|
-
func(remote_repo=r'{str(repo_remote_root)}', local_repo=r'{str(repo_local_root)}', cloud=r'{cloud_resolved}')
|
|
100
|
-
"""
|
|
101
|
-
shell_file_1 = get_shell_file_executing_python_script(python_script=program_1_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
|
|
102
|
-
# ================================================================================
|
|
103
|
-
|
|
104
|
-
option2 = "Delete local repo and replace it with remote copy:"
|
|
105
|
-
program_2 = f"""
|
|
106
|
-
rm -rfd {repo_local_root}
|
|
107
|
-
mv {repo_remote_root} {repo_local_root}
|
|
108
|
-
"""
|
|
109
|
-
if platform.system() in ["Linux", "Darwin"]:
|
|
110
|
-
program_2 += """
|
|
111
|
-
sudo chmod 600 $HOME/.ssh/*
|
|
112
|
-
sudo chmod 700 $HOME/.ssh
|
|
113
|
-
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
114
|
-
"""
|
|
115
|
-
|
|
116
|
-
shell_file_2 = write_shell_script_to_file(shell_script=program_2)
|
|
117
|
-
|
|
118
|
-
# ================================================================================
|
|
119
|
-
option3 = "Inspect repos:"
|
|
120
|
-
program_3_py = f"""
|
|
121
|
-
from machineconfig.scripts.python.helper.repo_sync_helpers import inspect_repos as func
|
|
122
|
-
func(repo_local_root=r'{str(repo_local_root)}', repo_remote_root=r'{str(repo_remote_root)}')
|
|
123
|
-
"""
|
|
124
|
-
shell_file_3 = get_shell_file_executing_python_script(python_script=program_3_py, ve_path=str(Path.home().joinpath("code", "machineconfig", ".venv")))
|
|
125
|
-
# ================================================================================
|
|
126
|
-
|
|
127
|
-
option4 = "Remove problematic rclone file from repo and replace with remote:"
|
|
128
|
-
program_4 = f"""
|
|
129
|
-
rm $HOME/dotfiles/creds/rclone/rclone.conf
|
|
130
|
-
cp $HOME/.config/machineconfig/remote/dotfiles/creds/rclone/rclone.conf $HOME/dotfiles/creds/rclone
|
|
131
|
-
cd $HOME/dotfiles
|
|
132
|
-
git commit -am "finished merging"
|
|
133
|
-
. {shell_file_1}
|
|
134
|
-
"""
|
|
135
|
-
shell_file_4 = write_shell_script_to_file(shell_script=program_4)
|
|
136
|
-
# ================================================================================
|
|
137
|
-
|
|
138
|
-
console.print(Panel("🔄 RESOLVE MERGE CONFLICT\nChoose an option to resolve the conflict:", title_align="left", border_style="blue"))
|
|
139
|
-
|
|
140
|
-
print(f"• 1️⃣ {option1:75} 👉 {shell_file_1}")
|
|
141
|
-
print(f"• 2️⃣ {option2:75} 👉 {shell_file_2}")
|
|
142
|
-
print(f"• 3️⃣ {option3:75} 👉 {shell_file_3}")
|
|
143
|
-
print(f"• 4️⃣ {option4:75} 👉 {shell_file_4}")
|
|
144
|
-
|
|
145
|
-
program_content = None
|
|
146
|
-
match action:
|
|
147
|
-
case "ask":
|
|
148
|
-
choice = choose_from_options(multi=False, msg="Choose one option", options=[option1, option2, option3, option4], fzf=False)
|
|
149
|
-
if choice == option1:
|
|
150
|
-
program_content = shell_file_1.read_text(encoding="utf-8")
|
|
151
|
-
elif choice == option2:
|
|
152
|
-
program_content = program_2
|
|
153
|
-
elif choice == option3:
|
|
154
|
-
program_content = shell_file_3.read_text(encoding="utf-8")
|
|
155
|
-
elif choice == option4:
|
|
156
|
-
program_content = program_4
|
|
157
|
-
else:
|
|
158
|
-
raise NotImplementedError(f"Choice {choice} not implemented.")
|
|
159
|
-
case "pushLocalMerge":
|
|
160
|
-
program_content = shell_file_1.read_text(encoding="utf-8")
|
|
161
|
-
case "overwriteLocal":
|
|
162
|
-
program_content = program_2
|
|
163
|
-
case "InspectRepos":
|
|
164
|
-
program_content = shell_file_3.read_text(encoding="utf-8")
|
|
165
|
-
case "RemoveLocalRclone":
|
|
166
|
-
program_content = program_4
|
|
167
|
-
case _:
|
|
168
|
-
raise ValueError(f"Unknown action: {action}")
|
|
169
|
-
# PROGRAM_PATH.write_text(program_content, encoding="utf-8")
|
|
170
|
-
subprocess.run(program_content, shell=True, check=True)
|
|
171
|
-
|
|
172
|
-
return program_content
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
def args_parser():
|
|
176
|
-
# console.print(Panel("🔄 Repository Synchronization Utility", title_align="left", border_style="blue"))
|
|
177
|
-
# parser = argparse.ArgumentParser(description="Secure Repo CLI.")
|
|
178
|
-
# parser.add_argument("path", nargs="?", type=str, help="Repository path, defaults to cwd.", default=None)
|
|
179
|
-
# parser.add_argument("--cloud", "-c", help="rclone cloud profile name.", default=None)
|
|
180
|
-
# parser.add_argument("--message", "-m", help="Commit Message", default=f"new message {randstr()}")
|
|
181
|
-
# parser.add_argument("--pwd", "-p", help="Password for encryption", default=None)
|
|
182
|
-
# parser.add_argument("--action", "-a", help="Action to take if merge fails.", choices=["ask", "pushLocalMerge", "overwriteLocal", "InspectRepos", "RemoveLocalRclone"], default="ask")
|
|
183
|
-
# args = parser.parse_args()
|
|
184
|
-
# main(cloud=args.cloud, path=args.path, message=args.message, action=args.action)
|
|
185
|
-
import typer
|
|
186
|
-
typer.run(main)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if __name__ == "__main__":
|
|
190
|
-
args_parser()
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import typer
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to the git repository")):
|
|
6
|
-
from machineconfig.scripts.python import count_lines
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
count_lines_path = Path(count_lines.__file__)
|
|
9
|
-
# --project $HOME/code/machineconfig
|
|
10
|
-
cmd = f"""uv run --python 3.13 --with machineconfig[plot] {count_lines_path} analyze-over-time {repo_path}"""
|
|
11
|
-
from machineconfig.utils.code import run_shell_script
|
|
12
|
-
run_shell_script(cmd)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if __name__ == "__main__":
|
|
16
|
-
pass
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"""Like yadm and dotter."""
|
|
2
|
-
|
|
3
|
-
from typing import Annotated
|
|
4
|
-
|
|
5
|
-
import typer
|
|
6
|
-
from rich.console import Console
|
|
7
|
-
from rich.panel import Panel
|
|
8
|
-
|
|
9
|
-
from machineconfig.utils.links import symlink_func
|
|
10
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
11
|
-
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, REPO_ROOT
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
console = Console()
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def main(
|
|
18
|
-
file: Annotated[str, typer.Argument(help="file/folder path.")],
|
|
19
|
-
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
|
|
20
|
-
dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
|
|
21
|
-
) -> None:
|
|
22
|
-
orig_path = PathExtended(file).expanduser().absolute()
|
|
23
|
-
if dest == "":
|
|
24
|
-
if "Local" in str(orig_path):
|
|
25
|
-
junction = orig_path.split(at="Local", sep=-1)[1]
|
|
26
|
-
elif "Roaming" in str(orig_path):
|
|
27
|
-
junction = orig_path.split(at="Roaming", sep=-1)[1]
|
|
28
|
-
elif ".config" in str(orig_path):
|
|
29
|
-
junction = orig_path.split(at=".config", sep=-1)[1]
|
|
30
|
-
else:
|
|
31
|
-
junction = orig_path.rel2home()
|
|
32
|
-
new_path = PathExtended(REPO_ROOT).joinpath(junction)
|
|
33
|
-
else:
|
|
34
|
-
dest_path = PathExtended(dest).expanduser().absolute()
|
|
35
|
-
dest_path.mkdir(parents=True, exist_ok=True)
|
|
36
|
-
new_path = dest_path.joinpath(orig_path.name)
|
|
37
|
-
|
|
38
|
-
symlink_func(this=orig_path, to_this=new_path, prioritize_to_this=overwrite)
|
|
39
|
-
|
|
40
|
-
console.print(
|
|
41
|
-
Panel(
|
|
42
|
-
"\n".join(
|
|
43
|
-
[
|
|
44
|
-
"✅ Symbolic link created successfully!",
|
|
45
|
-
"🔄 Add the following snippet to mapper.toml to persist this mapping:",
|
|
46
|
-
]
|
|
47
|
-
),
|
|
48
|
-
title="Symlink Created",
|
|
49
|
-
border_style="green",
|
|
50
|
-
padding=(1, 2),
|
|
51
|
-
)
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
mapper_snippet = "\n".join(
|
|
55
|
-
[
|
|
56
|
-
f"[bold]📝 Edit configuration file:[/] [cyan]nano {PathExtended(LIBRARY_ROOT)}/symlinks/mapper.toml[/cyan]",
|
|
57
|
-
"",
|
|
58
|
-
f"[{new_path.parent.name}]",
|
|
59
|
-
f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
|
|
60
|
-
]
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
console.print(
|
|
64
|
-
Panel(
|
|
65
|
-
mapper_snippet,
|
|
66
|
-
title="Mapper Entry",
|
|
67
|
-
border_style="cyan",
|
|
68
|
-
padding=(1, 2),
|
|
69
|
-
)
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def arg_parser() -> None:
|
|
74
|
-
typer.run(main)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if __name__ == "__main__":
|
|
78
|
-
arg_parser()
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
from typing import Literal, TypeAlias
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
AGENTS: TypeAlias = Literal[
|
|
6
|
-
"cursor-agent", "gemini", "crush", "q"
|
|
7
|
-
# warp terminal
|
|
8
|
-
]
|
|
9
|
-
AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
|
|
10
|
-
|
|
11
|
-
SEARCH_STRATEGIES: TypeAlias = Literal["file_path", "keyword_search", "filename_pattern"]
|
|
12
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
|
|
5
|
-
_ = wd1, wd2
|
|
6
|
-
lines = [
|
|
7
|
-
""" zellij action new-tab --name gitdiff""",
|
|
8
|
-
"""zellij action new-pane --direction down --name local --cwd ./data """,
|
|
9
|
-
"""zellij action write-chars "cd '{wd1}'; git status" """,
|
|
10
|
-
"""zellij action move-focus up; zellij action close-pane """,
|
|
11
|
-
"""zellij action new-pane --direction down --name remote --cwd code """,
|
|
12
|
-
"""zellij action write-chars "cd '{wd2}' """,
|
|
13
|
-
"""git status" """,
|
|
14
|
-
]
|
|
15
|
-
return "; ".join(lines)
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# # as per https://github.com/marketplace/models/azure-openai/o1-preview
|
|
2
|
-
# from openai import OpenAI
|
|
3
|
-
# from machineconfig.utils.path_reduced import P as PathExtended
|
|
4
|
-
# from machineconfig.utils.utils2 import read_ini
|
|
5
|
-
# from rich import print as rprint
|
|
6
|
-
# from rich.panel import Panel
|
|
7
|
-
# from typing import Any
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
|
|
11
|
-
# endpoint = "https://models.inference.ai.azure.com"
|
|
12
|
-
# model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
|
|
13
|
-
# client__ = OpenAI(
|
|
14
|
-
# base_url=endpoint,
|
|
15
|
-
# api_key=gh_token,
|
|
16
|
-
# )
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
|
|
20
|
-
# print(f"""
|
|
21
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
22
|
-
# │ 🤖 Querying Model: {model_name}
|
|
23
|
-
# │ Sending request to API...
|
|
24
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
25
|
-
# try:
|
|
26
|
-
# response = client.chat.completions.create(
|
|
27
|
-
# messages=messages,
|
|
28
|
-
# model=model_name
|
|
29
|
-
# )
|
|
30
|
-
# return response.choices
|
|
31
|
-
# except Exception as e:
|
|
32
|
-
# print(f"""
|
|
33
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
34
|
-
# ┃ ❌ API Error with model {model_name}
|
|
35
|
-
# ┃ {str(e)}
|
|
36
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
37
|
-
# return None
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# def interactive_chat():
|
|
41
|
-
# conversation_history = []
|
|
42
|
-
# model_index = 0
|
|
43
|
-
# model_name = model_name_preferences[model_index]
|
|
44
|
-
|
|
45
|
-
# print("""
|
|
46
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
-
# ┃ 🚀 Interactive Chat Started
|
|
48
|
-
# ┃ Type your message and press Enter to chat
|
|
49
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
50
|
-
|
|
51
|
-
# while True:
|
|
52
|
-
# header = f" 🤖 Using Model: {model_name} "
|
|
53
|
-
# print(f"\n{header.center(80, '═')}\n")
|
|
54
|
-
|
|
55
|
-
# while True:
|
|
56
|
-
# try:
|
|
57
|
-
# user_input = input("💬 You: ")
|
|
58
|
-
# conversation_history.append({"role": "user", "content": user_input})
|
|
59
|
-
|
|
60
|
-
# while True:
|
|
61
|
-
# choices = get_response(client__, model_name, conversation_history)
|
|
62
|
-
# if choices is None:
|
|
63
|
-
# model_index += 1
|
|
64
|
-
# model_name = model_name_preferences[model_index % len(model_name_preferences)]
|
|
65
|
-
# print(f"""
|
|
66
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
67
|
-
# │ 🔄 Model Switch
|
|
68
|
-
# │ Now using: {model_name}
|
|
69
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
70
|
-
# continue
|
|
71
|
-
# else:
|
|
72
|
-
# break
|
|
73
|
-
|
|
74
|
-
# for a_choice in choices:
|
|
75
|
-
# response_content = a_choice.message.content
|
|
76
|
-
# print("\n" * 2)
|
|
77
|
-
# try:
|
|
78
|
-
# rprint(Panel(
|
|
79
|
-
# f"{response_content}",
|
|
80
|
-
# title=f"🤖 AI ({model_name})",
|
|
81
|
-
# border_style="blue"
|
|
82
|
-
# ))
|
|
83
|
-
# except Exception:
|
|
84
|
-
# # Fallback if rich formatting fails
|
|
85
|
-
# print(f"""
|
|
86
|
-
# ┌────────────────────────────────────────────────────────────────
|
|
87
|
-
# │ 🤖 AI ({model_name}):
|
|
88
|
-
# │
|
|
89
|
-
# {response_content}
|
|
90
|
-
# └────────────────────────────────────────────────────────────────""")
|
|
91
|
-
|
|
92
|
-
# conversation_history.append({"role": "assistant", "content": response_content})
|
|
93
|
-
# print("\n")
|
|
94
|
-
# except KeyboardInterrupt:
|
|
95
|
-
# print("""
|
|
96
|
-
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
|
-
# ┃ 👋 Chat Session Ended
|
|
98
|
-
# ┃ Thank you for using the interactive chat!
|
|
99
|
-
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
|
|
100
|
-
# return
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
# if __name__ == "__main__":
|
|
104
|
-
# interactive_chat()
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
2
|
-
from machineconfig.utils.terminal import Response
|
|
3
|
-
from machineconfig.scripts.python.get_zellij_cmd import get_zellij_cmd
|
|
4
|
-
from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
|
|
5
|
-
from machineconfig.utils.io import read_ini
|
|
6
|
-
from machineconfig.utils.code import write_shell_script_to_file
|
|
7
|
-
import platform
|
|
8
|
-
import subprocess
|
|
9
|
-
from rich.console import Console
|
|
10
|
-
from rich.panel import Panel
|
|
11
|
-
|
|
12
|
-
console = Console()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def delete_remote_repo_copy_and_push_local(remote_repo: str, local_repo: str, cloud: str):
|
|
16
|
-
console.print(Panel("🗑️ Deleting remote repo copy and pushing local copy", title="[bold blue]Repo Sync[/bold blue]", border_style="blue"))
|
|
17
|
-
repo_sync_root = PathExtended(remote_repo).expanduser().absolute()
|
|
18
|
-
repo_root_path = PathExtended(local_repo).expanduser().absolute()
|
|
19
|
-
repo_sync_root.delete(sure=True)
|
|
20
|
-
print("🧹 Removed temporary remote copy")
|
|
21
|
-
from git.remote import Remote
|
|
22
|
-
from git.repo import Repo
|
|
23
|
-
|
|
24
|
-
try:
|
|
25
|
-
Remote.remove(Repo(repo_root_path), "originEnc")
|
|
26
|
-
console.print(Panel("🔗 Removed originEnc remote reference", border_style="blue"))
|
|
27
|
-
except Exception:
|
|
28
|
-
pass # type: ignore
|
|
29
|
-
console.print(Panel("📈 Deleting remote repository copy and pushing local changes", width=150, border_style="blue"))
|
|
30
|
-
|
|
31
|
-
repo_root_path.to_cloud(cloud=cloud, zip=True, encrypt=True, rel2home=True, os_specific=False)
|
|
32
|
-
|
|
33
|
-
console.print(Panel("✅ Repository successfully pushed to cloud", title="[bold green]Repo Sync[/bold green]", border_style="green"))
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# import sys
|
|
37
|
-
# import subprocess
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def get_wt_cmd(wd1: PathExtended, wd2: PathExtended) -> str:
|
|
41
|
-
lines = [
|
|
42
|
-
f"""wt --window 0 new-tab --profile pwsh --title "gitdiff" --tabColor `#3b04d1 --startingDirectory {wd1} ` --colorScheme "Solarized Dark" """,
|
|
43
|
-
f"""split-pane --horizontal --profile pwsh --startingDirectory {wd2} --size 0.5 --colorScheme "Tango Dark" -- pwsh -Interactive """,
|
|
44
|
-
]
|
|
45
|
-
return " `; ".join(lines)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def inspect_repos(repo_local_root: str, repo_remote_root: str):
|
|
49
|
-
console.print(Panel(f"📂 Local: {repo_local_root}\n📂 Remote: {repo_remote_root}", title="[bold blue]🔍 Inspecting Repositories[/bold blue]", border_style="blue"))
|
|
50
|
-
|
|
51
|
-
if platform.system() == "Windows":
|
|
52
|
-
program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
|
|
53
|
-
write_shell_script_to_file(shell_script=program)
|
|
54
|
-
return None
|
|
55
|
-
elif platform.system() in ["Linux", "Darwin"]:
|
|
56
|
-
program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
|
|
57
|
-
write_shell_script_to_file(shell_script=program)
|
|
58
|
-
return None
|
|
59
|
-
else:
|
|
60
|
-
raise NotImplementedError(f"Platform {platform.system()} not implemented.")
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def fetch_dotfiles():
|
|
64
|
-
console.print(Panel("📁 Fetching Dotfiles", title="[bold blue]Dotfiles[/bold blue]", border_style="blue"))
|
|
65
|
-
|
|
66
|
-
cloud_resolved = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
|
|
67
|
-
console.print(Panel(f"⚠️ Using default cloud: `{cloud_resolved}` from {DEFAULTS_PATH}", width=150, border_style="yellow"))
|
|
68
|
-
|
|
69
|
-
dotfiles_local = PathExtended.home().joinpath("dotfiles")
|
|
70
|
-
CONFIG_PATH.joinpath("remote").mkdir(parents=True, exist_ok=True)
|
|
71
|
-
dotfiles_remote = PathExtended(CONFIG_PATH).joinpath("remote", dotfiles_local.rel2home())
|
|
72
|
-
remote_path = dotfiles_local.get_remote_path(rel2home=True, os_specific=False, root="myhome") + ".zip.enc"
|
|
73
|
-
|
|
74
|
-
console.print(Panel("📥 Downloading dotfiles from cloud...", width=150, border_style="blue"))
|
|
75
|
-
|
|
76
|
-
dotfiles_remote.from_cloud(remotepath=remote_path, cloud=cloud_resolved, unzip=True, decrypt=True, rel2home=True, os_specific=False, pwd=None)
|
|
77
|
-
|
|
78
|
-
console.print(Panel("🗑️ Removing old dotfiles and replacing with cloud version...", width=150, border_style="blue"))
|
|
79
|
-
|
|
80
|
-
dotfiles_local.delete(sure=True)
|
|
81
|
-
dotfiles_remote.move(folder=PathExtended.home())
|
|
82
|
-
script = f"""
|
|
83
|
-
# rm -rf {dotfiles_local}
|
|
84
|
-
# mv {dotfiles_remote} {dotfiles_local}
|
|
85
|
-
"""
|
|
86
|
-
if platform.system() == "Linux":
|
|
87
|
-
script += """
|
|
88
|
-
sudo chmod 600 $HOME/.ssh/*
|
|
89
|
-
sudo chmod 700 $HOME/.ssh
|
|
90
|
-
sudo chmod +x $HOME/dotfiles/scripts/linux -R
|
|
91
|
-
"""
|
|
92
|
-
shell_path = write_shell_script_to_file(shell_script=script)
|
|
93
|
-
completed = subprocess.run(f". {shell_path}", capture_output=True, check=False, text=True, shell=True)
|
|
94
|
-
Response.from_completed_process(completed).capture().print()
|
|
95
|
-
|
|
96
|
-
console.print(Panel("✅ Dotfiles successfully fetched and installed", title="[bold green]Dotfiles[/bold green]", border_style="green"))
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def check_dotfiles_version_is_beyond(commit_dtm: str, update: bool) -> bool:
|
|
100
|
-
dotfiles_path = str(PathExtended.home().joinpath("dotfiles"))
|
|
101
|
-
from git import Repo
|
|
102
|
-
|
|
103
|
-
repo = Repo(path=dotfiles_path)
|
|
104
|
-
last_commit = repo.head.commit
|
|
105
|
-
dtm = last_commit.committed_datetime
|
|
106
|
-
from datetime import datetime # make it tz unaware
|
|
107
|
-
|
|
108
|
-
dtm = datetime(dtm.year, dtm.month, dtm.day, dtm.hour, dtm.minute, dtm.second)
|
|
109
|
-
res = dtm > datetime.fromisoformat(commit_dtm)
|
|
110
|
-
if res is False and update is True:
|
|
111
|
-
console = Console()
|
|
112
|
-
console.print(Panel(f"🔄 UPDATE REQUIRED | Updating dotfiles because {dtm} < {datetime.fromisoformat(commit_dtm)}", border_style="bold blue", expand=False))
|
|
113
|
-
from machineconfig.scripts.python.cloud_repo_sync import main
|
|
114
|
-
|
|
115
|
-
main(cloud=None, path=dotfiles_path)
|
|
116
|
-
return res
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"""Repos CLI powered by Typer.
|
|
2
|
-
|
|
3
|
-
# TODO use gh api user --jq '.login' to get the username and use it to clone the repos.
|
|
4
|
-
in the event that username@github.com is not mentioned in the remote url.
|
|
5
|
-
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
from typing import Annotated, Optional
|
|
10
|
-
import typer
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
app = typer.Typer(help="� Manage development repositories", no_args_is_help=True)
|
|
15
|
-
sync_app = typer.Typer(help="� Manage repository specifications and syncing", no_args_is_help=True)
|
|
16
|
-
app.add_typer(sync_app, name="sync", help="� Sync repositories using saved specs")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
DirectoryArgument = Annotated[
|
|
20
|
-
Optional[str],
|
|
21
|
-
typer.Argument(help="📁 Folder containing repos or the specs JSON file to use."),
|
|
22
|
-
]
|
|
23
|
-
RecursiveOption = Annotated[
|
|
24
|
-
bool,
|
|
25
|
-
typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories."),
|
|
26
|
-
]
|
|
27
|
-
NoSyncOption = Annotated[
|
|
28
|
-
bool,
|
|
29
|
-
typer.Option("--no-sync", help="🚫 Disable automatic uv sync after pulls."),
|
|
30
|
-
]
|
|
31
|
-
CloudOption = Annotated[
|
|
32
|
-
Optional[str],
|
|
33
|
-
typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote."),
|
|
34
|
-
]
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@app.command()
|
|
39
|
-
def push(directory: DirectoryArgument = None,
|
|
40
|
-
recursive: RecursiveOption = False,
|
|
41
|
-
no_sync: NoSyncOption = False,
|
|
42
|
-
) -> None:
|
|
43
|
-
"""🚀 Push changes across repositories."""
|
|
44
|
-
from machineconfig.scripts.python.repos_helper import git_operations
|
|
45
|
-
git_operations(directory, pull=False, commit=False, push=True, recursive=recursive, no_sync=no_sync)
|
|
46
|
-
@app.command()
|
|
47
|
-
def pull(
|
|
48
|
-
directory: DirectoryArgument = None,
|
|
49
|
-
recursive: RecursiveOption = False,
|
|
50
|
-
no_sync: NoSyncOption = False,
|
|
51
|
-
) -> None:
|
|
52
|
-
"""⬇️ Pull changes across repositories."""
|
|
53
|
-
from machineconfig.scripts.python.repos_helper import git_operations
|
|
54
|
-
git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, no_sync=no_sync)
|
|
55
|
-
@app.command()
|
|
56
|
-
def commit(
|
|
57
|
-
directory: DirectoryArgument = None,
|
|
58
|
-
recursive: RecursiveOption = False,
|
|
59
|
-
no_sync: NoSyncOption = False,
|
|
60
|
-
) -> None:
|
|
61
|
-
"""💾 Commit changes across repositories."""
|
|
62
|
-
from machineconfig.scripts.python.repos_helper import git_operations
|
|
63
|
-
git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, no_sync=no_sync)
|
|
64
|
-
@app.command()
|
|
65
|
-
def all(
|
|
66
|
-
directory: DirectoryArgument = None,
|
|
67
|
-
recursive: RecursiveOption = False,
|
|
68
|
-
no_sync: NoSyncOption = False,
|
|
69
|
-
) -> None:
|
|
70
|
-
"""🔄 Pull, commit, and push changes across repositories."""
|
|
71
|
-
from machineconfig.scripts.python.repos_helper import git_operations
|
|
72
|
-
git_operations(directory, pull=True, commit=True, push=True, recursive=recursive, no_sync=no_sync)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
@sync_app.command()
|
|
76
|
-
def capture(
|
|
77
|
-
directory: DirectoryArgument = None,
|
|
78
|
-
cloud: CloudOption = None,
|
|
79
|
-
) -> None:
|
|
80
|
-
"""📝 Record repositories into a repos.json specification."""
|
|
81
|
-
from machineconfig.scripts.python.repos_helper import print_banner, resolve_directory
|
|
82
|
-
print_banner()
|
|
83
|
-
repos_root = resolve_directory(directory)
|
|
84
|
-
from machineconfig.scripts.python.repos_helper_record import main as record_repos
|
|
85
|
-
save_path = record_repos(repos_root=repos_root)
|
|
86
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
87
|
-
if cloud is not None:
|
|
88
|
-
PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
|
|
89
|
-
@sync_app.command()
|
|
90
|
-
def clone(
|
|
91
|
-
directory: DirectoryArgument = None,
|
|
92
|
-
cloud: CloudOption = None,
|
|
93
|
-
) -> None:
|
|
94
|
-
"""📥 Clone repositories described by a repos.json specification."""
|
|
95
|
-
from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
|
|
96
|
-
print_banner()
|
|
97
|
-
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
@sync_app.command(name="checkout-to-commit")
|
|
101
|
-
def checkout_command(
|
|
102
|
-
directory: DirectoryArgument = None,
|
|
103
|
-
cloud: CloudOption = None,
|
|
104
|
-
) -> None:
|
|
105
|
-
"""🔀 Check out specific commits listed in the specification."""
|
|
106
|
-
from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
|
|
107
|
-
print_banner()
|
|
108
|
-
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
@sync_app.command(name="checkout-to-branch")
|
|
112
|
-
def checkout_to_branch_command(
|
|
113
|
-
directory: DirectoryArgument = None,
|
|
114
|
-
cloud: CloudOption = None,
|
|
115
|
-
) -> None:
|
|
116
|
-
"""🔀 Check out to the main branch defined in the specification."""
|
|
117
|
-
from machineconfig.scripts.python.repos_helper import print_banner, clone_from_specs
|
|
118
|
-
print_banner()
|
|
119
|
-
clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
@app.command()
|
|
123
|
-
def analyze(
|
|
124
|
-
directory: DirectoryArgument = None,
|
|
125
|
-
) -> None:
|
|
126
|
-
"""📊 Analyze repository development over time."""
|
|
127
|
-
from machineconfig.scripts.python.repos_helper import print_banner
|
|
128
|
-
print_banner()
|
|
129
|
-
repo_path = directory if directory is not None else "."
|
|
130
|
-
from machineconfig.scripts.python.count_lines_frontend import analyze_repo_development
|
|
131
|
-
analyze_repo_development(repo_path=repo_path)
|
|
132
|
-
|