machineconfig 3.5__py3-none-any.whl → 3.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/jobs/python/python_ve_symlink.py +1 -1
- machineconfig/profile/create.py +3 -3
- machineconfig/profile/shell.py +2 -2
- machineconfig/scripts/linux/{mcinit → initai} +1 -1
- machineconfig/scripts/python/ai/{mcinit.py → initai.py} +1 -1
- machineconfig/scripts/python/choose_wezterm_theme.py +2 -2
- machineconfig/scripts/python/cloud_mount.py +2 -2
- machineconfig/scripts/python/cloud_repo_sync.py +2 -2
- machineconfig/scripts/python/croshell.py +2 -2
- machineconfig/scripts/python/devops.py +2 -2
- machineconfig/scripts/python/devops_add_identity.py +3 -8
- machineconfig/scripts/python/devops_add_ssh_key.py +2 -4
- machineconfig/scripts/python/devops_backup_retrieve.py +2 -2
- machineconfig/scripts/python/devops_devapps_install.py +4 -4
- machineconfig/scripts/python/fire_agents.py +4 -4
- machineconfig/scripts/python/fire_jobs.py +5 -5
- machineconfig/scripts/python/fire_jobs_layout_helper.py +4 -4
- machineconfig/scripts/python/mount_nfs.py +3 -3
- machineconfig/scripts/python/start_terminals.py +2 -2
- machineconfig/scripts/windows/{mcinit.ps1 → initai.ps1} +1 -1
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +2 -2
- machineconfig/utils/installer_utils/installer_class.py +3 -3
- machineconfig/utils/options.py +25 -18
- machineconfig/utils/path_helper.py +2 -2
- machineconfig/utils/procs.py +2 -2
- machineconfig/utils/scheduling.py +2 -2
- {machineconfig-3.5.dist-info → machineconfig-3.8.dist-info}/METADATA +1 -1
- {machineconfig-3.5.dist-info → machineconfig-3.8.dist-info}/RECORD +32 -32
- {machineconfig-3.5.dist-info → machineconfig-3.8.dist-info}/entry_points.txt +1 -1
- {machineconfig-3.5.dist-info → machineconfig-3.8.dist-info}/WHEEL +0 -0
- {machineconfig-3.5.dist-info → machineconfig-3.8.dist-info}/top_level.txt +0 -0
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
# The reason it is not automated for remotes is because even though the server might have failed, the processes therein might be running, so there is no automated way to tell."""
|
|
244
244
|
# log = self.read_log()
|
|
245
245
|
# jobs_all: list[str] = [p.name for p in self.base_path.expanduser().joinpath("jobs").iterdir()]
|
|
246
|
-
# jobs_selected =
|
|
246
|
+
# jobs_selected = choose_from_options(options=jobs_all, msg="Select Jobs to Redo", multi=True, fzf=True)
|
|
247
247
|
# for a_job in jobs_selected:
|
|
248
248
|
# # find in which log list does this job live:
|
|
249
249
|
# found_log_type = None
|
machineconfig/profile/create.py
CHANGED
|
@@ -8,7 +8,7 @@ from rich.console import Console
|
|
|
8
8
|
|
|
9
9
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
10
10
|
from machineconfig.utils.links import symlink_func, symlink_copy
|
|
11
|
-
from machineconfig.utils.options import
|
|
11
|
+
from machineconfig.utils.options import choose_from_options
|
|
12
12
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, REPO_ROOT
|
|
13
13
|
from machineconfig.profile.shell import create_default_shell_profile
|
|
14
14
|
|
|
@@ -53,13 +53,13 @@ def apply_mapper(choice: Optional[str] = None):
|
|
|
53
53
|
|
|
54
54
|
program_keys.sort()
|
|
55
55
|
if choice is None:
|
|
56
|
-
choice_selected =
|
|
56
|
+
choice_selected = choose_from_options(msg="Which symlink to create?", options=program_keys + ["all", "none(EXIT)"], default="none(EXIT)", fzf=True, multi=True)
|
|
57
57
|
assert isinstance(choice_selected, list)
|
|
58
58
|
if len(choice_selected) == 1 and choice_selected[0] == "none(EXIT)":
|
|
59
59
|
return # terminate function.
|
|
60
60
|
elif len(choice_selected) == 1 and choice_selected[0] == "all":
|
|
61
61
|
choice_selected = "all" # i.e. program_keys = program_keys
|
|
62
|
-
# overwrite =
|
|
62
|
+
# overwrite = choose_from_options(msg="Overwrite existing source file?", options=["yes", "no"], default="yes") == "yes"
|
|
63
63
|
from rich.prompt import Confirm
|
|
64
64
|
|
|
65
65
|
prioritize_to_this = Confirm.ask("Overwrite existing source file?", default=True)
|
machineconfig/profile/shell.py
CHANGED
|
@@ -94,7 +94,7 @@ def create_default_shell_profile() -> None:
|
|
|
94
94
|
# console.print(Panel("🔄 Adding sources to shell profile", title="[bold blue]Sources[/bold blue]", border_style="blue"))
|
|
95
95
|
|
|
96
96
|
# if choice is None:
|
|
97
|
-
# choice_obj =
|
|
97
|
+
# choice_obj = choose_from_options(msg="Which patch to add?", options=sources + ["all", "none(EXIT)"], default="none(EXIT)", multi=True)
|
|
98
98
|
# if isinstance(choice_obj, str):
|
|
99
99
|
# if choice_obj == "all":
|
|
100
100
|
# choice = choice_obj
|
|
@@ -139,7 +139,7 @@ def create_default_shell_profile() -> None:
|
|
|
139
139
|
# console.print(Panel("🩹 Adding patches to shell profile", title="[bold blue]Patches[/bold blue]", border_style="blue"))
|
|
140
140
|
|
|
141
141
|
# if choice is None:
|
|
142
|
-
# choice_chosen =
|
|
142
|
+
# choice_chosen = choose_from_options(msg="Which patch to add?", options=list(patches) + ["all", "none(EXIT)"], default="none(EXIT)", multi=False)
|
|
143
143
|
# assert isinstance(choice_chosen, str), f"Choice must be a string or a list of strings, not {type(choice)}"
|
|
144
144
|
# choice = choice_chosen
|
|
145
145
|
# if choice == "none(EXIT)":
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
uv run --python 3.13 --no-dev --project $HOME/code/machineconfig
|
|
2
|
+
uv run --python 3.13 --no-dev --project $HOME/code/machineconfig initai "$@"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Choose a theme for Wezterm
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from machineconfig.utils.options import
|
|
5
|
+
from machineconfig.utils.options import choose_from_options
|
|
6
6
|
from machineconfig.utils.path_extended import PathExtended
|
|
7
7
|
from typing import Any
|
|
8
8
|
import time
|
|
@@ -45,7 +45,7 @@ schemes_list = [
|
|
|
45
45
|
|
|
46
46
|
def main2():
|
|
47
47
|
console.print(Panel("🎨 WezTerm Theme Selector", title_align="left", border_style="green"))
|
|
48
|
-
option =
|
|
48
|
+
option = choose_from_options(multi=False, options=schemes_list, header="Choose a theme for Wezterm", fzf=True, msg="Use arrow keys to navigate, Enter to select a theme")
|
|
49
49
|
set_theme(option)
|
|
50
50
|
print(f"✅ Theme set to: {option}")
|
|
51
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Cloud mount script"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.options import
|
|
3
|
+
from machineconfig.utils.options import choose_from_options
|
|
4
4
|
from machineconfig.utils.io import read_ini
|
|
5
5
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
6
6
|
|
|
@@ -59,7 +59,7 @@ def mount(cloud: Optional[str], network: Optional[str], destination: Optional[st
|
|
|
59
59
|
|
|
60
60
|
config = get_rclone_config()
|
|
61
61
|
if cloud is None:
|
|
62
|
-
res =
|
|
62
|
+
res = choose_from_options(multi=False, msg="which cloud", options=config.sections(), header="CLOUD MOUNT", default=None)
|
|
63
63
|
if type(res) is str:
|
|
64
64
|
cloud = res
|
|
65
65
|
else:
|
|
@@ -9,7 +9,7 @@ from machineconfig.utils.accessories import randstr
|
|
|
9
9
|
|
|
10
10
|
from machineconfig.scripts.python.helpers.repo_sync_helpers import fetch_dotfiles
|
|
11
11
|
from machineconfig.utils.source_of_truth import CONFIG_PATH, DEFAULTS_PATH
|
|
12
|
-
from machineconfig.utils.options import
|
|
12
|
+
from machineconfig.utils.options import choose_from_options
|
|
13
13
|
from machineconfig.utils.code import get_shell_file_executing_python_script, write_shell_script_to_file
|
|
14
14
|
import platform
|
|
15
15
|
import argparse
|
|
@@ -141,7 +141,7 @@ git commit -am "finished merging"
|
|
|
141
141
|
program_content = None
|
|
142
142
|
match action:
|
|
143
143
|
case "ask":
|
|
144
|
-
choice =
|
|
144
|
+
choice = choose_from_options(multi=False, msg="Choose one option", options=[option1, option2, option3, option4], fzf=False)
|
|
145
145
|
if choice == option1:
|
|
146
146
|
program_content = shell_file_1.read_text(encoding="utf-8")
|
|
147
147
|
elif choice == option2:
|
|
@@ -8,7 +8,7 @@ import argparse
|
|
|
8
8
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
9
9
|
from machineconfig.utils.accessories import randstr
|
|
10
10
|
|
|
11
|
-
from machineconfig.utils.options import
|
|
11
|
+
from machineconfig.utils.options import choose_from_options
|
|
12
12
|
from machineconfig.utils.ve import get_ve_activate_line
|
|
13
13
|
from typing import Optional
|
|
14
14
|
from rich.console import Console
|
|
@@ -121,7 +121,7 @@ def build_parser():
|
|
|
121
121
|
text = "🔍 Searching for Python files..."
|
|
122
122
|
console.print(Panel(text, title="[bold blue]Info[/bold blue]"))
|
|
123
123
|
options = [str(item) for item in PathExtended.cwd().search("*.py", r=True)]
|
|
124
|
-
file =
|
|
124
|
+
file = choose_from_options(msg="Choose a python file to run", options=options, fzf=True, multi=False)
|
|
125
125
|
assert isinstance(file, str)
|
|
126
126
|
program = PathExtended(file).read_text(encoding="utf-8")
|
|
127
127
|
text = f"📄 Selected file: {PathExtended(file).name}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""devops with emojis"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.options import
|
|
3
|
+
from machineconfig.utils.options import choose_from_options
|
|
4
4
|
|
|
5
5
|
from platform import system
|
|
6
6
|
from enum import Enum
|
|
@@ -45,7 +45,7 @@ def main(which: Optional[str] = None):
|
|
|
45
45
|
options = [op.value for op in Options]
|
|
46
46
|
if which is None:
|
|
47
47
|
try:
|
|
48
|
-
choice_key =
|
|
48
|
+
choice_key = choose_from_options(msg="", options=options, header="🛠️ DEVOPS", default=options[0], multi=False)
|
|
49
49
|
except KeyboardInterrupt:
|
|
50
50
|
console.print(Panel("❌ Operation cancelled by user", title_align="left", border_style="red", width=BOX_WIDTH))
|
|
51
51
|
return
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# from platform import system
|
|
4
4
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
5
|
-
from machineconfig.utils.options import
|
|
5
|
+
from machineconfig.utils.options import choose_from_options
|
|
6
6
|
from rich.panel import Panel
|
|
7
7
|
from rich.text import Text
|
|
8
8
|
|
|
@@ -22,7 +22,7 @@ def main() -> None:
|
|
|
22
22
|
else:
|
|
23
23
|
print(Panel("⚠️ No SSH private keys found", expand=False))
|
|
24
24
|
|
|
25
|
-
choice =
|
|
25
|
+
choice = choose_from_options(msg="Path to private key to be used when ssh'ing: ", options=[str(x) for x in private_keys] + ["I have the path to the key file", "I want to paste the key itself"], multi=False)
|
|
26
26
|
|
|
27
27
|
if choice == "I have the path to the key file":
|
|
28
28
|
print(Panel("📄 Please enter the path to your private key file", expand=False))
|
|
@@ -37,15 +37,10 @@ def main() -> None:
|
|
|
37
37
|
path_to_key.write_text(input("🔑 Paste the private key here: "), encoding="utf-8")
|
|
38
38
|
print(Panel(f"💾 Key saved to: {path_to_key}", expand=False))
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
else:
|
|
41
41
|
path_to_key = PathExtended(choice)
|
|
42
42
|
print(Panel(f"🔑 Using selected key: {path_to_key.name}", expand=False))
|
|
43
43
|
|
|
44
|
-
else:
|
|
45
|
-
error_message = f"❌ ERROR: Invalid choice\nThe selected option is not supported: {choice}"
|
|
46
|
-
print(Panel(Text(error_message, justify="center"), expand=False, border_style="red"))
|
|
47
|
-
raise NotImplementedError(f"Choice {choice} not supported")
|
|
48
|
-
|
|
49
44
|
txt = f"IdentityFile {path_to_key.collapseuser().as_posix()}" # adds this id for all connections, no host specified.
|
|
50
45
|
config_path = PathExtended.home().joinpath(".ssh/config")
|
|
51
46
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from platform import system
|
|
4
4
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
5
|
-
from machineconfig.utils.options import
|
|
5
|
+
from machineconfig.utils.options import choose_from_options
|
|
6
6
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
from rich.panel import Panel
|
|
@@ -84,9 +84,7 @@ def main() -> None:
|
|
|
84
84
|
i_have_path_option = "I have the path to the key file"
|
|
85
85
|
i_paste_option = "I want to paste the key itself"
|
|
86
86
|
|
|
87
|
-
res =
|
|
88
|
-
assert isinstance(res, str), f"Got {res} of type {type(res)} instead of str."
|
|
89
|
-
|
|
87
|
+
res = choose_from_options("Which public key to add? ", options=[str(x) for x in pub_keys] + [all_keys_option, i_have_path_option, i_paste_option], multi=False)
|
|
90
88
|
if res == all_keys_option:
|
|
91
89
|
console.print(Panel(f"🔄 Processing all {len(pub_keys)} public keys...", title="[bold blue]Processing[/bold blue]", border_style="blue"))
|
|
92
90
|
program = "\n\n\n".join([get_add_ssh_key_script(key) for key in pub_keys])
|
|
@@ -5,7 +5,7 @@ from machineconfig.utils.io import read_ini
|
|
|
5
5
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
6
6
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, DEFAULTS_PATH
|
|
7
7
|
from machineconfig.utils.code import print_code
|
|
8
|
-
from machineconfig.utils.options import choose_cloud_interactively,
|
|
8
|
+
from machineconfig.utils.options import choose_cloud_interactively, choose_from_options
|
|
9
9
|
from machineconfig.scripts.python.helpers.helpers2 import ES
|
|
10
10
|
from platform import system
|
|
11
11
|
from typing import Any, Literal, Optional
|
|
@@ -40,7 +40,7 @@ def main_backup_retrieve(direction: OPTIONS, which: Optional[str] = None) -> Non
|
|
|
40
40
|
|
|
41
41
|
if which is None:
|
|
42
42
|
console.print(Panel(f"🔍 SELECT {direction} ITEMS\n📋 Choose which configuration entries to process", title="[bold blue]Select Items[/bold blue]", border_style="blue"))
|
|
43
|
-
choices =
|
|
43
|
+
choices = choose_from_options(multi=True, msg=f"WHICH FILE of the following do you want to {direction}?", options=["all"] + list(bu_file.keys()))
|
|
44
44
|
else:
|
|
45
45
|
choices = which.split(",") if which else []
|
|
46
46
|
console.print(Panel(f"🔖 PRE-SELECTED ITEMS\n📝 Using: {', '.join(choices)}", title="[bold blue]Pre-selected Items[/bold blue]", border_style="blue"))
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# import subprocess
|
|
4
4
|
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
5
5
|
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
6
|
-
from machineconfig.utils.options import
|
|
6
|
+
from machineconfig.utils.options import choose_from_options
|
|
7
7
|
from machineconfig.utils.installer import get_installers, install_all
|
|
8
8
|
from platform import system
|
|
9
9
|
from typing import Any, Optional, Literal, TypeAlias, get_args
|
|
@@ -59,7 +59,7 @@ def main(which: Optional[WHICH_CAT | str]) -> None:
|
|
|
59
59
|
|
|
60
60
|
options += list(get_args(WHICH_CAT))
|
|
61
61
|
# print("s"*1000)
|
|
62
|
-
program_names =
|
|
62
|
+
program_names = choose_from_options(multi=True, msg="", options=options, header="🚀 CHOOSE DEV APP", default="AllEssentials")
|
|
63
63
|
|
|
64
64
|
total_commands = ""
|
|
65
65
|
installation_messages: list[str] = []
|
|
@@ -112,7 +112,7 @@ def get_programs_by_category(program_name: WHICH_CAT):
|
|
|
112
112
|
options_system = {**options_system_1, **options_system_2}
|
|
113
113
|
else:
|
|
114
114
|
raise NotImplementedError(f"❌ System {system()} not supported")
|
|
115
|
-
program_names =
|
|
115
|
+
program_names = choose_from_options(multi=True, msg="", options=sorted(list(options_system.keys())), header="🚀 CHOOSE DEV APP")
|
|
116
116
|
program = ""
|
|
117
117
|
for name in program_names:
|
|
118
118
|
print(f"""
|
|
@@ -127,7 +127,7 @@ def get_programs_by_category(program_name: WHICH_CAT):
|
|
|
127
127
|
# case "OtherDevApps":
|
|
128
128
|
# installers = get_installers(dev=True, system=system())
|
|
129
129
|
# options__: list[str] = [x.get_description() for x in tqdm(installers, desc="Checking installed programs")]
|
|
130
|
-
# program_names =
|
|
130
|
+
# program_names = choose_from_options(multi=True, msg="", options=sorted(options__) + ["all"], header="CHOOSE DEV APP")
|
|
131
131
|
# if "all" in program_names: program_names = options__
|
|
132
132
|
# program = ""
|
|
133
133
|
# print("Installing:")
|
|
@@ -15,7 +15,7 @@ import sys
|
|
|
15
15
|
from machineconfig.scripts.python.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout, AGENTS
|
|
16
16
|
from machineconfig.scripts.python.fire_agents_help_search import search_files_by_pattern, search_python_files
|
|
17
17
|
from machineconfig.scripts.python.fire_agents_load_balancer import chunk_prompts, SPLITTING_STRATEGY, DEFAULT_AGENT_CAP
|
|
18
|
-
from machineconfig.utils.options import
|
|
18
|
+
from machineconfig.utils.options import choose_from_options
|
|
19
19
|
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
20
20
|
from machineconfig.utils.accessories import get_repo_root
|
|
21
21
|
|
|
@@ -80,9 +80,9 @@ def main(): # noqa: C901 - (complexity acceptable for CLI glue)
|
|
|
80
80
|
sys.exit(1)
|
|
81
81
|
print(f"Operating @ {repo_root}")
|
|
82
82
|
|
|
83
|
-
search_strategy = cast(SEARCH_STRATEGIES,
|
|
84
|
-
splitting_strategy = cast(SPLITTING_STRATEGY,
|
|
85
|
-
agent_selected = cast(AGENTS,
|
|
83
|
+
search_strategy = cast(SEARCH_STRATEGIES, choose_from_options(multi=False, msg="Choose one option", header="Choose search strategy:", options=get_args(SEARCH_STRATEGIES)))
|
|
84
|
+
splitting_strategy = cast(SPLITTING_STRATEGY, choose_from_options(multi=False, msg="Choose one option", header="Choose prompt splitting strategy:", options=get_args(SPLITTING_STRATEGY)))
|
|
85
|
+
agent_selected = cast(AGENTS, choose_from_options(multi=False, msg="Choose one option", header="Select agent type", options=get_args(AGENTS)))
|
|
86
86
|
print("Enter prefix prompt (end with Ctrl-D / Ctrl-Z):")
|
|
87
87
|
prompt_prefix = "\n".join(sys.stdin.readlines())
|
|
88
88
|
job_name = input("Enter job name [AI_AGENTS]: ") or "AI_Agents"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
fire
|
|
3
3
|
|
|
4
4
|
# https://github.com/pallets/click combine with fire. Consider
|
|
5
|
-
# https://github.com/ceccopierangiolieugenio/pyTermTk for
|
|
5
|
+
# https://github.com/ceccopierangiolieugenio/pyTermTk for choose_from_options build TUI
|
|
6
6
|
# https://github.com/chriskiehl/Gooey build commandline interface
|
|
7
7
|
|
|
8
8
|
"""
|
|
@@ -12,7 +12,7 @@ from machineconfig.scripts.python.helpers.helpers4 import convert_kwargs_to_fire
|
|
|
12
12
|
from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
|
|
13
13
|
from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
|
|
14
14
|
from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
|
|
15
|
-
from machineconfig.utils.options import
|
|
15
|
+
from machineconfig.utils.options import choose_from_options
|
|
16
16
|
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
17
17
|
|
|
18
18
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
@@ -39,7 +39,7 @@ def route(args: FireJobArgs) -> None:
|
|
|
39
39
|
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
40
40
|
files = search_for_files_of_interest(path_obj)
|
|
41
41
|
print(f"🔍 Got #{len(files)} results.")
|
|
42
|
-
choice_file =
|
|
42
|
+
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
43
43
|
choice_file = PathExtended(choice_file)
|
|
44
44
|
else:
|
|
45
45
|
choice_file = path_obj
|
|
@@ -60,7 +60,7 @@ def route(args: FireJobArgs) -> None:
|
|
|
60
60
|
if args.choose_function or args.submit_to_cloud:
|
|
61
61
|
if choice_file.suffix == ".py":
|
|
62
62
|
options, func_args = parse_pyfile(file_path=str(choice_file))
|
|
63
|
-
choice_function_tmp =
|
|
63
|
+
choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
|
|
64
64
|
assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
|
|
65
65
|
choice_index = options.index(choice_function_tmp)
|
|
66
66
|
choice_function = choice_function_tmp.split(" -- ")[0]
|
|
@@ -81,7 +81,7 @@ def route(args: FireJobArgs) -> None:
|
|
|
81
81
|
if line.startswith("echo"):
|
|
82
82
|
continue
|
|
83
83
|
options.append(line)
|
|
84
|
-
chosen_lines =
|
|
84
|
+
chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
|
|
85
85
|
choice_file = PathExtended.tmpfile(suffix=".sh")
|
|
86
86
|
choice_file.parent.mkdir(parents=True, exist_ok=True)
|
|
87
87
|
choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
|
|
@@ -2,7 +2,7 @@ from pathlib import Path
|
|
|
2
2
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, LayoutsFile
|
|
3
3
|
from typing import Optional, TYPE_CHECKING
|
|
4
4
|
from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
|
|
5
|
-
from machineconfig.utils.options import
|
|
5
|
+
from machineconfig.utils.options import choose_from_options
|
|
6
6
|
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
7
7
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
8
8
|
|
|
@@ -18,9 +18,9 @@ def select_layout(layouts_json_file: Path, layout_name: Optional[str]):
|
|
|
18
18
|
raise ValueError(f"No layouts found in {layouts_json_file}")
|
|
19
19
|
if layout_name is None:
|
|
20
20
|
options = [layout["layoutName"] for layout in layout_file["layouts"]]
|
|
21
|
-
from machineconfig.utils.options import
|
|
21
|
+
from machineconfig.utils.options import choose_from_options
|
|
22
22
|
|
|
23
|
-
layout_name =
|
|
23
|
+
layout_name = choose_from_options(multi=False, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
|
|
24
24
|
print(f"Selected layout: {layout_name}")
|
|
25
25
|
layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layout_name), None)
|
|
26
26
|
if layout_chosen is None:
|
|
@@ -59,7 +59,7 @@ def handle_layout_args(args: "FireJobArgs") -> None:
|
|
|
59
59
|
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
60
60
|
files = search_for_files_of_interest(path_obj)
|
|
61
61
|
print(f"🔍 Got #{len(files)} results.")
|
|
62
|
-
choice_file =
|
|
62
|
+
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
63
63
|
choice_file = PathExtended(choice_file)
|
|
64
64
|
else:
|
|
65
65
|
choice_file = path_obj
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
4
4
|
from machineconfig.utils.ssh import SSH
|
|
5
5
|
from machineconfig.utils.terminal import Terminal
|
|
6
|
-
from machineconfig.utils.options import
|
|
6
|
+
from machineconfig.utils.options import choose_from_options, choose_ssh_host
|
|
7
7
|
|
|
8
8
|
import platform
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@ def main():
|
|
|
20
20
|
assert isinstance(tmp, str)
|
|
21
21
|
ssh = SSH(tmp)
|
|
22
22
|
default = f"{ssh.hostname}:{ssh.run('echo $HOME').op}/data/share_nfs"
|
|
23
|
-
share_info =
|
|
23
|
+
share_info = choose_from_options(msg="📂 Choose a share path:", options=[f"{ssh.hostname}:{item.split(' ')[0]}" for item in ssh.run("cat /etc/exports").op.split("\n") if not item.startswith("#")] + [default], default=default, multi=False)
|
|
24
24
|
assert isinstance(share_info, str), f"❌ share_info must be a string. Got {type(share_info)}"
|
|
25
25
|
|
|
26
26
|
remote_server = share_info.split(":")[0]
|
|
@@ -38,7 +38,7 @@ def main():
|
|
|
38
38
|
mount_path_3 = mount_path_2
|
|
39
39
|
|
|
40
40
|
print("🔧 Preparing mount paths...")
|
|
41
|
-
local_mount_point =
|
|
41
|
+
local_mount_point = choose_from_options(msg="📂 Choose mount path OR input custom one:", options=[mount_path_1, mount_path_2, mount_path_3], default=mount_path_2, custom_input=True, multi=False)
|
|
42
42
|
assert isinstance(local_mount_point, PathExtended), f"❌ local_mount_point must be a pathlib.Path. Got {type(local_mount_point)}"
|
|
43
43
|
local_mount_point = PathExtended(local_mount_point).expanduser()
|
|
44
44
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Script to start terminals on windows and wsl"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.options import
|
|
3
|
+
from machineconfig.utils.options import choose_from_options, get_ssh_hosts
|
|
4
4
|
import platform
|
|
5
5
|
from itertools import cycle
|
|
6
6
|
from typing import Literal
|
|
@@ -98,7 +98,7 @@ def main():
|
|
|
98
98
|
else:
|
|
99
99
|
if args.hosts is None:
|
|
100
100
|
print("🌐 No hosts provided. Displaying options...")
|
|
101
|
-
hosts =
|
|
101
|
+
hosts = choose_from_options(msg="Select hosts:", options=get_ssh_hosts() + [THIS_MACHINE], multi=True, fzf=True)
|
|
102
102
|
else:
|
|
103
103
|
print("🌐 Using provided hosts:", args.hosts)
|
|
104
104
|
hosts = args.hosts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
uv run --python 3.13 --no-dev --project $HOME/code/machineconfig
|
|
1
|
+
uv run --python 3.13 --no-dev --project $HOME/code/machineconfig initai $args
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
# @register_line_magic("codei") # type: ignore
|
|
27
27
|
# def print_code_interactive(_):
|
|
28
28
|
# res = get_names()
|
|
29
|
-
# from machineconfig.utils.utils import
|
|
30
|
-
# choice =
|
|
29
|
+
# from machineconfig.utils.utils import choose_from_options
|
|
30
|
+
# choice = choose_from_options(multi=False, options=res["<class 'function'>"], msg="Choose a type to inspect", fzf=True)
|
|
31
31
|
# obj = eval(choice, globals(), locals()) # type: ignore # pylint: disable=eval-used
|
|
32
32
|
# from rich.syntax import Syntax
|
|
33
33
|
# import inspect
|
|
@@ -37,12 +37,12 @@ class Installer:
|
|
|
37
37
|
@staticmethod
|
|
38
38
|
def choose_app_and_install():
|
|
39
39
|
print(f"\n{'=' * 80}\n🔍 SELECT APPLICATION TO INSTALL 🔍\n{'=' * 80}")
|
|
40
|
-
from machineconfig.utils.options import
|
|
40
|
+
from machineconfig.utils.options import choose_from_options
|
|
41
41
|
|
|
42
42
|
print("📂 Searching for configuration files...")
|
|
43
43
|
jobs_dir = Path(LIBRARY_ROOT.joinpath("jobs"))
|
|
44
44
|
config_paths = [Path(p) for p in jobs_dir.rglob("config.json")]
|
|
45
|
-
path =
|
|
45
|
+
path = choose_from_options(multi=False, options=config_paths, msg="Choose one option")
|
|
46
46
|
print(f"📄 Loading configuration from: {path}")
|
|
47
47
|
config_data = read_json(path)
|
|
48
48
|
installer_data_files = InstallerDataFiles(config_data)
|
|
@@ -50,7 +50,7 @@ class Installer:
|
|
|
50
50
|
# Extract app names from the installers
|
|
51
51
|
app_names = [installer["appName"] for installer in installer_data_files["installers"]]
|
|
52
52
|
print("🔍 Select an application to install:")
|
|
53
|
-
app_name =
|
|
53
|
+
app_name = choose_from_options(multi=False, options=app_names, fzf=True, msg="Choose one option")
|
|
54
54
|
|
|
55
55
|
# Find the selected installer data
|
|
56
56
|
selected_installer_data = None
|
machineconfig/utils/options.py
CHANGED
|
@@ -4,7 +4,7 @@ from rich.panel import Panel
|
|
|
4
4
|
from rich.console import Console
|
|
5
5
|
import platform
|
|
6
6
|
import subprocess
|
|
7
|
-
from typing import Optional, Union, Iterable
|
|
7
|
+
from typing import Optional, Union, Iterable, overload, Literal
|
|
8
8
|
from machineconfig.utils.source_of_truth import WINDOWS_INSTALL_PATH, LINUX_INSTALL_PATH
|
|
9
9
|
|
|
10
10
|
|
|
@@ -32,20 +32,23 @@ def check_tool_exists(tool_name: str) -> bool:
|
|
|
32
32
|
# return root_path.joinpath(tool_name).is_file()
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
# def choose_from_options[T](options: Iterable[T], header: str = "", tail: str = "", prompt: str = "", msg: str = "", default: Optional[T] = None, fzf: bool = False, custom_input: bool = False) -> T:
|
|
36
|
+
# choice_key = choose_from_options(msg=msg, options=options, header=header, tail=tail, prompt=prompt, default=default, fzf=fzf, multi=False, custom_input=custom_input)
|
|
37
|
+
# assert not isinstance(choice_key, list)
|
|
38
|
+
# return choice_key
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
# def choose_from_options[T](options: Iterable[T], header: str = "", tail: str = "", prompt: str = "", msg: str = "", default: Optional[T] = None, custom_input: bool = False) -> list[T]:
|
|
42
|
+
# choice_key = choose_from_options(msg=msg, options=options, header=header, tail=tail, prompt=prompt, default=default, fzf=True, multi=True, custom_input=custom_input)
|
|
43
|
+
# if isinstance(choice_key, list):
|
|
44
|
+
# return choice_key
|
|
45
|
+
# return [choice_key]
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
def
|
|
47
|
+
@overload
|
|
48
|
+
def choose_from_options[T](msg: str, options: Iterable[T], multi: Literal[False], custom_input: bool = False, header: str = "", tail: str = "", prompt: str = "", default: Optional[T] = None, fzf: bool = False) -> T: ...
|
|
49
|
+
@overload
|
|
50
|
+
def choose_from_options[T](msg: str, options: Iterable[T], multi: Literal[True], custom_input: bool = True, header: str = "", tail: str = "", prompt: str = "", default: Optional[T] = None, fzf: bool = False, ) -> list[T]: ...
|
|
51
|
+
def choose_from_options[T](msg: str, options: Iterable[T], multi: bool, custom_input: bool = True, header: str = "", tail: str = "", prompt: str = "", default: Optional[T] = None, fzf: bool = False, ) -> Union[T, list[T]]:
|
|
49
52
|
# TODO: replace with https://github.com/tmbo/questionary
|
|
50
53
|
# # also see https://github.com/charmbracelet/gum
|
|
51
54
|
tool_name = "fzf"
|
|
@@ -90,7 +93,7 @@ def display_options[T](msg: str, options: Iterable[T], header: str = "", tail: s
|
|
|
90
93
|
if choice_string == "":
|
|
91
94
|
if default_string is None:
|
|
92
95
|
console.print(Panel("🧨 Default option not available!", title="Error", expand=False))
|
|
93
|
-
return
|
|
96
|
+
return choose_from_options(msg=msg, options=options, header=header, tail=tail, prompt=prompt, default=default, fzf=fzf, multi=multi, custom_input=custom_input)
|
|
94
97
|
choice_idx = options_strings.index(default_string)
|
|
95
98
|
assert default is not None, "🧨 Default option not available!"
|
|
96
99
|
choice_one: T = default
|
|
@@ -108,7 +111,7 @@ def display_options[T](msg: str, options: Iterable[T], header: str = "", tail: s
|
|
|
108
111
|
_ = ie
|
|
109
112
|
# raise ValueError(f"Unknown choice. {choice_string}") from ie
|
|
110
113
|
console.print(Panel(f"❓ Unknown choice: '{choice_string}'", title="Error", expand=False))
|
|
111
|
-
return
|
|
114
|
+
return choose_from_options(msg=msg, options=options, header=header, tail=tail, prompt=prompt, default=default, fzf=fzf, multi=multi, custom_input=custom_input)
|
|
112
115
|
except TypeError as te: # int(choice_string) failed due to # either the number is invalid, or the input is custom.
|
|
113
116
|
if choice_string in options_strings: # string input
|
|
114
117
|
choice_idx = options_strings.index(choice_one) # type: ignore
|
|
@@ -119,7 +122,7 @@ def display_options[T](msg: str, options: Iterable[T], header: str = "", tail: s
|
|
|
119
122
|
_ = te
|
|
120
123
|
# raise ValueError(f"Unknown choice. {choice_string}") from te
|
|
121
124
|
console.print(Panel(f"❓ Unknown choice: '{choice_string}'", title="Error", expand=False))
|
|
122
|
-
return
|
|
125
|
+
return choose_from_options(msg=msg, options=options, header=header, tail=tail, prompt=prompt, default=default, fzf=fzf, multi=multi, custom_input=custom_input)
|
|
123
126
|
console.print(Panel(f"✅ Selected option {choice_idx}: {choice_one}", title="Selected", expand=False))
|
|
124
127
|
if multi:
|
|
125
128
|
return [choice_one]
|
|
@@ -138,7 +141,7 @@ def choose_cloud_interactively() -> str:
|
|
|
138
141
|
raise ValueError(f"Got {tmp} from rclone listremotes")
|
|
139
142
|
if len(remotes) == 0:
|
|
140
143
|
raise RuntimeError("You don't have remotes. Configure your rclone first to get cloud services access.")
|
|
141
|
-
cloud: str =
|
|
144
|
+
cloud: str = choose_from_options(msg="WHICH CLOUD?", multi=False, options=list(remotes), default=remotes[0], fzf=True)
|
|
142
145
|
console.print(Panel(f"✅ SELECTED CLOUD | {cloud}", border_style="bold blue", expand=False))
|
|
143
146
|
return cloud
|
|
144
147
|
|
|
@@ -151,5 +154,9 @@ def get_ssh_hosts() -> list[str]:
|
|
|
151
154
|
return list(c.get_hostnames())
|
|
152
155
|
|
|
153
156
|
|
|
154
|
-
|
|
155
|
-
|
|
157
|
+
@overload
|
|
158
|
+
def choose_ssh_host(multi: Literal[False]) -> str: ...
|
|
159
|
+
@overload
|
|
160
|
+
def choose_ssh_host(multi: Literal[True]) -> list[str]: ...
|
|
161
|
+
def choose_ssh_host(multi: bool):
|
|
162
|
+
return choose_from_options(msg="", options=get_ssh_hosts(), multi=multi, fzf=True)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
2
|
-
from machineconfig.utils.options import
|
|
2
|
+
from machineconfig.utils.options import choose_from_options
|
|
3
3
|
from machineconfig.utils.source_of_truth import EXCLUDE_DIRS
|
|
4
4
|
from rich.console import Console
|
|
5
5
|
from rich.panel import Panel
|
|
@@ -83,7 +83,7 @@ def match_file_name(sub_string: str, search_root: PathExtended, suffixes: set[st
|
|
|
83
83
|
if len(reduced_scripts) == 1:
|
|
84
84
|
return PathExtended(reduced_scripts[0])
|
|
85
85
|
elif len(reduced_scripts) > 1:
|
|
86
|
-
choice =
|
|
86
|
+
choice = choose_from_options(multi=False, msg="Multiple matches found", options=reduced_scripts, fzf=True)
|
|
87
87
|
return PathExtended(choice)
|
|
88
88
|
print(f"Result: This still generated {len(reduced_scripts)} results.")
|
|
89
89
|
if len(reduced_scripts) < 10:
|
machineconfig/utils/procs.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import psutil
|
|
4
4
|
from rich.progress import Progress, SpinnerColumn, TextColumn
|
|
5
5
|
from zoneinfo import ZoneInfo
|
|
6
|
-
from machineconfig.utils.options import
|
|
6
|
+
from machineconfig.utils.options import choose_from_options
|
|
7
7
|
from typing import Optional, Any
|
|
8
8
|
from rich.console import Console
|
|
9
9
|
from rich.panel import Panel
|
|
@@ -120,7 +120,7 @@ class ProcessManager:
|
|
|
120
120
|
# Format data as table for display
|
|
121
121
|
formatted_data = self._format_process_table()
|
|
122
122
|
options = formatted_data.split("\n")[1:] # Skip header
|
|
123
|
-
res =
|
|
123
|
+
res = choose_from_options(options=formatted_data.split("\n"), msg="📋 Select processes to manage:", fzf=True, multi=True)
|
|
124
124
|
indices = [options.index(val) for val in res]
|
|
125
125
|
selected_processes = [self.data[i] for i in indices]
|
|
126
126
|
|
|
@@ -207,12 +207,12 @@
|
|
|
207
207
|
# for a_dir in tasks_dirs:
|
|
208
208
|
# tasks.append(read_task_from_dir(a_dir))
|
|
209
209
|
|
|
210
|
-
# from machineconfig.utils.utils import
|
|
210
|
+
# from machineconfig.utils.utils import choose_from_options
|
|
211
211
|
|
|
212
212
|
# # Create data for tasks display
|
|
213
213
|
# task_data = [Report.from_path(path=a_task.report_path).__dict__ for a_task in tasks]
|
|
214
214
|
# task_display = format_table_markdown(task_data)
|
|
215
|
-
# tasks_chosen_raw =
|
|
215
|
+
# tasks_chosen_raw = choose_from_options(multi=True, task_display.splitlines(), "📋 Choose tasks to run")
|
|
216
216
|
# tasks_chosen = [tasks[int(a_task_chosen.split("|")[1])] for a_task_chosen in tasks_chosen_raw]
|
|
217
217
|
|
|
218
218
|
# print(f"""
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
machineconfig/__init__.py,sha256=TO5eByMRXNSfiXaDyiDjJpkNBscUUDYXsbe1JGSi5NM,822
|
|
2
2
|
machineconfig/logger.py,sha256=XLckvZ8cPDpC5v75ESP3YNTputIrDYuvoYisj0YZtGw,1415
|
|
3
3
|
machineconfig/cluster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
machineconfig/cluster/remote/cloud_manager.py,sha256=
|
|
4
|
+
machineconfig/cluster/remote/cloud_manager.py,sha256=8f5mIkAnXNjhVswlv49bEgAGLJIv_e_tNbI_wgPBo0Q,26041
|
|
5
5
|
machineconfig/cluster/remote/data_transfer.py,sha256=1QxIUetqlhmyl67icBx0nFZEZ7Z2DRjygXofKLMOz-0,4385
|
|
6
6
|
machineconfig/cluster/remote/distribute.py,sha256=TWnOcTcItu3QQTDP3cNsUprnteYYt7WM7oHpNuoPSFo,15273
|
|
7
7
|
machineconfig/cluster/remote/file_manager.py,sha256=w1edpBcH8mHDEzRF5tqQDu5MJYsySIQrMCbgN23A4zM,13966
|
|
@@ -48,7 +48,7 @@ machineconfig/jobs/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
48
48
|
machineconfig/jobs/python/check_installations.py,sha256=o0mrZ-ivdED_7Od1tdtwJ4XSQRfiY6d_HciXLh1PXtY,11126
|
|
49
49
|
machineconfig/jobs/python/create_bootable_media.py,sha256=KKtcPk0rFLQc4eNVP6nbeYX-P7Gpqi0HvfIcUM6rVVs,827
|
|
50
50
|
machineconfig/jobs/python/python_cargo_build_share.py,sha256=RDe1QiTH3vLQ1wjN0kE5NxMIqwB-_WHz6O3svyuH_VE,2133
|
|
51
|
-
machineconfig/jobs/python/python_ve_symlink.py,sha256=
|
|
51
|
+
machineconfig/jobs/python/python_ve_symlink.py,sha256=SgLPZGtnhZ8L5ms2zEohQkJAzPeBkI3mB4DBHjAmzN0,850
|
|
52
52
|
machineconfig/jobs/python/tasks.py,sha256=hrBDQOnBmcXtauTkicVgC8J2AOGcfdFfyx0K8eI6Coc,150
|
|
53
53
|
machineconfig/jobs/python/vscode/api.py,sha256=YTKWxdRwPI9_1iqUhrUVPeS96aqE9rw1YNhIjBwGWTE,1675
|
|
54
54
|
machineconfig/jobs/python/vscode/link_ve.py,sha256=1tXXgfWcl18K6avdhm2V7zng18opR9pfI0PSLxMFbiQ,1439
|
|
@@ -116,8 +116,8 @@ machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1,sha256=-7pElYi
|
|
|
116
116
|
machineconfig/jobs/windows/msc/cli_agents.bat,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
117
|
machineconfig/jobs/windows/msc/cli_agents.ps1,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
118
|
machineconfig/profile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
-
machineconfig/profile/create.py,sha256=
|
|
120
|
-
machineconfig/profile/shell.py,sha256=
|
|
119
|
+
machineconfig/profile/create.py,sha256=X0hk-G8TCC1U8qGQSdc-ktQYb9caO2pEjvihFxoH1Hk,6475
|
|
120
|
+
machineconfig/profile/shell.py,sha256=rseM8irNSv8xAUj8pDucjCuuqJZoNtpSgKt9JOntoM0,9215
|
|
121
121
|
machineconfig/profile/records/generic/shares.toml,sha256=FduDztfyQtZcr5bfx-RSKhEEweweQSWfVXkKWnx8hCY,143
|
|
122
122
|
machineconfig/profile/records/linux/apps_summary_report.csv,sha256=pw9djvaRUPalKDLn2sl3odcbD2_Zx3aEupsQ8UPfaaY,2738
|
|
123
123
|
machineconfig/profile/records/linux/apps_summary_report.md,sha256=l77oofA6Rliql0ZgKGIZi8bstFoGyyGTxeS8p2PtOj0,5634
|
|
@@ -141,8 +141,8 @@ machineconfig/scripts/linux/fzffg,sha256=jjeeyFkWmBbwH2taRqC3EOzZep2KR-ZYoI4UI-5
|
|
|
141
141
|
machineconfig/scripts/linux/fzfg,sha256=ClGnJZUsIk4y0qs3W5iXGo-nd0FaqAHMsnh8uoXQFy8,1190
|
|
142
142
|
machineconfig/scripts/linux/fzfrga,sha256=xSdws6ae28ZXkkqz_uupZ0MYw_vxE2qpLT2DLS3WITM,460
|
|
143
143
|
machineconfig/scripts/linux/gh_models,sha256=EMFUmkkYxCx6vP0SUly6OMVRXGfN1wRCInn1ilUC3HM,100
|
|
144
|
+
machineconfig/scripts/linux/initai,sha256=Xk46tiCwa9TFKwMi3SrB1V9al7SJBGy7cU70i5pTNik,97
|
|
144
145
|
machineconfig/scripts/linux/kill_process,sha256=SqK8zQNkmcQQWD8UzWmqz5T5MaKQvAyzC9ftfMIjfkY,102
|
|
145
|
-
machineconfig/scripts/linux/mcinit,sha256=ug-eE6jkkgw3o5r5B5zUqAZUD-XN-rwY6aNxhFj88DM,97
|
|
146
146
|
machineconfig/scripts/linux/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
|
|
147
147
|
machineconfig/scripts/linux/mount_nfs,sha256=kpIbAse3igReEGgnXngez2ytWucLwmb_xo6e6KeO_rs,1870
|
|
148
148
|
machineconfig/scripts/linux/mount_nw_drive,sha256=pNzHc7yZn5YIzn2BkpKvd5530PqbestkzrdoXaChyqY,2338
|
|
@@ -162,32 +162,32 @@ machineconfig/scripts/linux/warp-cli.sh,sha256=shFFZ9viet_DSEEHT8kxlGRHoJpO6o85p
|
|
|
162
162
|
machineconfig/scripts/linux/wifi_conn,sha256=X4TH3OvcVZfOveSbF9WW8uXb4U_G7ZSnCERc7VYAqkc,95
|
|
163
163
|
machineconfig/scripts/linux/z_ls,sha256=ATZtu0ccN3AKvAOxkwLq1xgQjJ3en5byEWJ3Q8afnNg,3340
|
|
164
164
|
machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
|
-
machineconfig/scripts/python/choose_wezterm_theme.py,sha256=
|
|
165
|
+
machineconfig/scripts/python/choose_wezterm_theme.py,sha256=Hlu_EOQhLM6wYdAdY25jcqEK11BkVwQYwkz04xnIBVU,3397
|
|
166
166
|
machineconfig/scripts/python/cloud_copy.py,sha256=d3gBSPBCtNCRDANpzUoCJBM3kHBarwizyZo8dkL_BXQ,8553
|
|
167
167
|
machineconfig/scripts/python/cloud_manager.py,sha256=MAVOKqXGxnlMaQGEv6k-q_PrgN0at6J8qQDhPiH2lI8,3488
|
|
168
|
-
machineconfig/scripts/python/cloud_mount.py,sha256=
|
|
169
|
-
machineconfig/scripts/python/cloud_repo_sync.py,sha256=
|
|
168
|
+
machineconfig/scripts/python/cloud_mount.py,sha256=PLTPC9aH6v5g9lTJ8jFBBxz8ZGAuWo4sRU4FXfd1koA,6816
|
|
169
|
+
machineconfig/scripts/python/cloud_repo_sync.py,sha256=wXrCgZyPldFZAbK4cUsTHID7XIujz-eXdzgc0w6nkfE,10023
|
|
170
170
|
machineconfig/scripts/python/cloud_sync.py,sha256=RfgrEPGg_LrIaY3hfLDHsK8blrZvyPsoN66X0Z3WeCw,3859
|
|
171
|
-
machineconfig/scripts/python/croshell.py,sha256=
|
|
172
|
-
machineconfig/scripts/python/devops.py,sha256=
|
|
173
|
-
machineconfig/scripts/python/devops_add_identity.py,sha256=
|
|
174
|
-
machineconfig/scripts/python/devops_add_ssh_key.py,sha256=
|
|
175
|
-
machineconfig/scripts/python/devops_backup_retrieve.py,sha256
|
|
176
|
-
machineconfig/scripts/python/devops_devapps_install.py,sha256=
|
|
171
|
+
machineconfig/scripts/python/croshell.py,sha256=8ywivKgbg-2iaeAqrVWx4bKu6jM05pClGB5vCKghoMA,9638
|
|
172
|
+
machineconfig/scripts/python/devops.py,sha256=VJWrRniX2suOi_E4x-6KU4x97TwbfvgXrNm47gjiXfg,6223
|
|
173
|
+
machineconfig/scripts/python/devops_add_identity.py,sha256=JfN3ZrYMCgmt4ks_VCfnV9BIIHAsOYO3E0W0wZ15FR8,3791
|
|
174
|
+
machineconfig/scripts/python/devops_add_ssh_key.py,sha256=KaoX83KltBsmutfKhSfZjd7nP_R1hJ2OLAWRhbswO7o,6889
|
|
175
|
+
machineconfig/scripts/python/devops_backup_retrieve.py,sha256=jZe5Vki7E2GCMG8hvqUZeOONFC4cNzISoGzq_dMG4GA,5601
|
|
176
|
+
machineconfig/scripts/python/devops_devapps_install.py,sha256=QBwBF9EC6kFj-93kNC1YS8N3P4g-eT9yCu0i0OrjYrY,9653
|
|
177
177
|
machineconfig/scripts/python/devops_update_repos.py,sha256=c5qBc9cuTGDEqDHufkjDT4d_vvJsswv3tlqk9MAulYk,8063
|
|
178
178
|
machineconfig/scripts/python/dotfile.py,sha256=1a4THWmfGXiJHjWGFf1Qbp6vrMEGIkonIofOcUVic90,2260
|
|
179
|
-
machineconfig/scripts/python/fire_agents.py,sha256=
|
|
179
|
+
machineconfig/scripts/python/fire_agents.py,sha256=_k1CcPaAp3B7h72tSczFDbLsqTg6FmPDgxxU-GjRHWA,9179
|
|
180
180
|
machineconfig/scripts/python/fire_agents_help_launch.py,sha256=sTdjNz2pDinDMMjUAMN7OqH-KAUeHh6Aihr_zUvtM6k,6128
|
|
181
181
|
machineconfig/scripts/python/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
|
|
182
182
|
machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=QPiCbQq9j5REHStPdYqQcGNkz_rp5CjotqOpMY3v5TM,2099
|
|
183
|
-
machineconfig/scripts/python/fire_jobs.py,sha256=
|
|
183
|
+
machineconfig/scripts/python/fire_jobs.py,sha256=Ny0AdZE_ZX-Nq9wAY3T1gfa8Y_aOIR-I21q_Ulk7EcM,16713
|
|
184
184
|
machineconfig/scripts/python/fire_jobs_args_helper.py,sha256=TfCKSExGZhYrZ6JmXIHsd0wpNSWcKeLeRh9gFR3FG-M,4330
|
|
185
|
-
machineconfig/scripts/python/fire_jobs_layout_helper.py,sha256=
|
|
185
|
+
machineconfig/scripts/python/fire_jobs_layout_helper.py,sha256=Hj77uKgmNKSEBtnW0oCdRBwdKEuhzPxX1p81mRTBibo,3314
|
|
186
186
|
machineconfig/scripts/python/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
187
|
machineconfig/scripts/python/ftpx.py,sha256=VyvfdSa6ee0bMMG24HtBk7ooYeYSZuDUOJ7IkgJkdaU,9920
|
|
188
188
|
machineconfig/scripts/python/get_zellij_cmd.py,sha256=e35-18hoXM9N3PFbvbizfkNY_-63iMicieWE3TbGcCQ,576
|
|
189
189
|
machineconfig/scripts/python/gh_models.py,sha256=3BLfW25mBRiPO5VKtVm-nMlKLv-PaZDw7mObajq6F6M,5538
|
|
190
|
-
machineconfig/scripts/python/mount_nfs.py,sha256=
|
|
190
|
+
machineconfig/scripts/python/mount_nfs.py,sha256=c8pWXimDWdgCkSskcnPgT-8ESPosil6Cvy2hGSaIBJE,3359
|
|
191
191
|
machineconfig/scripts/python/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
192
192
|
machineconfig/scripts/python/mount_ssh.py,sha256=rGY2pgtlnWMi0Rrge1aCdjtfbULrj2cyaStDoX-y2w4,2236
|
|
193
193
|
machineconfig/scripts/python/onetimeshare.py,sha256=bmGsNnskym5OWfIhpOfZG5jq3m89FS0a6dF5Sb8LaZM,2539
|
|
@@ -199,14 +199,14 @@ machineconfig/scripts/python/repos_helper_update.py,sha256=AYyKIB7eQ48yoYmFjydIh
|
|
|
199
199
|
machineconfig/scripts/python/scheduler.py,sha256=7IBjMMOHMkklcWzYwz93EH9XzbJ5uPqU03bJ_lYbRNo,3083
|
|
200
200
|
machineconfig/scripts/python/snapshot.py,sha256=aDvKeoniZaeTSNv9zWBUajaj2yagAxVdfuvO1_tgq5Y,1026
|
|
201
201
|
machineconfig/scripts/python/start_slidev.py,sha256=rcvXI5WMYHOqHm90_V8JMnlosFAmakI8591izn-Mq-M,4527
|
|
202
|
-
machineconfig/scripts/python/start_terminals.py,sha256=
|
|
202
|
+
machineconfig/scripts/python/start_terminals.py,sha256=fNaAPqiOeWsdXvzsbX232Wpgq9a-0DCpi-YLXtTa7nM,6214
|
|
203
203
|
machineconfig/scripts/python/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
204
204
|
machineconfig/scripts/python/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
|
|
205
205
|
machineconfig/scripts/python/wifi_conn.py,sha256=2FJ4srVthGHsy3KSXpvndAyVkNO8n_XeSgVRnd_PjZA,15576
|
|
206
206
|
machineconfig/scripts/python/wsl_windows_transfer.py,sha256=ziq-LrTisXgD_gfZ-Bdx_qunB1jnb4Tmzsp2tKrmK1Q,3651
|
|
207
207
|
machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
208
|
machineconfig/scripts/python/ai/generate_files.py,sha256=Vfjgd0skJu-WTgqUxmOVFzaNMfSFBaFmY5oGGVY7MZY,2860
|
|
209
|
-
machineconfig/scripts/python/ai/
|
|
209
|
+
machineconfig/scripts/python/ai/initai.py,sha256=yATpWMu_yrbhzXS7zP2Dm0Saz27AFktbi-gCGs5kKFc,2618
|
|
210
210
|
machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh,sha256=hkzP1b92aWPL_qFv5iIoQEXrIbWGI3ZSwsZ83CL1Ios,1976
|
|
211
211
|
machineconfig/scripts/python/ai/solutions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
212
212
|
machineconfig/scripts/python/ai/solutions/_shared.py,sha256=QRT4Doe8aW8ULYq9OrlAIX2nVOLhwXdVuubkgnnSpgU,244
|
|
@@ -254,8 +254,8 @@ machineconfig/scripts/windows/fzfg.ps1,sha256=CHJbMrMuZePd4dxwIwz3g4XWAEmWmckuX-
|
|
|
254
254
|
machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqkV0o8a8ywXcM,488
|
|
255
255
|
machineconfig/scripts/windows/gpt.ps1,sha256=Xb6kcwtejVXOodel1jxsGLTf4X-u854zaGL92KuKr5c,78
|
|
256
256
|
machineconfig/scripts/windows/grep.ps1,sha256=sUP_cXtqPEWLQ8_TdGJX7_-CO6CQYTP4pA-ZmkdPLdY,49
|
|
257
|
+
machineconfig/scripts/windows/initai.ps1,sha256=ht2JQvZ6y_WM3FYvc1tLuxfpscQjOLi3ZE7ETYqPACQ,78
|
|
257
258
|
machineconfig/scripts/windows/kill_process.ps1,sha256=dHR2HMG6j7jDW0sZ8GfC9UvNsyFx5b2FgARi-ZH2dds,85
|
|
258
|
-
machineconfig/scripts/windows/mcinit.ps1,sha256=2W8zdQhFYp1I6OJEdagOqrm-62L-8V-wwGncGHOLiBw,78
|
|
259
259
|
machineconfig/scripts/windows/mount_nfs.ps1,sha256=mTR-KcOYJaljWzymKTbzj3jrl5EMgS33mHizU-uO7yo,2089
|
|
260
260
|
machineconfig/scripts/windows/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
|
|
261
261
|
machineconfig/scripts/windows/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
|
|
@@ -345,7 +345,7 @@ machineconfig/settings/shells/bash/init.sh,sha256=EOCNg7h4roNDTappkddwy7U_0R_NKi
|
|
|
345
345
|
machineconfig/settings/shells/hyper/.hyper.js,sha256=h-HqeYlvPvPD4Ee7828Cxo87uVkzbMGJFqXTZIWoegw,8884
|
|
346
346
|
machineconfig/settings/shells/ipy/profiles/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
347
347
|
machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
348
|
-
machineconfig/settings/shells/ipy/profiles/default/startup/playext.py,sha256
|
|
348
|
+
machineconfig/settings/shells/ipy/profiles/default/startup/playext.py,sha256=OJ3NJlhjjNW60tpvMgUYAqO4fKtJ5MsAnlf0CefcLO4,3520
|
|
349
349
|
machineconfig/settings/shells/kitty/kitty.conf,sha256=lDdx-dUX3jbKGb3BkS2f2TOpmgGiS-CI-_-lFvhD5A4,52870
|
|
350
350
|
machineconfig/settings/shells/nushell/config.nu,sha256=ug0E0NXNlCzgStScFN6VTsAkUaOTPJZB69P-LS5L2VE,1047
|
|
351
351
|
machineconfig/settings/shells/nushell/env.nu,sha256=4VmaXb-qP6qnMD5TPzkXMLFNlB5QC4l9HEzCvXZE2GQ,315
|
|
@@ -403,12 +403,12 @@ machineconfig/utils/installer.py,sha256=_sjaIqqHN-7n3mYD-iOIli6Bn2792EjOwE-JC528
|
|
|
403
403
|
machineconfig/utils/io.py,sha256=6LuQMT7CG26atx5_0P30Ru0zHgLwuvpKHfZLUWIjS-U,2873
|
|
404
404
|
machineconfig/utils/links.py,sha256=riNUrG8aGElRszdOPOic4M2AyOcpdcth_-y8JEiZpJ4,10253
|
|
405
405
|
machineconfig/utils/notifications.py,sha256=vvdsY5IX6XEiILTnt5lNyHxhCi0ljdGX2T_67VRfrG4,9009
|
|
406
|
-
machineconfig/utils/options.py,sha256=
|
|
406
|
+
machineconfig/utils/options.py,sha256=Fn5Ka3cUtJrJEwjmr0iRrETU6dEtM4y8-lvuYyaSetw,9199
|
|
407
407
|
machineconfig/utils/path_extended.py,sha256=jqkVr_leG6mQsDBG84Hu0SjMPtJ7jxODryi85c45jXE,52518
|
|
408
|
-
machineconfig/utils/path_helper.py,sha256=
|
|
409
|
-
machineconfig/utils/procs.py,sha256
|
|
408
|
+
machineconfig/utils/path_helper.py,sha256=jqOf3TAlw5cqSp4HBAlOqjAR_bzC8_fvjA-_-CooI6Y,8030
|
|
409
|
+
machineconfig/utils/procs.py,sha256=KjEbrwfbdoi5IBM518scxMDVi7NxTZLHuYiKmwdGlzg,11393
|
|
410
410
|
machineconfig/utils/scheduler.py,sha256=bUHDviS_HE9_6LaA1k9Nnfz5rr2FJIfrk5qO2FJ-oUs,15119
|
|
411
|
-
machineconfig/utils/scheduling.py,sha256=
|
|
411
|
+
machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
|
|
412
412
|
machineconfig/utils/source_of_truth.py,sha256=GnjcVkKm11RyZFHGnPbne5YDEBYoZ5yryBNkpfGC7O4,854
|
|
413
413
|
machineconfig/utils/ssh.py,sha256=zkNUGeijrdoZYkp56DDC8m8LFqPmxQCDNTv5Ns5B7rk,21096
|
|
414
414
|
machineconfig/utils/terminal.py,sha256=IXYhZ5a0qA6X9CdMT9S7IEKQtJXrDzmiDUGd4C85-oE,12436
|
|
@@ -420,13 +420,13 @@ machineconfig/utils/cloud/onedrive/setup_oauth.py,sha256=ZTVkqgrwbV_EoPvyT8dyOTU
|
|
|
420
420
|
machineconfig/utils/cloud/onedrive/transaction.py,sha256=m-aNcnWj_gfZVvJOSpkdIqjZxU_3nXx2CA-qKbQgP3I,26232
|
|
421
421
|
machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
422
422
|
machineconfig/utils/installer_utils/installer_abc.py,sha256=iB1_PZLQGouCdEA8bixdB4kZAQ2OnPqZeRcwaf4LzuI,5178
|
|
423
|
-
machineconfig/utils/installer_utils/installer_class.py,sha256=
|
|
423
|
+
machineconfig/utils/installer_utils/installer_class.py,sha256=P3ZKr92b0ofbQCJUyK3eU3FVgK1ZMRw36WH-rbR5pAw,20430
|
|
424
424
|
machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=CCs5ebomW1acKWZRpv9dyDzM-W6pwvVplikcutE2D8I,2339
|
|
425
425
|
machineconfig/utils/schemas/installer/installer_types.py,sha256=iAzcALc9z_FAQE9iuGHfX6Z0B1_n3Gt6eC0d6heYik0,599
|
|
426
426
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=OmiOX9xtakPz4l6IobWnpFHpbn95fitEE9q0YL1WxjQ,617
|
|
427
427
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
428
|
-
machineconfig-3.
|
|
429
|
-
machineconfig-3.
|
|
430
|
-
machineconfig-3.
|
|
431
|
-
machineconfig-3.
|
|
432
|
-
machineconfig-3.
|
|
428
|
+
machineconfig-3.8.dist-info/METADATA,sha256=eMF7Wf25jy644UorB76cz5tokYUdYvgwHmo4Q2RMS9M,6963
|
|
429
|
+
machineconfig-3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
430
|
+
machineconfig-3.8.dist-info/entry_points.txt,sha256=gFSet9HBtk9WbSZcZ8Scv1k3CKibx_mKjySBGZ2tqbU,1023
|
|
431
|
+
machineconfig-3.8.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
432
|
+
machineconfig-3.8.dist-info/RECORD,,
|
|
@@ -9,8 +9,8 @@ devops = machineconfig.scripts.python.devops:args_parser
|
|
|
9
9
|
fire = machineconfig.scripts.python.fire_jobs:main
|
|
10
10
|
fire_agents = machineconfig.scripts.python.fire_agents:main
|
|
11
11
|
ftpx = machineconfig.scripts.python.ftpx:main
|
|
12
|
+
initai = machineconfig.scripts.python.ai.initai:main
|
|
12
13
|
kill_process = machineconfig.utils.procs:main
|
|
13
|
-
mcinit = machineconfig.scripts.python.ai.mcinit:main
|
|
14
14
|
mount_nfs = machineconfig.scripts.python.mount_nfs:main
|
|
15
15
|
mount_nw_drive = machineconfig.scripts.python.mount_nw_drive:main
|
|
16
16
|
repos = machineconfig.scripts.python.repos:main
|
|
File without changes
|
|
File without changes
|