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,14 +1,36 @@
|
|
|
1
|
+
|
|
1
2
|
from pathlib import Path
|
|
3
|
+
import platform
|
|
2
4
|
|
|
3
5
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
def create_dot_scripts(repo_root: Path) -> None:
|
|
7
9
|
scripts_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/scripts")
|
|
8
|
-
target_dir = repo_root.joinpath(".scripts")
|
|
10
|
+
target_dir = repo_root.joinpath(".ai/scripts")
|
|
11
|
+
import shutil
|
|
12
|
+
shutil.rmtree(target_dir, ignore_errors=True)
|
|
9
13
|
target_dir.mkdir(parents=True, exist_ok=True)
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
import platform
|
|
15
|
+
if platform.system() == "Windows":
|
|
16
|
+
script_path = scripts_dir.joinpath("lint_and_type_check.ps1")
|
|
17
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
18
|
+
script_path = scripts_dir.joinpath("lint_and_type_check.sh")
|
|
19
|
+
else:
|
|
20
|
+
raise NotImplementedError(f"Platform {platform.system()} is not supported.")
|
|
21
|
+
target_dir.joinpath(script_path.name).write_text(data=script_path.read_text(encoding="utf-8"), encoding="utf-8")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def adjust_for_os(config_path: Path) -> str:
|
|
25
|
+
if config_path.suffix not in [".md", ".txt"]:
|
|
26
|
+
return config_path.read_text(encoding="utf-8")
|
|
27
|
+
english_text = config_path.read_text(encoding="utf-8")
|
|
28
|
+
if platform.system() == "Windows":
|
|
29
|
+
return english_text.replace("bash", "PowerShell").replace("sh ", "pwsh ").replace("./", ".\\").replace(".sh", ".ps1")
|
|
30
|
+
elif platform.system() in ["Linux", "Darwin"]:
|
|
31
|
+
return english_text.replace("PowerShell", "bash").replace("pwsh ", "sh ").replace(".\\", "./").replace(".ps1", ".sh")
|
|
32
|
+
else:
|
|
33
|
+
raise NotImplementedError(f"Platform {platform.system()} is not supported.")
|
|
12
34
|
|
|
13
35
|
|
|
14
36
|
def adjust_gitignore(repo_root: Path) -> None:
|
|
@@ -22,10 +44,11 @@ def adjust_gitignore(repo_root: Path) -> None:
|
|
|
22
44
|
".links",
|
|
23
45
|
"notebooks",
|
|
24
46
|
".ai",
|
|
25
|
-
".scripts",
|
|
26
47
|
"GEMINI.md",
|
|
27
48
|
"CLAUDE.md",
|
|
49
|
+
"CRUSH.md",
|
|
28
50
|
".cursor",
|
|
51
|
+
".clinerules",
|
|
29
52
|
".github/instructions",
|
|
30
53
|
".github/chatmodes",
|
|
31
54
|
".github/prompts",
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def add_lint_and_type_check_task(repo_root: Path) -> None:
|
|
7
|
+
vscode_dir = repo_root / ".vscode"
|
|
8
|
+
vscode_dir.mkdir(parents=True, exist_ok=True)
|
|
9
|
+
tasks_json_path = vscode_dir / "tasks.json"
|
|
10
|
+
|
|
11
|
+
task_to_add = {
|
|
12
|
+
"label": "lint_and_type_check",
|
|
13
|
+
"type": "shell",
|
|
14
|
+
"linux": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
|
|
15
|
+
"osx": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
|
|
16
|
+
"windows": {"command": "pwsh", "args": ["-File", "./.ai/scripts/lint_and_type_check.ps1"]},
|
|
17
|
+
"presentation": {"reveal": "always", "panel": "new"},
|
|
18
|
+
"problemMatcher": [],
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if tasks_json_path.exists():
|
|
22
|
+
json_data = tasks_json_path.read_text(encoding="utf-8")
|
|
23
|
+
if not json_data.strip():
|
|
24
|
+
tasks_config: dict[str, Any] = {"version": "2.0.0", "tasks": []}
|
|
25
|
+
else:
|
|
26
|
+
tasks_config = json.loads(json_data)
|
|
27
|
+
assert isinstance(tasks_config, dict)
|
|
28
|
+
if "tasks" not in tasks_config:
|
|
29
|
+
tasks_config["tasks"] = []
|
|
30
|
+
existing_labels = {task.get("label") for task in tasks_config.get("tasks", [])}
|
|
31
|
+
if "lintAndTypeCheck" not in existing_labels:
|
|
32
|
+
tasks_config["tasks"].append(task_to_add)
|
|
33
|
+
else:
|
|
34
|
+
tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
|
|
35
|
+
|
|
36
|
+
with tasks_json_path.open("w") as f:
|
|
37
|
+
json.dump(tasks_config, f, indent="\t")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
import typer
|
|
3
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_sync import main as sync_main
|
|
4
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_copy import main as copy_main
|
|
5
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_mount import mount as mount_main
|
|
6
|
+
|
|
7
|
+
def get_app():
|
|
8
|
+
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
9
|
+
|
|
10
|
+
app.command(name="sync", no_args_is_help=True, help="""🔄 [s] Synchronize files/folders between local and cloud storage.""")(sync_main)
|
|
11
|
+
app.command(name="s", no_args_is_help=True, hidden=True)(sync_main) # short alias
|
|
12
|
+
|
|
13
|
+
app.command(name="copy", no_args_is_help=True, short_help="""📤 [c] Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
|
|
14
|
+
app.command(name="c", no_args_is_help=True, hidden=True)(copy_main) # short alias
|
|
15
|
+
|
|
16
|
+
app.command(name="mount", no_args_is_help=True, short_help="""🔗 [m] Mount cloud storage services like Google Drive, Dropbox, OneDrive, etc. as local drives.""")(mount_main)
|
|
17
|
+
app.command(name="m", no_args_is_help=True, hidden=True)(mount_main) # short alias
|
|
18
|
+
|
|
19
|
+
return app
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def main():
|
|
23
|
+
app = get_app()
|
|
24
|
+
app()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
if __name__ == "__main__":
|
|
28
|
+
pass
|
|
29
|
+
# a = get_app()(asdf)
|
|
@@ -2,156 +2,153 @@
|
|
|
2
2
|
|
|
3
3
|
"""
|
|
4
4
|
croshell
|
|
5
|
+
|
|
5
6
|
"""
|
|
6
7
|
|
|
7
8
|
from typing import Annotated, Optional
|
|
8
9
|
import typer
|
|
9
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
10
|
-
from machineconfig.utils.accessories import randstr
|
|
11
|
-
|
|
12
|
-
from machineconfig.utils.options import choose_from_options
|
|
13
|
-
# from machineconfig.utils.ve import get_ve_activate_line
|
|
14
|
-
from rich.console import Console
|
|
15
|
-
from rich.panel import Panel
|
|
16
|
-
# from rich.text import Text
|
|
17
|
-
|
|
18
|
-
console = Console()
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def add_print_header_pycode(path: str, title: str):
|
|
22
|
-
return f"""
|
|
23
|
-
try:
|
|
24
|
-
from crocodile.file_management import P as PathExtended
|
|
25
|
-
except ImportError:
|
|
26
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
27
|
-
pycode = PathExtended(r'{path}').read_text(encoding="utf-8")
|
|
28
|
-
pycode = pycode.split("except Exception: print(pycode)")[2]
|
|
29
|
-
|
|
30
|
-
try:
|
|
31
|
-
from rich.text import Text
|
|
32
|
-
from rich.panel import Panel
|
|
33
|
-
from rich.console import Console
|
|
34
|
-
from rich.syntax import Syntax
|
|
35
|
-
console = Console()
|
|
36
|
-
if pycode.strip() != "":
|
|
37
|
-
console.print(Panel(Syntax(pycode, lexer="python"), title='{title}'), style="bold red")
|
|
38
|
-
except Exception: print(pycode)
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def get_read_data_pycode(path: str):
|
|
43
|
-
return f"""
|
|
44
|
-
from rich.panel import Panel
|
|
45
|
-
from rich.text import Text
|
|
46
|
-
from rich.console import Console
|
|
47
|
-
console = Console()
|
|
48
|
-
p = PathExtended(r'{path}').absolute()
|
|
49
|
-
try:
|
|
50
|
-
from machineconfig.utils.files.read import Read
|
|
51
|
-
dat = Read.read(p)
|
|
52
|
-
if isinstance(dat, dict):
|
|
53
|
-
panel_title = f"📄 File Data: {{p.name}}"
|
|
54
|
-
console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
|
|
55
|
-
pprint(dat, PathExtended.name)
|
|
56
|
-
else:
|
|
57
|
-
panel_title = f"📄 Successfully read the file: {{p.name}}"
|
|
58
|
-
console.print(Panel(Text(str(dat), justify="left"), title=panel_title, expand=False))
|
|
59
|
-
except Exception as e:
|
|
60
|
-
error_message = f'''❌ ERROR READING FILE\nFile: {{p.name}}\nError: {{e}}'''
|
|
61
|
-
console.print(Panel(Text(error_message, justify="left"), title="Error", expand=False, border_style="red"))
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
10
|
|
|
65
11
|
|
|
66
|
-
def
|
|
12
|
+
def croshell(
|
|
13
|
+
path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
|
|
67
14
|
python: Annotated[bool, typer.Option("--python", "-p", help="flag to use python over IPython.")] = False,
|
|
68
|
-
fzf: Annotated[bool, typer.Option("--fzf", "-F", help="search with fuzzy finder for python scripts and run them")] = False,
|
|
69
|
-
ve: Annotated[Optional[str], typer.Option("--ve", "-v", help="virtual enviroment to use, defaults to activated ve, if existed, else ve.")] = None,
|
|
70
15
|
profile: Annotated[Optional[str], typer.Option("--profile", "-P", help="ipython profile to use, defaults to default profile.")] = None,
|
|
71
|
-
read: Annotated[str, typer.Option("--read", "-r", help="read a binary file.")] = "",
|
|
72
16
|
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
73
|
-
|
|
74
|
-
|
|
17
|
+
vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
|
|
18
|
+
# streamlit_viewer: Annotated[bool, typer.Option("--streamlit", "-s", help="view in streamlit app")] = False,
|
|
19
|
+
visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
|
|
20
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
|
|
75
21
|
) -> None:
|
|
22
|
+
from machineconfig.scripts.python.helpers_croshell.crosh import get_read_python_file_pycode, get_read_data_pycode
|
|
23
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
24
|
+
from machineconfig.utils.path_helper import get_choice_file
|
|
25
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
from machineconfig.utils.accessories import randstr
|
|
28
|
+
import json
|
|
29
|
+
from rich.console import Console
|
|
30
|
+
from rich.panel import Panel
|
|
31
|
+
console = Console()
|
|
32
|
+
|
|
76
33
|
# ==================================================================================
|
|
77
34
|
# flags processing
|
|
78
35
|
interactivity = "-i"
|
|
79
36
|
interpreter = "python" if python else "ipython"
|
|
80
37
|
ipython_profile: Optional[str] = profile
|
|
81
|
-
file_obj =
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
elif read != "":
|
|
94
|
-
if streamlit_viewer:
|
|
95
|
-
# text = "📊 STARTING STREAMLIT VIEWER"
|
|
96
|
-
# console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
97
|
-
# from machineconfig.scripts.python.viewer import run
|
|
98
|
-
# py_file_path = run(data_path=args.read, data=None, get_figure=None)
|
|
99
|
-
# final_program = f"""
|
|
100
|
-
# #!/bin/bash
|
|
101
|
-
# streamlit run {py_file_path}
|
|
102
|
-
# """
|
|
103
|
-
# PROGRAM_PATH.write_text(data=final_program, encoding="utf-8")
|
|
104
|
-
return None
|
|
105
|
-
file_obj = PathExtended(str(read).lstrip()).expanduser().absolute()
|
|
106
|
-
program = get_read_data_pycode(str(file_obj))
|
|
107
|
-
text = f"📄 Reading data from: {file_obj.name}"
|
|
108
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
109
|
-
|
|
38
|
+
file_obj = Path.cwd() # initialization value, could be modified according to args.
|
|
39
|
+
if path is not None:
|
|
40
|
+
choice_file = get_choice_file(path=path, suffixes={".*"})
|
|
41
|
+
if choice_file.suffix == ".py":
|
|
42
|
+
program = choice_file.read_text(encoding="utf-8")
|
|
43
|
+
text = f"📄 Selected file: {choice_file.name}"
|
|
44
|
+
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
45
|
+
else:
|
|
46
|
+
program = lambda_to_python_script(lambda: get_read_data_pycode(path=str(choice_file)),
|
|
47
|
+
in_global=True, import_module=False)
|
|
48
|
+
text = f"📄 Reading data from: {file_obj.name}"
|
|
49
|
+
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
110
50
|
else: # if nothing is specified, then run in interactive mode.
|
|
111
|
-
text = "⌨️ Entering interactive mode"
|
|
112
|
-
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
113
|
-
# from machineconfig.scripts.python.croshell import InteractiveShell
|
|
114
|
-
# InteractiveShell().run()
|
|
115
|
-
# return None
|
|
116
51
|
program = ""
|
|
117
|
-
|
|
118
52
|
preprogram = """
|
|
119
|
-
|
|
120
53
|
#%%
|
|
121
|
-
|
|
122
|
-
from machineconfig.utils.files.headers import print_header, print_logo
|
|
123
|
-
print_header()
|
|
124
|
-
print_logo("CROCODILE")
|
|
125
|
-
from pathlib import Path
|
|
126
|
-
|
|
127
54
|
"""
|
|
128
|
-
|
|
129
|
-
|
|
55
|
+
def preprogram_func():
|
|
56
|
+
from machineconfig.utils.files.headers import print_header, print_logo
|
|
57
|
+
print_header()
|
|
58
|
+
print_logo("Machineconfig")
|
|
59
|
+
from pathlib import Path
|
|
60
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
61
|
+
_ = Path, PathExtended # avoid unused import warnings
|
|
62
|
+
import inspect, textwrap
|
|
63
|
+
from types import FunctionType
|
|
64
|
+
def get_body_simple_function_no_args(f: FunctionType):
|
|
65
|
+
return textwrap.dedent("\n".join(inspect.getsource(f).splitlines()[1:]))
|
|
66
|
+
preprogram += get_body_simple_function_no_args(preprogram_func)
|
|
67
|
+
|
|
68
|
+
pyfile = PathExtended.tmp().joinpath(f"tmp_scripts/python/croshell/{randstr()}/script.py")
|
|
130
69
|
pyfile.parent.mkdir(parents=True, exist_ok=True)
|
|
131
70
|
|
|
132
71
|
title = "Reading Data"
|
|
133
|
-
|
|
72
|
+
def_code = lambda_to_python_script(lambda: get_read_python_file_pycode(path=str(pyfile), title=title),
|
|
73
|
+
in_global=False, import_module=False)
|
|
74
|
+
# print(def_code)
|
|
75
|
+
python_program = preprogram + "\n\n" + def_code + program
|
|
134
76
|
pyfile.write_text(python_program, encoding="utf-8")
|
|
135
77
|
# ve_root_from_file, ipython_profile = get_ve_path_and_ipython_profile(PathExtended(file))
|
|
136
78
|
ipython_profile = ipython_profile if ipython_profile is not None else "default"
|
|
137
79
|
# ve_activateion_line = get_ve_activate_line(ve_name=args.ve or ve_profile_suggested, a_path=str(PathExtended.cwd()))
|
|
138
80
|
|
|
81
|
+
# prepare notebook target path (avoid relying on locals())
|
|
82
|
+
nb_target = pyfile.with_suffix(".ipynb")
|
|
83
|
+
if jupyter:
|
|
84
|
+
try:
|
|
85
|
+
nb_path = pyfile.with_suffix(".ipynb")
|
|
86
|
+
nb_content = {
|
|
87
|
+
"cells": [
|
|
88
|
+
{
|
|
89
|
+
"cell_type": "code",
|
|
90
|
+
"metadata": {"language": "python"},
|
|
91
|
+
"source": [python_program],
|
|
92
|
+
"outputs": [],
|
|
93
|
+
"execution_count": None,
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"metadata": {},
|
|
97
|
+
"nbformat": 4,
|
|
98
|
+
"nbformat_minor": 5,
|
|
99
|
+
}
|
|
100
|
+
nb_path.write_text(json.dumps(nb_content), encoding="utf-8")
|
|
101
|
+
nb_target = nb_path
|
|
102
|
+
except Exception:
|
|
103
|
+
# if writing fails, fall back to the default nb_target already set
|
|
104
|
+
pass
|
|
139
105
|
if visidata:
|
|
140
|
-
|
|
106
|
+
if file_obj.suffix == ".json":
|
|
107
|
+
fire_line = f"uv run --python 3.14 --with visidata vd {str(file_obj)}"
|
|
108
|
+
else:
|
|
109
|
+
fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
|
|
110
|
+
elif marimo:
|
|
111
|
+
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
112
|
+
else: requirements = """--python 3.14 --with "marimo,cowsay,machineconfig[plot]>=7.66" """
|
|
113
|
+
fire_line = f"""
|
|
114
|
+
cd {str(pyfile.parent)}
|
|
115
|
+
uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
|
|
116
|
+
uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
|
|
117
|
+
"""
|
|
141
118
|
elif jupyter:
|
|
142
|
-
|
|
119
|
+
if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
|
|
120
|
+
else: requirements = """--with "cowsay,machineconfig[plot]>=7.66" """
|
|
121
|
+
fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
|
|
122
|
+
elif vscode:
|
|
123
|
+
fire_line = f"""
|
|
124
|
+
cd {str(pyfile.parent)}
|
|
125
|
+
uv init --python 3.14
|
|
126
|
+
uv venv
|
|
127
|
+
uv add "cowsay,machineconfig[plot]>=7.66"
|
|
128
|
+
# code serve-web
|
|
129
|
+
code --new-window {str(pyfile)}
|
|
130
|
+
"""
|
|
143
131
|
else:
|
|
144
132
|
if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
|
|
145
133
|
else: profile = ""
|
|
146
|
-
|
|
134
|
+
if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
|
|
135
|
+
else: ve_line = """--python 3.14 --with "cowsay,machineconfig[plot]>=7.66" """
|
|
136
|
+
# ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
|
|
137
|
+
# --python 3.14
|
|
138
|
+
fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
|
|
147
139
|
|
|
148
|
-
from machineconfig.utils.code import
|
|
149
|
-
|
|
140
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
141
|
+
exit_then_run_shell_script(fire_line, strict=False)
|
|
150
142
|
|
|
151
143
|
|
|
152
|
-
def
|
|
153
|
-
typer.run(
|
|
144
|
+
def main() -> None:
|
|
145
|
+
typer.run(croshell)
|
|
154
146
|
|
|
155
147
|
|
|
156
148
|
if __name__ == "__main__":
|
|
157
|
-
|
|
149
|
+
# def func(flag: Annotated[bool, typer.Option("--flag/-nf", help="dummy flag for debugging", flag_value=False, is_flag=True)]=True):
|
|
150
|
+
# console.print(f"flag: {flag}")
|
|
151
|
+
# app = typer.Typer()
|
|
152
|
+
# app.command()(func)
|
|
153
|
+
# app()
|
|
154
|
+
main()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
"""
|
|
3
|
+
Minimalist programs that only print scripts without frills so it can be sourced by by shell.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def define_scripts():
|
|
11
|
+
import platform
|
|
12
|
+
if platform.system() != "Linux":
|
|
13
|
+
raise RuntimeError("This command is only supported on Linux systems.")
|
|
14
|
+
from machineconfig.setup_linux import INTERACTIVE as script_path
|
|
15
|
+
script = script_path.read_text(encoding="utf-8")
|
|
16
|
+
print(script)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_app():
|
|
20
|
+
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
21
|
+
app.command(name="scripts", help="define all scripts", no_args_is_help=False)(define_scripts)
|
|
22
|
+
return app
|
|
23
|
+
|
|
24
|
+
def main():
|
|
25
|
+
# return app
|
|
26
|
+
app = get_app()
|
|
27
|
+
app()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# if __name__ == "__main__":
|
|
31
|
+
# main()
|
|
@@ -1,106 +1,47 @@
|
|
|
1
1
|
"""devops with emojis"""
|
|
2
2
|
|
|
3
|
-
import machineconfig.utils.installer_utils.installer as installer_entry_point
|
|
4
|
-
import machineconfig.scripts.python.share_terminal as share_terminal
|
|
5
|
-
import machineconfig.scripts.python.repos as repos
|
|
6
|
-
|
|
7
|
-
from machineconfig import __version__
|
|
8
3
|
import typer
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
""
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
@ssh_app.command()
|
|
54
|
-
def add_identity():
|
|
55
|
-
"""🗝️ SSH add identity (private key) to this machine"""
|
|
56
|
-
import machineconfig.scripts.python.devops_add_identity as helper
|
|
57
|
-
helper.main()
|
|
58
|
-
@ssh_app.command()
|
|
59
|
-
def connect():
|
|
60
|
-
"""🔐 SSH use key pair to connect two machines"""
|
|
61
|
-
raise NotImplementedError
|
|
62
|
-
@ssh_app.command()
|
|
63
|
-
def setup():
|
|
64
|
-
"""📡 SSH setup"""
|
|
65
|
-
_program_windows = """Invoke-WebRequest https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/openssh_all.ps1 | Invoke-Expression # https://github.com/thisismygitrepo.keys"""
|
|
66
|
-
_program_linux = """curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/openssh_all.sh | sudo bash # https://github.com/thisismygitrepo.keys"""
|
|
67
|
-
import subprocess
|
|
68
|
-
from platform import system
|
|
69
|
-
subprocess.run(_program_linux if system() == "Linux" else _program_windows, shell=True, check=True)
|
|
70
|
-
@ssh_app.command()
|
|
71
|
-
def setup_wsl():
|
|
72
|
-
"""🐧 SSH setup wsl"""
|
|
73
|
-
import subprocess
|
|
74
|
-
subprocess.run("curl https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/openssh_wsl.sh | sudo bash", shell=True, check=True)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
@app.command()
|
|
78
|
-
def backup():
|
|
79
|
-
"""💾 BACKUP"""
|
|
80
|
-
from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
|
|
81
|
-
main_backup_retrieve(direction="BACKUP")
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
@app.command()
|
|
85
|
-
def retrieve():
|
|
86
|
-
"""📥 RETRIEVE"""
|
|
87
|
-
from machineconfig.scripts.python.devops_backup_retrieve import main_backup_retrieve
|
|
88
|
-
main_backup_retrieve(direction="RETRIEVE")
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
@app.command()
|
|
92
|
-
def scheduler():
|
|
93
|
-
"""⏰ SCHEDULER"""
|
|
94
|
-
# from machineconfig.scripts.python.scheduler import main as helper
|
|
95
|
-
# helper()
|
|
96
|
-
|
|
97
|
-
@app.command()
|
|
98
|
-
def interactive():
|
|
99
|
-
"""🤖 INTERACTIVE configuration of machine."""
|
|
100
|
-
from machineconfig.scripts.python.interactive import main
|
|
101
|
-
main()
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if __name__ == "__main__":
|
|
106
|
-
pass
|
|
4
|
+
from typing import Optional, Annotated
|
|
5
|
+
|
|
6
|
+
import machineconfig.scripts.python.helpers_devops.cli_repos as cli_repos
|
|
7
|
+
import machineconfig.scripts.python.helpers_devops.cli_config as cli_config
|
|
8
|
+
import machineconfig.scripts.python.helpers_devops.cli_self as cli_self
|
|
9
|
+
import machineconfig.scripts.python.helpers_devops.cli_data as cli_data
|
|
10
|
+
import machineconfig.scripts.python.helpers_devops.cli_nw as cli_network
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def install(which: Annotated[Optional[str], typer.Argument(..., help="Comma-separated list of program names to install, or group name if --group flag is set.")] = None,
|
|
14
|
+
group: Annotated[bool, typer.Option(..., "--group", "-g", help="Treat 'which' as a group name. A group is bundle of apps.")] = False,
|
|
15
|
+
interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Interactive selection of programs to install.")] = False,
|
|
16
|
+
) -> None:
|
|
17
|
+
"""📦 Install packages"""
|
|
18
|
+
import machineconfig.utils.installer_utils.installer_cli as installer_entry_point
|
|
19
|
+
installer_entry_point.main(which=which, group=group, interactive=interactive)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_app():
|
|
23
|
+
app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_help_option=False,
|
|
24
|
+
add_completion=False)
|
|
25
|
+
app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
|
|
26
|
+
app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
|
|
27
|
+
app_repos = cli_repos.get_app()
|
|
28
|
+
app.add_typer(app_repos, name="repos")
|
|
29
|
+
app.add_typer(app_repos, name="r", hidden=True)
|
|
30
|
+
app_config = cli_config.get_app()
|
|
31
|
+
app.add_typer(app_config, name="config")
|
|
32
|
+
app.add_typer(app_config, name="c", hidden=True)
|
|
33
|
+
app_data = cli_data.get_app()
|
|
34
|
+
app.add_typer(app_data, name="data")
|
|
35
|
+
app.add_typer(app_data, name="d", hidden=True)
|
|
36
|
+
app_self = cli_self.get_app()
|
|
37
|
+
app.add_typer(app_self, name="self")
|
|
38
|
+
app.add_typer(app_self, name="s", hidden=True)
|
|
39
|
+
app_nw = cli_network.get_app()
|
|
40
|
+
app.add_typer(app_nw, name="network")
|
|
41
|
+
app.add_typer(app_nw, name="n", hidden=True)
|
|
42
|
+
return app
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def main():
|
|
46
|
+
app = get_app()
|
|
47
|
+
app()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a = 2
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Cross-platform PATH explorer backend."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Literal
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
PlatformType = Literal["Windows", "Linux", "Darwin"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_platform() -> PlatformType:
|
|
13
|
+
"""Get the current platform."""
|
|
14
|
+
return platform.system() # type: ignore[return-value]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_path_entries() -> list[str]:
|
|
18
|
+
"""Get all PATH entries for the current platform."""
|
|
19
|
+
path_str = os.environ.get("PATH", "")
|
|
20
|
+
separator = ";" if get_platform() == "Windows" else ":"
|
|
21
|
+
return [entry for entry in path_str.split(separator) if entry.strip()]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_directory_contents(directory: str, max_items: int = 50) -> list[str]:
|
|
25
|
+
"""Get contents of a directory, limited to max_items."""
|
|
26
|
+
try:
|
|
27
|
+
path = Path(directory)
|
|
28
|
+
if not path.exists():
|
|
29
|
+
return ["⚠️ Directory does not exist"]
|
|
30
|
+
if not path.is_dir():
|
|
31
|
+
return ["⚠️ Not a directory"]
|
|
32
|
+
|
|
33
|
+
items = []
|
|
34
|
+
for item in sorted(path.iterdir(), key=lambda p: (not p.is_dir(), p.name.lower())):
|
|
35
|
+
if len(items) >= max_items:
|
|
36
|
+
items.append(f"... and {sum(1 for _ in path.iterdir()) - max_items} more items")
|
|
37
|
+
break
|
|
38
|
+
prefix = "📁 " if item.is_dir() else "📄 "
|
|
39
|
+
items.append(f"{prefix}{item.name}")
|
|
40
|
+
|
|
41
|
+
if not items:
|
|
42
|
+
return ["📭 Empty directory"]
|
|
43
|
+
return items
|
|
44
|
+
except PermissionError:
|
|
45
|
+
return ["⚠️ Permission denied"]
|
|
46
|
+
except Exception as e:
|
|
47
|
+
return [f"⚠️ Error: {e!s}"]
|