Skip to main content

Use Devbox as your Primary Package Manager

In addition to managing isolated development environments, you can use Devbox as a general package manager. Devbox Global allows you to add packages to a global devbox.json. This is useful for installing a standard set of tools you want to use across multiple Devbox Projects.

For example — if you use ripgrep as your preferred search tool, you can add it to your global Devbox profile with devbox global add ripgrep. Now whenever you start a Devbox shell, you will have ripgrep available, even if it's not in the project's devbox.json.

Installing ripgrep using `devbox global add ripgrep

Installing Packages with Devbox Global

You can also use devbox global to replace package managers like brew and apt by adding the global profile to your path. Because Devbox uses Nix to install packages, you can sync your global config to install the same packages on any machine.

Devbox saves your global config in a devbox.json file in your home directory. This file can be shared with other users or checked into source control to synchronize it across machines.

Adding and Managing Global Packages

You can install a package using devbox global add [<package>], where the package names should be a list of Nix Packages you want to install.

For example, if we wanted to install ripgrep, vim, and git to our global profile, we could run:

devbox global add ripgrep vim git

# Output:
ripgrep is now installed
vim is now installed
git is now installed

Once installed, the packages will be available whenever you start a Devbox Shell, even if it's not included in the project's devbox.json.

To view a full list of global packages, you can run devbox global list:

devbox global list

# Output:
* ripgrep
* vim
* git

To remove a global package, use:

devbox global rm ripgrep

# Output:
removing 'github:NixOS/nixpkgs/ripgrep'

Using Global Packages in your Host Shell

If you want to make your global packages available in your host shell, you can add them to your shell PATH. Running devbox global shellenv will print the command necessary to source the packages.

Add Global Packages to your Current Host Shell

To temporarily add the global packages to your current shell, run:

. <(devbox global shellenv --init-hook)

You can also add a hook to your shell's config to make them available whenever you launch your shell:

Bash

Add the following command to your ~/.bashrc file:

eval "$(devbox global shellenv --init-hook)"

Make sure to add this hook before any other hooks that use your global packages.

Zsh

Add the following command to your ~/.zshrc file:

eval "$(devbox global shellenv --init-hook)"

Fish

Add the following command to your ~/.config/fish/config.fish file:

devbox global shellenv --init-hook | source

Sharing Your Global Config with Git

You can use Git to synchronize your devbox global config across multiple machines using devbox global push <remote> and devbox global pull <remote>.

Your global devbox.json and any other files in the Git remote will be stored in $XDG_DATA_HOME/devbox/global/default. If $XDG_DATA_HOME is not set, it will default to ~/.local/share/devbox/global/default. You can view the current global directory by running devbox global path.

Next Steps

Learn more about Devbox

  • Getting Started: Learn how to install Devbox and create your first Devbox Shell.
  • Devbox Scripts: Automate setup steps and configuration for your shell using Devbox Scripts.
  • Configuration Guide: Learn how to configure your shell and dev environment with devbox.json.
  • Browse Examples: You can see how to create a development environment for your favorite tools or languages by browsing the Devbox Examples repo.
  • Using Flakes with Devbox: Learn how to install packages from Nix Flakes.

Use Devbox with your IDE

  • Direnv Integration: Devbox can integrate with direnv to automatically activate your shell and packages when you navigate to your project.
  • Devbox for Visual Studio Code: Install our VS Code extension to speed up common Devbox workflows or to use Devbox in a devcontainer.

Get Involved