machineconfig 6.99__py3-none-any.whl → 7.32__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/profile/create_links.py +1 -1
- machineconfig/profile/create_links_export.py +2 -2
- machineconfig/scripts/linux/mcfgs +3 -3
- machineconfig/scripts/python/define.py +26 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
- machineconfig/scripts/python/helpers_devops/cli_config.py +9 -14
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +53 -53
- machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +29 -10
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
- machineconfig/scripts/python/nw/mount_nfs +1 -1
- machineconfig/scripts/python/terminal.py +1 -1
- machineconfig/scripts/windows/mcfgs.ps1 +3 -2
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
- machineconfig/settings/shells/bash/init.sh +1 -1
- machineconfig/setup_linux/__init__.py +1 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +9 -9
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +9 -9
- machineconfig/utils/links.py +53 -43
- machineconfig/utils/ssh.py +1 -1
- machineconfig/utils/upgrade_packages.py +4 -2
- {machineconfig-6.99.dist-info → machineconfig-7.32.dist-info}/METADATA +13 -3
- {machineconfig-6.99.dist-info → machineconfig-7.32.dist-info}/RECORD +26 -27
- {machineconfig-6.99.dist-info → machineconfig-7.32.dist-info}/entry_points.txt +2 -0
- machineconfig/scripts/linux/term +0 -39
- machineconfig/scripts/windows/term.ps1 +0 -48
- {machineconfig-6.99.dist-info → machineconfig-7.32.dist-info}/WHEEL +0 -0
- {machineconfig-6.99.dist-info → machineconfig-7.32.dist-info}/top_level.txt +0 -0
|
@@ -79,7 +79,7 @@ def read_mapper() -> MapperFileData:
|
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
def apply_mapper(mapper_data: dict[str, list[ConfigMapper]],
|
|
82
|
-
on_conflict: Literal["throw-error", "
|
|
82
|
+
on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"],
|
|
83
83
|
method: Literal["symlink", "copy"]
|
|
84
84
|
):
|
|
85
85
|
operation_records: list[OperationRecord] = []
|
|
@@ -4,7 +4,7 @@ from typing import Optional, Literal, Annotated
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for setting up the config file.")],
|
|
7
|
-
on_conflict: Annotated[Literal["throw-error", "
|
|
7
|
+
on_conflict: Annotated[Literal["throw-error", "overwrite-default-path", "backup-default-path"], typer.Option(..., help="Action to take on conflict")],
|
|
8
8
|
which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
|
|
9
9
|
interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
|
|
10
10
|
"""Terminology:
|
|
@@ -32,7 +32,7 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "copy"], typer.
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def main_private_from_parser(method: Annotated[Literal["symlink", "copy"], typer.Option(..., help="Method to use for linking files")],
|
|
35
|
-
on_conflict: Annotated[Literal["throw-error", "
|
|
35
|
+
on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., help="Action to take on conflict")] = "throw-error",
|
|
36
36
|
which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
|
|
37
37
|
interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
|
|
38
38
|
from machineconfig.profile.create_links import ConfigMapper, read_mapper
|
|
@@ -27,18 +27,18 @@ wrap_in_shell_script() {
|
|
|
27
27
|
"$command" "$@"
|
|
28
28
|
|
|
29
29
|
if [[ -f "$OP_PROGRAM_PATH" ]]; then
|
|
30
|
-
printf "%b\n" "${GREEN}
|
|
30
|
+
printf "%b\n" "${GREEN}🚀 Taking over from python script @ ${OP_PROGRAM_PATH}${RESET}"
|
|
31
31
|
bat --style=plain --paging=never "$OP_PROGRAM_PATH"
|
|
32
32
|
printf "%b\n" "${GREEN}▶ Running...${RESET}"
|
|
33
33
|
. "$OP_PROGRAM_PATH"
|
|
34
34
|
status=$?
|
|
35
35
|
if [[ $status -eq 0 ]]; then
|
|
36
|
-
printf "%b\n" "${GREEN}✅
|
|
36
|
+
printf "%b\n" "${GREEN}✅ '${command}' execution completed.${RESET}"
|
|
37
37
|
else
|
|
38
38
|
printf "%b\n" "${YELLOW}⚠️ Program exited with status ${status}${RESET}"
|
|
39
39
|
fi
|
|
40
40
|
else
|
|
41
|
-
printf "%b\n" "${
|
|
41
|
+
printf "%b\n" "${GREEN}✅ '${command}' execution completed.${RESET}"
|
|
42
42
|
fi
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
"""
|
|
3
|
+
Minimalist programs that only print scripts without frills so it can be sourced by by shell.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
import platform
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def define_scripts():
|
|
12
|
+
if platform.system() != "Linux":
|
|
13
|
+
raise RuntimeError("This command is only supported on Linux systems.")
|
|
14
|
+
from machineconfig.setup_linux import INTERACTIVE as script_path
|
|
15
|
+
script = script_path.read_text(encoding="utf-8")
|
|
16
|
+
print(script)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def main():
|
|
20
|
+
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
21
|
+
app.command(name="scripts", help="define all scripts", no_args_is_help=False)(define_scripts)
|
|
22
|
+
app()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# if __name__ == "__main__":
|
|
26
|
+
# main()
|
|
@@ -3,33 +3,26 @@
|
|
|
3
3
|
from typing import Literal, Annotated, Optional
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
import typer
|
|
6
|
-
|
|
6
|
+
import machineconfig.scripts.python.helpers_devops.cli_config_dotfile as dotfile_module
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def private(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for linking files")],
|
|
10
|
-
on_conflict: Annotated[Literal["throw-error", "
|
|
10
|
+
on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
11
11
|
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
|
|
12
12
|
interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
|
|
13
13
|
"""🔗 Manage private configuration files."""
|
|
14
14
|
import machineconfig.profile.create_links_export as create_links_export
|
|
15
15
|
create_links_export.main_private_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
|
|
16
16
|
|
|
17
|
+
|
|
17
18
|
def public(method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
|
|
18
|
-
on_conflict: Annotated[Literal["throw-error", "
|
|
19
|
+
on_conflict: Annotated[Literal["throw-error", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
19
20
|
which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process")] = None,
|
|
20
21
|
interactive: Annotated[bool, typer.Option(..., "--interactive", "-ia", help="Run in interactive mode")] = False):
|
|
21
22
|
"""🔗 Manage public configuration files."""
|
|
22
23
|
import machineconfig.profile.create_links_export as create_links_export
|
|
23
24
|
create_links_export.main_public_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
|
|
24
25
|
|
|
25
|
-
def dotfile(file: Annotated[str, typer.Argument(help="file/folder path.")],
|
|
26
|
-
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
|
|
27
|
-
dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
|
|
28
|
-
):
|
|
29
|
-
"""🔗 Manage dotfiles."""
|
|
30
|
-
import machineconfig.scripts.python.helpers_devops.cli_config_dotfile as dotfile_module
|
|
31
|
-
dotfile_module.main(file=file, overwrite=overwrite, dest=dest)
|
|
32
|
-
|
|
33
26
|
|
|
34
27
|
def shell():
|
|
35
28
|
"""🔗 Configure your shell profile."""
|
|
@@ -46,7 +39,7 @@ def path():
|
|
|
46
39
|
uv_with = ["textual"]
|
|
47
40
|
uv_project_dir = None
|
|
48
41
|
if not Path.home().joinpath("code/machineconfig").exists():
|
|
49
|
-
uv_with.append("machineconfig>=
|
|
42
|
+
uv_with.append("machineconfig>=7.32")
|
|
50
43
|
else:
|
|
51
44
|
uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
|
|
52
45
|
run_shell_script(get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0])
|
|
@@ -59,6 +52,7 @@ def pwsh_theme():
|
|
|
59
52
|
import subprocess
|
|
60
53
|
subprocess.run(["pwsh", "-File", str(file)])
|
|
61
54
|
|
|
55
|
+
|
|
62
56
|
def starship_theme():
|
|
63
57
|
"""🔗 Select starship prompt theme."""
|
|
64
58
|
import subprocess
|
|
@@ -87,6 +81,7 @@ def starship_theme():
|
|
|
87
81
|
except ValueError:
|
|
88
82
|
typer.echo("❌ Please enter a valid number")
|
|
89
83
|
|
|
84
|
+
|
|
90
85
|
def copy_assets(which: Annotated[Literal["scripts", "settings", "both"], typer.Argument(..., help="Which assets to copy")]):
|
|
91
86
|
"""🔗 Copy asset files from library to machine."""
|
|
92
87
|
import machineconfig.profile.create_helper as create_helper
|
|
@@ -104,8 +99,8 @@ def get_app():
|
|
|
104
99
|
config_apps.command("v", no_args_is_help=True, hidden=True)(private)
|
|
105
100
|
config_apps.command("public", no_args_is_help=True, help="🔗 [b] Manage public configuration files.")(public)
|
|
106
101
|
config_apps.command("b", no_args_is_help=True, help="Manage public configuration files.", hidden=True)(public)
|
|
107
|
-
config_apps.command("dotfile", no_args_is_help=True, help="🔗 [d] Manage dotfiles.")(
|
|
108
|
-
config_apps.command("d", no_args_is_help=True, hidden=True)(
|
|
102
|
+
config_apps.command("dotfile", no_args_is_help=True, help="🔗 [d] Manage dotfiles.")(dotfile_module.main)
|
|
103
|
+
config_apps.command("d", no_args_is_help=True, hidden=True)(dotfile_module.main)
|
|
109
104
|
config_apps.command("shell", no_args_is_help=False, help="🔗 [s] Configure your shell profile.")(shell)
|
|
110
105
|
config_apps.command("s", no_args_is_help=False, help="Configure your shell profile.", hidden=True)(shell)
|
|
111
106
|
config_apps.command("path", no_args_is_help=False, help="📚 [p] NAVIGATE PATH variable with TUI")(path)
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
"""Like yadm and dotter."""
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
"""Like yadm and dotter."""
|
|
4
3
|
|
|
4
|
+
from typing import Annotated, Literal
|
|
5
5
|
import typer
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def main(
|
|
9
9
|
file: Annotated[str, typer.Argument(help="file/folder path.")],
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
)
|
|
13
|
-
|
|
10
|
+
method: Annotated[Literal["symlink", "copy"], typer.Option(..., "--method", "-m", help="Method to use for linking files")] = "copy",
|
|
11
|
+
on_conflict: Annotated[Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"], typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
|
|
12
|
+
sensitivity: Annotated[Literal["private", "public"], typer.Option(..., "--sensitivity", "-s", help="Sensitivity of the config file.")] = "private",
|
|
13
|
+
destination: Annotated[str, typer.Option("--destination", "-d", help="destination folder (override the default, use at your own risk)")] = "",) -> None:
|
|
14
14
|
from rich.console import Console
|
|
15
15
|
from rich.panel import Panel
|
|
16
|
+
from machineconfig.utils.links import symlink_map, copy_map
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
match sensitivity:
|
|
19
|
+
case "private":
|
|
20
|
+
backup_root = Path.home().joinpath("dotfiles/mapper")
|
|
21
|
+
case "public":
|
|
22
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
23
|
+
backup_root = Path(CONFIG_ROOT).joinpath("dotfiles/mapper")
|
|
16
24
|
|
|
17
|
-
from machineconfig.utils.links import symlink_map
|
|
18
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
19
|
-
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
20
25
|
console = Console()
|
|
21
|
-
orig_path =
|
|
22
|
-
if
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
elif "Roaming" in str(orig_path):
|
|
26
|
-
junction = orig_path.split(at="Roaming", sep=-1)[1]
|
|
27
|
-
elif ".config" in str(orig_path):
|
|
28
|
-
junction = orig_path.split(at=".config", sep=-1)[1]
|
|
29
|
-
else:
|
|
30
|
-
junction = orig_path.rel2home()
|
|
31
|
-
new_path = PathExtended(CONFIG_ROOT).parent.parent.joinpath(junction)
|
|
26
|
+
orig_path = Path(file).expanduser().absolute()
|
|
27
|
+
if destination == "":
|
|
28
|
+
new_path = backup_root.joinpath(orig_path.relative_to(Path.home()))
|
|
29
|
+
new_path.parent.mkdir(parents=True, exist_ok=True)
|
|
32
30
|
else:
|
|
33
|
-
dest_path =
|
|
31
|
+
dest_path = Path(destination).expanduser().absolute()
|
|
34
32
|
dest_path.mkdir(parents=True, exist_ok=True)
|
|
35
33
|
new_path = dest_path.joinpath(orig_path.name)
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
f"[bold]📝 Edit configuration file:[/] [cyan]nano {PathExtended(CONFIG_ROOT)}/symlinks/mapper.toml[/cyan]",
|
|
56
|
-
"",
|
|
57
|
-
f"[{new_path.parent.name}]",
|
|
58
|
-
f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
|
|
59
|
-
]
|
|
60
|
-
)
|
|
35
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
36
|
+
match method:
|
|
37
|
+
case "copy":
|
|
38
|
+
try:
|
|
39
|
+
copy_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
|
|
40
|
+
except Exception as e:
|
|
41
|
+
typer.echo(f"[red]Error:[/] {e}")
|
|
42
|
+
typer.Exit(code=1)
|
|
43
|
+
return
|
|
44
|
+
case "symlink":
|
|
45
|
+
try:
|
|
46
|
+
symlink_map(config_file_default_path=PathExtended(orig_path), self_managed_config_file_path=PathExtended(new_path), on_conflict=on_conflict)
|
|
47
|
+
except Exception as e:
|
|
48
|
+
typer.echo(f"[red]Error:[/] {e}")
|
|
49
|
+
typer.Exit(code=1)
|
|
50
|
+
case _:
|
|
51
|
+
raise ValueError(f"Unknown method: {method}")
|
|
52
|
+
console.print(Panel("\n".join(["✅ Symbolic link created successfully!", "🔄 Add the following snippet to mapper.toml to persist this mapping:",]), title="Symlink Created", border_style="green", padding=(1, 2),))
|
|
61
53
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
54
|
+
# mapper_snippet = "\n".join(
|
|
55
|
+
# [
|
|
56
|
+
# f"[bold]📝 Edit configuration file:[/] [cyan]nano {PathExtended(CONFIG_ROOT)}/symlinks/mapper.toml[/cyan]",
|
|
57
|
+
# "",
|
|
58
|
+
# f"[{new_path.parent.name}]",
|
|
59
|
+
# f"{orig_path.name.split('.')[0]} = {{ this = '{orig_path.collapseuser().as_posix()}', to_this = '{new_path.collapseuser().as_posix()}' }}",
|
|
60
|
+
# ]
|
|
61
|
+
# )
|
|
62
|
+
# console.print(
|
|
63
|
+
# Panel(
|
|
64
|
+
# mapper_snippet,
|
|
65
|
+
# title="Mapper Entry",
|
|
66
|
+
# border_style="cyan",
|
|
67
|
+
# padding=(1, 2),
|
|
68
|
+
# )
|
|
69
|
+
# )
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
def arg_parser() -> None:
|
|
@@ -48,9 +48,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
|
|
|
48
48
|
else:
|
|
49
49
|
import platform
|
|
50
50
|
if platform.system() == "Windows":
|
|
51
|
-
run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=
|
|
51
|
+
run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=7.32" """)
|
|
52
52
|
else:
|
|
53
|
-
run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=
|
|
53
|
+
run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=7.32" """)
|
|
54
54
|
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
55
55
|
if not no_copy_assets:
|
|
56
56
|
create_default_shell_profile() # involves copying assets too
|
|
@@ -75,7 +75,7 @@ def navigate():
|
|
|
75
75
|
path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
|
|
76
76
|
from machineconfig.utils.code import run_shell_script
|
|
77
77
|
if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
|
|
78
|
-
else: executable = """--with "machineconfig>=
|
|
78
|
+
else: executable = """--with "machineconfig>=7.32,textual" """
|
|
79
79
|
run_shell_script(f"""uv run {executable} {path}""")
|
|
80
80
|
|
|
81
81
|
|
|
@@ -140,7 +140,8 @@ croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
|
|
|
140
140
|
exit_then_run_shell_script(script=script, strict=False)
|
|
141
141
|
|
|
142
142
|
|
|
143
|
-
def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
|
|
143
|
+
def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
|
|
144
|
+
) -> None:
|
|
144
145
|
"""Receive a file using croc with relay server.
|
|
145
146
|
Usage examples:
|
|
146
147
|
devops network receive 7121-donor-olympic-bicycle
|
|
@@ -150,9 +151,22 @@ Usage examples:
|
|
|
150
151
|
from machineconfig.utils.installer_utils.installer import install_if_missing
|
|
151
152
|
install_if_missing(which="croc")
|
|
152
153
|
import platform
|
|
154
|
+
import sys
|
|
153
155
|
|
|
154
156
|
is_windows = platform.system() == "Windows"
|
|
155
157
|
|
|
158
|
+
# If no args passed via typer, try to get them from sys.argv directly
|
|
159
|
+
# This handles the case where -- was used and arguments weren't parsed by typer
|
|
160
|
+
if not code_args or (len(code_args) == 1 and code_args[0] in ['--relay', 'croc']):
|
|
161
|
+
# Find the index of 'rx' or 'receive' in sys.argv and get everything after it
|
|
162
|
+
try:
|
|
163
|
+
for i, arg in enumerate(sys.argv):
|
|
164
|
+
if arg in ['rx', 'receive', 'r'] and i + 1 < len(sys.argv):
|
|
165
|
+
code_args = sys.argv[i + 1:]
|
|
166
|
+
break
|
|
167
|
+
except Exception:
|
|
168
|
+
pass
|
|
169
|
+
|
|
156
170
|
# Join all arguments
|
|
157
171
|
input_str = " ".join(code_args)
|
|
158
172
|
tokens = input_str.split()
|
|
@@ -161,25 +175,30 @@ Usage examples:
|
|
|
161
175
|
relay_server: str | None = None
|
|
162
176
|
secret_code: str | None = None
|
|
163
177
|
|
|
164
|
-
# Remove 'croc' from tokens if present
|
|
165
|
-
tokens = [t for t in tokens if t
|
|
178
|
+
# Remove 'croc' and 'export' from tokens if present
|
|
179
|
+
tokens = [t for t in tokens if t not in ['croc', 'export']]
|
|
166
180
|
|
|
167
181
|
# Look for --relay flag and capture next token
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if
|
|
171
|
-
relay_server = tokens[
|
|
182
|
+
relay_idx = -1
|
|
183
|
+
for i, token in enumerate(tokens):
|
|
184
|
+
if token == '--relay' and i + 1 < len(tokens):
|
|
185
|
+
relay_server = tokens[i + 1]
|
|
186
|
+
relay_idx = i
|
|
187
|
+
break
|
|
172
188
|
|
|
173
189
|
# Look for CROC_SECRET= prefix in any token
|
|
174
190
|
for token in tokens:
|
|
175
191
|
if token.startswith('CROC_SECRET='):
|
|
176
|
-
secret_code = token.split('=', 1)[1].strip('"')
|
|
192
|
+
secret_code = token.split('=', 1)[1].strip('"').strip("'")
|
|
177
193
|
break
|
|
178
194
|
|
|
179
195
|
# If no secret code found yet, look for tokens with dashes (typical pattern: number-word-word-word)
|
|
196
|
+
# Skip relay server and relay flag
|
|
180
197
|
if not secret_code:
|
|
181
|
-
for token in tokens:
|
|
182
|
-
if '-' in token and not token.startswith('-') and token
|
|
198
|
+
for i, token in enumerate(tokens):
|
|
199
|
+
if '-' in token and not token.startswith('-') and token != relay_server:
|
|
200
|
+
if relay_idx >= 0 and (i == relay_idx or i == relay_idx + 1):
|
|
201
|
+
continue # Skip relay server parts
|
|
183
202
|
secret_code = token
|
|
184
203
|
break
|
|
185
204
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# mkdir ~/data/local
|
|
6
6
|
# sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
|
|
7
7
|
|
|
8
|
-
uv run --python 3.14 --with "machineconfig>=
|
|
8
|
+
uv run --python 3.14 --with "machineconfig>=7.32" python -m machineconfig.scripts.python.mount_nfs
|
|
9
9
|
# Check if remote server is reachable and share folder exists
|
|
10
10
|
if ! ping -c 1 "$remote_server" &> /dev/null; then
|
|
11
11
|
echo "💥 Error: Remote server $remote_server is not reachable."
|
|
@@ -69,6 +69,7 @@ def get_session_tabs() -> list[tuple[str, str]]:
|
|
|
69
69
|
print(result)
|
|
70
70
|
return result
|
|
71
71
|
|
|
72
|
+
|
|
72
73
|
def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to start.")]):
|
|
73
74
|
from pathlib import Path
|
|
74
75
|
layouts_file = Path.home().joinpath("dotfiles/machineconfig/layouts.json")
|
|
@@ -87,7 +88,6 @@ def start_wt(layout_name: Annotated[str, typer.Argument(help="Layout name to sta
|
|
|
87
88
|
raise typer.Exit(code=1)
|
|
88
89
|
from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
|
|
89
90
|
run_wt_layout(layout_config=chosen_layout)
|
|
90
|
-
|
|
91
91
|
# cmd = f'powershell -ExecutionPolicy Bypass -File "./{layout_name}_layout.ps1"'
|
|
92
92
|
# from machineconfig.utils.code import exit_then_run_shell_script
|
|
93
93
|
# exit_then_run_shell_script(cmd, strict=True)
|
|
@@ -30,10 +30,11 @@ function wrap_in_shell_script {
|
|
|
30
30
|
|
|
31
31
|
# Check if the file exists
|
|
32
32
|
if (Test-Path $env:OP_PROGRAM_PATH) {
|
|
33
|
-
Write-Host "
|
|
33
|
+
Write-Host "🚀 Taking over from python script @ $env:OP_PROGRAM_PATH"
|
|
34
34
|
& $env:OP_PROGRAM_PATH
|
|
35
|
+
Write-Host "✅ '$Command' execution completed."
|
|
35
36
|
} else {
|
|
36
|
-
Write-Host "
|
|
37
|
+
Write-Host "✅ '$Command' execution completed."
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
# Clean up the temporary environment variable so it doesn't leak to other processes/sessions
|
|
@@ -7,7 +7,7 @@ $user = ''
|
|
|
7
7
|
$sharePath = ''
|
|
8
8
|
$driveLetter = ''
|
|
9
9
|
|
|
10
|
-
uv run --python 3.14 --with "machineconfig>=
|
|
10
|
+
uv run --python 3.14 --with "machineconfig>=7.32" python -m machineconfig.scripts.python.mount_ssh
|
|
11
11
|
|
|
12
12
|
net use T: \\sshfs.kr\$user@$host.local
|
|
13
13
|
# this worked: net use T: \\sshfs\alex@alex-p51s-5.local
|
|
@@ -54,7 +54,7 @@ alias ff='wrap_in_shell_script ftpx'
|
|
|
54
54
|
alias f='wrap_in_shell_script fire'
|
|
55
55
|
alias r='wrap_in_shell_script croshell'
|
|
56
56
|
alias u='wrap_in_shell_script utils'
|
|
57
|
-
alias t='wrap_in_shell_script
|
|
57
|
+
alias t='wrap_in_shell_script terminal'
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
# alias gcs='gh copilot suggest -t shell'
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
. <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
|
|
3
3
|
. <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/linux/mcfgs")
|
|
4
4
|
|
|
5
|
-
alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
6
|
-
alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
7
|
-
alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
8
|
-
alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
9
|
-
alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
10
|
-
alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
11
|
-
alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
12
|
-
alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
13
|
-
alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=
|
|
5
|
+
alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" devops'
|
|
6
|
+
alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" cloud'
|
|
7
|
+
alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" agents'
|
|
8
|
+
alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" sessions'
|
|
9
|
+
alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" ftpx'
|
|
10
|
+
alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" fire'
|
|
11
|
+
alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" croshell'
|
|
12
|
+
alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" utils'
|
|
13
|
+
alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.32" terminal'
|
|
14
14
|
|
|
15
15
|
alias d='wrap_in_shell_script devops'
|
|
16
16
|
alias c='wrap_in_shell_script cloud'
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
|
|
4
4
|
iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/mcfgs.ps1").Content
|
|
5
5
|
|
|
6
|
-
function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
7
|
-
function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
8
|
-
function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
9
|
-
function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
10
|
-
function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
11
|
-
function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
12
|
-
function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
13
|
-
function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
14
|
-
function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=
|
|
6
|
+
function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" devops $args }
|
|
7
|
+
function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" cloud $args }
|
|
8
|
+
function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" agents $args }
|
|
9
|
+
function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" sessions $args }
|
|
10
|
+
function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" ftpx $args }
|
|
11
|
+
function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" fire $args }
|
|
12
|
+
function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" croshell $args }
|
|
13
|
+
function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" utils $args }
|
|
14
|
+
function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.32" terminal $args }
|
|
15
15
|
|
|
16
16
|
function d { wrap_in_shell_script devops @args }
|
|
17
17
|
function c { wrap_in_shell_script cloud @args }
|
machineconfig/utils/links.py
CHANGED
|
@@ -96,7 +96,7 @@ def build_links(target_paths: list[tuple[PLike, str]], repo_root: PLike):
|
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def symlink_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended,
|
|
99
|
-
on_conflict: Literal["throw-error", "
|
|
99
|
+
on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"]
|
|
100
100
|
) -> OperationResult:
|
|
101
101
|
"""helper function. creates a symlink from `config_file_default_path` to `self_managed_config_file_path`.
|
|
102
102
|
|
|
@@ -104,10 +104,10 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
|
|
|
104
104
|
|
|
105
105
|
on_conflict strategies:
|
|
106
106
|
- throw-error: Raise exception when files differ
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
107
|
+
- overwrite-self-managed: Delete self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
|
|
108
|
+
- backup-self-managed: Backup self_managed_config_file_path (self-managed), move config_file_default_path to self_managed_config_file_path, create symlink
|
|
109
|
+
- overwrite-default-path: Delete config_file_default_path (default path), create symlink to self_managed_config_file_path
|
|
110
|
+
- backup-default-path: Backup config_file_default_path (default path), create symlink to self_managed_config_file_path
|
|
111
111
|
|
|
112
112
|
Note: `config_file_default_path` is the default system location, `self_managed_config_file_path` is the self-managed config location
|
|
113
113
|
|
|
@@ -162,39 +162,41 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
|
|
|
162
162
|
config_file_default_path.delete(sure=True)
|
|
163
163
|
else:
|
|
164
164
|
# Files are different, use on_conflict strategy
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
165
|
+
import subprocess
|
|
166
|
+
command = f"""delta --side-by-side "{config_file_default_path}" "{self_managed_config_file_path}" """
|
|
167
|
+
try:
|
|
168
|
+
console.print(Panel(f"🆘 CONFLICT DETECTED | Showing diff between {config_file_default_path} and {self_managed_config_file_path}", title="Conflict Detected", expand=False))
|
|
169
|
+
subprocess.run(command, shell=True, check=True)
|
|
170
|
+
except Exception:
|
|
171
|
+
console.print(Panel("⚠️ Could not show diff using 'delta'. Please install 'delta' for better diff visualization.", title="Delta Not Found", expand=False))
|
|
172
|
+
|
|
173
|
+
match on_conflict:
|
|
174
|
+
case "throw-error":
|
|
175
|
+
raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
|
|
176
|
+
case "overwrite-self-managed":
|
|
177
|
+
action_taken = "backing_up_target"
|
|
178
|
+
details = "Overwriting self-managed config, moving default path to self-managed location"
|
|
179
|
+
console.print(Panel(f"📦 OVERWRITE SELF-MANAGED | Deleting {self_managed_config_file_path}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Overwrite Self-Managed", expand=False))
|
|
180
|
+
self_managed_config_file_path.delete(sure=True)
|
|
181
|
+
config_file_default_path.move(path=self_managed_config_file_path)
|
|
182
|
+
case "backup-self-managed":
|
|
183
|
+
backup_name = f"{self_managed_config_file_path}.orig_{randstr()}"
|
|
184
|
+
action_taken = "backing_up_target"
|
|
185
|
+
details = f"Backed up self-managed config to {backup_name}"
|
|
186
|
+
console.print(Panel(f"📦 BACKUP SELF-MANAGED | Moving {self_managed_config_file_path} to {backup_name}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Backup Self-Managed", expand=False))
|
|
187
|
+
self_managed_config_file_path.move(path=backup_name)
|
|
188
|
+
config_file_default_path.move(path=self_managed_config_file_path)
|
|
189
|
+
case "overwrite-default-path":
|
|
190
|
+
action_taken = "backupConfigDefaultPath"
|
|
191
|
+
details = "Overwriting default path, creating symlink to self-managed config"
|
|
192
|
+
console.print(Panel(f"📦 OVERWRITE DEFAULT | Deleting {config_file_default_path}, creating symlink to {self_managed_config_file_path}", title="Overwrite Default", expand=False))
|
|
193
|
+
config_file_default_path.delete(sure=True)
|
|
194
|
+
case "backup-default-path":
|
|
195
|
+
backup_name = f"{config_file_default_path}.orig_{randstr()}"
|
|
196
|
+
action_taken = "backupConfigDefaultPath"
|
|
197
|
+
details = f"Backed up default path to {backup_name}"
|
|
198
|
+
console.print(Panel(f"📦 BACKUP DEFAULT | Moving {config_file_default_path} to {backup_name}, creating symlink to {self_managed_config_file_path}", title="Backup Default", expand=False))
|
|
199
|
+
config_file_default_path.move(path=backup_name)
|
|
198
200
|
else:
|
|
199
201
|
# self_managed_config_file_path doesn't exist
|
|
200
202
|
if config_file_default_path.is_symlink():
|
|
@@ -242,7 +244,7 @@ def symlink_map(config_file_default_path: PathExtended, self_managed_config_file
|
|
|
242
244
|
return {"action": action_taken, "details": details}
|
|
243
245
|
|
|
244
246
|
|
|
245
|
-
def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throw-error", "
|
|
247
|
+
def copy_map(config_file_default_path: PathExtended, self_managed_config_file_path: PathExtended, on_conflict: Literal["throw-error", "overwrite-self-managed", "backup-self-managed", "overwrite-default-path", "backup-default-path"]) -> OperationResult:
|
|
246
248
|
config_file_default_path = PathExtended(config_file_default_path).expanduser().absolute()
|
|
247
249
|
self_managed_config_file_path = PathExtended(self_managed_config_file_path).expanduser().absolute()
|
|
248
250
|
|
|
@@ -289,28 +291,36 @@ def copy_map(config_file_default_path: PathExtended, self_managed_config_file_pa
|
|
|
289
291
|
config_file_default_path.delete(sure=True)
|
|
290
292
|
else:
|
|
291
293
|
# Files are different, use on_conflict strategy
|
|
294
|
+
import subprocess
|
|
295
|
+
command = f"""delta --side-by-side "{config_file_default_path}" "{self_managed_config_file_path}" """
|
|
296
|
+
try:
|
|
297
|
+
console.print(Panel(f"🆘 CONFLICT DETECTED | Showing diff between {config_file_default_path} and {self_managed_config_file_path}", title="Conflict Detected", expand=False))
|
|
298
|
+
subprocess.run(command, shell=True, check=True)
|
|
299
|
+
except Exception:
|
|
300
|
+
console.print(Panel("⚠️ Could not show diff using 'delta'. Please install 'delta' for better diff visualization.", title="Delta Not Found", expand=False))
|
|
301
|
+
|
|
292
302
|
match on_conflict:
|
|
293
303
|
case "throw-error":
|
|
294
304
|
raise RuntimeError(f"Conflict detected: {config_file_default_path} and {self_managed_config_file_path} both exist with different content")
|
|
295
|
-
case "
|
|
305
|
+
case "overwrite-self-managed":
|
|
296
306
|
action_taken = "backing_up_target"
|
|
297
307
|
details = "Overwriting self-managed config with default path content"
|
|
298
308
|
console.print(Panel(f"📦 OVERWRITE SELF-MANAGED | Deleting {self_managed_config_file_path}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Overwrite Self-Managed", expand=False))
|
|
299
309
|
self_managed_config_file_path.delete(sure=True)
|
|
300
310
|
config_file_default_path.move(path=self_managed_config_file_path)
|
|
301
|
-
case "
|
|
311
|
+
case "backup-self-managed":
|
|
302
312
|
backup_name = f"{self_managed_config_file_path}.orig_{randstr()}"
|
|
303
313
|
action_taken = "backing_up_target"
|
|
304
314
|
details = f"Backed up self-managed config to {backup_name}"
|
|
305
315
|
console.print(Panel(f"📦 BACKUP SELF-MANAGED | Moving {self_managed_config_file_path} to {backup_name}, moving {config_file_default_path} to {self_managed_config_file_path}", title="Backup Self-Managed", expand=False))
|
|
306
316
|
self_managed_config_file_path.move(path=backup_name)
|
|
307
317
|
config_file_default_path.move(path=self_managed_config_file_path)
|
|
308
|
-
case "
|
|
318
|
+
case "overwrite-default-path":
|
|
309
319
|
action_taken = "backupConfigDefaultPath"
|
|
310
320
|
details = "Overwriting default path with self-managed config"
|
|
311
321
|
console.print(Panel(f"📦 OVERWRITE DEFAULT | Deleting {config_file_default_path}, will copy from {self_managed_config_file_path}", title="Overwrite Default", expand=False))
|
|
312
322
|
config_file_default_path.delete(sure=True)
|
|
313
|
-
case "
|
|
323
|
+
case "backup-default-path":
|
|
314
324
|
backup_name = f"{config_file_default_path}.orig_{randstr()}"
|
|
315
325
|
action_taken = "backupConfigDefaultPath"
|
|
316
326
|
details = f"Backed up default path to {backup_name}"
|
machineconfig/utils/ssh.py
CHANGED
|
@@ -8,7 +8,7 @@ from machineconfig.utils.terminal import Response
|
|
|
8
8
|
from machineconfig.utils.accessories import pprint, randstr
|
|
9
9
|
from machineconfig.utils.meta import lambda_to_python_script
|
|
10
10
|
UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
|
|
11
|
-
MACHINECONFIG_VERSION = "machineconfig>=
|
|
11
|
+
MACHINECONFIG_VERSION = "machineconfig>=7.32"
|
|
12
12
|
DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
|
|
13
13
|
|
|
14
14
|
class SSH:
|
|
@@ -113,9 +113,11 @@ def upgrade_machine_config_version() -> None:
|
|
|
113
113
|
major: int = int(version_parts[0])
|
|
114
114
|
minor: int = int(version_parts[1])
|
|
115
115
|
|
|
116
|
-
# Bump minor version by 1
|
|
116
|
+
# Bump minor version by 1, preserving zero-padding
|
|
117
117
|
new_minor: int = minor + 1
|
|
118
|
-
|
|
118
|
+
# Preserve the same number of digits as the original minor version
|
|
119
|
+
minor_width: int = len(version_parts[1])
|
|
120
|
+
new_version: str = f"{major}.{new_minor:0{minor_width}d}"
|
|
119
121
|
|
|
120
122
|
old_version_constraint: str = f"machineconfig>={current_version_str}"
|
|
121
123
|
new_version_constraint: str = f"machineconfig>={new_version}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: machineconfig
|
|
3
|
-
Version:
|
|
3
|
+
Version: 7.32
|
|
4
4
|
Summary: Dotfiles management package
|
|
5
5
|
Author-email: Alex Al-Saffar <programmer@usa.com>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -59,15 +59,25 @@ Dotfiles are divided into private and public. Examples of private ones are, `~/.
|
|
|
59
59
|
# Install On Windows:
|
|
60
60
|
|
|
61
61
|
```powershell
|
|
62
|
-
|
|
62
|
+
# Temporary install:
|
|
63
63
|
iex (iwr bit.ly/cfgwindows).Content
|
|
64
|
+
# Or, if UV is installed:
|
|
65
|
+
iex (uvx machineconfig define)
|
|
66
|
+
# Permanent install:
|
|
67
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Skip if UV is already installed
|
|
68
|
+
uvx install --upgrade machineconfig
|
|
64
69
|
```
|
|
65
70
|
|
|
66
71
|
# Install On Linux and MacOS
|
|
67
72
|
|
|
68
73
|
```bash
|
|
69
|
-
|
|
74
|
+
# Temporary install:
|
|
70
75
|
. <(curl -L bit.ly/cfglinux)
|
|
76
|
+
# Or, if UV is installed:
|
|
77
|
+
. <(uvx machineconfig define)
|
|
78
|
+
# Permanent install:
|
|
79
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # Skip if UV is already installed
|
|
80
|
+
uvx install --upgrade machineconfig
|
|
71
81
|
```
|
|
72
82
|
|
|
73
83
|
|
|
@@ -94,8 +94,8 @@ machineconfig/profile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
94
94
|
machineconfig/profile/backup.toml,sha256=Hb25sIdKVvLqOF62NgiOpGZxd45I6IhsNHu623RtfQQ,766
|
|
95
95
|
machineconfig/profile/bash_shell_profiles.md,sha256=mio0xkMTwO-F3fikWIfgcdQaPCmQrmkxJMNtZsTe9TI,514
|
|
96
96
|
machineconfig/profile/create_helper.py,sha256=_iNeuwmcEGTx6sf_f40JKHfOCuJRZQRpyE8Fo_3Q6bI,1519
|
|
97
|
-
machineconfig/profile/create_links.py,sha256=
|
|
98
|
-
machineconfig/profile/create_links_export.py,sha256=
|
|
97
|
+
machineconfig/profile/create_links.py,sha256=gdjRWEO4NDSlBWvCPbkBCqegapRB0mKdIsz1z4RJDT0,14228
|
|
98
|
+
machineconfig/profile/create_links_export.py,sha256=BXav-70rme4oagfU8I-xrv_xc6E409ipafegGeIuUDw,3309
|
|
99
99
|
machineconfig/profile/create_shell_profile.py,sha256=fib3YOj4QMV4dy7ysJtSzner1x-0nGtnGvnTKGyq578,10280
|
|
100
100
|
machineconfig/profile/mapper.toml,sha256=CGGKi4VbRo1-AuHU7w1g94NbAys0pxn6fI-2l-lUmY0,12469
|
|
101
101
|
machineconfig/profile/records/generic/shares.toml,sha256=FduDztfyQtZcr5bfx-RSKhEEweweQSWfVXkKWnx8hCY,143
|
|
@@ -110,9 +110,8 @@ machineconfig/scripts/linux/fzfag,sha256=x0rX7vM_YjKLZ822D2Xh0HdaTj5kR_gG3g_5_w6
|
|
|
110
110
|
machineconfig/scripts/linux/fzffg,sha256=jjeeyFkWmBbwH2taRqC3EOzZep2KR-ZYoI4UI-5kHqg,1090
|
|
111
111
|
machineconfig/scripts/linux/fzfg,sha256=ClGnJZUsIk4y0qs3W5iXGo-nd0FaqAHMsnh8uoXQFy8,1190
|
|
112
112
|
machineconfig/scripts/linux/fzfrga,sha256=xSdws6ae28ZXkkqz_uupZ0MYw_vxE2qpLT2DLS3WITM,460
|
|
113
|
-
machineconfig/scripts/linux/mcfgs,sha256=
|
|
113
|
+
machineconfig/scripts/linux/mcfgs,sha256=R2WmmIVOL9nVtyZdvU02664GD7lYrmQUW4Y8b-wjLM8,1387
|
|
114
114
|
machineconfig/scripts/linux/skrg,sha256=JgQJGwxaChr148bDnpTB0rrqZMe2o2zGSDA9x_oUhWM,133
|
|
115
|
-
machineconfig/scripts/linux/term,sha256=CNPY8p6SitOmtOPKXPervPPabjJNYBerA12SHN_v7w4,1139
|
|
116
115
|
machineconfig/scripts/linux/other/share_cloud.sh,sha256=lIZrXiaOT11kzu4NFNTXvANhc2bMdSPDYD1-7XUO_C0,2027
|
|
117
116
|
machineconfig/scripts/linux/other/share_nfs,sha256=LDQZQ9TV7z2y7RtNHiO4Wb513MztyGjaAV-GzTGwUdc,1374
|
|
118
117
|
machineconfig/scripts/linux/other/start_docker,sha256=_yDN_PPqgzSUnPT7dmniMTpL4IfeeaGy1a2OL3IJlDU,525
|
|
@@ -121,6 +120,7 @@ machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
121
120
|
machineconfig/scripts/python/agents.py,sha256=aVbLQDgpngXZm4taHcED4sAxyHvV2_Dz5VW3apPcQcY,10651
|
|
122
121
|
machineconfig/scripts/python/cloud.py,sha256=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yyeehw_cU8,1263
|
|
123
122
|
machineconfig/scripts/python/croshell.py,sha256=QyQbVboNqDQHJkUeSsJvdT212t4TW46yat3GBzneqsQ,8649
|
|
123
|
+
machineconfig/scripts/python/define.py,sha256=vk7E5twa3DtK10ZxRVlbklYHzcou7M3zPAoV5z9_JGI,645
|
|
124
124
|
machineconfig/scripts/python/devops.py,sha256=Lv4d-UlyOREj4VTcu_pxswYo54Mawe3XGeKjreGQDYg,2222
|
|
125
125
|
machineconfig/scripts/python/devops_navigator.py,sha256=5Cm384D4S8_GsvMzTwr0C16D0ktf8_5Mk5bEJncwDO8,237
|
|
126
126
|
machineconfig/scripts/python/fire_jobs.py,sha256=-xrUlBQ90asQkXuWESiDsD6D05Xuw0-NMmfwBerwSjg,13874
|
|
@@ -128,7 +128,7 @@ machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqW
|
|
|
128
128
|
machineconfig/scripts/python/interactive.py,sha256=jFHpiQq_lisa51BS4-qUlWPJ1-pmHmPAfA6dixdsOzY,11745
|
|
129
129
|
machineconfig/scripts/python/mcfg.py,sha256=TB5lZDZDImGqX4_mMSEv4ZoFigIPA0RXn-9H2cmPS6g,2457
|
|
130
130
|
machineconfig/scripts/python/sessions.py,sha256=Q_fbprawvW1x_E6jKQ-Z2Z5MRurRaepKUvi5z1G4CUw,9531
|
|
131
|
-
machineconfig/scripts/python/terminal.py,sha256=
|
|
131
|
+
machineconfig/scripts/python/terminal.py,sha256=RY7hJ0JIefJeGe_sp7ZiZpOG_vhXLmEAFRq-Fon-VEY,5191
|
|
132
132
|
machineconfig/scripts/python/utils.py,sha256=9vwF5QRbHphNF154UYg6Ld3W0b3N9uEkfMEeR-nP_sg,2802
|
|
133
133
|
machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
134
|
machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
|
|
@@ -162,7 +162,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
|
|
|
162
162
|
machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
163
163
|
machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
|
|
164
164
|
machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
|
|
165
|
-
machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=
|
|
165
|
+
machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=uzbNgu5m9itV87-WXfI4cR2yCuT_70mlfpt59L2zL3U,6932
|
|
166
166
|
machineconfig/scripts/python/helpers_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
167
167
|
machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py,sha256=YD6-rtudHNip8tx85amSmOZZIHBP9khq4az3dF41j6U,5934
|
|
168
168
|
machineconfig/scripts/python/helpers_agents/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
|
|
@@ -192,13 +192,13 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
|
|
|
192
192
|
machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
193
193
|
machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
|
|
194
194
|
machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
|
-
machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=
|
|
196
|
-
machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=
|
|
195
|
+
machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=kWgtoTPejj5lNk2FD2E1scgqloaxUq00_7oFuDSH0AI,6891
|
|
196
|
+
machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=pVUFE1SUtyTiulLzUssf8FrtU190EIV-l9rpwucsBa0,3427
|
|
197
197
|
machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
|
|
198
198
|
machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=9NcVJvPYaUDtmI_DSKthZxR4emMBeNWVM_M5f0YR8EQ,7302
|
|
199
199
|
machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
|
|
200
|
-
machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=
|
|
201
|
-
machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=
|
|
200
|
+
machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=FDB8YjLYYj1qZkCeeAMVc7jnGy4fPVzRzqUxlvZa4DU,6621
|
|
201
|
+
machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=BJnm9mEI0PGA2xK_ciNX1docIiRQ_fNhygGrDCcTekw,11076
|
|
202
202
|
machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
|
|
203
203
|
machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=B9pnosujOxZLpwzJO4YAqeO-2rvvOFIZgrUwGREZXfM,11118
|
|
204
204
|
machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
|
|
@@ -225,7 +225,7 @@ machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wd
|
|
|
225
225
|
machineconfig/scripts/python/helpers_repos/action.py,sha256=8je051kpGZ7A_GRsQyWKhPZ8xVW7tSm4bnPu6VjxaXk,9755
|
|
226
226
|
machineconfig/scripts/python/helpers_repos/action_helper.py,sha256=XRCtkGkNrxauqUd9qkxtfJt02Mx2gejSYDLL0jyWn24,6176
|
|
227
227
|
machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
|
|
228
|
-
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=
|
|
228
|
+
machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=3iub-GApBNiOaPLfcOxB9RVF_RPCLWKZ7A8w3CtrFcA,10450
|
|
229
229
|
machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
|
|
230
230
|
machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=vSDtrF4829jziwp6WZmGt9G8MJ9jY4hfXqtf0vhkYSE,607
|
|
231
231
|
machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
|
|
@@ -241,7 +241,7 @@ machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdC
|
|
|
241
241
|
machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
|
|
242
242
|
machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
|
|
243
243
|
machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
|
|
244
|
-
machineconfig/scripts/python/nw/mount_nfs,sha256=
|
|
244
|
+
machineconfig/scripts/python/nw/mount_nfs,sha256=Dri4hGiM2GxpqqxpdBPbf7dRHrr7P1HzZy6xtrHYQfU,1855
|
|
245
245
|
machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
|
|
246
246
|
machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
|
|
247
247
|
machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
@@ -255,12 +255,11 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=jHJyFTuks_Kw4cgE8
|
|
|
255
255
|
machineconfig/scripts/windows/fzfb.ps1,sha256=Bmngm2aY8hnPa3iKAOK6EPDYdKzGLUc81wYOnJhNoqg,149
|
|
256
256
|
machineconfig/scripts/windows/fzfg.ps1,sha256=CHJbMrMuZePd4dxwIwz3g4XWAEmWmckuX-Nrx2xgRkg,27
|
|
257
257
|
machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqkV0o8a8ywXcM,488
|
|
258
|
-
machineconfig/scripts/windows/mcfgs.ps1,sha256=
|
|
259
|
-
machineconfig/scripts/windows/term.ps1,sha256=nme_OWis84qN-zI2c0rdysNcDIdoaEKajXZhP2QioQs,1742
|
|
258
|
+
machineconfig/scripts/windows/mcfgs.ps1,sha256=1mLCFDPBG-1uNVaZe3fIAgvS_uo3u55TQaysG6Wj9Sw,1868
|
|
260
259
|
machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
|
|
261
260
|
machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
|
|
262
261
|
machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
|
|
263
|
-
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=
|
|
262
|
+
machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=lO0zd1Qyu_nC43TOzfCcfu4rPmMYZlluFKZWYzb2GnY,322
|
|
264
263
|
machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
|
|
265
264
|
machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
|
|
266
265
|
machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
|
|
@@ -332,7 +331,7 @@ machineconfig/settings/rofi/config.rasi,sha256=nDX5B8wdXQYF1fwiOTBRJUI4l_gQbYaLa
|
|
|
332
331
|
machineconfig/settings/rofi/config_default.rasi,sha256=rTfKnC-bZuWX1l-lWQACCUOE1ShhkfykAxtXX9PlQHE,4694
|
|
333
332
|
machineconfig/settings/shells/alacritty/alacritty.toml,sha256=EbL-2Y4QunW1pvRWB2yuLCw8MMPONheJr5LFoWRieUQ,871
|
|
334
333
|
machineconfig/settings/shells/alacritty/alacritty.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
335
|
-
machineconfig/settings/shells/bash/init.sh,sha256=
|
|
334
|
+
machineconfig/settings/shells/bash/init.sh,sha256=EoZemahn3ewLsxUWv1RD1XLq-WZNNVE8yIhIu7ENDZs,2931
|
|
336
335
|
machineconfig/settings/shells/hyper/.hyper.js,sha256=h-HqeYlvPvPD4Ee7828Cxo87uVkzbMGJFqXTZIWoegw,8884
|
|
337
336
|
machineconfig/settings/shells/ipy/profiles/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
338
337
|
machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -368,7 +367,7 @@ machineconfig/settings/zellij/layouts/panes.kdl,sha256=KlhKtelBy4Z2ENV_pix4xE7NH
|
|
|
368
367
|
machineconfig/settings/zellij/layouts/st.kdl,sha256=QXLRK7Wx05aKbKRHVmm4RspLYzPmEa44JMK1TwXQk58,523
|
|
369
368
|
machineconfig/settings/zellij/layouts/st2.kdl,sha256=1FKTH3qQWYMWp_wPMreP7fKOTlVd4cfBy3J8fv4zCBc,1489
|
|
370
369
|
machineconfig/settings/zellij/layouts/stacked_panes.kdl,sha256=usY8kKKwX1KUMXnWDivPg0i0drpM1Biw-tOnNZVjiZU,163
|
|
371
|
-
machineconfig/setup_linux/__init__.py,sha256=
|
|
370
|
+
machineconfig/setup_linux/__init__.py,sha256=5gT_vc6ze_RUMx9mk7_9kkOTyPPTo3MJFh2fq8MGToU,391
|
|
372
371
|
machineconfig/setup_linux/apps.sh,sha256=XOEzhuwYNat83ybamUdnVhDaGf2wlQiT5wVNvz2aJYM,3262
|
|
373
372
|
machineconfig/setup_linux/apps_desktop.sh,sha256=L2b_pcw3GiQdoAaoMO7J4bVvUoG5Pnuy9kDhV8JqprU,3325
|
|
374
373
|
machineconfig/setup_linux/apps_gui.sh,sha256=lFPYq7H2bRogPwW6QoEuSr9GnTjHS-jRM_eYg2rjOmM,2301
|
|
@@ -378,7 +377,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
|
|
|
378
377
|
machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
|
|
379
378
|
machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
|
|
380
379
|
machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
|
|
381
|
-
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=
|
|
380
|
+
machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=c1aV0EhTTDU8YTG1XKkiRN8cAYG8WKFJVn6CEGydQ6s,1449
|
|
382
381
|
machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
|
|
383
382
|
machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
|
|
384
383
|
machineconfig/setup_mac/apps_gui.sh,sha256=3alvddg918oMlJB2aUWJWpGGoaq5atlxcaOwhnyXlRI,9517
|
|
@@ -393,7 +392,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
|
|
|
393
392
|
machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
|
|
394
393
|
machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
|
|
395
394
|
machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
|
|
396
|
-
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256
|
|
395
|
+
machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=WXWrFz-Ws9QpFkNPHa_hCt8f91Xzm94yzYyzIJwzvf0,1751
|
|
397
396
|
machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
398
397
|
machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
|
|
399
398
|
machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -401,7 +400,7 @@ machineconfig/utils/accessories.py,sha256=Rs8R0GUb2Ub6YimkgXHnI02CShS5BKlrZdCigV
|
|
|
401
400
|
machineconfig/utils/code.py,sha256=fVeQnhZE8-aoPBsrgjNcBTcv3NuyBSSQv9P8jyC8W_M,6635
|
|
402
401
|
machineconfig/utils/installer.py,sha256=1ScBaTe_pRsfTYht9-LXmirgnNizNy8u1GgetUfEDO4,10351
|
|
403
402
|
machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
|
|
404
|
-
machineconfig/utils/links.py,sha256=
|
|
403
|
+
machineconfig/utils/links.py,sha256=mA98WNkX5iK4c6f8Ht3HKv7sB6VjIwqukTxXY23PVjk,25143
|
|
405
404
|
machineconfig/utils/meta.py,sha256=4ocYH3Zi6bVN6FVgXoGIfoasV6oxi67I9rQ8hvyYinc,9892
|
|
406
405
|
machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
|
|
407
406
|
machineconfig/utils/options.py,sha256=VWYx3EKJxIp-CJ8gDGYdjclKSc1tMUhyrC8v3seeneo,7447
|
|
@@ -411,10 +410,10 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
|
|
|
411
410
|
machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
|
|
412
411
|
machineconfig/utils/scheduling.py,sha256=vcJgajeJPSWkJNlarYJSmLvasdOuCtBM4druOAB1Nwc,11089
|
|
413
412
|
machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
|
|
414
|
-
machineconfig/utils/ssh.py,sha256=
|
|
413
|
+
machineconfig/utils/ssh.py,sha256=xrMpTa4WFQG6QgaE00uJQZYq0RPaDWvx28Ke6YogYZo,39008
|
|
415
414
|
machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
|
|
416
415
|
machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
|
|
417
|
-
machineconfig/utils/upgrade_packages.py,sha256=
|
|
416
|
+
machineconfig/utils/upgrade_packages.py,sha256=75kabcI-chMiaBnafJ_hdhDUz_GyH7AsDt7rW3hyu9M,5851
|
|
418
417
|
machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
|
|
419
418
|
machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
420
419
|
machineconfig/utils/cloud/onedrive/README.md,sha256=i20oRG110AN0yLF3DARHfWXDJjPBiSgWI8CP2HQAqrk,3774
|
|
@@ -440,8 +439,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
|
|
|
440
439
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
441
440
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
442
441
|
machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
443
|
-
machineconfig-
|
|
444
|
-
machineconfig-
|
|
445
|
-
machineconfig-
|
|
446
|
-
machineconfig-
|
|
447
|
-
machineconfig-
|
|
442
|
+
machineconfig-7.32.dist-info/METADATA,sha256=Cr6xNtBnHDG4jLnsqC1QAje0Wn1LR5pm5gih8-c5ZhI,3396
|
|
443
|
+
machineconfig-7.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
444
|
+
machineconfig-7.32.dist-info/entry_points.txt,sha256=0ho96z7b1toS6CeiajpTwEwQa83UrJ3g1onD4Wxax9o,624
|
|
445
|
+
machineconfig-7.32.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
446
|
+
machineconfig-7.32.dist-info/RECORD,,
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
agents = machineconfig.scripts.python.agents:main
|
|
3
3
|
cloud = machineconfig.scripts.python.cloud:main
|
|
4
4
|
croshell = machineconfig.scripts.python.croshell:main
|
|
5
|
+
define = machineconfig.scripts.python.define:main
|
|
5
6
|
devops = machineconfig.scripts.python.devops:main
|
|
6
7
|
fire = machineconfig.scripts.python.fire_jobs:main
|
|
7
8
|
ftpx = machineconfig.scripts.python.ftpx:main
|
|
9
|
+
machineconfig = machineconfig.scripts.python.mcfg:main
|
|
8
10
|
mcfg = machineconfig.scripts.python.mcfg:main
|
|
9
11
|
sessions = machineconfig.scripts.python.sessions:main
|
|
10
12
|
terminal = machineconfig.scripts.python.terminal:main
|
machineconfig/scripts/linux/term
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#!/usr/bin/env bash
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
RANDOM_NAME=$(date +%s%N | sha256sum | head -c 16)
|
|
6
|
-
OP_DIR="$HOME/tmp_results/tmp_scripts/machineconfig"
|
|
7
|
-
OP_PROGRAM_PATH="$OP_DIR/${RANDOM_NAME}.sh"
|
|
8
|
-
export OP_PROGRAM_PATH
|
|
9
|
-
|
|
10
|
-
# ANSI color/style codes
|
|
11
|
-
BOLD="\033[1m"
|
|
12
|
-
RESET="\033[0m"
|
|
13
|
-
GREEN="\033[32m"
|
|
14
|
-
YELLOW="\033[33m"
|
|
15
|
-
BLUE="\033[34m"
|
|
16
|
-
RED="\033[31m"
|
|
17
|
-
|
|
18
|
-
timestamp=$(date -u +"%Y-%m-%d %H:%M:%SZ")
|
|
19
|
-
|
|
20
|
-
printf "%b\n" "${BOLD}${BLUE}🛠️ terminal — running term${RESET}"
|
|
21
|
-
printf "%b\n" "${BLUE}Timestamp:${RESET} ${timestamp}"
|
|
22
|
-
printf "%b\n" "${BLUE}Op program path:${RESET} ${OP_PROGRAM_PATH}"
|
|
23
|
-
|
|
24
|
-
terminal "$@"
|
|
25
|
-
|
|
26
|
-
if [[ -f "$OP_PROGRAM_PATH" ]]; then
|
|
27
|
-
printf "%b\n" "${GREEN}✅ Found op program:${RESET} ${OP_PROGRAM_PATH}"
|
|
28
|
-
bat --style=plain --paging=never "$OP_PROGRAM_PATH"
|
|
29
|
-
printf "%b\n" "${GREEN}▶ Running...${RESET}"
|
|
30
|
-
. "$OP_PROGRAM_PATH"
|
|
31
|
-
status=$?
|
|
32
|
-
if [[ $status -eq 0 ]]; then
|
|
33
|
-
printf "%b\n" "${GREEN}✅ Completed successfully (exit ${status})${RESET}"
|
|
34
|
-
else
|
|
35
|
-
printf "%b\n" "${YELLOW}⚠️ Program exited with status ${status}${RESET}"
|
|
36
|
-
fi
|
|
37
|
-
else
|
|
38
|
-
printf "%b\n" "${YELLOW}⚠️ No op program found at: ${OP_PROGRAM_PATH}${RESET}"
|
|
39
|
-
fi
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Equivalent PowerShell script for term.ps1
|
|
2
|
-
|
|
3
|
-
Set-StrictMode -Version Latest
|
|
4
|
-
$ErrorActionPreference = 'Stop'
|
|
5
|
-
|
|
6
|
-
# Generate random name using timestamp and SHA256 hash
|
|
7
|
-
$timestampNs = [DateTimeOffset]::Now.ToUnixTimeMilliseconds() * 1000000
|
|
8
|
-
$hashInput = [System.Text.Encoding]::UTF8.GetBytes($timestampNs.ToString())
|
|
9
|
-
$sha256 = [System.Security.Cryptography.SHA256]::Create()
|
|
10
|
-
$hashBytes = $sha256.ComputeHash($hashInput)
|
|
11
|
-
$hashString = -join ($hashBytes | ForEach-Object { $_.ToString('x2') })
|
|
12
|
-
$randomName = $hashString.Substring(0, 16)
|
|
13
|
-
|
|
14
|
-
$opDir = "$env:USERPROFILE\tmp_results\tmp_scripts\machineconfig"
|
|
15
|
-
$opProgramPath = "$opDir\$randomName.ps1"
|
|
16
|
-
$global:OP_PROGRAM_PATH = $opProgramPath
|
|
17
|
-
|
|
18
|
-
# ANSI color/style codes (using Write-Host colors)
|
|
19
|
-
$bold = [char]27 + '[1m'
|
|
20
|
-
$reset = [char]27 + '[0m'
|
|
21
|
-
$green = [char]27 + '[32m'
|
|
22
|
-
$yellow = [char]27 + '[33m'
|
|
23
|
-
$blue = [char]27 + '[34m'
|
|
24
|
-
$red = [char]27 + '[31m'
|
|
25
|
-
|
|
26
|
-
$timestamp = Get-Date -Format 'u'
|
|
27
|
-
|
|
28
|
-
Write-Host "${bold}${blue}🛠️ terminal — running term${reset}"
|
|
29
|
-
Write-Host "${blue}Timestamp:${reset} ${timestamp}"
|
|
30
|
-
Write-Host "${blue}Op program path:${reset} ${opProgramPath}"
|
|
31
|
-
|
|
32
|
-
terminal $args
|
|
33
|
-
|
|
34
|
-
if (Test-Path $opProgramPath) {
|
|
35
|
-
Write-Host "${green}✅ Found op program:${reset} ${opProgramPath}"
|
|
36
|
-
# Assuming bat is available; otherwise, use Get-Content
|
|
37
|
-
& bat --style=plain --paging=never $opProgramPath
|
|
38
|
-
Write-Host "${green}▶ Running...${reset}"
|
|
39
|
-
. $opProgramPath
|
|
40
|
-
$status = $LASTEXITCODE
|
|
41
|
-
if ($status -eq 0) {
|
|
42
|
-
Write-Host "${green}✅ Completed successfully (exit ${status})${reset}"
|
|
43
|
-
} else {
|
|
44
|
-
Write-Host "${yellow}⚠️ Program exited with status ${status}${reset}"
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
Write-Host "${yellow}⚠️ No op program found at: ${opProgramPath}${reset}"
|
|
48
|
-
}
|
|
File without changes
|
|
File without changes
|