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
machineconfig/utils/scheduler.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
|
|
1
2
|
from pathlib import Path
|
|
2
|
-
from typing import Callable, Optional, Union, Any,
|
|
3
|
+
from typing import Callable, Optional, Union, Any, Protocol, List, TypeVar
|
|
3
4
|
import logging
|
|
4
5
|
import time
|
|
5
6
|
from datetime import datetime, timezone, timedelta
|
|
6
7
|
from machineconfig.utils.io import from_pickle
|
|
7
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class LoggerTemplate(Protocol):
|
|
@@ -143,145 +143,142 @@ class Scheduler:
|
|
|
143
143
|
raise ex
|
|
144
144
|
|
|
145
145
|
|
|
146
|
-
T = TypeVar("T")
|
|
146
|
+
# T = TypeVar("T")
|
|
147
147
|
T2 = TypeVar("T2")
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
class PrintFunc(Protocol):
|
|
151
|
-
def __call__(self, msg: str) -> Union[NoReturn, None]: ...
|
|
152
|
-
|
|
153
|
-
|
|
154
148
|
def to_pickle(obj: Any, path: Path) -> None:
|
|
155
149
|
import pickle
|
|
156
|
-
|
|
157
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
158
150
|
path.write_bytes(pickle.dumps(obj))
|
|
159
151
|
|
|
160
152
|
|
|
161
|
-
class
|
|
162
|
-
|
|
153
|
+
class CacheMemory[T]():
|
|
154
|
+
def __init__(
|
|
155
|
+
self, source_func: Callable[[], T], expire: timedelta, logger: LoggerTemplate, name: Optional[str] = None
|
|
156
|
+
) -> None:
|
|
157
|
+
self.cache: T
|
|
158
|
+
self.source_func = source_func
|
|
159
|
+
self.time_produced = datetime.now()
|
|
160
|
+
self.logger = logger
|
|
161
|
+
self.expire = expire
|
|
162
|
+
self.name = name if isinstance(name, str) else self.source_func.__name__
|
|
163
|
+
def __call__(self, fresh: bool, tolerance_seconds: float | int) -> T:
|
|
164
|
+
if fresh or not hasattr(self, "cache"):
|
|
165
|
+
why = "There was an explicit fresh order." if fresh else "Previous cache never existed."
|
|
166
|
+
t0 = time.time()
|
|
167
|
+
self.logger.warning(f"""
|
|
168
|
+
🆕 ════════════════════ NEW {self.name} CACHE ════════════════════
|
|
169
|
+
ℹ️ Reason: {why}""")
|
|
170
|
+
self.cache = self.source_func()
|
|
171
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
172
|
+
self.time_produced = datetime.now()
|
|
173
|
+
else:
|
|
174
|
+
age = datetime.now() - self.time_produced
|
|
175
|
+
if (age > self.expire) or (fresh and (age.total_seconds() > tolerance_seconds)):
|
|
176
|
+
self.logger.warning(f"""
|
|
177
|
+
🔄 ════════════════════ CACHE UPDATE ════════════════════
|
|
178
|
+
⚠️ {self.name} cache: Updating cache from source func
|
|
179
|
+
⏱️ Age = {age} > {self.expire}""")
|
|
180
|
+
t0 = time.time()
|
|
181
|
+
self.cache = self.source_func()
|
|
182
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
183
|
+
self.time_produced = datetime.now()
|
|
184
|
+
else:
|
|
185
|
+
self.logger.warning(f"""
|
|
186
|
+
✅ ════════════════════ USING CACHE ════════════════════
|
|
187
|
+
📦 {self.name} cache: Using cached values
|
|
188
|
+
⏱️ Lag = {age}""")
|
|
189
|
+
return self.cache
|
|
190
|
+
|
|
191
|
+
@staticmethod
|
|
192
|
+
def as_decorator(expire: timedelta, logger: LoggerTemplate, name: Optional[str] = None):
|
|
193
|
+
def decorator(source_func: Callable[[], T2]) -> CacheMemory["T2"]:
|
|
194
|
+
res = CacheMemory(source_func=source_func, expire=expire, logger=logger, name=name)
|
|
195
|
+
return res
|
|
196
|
+
return decorator
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class Cache[T](): # This class helps to accelrate access to latest data coming from expensive function. The class has two flavours, memory-based and disk-based variants."""
|
|
163
200
|
def __init__(
|
|
164
|
-
self, source_func: Callable[[], T], expire: timedelta, logger:
|
|
201
|
+
self, source_func: Callable[[], T], expire: timedelta, logger: LoggerTemplate, path: Path, saver: Callable[[T, Path], Any] = to_pickle, reader: Callable[[Path], T] = from_pickle, name: Optional[str] = None
|
|
165
202
|
) -> None:
|
|
166
203
|
self.cache: T
|
|
167
204
|
self.source_func = source_func # function which when called returns a fresh object to be frozen.
|
|
168
|
-
self.path:
|
|
205
|
+
self.path: Path = path
|
|
206
|
+
_ = self.path.parent.mkdir(parents=True, exist_ok=True)
|
|
169
207
|
self.time_produced = datetime.now() # if path is None else
|
|
170
208
|
self.save = saver
|
|
171
209
|
self.reader = reader
|
|
172
210
|
self.logger = logger
|
|
173
211
|
self.expire = expire
|
|
174
|
-
self.name = name if isinstance(name, str) else
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
def age(self):
|
|
179
|
-
"""Throws AttributeError if called before cache is populated and path doesn't exists"""
|
|
180
|
-
if self.path is None: # memory-based cache.
|
|
181
|
-
return datetime.now() - self.time_produced
|
|
182
|
-
return datetime.now() - datetime.fromtimestamp(self.path.stat().st_mtime)
|
|
183
|
-
|
|
184
|
-
# def __setstate__(self, state: dict[str, Any]) -> None:
|
|
185
|
-
# self.__dict__.update(state)
|
|
186
|
-
# self.path = P.home() / self.path if self.path is not None else self.path
|
|
187
|
-
# def __getstate__(self) -> dict[str, Any]:
|
|
188
|
-
# state = self.__dict__.copy()
|
|
189
|
-
# state["path"] = self.path.rel2home() if self.path is not None else state["path"]
|
|
190
|
-
# return state # With this implementation, instances can be pickled and loaded up in different machine and still works.
|
|
191
|
-
def __call__(self, fresh: bool = False) -> T:
|
|
192
|
-
self.last_call_is_fresh = False
|
|
193
|
-
if fresh or not hasattr(self, "cache"): # populate cache for the first time
|
|
194
|
-
if not fresh and self.path is not None and self.path.exists():
|
|
212
|
+
self.name = name if isinstance(name, str) else self.source_func.__name__
|
|
213
|
+
def __call__(self, fresh: bool, tolerance_seconds: float | int) -> T:
|
|
214
|
+
if not hasattr(self, "cache"): # populate cache for the first time: we have two options, populate from disk or from source func.
|
|
215
|
+
if self.path.exists(): # prefer to read from disk over source func as a default source of cache.
|
|
195
216
|
age = datetime.now() - datetime.fromtimestamp(self.path.stat().st_mtime)
|
|
217
|
+
if (age > self.expire) or (fresh and (age.total_seconds() > tolerance_seconds)): # cache is old or if fresh flag is raised
|
|
218
|
+
self.logger.warning(f"""
|
|
219
|
+
🔄 ════════════════════ CACHE STALE ════════════════════
|
|
220
|
+
📦 {self.name} cache: Populating fresh cache from source func
|
|
221
|
+
⏱️ Lag = {age}""")
|
|
222
|
+
t0 = time.time()
|
|
223
|
+
self.cache = self.source_func() # fresh data.
|
|
224
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
225
|
+
self.time_produced = datetime.now()
|
|
226
|
+
self.save(self.cache, self.path)
|
|
227
|
+
return self.cache
|
|
228
|
+
|
|
196
229
|
msg1 = f"""
|
|
197
230
|
📦 ════════════════════ CACHE OPERATION ════════════════════
|
|
198
231
|
🔄 {self.name} cache: Reading cached values from `{self.path}`
|
|
199
|
-
⏱️ Lag = {age}
|
|
200
|
-
════════════════════════════════════════════════════════════
|
|
201
|
-
"""
|
|
232
|
+
⏱️ Lag = {age}"""
|
|
202
233
|
try:
|
|
203
234
|
self.cache = self.reader(self.path)
|
|
204
235
|
except Exception as ex:
|
|
205
|
-
|
|
206
|
-
msg2 = f"""
|
|
236
|
+
msg2 = f"""
|
|
207
237
|
❌ ════════════════════ CACHE ERROR ════════════════════
|
|
208
238
|
⚠️ {self.name} cache: Cache file is corrupted
|
|
209
|
-
🔍 Error: {ex}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
self.logger(msg1 + msg2)
|
|
239
|
+
🔍 Error: {ex}"""
|
|
240
|
+
self.logger.warning(msg1 + msg2)
|
|
241
|
+
t0 = time.time()
|
|
213
242
|
self.cache = self.source_func()
|
|
214
|
-
self.
|
|
243
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
215
244
|
self.time_produced = datetime.now()
|
|
216
|
-
|
|
217
|
-
# self.save(self.cache, self.path)
|
|
245
|
+
self.save(self.cache, self.path)
|
|
218
246
|
return self.cache
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
# Previous cache never existed or there was an explicit fresh order.
|
|
223
|
-
why = "There was an explicit fresh order." if fresh else "Previous cache never existed or is corrupted."
|
|
224
|
-
self.logger(f"""
|
|
247
|
+
else: # disk cache does not exist, populate from source func.
|
|
248
|
+
why = "Previous cache never existed."
|
|
249
|
+
self.logger.warning(f"""
|
|
225
250
|
🆕 ════════════════════ NEW CACHE ════════════════════
|
|
226
251
|
🔄 {self.name} cache: Populating fresh cache from source func
|
|
227
|
-
ℹ️ Reason: {why}
|
|
228
|
-
|
|
229
|
-
""")
|
|
252
|
+
ℹ️ Reason: {why}""")
|
|
253
|
+
t0 = time.time()
|
|
230
254
|
self.cache = self.source_func() # fresh data.
|
|
231
|
-
self.
|
|
255
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
232
256
|
self.time_produced = datetime.now()
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
except AttributeError: # path doesn't exist (may be deleted) ==> need to repopulate cache form source_func.
|
|
239
|
-
return self(fresh=True)
|
|
240
|
-
if age > self.expire:
|
|
241
|
-
if self.logger:
|
|
242
|
-
self.logger(f"""
|
|
257
|
+
self.save(self.cache, self.path)
|
|
258
|
+
else: # memory cache exists
|
|
259
|
+
age = datetime.now() - self.time_produced
|
|
260
|
+
if (age > self.expire) or (fresh and (age.total_seconds() > tolerance_seconds)): # cache is old or if fresh flag is raised
|
|
261
|
+
self.logger.warning(f"""
|
|
243
262
|
🔄 ════════════════════ CACHE UPDATE ════════════════════
|
|
244
263
|
⚠️ {self.name} cache: Updating cache from source func
|
|
245
|
-
⏱️ Age = {age} > {self.expire}
|
|
246
|
-
|
|
264
|
+
⏱️ Age = {age} > {self.expire}""")
|
|
265
|
+
t0 = time.time()
|
|
247
266
|
self.cache = self.source_func()
|
|
248
|
-
self.
|
|
267
|
+
self.logger.warning(f"⏱️ Cache population took {time.time() - t0:.2f} seconds.")
|
|
249
268
|
self.time_produced = datetime.now()
|
|
250
|
-
|
|
251
|
-
self.save(self.cache, self.path)
|
|
269
|
+
self.save(self.cache, self.path)
|
|
252
270
|
else:
|
|
253
|
-
|
|
254
|
-
self.logger(f"""
|
|
271
|
+
self.logger.warning(f"""
|
|
255
272
|
✅ ════════════════════ USING CACHE ════════════════════
|
|
256
273
|
📦 {self.name} cache: Using cached values
|
|
257
|
-
⏱️ Lag = {age}
|
|
258
|
-
════════════════════════════════════════════════════════""")
|
|
274
|
+
⏱️ Lag = {age}""")
|
|
259
275
|
return self.cache
|
|
260
276
|
|
|
261
277
|
@staticmethod
|
|
262
278
|
def as_decorator(
|
|
263
|
-
expire: timedelta, logger:
|
|
279
|
+
expire: timedelta, logger: LoggerTemplate, path: Path, saver: Callable[[T2, Path], Any] = to_pickle, reader: Callable[[Path], T2] = from_pickle, name: Optional[str] = None
|
|
264
280
|
): # -> Callable[..., 'Cache[T2]']:
|
|
265
281
|
def decorator(source_func: Callable[[], T2]) -> Cache["T2"]:
|
|
266
282
|
res = Cache(source_func=source_func, expire=expire, logger=logger, path=path, name=name, reader=reader, saver=saver)
|
|
267
283
|
return res
|
|
268
|
-
|
|
269
284
|
return decorator
|
|
270
|
-
|
|
271
|
-
def from_cloud(self, cloud: str, rel2home: bool = True, root: Optional[str] = None):
|
|
272
|
-
assert self.path is not None
|
|
273
|
-
exists = self.path.exists()
|
|
274
|
-
exists_but_old = exists and ((datetime.now() - datetime.fromtimestamp(self.path.stat().st_mtime)) > self.expire)
|
|
275
|
-
if not exists or exists_but_old:
|
|
276
|
-
returned_path = self.path.from_cloud(cloud=cloud, rel2home=rel2home, root=root)
|
|
277
|
-
if returned_path is None and not exists:
|
|
278
|
-
raise FileNotFoundError(f"❌ Failed to get @ {self.path}. Build the cache first with signed API.")
|
|
279
|
-
elif returned_path is None and exists and self.logger is not None:
|
|
280
|
-
self.logger(f"""
|
|
281
|
-
⚠️ ════════════════════ CLOUD FETCH WARNING ════════════════════
|
|
282
|
-
🔄 Failed to get fresh data from cloud
|
|
283
|
-
📦 Using old cache @ {self.path}
|
|
284
|
-
════════════════════════════════════════════════════════════════""")
|
|
285
|
-
else:
|
|
286
|
-
pass # maybe we don't need to fetch it from cloud, if its too hot
|
|
287
|
-
return self.reader(self.path)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# """Task scheduler
|
|
2
2
|
# """
|
|
3
3
|
|
|
4
|
-
# from machineconfig.utils.utils import get_shell_script_executing_python_file
|
|
5
4
|
# from machineconfig.utils.utils2 import read_ini
|
|
6
5
|
# from dataclasses import dataclass
|
|
7
6
|
# from datetime import datetime, timedelta
|
|
@@ -140,8 +139,6 @@
|
|
|
140
139
|
# start: datetime
|
|
141
140
|
# end: datetime
|
|
142
141
|
# status: str
|
|
143
|
-
|
|
144
|
-
# @classmethod
|
|
145
142
|
# def from_path(cls, path: PathExtended, return_default_if_not_found: bool=False):
|
|
146
143
|
# if not path.exists():
|
|
147
144
|
# if return_default_if_not_found:
|
|
@@ -6,7 +6,7 @@ capturing all user inputs collected during interactive execution.
|
|
|
6
6
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from typing import TypedDict, Literal, NotRequired
|
|
9
|
-
from machineconfig.scripts.python.fire_agents_help_launch import AGENTS
|
|
9
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_help_launch import AGENTS
|
|
10
10
|
|
|
11
11
|
SEARCH_STRATEGIES = Literal["file_path", "keyword_search", "filename_pattern"]
|
|
12
12
|
|
|
@@ -5,19 +5,16 @@ Utils
|
|
|
5
5
|
import machineconfig
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
|
-
EXCLUDE_DIRS = [".links", ".ai", ".
|
|
9
|
-
|
|
8
|
+
EXCLUDE_DIRS = [".links", ".ai", ".venv", ".git", ".idea", ".vscode", "node_modules", "__pycache__", ".mypy_cache"]
|
|
10
9
|
LIBRARY_ROOT = Path(machineconfig.__file__).resolve().parent
|
|
11
|
-
REPO_ROOT = LIBRARY_ROOT.parent.parent
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
CONFIG_ROOT = Path.home().joinpath(".config/machineconfig")
|
|
14
12
|
DEFAULTS_PATH = Path.home().joinpath("dotfiles/machineconfig/defaults.ini")
|
|
15
13
|
|
|
16
|
-
INSTALL_VERSION_ROOT =
|
|
14
|
+
INSTALL_VERSION_ROOT = CONFIG_ROOT.joinpath("cli_tools_installers/versions")
|
|
17
15
|
INSTALL_TMP_DIR = Path.home().joinpath("tmp_results", "tmp_installers")
|
|
18
16
|
|
|
19
17
|
# LINUX_INSTALL_PATH = '/usr/local/bin'
|
|
20
|
-
# LINUX_INSTALL_PATH = '~/.local/bin'
|
|
21
18
|
LINUX_INSTALL_PATH = Path.home().joinpath(".local/bin").__str__()
|
|
22
19
|
WINDOWS_INSTALL_PATH = Path.home().joinpath("AppData/Local/Microsoft/WindowsApps").__str__()
|
|
23
20
|
|