replace_asdf_with_mise_in_shell_configs

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