in lib/tasks/migrate_to_mise.rake [27:67]
def replace_asdf_with_mise_in_shell_configs
@updated_shell_configs = []
@backup_paths = []
mise_path = `which mise 2>/dev/null`.strip
mise_path = 'mise' if mise_path.empty?
shell_configs = {
'~/.bashrc' => { asdf: 'asdf.sh', mise: "eval \"$(#{mise_path} activate bash)\"" },
'~/.zshrc' => { asdf: 'asdf.sh', mise: "eval \"$(#{mise_path} activate zsh)\"" },
'~/.config/fish/config.fish' => { asdf: 'asdf.fish', mise: 'mise activate fish' },
'~/.config/elvish/rc.elv' => { asdf: 'asdf.elv', mise: 'mise activate elvish' },
'~/.config/nushell/config.nu' => { asdf: 'asdf.nu', mise: 'mise activate nu' }
}
shell_configs.each do |path, scripts|
full_path = File.expand_path(path)
next unless File.file?(full_path)
content = File.read(full_path)
original = content.dup
mise_line = "# Added by GDK bootstrap\n#{scripts[:mise]}"
pattern = %r{
next unless content.match?(pattern)
content = content.gsub(pattern, mise_line)
next if content == original
backup_path = "#{full_path}.#{Time.now.strftime('%Y%m%d%H%M%S')}.bak"
FileUtils.cp(full_path, backup_path)
@backup_paths << backup_path
File.write(full_path, content)
@updated_shell_configs << full_path
rescue StandardError => e
GDK::Output.error("Failed to update #{full_path}: #{e.message}")
end
end