#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run import os fn addtoscript(tofind string, toadd string) ! { home_dir := os.home_dir() mut rc_file := '${home_dir}/.zprofile' if !os.exists(rc_file) { rc_file = '${home_dir}/.bashrc' if !os.exists(rc_file) { return error('No .zprofile or .bashrc found in home directory') } } // Read current content mut content := os.read_file(rc_file)! // Remove existing alias if present lines := content.split('\n') mut new_lines := []string{} mut prev_is_emtpy := false for line in lines { if prev_is_emtpy { if line.trim_space() == '' { continue } else { prev_is_emtpy = false } } if line.trim_space() == '' { prev_is_emtpy = true } if !line.contains(tofind) { new_lines << line } } new_lines << toadd new_lines << '' // Write back to file new_content := new_lines.join('\n') os.write_file(rc_file, new_content)! } abs_dir_of_script := dir(@FILE) println('Script directory: ${abs_dir_of_script}') // Determine the organization name from the current path // This makes the script work with any organization (incubaid, etc.) path_parts := abs_dir_of_script.split('/') mut org_name := 'incubaid' // default fallback for i, part in path_parts { if part == 'github' && i + 1 < path_parts.len { org_name = path_parts[i + 1] break } } println('Detected organization: ${org_name}') println('Will create symlink: ${os.home_dir()}/.vmodules/${org_name}/herolib -> ${abs_dir_of_script}/lib') // Reset symlinks (cleanup) println('Resetting all symlinks...') os.rm('${os.home_dir()}/.vmodules/incubaid/herolib') or {} os.rm('${os.home_dir()}/.vmodules/${org_name}/herolib') or {} // Create necessary directories os.mkdir_all('${os.home_dir()}/.vmodules/${org_name}') or { panic('Failed to create directory ~/.vmodules/${org_name}: ${err}') } // Create new symlinks symlink_target := '${abs_dir_of_script}/lib' symlink_path := '${os.home_dir()}/.vmodules/${org_name}/herolib' os.symlink(symlink_target, symlink_path) or { panic('Failed to create herolib symlink: ${err}') } // Verify the symlink was created // Note: os.exists() may return false for broken symlinks, so we check if it's a link first if os.is_link(symlink_path) { println('✓ Symlink created successfully: ${symlink_path}') println('✓ Points to: ${symlink_target}') // Verify the target exists if os.exists(symlink_target) { println('✓ Target directory exists and is accessible') } else { eprintln('⚠ Warning: Symlink target does not exist: ${symlink_target}') } } else { panic('Failed to create herolib symlink at ${symlink_path}') } println('Herolib installation completed successfully!') // Add vtest alias addtoscript('alias vtest=', "alias vtest='v -stats -enable-globals -show-c-output -n -w -cg -gc none -cc tcc test' ") or { eprintln('Failed to add vtest alias: ${err}') exit(1) } // Add vrun alias addtoscript('alias vrun=', "alias vrun='v -stats -enable-globals -show-c-output -n -w -cg -gc none -cc tcc run' ") or { eprintln('Failed to add vrun alias: ${err}') exit(1) } addtoscript('HOME/hero/bin', 'export PATH="\$PATH:\$HOME/hero/bin"') or { eprintln('Failed to add path to hero, ${err}') exit(1) } // ulimit -n 32000 println('Added vtest alias to shell configuration')