The One and the Many

Using a Chromebook for development

Over a year ago I began using a Chromebook as my laptop at work. My main reasons for switching were because I viewed it as a more secure platform as well as I liked the idea of the simplicity of it. I've been happy with how it has worked out and I enjoy using it.

In the past I would have been against the idea of using a Chromebook. It's a good example of how my views have changed over time. I would have viewed it as giving up privacy to Google, and I would have been unhappy with the lack of control and customizability. Today these things don't bother me. The latter I view as a benefit.

I like it so much that my next personal PC will likely be a Chromebook. (Currently my main personal computer is a NUC running Debian, although I have a basic personal Chromebook as well).

The Chromebook I use for work is an Acer Chromebook Spin 13. It's beefy as far as Chromebooks go, and has a great 3:2 screen.

The main reason I wanted to write this post was to describe my development workflow and environment. How does one develop on such a system?

ChromeOS has a Linux container you can enable. This runs a VM which in turn runs a container with Debian Linux (by default). You access this container using an app called Terminal, which as you might imagine is a terminal! There's details about how this all works here.

This means you have a Linux environment where you can install familiar tools and even run X apps.

I have this container set it up to allow ssh connections locally. I use the Secure Shell App to connect to it. This app supports having your SSH key on a YubiKey through the Smart Card Connector app.

I like using Secure Shell App rather than Terminal as it means one terminal experience for anything I ssh to, and it means I can use my YubiKey.

Inside my ssh session to the container I run tmux.

For many things I work in the container directly. Otherwise I run a Compute VM on Google Cloud Platform, and work in that VM. I ssh to the VM from inside the container as I found it worked well to mix and match tmux windows between local and remote sessions. I can also manage most of my ssh configs using ~/.ssh/config.

I use vim as my editor. I run it either locally in the container if I'm working in the container or remotely on the Compute VM if I'm working there.

For my note taking I am used to using vim, so I continue to do that. I share a Google Drive directory to the container so vim can access my notes on Drive and they get synced that way.

That's all there is to it. My Chromebook is basically a browser and an ssh terminal. It's not too different from using a Linux laptop in that regard, except there's less to manage.

The benefits I already mentioned: Simplicity and security. On the simplicity side, it's because there's very little to customize. From a security perspective, ChromeOS wins because the platform is locked down, as well as benefiting from Google's investment in security for Chrome.

There are of course drawbacks:

All in all I've been pleasantly surprised with the experience. I went into it viewing it as a trial and not expecting to be able to switch, but it's worked out well.