From 73f6d4ae58594af39f6f951116e130c549a02708 Mon Sep 17 00:00:00 2001 From: doylet Date: Sat, 14 Feb 2026 17:53:35 +1100 Subject: [PATCH] Linux fixes --- devenver.py | 15 +--- install.py | 246 +++++++++++++++++++++++++--------------------------- 2 files changed, 117 insertions(+), 144 deletions(-) diff --git a/devenver.py b/devenver.py index 9863c8d..0255b61 100644 --- a/devenver.py +++ b/devenver.py @@ -511,7 +511,7 @@ internal_app_list = [] devenv_script_buffer = "" def install_app_list(app_list, download_dir, install_dir, is_windows): - title = "Internal Apps" if app_list is internal_app_list else "User Apps" + title = "Internal Apps" print_header(title) result = {} @@ -792,11 +792,6 @@ def run(user_app_list, install_dir=install_dir, is_windows=is_windows) - user_apps = install_app_list(app_list=user_app_list, - download_dir=download_dir, - install_dir=install_dir, - is_windows=is_windows) - # Write the devenv script with environment variables if is_windows: devenv_script_buffer += "set devenver_root_backslash=%~dp0\n" @@ -823,13 +818,5 @@ def run(user_app_list, if not is_windows: subprocess.run(args=["chmod", "+x", devenv_script_path]) - # Merge the install dictionaries, this dictionary contains - # (app label) -> [array of installed versions] result = internal_apps - for key, value in user_apps.items(): - if key not in result: - result.update({key: value}) - else: - result[key] += value - return result diff --git a/install.py b/install.py index 25be3eb..abdfb06 100644 --- a/install.py +++ b/install.py @@ -44,16 +44,6 @@ arg_parser.add_argument('--install-dir', default="", type=pathlib.Path) -arg_parser.add_argument('--with-dev-apps', - help=f'Download and install apps from the developer manifest', - const=True, - action="store_const") - -arg_parser.add_argument('--with-user-apps', - help=f'Download and install apps from the user manifest', - const=True, - action="store_const") - arg_parser.add_argument('operating_system', choices=['win', 'linux'], help=f'Download and install apps for the specified operating system') @@ -73,51 +63,47 @@ if install_dir == pathlib.Path(""): install_dir = devenver.script_dir / 'Linux' # Install development apps -# ------------------------------------------------------------------------------ -if args.with_dev_apps: - # Run DEVenver, installing the portable apps - dev_env_script_name = "dev_env" - app_list = app_manifest_dev.get_manifest(is_windows=is_windows) - installed_dev_apps = devenver.run(user_app_list=app_list, - download_dir=download_dir, - install_dir=install_dir, - devenv_script_name=dev_env_script_name, - is_windows=is_windows) +dev_env_script_name = "dev_env" +app_list = app_manifest_dev.get_manifest(is_windows=is_windows) +installed_dev_apps = devenver.run(user_app_list=app_list, + download_dir=download_dir, + install_dir=install_dir, + devenv_script_name=dev_env_script_name, + is_windows=is_windows) +install_script_path = pathlib.Path(devenver.script_dir, "install.py") +if is_windows: + # Install apps dependent on Git + devenver.print_header("Install apps that rely on Git") + git_exe = installed_dev_apps["Git"][0]['exe_path'] - install_script_path = pathlib.Path(devenver.script_dir, "install.py") - if is_windows: - # Install apps dependent on Git - devenver.print_header("Install apps that rely on Git") - git_exe = installed_dev_apps["Git"][0]['exe_path'] + # Clink + clink_install_dir = installed_dev_apps["Clink"][0]['install_dir'] + clink_base_dir = clink_install_dir.parent - # Clink - clink_install_dir = installed_dev_apps["Clink"][0]['install_dir'] - clink_base_dir = clink_install_dir.parent + # Gizmos + clink_gizmo_git_hash = "fb2edd9" + clink_gizmo_install_dir = clink_base_dir / "clink-gizmos" + git_clone(install_dir=clink_gizmo_install_dir, + git_exe=git_exe, + url="https://github.com/chrisant996/clink-gizmos", + commit_hash=clink_gizmo_git_hash) - # Gizmos - clink_gizmo_git_hash = "fb2edd9" - clink_gizmo_install_dir = clink_base_dir / "clink-gizmos" - git_clone(install_dir=clink_gizmo_install_dir, - git_exe=git_exe, - url="https://github.com/chrisant996/clink-gizmos", - commit_hash=clink_gizmo_git_hash) + # Completions + clink_completions_git_hash = "86b6f07" + clink_completions_install_dir = clink_base_dir / "clink-completions" + git_clone(install_dir=clink_completions_install_dir, + git_exe=git_exe, + url="https://github.com/vladimir-kotikov/clink-completions", + commit_hash=clink_completions_git_hash) - # Completions - clink_completions_git_hash = "86b6f07" - clink_completions_install_dir = clink_base_dir / "clink-completions" - git_clone(install_dir=clink_completions_install_dir, - git_exe=git_exe, - url="https://github.com/vladimir-kotikov/clink-completions", - commit_hash=clink_completions_git_hash) + # Install clink configuration + clink_profile_dir = clink_base_dir / "profile" + clink_settings_path = clink_profile_dir / "clink_settings" + devenver.lprint(f"Installing clink_settings to: {clink_settings_path}") - # Install clink configuration - clink_profile_dir = clink_base_dir / "profile" - clink_settings_path = clink_profile_dir / "clink_settings" - devenver.lprint(f"Installing clink_settings to: {clink_settings_path}") - - clink_settings_path.parent.mkdir(exist_ok=True) - clink_settings_path.write_text(f"""# When this file is named "default_settings" and is in the binaries + clink_settings_path.parent.mkdir(exist_ok=True) + clink_settings_path.write_text(f"""# When this file is named "default_settings" and is in the binaries # directory or profile directory, it provides enhanced default settings. # Override built-in default settings with ones that provide a more @@ -155,121 +141,121 @@ clink.path = {clink_completions_install_dir};{clink_gizmo fzf.default_bindings = True """) - # Install wezterm configuration - wezterm_config_dest_path = installed_dev_apps["WezTerm"][0]["install_dir"] / "wezterm.lua" - devenver.lprint(f"Installing WezTerm config to {wezterm_config_dest_path}") + # Install wezterm configuration + wezterm_config_dest_path = installed_dev_apps["WezTerm"][0]["install_dir"] / "wezterm.lua" + devenver.lprint(f"Installing WezTerm config to {wezterm_config_dest_path}") - clink_exe_path = clink_install_dir.relative_to(install_dir) / "clink_x64.exe" - clink_exe_path_for_wezterm = str(clink_exe_path).replace("\\", "\\\\") - clink_profile_path_for_wezterm = str(clink_profile_dir.relative_to(install_dir)).replace("\\", "\\\\") + clink_exe_path = clink_install_dir.relative_to(install_dir) / "clink_x64.exe" + clink_exe_path_for_wezterm = str(clink_exe_path).replace("\\", "\\\\") + clink_profile_path_for_wezterm = str(clink_profile_dir.relative_to(install_dir)).replace("\\", "\\\\") - wezterm_config_dest_path.write_text(f"""local wezterm = require 'wezterm'; + wezterm_config_dest_path.write_text(f"""local wezterm = require 'wezterm'; local default_prog local set_environment_variables = {{}} if wezterm.target_triple == "x86_64-pc-windows-msvc" then - clink_exe = string.format("%s\\\\..\\\\..\\\\{clink_exe_path_for_wezterm}", wezterm.executable_dir) - devenv_bat = string.format("%s\\\\..\\\\..\\\\{dev_env_script_name}.bat", wezterm.executable_dir) - clink_profile = string.format("%s\\\\..\\\\..\\\\{clink_profile_path_for_wezterm}", wezterm.executable_dir) +clink_exe = string.format("%s\\\\..\\\\..\\\\{clink_exe_path_for_wezterm}", wezterm.executable_dir) +devenv_bat = string.format("%s\\\\..\\\\..\\\\{dev_env_script_name}.bat", wezterm.executable_dir) +clink_profile = string.format("%s\\\\..\\\\..\\\\{clink_profile_path_for_wezterm}", wezterm.executable_dir) - -- Taken from: https://wezfurlong.org/wezterm/shell-integration.html - -- Use OSC 7 as per the above example - set_environment_variables['prompt'] = - '$E]7;file://localhost/$P$E\\\\$E[32m$T$E[0m $E[35m$P$E[36m$_$G$E[0m ' +-- Taken from: https://wezfurlong.org/wezterm/shell-integration.html +-- Use OSC 7 as per the above example +set_environment_variables['prompt'] = +'$E]7;file://localhost/$P$E\\\\$E[32m$T$E[0m $E[35m$P$E[36m$_$G$E[0m ' - default_prog = {{"cmd.exe", "/s", "/k", - clink_exe, "inject", "--profile", clink_profile, "-q", - "&&", "call", devenv_bat}} +default_prog = {{"cmd.exe", "/s", "/k", + clink_exe, "inject", "--profile", clink_profile, "-q", + "&&", "call", devenv_bat}} end return {{ - font_size = 10.0, - color_scheme = "Peppermint", - default_prog = default_prog, - set_environment_variables = set_environment_variables, +font_size = 10.0, +color_scheme = "Peppermint", +default_prog = default_prog, +set_environment_variables = set_environment_variables, }} """) - # Wezterm super terminal - wezterm_terminal_script_path = install_dir / "dev_terminal.bat" - devenver.lprint(f"Installing WezTerm terminal script to {wezterm_terminal_script_path}") + # Wezterm super terminal + wezterm_terminal_script_path = install_dir / "dev_terminal.bat" + devenver.lprint(f"Installing WezTerm terminal script to {wezterm_terminal_script_path}") - wezterm_terminal_script_path.write_text(f"""@echo off + wezterm_terminal_script_path.write_text(f"""@echo off setlocal EnableDelayedExpansion set working_dir= if "%~1" neq "" ( - set working_dir=start --cwd "%~1" - set working_dir=!working_dir:\=/! +set working_dir=start --cwd "%~1" +set working_dir=!working_dir:\=/! ) start "" /MAX "%~dp0{installed_dev_apps["WezTerm"][0]["exe_path"].relative_to(install_dir)}" !working_dir! """) - # Python - python_exe_path = pathlib.Path(installed_dev_apps["Python"][0]['exe_path']) + # Python + python_exe_path = pathlib.Path(installed_dev_apps["Python"][0]['exe_path']) - # PyNvim - devenver.lprint(f"Installing PyNVIM") - subprocess.run(f"{python_exe_path} -m pip install pynvim") + # PyNvim + devenver.lprint(f"Installing PyNVIM") + subprocess.run(f"{python_exe_path} -m pip install pynvim") - # Use LLVM script to fix up bloated installation - # See: https://github.com/zufuliu/llvm-utils/blob/main/llvm/llvm-link.bat - internal_dir = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) / "Internal" - if is_windows: - devenver.print_header("Use LLVM utils script to slim installation size") - llvm_install_dir_set = set() - for entry in installed_dev_apps["LLVM"]: - llvm_install_dir_set.add(entry['install_dir']) +# Use LLVM script to fix up bloated installation +# See: https://github.com/zufuliu/llvm-utils/blob/main/llvm/llvm-link.bat +internal_dir = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) / "Internal" +if is_windows: + devenver.print_header("Use LLVM utils script to slim installation size") + llvm_install_dir_set = set() + for entry in installed_dev_apps["LLVM"]: + llvm_install_dir_set.add(entry['install_dir']) - llvm_script_src_path = internal_dir / "win_llvm-link-ad01970-2022-08-29.bat" - for llvm_install_dir in llvm_install_dir_set: - llvm_script_dest_path = llvm_install_dir / "llvm-link.bat" - shutil.copy(llvm_script_src_path, llvm_script_dest_path) - subprocess.run(llvm_script_dest_path, cwd=llvm_install_dir) - os.remove(llvm_script_dest_path) + llvm_script_src_path = internal_dir / "win_llvm-link-ad01970-2022-08-29.bat" + for llvm_install_dir in llvm_install_dir_set: + llvm_script_dest_path = llvm_install_dir / "llvm-link.bat" + shutil.copy(llvm_script_src_path, llvm_script_dest_path) + subprocess.run(llvm_script_dest_path, cwd=llvm_install_dir) + os.remove(llvm_script_dest_path) - # Install fzf scripts - if not is_windows: - shutil.copy(internal_dir / "unix_fzf-completion.bash", install_dir) - shutil.copy(internal_dir / "unix_fzf-key-bindings.bash", install_dir) +# Install fzf scripts +if not is_windows: + shutil.copy(internal_dir / "unix_fzf-completion.bash", install_dir) + shutil.copy(internal_dir / "unix_fzf-key-bindings.bash", install_dir) - # Install dev scripts - if is_windows: - shutil.copy(internal_dir / "win_dev.bat", install_dir / "dev.bat") - else: - shutil.copy(internal_dir / "unix_dev.sh", install_dir / "dev.sh") - subprocess.run(args=["chmod", "+x", install_dir / "dev.sh") +# Install dev scripts +if is_windows: + shutil.copy(internal_dir / "win_dev.bat", install_dir / "dev.bat") +else: + shutil.copy(internal_dir / "unix_dev.sh", install_dir / "dev.sh") + subprocess.run(args=["chmod", "+x", install_dir / "dev.sh"]) - # Install left-overs - devenver.print_header("Install configuration files") +# Install left-overs +devenver.print_header("Install configuration files") - # ClangFormat - clang_format_src_path = internal_dir / "os_clang_format_style_file" - clang_format_dest_path = install_dir / "_clang-format" - devenver.lprint(f"Copying clang-format file from {clang_format_src_path} to {clang_format_dest_path}") - shutil.copy(clang_format_src_path, clang_format_dest_path) +# ClangFormat +clang_format_src_path = internal_dir / "os_clang_format_style_file" +clang_format_dest_path = install_dir / "_clang-format" +devenver.lprint(f"Copying clang-format file from {clang_format_src_path} to {clang_format_dest_path}") +shutil.copy(clang_format_src_path, clang_format_dest_path) - # Copy init.vim to NVIM directory - nvim_init_dir = "" +# Copy init.vim to NVIM directory +nvim_init_dir = "" - if is_windows: - nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / "AppData" / "Local" / "nvim" - else: - nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / ".config" / "nvim" +if is_windows: + nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / "AppData" / "Local" / "nvim" +else: + nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / ".config" / "nvim" - nvim_config_dest_path = nvim_init_dir / "init.vim" - nvim_config_src_path = internal_dir / "os_nvim_init.vim" +nvim_config_dest_path = nvim_init_dir / "init.vim" +nvim_config_src_path = internal_dir / "os_nvim_init.vim" - devenver.lprint(f"Installing NVIM config to {nvim_config_dest_path}") - nvim_init_dir.mkdir(parents=True, exist_ok=True) - shutil.copy(nvim_config_src_path, nvim_config_dest_path) +devenver.lprint(f"Installing NVIM config to {nvim_config_dest_path}") +nvim_init_dir.mkdir(parents=True, exist_ok=True) +shutil.copy(nvim_config_src_path, nvim_config_dest_path) - # Download vim.plug to NVIM init directory - nvim_plug_vim_dir = nvim_init_dir / "autoload" - nvim_plug_vim_path = nvim_plug_vim_dir / "plug.vim" - nvim_plug_vim_dir.mkdir(parents=True, exist_ok=True) - if not os.path.exists(nvim_plug_vim_path): - devenver.lprint(f"Installing NVIM plugin manager to {nvim_plug_vim_path}") - urllib.request.urlretrieve("https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim", nvim_plug_vim_path) +# Download vim.plug to NVIM init directory +nvim_plug_vim_dir = nvim_init_dir / "autoload" +nvim_plug_vim_path = nvim_plug_vim_dir / "plug.vim" +nvim_plug_vim_dir.mkdir(parents=True, exist_ok=True) +if not os.path.exists(nvim_plug_vim_path): + devenver.lprint(f"Installing NVIM plugin manager to {nvim_plug_vim_path}") + urllib.request.urlretrieve("https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim", nvim_plug_vim_path)