machineconfig 7.50__py3-none-any.whl → 8.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +23 -11
- machineconfig/cluster/sessions_managers/wt_local_manager.py +22 -19
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/installer_data.json +1185 -165
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +52 -84
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +16 -12
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +21 -22
- machineconfig/profile/create_links_export.py +25 -11
- machineconfig/profile/create_shell_profile.py +14 -3
- machineconfig/profile/mapper.toml +8 -6
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +20 -21
- machineconfig/scripts/python/agents.py +74 -50
- machineconfig/scripts/python/ai/initai.py +1 -1
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/cloud.py +6 -6
- machineconfig/scripts/python/croshell.py +67 -60
- machineconfig/scripts/python/devops.py +41 -21
- machineconfig/scripts/python/devops_navigator.py +0 -4
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
- machineconfig/scripts/python/fire_jobs.py +95 -67
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +9 -7
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +21 -8
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +0 -12
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +30 -11
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +9 -2
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +8 -4
- machineconfig/scripts/python/helpers_agents/templates/template.sh +18 -8
- machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
- machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
- machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
- machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
- machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +19 -25
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +22 -13
- machineconfig/scripts/python/helpers_devops/cli_nw.py +113 -26
- machineconfig/scripts/python/helpers_devops/cli_repos.py +37 -11
- machineconfig/scripts/python/helpers_devops/cli_self.py +84 -39
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +9 -9
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +13 -12
- machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +4 -4
- machineconfig/scripts/python/helpers_devops/devops_status.py +7 -19
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/helpers_fire_command/file_wrangler.py +2 -19
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +25 -15
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +58 -1
- machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/helpers_repos/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +13 -5
- machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
- machineconfig/scripts/python/helpers_repos/record.py +2 -1
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +17 -26
- machineconfig/scripts/python/{machineconfig.py → mcfg_entry.py} +4 -5
- machineconfig/scripts/python/msearch.py +57 -6
- machineconfig/scripts/python/sessions.py +100 -31
- machineconfig/scripts/python/terminal.py +26 -17
- machineconfig/scripts/python/utils.py +17 -15
- machineconfig/scripts/windows/wrap_mcfg.ps1 +6 -3
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/shells/bash/init.sh +29 -2
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -2
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +282 -95
- machineconfig/settings/shells/pwsh/init.ps1 +1 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/zsh/init.sh +1 -8
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/wt/__init__.py +0 -0
- machineconfig/settings/yazi/init.lua +49 -24
- machineconfig/settings/yazi/keymap_linux.toml +19 -4
- machineconfig/settings/yazi/keymap_windows.toml +0 -1
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +29 -5
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +1 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +12 -10
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +2 -3
- machineconfig/setup_windows/__init__.py +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +12 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -4
- machineconfig/utils/code.py +39 -11
- machineconfig/utils/files/headers.py +2 -2
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +43 -100
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -59
- machineconfig/utils/io.py +0 -1
- machineconfig/utils/links.py +2 -2
- machineconfig/utils/meta.py +30 -16
- machineconfig/utils/options.py +42 -24
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +42 -20
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +20 -53
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +159 -418
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +6 -1
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/RECORD +265 -215
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +2 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/define.py +0 -31
- machineconfig/scripts/python/explore.py +0 -49
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -246
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfag +0 -17
- machineconfig/scripts/python/helpers_msearch/scripts_linux/fzfrga +0 -21
- machineconfig/scripts/python/helpers_msearch/scripts_linux/skrg +0 -4
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfb.ps1 +0 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfrga.bat +0 -20
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -17
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/utils/installer_utils/installer.py +0 -221
- machineconfig-7.50.dist-info/METADATA +0 -92
- /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/__init__.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.sh +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- /machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- /machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- /machineconfig/scripts/python/{nw → ai/utils}/__init__.py +0 -0
- /machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-7.50.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -1,32 +1,56 @@
|
|
|
1
1
|
|
|
2
|
-
from pathlib import Path
|
|
3
2
|
from typing import Optional, Literal, Annotated
|
|
4
3
|
import typer
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
|
|
6
|
+
def balance_load(layout_path: Annotated[str, typer.Argument(..., help="Path to the layout.json file")],
|
|
7
|
+
max_thresh: Annotated[int, typer.Option(..., "--max-threshold", "-m", help="Maximum tabs per layout")],
|
|
8
|
+
thresh_type: Annotated[Literal['number', 'n', 'weight', 'w'], typer.Option(..., "--threshold-type", "-t", help="Threshold type")],
|
|
9
|
+
breaking_method: Annotated[Literal['moreLayouts', 'ml', 'combineTabs', 'ct'], typer.Option(..., "--breaking-method", "-b", help="Breaking method")],
|
|
10
|
+
output_path: Annotated[Optional[str], typer.Option(..., "--output-path", "-o", help="Path to write the adjusted layout.json file")] = None):
|
|
11
11
|
"""Adjust layout file to limit max tabs per layout, etc."""
|
|
12
|
+
thresh_type_resolved: dict[str, Literal['number', 'weight']] = {
|
|
13
|
+
'number': 'number',
|
|
14
|
+
'n': 'number',
|
|
15
|
+
'weight': 'weight',
|
|
16
|
+
'w': 'weight'
|
|
17
|
+
}
|
|
18
|
+
breaking_method_resolved: dict[str, Literal['moreLayouts', 'combineTabs']] = {
|
|
19
|
+
'moreLayouts': 'moreLayouts',
|
|
20
|
+
'ml': 'moreLayouts',
|
|
21
|
+
'combineTabs': 'combineTabs',
|
|
22
|
+
'ct': 'combineTabs'
|
|
23
|
+
}
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
layout_path_obj = Path(layout_path).expanduser().absolute()
|
|
26
|
+
|
|
12
27
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
|
|
13
28
|
import json
|
|
14
|
-
layoutfile: LayoutsFile = json.loads(
|
|
29
|
+
layoutfile: LayoutsFile = json.loads(layout_path_obj.read_text())
|
|
15
30
|
layout_configs = layoutfile["layouts"]
|
|
16
31
|
from machineconfig.cluster.sessions_managers.utils.load_balancer import limit_tab_num
|
|
17
|
-
new_layouts = limit_tab_num(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=thresh_type, breaking_method=breaking_method)
|
|
32
|
+
new_layouts = limit_tab_num(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=thresh_type_resolved[thresh_type], breaking_method=breaking_method_resolved[breaking_method])
|
|
18
33
|
layoutfile["layouts"] = new_layouts
|
|
19
|
-
target_file = output_path if output_path is not None else
|
|
34
|
+
target_file = Path(output_path) if output_path is not None else layout_path_obj.parent / f'{layout_path_obj.stem}_adjusted_{max_thresh}_{thresh_type}_{breaking_method}.json'
|
|
20
35
|
target_file.parent.mkdir(parents=True, exist_ok=True)
|
|
21
36
|
target_file.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
|
|
22
37
|
typer.echo(f"Adjusted layout saved to {target_file}")
|
|
23
38
|
|
|
24
39
|
|
|
25
|
-
def select_layout(layouts_json_file:
|
|
40
|
+
def select_layout(layouts_json_file: str, selected_layouts_names: Optional[list[str]], select_interactively: bool,
|
|
41
|
+
subsitute_home: bool
|
|
42
|
+
) -> list["LayoutConfig"]:
|
|
26
43
|
import json
|
|
27
44
|
from machineconfig.utils.options import choose_from_options
|
|
28
45
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
|
|
29
|
-
|
|
46
|
+
from pathlib import Path
|
|
47
|
+
json_str = Path(layouts_json_file).read_text(encoding="utf-8")
|
|
48
|
+
if subsitute_home:
|
|
49
|
+
json_str = json_str.replace("~", str(Path.home())).replace("$HOME", str(Path.home()))
|
|
50
|
+
json_str = json_str.replace("""Command": "f """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg fire """)
|
|
51
|
+
json_str = json_str.replace("""Command": "s """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg sessions """)
|
|
52
|
+
|
|
53
|
+
layout_file: LayoutsFile = json.loads(json_str)
|
|
30
54
|
if len(layout_file["layouts"]) == 0:
|
|
31
55
|
raise ValueError(f"No layouts found in {layouts_json_file}")
|
|
32
56
|
if selected_layouts_names is None: # choose all, or interactively
|
|
@@ -34,7 +58,7 @@ def select_layout(layouts_json_file: Path, selected_layouts_names: Optional[list
|
|
|
34
58
|
return layout_file["layouts"]
|
|
35
59
|
options = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
36
60
|
from machineconfig.utils.options import choose_from_options
|
|
37
|
-
selected_layouts_names = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:",
|
|
61
|
+
selected_layouts_names = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", tv=True, msg="Choose one option")
|
|
38
62
|
print(f"Selected layout(s): {selected_layouts_names}")
|
|
39
63
|
# Extract the configs from the names:
|
|
40
64
|
layouts_chosen: list[LayoutConfig] = []
|
|
@@ -49,35 +73,36 @@ def select_layout(layouts_json_file: Path, selected_layouts_names: Optional[list
|
|
|
49
73
|
return layouts_chosen
|
|
50
74
|
|
|
51
75
|
|
|
52
|
-
def find_layout_file(layout_path: str, ) ->
|
|
53
|
-
from machineconfig.utils.
|
|
54
|
-
from machineconfig.scripts.python.helpers_fire_command.file_wrangler import search_for_files_of_interest
|
|
76
|
+
def find_layout_file(layout_path: str, ) -> str:
|
|
77
|
+
from machineconfig.utils.path_helper import search_for_files_of_interest
|
|
55
78
|
from machineconfig.utils.options import choose_from_options
|
|
56
79
|
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
80
|
+
from pathlib import Path
|
|
57
81
|
path_obj = sanitize_path(layout_path)
|
|
58
82
|
if not path_obj.exists():
|
|
59
|
-
choice_file = match_file_name(sub_string=layout_path, search_root=
|
|
83
|
+
choice_file = match_file_name(sub_string=layout_path, search_root=Path.cwd(), suffixes={".json"})
|
|
60
84
|
elif path_obj.is_dir():
|
|
61
85
|
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
62
|
-
files = search_for_files_of_interest(path_obj)
|
|
86
|
+
files = search_for_files_of_interest(path_obj, suffixes={".py", ".sh", ".ps1"})
|
|
63
87
|
print(f"🔍 Got #{len(files)} results.")
|
|
64
|
-
choice_file = choose_from_options(multi=False, options=files,
|
|
65
|
-
choice_file =
|
|
88
|
+
choice_file = choose_from_options(multi=False, options=files, tv=True, msg="Choose one option")
|
|
89
|
+
choice_file = Path(choice_file).expanduser().absolute()
|
|
66
90
|
else:
|
|
67
91
|
choice_file = path_obj
|
|
68
|
-
return choice_file
|
|
92
|
+
return str(choice_file)
|
|
69
93
|
|
|
70
94
|
|
|
71
95
|
def run(ctx: typer.Context,
|
|
72
96
|
layout_path: Annotated[Optional[str], typer.Argument(..., help="Path to the layout.json file")] = None,
|
|
73
|
-
max_tabs: Annotated[int, typer.Option(..., help="A Sanity checker that throws an error if any layout exceeds the maximum number of tabs to launch.")] = 10,
|
|
74
|
-
max_layouts: Annotated[int, typer.Option(..., help="A Sanity checker that throws an error if the total number of *parallel layouts exceeds this number.")] = 10,
|
|
75
|
-
sleep_inbetween: Annotated[float, typer.Option(..., help="Sleep time in seconds between launching layouts")] = 1.0,
|
|
97
|
+
max_tabs: Annotated[int, typer.Option(..., "--max-tabs", "-mt", help="A Sanity checker that throws an error if any layout exceeds the maximum number of tabs to launch.")] = 10,
|
|
98
|
+
max_layouts: Annotated[int, typer.Option(..., "--max-layouts", "-ml", help="A Sanity checker that throws an error if the total number of *parallel layouts exceeds this number.")] = 10,
|
|
99
|
+
sleep_inbetween: Annotated[float, typer.Option(..., "--sleep-inbetween", "-si", help="Sleep time in seconds between launching layouts")] = 1.0,
|
|
76
100
|
monitor: Annotated[bool, typer.Option(..., "--monitor", "-m", help="Monitor the layout sessions for completion")] = False,
|
|
77
101
|
parallel: Annotated[bool, typer.Option(..., "--parallel", "-p", help="Launch multiple layouts in parallel")] = False,
|
|
78
102
|
kill_upon_completion: Annotated[bool, typer.Option(..., "--kill-upon-completion", "-k", help="Kill session(s) upon completion (only relevant if monitor flag is set)")] = False,
|
|
79
103
|
choose: Annotated[Optional[str], typer.Option(..., "--choose", "-c", help="Comma separated names of layouts to be selected from the layout file passed")] = None,
|
|
80
|
-
choose_interactively: Annotated[bool, typer.Option(..., "--choose-interactively", "-
|
|
104
|
+
choose_interactively: Annotated[bool, typer.Option(..., "--choose-interactively", "-i", help="Select layouts interactively")] = False,
|
|
105
|
+
subsitute_home: Annotated[bool, typer.Option(..., "--substitute-home", "-sh", help="Substitute ~ and $HOME in layout file with actual home directory path")] = False,
|
|
81
106
|
):
|
|
82
107
|
"""
|
|
83
108
|
Launch terminal sessions based on a layout configuration file.
|
|
@@ -86,7 +111,7 @@ def run(ctx: typer.Context,
|
|
|
86
111
|
typer.echo(ctx.get_help())
|
|
87
112
|
raise typer.Exit()
|
|
88
113
|
layout_path_resolved = find_layout_file(layout_path=layout_path)
|
|
89
|
-
layouts_selected = select_layout(layouts_json_file=layout_path_resolved, selected_layouts_names=choose.split(",") if choose else None, select_interactively=choose_interactively)
|
|
114
|
+
layouts_selected = select_layout(layouts_json_file=layout_path_resolved, selected_layouts_names=choose.split(",") if choose else None, select_interactively=choose_interactively, subsitute_home=subsitute_home)
|
|
90
115
|
|
|
91
116
|
# ============= Basic sanity checks =============
|
|
92
117
|
if parallel and len(layouts_selected) > max_layouts:
|
|
@@ -130,16 +155,60 @@ def run(ctx: typer.Context,
|
|
|
130
155
|
print(f"❌ Unsupported platform: {platform.system()}")
|
|
131
156
|
|
|
132
157
|
|
|
158
|
+
def create_template(name: Annotated[Optional[str], typer.Argument(..., help="Name of the layout template to create")] = None,
|
|
159
|
+
num_tabs: Annotated[int, typer.Option(..., "--num-tabs", "-t", help="Number of tabs to include in the template")] = 3,
|
|
160
|
+
):
|
|
161
|
+
"""Create a layout template file."""
|
|
162
|
+
from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, TabConfig
|
|
163
|
+
from pathlib import Path
|
|
164
|
+
tabs: list[TabConfig] = []
|
|
165
|
+
for i in range(1, num_tabs + 1):
|
|
166
|
+
tab: TabConfig = {
|
|
167
|
+
"tabName": f"Tab{i}",
|
|
168
|
+
"startDir": "~/" + str(Path.cwd().relative_to(Path.home())),
|
|
169
|
+
"command": "bash",
|
|
170
|
+
}
|
|
171
|
+
tabs.append(tab)
|
|
172
|
+
layouts: list[LayoutConfig] = [
|
|
173
|
+
{
|
|
174
|
+
"layoutName": f"{Path.cwd().name}Layout",
|
|
175
|
+
"layoutTabs": tabs,
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
file: LayoutsFile = {
|
|
179
|
+
"$schema": "https://bit.ly/cfglayout", # type: ignore
|
|
180
|
+
"version": "0.1",
|
|
181
|
+
"layouts": layouts
|
|
182
|
+
}
|
|
183
|
+
import json
|
|
184
|
+
json_string = json.dumps(file, indent=4)
|
|
185
|
+
if name is None:
|
|
186
|
+
layout_path = Path.cwd() / "layout.json"
|
|
187
|
+
else:
|
|
188
|
+
layout_path = Path.cwd() / (name.replace(".json", "") + ".json")
|
|
189
|
+
layout_path.parent.mkdir(parents=True, exist_ok=True)
|
|
190
|
+
if layout_path.exists():
|
|
191
|
+
print(f"❌ File {layout_path} already exists. Aborting to avoid overwriting.")
|
|
192
|
+
return
|
|
193
|
+
layout_path.write_text(json_string, encoding="utf-8")
|
|
194
|
+
print(f"✅ Created layout template at {layout_path}")
|
|
195
|
+
|
|
196
|
+
|
|
133
197
|
def get_app():
|
|
134
198
|
layouts_app = typer.Typer(help="Layouts management subcommands", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
135
199
|
from machineconfig.scripts.python.helpers_sessions.sessions_multiprocess import create_from_function
|
|
136
|
-
layouts_app.command("create-from-function", no_args_is_help=True, help="[c] Create a layout from a function")(create_from_function)
|
|
137
|
-
layouts_app.command("c", no_args_is_help=True, help="Create a layout from a function", hidden=True)(create_from_function)
|
|
138
|
-
layouts_app.command("run", no_args_is_help=True, help="[r] Run the selected layout(s)")(run)
|
|
139
|
-
layouts_app.command("r", no_args_is_help=True, help="Run the selected layout(s)", hidden=True)(run)
|
|
140
|
-
layouts_app.command("balance-load", no_args_is_help=True, help="[b] Balance the load across sessions")(balance_load)
|
|
141
|
-
layouts_app.command("b", no_args_is_help=True, help="Balance the load across sessions", hidden=True)(balance_load)
|
|
142
200
|
|
|
201
|
+
layouts_app.command("create-from-function", no_args_is_help=True, help=create_from_function.__doc__, short_help="[c] Create a layout from a function")(create_from_function)
|
|
202
|
+
layouts_app.command("c", no_args_is_help=True, help=create_from_function.__doc__, hidden=True)(create_from_function)
|
|
203
|
+
|
|
204
|
+
layouts_app.command("run", no_args_is_help=True, help=run.__doc__, short_help="[r] Run the selected layout(s)")(run)
|
|
205
|
+
layouts_app.command("r", no_args_is_help=True, help=run.__doc__, hidden=True)(run)
|
|
206
|
+
|
|
207
|
+
layouts_app.command("balance-load", no_args_is_help=True, help=balance_load.__doc__, short_help="[b] Balance the load across sessions")(balance_load)
|
|
208
|
+
layouts_app.command("b", no_args_is_help=True, help=balance_load.__doc__, hidden=True)(balance_load)
|
|
209
|
+
|
|
210
|
+
layouts_app.command("create-template", no_args_is_help=False, help=create_template.__doc__, short_help="[t] Create a layout template file")(create_template)
|
|
211
|
+
layouts_app.command("t", no_args_is_help=False, help=create_template.__doc__, hidden=True)(create_template)
|
|
143
212
|
return layouts_app
|
|
144
213
|
|
|
145
214
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
# from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
1
|
+
|
|
3
2
|
import typer
|
|
4
|
-
from typing import Annotated
|
|
3
|
+
from typing import Annotated, Optional
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
def strip_ansi_codes(text: str) -> str:
|
|
@@ -11,8 +10,14 @@ def strip_ansi_codes(text: str) -> str:
|
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
def choose_zellij_session(
|
|
13
|
+
name: Annotated[Optional[str], typer.Argument(help="Name of the Zellij session to attach to. If not provided, a list will be shown to choose from.")] = None,
|
|
14
14
|
new_session: Annotated[bool, typer.Option("--new-session", "-n", help="Create a new Zellij session instead of attaching to an existing one.", show_default=True)] = False,
|
|
15
15
|
kill_all: Annotated[bool, typer.Option("--kill-all", "-k", help="Kill all existing Zellij sessions before creating a new one.", show_default=True)] = False):
|
|
16
|
+
"""Choose a Zellij session to attach to."""
|
|
17
|
+
if name is not None:
|
|
18
|
+
result = f"zellij attach {name}"
|
|
19
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
20
|
+
exit_then_run_shell_script(result, strict=True)
|
|
16
21
|
|
|
17
22
|
if new_session:
|
|
18
23
|
cmd = """
|
|
@@ -26,10 +31,12 @@ def choose_zellij_session(
|
|
|
26
31
|
typer.Exit()
|
|
27
32
|
return
|
|
28
33
|
cmd = "zellij list-sessions"
|
|
34
|
+
import subprocess
|
|
29
35
|
sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
|
|
30
36
|
# filter out empty lines and keep raw lines (they contain creation info)
|
|
31
37
|
sessions = [s for s in sessions if s.strip()]
|
|
32
38
|
sessions.sort(key=lambda s: "EXITED" in s)
|
|
39
|
+
|
|
33
40
|
if "current" in sessions:
|
|
34
41
|
print("Already in a Zellij session, avoiding nesting and exiting.")
|
|
35
42
|
raise typer.Exit()
|
|
@@ -37,32 +44,33 @@ def choose_zellij_session(
|
|
|
37
44
|
print("No Zellij sessions found, creating a new one.")
|
|
38
45
|
result = """zellij --layout st2"""
|
|
39
46
|
elif len(sessions) == 1:
|
|
40
|
-
|
|
41
|
-
print(f"Only one Zellij session found: {
|
|
42
|
-
result = f"zellij attach {
|
|
47
|
+
session_name = sessions[0].split(" [Created")[0]
|
|
48
|
+
print(f"Only one Zellij session found: {session_name}, attaching to it.")
|
|
49
|
+
result = f"zellij attach {session_name}"
|
|
43
50
|
else:
|
|
44
51
|
from machineconfig.utils.options import choose_from_options
|
|
45
52
|
# Artificially inject a "NEW SESSION" option so the user can create one from the list
|
|
46
53
|
NEW_SESSION_LABEL = "NEW SESSION"
|
|
47
54
|
options = [NEW_SESSION_LABEL] + sessions
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if session == NEW_SESSION_LABEL:
|
|
55
|
+
session_name = choose_from_options(msg="Choose a Zellij session to attach to:", multi=False, options=options, tv=True)
|
|
56
|
+
if session_name == NEW_SESSION_LABEL:
|
|
51
57
|
cmd = "zellij --layout st2"
|
|
52
58
|
if kill_all:
|
|
53
59
|
cmd = f"zellij kill-sessions\n{cmd}"
|
|
54
60
|
from machineconfig.utils.code import exit_then_run_shell_script
|
|
55
61
|
exit_then_run_shell_script(cmd, strict=True)
|
|
56
62
|
raise typer.Exit()
|
|
57
|
-
|
|
58
|
-
result = f"zellij attach {
|
|
63
|
+
session_name = session_name.split(" [Created")[0]
|
|
64
|
+
result = f"zellij attach {session_name}"
|
|
59
65
|
from machineconfig.utils.code import exit_then_run_shell_script
|
|
60
66
|
exit_then_run_shell_script(result, strict=True)
|
|
61
67
|
|
|
62
68
|
|
|
63
69
|
|
|
64
70
|
def get_session_tabs() -> list[tuple[str, str]]:
|
|
71
|
+
"""Get all Zellij session tabs."""
|
|
65
72
|
cmd = "zellij list-sessions"
|
|
73
|
+
import subprocess
|
|
66
74
|
sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
|
|
67
75
|
sessions = [strip_ansi_codes(s) for s in sessions]
|
|
68
76
|
active_sessions = [s for s in sessions if "EXITED" not in s]
|
|
@@ -84,6 +92,7 @@ def get_session_tabs() -> list[tuple[str, str]]:
|
|
|
84
92
|
|
|
85
93
|
|
|
86
94
|
def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to start.")]):
|
|
95
|
+
"""Start a Windows Terminal layout by name."""
|
|
87
96
|
from pathlib import Path
|
|
88
97
|
layouts_file = Path.home().joinpath("dotfiles/machineconfig/layouts.json")
|
|
89
98
|
if not layouts_file.exists():
|
|
@@ -108,14 +117,14 @@ def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to sta
|
|
|
108
117
|
|
|
109
118
|
def get_app():
|
|
110
119
|
app = typer.Typer(help="🖥️ Terminal utilities", no_args_is_help=True, add_help_option=False)
|
|
111
|
-
app.command(name="attach-to-zellij", no_args_is_help=False, help="[z] Choose a Zellij session to attach to")(choose_zellij_session)
|
|
112
|
-
app.command(name="z", hidden=True, no_args_is_help=False, help=
|
|
120
|
+
app.command(name="attach-to-zellij", no_args_is_help=False, help=choose_zellij_session.__doc__, short_help="[z] Choose a Zellij session to attach to")(choose_zellij_session)
|
|
121
|
+
app.command(name="z", hidden=True, no_args_is_help=False, help=choose_zellij_session.__doc__)(choose_zellij_session)
|
|
113
122
|
|
|
114
|
-
app.command(name="start-wt", no_args_is_help=True, help="[w] Start a Windows Terminal layout by name.")(start_wt)
|
|
115
|
-
app.command(name="w", hidden=True, no_args_is_help=True, help=
|
|
123
|
+
app.command(name="start-wt", no_args_is_help=True, help=start_wt.__doc__, short_help="[w] Start a Windows Terminal layout by name.")(start_wt)
|
|
124
|
+
app.command(name="w", hidden=True, no_args_is_help=True, help=start_wt.__doc__)(start_wt)
|
|
116
125
|
|
|
117
|
-
app.command(name="get-session-tabs", no_args_is_help=False, help="[zt] Get all Zellij session tabs.")(get_session_tabs)
|
|
118
|
-
app.command(name="zt", hidden=True, no_args_is_help=False, help=
|
|
126
|
+
app.command(name="get-session-tabs", no_args_is_help=False, help=get_session_tabs.__doc__, short_help="[zt] Get all Zellij session tabs.")(get_session_tabs)
|
|
127
|
+
app.command(name="zt", hidden=True, no_args_is_help=False, help=get_session_tabs.__doc__)(get_session_tabs)
|
|
119
128
|
return app
|
|
120
129
|
|
|
121
130
|
def main():
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
from machineconfig.scripts.python.
|
|
1
|
+
from machineconfig.scripts.python.helpers_utils.pdf import merge_pdfs, compress_pdf
|
|
2
|
+
from machineconfig.scripts.python.helpers_utils.python import edit_file_with_hx, get_machine_specs, init_project, tui_env
|
|
3
|
+
from machineconfig.scripts.python.helpers_utils.download import download
|
|
4
4
|
import typer
|
|
5
5
|
from typing import Annotated
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
def kill_process(
|
|
8
9
|
# name: Annotated[Optional[str], typer.Option(..., "--name", "-n", help="Name of the process to kill")],
|
|
9
10
|
# command: Annotated[str, typer.Option(..., "--command", "-c", help="Match by command line instead of process name")] = "",
|
|
@@ -27,24 +28,27 @@ def upgrade_packages():
|
|
|
27
28
|
|
|
28
29
|
def get_app() -> typer.Typer:
|
|
29
30
|
app = typer.Typer(help="🛠️ utilities operations", no_args_is_help=True, add_help_option=False, add_completion=False)
|
|
30
|
-
app.command(name="kill-process", no_args_is_help=False, help="[k] Choose a process to kill")(kill_process)
|
|
31
|
+
app.command(name="kill-process", no_args_is_help=False, help="⚔️ [k] Choose a process to kill")(kill_process)
|
|
31
32
|
app.command(name="k", no_args_is_help=False, help="Choose a process to kill", hidden=True)(kill_process)
|
|
32
33
|
|
|
33
|
-
app.command(
|
|
34
|
+
app.command("environment", no_args_is_help=False, help="📚 [v] NAVIGATE ENV/PATH variable with TUI")(tui_env)
|
|
35
|
+
app.command("v", no_args_is_help=False, help="NAVIGATE ENV/PATH variable with TUI", hidden=True)(tui_env)
|
|
36
|
+
|
|
37
|
+
app.command(name="upgrade-packages", no_args_is_help=False, help="⬆️ [up] Upgrade project dependencies.")(upgrade_packages)
|
|
34
38
|
app.command(name="up", no_args_is_help=False, hidden=True)(upgrade_packages)
|
|
35
39
|
|
|
36
|
-
app.command(name="download", no_args_is_help=True, help="[d] Download a file from a URL and optionally decompress it.")(download)
|
|
40
|
+
app.command(name="download", no_args_is_help=True, help="⬇️ [d] Download a file from a URL and optionally decompress it.")(download)
|
|
37
41
|
app.command(name="d", no_args_is_help=True, hidden=True)(download)
|
|
38
|
-
app.command(name="get-machine-specs", no_args_is_help=False, help="[g] Get machine specifications.")(get_machine_specs)
|
|
42
|
+
app.command(name="get-machine-specs", no_args_is_help=False, help="💻 [g] Get machine specifications.")(get_machine_specs)
|
|
39
43
|
app.command(name="g", no_args_is_help=False, hidden=True)(get_machine_specs)
|
|
40
|
-
app.command(name="init-project", no_args_is_help=False, help="[i] Initialize a project with a uv virtual environment and install dev packages.")(init_project)
|
|
44
|
+
app.command(name="init-project", no_args_is_help=False, help="🚀 [i] Initialize a project with a uv virtual environment and install dev packages.")(init_project)
|
|
41
45
|
app.command(name="i", no_args_is_help=False, hidden=True)(init_project)
|
|
42
|
-
app.command(name="edit", no_args_is_help=False, help="[e] Open a file in the default editor.")(
|
|
43
|
-
app.command(name="e", no_args_is_help=False, hidden=True)(
|
|
46
|
+
app.command(name="edit", no_args_is_help=False, help="✏️ [e] Open a file in the default editor.")(edit_file_with_hx)
|
|
47
|
+
app.command(name="e", no_args_is_help=False, hidden=True)(edit_file_with_hx)
|
|
44
48
|
|
|
45
|
-
app.command(name="pdf-merge", no_args_is_help=True, help="[pm] Merge two PDF files into one.")(merge_pdfs)
|
|
49
|
+
app.command(name="pdf-merge", no_args_is_help=True, help="📄 [pm] Merge two PDF files into one.")(merge_pdfs)
|
|
46
50
|
app.command(name="pm", no_args_is_help=True, hidden=True)(merge_pdfs)
|
|
47
|
-
app.command(name="pdf-compress", no_args_is_help=True, help="[pc] Compress a PDF file.")(compress_pdf)
|
|
51
|
+
app.command(name="pdf-compress", no_args_is_help=True, help="📦 [pc] Compress a PDF file.")(compress_pdf)
|
|
48
52
|
app.command(name="pc", no_args_is_help=True, hidden=True)(compress_pdf)
|
|
49
53
|
|
|
50
54
|
# app.command(name="copy", no_args_is_help=True, help="[c] Copy files or directories.")(copy)
|
|
@@ -52,9 +56,7 @@ def get_app() -> typer.Typer:
|
|
|
52
56
|
|
|
53
57
|
return app
|
|
54
58
|
|
|
55
|
-
# def func():
|
|
56
|
-
# import pycr
|
|
57
59
|
|
|
58
60
|
def main():
|
|
59
61
|
app = get_app()
|
|
60
|
-
app()
|
|
62
|
+
app()
|
|
@@ -34,12 +34,15 @@ function wrap_in_shell_script {
|
|
|
34
34
|
try {
|
|
35
35
|
bat --style=full --theme=OneHalfDark --paging=never "$env:OP_PROGRAM_PATH"
|
|
36
36
|
} catch {
|
|
37
|
-
Write-Host "⚠️ Warning: Failed to display script content with 'bat'. Proceeding to execute the script."
|
|
37
|
+
# Write-Host "⚠️ Warning: Failed to display script content with 'bat'. Proceeding to execute the script."
|
|
38
|
+
Write-Host " "
|
|
38
39
|
}
|
|
39
40
|
& $env:OP_PROGRAM_PATH
|
|
40
|
-
Write-Host "✅ '$Command' execution completed."
|
|
41
|
+
# Write-Host "✅ '$Command' execution completed."
|
|
42
|
+
|
|
41
43
|
} else {
|
|
42
|
-
Write-Host "✅ '$Command' execution completed."
|
|
44
|
+
# Write-Host "✅ '$Command' execution completed."
|
|
45
|
+
Write-Host " "
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
# Clean up the temporary environment variable so it doesn't leak to other processes/sessions
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
function lfcd {
|
|
19
19
|
$tmp = [System.IO.Path]::GetTempFileName()
|
|
20
|
-
|
|
20
|
+
& "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps\lf.exe" -last-dir-path="$tmp" $args
|
|
21
21
|
if (Test-Path -PathType Leaf "$tmp")
|
|
22
22
|
{
|
|
23
23
|
$dir = Get-Content "$tmp"
|
|
@@ -57,7 +57,7 @@ alias r='wrap_in_shell_script croshell'
|
|
|
57
57
|
alias u='wrap_in_shell_script utils'
|
|
58
58
|
alias t='wrap_in_shell_script terminal'
|
|
59
59
|
alias ms='wrap_in_shell_script msearch'
|
|
60
|
-
alias x='
|
|
60
|
+
alias x='wrap_in_shell_script explore'
|
|
61
61
|
|
|
62
62
|
# alias gcs='gh copilot suggest -t shell'
|
|
63
63
|
# alias gcg='gh copilot suggest -t git'
|
|
@@ -89,7 +89,34 @@ eval "$(zoxide init bash)"
|
|
|
89
89
|
eval "$(starship init bash)"
|
|
90
90
|
# LEVE THIS IN THE END TO AVOID EXECUTION FAILURE OF THE REST OF THE SCRIPT
|
|
91
91
|
# from https://github.com/cantino/mcfly
|
|
92
|
-
|
|
92
|
+
if command -v mcfly &> /dev/null; then
|
|
93
|
+
eval "$(mcfly init bash)"
|
|
94
|
+
else
|
|
95
|
+
# eval "$(tv init bash)"
|
|
96
|
+
tv_shell_history() {
|
|
97
|
+
_disable_bracketed_paste
|
|
98
|
+
local current_prompt="${READLINE_LINE:0:$READLINE_POINT}"
|
|
99
|
+
local output
|
|
100
|
+
# move to the next line so that the prompt is not overwritten
|
|
101
|
+
printf "\n"
|
|
102
|
+
# Get history using tv with the same arguments as zsh version
|
|
103
|
+
output=$(tv bash-history --input "$current_prompt" --inline)
|
|
104
|
+
|
|
105
|
+
if [[ -n "$output" ]]; then
|
|
106
|
+
# Clear the right side of cursor and set new line
|
|
107
|
+
READLINE_LINE="$output"
|
|
108
|
+
READLINE_POINT=${#READLINE_LINE}
|
|
109
|
+
# Uncomment this to automatically accept the line
|
|
110
|
+
# (i.e. run the command without having to press enter twice)
|
|
111
|
+
# accept-line() { echo; }; accept-line
|
|
112
|
+
fi
|
|
113
|
+
# move the cursor back to the previous line
|
|
114
|
+
printf "\033[A"
|
|
115
|
+
_enable_bracketed_paste
|
|
116
|
+
}
|
|
117
|
+
bind -x '"\C-r": tv_shell_history'
|
|
118
|
+
fi
|
|
119
|
+
|
|
93
120
|
|
|
94
121
|
# Show elapsed runtime
|
|
95
122
|
# _show_elapsed
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
# def print_code_interactive(_):
|
|
28
28
|
# res = get_names()
|
|
29
29
|
# from machineconfig.utils.utils import choose_from_options
|
|
30
|
-
# choice = choose_from_options(multi=False, options=res["<class 'function'>"], msg="Choose a type to inspect",
|
|
30
|
+
# choice = choose_from_options(multi=False, options=res["<class 'function'>"], msg="Choose a type to inspect", tv=True)
|
|
31
31
|
# obj = eval(choice, globals(), locals()) # type: ignore # pylint: disable=eval-used
|
|
32
32
|
# from rich.syntax import Syntax
|
|
33
33
|
# import inspect
|
|
@@ -1,13 +1,52 @@
|
|
|
1
|
+
# machineconfig Nushell environment setup
|
|
1
2
|
|
|
3
|
+
def reduce_non_empty [segments: list<string>] -> list<string> {
|
|
4
|
+
segments
|
|
5
|
+
| reduce --fold [] { |segment, acc|
|
|
6
|
+
if (($segment | str length) > 0) {
|
|
7
|
+
$acc | append $segment
|
|
8
|
+
} else {
|
|
9
|
+
$acc
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
2
13
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
14
|
+
let default_root = ($env.HOME | path join ".config" "machineconfig")
|
|
15
|
+
let config_root = (
|
|
16
|
+
$env.CONFIG_ROOT?
|
|
17
|
+
| default $default_root
|
|
18
|
+
| path expand
|
|
19
|
+
)
|
|
6
20
|
|
|
21
|
+
load-env { CONFIG_ROOT: $config_root }
|
|
7
22
|
|
|
23
|
+
let existing_segments = (
|
|
24
|
+
$env.PATH?
|
|
25
|
+
| default ""
|
|
26
|
+
| split row (char esep)
|
|
27
|
+
| reduce_non_empty
|
|
28
|
+
)
|
|
8
29
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
30
|
+
let desired_paths = [
|
|
31
|
+
($config_root | path join "scripts")
|
|
32
|
+
($env.HOME | path join "dotfiles" "scripts" "linux")
|
|
33
|
+
($env.HOME | path join ".local" "bin")
|
|
34
|
+
($env.HOME | path join ".cargo" "bin")
|
|
35
|
+
"/usr/games"
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
let merged_segments = (
|
|
39
|
+
$desired_paths
|
|
40
|
+
| reduce --fold $existing_segments { |entry, acc|
|
|
41
|
+
if (($entry | path exists) and (not ($entry in $acc))) {
|
|
42
|
+
$acc | append $entry
|
|
43
|
+
} else {
|
|
44
|
+
$acc
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
let new_path = ($merged_segments | str join (char esep))
|
|
50
|
+
load-env { PATH: $new_path }
|
|
12
51
|
|
|
13
52
|
|