2024 Update
MrChromebox.tech had a major update a few month ago, so I decide to move on as well.
But before that, use Clonezilla or rsync -aHAXS
to back up the 32 GB emmc first.
Run in terminal, install “Full UEFI Firmware”
cd; curl -LO mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
After reboot, a full version of coreboot is installed, by replacing the previous SeaBIOS which is partial and limited.
This makes this laptop now with a free firmware. A free GNU/Linux distro is needed to be reinstalled.
When done backing up the old OS, download preferred distro and boot it from an USB drive.
Prepare another USB drive for /boot
partition, since UEFI doesn’t work with the internal eMMc storage. This boot drive is necessary for every power-on or reboot. Choose a low-profile one so that is appropriate to be semi-permanent.
While installation (custom), make the /boot
and /boot/efi
mounting points on the boot drive (sda), and everything else, like /
, /home
and swap
on the internal storage (mmcblk0).
This UEFI boot workaround should also work with Windows system. Not only due to the reason I stated before, but also I really like the freeness of this laptop.
It is suggested to use a small-size (mine is 4GB), slow-speed but reliable USB drive for boot drive. Use some tools like RMPrepUSB or MBROSTool to test a USB drive and make backup boot drives with Clonezilla.
In the end, use rsync
, Clonezilla or both to restore the old system folders like /home
. There are extra files such as /etc/keyd/default.conf
and a few software from /usr/share/
and /opt/*
. After the new system booted, reinstall keyd and other softwares as needed. The only broken thing was my custom theme for mate. Changing to another theme is a quick fix.
After this firmware upgrade, the sound card problem is fixed and the driver is now fully funtional out of the box.
Below is the original content dated at 2022-11-09.
Recently, I got a new ThinkPad which took Lenovo over 2 month preparing for shipping. For the price, it worth waiting. This is the first Chromebook I’ve ever had, so I did quite a lot experiments with it.
Hardware
The model is C13 Yoga Chromebook (MORPHIUS) with AMD Athlon gold 3015c (Picasso) 4GB RAM and 32GB eMMc storage.
There are multiple variations in C13 models and mine is the lowest-end of them. It is the cheapest ThinkPad I’ve ever seen, even cheaper than my old one (Sandy Bridge, bought used on 2016).
The stylus pen is thinner and the touchscreen isn’t compatible with my old stylus pen although they feel very similar on hand.
Force Power-off
There are a few techniques from the official documents. I tried and none of them works for a serious freeze like kernel panic. Therefore, I physically disabled the built-in battery for convenience. Fortunately, it’s fairly easy to do without leaving a scratch or tearing up any label.
- Hard and doesn’t work: press
Refresh ⟳
together with thePower
button for about five seconds, and at the same time detach the ac power adapter from the Chromebook - Works only for normal freeze: disconnect all power sources. Press and hold the power button for about seven seconds
Firmware
Disable CR50 hardware write protection and modify bootloader
I followed instructions from coolstar, pl-luk, and Mrchromebox to replace Tianocore with coreboot + SeaBIOS.
- Enter Recovery Mode with
ESC + ⟳ + Power
: press/hold ESC and Refresh, then press Power for ~1s CTRL+D
to switch to Developer Mode and confirmCTRL+D
again to wipe userdata for Developer Mode- Connect WiFi and select
Browse as a Guest
- Use
CTRL+ALT+T
in Chrome to Open the CCD - Run
shell
in the Crosh shell to switch shell - Run
sudo crossystem dev_boot_altfw=1
andsudo crossystem dev_boot_usb=1
andsudo crossystem dev_boot_signed_only=0; sync
to enable extra boot entries - Run
sudo flashrom --wp-disable
andsudo flashrom --wp-range=0,0
to disable write protection - Run MrChromebox’s script:
cd; curl -LO mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
- Reboot and either select
Select alternate bootloader → Tianocore/coreboot (CTRL+L)"
orBoot from external Disk (CTRL+U)
as needed
Linux on ThinkPad C13 Yoga
Tails
Thanks to folks from r/chrultrabook. I found adding iommu=pt
to the Grab2 menu options fixed the booting problem for many Live CD distros.
Here are more parameters maybe useful:
video=eDP-1:1920x1080-32@60 iommu=pt mem_encrypt=off amdgpu.ras_enable=0 amdgpu.audio=0
Depthboot
I’ve tried the prebuild EupneaOS image and didn’t like its flavor. Therefore, I followed Depthboot instructions to build from scratch.
- On a Linux machine, insert a USB drive and run
git clone --depth=1 https://github.com/eupnea-linux/depthboot-builder; cd depthboot-builder; ./main.py
inside a terminal - Choose a flavor, select the USB drive to flash directly, for me its
sdb
, and it takes a few mins to finish - Put the depthboot USB drive into the Chromebook and hit
Ctrl+U (Boot from external disk)
at the bootloader - Boot into the newly created Linux and test everything out. In my case, only the sound card and suspend has issue
- Connect to internet, then open a terminal, update and run
setup-audio
to fix the sound card driver (acp3xalc5682m98357) - run
install-to-internal
to start installation. It will use/dev/mmcblk1
which means wiping the entire 32GB eMMc/HDD without preserving Chrome OS partition - When installation finishes, reboot and use
Ctrl+D (Boot from internal disk)
to boot into the new system
Depthboot created Linux distros runs pretty well on my C13. Suspend doesn’t suppose to work on this hardware and I don’t really need it. The sound card is far more problematic because acp3xalc5682m98357 (Maxim 98357a) is a tough one to work with.
Thanks to eupnea-audio-script. With kernel version 5.10.131, I was able to get the built-in speakers working but not for the headphone port. Here’s more test results:
- Semi-functional sound card under Fedora 37, Pop!_OS 22.04 LTS and Ubuntu 22.10—speakers are fixed but not for the headphone port
- Not working sound card under Ubuntu LTS 22.04 and Arch—the script didn’t fix anything
Workarounds are plenty, for example, using Bluetooth headphones or buying a cheap small USB sound card like C-Media ones that can plug n play.
MATE Desktop Environment
Breath used to provide MATE as one of the desktop options. Depthboot added Pop!_OS which is very nice but removed my favorite DE from all distros.
MATE consumes much less resources while provides a decent UX/UI. Because of that, it’s superior than any other desktop options for my C13. Most important, GNOME 2 was my first daily driver linux desktop.
- Use Depthboot
main.py
script to create acli
(no desktop) version offedora
, ubuntu cli had minor booting issue - Boot into the Dephboot drive on C13 and use
nmtui
→Active a connection
to connect WiFi - Run
install-to-internal
andsudo reboot
. Boot into internal disk and log into fedora cli - To install MATE, run
sudo dnf -y group install "MATE-Desktop"
or for less packagesudo dnf -y install @mate-desktop
. In case of installing as secondary DE, add--allowerasing
to resolve conflicts - Run
echo "exec /usr/bin/mate-session" >> ~/.xinitrc
andstartx
to launch MATE
Fix twice login problem
It happens to LightDM, so both MATE and Xfce can be affected. Run these lines to switch from lightdm to sddm
dnf install sddm
systemctl disable lightdm
systemctl enable sddm
reboot
Use setup-audio
to fix the sound card. After reboot, go to Sound Preferences/PulseAudio
switch Profile
into Pro Audio
. Xfce and MATE doesn’t support volume function keys by default, go to System Settings - Hardware - Keyboard - Layouts
switch Keyboard model
into Google - Chromebook
to enable all function keys.
Remap missing keys with keyd
However, I switched it back to Generic - Generic 104-key PC
since I need a normal keyboard experience for blogging, coding and SSH.
Install keyd
git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
modprobe uinput
chmod a+r+w /dev/uinput
sudo systemctl enable keyd && sudo systemctl start keyd
Keep uinput loaded after reboot for keyd
#Add self to the input and uinput groups
sudo usermod -aG input $USERNAME
sudo groupadd uinput
sudo usermod -aG uinput $USERNAME
#Create auto load files for uinput module
echo 'KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="uinput"' | sudo tee /etc/udev/rules.d/90-uinput.rules
echo uinput | sudo tee /etc/modules-load.d/uinput.conf
Run sudo keyd -m
to read key press; create config file sudo pluma /etc/keyd/default.conf
and save it with desired code
[ids]
*
[main]
# Remaps Tools/Lock key to Del
f13 = delete
# Remaps Search/meta/magnifier to Caps Lock
leftmeta = capslock
# Remaps right Ctrl key to Win/Meta/Super/Mod4
#rightcontrol = leftmeta
# Recovers missing F11, F12,
[control]
f9 = f11
f10 = f12
[main]
# Use left Alt as Fn/ISO_Level3_Shift key
[alt]
# Recovers Home/End, PgUp/PgDn, PrtScr
left = home
right = end
up = pageup
down = pagedown
f5 = sysrq
# Remaps Function keys
f6 = brightnessdown
f7 = brightnessup
f8 = mute
f9 = volumedown
f10 = volumeup
[main]
# Use right Alt as Fn/ISO_Level3_Shift key
[altgr]
# Recovers Home/End, PgUp/PgDn, PrtScr
left = home
right = end
up = pageup
down = pagedown
f5 = sysrq
# Remaps Function keys
f6 = brightnessdown
f7 = brightnessup
f8 = mute
f9 = volumedown
f10 = volumeup
# More examples: https://github.com/rvaiya/keyd/blob/master/docs/keyd.scdoc
Run sudo keyd reload
to see result
My layout is based on coolstarorg’s chromebookremap.ahk by using both sides of ALT as the Fn key instead of Ctrl. It brings back all missing keys such as F11/F12, volume controls and the ability to Ctrl+Alt+Del. Now we can have a fully functional keyboard on a Chromebook.
Optimize Liunx
For my C13, I think the cost of timeshift is more than what I can get from it. I’d rather use traditional backup methods like clonezilla or simply tar occasionally. Always make backups before doing anything funny.
-
Go to
System Settings - Hardware - Keyboard Shortcuts
or rundconf-editor
to setup hotkeys. I rebind some combinations from Meta/Super to left Alt -
Change font rendering DPI from 96 to 130; Find some cohesive dark theme that follows ThinkPad’s design language; Disable mouse acceleration and touchpad;
I modified this script to disable hires scrolling and mouse acceleration at same shot.
sudo dnf install xinput
first, save desired code in a .sh file, runchmod +x script.sh
from terminal to ensure its permission and add it intoSystem - Personal - Preferences - Startup Applications
.
#!/bin/sh
device="TPPS/2 Elan TrackPoint"
if xinput list --id-only "${device}" > /dev/null 2>&1; then
xinput --set-prop "${device}" 'libinput Accel Profile Enabled' 0, 1
xinput --set-prop "${device}" 'libinput Accel Speed' 0
xinput --set-prop "${device}" 'libinput Scrolling Pixel Distance' 40 #Fastest to slowest 10-50
xinput --set-prop "${device}" 'libinput High Resolution Wheel Scroll Enabled' 0
notify-send "Mouse settings applied"
else
echo "Unable to find device ${device}" >&2
exit 1
fi
- Disabe useless autostarts (most of them) from
System - Personal - Startup Applications - Show hidden
or by using Stacer with root privilege; Remove bloatware like flatpak and abrt bug report services from terminal
sudo dnf -y remove xdg-desktop-portal
sudo systemctl -t service | grep abrt
sudo systemctl stop abrt-journal-core.service
sudo systemctl disable abrt-journal-core.service
sudo systemctl stop abrt-oops.service
sudo systemctl disable abrt-oops.service
sudo systemctl stop abrt-xorg.service
sudo systemctl disable abrt-xorg.service
sudo systemctl stop abrtd.service
sudo systemctl disable abrtd.service
At this point, on idle the system’s memory/CPU usage should be like 700-800MB/1-2%. Under normal load surfing with 5-6 tabs while playing FreeTube with 720p video, memory/CPU is around 2.6GB-2.8GB/20-50%. No lag or freeze what so ever.
To be more efficient, use some not-so-memory-hungry web browsers such as midori, Pale Moon and Otter. Although it is totally fine to stick with LibreWolf or Firefox+Arkenfox running full loads of extensions.
Arkenfox the easy way
For applying Arkenfox on stock Firefox
-
Go to
about:support
and openProfile Directory
-
Close Firefox and backup the entire profile dir. Download the user.js and prefsCleaner.sh inside the profile dir along with
prefs.js
-
Run these lines and restart Firefox
cd /home/username/.mozilla/firefox/s0m3th1ng.default/
wget https://raw.githubusercontent.com/arkenfox/user.js/master/user.js https://raw.githubusercontent.com/arkenfox/user.js/master/prefsCleaner.sh
chmod +x prefsCleaner.sh user.js
./prefsCleaner.sh
- If need persistent log in, modify
user.js
with followings
user_pref("privacy.clearOnShutdown.cookies", false);
user_pref("privacy.clearOnShutdown.offlineApps", false);
user_pref("browser.sessionstore.privacy_level", 0);
user_pref("browser.startup.page", 3);
user_pref("places.history.enabled", true);
user_pref("privacy.sanitize.sanitizeOnShutdown", false);
user_pref("network.cookie.lifetimePolicy", 2);
Windows on ThinkPad C13 Yoga
Although coolstar has C13 with AMD 3015ce in its guide, it is not for the lowest end variation. If I run the script, it would say “Detected eMMC” and “UEFI only supports NVMe SSDs currently”.
Without the bootloader files created by that script, I can’t pass the “ACPI_BIOS_ERROR” when booting up ANY version of Windows. Therefore, I decided to run the script code manually for the bootloader files.
Prepare the bootloader files
On the Chromebook, boot into Linux either from internal disk or USB. Save these cut-out code in a .sh file and run sudo ./newscript.sh
in terminal
echo "Downloading OpenCore + rEFInd"
curl -L -O https://coolstar.org/chromebook/windows-rwl/opencore-refind-rwl-generic.tar.gz
mkdir -p /tmp/efi/efi/boot
echo_green "Installing OpenCore + rEFInd"
tar xf opencore-refind-rwl-generic.tar.gz -C /tmp/efi/efi/boot
mv /tmp/efi/efi/boot/OC /tmp/efi/efi/OC
mv /tmp/efi/efi/boot/refind /tmp/efi/efi/refind
echo "Downloading Tools.."
curl -L -O https://coolstar.org/chromebook/windows-rwl/iasl.gz
curl -L -O https://coolstar.org/chromebook/windows-rwl/patch.gz
gzip -d iasl.gz
gzip -d patch.gz
rm -rf /usr/local/bin/iasl /usr/local/bin/patch
mkdir -p /usr/local/bin
mv iasl /usr/local/bin/
mv patch /usr/local/bin
chmod +x /usr/local/bin/iasl
chmod +x /usr/local/bin/patch
echo "Dumping System ACPI tables"
mkdir -p /tmp/fwpatch
cat /sys/firmware/acpi/tables/DSDT > /tmp/fwpatch/dsdt.aml
if grep -q COREBOOT /sys/firmware/acpi/tables/SSDT1; then
echo "Found COREBOOT SSDT1"
cat /sys/firmware/acpi/tables/SSDT1 > /tmp/fwpatch/ssdt.aml
fi
if grep -q COREBOOT /sys/firmware/acpi/tables/SSDT2; then
echo "Found COREBOOT SSDT2"
cat /sys/firmware/acpi/tables/SSDT2 > /tmp/fwpatch/ssdt.aml
fi
echo "Disassembling ACPI tables"
iasl -d /tmp/fwpatch/dsdt.aml /tmp/fwpatch/ssdt.aml
echo "Downloading Patches"
curl -L -O https://coolstar.org/chromebook/windows-rwl/acpipatches.tar.gz
tar xf acpipatches.tar.gz -C /tmp/fwpatch
if $(true); then
echo "Applying Patches"
pushd /tmp/fwpatch #Enter Firmware patch stage
echo "Applying DSDT Patch (Zen2 Chrome EC BSOD Fix)"
patch -s -F 3 -i patches/zen2-crec-fix.patch dsdt.dsl
echo "Applying DSDT Patch (Zen2 GPIO Fix)"
patch -s -F 3 -i patches/zen2-gpio.patch dsdt.dsl
echo "Applying DSDT Patch (Zen2 UART Fix)"
patch -s -F 3 -i patches/zen2-uart.patch dsdt.dsl
echo "Applying DSDT Patch (Zen2 Remove MISC)"
patch -s -F 3 -i patches/zen2-nomisc.patch dsdt.dsl
echo "Applying DSDT Patch (Zen2 Remove AAHB)"
patch -s -F 3 -i patches/zen2-noaahb.patch dsdt.dsl
if grep -q GOOG0002 dsdt.dsl; then
echo "Applying DSDT Patch (Zen2 Keyboard Backlight)"
patch -s -F 3 -i patches/zen2-kblt-scope.patch dsdt.dsl
fi
if grep -q GOOG0015 dsdt.dsl; then
echo "Applying DSDT Patch (Morphius No Trackpoint)"
patch -s -F 7 -i patches/morphius-no-trackpoint.patch dsdt.dsl
fi
if grep -q GOOG0006 dsdt.dsl; then
echo "Applying DSDT Patch (Zen2 Tablet Mode)"
patch -s -F 5 -i patches/zen2-tabletmode.patch dsdt.dsl
fi
if grep -q DPTC ssdt.dsl; then
echo "Applying SSDT Patch (Syntax Fix)"
patch -s -F 3 -i patches/morphius-syntax-fix.patch ssdt.dsl
fi
if grep -q RTD2141B ssdt.dsl; then
echo "Applying SSDT Patch (Remove MST HUB)"
patch -s -F 3 -i patches/nomst.patch ssdt.dsl
fi
if grep -q AMDI5682 ssdt.dsl; then
echo "Applying SSDT Patch (Remove AMDI5682)"
patch -s -F 5 -i patches/zen2-nomach.patch ssdt.dsl
fi
if grep -q AMDI1015 ssdt.dsl; then
echo "Applying SSDT Patch (Remove AMDI1015)"
patch -s -F 5 -i patches/zen2-nomach1015.patch ssdt.dsl
fi
if grep -q "Fingerprint Reader" ssdt.dsl; then
echo "Applying SSDT Patch (Fingerprint Fix)"
patch -s -F 3 -i patches/fingerprintfix.patch ssdt.dsl
fi
if grep -q ELAN0000 ssdt.dsl; then
if [ "$isElanPad" = true ]; then
echo "Applying SSDT Patch (Elan Touchpad)"
patch -s -F 3 -i patches/elantp.patch ssdt.dsl
else
echo "Applying SSDT Patch (No Elan Touchpad)"
patch -s -F 3 -i patches/noelantp.patch ssdt.dsl
fi
fi
if grep -q "Synaptics Touchpad" ssdt.dsl; then
if [ "$isSynapticsPad" = true ]; then
echo "Applying SSDT Patch (Synaptics Touchpad)"
patch -s -F 3 -i patches/synatp.patch ssdt.dsl
else
echo "Applying SSDT Patch (No Synaptics Touchpad)"
patch -s -F 3 -i patches/nosynatp.patch ssdt.dsl
fi
fi
if grep -q RAYD0001 ssdt.dsl; then
if [ "$isRaydiumTouch" = true ]; then
echoerr "Warning: Raydium Touchscreen is currently unsupported"
fi
echo "Applying SSDT Patch (No Raydium Touchscreen)"
patch -s -F 3 -i patches/noraydiumts.patch ssdt.dsl
fi
if grep -q ELAN0001 ssdt.dsl; then
if [ "$isElanTouch" = true ]; then
echo "Applying SSDT Patch (Elan Touchscreen)"
patch -s -F 3 -i patches/elants.patch ssdt.dsl
else
echo "Applying SSDT Patch (No Elan Touchscreen)"
patch -s -F 3 -i patches/noelants.patch ssdt.dsl
fi
fi
if grep -q ELAN9008 ssdt.dsl; then
if [ "$isElanHIDTouch" = true ]; then
echo "No Patch required (Elan HID Touchscreen)"
else
echo "Applying SSDT Patch (No Elan HID Touchscreen)"
patch -s -F 6 -i patches/noelan9008ts.patch ssdt.dsl
fi
fi
if grep -q GTCH7503 ssdt.dsl; then
if [ "$isG2Touch" = true ]; then
echo "No Patch required (G2 Touchscreen)"
else
echo "Applying SSDT Patch (No G2 Touchscreen)"
patch -s -F 3 -i patches/nog2touch.patch ssdt.dsl
fi
fi
if grep -q GDIX0000 ssdt.dsl; then
if [ "$isGdixTouch" = true ]; then
echo "No Patch required (GDIX Touchscreen)"
else
echo "Applying SSDT Patch (No GDIX Touchscreen)"
patch -s -F 3 -i patches/nogdixts.patch ssdt.dsl
fi
fi
if grep -q 10EC1015 ssdt.dsl; then
echo "Applying SSDT Patch (Vilboz Duplicate I2C)"
patch -s -F 5 -i patches/vilboz-nodupi2c.patch ssdt.dsl
sed -i 's/TUN1/TUN0/g' ssdt.dsl
fi
popd
fi
echo "Compiling ACPI tables"
mv /tmp/fwpatch/dsdt.dsl /tmp/fwpatch/dsdt-modified.dsl
mv /tmp/fwpatch/ssdt.dsl /tmp/fwpatch/ssdt1-modified.dsl
iasl -ve /tmp/fwpatch/dsdt-modified.dsl
iasl -ve /tmp/fwpatch/ssdt1-modified.dsl
echo "Installing patched tables"
mv /tmp/fwpatch/dsdt-modified.aml /tmp/efi/efi/OC/ACPI/
mv /tmp/fwpatch/ssdt1-modified.aml /tmp/efi/efi/OC/ACPI/
#echo "Unmounting EFI partition"
#umount /tmp/efi
echo_green "Cleaning Up..."
rm -rf opencore-refind-rwl-generic.tar.gz iasl.gz patch.gz acpipatches.tar.gz
rm -rf /usr/local/bin/iasl /usr/local/bin/patch /tmp/fwpatch
Copy the output file from /tmp/efi to a USB drive for later use. The file structure of the bootloader directory should look like this:
├── EFI
│ ├── boot
│ │ ├── BOOTx64.efi 20.0 KiB (20,484)
│ ├── OC
│ │ ├── ACPI
│ │ │ ├── dsdt-modified.aml 16.1 KiB (16,466)
│ │ │ └── ssdt1-modified.aml 8.7 KiB (8,881)
│ │ ├── config.plist
│ │ ├── Drivers
│ │ │ └── AcpiPatcher.efi 24.0 KiB (24,576)
│ │ └── OpenCore.efi
│ ├── refind
│ │ ├── icons
│ │ ├── refind.conf
│ │ ├── refind_x64.efi
│ │ ├── themes
I didn’t show files under icons, themes, vars, and tools since they are not important for the task.
Prepare the Windows To Go USB Drive
Unfortunately, internal eMMc and SD card are not possible to boot up EFI for Windows. It has to be running on a USB drive.
- Download .iso image and Rufus on a Windows 10 machine
- Plug in a decent USB drive or portable SSD, Open Rufus, select the correct device and .iso image
- Choose
Windows To Go
underImage option
and hitStart
- When WTG installation finishes, use what ever tool to access the EFI partition on the WTG drive. I use BOOTICE made by pauly,
Physical disk - Destination Disk - WTG USB Drive (xxGB) - Parts Manage
highlight the partition withNO NAME, ESP, FAT32, 2048, 260.0 MB
andAssign Drive Letter - X: - OK
- Copy the bootloader files we’ve prepared to the EFI partition just mounted. When merging the efi folders, it would prompt for replacing
BOOTx64.efi
and yes for that. Now there areBoot,Microsoft,OC,refind
inside EFI\ - Eject the WTG drive from Windows machine and plug it into the Chromebook. Power on and
Select alternate bootloader → Tianocore/coreboot (CTRL+L)"
to boot into rEFInd - When the rEFInd menu shows up, enter
Boot Microsoft EFI boot from EFI System Partition
and wait for the initialization. “ACPI_BIOS_ERROR” no longer interrupting and when the system reboots just repeat booting into the WTG drive - Plug in a USB mouse may be helpful when interaction begins. It’s recommend to setup Windows without internet
Windows Post-Installation
Coolstar guide also provides a full set of drivers for ThinkPad C13. Sound card may works with both speaker and headphone depending on which Windows is installed.
After tested a couple of versions of Windows10/11, I couldn’t get the touchscreen, touchpad and trackpoint working on any of them. This ruins my intention of using Windows on C13. Although at this point, it is able to play games with USB gaming gears.
I still want to share some opinion on Windows since it’s not limited on a single hardware.
To test out different Windows versions running on a new device, Microsoft-Activation-Scripts can make things easier.
For me, LTSC 2021 (21H2)
is the sweet spot between up-to-date and RAM efficiency among all current versions.
Here is the final result:
en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso
Defualt
RAM Avaliable 2771MB 30%
C:\ 17GB Used
After OOSU10/Windows10Debloater & privacy.sexy
RAM Avaliable 3088MB 24%
C:\ 9.5GB Used
tiny10 21H2 x64 2209.iso
Defualt
RAM Avaliable 3088MB 24%
C:\ 8GB Used
After OOSU10/Windows10Debloater & privacy.sexy & Debloat-Windows-10
RAM Avaliable 3196MB 21%
C:\ 8.2GB Used
Although the mod version, tiny10 is generally not being trusted. It shows how much more we can get by modifying the image than post-install scripts.
Also, when considering privacy, people tend to think using Windows 10 is a joke. It’s half true.
Using OOSU10/Windows10Debloater can make things less worse. Additionally, using privacy.sexy can make it better. If we need to go further, Debloat-Windows-10 has a whole set of useful scripts to run or customize, for example, my favorite disable-services.ps1.
Even not for privacy enhancement, just for better resource efficiency. These post-install scripts are worth to have—by reducing background CPU/Network/Disk activity, RAM/Storage consumption.
Yes, if use the aggressive rule set, it will break things up—until you notice it. Even if it really bothers you, most of the time it is reversible.
For more security enhancement, BitLocker/VeraCrypt and Windows-Optimize-Harden-Debloat are recommended.
henrypp’s simplewall + hostsmgr is a good alternative to Windows Firewall + SmartScreen which doesn’t cut off all those crazy traffic with Microsoft and its affiliate servers.
hostsmgr generates a huge host file for blocking those unnecessary traffic as much as possible but it conflicts with DNS client service (dnscache). StevenBlack’s script solves the problem or by simply switching to NextDNS which is a modern alternative to the old hosts file methods.
For machines with 4GB of RAM and 32GB of storage in the modern days, we may need some cleanup methods from the old days but not with those outdated tools.
Also made by henrypp, memreduct can save a lot of memory that eating up by poorly made software. Use it wisely will definitely optimize the system performance. For storage, with bleachbit and WinDirStat would be enough to keep C13 running for years.