machineconfig 3.7__py3-none-any.whl → 7.69__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 +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- 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 -172
- 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 +7 -21
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +128 -0
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
- machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
- machineconfig/jobs/installer/custom_dev/brave.py +82 -0
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
- machineconfig/jobs/installer/custom_dev/goes.py +68 -0
- machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
- machineconfig/jobs/installer/custom_dev/redis.py +88 -0
- machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
- machineconfig/jobs/installer/installer_data.json +3440 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
- machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +255 -0
- 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/__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 +198 -0
- 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/{mcinit.py → initai.py} +3 -38
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- 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 +129 -198
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +45 -131
- machineconfig/scripts/python/devops_navigator.py +6 -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/fire_jobs.py +166 -235
- machineconfig/scripts/python/ftpx.py +164 -100
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- 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/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -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} +52 -39
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
- 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/helpers_devops/cli_terminal.py +156 -0
- 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/helpers_devops/devops_update_repos.py +269 -0
- 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/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -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 +620 -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} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- 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/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 +187 -0
- machineconfig/scripts/python/mcfg_entry.py +63 -0
- machineconfig/scripts/python/msearch.py +40 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- 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 -51
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -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/lfcd.ps1 +1 -1
- 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 +61 -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 +14 -1
- 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 +28 -203
- 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 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +52 -12
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- 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 +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
- machineconfig/utils/installer_utils/install_from_url.py +180 -0
- machineconfig/utils/installer_utils/installer_class.py +239 -316
- machineconfig/utils/installer_utils/installer_cli.py +186 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
- machineconfig/utils/installer_utils/installer_runner.py +191 -0
- machineconfig/utils/io.py +77 -24
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +19 -47
- machineconfig/utils/path_extended.py +111 -121
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +28 -6
- machineconfig/utils/schemas/layouts/layout_types.py +34 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- machineconfig-7.69.dist-info/METADATA +124 -0
- machineconfig-7.69.dist-info/RECORD +454 -0
- machineconfig-7.69.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/cli_click.py +0 -102
- machineconfig/cluster/templates/cli_gooey.py +0 -115
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -48
- machineconfig/jobs/python/vscode/link_ve.py +0 -63
- machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
- machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/gh.py +0 -97
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- 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 -169
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- 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/fire_agents +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/kill_process +0 -2
- machineconfig/scripts/linux/mcinit +0 -2
- machineconfig/scripts/linux/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +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/archive/im2text.py +0 -34
- machineconfig/scripts/python/archive/tmate_conn.py +0 -41
- machineconfig/scripts/python/archive/tmate_start.py +0 -44
- machineconfig/scripts/python/cloud_repo_sync.py +0 -192
- machineconfig/scripts/python/cloud_sync.py +0 -85
- machineconfig/scripts/python/devops_devapps_install.py +0 -202
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -176
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
- 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 -114
- machineconfig/scripts/python/repos.py +0 -160
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
- 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/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/mcinit.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/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.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/ascii_art.sh +0 -93
- 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/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer.py +0 -255
- machineconfig-3.7.dist-info/METADATA +0 -165
- machineconfig-3.7.dist-info/RECORD +0 -432
- machineconfig-3.7.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
- machineconfig/jobs/{python → installer}/__init__.py +0 -0
- machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
- machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +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_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/python_linux_installers → scripts/python/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/{jobs/python_linux_installers/dev → 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/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.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/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
- /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.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/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +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/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
"""Gource visualization tool for git repositories."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Annotated, Optional
|
|
5
|
+
import subprocess
|
|
6
|
+
import platform
|
|
7
|
+
import zipfile
|
|
8
|
+
import typer
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_gource_install_dir() -> Path:
|
|
12
|
+
"""Get the installation directory for portable Gource."""
|
|
13
|
+
if platform.system() == "Windows":
|
|
14
|
+
appdata = Path.home() / "AppData" / "Local"
|
|
15
|
+
return appdata / "gource"
|
|
16
|
+
else:
|
|
17
|
+
return Path.home() / ".local" / "bin" / "gource"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_gource_executable() -> Path:
|
|
21
|
+
"""Get the path to the gource executable (inside the extracted directory with DLLs)."""
|
|
22
|
+
install_dir = get_gource_install_dir()
|
|
23
|
+
if platform.system() == "Windows":
|
|
24
|
+
possible_paths = [
|
|
25
|
+
install_dir / "gource.exe",
|
|
26
|
+
install_dir / f"gource-{get_default_version()}.win64" / "gource.exe",
|
|
27
|
+
]
|
|
28
|
+
for path in possible_paths:
|
|
29
|
+
if path.exists():
|
|
30
|
+
return path
|
|
31
|
+
return install_dir / f"gource-{get_default_version()}.win64" / "gource.exe"
|
|
32
|
+
else:
|
|
33
|
+
return install_dir / "gource"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_default_version() -> str:
|
|
37
|
+
"""Get the default gource version."""
|
|
38
|
+
return "0.53"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def install_gource_windows(version: Optional[str] = None) -> None:
|
|
42
|
+
"""Install portable Gource on Windows by downloading and extracting the zip archive."""
|
|
43
|
+
if platform.system() != "Windows":
|
|
44
|
+
raise OSError(f"This installer is for Windows only. Current OS: {platform.system()}")
|
|
45
|
+
|
|
46
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
47
|
+
from machineconfig.utils.source_of_truth import INSTALL_TMP_DIR
|
|
48
|
+
|
|
49
|
+
print("\n" + "=" * 80)
|
|
50
|
+
print("🚀 GOURCE PORTABLE INSTALLATION 🚀")
|
|
51
|
+
print("=" * 80 + "\n")
|
|
52
|
+
|
|
53
|
+
version_str = version or get_default_version()
|
|
54
|
+
portable_url = f"https://github.com/acaudwell/Gource/releases/download/gource-{version_str}/gource-{version_str}.win64.zip"
|
|
55
|
+
install_dir = get_gource_install_dir()
|
|
56
|
+
|
|
57
|
+
print(f"📥 Downloading portable Gource from: {portable_url}")
|
|
58
|
+
downloaded_zip = PathExtended(portable_url).download(folder=INSTALL_TMP_DIR)
|
|
59
|
+
print(f"✅ Downloaded to: {downloaded_zip}")
|
|
60
|
+
|
|
61
|
+
print(f"\n� Extracting to: {install_dir}")
|
|
62
|
+
install_dir.mkdir(parents=True, exist_ok=True)
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
with zipfile.ZipFile(downloaded_zip, 'r') as zip_ref:
|
|
66
|
+
zip_ref.extractall(install_dir)
|
|
67
|
+
print(f"✅ Extracted successfully to: {install_dir}")
|
|
68
|
+
print(f" (The zip contains gource-{version_str}.win64/ directory with exe and DLL dependencies)")
|
|
69
|
+
except Exception as e:
|
|
70
|
+
print(f"❌ Extraction failed with error: {e}")
|
|
71
|
+
raise
|
|
72
|
+
|
|
73
|
+
print("\n🗑️ Cleaning up zip file...")
|
|
74
|
+
try:
|
|
75
|
+
downloaded_zip.unlink()
|
|
76
|
+
print(f"✅ Removed zip file: {downloaded_zip}")
|
|
77
|
+
except Exception as e:
|
|
78
|
+
print(f"⚠️ Warning: Could not remove zip file: {e}")
|
|
79
|
+
|
|
80
|
+
gource_exe = get_gource_executable()
|
|
81
|
+
if gource_exe.exists():
|
|
82
|
+
print(f"\n✅ Gource executable found at: {gource_exe}")
|
|
83
|
+
dll_dir = gource_exe.parent
|
|
84
|
+
dll_count = len(list(dll_dir.glob("*.dll")))
|
|
85
|
+
print(f" Found {dll_count} DLL dependencies in: {dll_dir}")
|
|
86
|
+
else:
|
|
87
|
+
print(f"\n⚠️ Warning: Expected executable not found at: {gource_exe}")
|
|
88
|
+
print(f" Contents of {install_dir}:")
|
|
89
|
+
for item in install_dir.rglob("*"):
|
|
90
|
+
if item.is_file():
|
|
91
|
+
print(f" - {item.relative_to(install_dir)}")
|
|
92
|
+
|
|
93
|
+
print("\n" + "=" * 80)
|
|
94
|
+
print("✅ GOURCE PORTABLE INSTALLATION COMPLETED")
|
|
95
|
+
print("=" * 80)
|
|
96
|
+
print(f"\n📌 Gource installed to: {install_dir}")
|
|
97
|
+
print(f" Executable: {gource_exe}")
|
|
98
|
+
print(" All DLL dependencies are kept together in the same directory.")
|
|
99
|
+
print(" This script will automatically use the portable version.")
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def visualize(
|
|
103
|
+
repo: Annotated[str, typer.Option("--repo", "-r", help="Path to git repository to visualize")] = ".",
|
|
104
|
+
output_file: Annotated[Optional[Path], typer.Option("--output", "-o", help="Output video file (e.g., output.mp4). If specified, gource will render to video.")] = None,
|
|
105
|
+
resolution: Annotated[str, typer.Option("--resolution", "-res", help="Video resolution (e.g., 1920x1080, 1280x720)")] = "1920x1080",
|
|
106
|
+
seconds_per_day: Annotated[float, typer.Option("--seconds-per-day", "-spd", help="Speed of simulation (lower = faster)")] = 0.1,
|
|
107
|
+
auto_skip_seconds: Annotated[float, typer.Option("--auto-skip-seconds", "-as", help="Skip to next entry if nothing happens for X seconds")] = 1.0,
|
|
108
|
+
title: Annotated[Optional[str], typer.Option("--title", "-t", help="Title for the visualization")] = None,
|
|
109
|
+
hide_items: Annotated[list[str], typer.Option("--hide", "-h", help="Items to hide: bloom, date, dirnames, files, filenames, mouse, progress, root, tree, users, usernames")] = [],
|
|
110
|
+
key_items: Annotated[bool, typer.Option("--key", "-k", help="Show file extension key")] = False,
|
|
111
|
+
fullscreen: Annotated[bool, typer.Option("--fullscreen", "-f", help="Run in fullscreen mode")] = False,
|
|
112
|
+
viewport: Annotated[Optional[str], typer.Option("--viewport", "-v", help="Camera viewport (e.g., '1000x1000')")] = None,
|
|
113
|
+
start_date: Annotated[Optional[str], typer.Option("--start-date", help="Start date (YYYY-MM-DD)")] = None,
|
|
114
|
+
stop_date: Annotated[Optional[str], typer.Option("--stop-date", help="Stop date (YYYY-MM-DD)")] = None,
|
|
115
|
+
user_image_dir: Annotated[Optional[Path], typer.Option("--user-image-dir", help="Directory with user avatar images")] = None,
|
|
116
|
+
max_files: Annotated[int, typer.Option("--max-files", help="Maximum number of files to show (0 = no limit)")] = 0,
|
|
117
|
+
max_file_lag: Annotated[float, typer.Option("--max-file-lag", help="Max time files remain on screen after last change")] = 5.0,
|
|
118
|
+
file_idle_time: Annotated[int, typer.Option("--file-idle-time", help="Time in seconds files remain idle before being removed")] = 0,
|
|
119
|
+
framerate: Annotated[int, typer.Option("--framerate", help="Frames per second for video output")] = 60,
|
|
120
|
+
background_color: Annotated[str, typer.Option("--background-color", help="Background color in hex (e.g., 000000 for black)")] = "000000",
|
|
121
|
+
font_size: Annotated[int, typer.Option("--font-size", help="Font size")] = 22,
|
|
122
|
+
camera_mode: Annotated[str, typer.Option("--camera-mode", help="Camera mode: overview or track")] = "overview",
|
|
123
|
+
) -> None:
|
|
124
|
+
"""
|
|
125
|
+
Visualize git repository history using Gource with reasonable defaults.
|
|
126
|
+
|
|
127
|
+
Examples:
|
|
128
|
+
# Basic visualization of current directory
|
|
129
|
+
python grource.py visualize
|
|
130
|
+
|
|
131
|
+
# Visualize specific repository
|
|
132
|
+
python grource.py visualize --repo-path /path/to/repo
|
|
133
|
+
|
|
134
|
+
# Create video output
|
|
135
|
+
python grource.py visualize --output output.mp4
|
|
136
|
+
|
|
137
|
+
# Fast visualization with custom title
|
|
138
|
+
python grource.py visualize --seconds-per-day 0.01 --title "My Project"
|
|
139
|
+
|
|
140
|
+
# Hide specific elements
|
|
141
|
+
python grource.py visualize --hide filenames --hide date
|
|
142
|
+
|
|
143
|
+
# Custom resolution and viewport
|
|
144
|
+
python grource.py visualize --resolution 2560x1440 --viewport 1200x1200
|
|
145
|
+
"""
|
|
146
|
+
print("\n" + "=" * 80)
|
|
147
|
+
print("🎬 GOURCE VISUALIZATION 🎬")
|
|
148
|
+
print("=" * 80 + "\n")
|
|
149
|
+
repo_path: Path = Path(repo).expanduser().resolve()
|
|
150
|
+
if not repo_path.exists():
|
|
151
|
+
print(f"❌ Error: Repository path does not exist: {repo_path}")
|
|
152
|
+
raise typer.Exit(1)
|
|
153
|
+
|
|
154
|
+
if not repo_path.joinpath(".git").exists():
|
|
155
|
+
print(f"❌ Error: Not a git repository: {repo_path}")
|
|
156
|
+
raise typer.Exit(1)
|
|
157
|
+
|
|
158
|
+
print(f"📁 Repository: {repo_path}")
|
|
159
|
+
print("⚙️ Configuration:")
|
|
160
|
+
print(f" - Resolution: {resolution}")
|
|
161
|
+
print(f" - Speed: {seconds_per_day} seconds per day")
|
|
162
|
+
print(f" - Auto-skip: {auto_skip_seconds} seconds")
|
|
163
|
+
if output_file:
|
|
164
|
+
print(f" - Output: {output_file}")
|
|
165
|
+
print()
|
|
166
|
+
|
|
167
|
+
gource_exe: Path = get_gource_executable()
|
|
168
|
+
if not gource_exe.exists():
|
|
169
|
+
if platform.system() == "Windows":
|
|
170
|
+
print(f"⚠️ Portable gource not found at {gource_exe}, installing...")
|
|
171
|
+
install_gource_windows()
|
|
172
|
+
# Check again after installation
|
|
173
|
+
if gource_exe.exists():
|
|
174
|
+
print(f"✅ Gource installed successfully at: {gource_exe}")
|
|
175
|
+
gource_cmd: str = str(gource_exe)
|
|
176
|
+
else:
|
|
177
|
+
print("❌ Installation failed, falling back to system gource")
|
|
178
|
+
raise typer.Exit(1)
|
|
179
|
+
else:
|
|
180
|
+
raise FileNotFoundError(f"Gource executable not found at {gource_exe}. Please install gource using your package manager.")
|
|
181
|
+
else:
|
|
182
|
+
gource_cmd = str(gource_exe)
|
|
183
|
+
|
|
184
|
+
cmd: list[str] = [gource_cmd, str(repo_path)]
|
|
185
|
+
|
|
186
|
+
cmd.extend(["--seconds-per-day", str(seconds_per_day)])
|
|
187
|
+
cmd.extend(["--auto-skip-seconds", str(auto_skip_seconds)])
|
|
188
|
+
|
|
189
|
+
if resolution:
|
|
190
|
+
width, height = resolution.split("x")
|
|
191
|
+
cmd.extend(["-{}x{}".format(width, height)])
|
|
192
|
+
|
|
193
|
+
if title:
|
|
194
|
+
cmd.extend(["--title", title])
|
|
195
|
+
elif not title and not output_file:
|
|
196
|
+
cmd.extend(["--title", repo_path.name])
|
|
197
|
+
|
|
198
|
+
for hide_item in hide_items:
|
|
199
|
+
cmd.extend(["--hide", hide_item])
|
|
200
|
+
|
|
201
|
+
if key_items:
|
|
202
|
+
cmd.append("--key")
|
|
203
|
+
|
|
204
|
+
if fullscreen and not output_file:
|
|
205
|
+
cmd.append("--fullscreen")
|
|
206
|
+
|
|
207
|
+
if viewport:
|
|
208
|
+
cmd.extend(["--viewport", viewport])
|
|
209
|
+
|
|
210
|
+
if start_date:
|
|
211
|
+
cmd.extend(["--start-date", start_date])
|
|
212
|
+
|
|
213
|
+
if stop_date:
|
|
214
|
+
cmd.extend(["--stop-date", stop_date])
|
|
215
|
+
|
|
216
|
+
if user_image_dir and user_image_dir.exists():
|
|
217
|
+
cmd.extend(["--user-image-dir", str(user_image_dir)])
|
|
218
|
+
|
|
219
|
+
if max_files > 0:
|
|
220
|
+
cmd.extend(["--max-files", str(max_files)])
|
|
221
|
+
|
|
222
|
+
cmd.extend(["--max-file-lag", str(max_file_lag)])
|
|
223
|
+
|
|
224
|
+
if file_idle_time > 0:
|
|
225
|
+
cmd.extend(["--file-idle-time", str(file_idle_time)])
|
|
226
|
+
|
|
227
|
+
cmd.extend(["--background-colour", background_color])
|
|
228
|
+
cmd.extend(["--font-size", str(font_size)])
|
|
229
|
+
cmd.extend(["--camera-mode", camera_mode])
|
|
230
|
+
|
|
231
|
+
if output_file:
|
|
232
|
+
cmd.extend(["-r", str(framerate)])
|
|
233
|
+
if platform.system() == "Windows":
|
|
234
|
+
cmd.extend(["-o", "-"])
|
|
235
|
+
ffmpeg_cmd: list[str] = [
|
|
236
|
+
"ffmpeg",
|
|
237
|
+
"-y",
|
|
238
|
+
"-r", str(framerate),
|
|
239
|
+
"-f", "image2pipe",
|
|
240
|
+
"-vcodec", "ppm",
|
|
241
|
+
"-i", "-",
|
|
242
|
+
"-vcodec", "libx264",
|
|
243
|
+
"-preset", "medium",
|
|
244
|
+
"-pix_fmt", "yuv420p",
|
|
245
|
+
"-crf", "23",
|
|
246
|
+
str(output_file),
|
|
247
|
+
]
|
|
248
|
+
print("🎥 Rendering video...")
|
|
249
|
+
print(f" Command: {' '.join(cmd)} | {' '.join(ffmpeg_cmd)}")
|
|
250
|
+
print()
|
|
251
|
+
try:
|
|
252
|
+
gource_proc: subprocess.Popen[bytes] = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
|
253
|
+
ffmpeg_proc: subprocess.Popen[bytes] = subprocess.Popen(ffmpeg_cmd, stdin=gource_proc.stdout)
|
|
254
|
+
if gource_proc.stdout:
|
|
255
|
+
gource_proc.stdout.close()
|
|
256
|
+
ffmpeg_proc.communicate()
|
|
257
|
+
print(f"\n✅ Video saved to: {output_file}")
|
|
258
|
+
except subprocess.CalledProcessError as e:
|
|
259
|
+
print(f"❌ Error during video rendering: {e}")
|
|
260
|
+
raise typer.Exit(1)
|
|
261
|
+
except FileNotFoundError:
|
|
262
|
+
print("❌ Error: ffmpeg not found. Please install ffmpeg to create video output.")
|
|
263
|
+
print(" Download from: https://ffmpeg.org/download.html")
|
|
264
|
+
raise typer.Exit(1)
|
|
265
|
+
else:
|
|
266
|
+
cmd.extend(["-o", "-"])
|
|
267
|
+
ffmpeg_cmd = [
|
|
268
|
+
"ffmpeg",
|
|
269
|
+
"-y",
|
|
270
|
+
"-r", str(framerate),
|
|
271
|
+
"-f", "image2pipe",
|
|
272
|
+
"-vcodec", "ppm",
|
|
273
|
+
"-i", "-",
|
|
274
|
+
"-vcodec", "libx264",
|
|
275
|
+
"-preset", "medium",
|
|
276
|
+
"-pix_fmt", "yuv420p",
|
|
277
|
+
"-crf", "23",
|
|
278
|
+
str(output_file),
|
|
279
|
+
]
|
|
280
|
+
print("🎥 Rendering video...")
|
|
281
|
+
print(f" Command: {' '.join(cmd)} | {' '.join(ffmpeg_cmd)}")
|
|
282
|
+
print()
|
|
283
|
+
try:
|
|
284
|
+
gource_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
|
285
|
+
ffmpeg_proc = subprocess.Popen(ffmpeg_cmd, stdin=gource_proc.stdout)
|
|
286
|
+
if gource_proc.stdout:
|
|
287
|
+
gource_proc.stdout.close()
|
|
288
|
+
ffmpeg_proc.communicate()
|
|
289
|
+
print(f"\n✅ Video saved to: {output_file}")
|
|
290
|
+
except subprocess.CalledProcessError as e:
|
|
291
|
+
print(f"❌ Error during video rendering: {e}")
|
|
292
|
+
raise typer.Exit(1)
|
|
293
|
+
except FileNotFoundError:
|
|
294
|
+
print("❌ Error: ffmpeg not found. Please install ffmpeg to create video output.")
|
|
295
|
+
raise typer.Exit(1)
|
|
296
|
+
else:
|
|
297
|
+
print("🎬 Launching interactive visualization...")
|
|
298
|
+
print(f" Command: {' '.join(cmd)}")
|
|
299
|
+
print()
|
|
300
|
+
try:
|
|
301
|
+
subprocess.run(cmd, check=True)
|
|
302
|
+
except subprocess.CalledProcessError as e:
|
|
303
|
+
print(f"❌ Error running gource: {e}")
|
|
304
|
+
raise typer.Exit(1)
|
|
305
|
+
except FileNotFoundError:
|
|
306
|
+
print("❌ Error: gource not found. Please install gource first.")
|
|
307
|
+
if platform.system() == "Windows":
|
|
308
|
+
print(" Run: uv run python src/machineconfig/scripts/python/grource.py install")
|
|
309
|
+
else:
|
|
310
|
+
print(" For Linux/Mac, use your package manager:")
|
|
311
|
+
print(" - Ubuntu/Debian: sudo apt install gource")
|
|
312
|
+
print(" - macOS: brew install gource")
|
|
313
|
+
print(" - Fedora: sudo dnf install gource")
|
|
314
|
+
raise typer.Exit(1)
|
|
315
|
+
|
|
316
|
+
print("\n" + "=" * 80)
|
|
317
|
+
print("✅ VISUALIZATION COMPLETED")
|
|
318
|
+
print("=" * 80)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def install(
|
|
322
|
+
version: Annotated[Optional[str], typer.Option(..., "--version", "-v", help="Gource version to install")] = "0.53",
|
|
323
|
+
) -> None:
|
|
324
|
+
"""Install portable Gource on Windows (no admin privileges required)."""
|
|
325
|
+
if platform.system() == "Windows":
|
|
326
|
+
install_gource_windows(version=version)
|
|
327
|
+
else:
|
|
328
|
+
print(f"❌ Portable installer currently supports Windows only. Current OS: {platform.system()}")
|
|
329
|
+
print("For Linux/Mac, please use your package manager:")
|
|
330
|
+
print(" - Ubuntu/Debian: sudo apt install gource")
|
|
331
|
+
print(" - macOS: brew install gource")
|
|
332
|
+
print(" - Fedora: sudo dnf install gource")
|
|
333
|
+
raise typer.Exit(1)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
if __name__ == "__main__":
|
|
337
|
+
app = typer.Typer(help="Gource visualization tool for git repositories", add_help_option=False, add_completion=False)
|
|
338
|
+
app.command()(install)
|
|
339
|
+
app.command()(visualize)
|
|
340
|
+
app()
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
1
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
2
|
+
from pathlib import Path
|
|
2
3
|
from machineconfig.utils.schemas.repos.repos_types import GitVersionInfo, RepoRecordDict, RepoRemote
|
|
3
4
|
|
|
4
5
|
from machineconfig.utils.schemas.repos.repos_types import RepoRecordFile
|
|
5
|
-
from machineconfig.utils.source_of_truth import
|
|
6
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
6
7
|
from machineconfig.utils.io import save_json
|
|
7
8
|
|
|
8
9
|
from typing import Optional
|
|
@@ -185,8 +186,9 @@ def record_repos_recursively(repos_root: str, r: bool, progress: Progress | None
|
|
|
185
186
|
return res
|
|
186
187
|
|
|
187
188
|
|
|
188
|
-
def
|
|
189
|
+
def main_record(repos_root: Path):
|
|
189
190
|
print("\n📝 Recording repositories...")
|
|
191
|
+
repos_root = PathExtended(repos_root).expanduser().absolute()
|
|
190
192
|
|
|
191
193
|
# Count total directories and repositories for accurate progress tracking
|
|
192
194
|
print("🔍 Analyzing directory structure...")
|
|
@@ -240,7 +242,8 @@ def main(repos_root: PathExtended):
|
|
|
240
242
|
tree_structure = build_tree_structure(repo_records, repos_root)
|
|
241
243
|
print(tree_structure)
|
|
242
244
|
|
|
243
|
-
|
|
245
|
+
relative_repos_root = PathExtended(repos_root).expanduser().absolute().relative_to(Path.home())
|
|
246
|
+
save_path = CONFIG_ROOT.joinpath("repos").joinpath(relative_repos_root).joinpath("repos.json")
|
|
244
247
|
save_json(obj=res, path=save_path, indent=4)
|
|
245
248
|
pprint(f"📁 Result saved at {PathExtended(save_path)}")
|
|
246
249
|
print(">>>>>>>>> Finished Recording")
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
2
|
+
import platform
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.panel import Panel
|
|
6
|
+
|
|
7
|
+
console = Console()
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
|
|
11
|
+
_ = wd1, wd2
|
|
12
|
+
lines = [
|
|
13
|
+
""" zellij action new-tab --name gitdiff""",
|
|
14
|
+
"""zellij action new-pane --direction down --name local --cwd ./data """,
|
|
15
|
+
"""zellij action write-chars "cd '{wd1}'; git status" """,
|
|
16
|
+
"""zellij action move-focus up; zellij action close-pane """,
|
|
17
|
+
"""zellij action new-pane --direction down --name remote --cwd code """,
|
|
18
|
+
"""zellij action write-chars "cd '{wd2}' """,
|
|
19
|
+
"""git status" """,
|
|
20
|
+
]
|
|
21
|
+
return "; ".join(lines)
|
|
22
|
+
|
|
23
|
+
def delete_remote_repo_copy_and_push_local(remote_repo: str, local_repo: str, cloud: str):
|
|
24
|
+
console.print(Panel("🗑️ Deleting remote repo copy and pushing local copy", title="[bold blue]Repo Sync[/bold blue]", border_style="blue"))
|
|
25
|
+
repo_sync_root = PathExtended(remote_repo).expanduser().absolute()
|
|
26
|
+
repo_root_path = PathExtended(local_repo).expanduser().absolute()
|
|
27
|
+
repo_sync_root.delete(sure=True)
|
|
28
|
+
print("🧹 Removed temporary remote copy")
|
|
29
|
+
from git.remote import Remote
|
|
30
|
+
from git.repo import Repo
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
Remote.remove(Repo(repo_root_path), "originEnc")
|
|
34
|
+
console.print(Panel("🔗 Removed originEnc remote reference", border_style="blue"))
|
|
35
|
+
except Exception:
|
|
36
|
+
pass # type: ignore
|
|
37
|
+
console.print(Panel("📈 Deleting remote repository copy and pushing local changes", width=150, border_style="blue"))
|
|
38
|
+
|
|
39
|
+
repo_root_path.to_cloud(cloud=cloud, zip=True, encrypt=True, rel2home=True, os_specific=False)
|
|
40
|
+
|
|
41
|
+
console.print(Panel("✅ Repository successfully pushed to cloud", title="[bold green]Repo Sync[/bold green]", border_style="green"))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def get_wt_cmd(wd1: PathExtended, wd2: PathExtended) -> str:
|
|
46
|
+
lines = [
|
|
47
|
+
f"""wt --window 0 new-tab --profile pwsh --title "gitdiff" --tabColor `#3b04d1 --startingDirectory {wd1} ` --colorScheme "Solarized Dark" """,
|
|
48
|
+
f"""split-pane --horizontal --profile pwsh --startingDirectory {wd2} --size 0.5 --colorScheme "Tango Dark" -- pwsh -Interactive """,
|
|
49
|
+
]
|
|
50
|
+
return " `; ".join(lines)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def inspect_repos(repo_local_root: str, repo_remote_root: str):
|
|
54
|
+
console.print(Panel(f"📂 Local: {repo_local_root}\n📂 Remote: {repo_remote_root}", title="[bold blue]🔍 Inspecting Repositories[/bold blue]", border_style="blue"))
|
|
55
|
+
|
|
56
|
+
if platform.system() == "Windows":
|
|
57
|
+
program = get_wt_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_local_root))
|
|
58
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
59
|
+
program = get_zellij_cmd(wd1=PathExtended(repo_local_root), wd2=PathExtended(repo_remote_root))
|
|
60
|
+
else:
|
|
61
|
+
raise NotImplementedError(f"Platform {platform.system()} not implemented.")
|
|
62
|
+
import tempfile
|
|
63
|
+
with tempfile.NamedTemporaryFile(mode='w', suffix=".sh" if platform.system() != "Windows" else ".ps1", delete=False, encoding='utf-8') as temp_file:
|
|
64
|
+
temp_file.write(program)
|
|
65
|
+
temp_script_path = PathExtended(temp_file.name)
|
|
66
|
+
console.print(Panel(f"🚀 Launching repo inspection tool...\n\n[blue]{temp_script_path}[/blue]", border_style="blue"))
|
|
@@ -45,7 +45,7 @@ def run_uv_sync(repo_path: Path) -> bool:
|
|
|
45
45
|
try:
|
|
46
46
|
print(f"🔄 Running uv sync in {repo_path}")
|
|
47
47
|
# Run uv sync with output directly to terminal (no capture)
|
|
48
|
-
subprocess.run(["uv", "sync"], cwd=repo_path, check=True)
|
|
48
|
+
subprocess.run(["uv", "sync", "--no-dev"], cwd=repo_path, check=True)
|
|
49
49
|
print("✅ uv sync completed successfully")
|
|
50
50
|
return True
|
|
51
51
|
except subprocess.CalledProcessError as e:
|
|
@@ -65,7 +65,7 @@ def get_file_hash(file_path: Path) -> str | None:
|
|
|
65
65
|
return hashlib.sha256(file_path.read_bytes()).hexdigest()
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
def update_repository(repo: git.Repo,
|
|
68
|
+
def update_repository(repo: git.Repo, auto_uv_sync: bool, allow_password_prompt: bool) -> RepositoryUpdateResult:
|
|
69
69
|
"""Update a single repository and return detailed information about what happened."""
|
|
70
70
|
repo_path = Path(repo.working_dir)
|
|
71
71
|
print(f"🔄 {'Updating ' + str(repo_path):.^80}")
|
|
@@ -253,7 +253,7 @@ def update_repository(repo: git.Repo, auto_sync: bool, allow_password_prompt: bo
|
|
|
253
253
|
print(f"✅ Set permissions for {lf_exe_path}")
|
|
254
254
|
|
|
255
255
|
# Run uv sync if dependencies changed and auto_sync is enabled
|
|
256
|
-
if result["dependencies_changed"] and
|
|
256
|
+
if result["dependencies_changed"] and auto_uv_sync:
|
|
257
257
|
result["uv_sync_ran"] = True
|
|
258
258
|
result["uv_sync_success"] = run_uv_sync(repo_path)
|
|
259
259
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from typing import Optional, Annotated
|
|
4
|
+
import typer
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def create_from_function(
|
|
8
|
+
num_process: Annotated[int, typer.Option(..., "--num-process", "-n", help="Number of parallel processes to run")],
|
|
9
|
+
path: Annotated[str, typer.Option(..., "--path", "-p", help="Path to a Python or Shell script file or a directory containing such files")] = ".",
|
|
10
|
+
function: Annotated[Optional[str], typer.Option(..., "--function", "-f", help="Function to run from the Python file. If not provided, you will be prompted to choose.")] = None,
|
|
11
|
+
):
|
|
12
|
+
from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
|
|
13
|
+
from machineconfig.utils.options import choose_from_options
|
|
14
|
+
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
15
|
+
from machineconfig.utils.accessories import get_repo_root
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
path_obj = sanitize_path(path)
|
|
20
|
+
if not path_obj.exists():
|
|
21
|
+
suffixes = {".py"}
|
|
22
|
+
choice_file = match_file_name(sub_string=path, search_root=Path.cwd(), suffixes=suffixes)
|
|
23
|
+
elif path_obj.is_dir():
|
|
24
|
+
from machineconfig.utils.path_helper import search_for_files_of_interest
|
|
25
|
+
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
26
|
+
files = search_for_files_of_interest(path_obj, suffixes={".py", ".sh", ".ps1"})
|
|
27
|
+
print(f"🔍 Got #{len(files)} results.")
|
|
28
|
+
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
29
|
+
choice_file = Path(choice_file)
|
|
30
|
+
else:
|
|
31
|
+
choice_file = path_obj
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
repo_root = get_repo_root(Path(choice_file))
|
|
35
|
+
print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
|
|
36
|
+
ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
|
|
37
|
+
if ipy_profile is None:
|
|
38
|
+
ipy_profile = "default"
|
|
39
|
+
if ve_root_from_file is None:
|
|
40
|
+
raise ValueError(f"Could not determine virtual environment for file {choice_file}. Please ensure it is within a recognized project structure.")
|
|
41
|
+
|
|
42
|
+
_activate_ve_line = get_ve_activate_line(ve_root=ve_root_from_file)
|
|
43
|
+
|
|
44
|
+
# ========================= choosing function to run
|
|
45
|
+
if function is None or function.strip() == "":
|
|
46
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
|
|
47
|
+
choice_function, choice_file, _kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict={})
|
|
48
|
+
else:
|
|
49
|
+
choice_function = function
|
|
50
|
+
|
|
51
|
+
from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
|
|
52
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
53
|
+
layout: LayoutConfig = {"layoutName": "fireNprocess", "layoutTabs": []}
|
|
54
|
+
for an_arg in range(num_process):
|
|
55
|
+
layout["layoutTabs"].append({"tabName": f"tab{an_arg}", "startDir": str(Path.cwd()), "command": f"uv run -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={num_process}"})
|
|
56
|
+
print(layout)
|
|
57
|
+
run_zellij_layout(layout_config=layout)
|
|
58
|
+
|