@ -1,3 +1,4 @@
# TODO(tom): Use system nixpkgs exclusively once 1.18 is in a stable release.
# This is a shell.nix file used to describe the environment that tailscale needs
# for development. This includes a lot of the basic tools that you need in order
# to get started. We hope this file will be useful for users of Nix on macOS or
@ -9,16 +10,42 @@
# Also look into direnv: https://direnv.net/, this can make it so that you can
# automatically get your environment set up when you change folders into the
# project.
{ pkgs ? import <nixpkgs> { } }:
pkgs . mkShell {
# This specifies the tools that are needed for people to get started with
# development. These tools include:
# - The Go compiler toolchain (and all additional tooling with it)
# - gotools for goimports, a robust formatting tool for Go source code
# - gopls, the language server for Go to increase editor integration
# - git, the version control program (used in some scripts)
buildInputs = with pkgs ; [
go gotools gopls git
] ;
}
{
pkgs ? import <nixpkgs> { } ,
nixosUnstable ? import ( fetchTarball https://github.com/NixOS/nixpkgs/archive/refs/heads/nixpkgs-unstable.tar.gz ) { } ,
tailscale-go-rev ? " 5 c e 3 e c 4 d 8 9 c 7 2 f 2 a 2 b 6 f 6 f 5 0 8 9 c 9 5 0 d 7 a 6 a 3 3 5 3 0 " ,
tailscale-go-sha ? " s h a 2 5 6 - K M O f z m i k h 3 0 v E k V i E k W U s O H c z U i f S T i R L 6 r h K Q p H C R I = " ,
} :
let
tailscale-go = pkgs . lib . overrideDerivation nixosUnstable . go_1_18 ( attrs : rec {
name = " t a i l s c a l e - g o - ${ version } " ;
version = tailscale-go-rev ;
src = pkgs . fetchFromGitHub {
owner = " t a i l s c a l e " ;
repo = " g o " ;
rev = tailscale-go-rev ;
sha256 = tailscale-go-sha ;
} ;
nativeBuildInputs = attrs . nativeBuildInputs ++ [ pkgs . git ] ;
# Remove dependency on xcbuild as that causes iOS/macOS builds to fail.
propagatedBuildInputs = [ ] ;
checkPhase = " " ;
# Our forked tailscale reads this env var to embed the git hash
# into the Go build version.
TAILSCALE_TOOLCHAIN_REV = tailscale-go-rev ;
} ) ;
in
pkgs . mkShell {
# This specifies the tools that are needed for people to get started with
# development. These tools include:
# - The Go compiler toolchain (and all additional tooling with it)
# - gotools for goimports, a robust formatting tool for Go source code
# - gopls, the language server for Go to increase editor integration
# - git, the version control program (used in some scripts)
buildInputs = [
pkgs . git
nixosUnstable . gotools nixosUnstable . gopls
tailscale-go
] ;
}