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