From f7fa4b747160f1391c9edc7c343e111d220bff4a Mon Sep 17 00:00:00 2001 From: "Frank Chiarulli Jr." Date: Sat, 14 Dec 2024 12:47:19 -0500 Subject: [PATCH] add support for installing vscode extensions via brew --- modules/homebrew.nix | 26 ++++++++++++++++++++++---- tests/homebrew.nix | 7 +++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/modules/homebrew.nix b/modules/homebrew.nix index 7aee9e13..8924f378 100644 --- a/modules/homebrew.nix +++ b/modules/homebrew.nix @@ -539,10 +539,10 @@ in [website](https://brew.sh) for installation instructions. Use the [](#opt-homebrew.brews), [](#opt-homebrew.casks), - [](#opt-homebrew.masApps), and [](#opt-homebrew.whalebrews) options - to list the Homebrew formulae, casks, Mac App Store apps, and Docker containers you'd like to - install. Use the [](#opt-homebrew.taps) option, to make additional formula - repositories available to Homebrew. This module uses those options (along with the + [](#opt-homebrew.masApps), [](#opt-homebrew.whalebrews), [](#opt-homebrew.vscode) options + to list the Homebrew formulae, casks, Mac App Store apps, Docker containers and Visual Studio + Code Extensions you'd like to install. Use the [](#opt-homebrew.taps) option, to make additional + formula repositories available to Homebrew. This module uses those options (along with the [](#opt-homebrew.caskArgs) options) to generate a Brewfile that {command}`nix-darwin` passes to the {command}`brew bundle` command during system activation. @@ -734,6 +734,21 @@ in ''; }; + vscode = mkOption { + type = with types; listOf str; + default = [ ]; + example = [ "golang.go" ]; + description = '' + List of Visual Studio Code extensions to install using `code --install-extension`. + + When this option is used, `"visual-studio-code"` is automatically added to + [](#opt-homebrew.casks). + + For more information on {command}`code` see: + [VSCode Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-marketplace). + ''; + }; + extraConfig = mkOption { type = types.lines; default = ""; @@ -768,6 +783,8 @@ in optional (cfg.masApps != { }) "mas" ++ optional (cfg.whalebrews != [ ]) "whalebrew"; + homebrew.casks = optional (cfg.vscode != [ ]) "visual-studio-code"; + homebrew.brewfile = "# Created by `nix-darwin`'s `homebrew` module\n\n" + mkBrewfileSectionString "Taps" cfg.taps @@ -778,6 +795,7 @@ in + mkBrewfileSectionString "Mac App Store apps" (mapAttrsToList (n: id: ''mas "${n}", id: ${toString id}'') cfg.masApps) + mkBrewfileSectionString "Docker containers" (map (v: ''whalebrew "${v}"'') cfg.whalebrews) + + mkBrewfileSectionString "Visual Studio Code extensions" (map (v: ''vscode "${v}"'') cfg.vscode) + optionalString (cfg.extraConfig != "") ("# Extra config\n" + cfg.extraConfig); environment.variables = mkIf cfg.enable cfg.global.homebrewEnvironmentVariables; diff --git a/tests/homebrew.nix b/tests/homebrew.nix index d7fdeabc..dd8ce028 100644 --- a/tests/homebrew.nix +++ b/tests/homebrew.nix @@ -70,6 +70,10 @@ in "whalebrew/wget" ]; + homebrew.vscode = [ + "golang.go" + ]; + test = '' bf=${lib.escapeShellArg config.homebrew.brewfile} @@ -97,5 +101,8 @@ in echo "checking whalebrew entries in Brewfile" >&2 ${mkTest "whalebrew/wget" ''whalebrew "whalebrew/wget"''} + + echo "checking vscode entries in Brewfile" >&2 + ${mkTest "golang.go" ''vscode "golang.go"''} ''; }