You're missing that one program that isn't available in your Linux distro? With Distrobox, the 'Linux Subsystem for Linux,' you can install it anyways. This article explains how to do that with the example of installing LunarVim on Red Hat.
LunarVim's dependencies aren't part of Red Hat's official repositories. But with Docker you can run any program in containers, similar to a virtual machine. These containers can be based on any distribution, regardless of your host's distro. So you can use Docker to create for example an Arch container and install LunarVim in it. To allow LunarVim to access your host's files, you have to mount your host's root directory. To make these mounts, starting the container and launching its programs from your host easier, Distrobox has been created.
Distrobox requires Docker or Podman (a fork of Docker that runs containers rootlessly). Both Distrobox and Podman are part of the Extra Packages for Enterprise Linux (EPEL), an official repository you can add to Red Hat. Follow the instructions on the official page linked above to install the repo. Now you can install what you need:
yum install podman-dockeryum install distrobox
First you have to create an Arch container using Distrobox. Because LunarVim installs many files in the home directory, you should create such a directory specifically for your Arch container. Otherwise your host's home directory would get bloated.
mkdir -p ~/.distrobox/arch`distrobox-create --name arch --image archlinux --home ~/.distrobox/arch
Now you can attach your terminal to the container's stdin and stdout:
distrobox enter arch
Now you're inside your container's shell.
In this article, all commands that start with a $
are to be run in your container, not your host.
If you like, you can install all your dotfiles at this point.
# requires https://gitub.com/christopher-besch/configs in your host's ~/.custom_configs$ /home/$(whoami)/.custom_configs/install.sh server && source ~/.bashrc
Let's use pacman
, the Arch package manager, to install what Red Hat's yum
can't provide:
# if you're asked what repos to use, the defaults are fine$ sudo pacman -S git make python-pip cargo neovim vim xclip
LunarVim requires node
;
this is best done with nvm
.
You should check the current version of the installation script in the official nvm install docs and change the curl
command accordingly:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash && source ~/.bashrc$ nvm install node
Once that is done, you can finally install LunarVim.
# answer yes to all questions$ bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)
Now a little bit of work has to be done on your containers ~/.bashrc
(located at ~/.distrobox/arch/.bashrc
on your host):
export PATH=/home/$(whoami)/.distrobox/arch/.local/bin:$PATH
and[[ $- != *i* ]] && return
.
Otherwise nvm
's installation paths don't get loaded when starting LunarVim from your host.In order for those paths to get loaded, we have to source
the just edited ~/.bashrc
every time LunarVim starts.
This can be done with a little wrapper script you should put into ~/lvim
in your container.
#!/bin/bashsource ~/.bashrclvim "$@"
Mark this file executable
$ chmod +x ~/lvim
and export it to be usable from your host using Distrobox (still from within your container).
$ distrobox-export --bin "/home/$(whoami)/.distrobox/arch/lvim" --export-path "/home/$(whoami)/.local/bin"
This creates the file ~/.local/bin/lvim
on your host.
When you run it from your host, Distrobox starts the container (if not already done so) and launches LunarVim with the PATH
variable and all mounts properly configured.
You need to export PATH=/home/$HOME/.local/bin:$PATH
in your host's ~/.bashrc
but then you can run lvim
from your host and use LunarVim just as if it were natively installed.
Since all the language servers used by LunarVim are installed in the container, all programming languages you use need to be installed in both your host and your container.