-
Notifications
You must be signed in to change notification settings - Fork 568
Personalizing codespaces with dotfiles
This page provides a brief overview of dotfiles, why they are useful to sync across machines, and how they can be used to personalize cloud-based development environments such as GitHub Codespaces. It also highlights chezmoi as a commonly used tool for managing dotfiles at scale.
Dotfiles are configuration files and directories that customize the behavior of your development environment. They are typically named with a leading . (dot), which makes them hidden by default on Unix-like systems. Since our codespace images run Linux, dotfiles offer a way to personalize and customize your codespace environment.
Common examples include:
- Shell configuration:
.bashrc,.zshrc - Git configuration:
.gitconfig - Editor and tool configuration:
.vimrc,.config/*
Dotfiles define many aspects of how tools behave, including aliases, environment variables, keybindings, defaults, and theming. While they are often invisible during day-to-day work, they have a significant impact on productivity and developer experience.
Developers often work across multiple environments: work laptops, personal machines, CI agents, remote VMs, or cloud-hosted dev environments. Syncing dotfiles across these environments provides several benefits:
-
Consistency
Your shell, editor, and tooling behave the same everywhere, reducing friction when switching contexts. -
Fast setup on new machines
A new environment can be made productive quickly by applying an existing dotfiles configuration. -
Version control for preferences
Dotfiles stored in a Git repository can be reviewed, evolved over time, and rolled back if needed. -
Reduced configuration drift
Centralizing configuration helps avoid subtle differences that accumulate when machines are set up manually.
For many developers, a dotfiles repository effectively becomes a lightweight, personal “environment specification.”
GitHub Codespaces supports automatically applying a user’s dotfiles repository when a codespace is created.
This enables:
- Personal shell and prompt configuration in codespaces
- Preferred editor, terminal, and tool defaults
- A development environment that feels familiar, even though it is ephemeral
Using dotfiles with Codespaces allows developers to separate personal preferences from project repositories, keeping repos clean while still enjoying a customized environment.
At small scale, dotfiles can be managed with plain Git and manual symlinks. As configurations grow, however, additional concerns often emerge:
- Differences between operating systems or machines
- Conditional configuration (for work vs. personal setups)
- Handling private or sensitive configuration
- Previewing changes before applying them
- Idempotent, repeatable application of configuration
To address these needs, many developers adopt a dedicated dotfiles management tool.
While dotfiles are a powerful way to personalize environments, not everything belongs in them. In general, dotfiles should focus on developer preferences, not project state or secrets.
Avoid putting the following in dotfiles:
-
Project-specific configuration
Settings that are specific to a single repository or project (build outputs, local paths, feature flags) should live with the project, not in personal dotfiles. -
Secrets in plaintext
API keys, tokens, passwords, and certificates should not be committed directly to dotfiles repositories. If secrets are required, use a tool that supports encryption or external secret managers. -
Large binaries or generated files
Dotfiles should remain small, readable, and easy to review. Generated artifacts and large binaries belong elsewhere. -
Machine-unique or ephemeral data
Cache directories, runtime state, PID files, logs, and temporary files should not be tracked. -
Team or organization policy
Organization-wide standards (lint rules, formatting, CI config) should be enforced at the repo or tooling level, not through individual dotfiles.
A useful rule of thumb:
If changing this setting should affect every project you work on, it may belong in dotfiles. If it only applies to one repo, it probably does not.
chezmoi is a widely used dotfiles manager designed to manage configuration across multiple machines and operating systems.
Some characteristics that make it a common choice include:
- Managing dotfiles as real files (not just symlinks)
- Support for per-machine and per-OS differences
- Optional encryption and handling of private files
- Ability to preview differences before applying changes
- Cross-platform support, including Windows, macOS, and Linux
- Distribution as a single, self-contained binary
chezmoi is one option among many, but it is often recommended as a strong default when dotfiles management needs move beyond simple symlinks.
A detailed comparison with other popular dotfiles tools is available here:
chezmoi comparison table
- Dotfiles define how your tools and environment behave.
- Syncing dotfiles keeps your development experience consistent across machines.
- Codespaces can consume dotfiles to personalize cloud-hosted dev environments.
- chezmoi is a commonly used tool for managing dotfiles in more complex or multi-machine setups.
This wiki is focused on contributing to the Fluid Framework codebase.
For information on using Fluid Framework or building applications on it, please refer to fluidframework.com.
- Submitting Bugs and Feature Requests
-
Contributing to the Repo
- Repo Basics
- Common Workflows and Patterns
- Managing dependencies
- Client Code
- Server Code
- PR Guidelines
- CI Pipelines
- Breaking vs Non-Breaking Changes
- Branches, Versions, and Releases
- Compatibility & Versioning
- Testing
- Debugging
- npm package scopes
- Maintaining API support levels
- Developer Tooling Maintenance
- API Deprecation
- Working with the Website (fluidframework.com)
- Coding Guidelines
- Documentation Guidelines
- CLA