summaryrefslogtreecommitdiff
path: root/modules/programs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/programs')
-rw-r--r--modules/programs/brew-bundle.nix225
1 files changed, 0 insertions, 225 deletions
diff --git a/modules/programs/brew-bundle.nix b/modules/programs/brew-bundle.nix
deleted file mode 100644
index d5ba88e..0000000
--- a/modules/programs/brew-bundle.nix
+++ /dev/null
@@ -1,225 +0,0 @@
-# Created by: https://github.com/malob
-# Inspired by: https://github.com/lccambiaghi/nixpkgs/blob/main/modules/homebrew.nix
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
- cfg = config.programs.brew-bundle;
-
- brewfileSection = heading: type: entries:
- if entries != [] then
- "# ${heading}\n" + (concatMapStrings (name: "${type} \"${name}\"\n") entries) + "\n"
- else "";
-
- masBrewfileSection = entries:
- if entries != {} then
- "# Mac App Store apps\n" +
- concatStringsSep "\n" (mapAttrsToList (name: id: ''mas "${name}", id: ${toString id}'') entries) +
- "\n"
- else "";
-
- brewfile = pkgs.writeText "Brewfile" (
- (brewfileSection "Taps" "tap" cfg.taps) +
- (brewfileSection "Brews" "brew" cfg.brews) +
- (brewfileSection "Casks" "cask" cfg.casks) +
- (masBrewfileSection cfg.masApps) +
- (brewfileSection "Docker contrainers" "whalebrew" cfg.whalebrews) +
- (if cfg.extraConfig != "" then "# Extra config\n" + cfg.extraConfig else "")
- );
-
- brew-bundle-command =
- (if cfg.autoUpdate then "" else "HOMEBREW_NO_AUTO_UPDATE=1 ") +
- "brew bundle --file='${brewfile}' --no-lock" +
- (if cfg.cleanup == "uninstall" || cfg.cleanup == "zap" then " --cleanup" else "") +
- (if cfg.cleanup == "zap" then " --zap" else "");
-
-in
-
-{
- options.programs.brew-bundle = {
- enable = mkEnableOption ''
- configuring your Brewfile, and installing/updating the formulas therein via
- the <command>brew bundle</command> command, using <command>nix-darwin</command>.
-
- Note that enabling this option does not install Homebrew. See the Homebrew website for
- installation instructions: https://brew.sh
- '';
-
- autoUpdate = mkOption {
- type = types.bool;
- default = false;
- description = ''
- When enabled, Homebrew is allowed to auto-update during <command>nix-darwin</command>
- activation. The default is <literal>false</literal> so that repeated invocations of
- <command>darwin-rebuild switch</command> are idempotent.
- '';
- };
-
- cleanup = mkOption {
- type = types.enum [ "none" "uninstall" "zap" ];
- default = "none";
- example = "uninstall";
- description = ''
- This option manages what happens to formulas installed by Homebrew, that aren't present in
- the Brewfile generated by this module.
-
- When set to <literal>"none"</literal> (the default), formulas not present in the generated
- Brewfile are left installed.
-
- When set to <literal>"uninstall"</literal>, <command>nix-darwin</command> invokes
- <command>brew bundle install</command> with the <command>--cleanup</command> flag. This
- uninstalls all formulas not listed in generate Brewfile, i.e.,
- <command>brew uninstall</command> is run for those formulas.
-
- When set to <literal>"zap"</literal>, <command>nix-darwin</command> invokes
- <command>brew bundle install</command> with the <command>--cleanup --zap</command>
- flags. This uninstalls all forumalas not listed in the generated Brewfile, and if the
- formula is a cask, removes all files associated with the cask. In other words,
- <command>brew uninstall --zap</command> is run for all those formulas.
-
- If you plan on exclusively using <command>nix-darwin</command> to manage formulas installed
- by Homebrew, you probably want to set this option to <literal>"uninstall"</literal> or
- <literal>"zap"</literal>.
- '';
- };
-
- userConfig.brewfile = mkOption {
- type = types.bool;
- default = true;
- description = ''
- When enabled, when you manually invoke <command>brew bundle</command>, it will automatically
- use the Brewfile in the Nix store that this module generates.
-
- Sets the <literal>HOMEBREW_BUNDLE_FILE</literal> enviroment variable to the path of the
- Brewfile in the Nix store that this module generates, by adding it to
- <option>environment.variables</option>.
- '';
- };
-
- userConfig.noLock = mkOption {
- type = types.bool;
- default = true;
- description = ''
- When enabled, lock files aren't generated when you manually invoke
- <command>brew bundle</command>.
-
- Sets the <literal>HOMEBREW_BUNDLE_NO_LOCK</literal> enviroment variable, by adding it to
- <option>environment.variables</option>.
- '';
- };
-
- taps = mkOption {
- type = with types; listOf str;
- default = [];
- example = [ "homebrew/cask-fonts" ];
- description = "Homebrew formula repositories to tap";
- };
-
- brews = mkOption {
- type = with types; listOf str;
- default = [];
- example = [ "mas" ];
- description = "Homebrew brews to install";
- };
-
- casks = mkOption {
- type = with types; listOf str;
- default = [];
- example = [ "hammerspoon" "virtualbox" ];
- description = "Homebrew casks to install";
- };
-
- masApps = mkOption {
- type = with types; attrsOf int;
- default = {};
- example = {
- "1Password" = 1107421413;
- Xcode = 497799835;
- };
- description = ''
- Applications to install from Mac App Store using <command>mas</command>.
-
- When this option is used, <literal>"mas"</literal> is automatically added to
- <option>programs.brew-bundle.brews</option>.
-
- Note that you need to be signed into the Mac App Store for <command>mas</command> to
- successfully install and upgrade applications, and that unfortunately apps removed from this
- option will not be uninstalled automatically even if
- <option>programs.brew-bundle.cleanup</option> is set to <literal>"uninstall"</literal>
- or <literal>"zap"</literal> (this is currently a limitation of Homebrew Bundle).
-
- For more information on <command>mas</command> see: https://github.com/mas-cli/mas
- '';
- };
-
- whalebrews = mkOption {
- type = with types; listOf str;
- default = [];
- example = [ "whalebrew/wget" ];
- description = ''
- Docker images to install using <command>whalebrew</command>.
-
- When this option is used, <literal>"whalebrew"</literal> is automatically added to
- <option>programs.brew-bundle.brews</option>.
-
- For more information on <command>whalebrew</command> see:
- https://github.com/whalebrew/whalebrew
- '';
- };
-
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- example = ''
- # 'brew tap' with custom Git URL
- tap "user/tap-repo", "https://user@bitbucket.org/user/homebrew-tap-repo.git"
-
- # set arguments for all 'brew cask install' commands
- cask_args appdir: "~/Applications", require_sha: true
-
- # 'brew install --with-rmtp', 'brew services restart' on version changes
- brew "denji/nginx/nginx-full", args: ["with-rmtp"], restart_service: :changed
- # 'brew install', always 'brew services restart', 'brew link', 'brew unlink mysql' (if it is installed)
- brew "mysql@5.6", restart_service: true, link: true, conflicts_with: ["mysql"]
-
- # 'brew cask install --appdir=~/my-apps/Applications'
- cask "firefox", args: { appdir: "~/my-apps/Applications" }
- # 'brew cask install' only if '/usr/libexec/java_home --failfast' fails
- cask "java" unless system "/usr/libexec/java_home --failfast"
- '';
- description = "Extra lines to be added verbatim to the generated Brewfile.";
- };
- };
-
- config = {
- assertions = mkIf cfg.enable [
- {
- assertion = builtins.pathExists /usr/local/bin/brew;
- message = ''
- Homebrew not installed.
-
- Please install Homebrew yourself before using the programs.brew-bundle module.
-
- See installation instructions at: https://brew.sh
- '';
- }
- ];
-
- programs.brew-bundle.brews =
- optional (cfg.masApps != {}) "mas" ++
- optional (cfg.whalebrews != []) "whalebrew";
-
- environment.variables = mkIf cfg.enable (
- (if cfg.userConfig.brewfile then { HOMEBREW_BUNDLE_FILE = "${brewfile}"; } else {}) //
- (if cfg.userConfig.noLock then { HOMEBREW_BUNDLE_NO_LOCK = "1"; } else {})
- );
-
- system.activationScripts.brew-bundle.text = mkIf cfg.enable ''
- # Homebrew Bundle
- echo >&2 "Homebrew bundle..."
- PATH=/usr/local/bin:$PATH ${brew-bundle-command}
- '';
- };
-
-}