diff --git a/docs/workspaces.md b/docs/workspaces.md index 06be5e14c7c77..8aa18dc129bc6 100644 --- a/docs/workspaces.md +++ b/docs/workspaces.md @@ -65,6 +65,11 @@ resources](./templates.md#persistent-and-ephemeral-resources). When a workspace is deleted, all of the workspace's resources are deleted. +## Dotfiles + +Users can install configuration from a personal [dotfiles repository](https://dotfiles.github.io) with the `coder dotfiles ` +command in their workspace. Templates can also prompt users for their dotfiles repo [(example)](../examples/templates/docker-with-dotfiles/README.md#how-it-works). + ## Updating workspaces Use the following command to update a workspace to the latest template version. diff --git a/examples/templates/docker-with-dotfiles/README.md b/examples/templates/docker-with-dotfiles/README.md new file mode 100644 index 0000000000000..540137295cf34 --- /dev/null +++ b/examples/templates/docker-with-dotfiles/README.md @@ -0,0 +1,38 @@ +--- +name: Develop in Docker with a dotfiles URL +description: Run workspaces on a Docker host using registry images +tags: [local, docker] +--- + +# docker-with-dotfiles + +This is an example for deploying workspaces with a prompt for the users' dotfiles repo URI. + +## Getting started + +Run `coder templates init` and select this template. Follow the instructions that appear. + +## How it works + +During workspace creation, Coder prompts you to specify a dotfiles URL via a Terraform variable. Once the workspace starts, the Coder agent runs `coder dotfiles` via the startup script: + +```hcl +variable "dotfiles_uri" { + description = <<-EOF + Dotfiles repo URI (optional) + + see https://dotfiles.github.io + EOF + # The codercom/enterprise-* images are only built for amd64 + default = "" +} + +resource "coder_agent" "dev" { + ... + startup_script = var.dotfiles_uri != "" ? "/tmp/tmp.coder*/coder dotfiles -y ${var.dotfiles_uri}" : null +} +``` + +# Managing images and workspaces + +Refer to the documentation in the [Docker template](../docker/README.md). diff --git a/examples/templates/docker-with-dotfiles/main.tf b/examples/templates/docker-with-dotfiles/main.tf new file mode 100644 index 0000000000000..982751323fd3e --- /dev/null +++ b/examples/templates/docker-with-dotfiles/main.tf @@ -0,0 +1,68 @@ +# Note: this example demonstrates the use of +# dotfiles with Coder templates. + +# The Docker aspect of the template only works +# with MacOS/Linux amd64 systems. See the full +# Docker example for details + +terraform { + required_providers { + coder = { + source = "coder/coder" + version = "0.4.1" + } + docker = { + source = "kreuzwerker/docker" + version = "~> 2.16.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} + +provider "coder" { +} + +data "coder_workspace" "me" { +} + +variable "dotfiles_uri" { + description = <<-EOF + Dotfiles repo URI (optional) + + see https://dotfiles.github.io + EOF + default = "" +} + +resource "coder_agent" "dev" { + arch = "amd64" + os = "linux" + startup_script = var.dotfiles_uri != "" ? "coder dotfiles -y ${var.dotfiles_uri}" : null +} + +resource "docker_volume" "home_volume" { + name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root" +} + +resource "docker_container" "workspace" { + count = data.coder_workspace.me.start_count + image = "codercom/enterprise-base:ubuntu" + # Uses lower() to avoid Docker restriction on container names. + name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}" + dns = ["1.1.1.1"] + # Refer to Docker host when Coder is on localhost + command = ["sh", "-c", replace(coder_agent.dev.init_script, "127.0.0.1", "host.docker.internal")] + env = ["CODER_AGENT_TOKEN=${coder_agent.dev.token}"] + host { + host = "host.docker.internal" + ip = "host-gateway" + } + volumes { + container_path = "/home/coder/" + volume_name = docker_volume.home_volume.name + read_only = false + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy