machineconfig 3.7__py3-none-any.whl → 7.69__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +7 -21
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +128 -0
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
- machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
- machineconfig/jobs/installer/custom_dev/brave.py +82 -0
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
- machineconfig/jobs/installer/custom_dev/goes.py +68 -0
- machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
- machineconfig/jobs/installer/custom_dev/redis.py +88 -0
- machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
- machineconfig/jobs/installer/installer_data.json +3440 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
- machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +255 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +198 -0
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/{mcinit.py → initai.py} +3 -38
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +129 -198
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +45 -131
- machineconfig/scripts/python/devops_navigator.py +6 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/fire_jobs.py +166 -235
- machineconfig/scripts/python/ftpx.py +164 -100
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +187 -0
- machineconfig/scripts/python/mcfg_entry.py +63 -0
- machineconfig/scripts/python/msearch.py +40 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +61 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/yazi.toml +14 -1
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +52 -12
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
- machineconfig/utils/installer_utils/install_from_url.py +180 -0
- machineconfig/utils/installer_utils/installer_class.py +239 -316
- machineconfig/utils/installer_utils/installer_cli.py +186 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
- machineconfig/utils/installer_utils/installer_runner.py +191 -0
- machineconfig/utils/io.py +77 -24
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +19 -47
- machineconfig/utils/path_extended.py +111 -121
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +28 -6
- machineconfig/utils/schemas/layouts/layout_types.py +34 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- machineconfig-7.69.dist-info/METADATA +124 -0
- machineconfig-7.69.dist-info/RECORD +454 -0
- machineconfig-7.69.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/cli_click.py +0 -102
- machineconfig/cluster/templates/cli_gooey.py +0 -115
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -48
- machineconfig/jobs/python/vscode/link_ve.py +0 -63
- machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
- machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/gh.py +0 -97
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -169
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/fire_agents +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/mcinit +0 -2
- machineconfig/scripts/linux/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/archive/im2text.py +0 -34
- machineconfig/scripts/python/archive/tmate_conn.py +0 -41
- machineconfig/scripts/python/archive/tmate_start.py +0 -44
- machineconfig/scripts/python/cloud_repo_sync.py +0 -192
- machineconfig/scripts/python/cloud_sync.py +0 -85
- machineconfig/scripts/python/devops_devapps_install.py +0 -202
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -176
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
- machineconfig/scripts/python/repos.py +0 -160
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/mcinit.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer.py +0 -255
- machineconfig-3.7.dist-info/METADATA +0 -165
- machineconfig-3.7.dist-info/RECORD +0 -432
- machineconfig-3.7.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
- machineconfig/jobs/{python → installer}/__init__.py +0 -0
- machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
- machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
- /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
|
@@ -1,191 +1,30 @@
|
|
|
1
|
-
Write-Host "
|
|
2
|
-
🚀 ===========================================
|
|
3
|
-
📦 Machine Configuration Installation Script
|
|
4
|
-
============================================="
|
|
5
1
|
|
|
6
|
-
Write-Host "ℹ️ If you have execution policy issues, run:
|
|
7
|
-
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser"
|
|
8
|
-
Write-Host "💡 To accept all prompts automatically, run: `$yesAll = `$true`n"
|
|
9
2
|
|
|
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
|
-
Write-Host "
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
# OR:
|
|
39
|
-
New-Item -ItemType SymbolicLink -Path `$env:USERPROFILE\dotfiles -Target \\wsl`$\Ubuntu\home\`$env:USERNAME\dotfiles"
|
|
40
|
-
|
|
41
|
-
Write-Host "`n☁️ Method 3: USING INTERNET SECURE SHARE
|
|
42
|
-
cd ~
|
|
43
|
-
cloud_copy SHARE_URL . --config ss
|
|
44
|
-
(requires symlinks to be created first)"
|
|
45
|
-
|
|
46
|
-
Write-Host "`n----------------------------------------"
|
|
47
|
-
if (-not $yesAll) {
|
|
48
|
-
$choice = Read-Host "🔒 Install SSH Server [y]/n"
|
|
49
|
-
} else {
|
|
50
|
-
$choice = "y"
|
|
51
|
-
}
|
|
52
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
53
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
54
|
-
Write-Host "`n🔧 Installing and configuring SSH server..."
|
|
55
|
-
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
|
56
|
-
Start-Service sshd
|
|
57
|
-
Set-Service -Name sshd -StartupType 'Automatic'
|
|
58
|
-
Write-Host "✅ SSH Server installed and configured successfully!"
|
|
59
|
-
} else {
|
|
60
|
-
Write-Host "⏭️ Skipping SSH server installation"
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
Write-Host "`n✨ ===========================================
|
|
64
|
-
🎉 Installation Complete!
|
|
65
|
-
============================================="
|
|
66
|
-
|
|
67
|
-
# Confirm copying finished
|
|
68
|
-
if (-not $yesAll) {
|
|
69
|
-
$choice = Read-Host "Did you finish copying [y]/n ? "
|
|
70
|
-
} else {
|
|
71
|
-
$choice = "y"
|
|
72
|
-
}
|
|
73
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
74
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
75
|
-
Write-Host "Proceeding..."
|
|
76
|
-
} else {
|
|
77
|
-
Write-Host "Installation aborted."
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
# Create Symlinks
|
|
81
|
-
if (-not $yesAll) {
|
|
82
|
-
$createLinksChoice = Read-Host "Create (Sym/Hard)links (finish dotfiles transfer first) [y]/n ? "
|
|
83
|
-
} else {
|
|
84
|
-
$createLinksChoice = "y"
|
|
85
|
-
}
|
|
86
|
-
if ([string]::IsNullOrEmpty($createLinksChoice)) { $createLinksChoice = "y" }
|
|
87
|
-
|
|
88
|
-
if ($createLinksChoice -eq "y" -or $createLinksChoice -eq "Y") {
|
|
89
|
-
if (-not $yesAll) {
|
|
90
|
-
$linkTypeChoice = Read-Host "Create Symlinks (s) or Hardlinks (h) [s]/h ? "
|
|
91
|
-
} else {
|
|
92
|
-
$linkTypeChoice = "h"
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
. ~\code\machineconfig\.venv\Scripts\Activate.ps1
|
|
96
|
-
|
|
97
|
-
if ($linkTypeChoice -eq "s" -or $linkTypeChoice -eq "S") {
|
|
98
|
-
python -m fire machineconfig.profile.create main --choice=all
|
|
99
|
-
} elseif ($linkTypeChoice -eq "h" -or $linkTypeChoice -eq "H") {
|
|
100
|
-
# python -m fire machineconfig.profile.create_hardlinks main --choice=all
|
|
101
|
-
python -m fire machineconfig.profile.create main --choice=all
|
|
102
|
-
} else {
|
|
103
|
-
Write-Host "Invalid choice for link type. Installation aborted."
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
# icacls "~\.ssh\*" /inheritance:r /grant:r "$($env:USERNAME):(F)"
|
|
107
|
-
# icacls "~\.ssh" /inheritance:r /grant:r "$($env:USERNAME):(F)"
|
|
108
|
-
} else {
|
|
109
|
-
Write-Host "Installation aborted."
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
# Install CLI Apps
|
|
113
|
-
if (-not $yesAll) {
|
|
114
|
-
$choice = Read-Host "Install CLI Apps [y]/n ? "
|
|
115
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
116
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
117
|
-
. ~\code\machineconfig\src\machineconfig\setup_windows\devapps.ps1
|
|
118
|
-
} else {
|
|
119
|
-
Write-Host "Installation aborted."
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
} else {
|
|
123
|
-
uv run --python 3.13 --with machineconfig python -m fire machineconfig.scripts.python.devops_devapps_install main --which=AllEssentials
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
# Retrieve Repos
|
|
128
|
-
if (-not $yesAll) {
|
|
129
|
-
$choice = Read-Host "Retrieve Repos at ~/code [y]/n ? "
|
|
130
|
-
} else {
|
|
131
|
-
$choice = "y"
|
|
132
|
-
}
|
|
133
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
134
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
135
|
-
repos ~\code --clone --cloud odg1
|
|
136
|
-
} else {
|
|
137
|
-
Write-Host "Installation aborted."
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
# Retrieve Data
|
|
141
|
-
if (-not $yesAll) {
|
|
142
|
-
$choice = Read-Host "Retrieve data [y]/n ? "
|
|
143
|
-
} else {
|
|
144
|
-
$choice = "y"
|
|
145
|
-
}
|
|
146
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
147
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
148
|
-
uv run --python 3.13 --with machineconfig python -m fire machineconfig.scripts.python.devops_backup_retrieve main --direction=RETRIEVE
|
|
149
|
-
} else {
|
|
150
|
-
Write-Host "Installation aborted."
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
# Install Brave, WezTerm, and VSCode
|
|
155
|
-
if (-not $yesAll) {
|
|
156
|
-
$choice = Read-Host "Install Brave+WindowsTerminal+WezTerm+VSCode [y]/n ? "
|
|
157
|
-
} else {
|
|
158
|
-
$choice = "y"
|
|
159
|
-
}
|
|
160
|
-
if ([string]::IsNullOrEmpty($choice)) { $choice = "y" }
|
|
161
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
162
|
-
winget install --no-upgrade --name "Windows Terminal" --Id "Microsoft.WindowsTerminal" --source winget --scope user --accept-package-agreements --accept-source-agreements # Terminal is is installed by default on W 11
|
|
163
|
-
winget install --no-upgrade --name "Powershell" --Id "Microsoft.PowerShell" --source winget --scope user --accept-package-agreements --accept-source-agreements # powershell require admin
|
|
164
|
-
winget install --no-upgrade --name "Brave" --Id "Brave.Brave" --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
165
|
-
winget install --no-upgrade --name "Microsoft Visual Studio Code" --Id "Microsoft.VisualStudioCode" --source winget --scope user --accept-package-agreements --accept-source-agreements
|
|
166
|
-
uv run --python 3.13 --with machineconfig python -m fire machineconfig.setup_windows.wt_and_pwsh.install_nerd_fonts main
|
|
167
|
-
uv run --python 3.13 --with machineconfig python -m fire machineconfig.setup_windows.wt_and_pwsh.set_wt_settings main
|
|
168
|
-
} else {
|
|
169
|
-
Write-Host "Installation aborted."
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
# Install Apps
|
|
174
|
-
if (-not $yesAll) {
|
|
175
|
-
$choice = Read-Host "Install Windows Apps [y]/n ? "
|
|
176
|
-
} else {
|
|
177
|
-
$choice = "y"
|
|
178
|
-
}
|
|
179
|
-
if ($choice -eq "y" -or $choice -eq "Y") {
|
|
180
|
-
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/apps.ps1" -OutFile "apps.ps1"
|
|
181
|
-
.\apps.ps1
|
|
182
|
-
} else {
|
|
183
|
-
Write-Host "Installation aborted."
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
# Instructions for Thunderbird profile restoration
|
|
187
|
-
# Run this after installing Thunderbird and starting it and shutting it down but before downloading backup
|
|
188
|
-
# cd ~/AppData/Roaming/ThunderBird/Profiles
|
|
189
|
-
# $res = Get-ChildItem
|
|
190
|
-
# $name = $res[0].Name
|
|
191
|
-
# Move-Item $backup_folder $name
|
|
3
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
|
|
5
|
+
|
|
6
|
+
function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" devops $args }
|
|
7
|
+
function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" cloud $args }
|
|
8
|
+
function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" agents $args }
|
|
9
|
+
function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" sessions $args }
|
|
10
|
+
function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" ftpx $args }
|
|
11
|
+
function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" fire $args }
|
|
12
|
+
function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" croshell $args }
|
|
13
|
+
function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" utils $args }
|
|
14
|
+
function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" terminal $args }
|
|
15
|
+
function msearch { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.69" msearch $args }
|
|
16
|
+
|
|
17
|
+
function d { wrap_in_shell_script devops @args }
|
|
18
|
+
function c { wrap_in_shell_script cloud @args }
|
|
19
|
+
function a { wrap_in_shell_script agents @args }
|
|
20
|
+
function sx { wrap_in_shell_script sessions @args }
|
|
21
|
+
function fx { wrap_in_shell_script ftpx @args }
|
|
22
|
+
function f { wrap_in_shell_script fire @args }
|
|
23
|
+
function rr { wrap_in_shell_script croshell @args }
|
|
24
|
+
function u { wrap_in_shell_script utils @args }
|
|
25
|
+
function t { wrap_in_shell_script terminal @args }
|
|
26
|
+
function ms { wrap_in_shell_script msearch @args }
|
|
27
|
+
|
|
28
|
+
Write-Host "mcfg command aliases are now defined in this PowerShell session."
|
|
29
|
+
|
|
30
|
+
devops self interactive
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
3
|
+
# iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
|
|
4
|
+
|
|
5
|
+
uv tool install --upgrade --python 3.14 machineconfig
|
|
6
|
+
|
|
7
|
+
devops install --group sysabc
|
|
8
|
+
|
|
9
|
+
# configs
|
|
10
|
+
devops config copy-assets both
|
|
11
|
+
devops config public --method copy --on-conflict overwrite-default-path --which all
|
|
12
|
+
devops config shell
|
|
13
|
+
devops config shell --which nushell
|
|
14
|
+
|
|
15
|
+
wt # start Windows Terminal to pick up config changes
|
|
16
|
+
devops install --group termabc
|
|
17
|
+
devops install --group gui
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"""Set Windows Terminal Settings"""
|
|
2
2
|
|
|
3
3
|
from machineconfig.utils.accessories import randstr
|
|
4
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
4
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
5
5
|
from machineconfig.utils.io import read_json, save_json
|
|
6
6
|
import platform
|
|
7
7
|
|
|
8
8
|
# from uuid import uuid4
|
|
9
9
|
import os
|
|
10
10
|
from typing import Any
|
|
11
|
+
from rich import box
|
|
11
12
|
from rich.console import Console
|
|
12
13
|
from rich.panel import Panel
|
|
13
14
|
|
|
@@ -28,34 +29,41 @@ system = platform.system() # Linux or Windows
|
|
|
28
29
|
assert system == "Windows", "This script is only for Windows."
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
def render_banner(message: str, title: str, border_style: str, box_style: box.Box) -> None:
|
|
33
|
+
console.print(Panel.fit(message, title=title, border_style=border_style, box=box_style, padding=(1, 4)))
|
|
34
|
+
|
|
35
|
+
|
|
31
36
|
class TerminalSettings(object):
|
|
32
37
|
def __init__(self):
|
|
33
38
|
# Grabbing Terminal Settings file:
|
|
34
|
-
print(
|
|
39
|
+
console.print()
|
|
40
|
+
render_banner("🔍 INITIALIZING TERMINAL SETTINGS 🔍", "Windows Terminal", "cyan", box.DOUBLE)
|
|
41
|
+
console.print()
|
|
35
42
|
tmp = os.getenv("LOCALAPPDATA")
|
|
36
43
|
if not isinstance(tmp, str):
|
|
37
|
-
print("❌ ERROR: Could not find LOCALAPPDATA environment variable!")
|
|
44
|
+
console.print("❌ ERROR: Could not find LOCALAPPDATA environment variable!")
|
|
38
45
|
raise ValueError("Could not find LOCALAPPDATA environment variable.")
|
|
39
46
|
self.path = PathExtended(tmp).joinpath(r"Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json")
|
|
40
47
|
backup_name = f".orig_{randstr()}"
|
|
41
|
-
print(f"📝 Creating backup of original settings as {backup_name}...")
|
|
48
|
+
console.print(f"📝 Creating backup of original settings as {backup_name}...")
|
|
42
49
|
self.path.copy(append=backup_name)
|
|
43
|
-
print(f"📂 Loading Windows Terminal settings from: {self.path}")
|
|
50
|
+
console.print(f"📂 Loading Windows Terminal settings from: {self.path}")
|
|
44
51
|
self.dat: dict[str, Any] = read_json(self.path)
|
|
45
52
|
# Use a plain Python list for profiles
|
|
46
53
|
self.profs = list(self.dat["profiles"]["list"])
|
|
47
|
-
console
|
|
48
|
-
console.print(Panel(f"✅ Successfully loaded {len(self.profs)} profiles", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue"))
|
|
54
|
+
console.print(Panel(f"✅ Successfully loaded {len(self.profs)} profiles", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue", box=box.ROUNDED))
|
|
49
55
|
|
|
50
56
|
def save_terminal_settings(self):
|
|
51
|
-
print(
|
|
57
|
+
console.print()
|
|
58
|
+
console.print(f"💾 Saving terminal settings to: {self.path}")
|
|
52
59
|
self.dat["profiles"]["list"] = list(self.profs)
|
|
53
60
|
save_json(obj=self.dat, path=self.path, indent=5)
|
|
54
|
-
console.print(Panel("✅ Settings saved successfully!", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue"))
|
|
61
|
+
console.print(Panel("✅ Settings saved successfully!", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue", box=box.ROUNDED))
|
|
55
62
|
|
|
56
63
|
# ========================= Terminal Settings =========================================
|
|
57
64
|
def update_default_settings(self):
|
|
58
|
-
print(
|
|
65
|
+
console.print()
|
|
66
|
+
console.print("⚙️ Updating default terminal settings...")
|
|
59
67
|
# Changing start up settings:
|
|
60
68
|
self.dat["startOnUserLogin"] = True
|
|
61
69
|
self.dat["launchMode"] = "fullscreen"
|
|
@@ -64,12 +72,13 @@ class TerminalSettings(object):
|
|
|
64
72
|
self.dat["copyOnSelect"] = True
|
|
65
73
|
self.dat["profiles"]["defaults"]["padding"] = "0"
|
|
66
74
|
self.dat["profiles"]["defaults"]["useAcrylic"] = False
|
|
67
|
-
console.print(Panel("✅ Default settings updated", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue"))
|
|
75
|
+
console.print(Panel("✅ Default settings updated", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue", box=box.ROUNDED))
|
|
68
76
|
|
|
69
77
|
# 1- Customizing Powershell========================================================
|
|
70
78
|
# as opposed to Windows Powershell
|
|
71
79
|
def customize_powershell(self, nerd_font: bool = True):
|
|
72
|
-
print(
|
|
80
|
+
console.print()
|
|
81
|
+
console.print("🛠️ Customizing PowerShell profile...")
|
|
73
82
|
pwsh: dict[str, Any] = dict(
|
|
74
83
|
name="PowerShell",
|
|
75
84
|
commandline="pwsh",
|
|
@@ -79,45 +88,50 @@ class TerminalSettings(object):
|
|
|
79
88
|
startingDirectory="%USERPROFILE%", # "%USERPROFILE%", # None: inherent from parent process.
|
|
80
89
|
)
|
|
81
90
|
if nerd_font:
|
|
82
|
-
print("🔤 Setting PowerShell font to CaskaydiaCove Nerd Font...")
|
|
91
|
+
console.print("🔤 Setting PowerShell font to CaskaydiaCove Nerd Font...")
|
|
83
92
|
pwsh["font"] = dict(face="CaskaydiaCove Nerd Font") # because oh-my-posh uses glyphs from this font.
|
|
84
93
|
|
|
85
94
|
for idx, item in enumerate(self.profs):
|
|
86
95
|
if item["name"] == "PowerShell":
|
|
87
96
|
self.profs[idx].update(pwsh)
|
|
88
|
-
console.print(Panel("✅ PowerShell profile customized successfully", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue"))
|
|
97
|
+
console.print(Panel("✅ PowerShell profile customized successfully", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue", box=box.ROUNDED))
|
|
89
98
|
break
|
|
90
99
|
else:
|
|
91
|
-
console.print(Panel("❌ Couldn't customize PowerShell because profile not found, try to install it first.", title="[bold red]Terminal Settings[/bold red]", border_style="red"))
|
|
100
|
+
console.print(Panel("❌ Couldn't customize PowerShell because profile not found, try to install it first.", title="[bold red]Terminal Settings[/bold red]", border_style="red", box=box.ROUNDED))
|
|
92
101
|
|
|
93
102
|
def make_powershell_default_profile(self):
|
|
94
|
-
print(
|
|
103
|
+
console.print()
|
|
104
|
+
console.print("🌟 Setting PowerShell as the default profile...")
|
|
95
105
|
for profile in self.profs:
|
|
96
106
|
if profile["name"] == "PowerShell":
|
|
97
107
|
self.dat["defaultProfile"] = profile["guid"]
|
|
98
|
-
console.print(Panel("✅ PowerShell is now the default profile!", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue"))
|
|
108
|
+
console.print(Panel("✅ PowerShell is now the default profile!", title="[bold blue]Terminal Settings[/bold blue]", border_style="blue", box=box.ROUNDED))
|
|
99
109
|
break
|
|
100
110
|
else:
|
|
101
|
-
console.print(Panel("❌ PowerShell profile was not found in the list of profiles and therefore was not made the default.", title="[bold red]Terminal Settings[/bold red]", border_style="red"))
|
|
111
|
+
console.print(Panel("❌ PowerShell profile was not found in the list of profiles and therefore was not made the default.", title="[bold red]Terminal Settings[/bold red]", border_style="red", box=box.ROUNDED))
|
|
102
112
|
|
|
103
113
|
|
|
104
114
|
def main():
|
|
105
|
-
print(
|
|
115
|
+
console.print()
|
|
116
|
+
render_banner("🖥️ WINDOWS TERMINAL SETUP 🖥️", "Windows Terminal", "cyan", box.DOUBLE)
|
|
117
|
+
console.print()
|
|
106
118
|
shell = {"powershell": "pwsh.exe", "Windows Powershell": "powershell.exe"}["powershell"].split(".exe", maxsplit=1)[0]
|
|
107
119
|
if shell == "pwsh":
|
|
108
|
-
print("🚀 Starting Windows Terminal configuration with PowerShell...")
|
|
120
|
+
console.print("🚀 Starting Windows Terminal configuration with PowerShell...")
|
|
109
121
|
ts = TerminalSettings()
|
|
110
122
|
ts.update_default_settings()
|
|
111
123
|
ts.customize_powershell(nerd_font=True)
|
|
112
124
|
ts.make_powershell_default_profile()
|
|
113
|
-
print("⌨️ Adding keyboard shortcut for pane zoom (ctrl+shift+z)...")
|
|
125
|
+
console.print("⌨️ Adding keyboard shortcut for pane zoom (ctrl+shift+z)...")
|
|
114
126
|
ts.dat["actions"].append({"command": "togglePaneZoom", "keys": "ctrl+shift+z"})
|
|
115
127
|
|
|
116
128
|
ts.save_terminal_settings()
|
|
117
|
-
print(
|
|
129
|
+
console.print()
|
|
130
|
+
render_banner("✨ WINDOWS TERMINAL SETUP COMPLETE ✨", "Windows Terminal", "green", box.DOUBLE)
|
|
131
|
+
console.print()
|
|
118
132
|
else:
|
|
119
133
|
error_msg = "❌ ERROR: Only PowerShell is supported, not Windows PowerShell!"
|
|
120
|
-
print(error_msg)
|
|
134
|
+
console.print(error_msg)
|
|
121
135
|
raise NotImplementedError(error_msg)
|
|
122
136
|
|
|
123
137
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
1
|
from typing import Optional, Any
|
|
3
2
|
|
|
3
|
+
from datetime import datetime, timezone, timedelta
|
|
4
|
+
|
|
4
5
|
|
|
5
6
|
def randstr(length: int = 10, lower: bool = True, upper: bool = True, digits: bool = True, punctuation: bool = False, safe: bool = False, noun: bool = False) -> str:
|
|
6
7
|
if safe:
|
|
@@ -18,23 +19,58 @@ def randstr(length: int = 10, lower: bool = True, upper: bool = True, digits: bo
|
|
|
18
19
|
return "".join(random.choices(population, k=length))
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
def
|
|
22
|
+
def split_timeframe(start_dt: str, end_dt: str, resolution_ms: int, to: Optional[int]=None, every_ms: Optional[int]=None) -> list[tuple[datetime, datetime]]:
|
|
23
|
+
if (to is None) == (every_ms is None):
|
|
24
|
+
raise ValueError("Exactly one of 'to' or 'every_ms' must be provided, not both or neither")
|
|
25
|
+
start_dt_obj = datetime.fromisoformat(start_dt).replace(tzinfo=timezone.utc)
|
|
26
|
+
end_dt_obj = datetime.fromisoformat(end_dt).replace(tzinfo=timezone.utc)
|
|
27
|
+
delta = end_dt_obj - start_dt_obj
|
|
28
|
+
resolution = timedelta(milliseconds=resolution_ms)
|
|
29
|
+
res: list[tuple[datetime, datetime]] = []
|
|
30
|
+
if to is not None:
|
|
31
|
+
split_size_seconds: float = delta.total_seconds() / to
|
|
32
|
+
split_size_rounded: float = round(split_size_seconds / 60) * 60
|
|
33
|
+
split_size = timedelta(seconds=split_size_rounded)
|
|
34
|
+
|
|
35
|
+
for idx in range(to):
|
|
36
|
+
start = start_dt_obj + split_size * idx
|
|
37
|
+
assert start < end_dt_obj
|
|
38
|
+
if idx == to - 1:
|
|
39
|
+
end = end_dt_obj
|
|
40
|
+
else:
|
|
41
|
+
end = start_dt_obj + split_size * (idx + 1) - resolution
|
|
42
|
+
res.append((start, end))
|
|
43
|
+
else:
|
|
44
|
+
if every_ms is None:
|
|
45
|
+
raise ValueError("every_ms cannot be None when to is None")
|
|
46
|
+
split_size = timedelta(milliseconds=every_ms)
|
|
47
|
+
current_start = start_dt_obj
|
|
48
|
+
while current_start < end_dt_obj:
|
|
49
|
+
current_end = min(current_start + split_size - resolution, end_dt_obj)
|
|
50
|
+
res.append((current_start, current_end))
|
|
51
|
+
current_start += split_size
|
|
52
|
+
return res
|
|
53
|
+
def split_list[T](sequence: list[T], every: Optional[int]=None, to: Optional[int]=None) -> list[list[T]]:
|
|
54
|
+
if (every is None) == (to is None):
|
|
55
|
+
raise ValueError("Exactly one of 'every' or 'to' must be provided, not both or neither")
|
|
56
|
+
if len(sequence) == 0:
|
|
57
|
+
return []
|
|
22
58
|
import math
|
|
23
|
-
|
|
24
|
-
|
|
59
|
+
if to is not None:
|
|
60
|
+
every = math.ceil(len(sequence) / to)
|
|
61
|
+
assert every is not None
|
|
25
62
|
res: list[list[T]] = []
|
|
26
|
-
for ix in range(0, len(
|
|
27
|
-
if ix + every < len(
|
|
28
|
-
tmp =
|
|
63
|
+
for ix in range(0, len(sequence), every):
|
|
64
|
+
if ix + every < len(sequence):
|
|
65
|
+
tmp = sequence[ix : ix + every]
|
|
29
66
|
else:
|
|
30
|
-
tmp =
|
|
67
|
+
tmp = sequence[ix : len(sequence)]
|
|
31
68
|
res.append(list(tmp))
|
|
32
69
|
return list(res)
|
|
33
70
|
|
|
34
71
|
|
|
35
72
|
def pprint(obj: dict[Any, Any], title: str) -> None:
|
|
36
73
|
from rich import inspect
|
|
37
|
-
|
|
38
74
|
inspect(type("TempStruct", (object,), obj)(), value=False, title=title, docs=False, dunder=False, sort=False)
|
|
39
75
|
|
|
40
76
|
|
|
@@ -59,14 +95,18 @@ def human_friendly_dict(d: dict[str, Any]) -> dict[str, Any]:
|
|
|
59
95
|
return result
|
|
60
96
|
|
|
61
97
|
|
|
62
|
-
def get_repo_root(path: Path) -> Optional[Path]:
|
|
98
|
+
def get_repo_root(path: "Path") -> Optional["Path"]:
|
|
63
99
|
from git import Repo, InvalidGitRepositoryError
|
|
64
|
-
|
|
65
100
|
try:
|
|
66
|
-
repo = Repo(
|
|
101
|
+
repo = Repo(path, search_parent_directories=True)
|
|
67
102
|
root = repo.working_tree_dir
|
|
68
103
|
if root is not None:
|
|
104
|
+
from pathlib import Path
|
|
69
105
|
return Path(root)
|
|
70
106
|
except InvalidGitRepositoryError:
|
|
71
107
|
pass
|
|
72
108
|
return None
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
if __name__ == "__main__":
|
|
112
|
+
from pathlib import Path
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# OneDrive API without rclone
|
|
2
|
+
|
|
3
|
+
This module provides direct OneDrive integration using Microsoft Graph API without requiring rclone.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ✅ Automatic token refresh when expired
|
|
8
|
+
- ✅ Persistent token storage
|
|
9
|
+
- ✅ Upload/download files with progress tracking
|
|
10
|
+
- ✅ Support for large file uploads (chunked)
|
|
11
|
+
- ✅ Direct OAuth2 authentication setup
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
### Option 1: Direct OAuth Setup (Recommended)
|
|
16
|
+
|
|
17
|
+
1. **Set up Azure App Registration:**
|
|
18
|
+
- Go to [Azure Portal](https://portal.azure.com)
|
|
19
|
+
- Navigate to 'Azure Active Directory' > 'App registrations'
|
|
20
|
+
- Click 'New registration'
|
|
21
|
+
- Name: 'OneDrive API Access'
|
|
22
|
+
- Redirect URI: `http://localhost:8080/callback`
|
|
23
|
+
- Add permissions: `Files.ReadWrite.All` and `offline_access`
|
|
24
|
+
|
|
25
|
+
2. **Set environment variables:**
|
|
26
|
+
```bash
|
|
27
|
+
export ONEDRIVE_CLIENT_ID='your_client_id_here'
|
|
28
|
+
export ONEDRIVE_REDIRECT_URI='http://localhost:8080/callback'
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
3. **Run initial setup:**
|
|
32
|
+
```python
|
|
33
|
+
from transaction import setup_oauth_authentication
|
|
34
|
+
setup_oauth_authentication()
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Option 2: Using existing rclone token
|
|
38
|
+
|
|
39
|
+
If you already have rclone configured, the system will automatically use and refresh your existing tokens.
|
|
40
|
+
|
|
41
|
+
## Usage Examples
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from transaction import push_to_onedrive, pull_from_onedrive
|
|
45
|
+
|
|
46
|
+
# Upload a file
|
|
47
|
+
success = push_to_onedrive('/path/to/local/file.pdf', '/Documents/file.pdf')
|
|
48
|
+
|
|
49
|
+
# Download a file
|
|
50
|
+
success = pull_from_onedrive('/Documents/file.pdf', '/path/to/local/downloaded.pdf')
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Token Management
|
|
54
|
+
|
|
55
|
+
### Automatic Token Refresh
|
|
56
|
+
|
|
57
|
+
The system automatically handles token refresh:
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from transaction import get_access_token
|
|
61
|
+
|
|
62
|
+
# This will automatically refresh if expired
|
|
63
|
+
token = get_access_token()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Manual Token Operations
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from transaction import refresh_access_token, save_token_to_file, load_token_from_file
|
|
70
|
+
|
|
71
|
+
# Manually refresh token
|
|
72
|
+
new_token = refresh_access_token()
|
|
73
|
+
|
|
74
|
+
# Save token to file
|
|
75
|
+
save_token_to_file(token_data)
|
|
76
|
+
|
|
77
|
+
# Load token from file
|
|
78
|
+
token_data = load_token_from_file()
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## How Token Renewal Works
|
|
82
|
+
|
|
83
|
+
1. **Automatic Detection**: The system checks token expiry before each API call
|
|
84
|
+
2. **Refresh Attempt**: If expired, it automatically uses the refresh token to get a new access token
|
|
85
|
+
3. **Persistent Storage**: New tokens are saved to `~/.onedrive_token.json` for future use
|
|
86
|
+
4. **Fallback**: If refresh fails, it provides clear instructions for manual intervention
|
|
87
|
+
|
|
88
|
+
## No rclone Required
|
|
89
|
+
|
|
90
|
+
This implementation eliminates the need for rclone by:
|
|
91
|
+
|
|
92
|
+
- Using Microsoft Graph API directly
|
|
93
|
+
- Implementing OAuth2 flow natively
|
|
94
|
+
- Managing token lifecycle automatically
|
|
95
|
+
- Providing persistent token storage
|
|
96
|
+
|
|
97
|
+
## Error Handling
|
|
98
|
+
|
|
99
|
+
The system gracefully handles various scenarios:
|
|
100
|
+
|
|
101
|
+
- Expired tokens → Automatic refresh
|
|
102
|
+
- Network errors → Detailed error messages
|
|
103
|
+
- Missing permissions → Clear setup instructions
|
|
104
|
+
- Invalid tokens → Step-by-step recovery guide
|
|
105
|
+
|
|
106
|
+
## Files Created
|
|
107
|
+
|
|
108
|
+
- `~/.onedrive_token.json`: Encrypted token storage (chmod 600)
|
|
109
|
+
- Token is automatically loaded on import
|
|
110
|
+
|
|
111
|
+
## Security
|
|
112
|
+
|
|
113
|
+
- Tokens are stored with restrictive permissions (600)
|
|
114
|
+
- Client secrets are optional (public client mode supported)
|
|
115
|
+
- Refresh tokens are securely managed
|
|
116
|
+
- No sensitive data in logs
|
|
117
|
+
|
|
118
|
+
## Troubleshooting
|
|
119
|
+
|
|
120
|
+
### Token Refresh Failed
|
|
121
|
+
```python
|
|
122
|
+
# Try manual refresh
|
|
123
|
+
from transaction import refresh_access_token
|
|
124
|
+
token = refresh_access_token()
|
|
125
|
+
|
|
126
|
+
# Or re-run OAuth setup
|
|
127
|
+
from transaction import setup_oauth_authentication
|
|
128
|
+
setup_oauth_authentication()
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Permission Errors
|
|
132
|
+
Make sure your Azure app has the correct permissions:
|
|
133
|
+
- `Files.ReadWrite.All` (Delegated)
|
|
134
|
+
- `offline_access` (Delegated)
|
|
135
|
+
|
|
136
|
+
### Network Issues
|
|
137
|
+
Check your firewall allows connections to:
|
|
138
|
+
- `https://login.microsoftonline.com`
|
|
139
|
+
- `https://graph.microsoft.com`
|