1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
- [Distrobox](../README.md)
- [Integrate VSCode and Distrobox](#integrate-vscode-and-distrobox)
- [From distrobox](#from-distrobox)
- [From flatpak](#from-flatpak)
- [First step, install it](#first-step-install-it)
- [Second step, extensions](#second-step-extensions)
- [Third step, podman wrapper](#third-step-podman-wrapper)
- [Final Result](#final-result)
---
# Integrate VSCode and Distrobox
VScode doesn't need presentations, and it's a powerful tool for development.
You may want to use it, but how to handle the dualism between host and container?
In this experiment we will use [VSCodium](https://vscodium.com/) as an opensource
alternative to VSCode.
Here are a couple of solutions.
## From distrobox
Well, you could just install VSCode in your Distrobox of choice, and export it!
For example using an Arch Linux container:
```shell
~$ distrobox create --image archlinux:latest --name arch-distrobox
~$ distrobox enter --name arch-distrobox
user@arch-distrobox:~$
```
Download the deb file
[HERE](https://github.com/VSCodium/vscodium/releases), or in Arch case just install
```shell
user@arch-distrobox:~$ sudo pacman -S code
```
Now that we have installed it, we can export it:
```shell
user@ubuntu-distrobox:~$ distrobox-export --app code
```
And that's really it, you'll have VSCode in your app list, and it will run from
the Distrobox itself, so it will have access to all the software and tools inside
it without problems.


## From flatpak
Alternatively you may want to install VSCode on your host. We will explore how
to integrate VSCode installed via **Flatpak** with Distrobox.
For this one you'll need to use VSCode from Microsoft, and not VSCodium, in order
to have access to the remote containers extension.
### First step install it
```shell
~$ flatpak install --user app/com.visualstudio.code
```
### Second step, extensions
Now we want to install VSCode [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)

### Third step podman wrapper
Being in a Flatpak, we will need access to host's `podman` to be
able to use the containers. Place this in your `~/.local/bin/podman-host`
In case of access to host's `docker` to be
able to use the containers, use `~/.local/bin/docker-host`
For podman:
```shell
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/podman-host -o ~/.local/bin/podman-host
chmod +x ~/.local/bin/podman-host
```
For docker:
```shell
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/docker-host -o ~/.local/bin/docker-host
chmod +x ~/.local/bin/docker-host
```
Open VSCode settings (Ctrl+,) and head to `Remote>Containers>Docker Path` and
set it to the path of `/home/<your-user>/.local/bin/podman-host` (or docker-host in case of docker), like in the example

This will give a way to execute host's container manager from within the
flatpak app.
**This works for Distrobox both inside and outside a flatpak**
This will act only for containers created with Distrobox, you can still use regular devcontainers
without transparently if needed.
## Final Result
After that, we're good to go! Open VSCode and Attach to Remote Container:

And let's choose our Distrobox

And we're good to go! We have our VSCode remote session inside our Distrobox container!

# Open VSCode directly attached to our Distrobox
You may want to instead have a more direct way to launch your VSCode when you're already in your project directory,
in this case you can use `vscode-distrobox` script:
```shell
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/vscode-distrobox -o ~/.local/bin/vscode-distrobox
chmod +x ~/.local/bin/vscode-distrobox
```
This will make it easy to launch VSCode attached to target distrobox, on a target path:
`vscode-distrobox my-distrobox /path/to/project`
|