Hey HN,
As most of you (I think?), I cannot learn something without having a project, on the side, to implement what I’ve just learned.
Recode is the project that I've used to learn Go. It lets you create a development environment in your cloud provider account easily.
You can think of it as a desktop version of Gitpod / Coder / GitHub Codespaces less polished and with less features but 100% free, 100% open-source and 100% community-driven.
At the time of writing, it only works with Visual Studio Code and AWS.
In order to let you configure your development environments easily, I’ve chosen to use Docker with some Dockerfiles:
- One for your user configuration.
- One for your project.
The user configuration corresponds to the tools / settings that you use in all your projects like your timezone / locale, your preferred shell or your dotfiles.
The project configuration corresponds to the tools / settings that you use in a specific project like Go >= 1.18 and Node.js >= 14.
As you may have guessed, the project configuration inherits from the user one.
> Why Docker and not something like NixOS, for example?
I know that containers are not meant to be used as a VM like that, but, at the time of writing, Docker is still the most widely used tool among developers to configure their environment (even if it may certainly change in the future :-)).
> Given that my dev env will run in a container does it mean that it will be limited?
Mostly not.
Given the scope of this project (a private instance running in your own cloud provider account), Docker is mostly used for configuration purpose and not to "isolate" the VM from your environment.
As a result, your development environment container runs in privileged mode in the same network than the host.
----
I post this here, because, you know, even learning project could be useful to someone.
Still learning Go by the way, so I'm open to any suggestions to improve.