build core, basic and go variants and add template
This commit is contained in:
57
README.md
57
README.md
@@ -1,3 +1,56 @@
|
||||
# code
|
||||
# Containerized `code` IDE
|
||||
`code` is a containerized IDE, that runs in the terminal and is based on
|
||||
[tmux][tmux] and [neovim][neovim]. That means you can run it on a machine
|
||||
without X server or even within an SSH terminal session.
|
||||
|
||||
Containerized IDE, that runs in the terminal.
|
||||
The [podman][podman] containerization makes the development environment not
|
||||
only more secure but also reproducible. If something in the editor were to
|
||||
break, restarting it would create a fresh container. Since only the current
|
||||
working directory is mounted into the container, the editor plugins and code
|
||||
dependencies can't directly access any other files on your system. In
|
||||
combination with code reviews on your code hosting platform of trust, this
|
||||
might even be a reasonable trade-off between security and productivity.
|
||||
|
||||
[tmux]: https://tmux.github.io/
|
||||
[neovim]: https://neovim.io/
|
||||
[podman]: https://podman.io/
|
||||
|
||||
## Variants
|
||||
The beauty of `code` is, that you can easily specify a separate development
|
||||
environment for each of your coding workflows by writing a Containerfile and
|
||||
building it. When starting `code`, you simply specify the variant you'd like to
|
||||
use on the command line.
|
||||
|
||||
The default and most basic variant is *core*. It contains the shell
|
||||
configuration and a basic neovim setup, that doesn't use any third party
|
||||
plugins and therefore is the most secure choice. The *basic* variant contains
|
||||
[git][git] and a bunch of plugins and configurations for integration with tmux,
|
||||
file tree navigation, completion, quick editing and visuals. It doesn't contain
|
||||
any language runtimes, libraries or LSP servers though. Any language or
|
||||
workflow-specific variants can be built on top of *basic*.
|
||||
|
||||
[git]: https://git-scm.com/
|
||||
|
||||
## Using `code`
|
||||
After cloning the repository and making sure, that podman is installed on your
|
||||
machine, you can build all images by executing `./build.sh` or only selected
|
||||
variants by passing them as command line arguments. The *core* and *basic*
|
||||
variants need to be built before any variants depending on them.
|
||||
|
||||
Now you can link the `code` script to some directory in your `$PATH` (e. g.
|
||||
`ln -s "$(pwd)/code" ~/.local/bin/code`) and edit your first file by executing
|
||||
`code my-file.txt`. Some flags at the beginning of the command are interpreted
|
||||
by `code`, everything else gets passed to neovim. To learn more about `code`s
|
||||
command line flags, execute `code --help`.
|
||||
|
||||
## Building new variants
|
||||
Simply copy the template directory, add you [alpine packages][alpine] and
|
||||
further instructions to the Containerfile, add additional neovim configuration
|
||||
files etc. and build your variant with `./build.sh my-variant`. You can now run
|
||||
it by executing `code --my-variant`.
|
||||
|
||||
Please consider the files in the template directory for further instructions
|
||||
on installing packages, configuring neovim, installing and configuring plugins
|
||||
etc.
|
||||
|
||||
[alpine]: https://pkgs.alpinelinux.org/packages
|
||||
|
||||
Reference in New Issue
Block a user