diff --git a/xbar/brew-updates.1h.rb b/xbar/brew-updates.1h.rb
index 2fc0c75..898b39a 100755
--- a/xbar/brew-updates.1h.rb
+++ b/xbar/brew-updates.1h.rb
@@ -1,18 +1,21 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
+# rubocop:disable Layout/LineLength
+
# Brew Updates
-# v2.4.0
+# v2.5.0
# Jim Myhrberg
# jimeh
# List and manage outdated Homebrew formulas and casks
-# https://i.imgur.com/HLKYqYc.png
+# https://i.imgur.com/7gJDWmu.png
# ruby
# https://github.com/jimeh/dotfiles/tree/main/xbar
#
# string(VAR_BREW_PATH=""): Path to "brew" executable.
-# boolean(VAR_GREEDY=false): Pass --greedy to brew outdated command
+# boolean(VAR_GREEDY=""): Comma separted list of greedy types for brew outdated command ("latest", "auto-updates").
+# rubocop:enable Layout/LineLength
# rubocop:disable Lint/ShadowingOuterLocalVariable
# rubocop:disable Metrics/AbcSize
# rubocop:disable Metrics/BlockLength
@@ -263,10 +266,46 @@ module Brew
printer.item("#{prefix}↑#{formulas.size + casks.size}", dropdown: false)
printer.sep
- printer.item('Brew Updates')
+ printer.item('Brew Updates️') do |printer|
+ printer.item('Settings')
+ printer.sep
+
+ if greedy_latest?
+ printer.item(
+ ':white_check_mark: Greedy: Latest',
+ rpc: %w[remove_greedy latest],
+ refresh: true
+ )
+ else
+ printer.item(
+ ':ballot_box_with_check: Greedy: Latest',
+ rpc: %w[add_greedy latest],
+ refresh: true
+ )
+ end
+
+ if greedy_auto_updates?
+ printer.item(
+ ':white_check_mark: Greedy: Auto Updates',
+ rpc: %w[remove_greedy auto_updates],
+ refresh: true
+ )
+ else
+ printer.item(
+ ':ballot_box_with_check: Greedy: Auto Updates',
+ rpc: %w[add_greedy auto_updates],
+ refresh: true
+ )
+ end
+ end
printer.item(status_label) do |printer|
- printer.item(':hourglass: Refresh', refresh: true)
+ printer.item(
+ ':hourglass: Refresh',
+ alt: ':hourglass: Refresh (⌘R)',
+ refresh: true
+ )
+
printer.sep
if formulas.size.positive? && casks.size.positive?
printer.item(
@@ -290,13 +329,6 @@ module Brew
shell: [brew_path, 'upgrade', '--cask'] + casks.map(&:name)
)
end
-
- printer.sep
- if use_greedy?
- printer.item('Disable greedy', rpc: ['disable_greedy'], refresh: true)
- else
- printer.item('Enable greedy', rpc: ['enable_greedy'], refresh: true)
- end
end
print_formulas(printer)
@@ -305,13 +337,17 @@ module Brew
printer.sep
end
- def enable_greedy
- config['VAR_GREEDY'] = true
+ def add_greedy(*args)
+ vals = config['VAR_GREEDY']&.split(',') || []
+ vals += args
+ config['VAR_GREEDY'] = vals.uniq.sort.join(',')
config.save
end
- def disable_greedy
- config['VAR_GREEDY'] = false
+ def remove_greedy(*args)
+ vals = config['VAR_GREEDY']&.split(',') || []
+ vals -= args
+ config['VAR_GREEDY'] = vals.uniq.sort.join(',')
config.save
end
@@ -321,10 +357,6 @@ module Brew
@config ||= Xbar::Config.new
end
- def use_greedy?
- [true, 'true'].include?(config.fetch('VAR_GREEDY', 'false'))
- end
-
def status_label
label = []
label << "#{formulas.size} formulas" if formulas.size.positive?
@@ -454,12 +486,27 @@ module Brew
@casks ||= outdated['casks'].map { |line| Cask.new(line) }
end
+ def greedy_types
+ config['VAR_GREEDY']&.split(',')&.map(&:to_sym) || []
+ end
+
+ def greedy_latest?
+ greedy_types.include?(:latest)
+ end
+
+ def greedy_auto_updates?
+ greedy_types.include?(:auto_updates)
+ end
+
+ def greedy_args
+ args = []
+ args << '--greedy-latest' if greedy_latest?
+ args << '--greedy-auto-updates' if greedy_auto_updates?
+ args
+ end
+
def outdated_args
- [
- 'outdated',
- (use_greedy? ? '--greedy' : nil),
- '--json=v2'
- ].compact
+ ['outdated', greedy_args, '--json=v2'].flatten.compact
end
def outdated