Dotfiles
Coder offers the coder dotfiles <repo>
command which simplifies workspace
personalization. Our behavior is consistent with Codespaces, so
their documentation
explains how it loads your repo.
You can read more on dotfiles best practices here.
Module
Coder's dotfiles module abstracts Coder's dotfiles command into a module. This will prompt the user for their dotfiles repository URL on workspace creation using a coder_parameter.
module "dotfiles" {
source = "registry.coder.com/modules/dotfiles/coder"
version = "~>1.0.15"
agent_id = coder_agent.example.id
}
Templates
Templates can prompt users for their dotfiles repo using the following pattern:
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" "main" {
...
startup_script = var.dotfiles_uri != "" ? "coder dotfiles -y ${var.dotfiles_uri}" : null
}
Persistent Home
Sometimes you want to support personalization without requiring dotfiles.
In such cases:
- Mount a persistent volume to the
/home
directory - Set the
startup_script
to call a~/personalize
script that the user can edit
resource "coder_agent" "main" {
...
startup_script = "/home/coder/personalize"
}
The user can even fill personalize
with coder dotfiles <repo>
, but those
looking for a simpler approach can inline commands like so:
#!/bin/bash
sudo apt update
# Install some of my favorite tools every time my workspace boots
sudo apt install -y neovim fish cargo
Setup script support
User can setup their dotfiles by creating one of the following script files in their dotfiles repo:
install.sh
install
bootstrap.sh
bootstrap
script/bootstrap
setup.sh
setup
script/setup
If any of the above files are found (in the specified order), Coder will try to execute the first match. After the first match is found, other files will be ignored.
The setup script must be executable, otherwise the dotfiles setup will fail. If you encounter this issue, you can fix it by making the script executable using the following commands:
cd <path_to_dotfiles_repo>
chmod +x <script_name>
git commit -m "Make <script_name> executable" <script_name>
git push