Unfortunately, I send in my beloved Macbook Pro Late 2016 to Apple to fix their 1st generation butterfly keyboard that is broken by design. So I am left with my peripherals and an unused Raspberry Pi 3 Model B with 1 GB RAM* (I still had laying around). Luckily, I have a lot of work for the coming week that can not be delayed. So without spending any money or borrowing a device from my girlfriend, friends or family my only option is to get a minimal temporary desktop environment running on my Raspberry Pi. All I had to do to get started was to grab the 64 GB micro sd card from my old Samsung Galaxy and get a power supply as well as a housing (Aukru 3 in 1 Kit + Power Supply*).

TL;DR

Don't do it – setup is a bit complicated, you can't use the software you are used to, it's way too slow and you will have to do most of your work in terminal

The workflow

We are going through the following problems in this post:

Problem 1 – Raspberry Pi won't boot from 64 GB or 128 GB sd card because of exFat

The micro sd card used in the Raspberry Pi must be fat32 formatted. The problem here is that cards with more than 32 GB of memory (64 GB, 128 GB, 256 GB) won't work correctly with fat32. That is why they are formatted exFat by default.

  • If you have a micro sd card with at least 64 GB you must reformat it to fat32 by following the steps written here.
  • Goto the Raspberry Pi Download Page and either download noobs or the Raspberry Pi imager.
  • If you downloaded noobs just extract its contents into the root of your sd card.
    If you installed the Raspberry Pi imager, run it and install Raspbian on your sd card.

Problem 2 – Make Raspberry Pi support 21:9 ultrawide resolutions

By default the Raspberry Pi will only support standard resolutions like 1920x1080 or 1280x720 px. In order to use the small machine with an 21:9 monitor we must define a custom resolution. The following works on my LG Ultrawide 21:9 with 3440x1440 px.

  • First of all open /boot/config.txt in your favorite editor with root privileges. (For vim it would be: sudo vim /boot/config.txt)
  • You will then need to add or replace the following config values. If you don't know what you are doing or what I mean, stop right here
disable_overscan=1
framebuffer_width=1920
framebuffer_height=820
max_framebuffer_width=1920
max_framebuffer_height=820
hdmi_group=2
hdmi_mode=87
hdmi_aspect_21_9=7
hdmi_cvt=1920 820 60 7 0 0 1
hdmi_ignore_edid=0xa5000080
hdmi_pixel_freq_limit=400000000
hdmi_drive=2
Raspberry Pi 21:9 ultrawide configuration: 1920x820 px @ 60 Hz
  • Restart ( sudo reboot) and your Raspberry Pi will output 1920x820 px filling your 21:9 monitor. You can also try using 2560x1080px but my Raspberry was terribly slow and crashed after a few minutes so I reduced the resolution.
  • The config for 2560x1080p @ 60 Hz looks like:
disable_overscan=1
framebuffer_width=2560
framebuffer_height=1080
max_framebuffer_width=2560
max_framebuffer_height=1080
hdmi_group=2
hdmi_mode=87
hdmi_aspect_21_9=7
hdmi_cvt=2560 1080 60 7 0 0 1
hdmi_ignore_edid=0xa5000080
hdmi_pixel_freq_limit=400000000
hdmi_drive=2
Raspberry Pi 21:9 ultrawide configuration: 2560x1080 px @ 60 Hz
  • You can also try reducing the refresh rate by editing the hdmi_cvt value (here reduced from 60 Hz to 30 Hz in comparison with the last code snipped):
...
hdmi_cvt=2560 1080 30 7 0 0 1
...
Raspberry Pi 21:9 ultrawide configuration: 2560x1080 px @ 30 Hz

Problem 3 – Install latest Node.js 12 or 14 on Raspbian

I wanted to use a correctly working Node.js 12 or 14 instead of the broken v10 that the package-manager installs. Fortunately, prebuilt binaries for arm-architecture are available via nodesource. In order to install, for example version 12, just execute:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
Install nodejs v12 on raspbian

Problem 4 – Install latest neovim on Raspbian (0.4.4)

Even though neovim is available from the official package-manager but you will end up with a very old version ( 0.3.x ). If you want to use the latest version cocvim for instance you must build neovim from source (like in the good ol' days):

Building neovim from source on Raspbian

  • Install the build dependencies by opening a terminal and executing:
sudo apt-get install ninja-build gettext libtool libtool-bin autoconf automake cmake g++ pkg-config unzip
Install maketools on Raspbian
  • Grab the source (https://github.com/neovim/neovim/releases) by downloading the source for the latest stable version of neovim and extract it. Alternatively you can clone the repo via git and checkout the stable branch.
  • Build and install neovim by executing:
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install
Make and install neovim
  • If you type neovim --version you should see neovim printing the installed version. If the displayed version does not match with the one you built, you likely installed neovim with the package-manager before. To fix it just run sudo apt-get remove neovim.

Problem 5 – Setting up my development environment: VSCode, neovim, ...

Installing Visual Studio Code on Raspbian

My development environment usually includes Visual Studio Code when doing web development (node, react, ...).

Unfortunately, Raspbian is not supported by Visual Studio Code and there is no official build that works. There is however an unofficial fork that works on Raspbian. It can be installed by executing the following commands.

wget https://code.headmelted.com/installers/apt.sh
chmod u+x ./apt.sh
sudo ./apt.sh

You will then find the entry Code - OSS (headmelted) in your applications (Raspberry GUI in the top left corner -> Programming).

It works fairly well but if you install the wrong plugins Code will take too much RAM and require more cpu power your Pi has to offer. This is the reason why I temporarily ditched VS Code in favor of neovim.

Setting up Raspberry Pi for development with neovim

After successfully installing the latest neovim version as described before in section Problem 4 configuring it was no problem at all.

  • Start by installing a plugin manager like vim-plug:
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
Install vim-plug
  • Configure neovim like you normally would
mkdir -p ~/.config/nvim
nvim ~/.config/nvim/init.vim
Configure neovim
  • If you want to setup neovim for web development with highlighting, suggestions, etc. there is a great tutorial over here.

Problem 6 – Overall performance

It's bad but it is definitely not unusable if you stick to the basics:

  • Don't open too many applications
  • Don't open too many tabs in your browser
  • Keep your resolution low (< 1080 px)
  • Use native, performant applications (electron, I am talking to you)
  • Use the terminal if you can (neovim, ...)
  • Use web-apps for software you can't replace (e.g. SharePoint, ...)

If you wan't to do more than working with static content or must use complex software packages your Raspberry Pi will be too slow. Video calls (Skype, Zoom, ...) will not work. If you need more power, try using a bigger model like the new Raspberry Pi 4 with 8 GB RAM*.

Conclusion

Since I am comfortable messing around with configs and fixing things, getting it to work was not that hard for me. Nevertheless, I think it's far from "it just works" and I can't recommend using a Raspberry Pi as your daily driver:

  • It's way too slow
  • You can't use the software you are used to
  • You must close parts of your open work while working cause your running out of RAM
  • You can't operate your Pi at more than 1080p
  • You can't do video calls with your team

FYI: I wrote this whole article on my Raspberry Pi.

Raspberry Pi is a trademark of the Raspberry Pi Foundation