// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/rust
// https://containers.dev/implementors/json_reference/#variables-in-devcontainerjson
{
	"name": "Rust",
	// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
	// "image": "mcr.microsoft.com/devcontainers/rust:0-1-bullseye",
	"build": {
		// Path is relataive to the devcontainer.json file.
		"dockerfile": "Dockerfile"
	},
	// https://github.com/microsoft/vscode-remote-release/issues/2485#issuecomment-1156342780
	"runArgs": [
		"--name",
		"devcontainer-${containerWorkspaceFolderBasename}"
	],
	"initializeCommand": "docker rm -f devcontainer-${containerWorkspaceFolderBasename} || true",
	// Use 'mounts' to make the cargo cache persistent in a Docker Volume.
	"mounts": [
		{
			// "source": "devcontainer-cargo-cache-${devcontainerId}",
			"source": "devcontainer-cargo-cache-${containerWorkspaceFolderBasename}",
			"target": "/usr/local/cargo",
			"type": "volume"
		},
		{
			"source": "${localWorkspaceFolderBasename}-target",
			"target": "${containerWorkspaceFolder}/target",
			"type": "volume"
		},
		{
			"source": "nix-store-${containerWorkspaceFolderBasename}",
			"target": "/nix/store",
			"type": "volume"
		}
	],
	// Features to add to the dev container. More info: https://containers.dev/features.
	"features": {
		"ghcr.io/devcontainers/features/git:1": {},
		"ghcr.io/devcontainers/features/docker-in-docker": {},
		"ghcr.io/devcontainers/features/nix:1": {
			"packages": [
				"btop",
				"lazygit",
				"cargo-nextest",
				"nixpkgs-fmt"
			],
			"extraNixConfig": "experimental-features = nix-command flakes"
		}
	},
	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],
	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": {
	// },
	"postAttachCommand": {
		"AddGitSafeDir": "git config --global --add safe.directory /workspaces/${containerWorkspaceFolderBasename}",
		"update": "rustup target add x86_64-unknown-linux-musl && rustup update && cargo update",
		"clippy": "cargo clippy --fix --allow-dirty",
		"nix flake update": "nix flake update"
	},
	// Configure tool-specific properties.
	// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
	"remoteUser": "root",
	"customizations": {
		"vscode": {
			"extensions": [
				"vadimcn.vscode-lldb",
				"serayuzgur.crates",
				"tamasfe.even-better-toml",
				"rust-lang.rust-analyzer",
				"mutantdino.resourcemonitor",
				"christian-kohler.path-intellisense",
				"Gruntfuggly.todo-tree",
				"ms-azuretools.vscode-docker",
				"redhat.vscode-yaml",
				"GitHub.copilot",
				"GitHub.copilot-chat",
				"jnoortheen.nix-ide"
			]
		}
	}
}