Skip to content

Instantly share code, notes, and snippets.

@claudiodekker
Last active April 14, 2024 18:30
Show Gist options
  • Save claudiodekker/4c9f40654106ff6717865d73cca7580e to your computer and use it in GitHub Desktop.
Save claudiodekker/4c9f40654106ff6717865d73cca7580e to your computer and use it in GitHub Desktop.
Update (or install) Ungoogled Chromium (ARM64 / Apple "M1") with Widevine.
#!/usr/bin/env zx
const fs = require('fs')
async function getCurrentVersion() {
let version;
try {
version = await $`/Applications/Chromium.app/Contents/MacOS/Chromium --version`
} catch (e) {
return null
}
if (version && version.stdout.indexOf('Chromium ') === 0) {
return version.stdout.split(' ')[1]
}
}
async function getLatestRelease() {
const response = await fetch('https://api.github.com/repos/ungoogled-software/ungoogled-chromium-macos/releases')
const releases = await response.json()
return releases.flatMap(release => release.assets || {})
.filter(asset => asset.name?.endsWith('_arm64-macos.dmg'))
.find((release) => release?.browser_download_url && release?.name)
}
async function installUngoogledChromium(downloadUrl) {
await $`curl -L -o ungoogled-chromium.dmg -O ${downloadUrl}`
await $`hdiutil attach ungoogled-chromium.dmg`
if (fs.existsSync('/Applications/Chromium.app')) {
await $`killall "Chromium" || true`
await $`rm -r /Applications/Chromium.app`
}
await $`cp -R /Volumes/Chromium/Chromium.app /Applications`
await $`sleep 1` // Workaround for 'hdiutil: couldn't unmount "diskX" - Resource busy'
await $`hdiutil detach "/Volumes/Chromium/"`
await $`rm ungoogled-chromium.dmg`
}
async function patchWidevineSupport() {
await $`curl -O https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg`
await $`hdiutil attach googlechrome.dmg`
let src = '/Volumes/Google Chrome/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Libraries/WidevineCdm'
let dest = '/Applications/Chromium.app/Contents/Frameworks/Chromium Framework.framework/Libraries/'
await $`cp -R ${src} ${dest}`
await $`sleep 1` // Workaround for 'hdiutil: couldn't unmount "diskX" - Resource busy'
await $`hdiutil detach "/Volumes/Google Chrome/"`
await $`rm googlechrome.dmg`
}
const currentVersion = await getCurrentVersion()
const latestRelease = await getLatestRelease()
if (currentVersion && latestRelease.name.indexOf(currentVersion) > -1) {
console.log('Already up to date')
process.exit(0)
}
cd('/tmp')
await installUngoogledChromium(latestRelease.browser_download_url)
await patchWidevineSupport()
await $`open /Applications/Chromium.app`
@claudiodekker
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment