Maverick /ˈmævəɹɪk/ - an independent individual who does not go along with a group or party
Perform the initial setup of the operating system which comes with the Pinebook Pro before proceeding. All subsequent steps are performed from within the device itself - an extra SD card is needed, though.
It has become increasingly difficult to boot the Pinebook Pro with anything other than the pre-loaded image. This is partly due to the bootloader bundled with Manjaro - we shall replace it by flashing Tow-Boot to the SPI.
Download Tow-Boot release,
extract it and flash the
binaries/Tow-Boot.spi.bin file to SPI.
sudo flashcp Tow-Boot.spi.bin /dev/mtd0
Once the flash completes reboot and verify whether the Tow-Boot menu shows up
<Esc>. Select EMMC to get back to pre-installed Manjaro.
Download the console PostmarketOS installer
image. Insert the
SD card (
/dev/mmcblkX) into the slot and flash the PostmarketOS installer to it.
xz --decompress --stdout \ pine64-pinebookpro-installer.img.xz | sudo dd of=/dev/mmcblkX bs=4M status=progress
Reboot the device and press
<Esc> to get to Tow-Boot menu. Select
and boot into the installer. Follow the steps, reboot and remove the SD card
from the slot - you should be greeted with PostmarketOS splash screen and a
TTY. Log in with username
user and the password set during installation.
In order to allow root login set a password with
sudo passwd. Log out with
<Ctrl-d> and log back in as root.
Change the unpriveleged username and home directory
usermod -l piotr user usermod -d /home/piotr/ -m piotr
The hostname can be now changed to the title of this project.
echo "mvrck" > /etc/hostname
Enable the swap by uncommenting the line in
and setting the appropriate swap file size in
swap_size=6144 # 8192 - 2048
The swapfile can be automatically created & activated with
Alpine provides a simple script to set the timezone properly -
The system is now usable - clone the
dots branch of this repository (you may
need to copy/generate SSH keys first).
sudo apk add git git clone --single-branch --branch dots --bare \ email@example.com:~piotr-machura/dotfiles ~/.config/dots alias dots="git --git-dir=$HOME/.config/dots --work-tree=$HOME" dots config --local status.showUntrackedFiles no dots reset --hard
The dotfiles should now be available in the home directory. Copy the apk world file to system-wide location in order to automatically install all required programs.
sudo cp ~/.local/share/apk.world /etc/apk/world sudo apk add
Note: the cloned
~/.config/git/config contains a handy git alias, so that git
dots will always access the configs repo directly. Feel free to unalias dots
Note 2: the
--single-branch option only clones the "dots" branch, which
is desirable since an accidental git checkout to the master branch would
temporarily remove all of the installed dotfiles, causing great confusion.
Change the default shell to zsh
chsh -s /bin/zsh
and enable autologin by changing one of the lines of
/etc/inittab to read
# Set up a couple of getty's tty1::respawn:/bin/login -f piotr
After another reboot and (now automatic) login Sway should start.
Some hardware workarounds are necessary to make the Pinebook Pro usable as a daily driver.
Neihter suspend nor hibernate work. It is best to disable
[Login] # ... HandlePowerKey=ignore HandleSuspendKey=ignore HandleHibernateKey=ignore HandleLidSwitch=ignore HandleLidSwitchExternalPower=ignore HandleLidSwitchDocked=ignore # ... [Sleep] # ... AllowSuspend=no AllowHibernation=no AllowSuspendThenHibernate=no AllowHybridSleep=no # ...
The Pinebook Pro has a background noise/crackling problem caused by the audio interface going to sleep.
This power-saving functionality can be disabled in the
by commenting the line
### Automatically suspend sinks/sources that become idle for too long #load-module module-suspend-on-idle # <- comment this
Still, the noise floor (which is now constant since the device does not go to
sleeep) remains high. To mitigate it use
alsamixer and reduce the gain on
left-most bar ("Speakers/Headphones") until noise level is acceptable. Save
the settings to
/etc/asound.state, which is sourced on startup.
sudo alsactl store
Some noise (resembling coil whine) will still present when using speakers -
pavucontrol allows for changing the default port to headphones, which should
make the noise disappear completely (and it is not noticeable on headphones, at
least not on mine).
Manual software tweaks are described here.
Nftables should be enabled by default, with a sensible configuration. Disallow incoming SSH traffic by deleting the appropriate rule.
sudo rm /etc/nftables.d/50_ssh.nft
In order to keep the
.local/share/apk.world file up to date, a post-commit
hook is necessary
sudo mkdir -p /etc/apk/commit_hooks.d cat <<EOF #!/bin/sh if [ "$1" = 'post-commit' ]; then cp -v /etc/apk/world /home/piotr/.local/share/apk.world chown piotr:user /home/.local/share/apk.world fi EOF > copy_world.sh sudo mv copy_world.sh /etc/apk/commit_hooks.d/ sudo chmod +x /etc/apk/commit_hooks.d/copy_world.sh
The himalaya CLI is used to read & sync the email from the remote server to local maildir.
It requires a PGP-encrypted
pass.asc password file to be available in its
cd ~/.config/himalaya echo 'my super-secret email password!' > pass gpg --encryp --armor -r $GPG_KEYID_HERE pass shred -u pass
Format an SD card as exFAT and name it
exfatlabel. Add the
following line to
/etc/fstab to mount on boot, but continue if it is not found
/dev/disk/by-label/SD /mnt/SD exfat nofail,noatime,user,uid=10000,gid=10000 0 2
Now it is possible to move some mass-storage directories to the SD card and symlink them into the home directory.
Libva-v4l2-request is outdated and does not build on newer kernels.
The system does go to sleep correctly.
# WARNING: do not do this! echo mem > /sys/power/state
But it does not wake up - not when clicking the mouse, power button etc.