Setting up Linux on a Chromebook with Crostini
ChromeOS supports a built in Linux - running inside a container running insde a VM. Turn it on by going to settings and pressing the on button for Linux (beta). This gives us a bare bones Linux install running Debian 11. So here goes all the things I did to customize it.
Most of these tips are from the reddit crostini wiki, I’ve put all the ones I’m using in one page for a handy reference.
By default, the linux user has no password. Some installations require you to enter a password so xix this by switching to root sudo su
and then running passwd username
.
Install all the apps
flatpak
the debian repos often have older packages, so for really new versions use flatpak.
Install flatpak: sudo apt install flatpak
Add the flatpak repo:
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Install apps by going to the app page on flathub and copying the install line at the bottom - for example to install Uberwriter its:
sudo flatpak install flathub de.wolfvollprecht.UberWriter
Note: you need sudo to install and update flatpak apps in crostini.
vs code
Anaconda can automatically install VS Code, but to install it directly:
curl -L https://go.microsoft.com/fwlink/?LinkID=760868 > vscode.deb
sudo apt install ./vscode.deb
Useful plugins:
markdown app
Currently I’m using Caret - a chromeos text editor app which runs lightening fast.
vs code can handle markdown nicely, but I find it too slow on Crostini. I prefer Typora.io or Caret.io for markdown and vs code is for coding. BUT all these apps are based on electron, and currently run slow on Crostini, and will continue being slow until Crostini gets GPU accleration.
Install Caret by downloading the latest beta release .deb and:
sudo apt install ./caret-beta.deb
Install Typora - haven’t tested this out, especially adding repo. Apparently you have to sudo apt install software-properties-common
first before adding a repo.
# add Typora's repository
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt update
# install typora
sudo apt install typora
install anaconda for a better python
Note: install miniconda instead to save space if needed.
go to the Anaconda linux download page and copy the url, then download it:
curl -O https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
- check for update url here.
Install by bash Anaconda3-2020.11-Linux-x86_64.sh
- change filename to whatever the downloaded file name is.
jupyter lab
Works out of the box with Anaconda. If using miniconda, install by
conda install -c conda-forge jupyterlab
Other useful stuff for Jupyter:
To install extensions, first install nodejs:
Step 1: install nvm, a script to install nodejs
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
step 2: install nodejs using volta:
# install Volta
curl https://get.volta.sh | bash
# install Node
volta install node
# start using Node
node
Some seful jupyterlab extensions:
See https://github.com/mauhai/awesome-jupyterlab
- show a toc from markdown headings:
jupyter labextension install @jupyterlab/toc
todo: try out nteract - a react based desktop front end for jupyter.
install a R kernel
Sometimes you need R. So here goes:
conda create -n R r-essentials r-base
Presto! now R should show up as a kernel in jupyter.
Intall r packages inside the r environment by using the conda r channel - note that many packages seems to be prefaced with r-
:
conda install -c r r-plotly
make the terminal nicer to use
this is really important, cause if the terminal doesn’t look like something out of a movie, are you really doing something?
I’m using Tilix, install by
sudo apt install tilix
though as of ChromeOS 77 the built in terminal is pretty good, so no need for this.
fix window shortcuts
First up, the native terminal gobbles up some of my fav chromeos shortcuts, namely:
- Maximize
Alt + =
- Minimize
Alt + -
- Dock window left/right
Alt + [
,Alt + ]
- Close window
Ctrl+Shift+W
- this is actuallyCtrl-W
normally, but terminal might need that hence shift.
fix this by pressing ctrl-shift-p
inside terminal, then scroll down to keyboard preferences and enter
{
"Alt-187": "PASS",
"Alt-189": "PASS",
"Alt-219": "PASS",
"Alt-221": "PASS",
"Ctrl-Shift-W": "PASS"
}
This has to be done only once, since ChromeOS remembers the terminal settings across devices. So handy after a powerwash.
multiplex all the things
If using Tilix, no need to do this, but for the native terminal, install tmux:
sudo apt install tmux
the only thing I really do with tmux is to split the terminal horizontally, then splitting one horizontal terminal vertically, for a total of three windows. Now there is a lot more about sessions and whats not, but the bare basics are:
start tmux by typing tmux
, then press ctrl+b
to enter command mode. "
splits the window horizontally and %
splits it vertically. To move around, press ctrl-b arrow-key
For more customizatoin, make a .tmux.conf
in the home directory and add:
# Enable mouse mode (tmux 2.1 and above)
set -g mouse on
jazz up the shell
rumour has it that crostini can have a heart attack if you change the shell, so stick with bash. Consider oh-my-bash or bash-it for hacker level coding.
also install powerline-fonts and select a powerline font for the terminal.
sudo apt install fonts-powerline
Useful shell tools:
tldr shows a short and useful help page for commands, e.g type tldr curl
to get a synopsis of how to use curl.
- Preferred install:
npm install -g tldr
- If node not installed:
pip install tldr
bat a replacement for cat, displays files with syntax highlighting in the terminal. Right now as rendering problems in crostini, but hopefully will improve. Install by downloading the .deb and sudo apt install ./bat_file.deb
.
setup vim proper like
install plugin manager for vim - I went with vim-plug:
edit ~/.vimrc
so it has this stuff:
" install vim-plug if not installed
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
" plugin directory, don't use standard Vim names like 'plugin'
call plug#begin('~/.vim/plugged')
" plugins go here
" ---------------
" highlights code problems: https://github.com/w0rp/ale
Plug 'w0rp/ale'
" adds a status bar: https://github.com/itchyny/lightline.vim
Plug 'itchyny/lightline.vim'
" distraction free writing: https://github.com/junegunn/goyo.vim
Plug 'junegunn/goyo.vim'
" for python auto completion: https://github.com/davidhalter/jedi-vim
Plug 'davidhalter/jedi-vim'
" Initialize plugin system
call plug#end()
" don't break mid word
set linebreak
run :PlugInstall
in vim to install plugs (if needed).
Download all my git repos
This command will grab json output of the first (or last?) 200 repos in my github and git clone them all one by one into the directory this command was run.
curl -s https://api.github.com/users/khalido/repos?per_page=200 | grep \"clone_url\" | awk '{print $2}' | sed -e 's/"//g' -e 's/,//g' | xargs -n1 git clone