@@ -13,6 +13,7 @@ def self.reset!
1313 require "bundle/formula_dumper"
1414 require "bundle/tap_dumper"
1515 require "bundle/vscode_extension_dumper"
16+ require "bundle/flatpak_dumper"
1617 require "bundle/brew_services"
1718
1819 @dsl = nil
@@ -22,17 +23,19 @@ def self.reset!
2223 Homebrew ::Bundle ::FormulaDumper . reset!
2324 Homebrew ::Bundle ::TapDumper . reset!
2425 Homebrew ::Bundle ::VscodeExtensionDumper . reset!
26+ Homebrew ::Bundle ::FlatpakDumper . reset!
2527 Homebrew ::Bundle ::BrewServices . reset!
2628 end
2729
2830 def self . run ( global : false , file : nil , force : false , zap : false , dsl : nil ,
29- formulae : true , casks : true , taps : true , vscode : true )
31+ formulae : true , casks : true , taps : true , vscode : true , flatpak : true )
3032 @dsl ||= dsl
3133
3234 casks = casks ? casks_to_uninstall ( global :, file :) : [ ]
3335 formulae = formulae ? formulae_to_uninstall ( global :, file :) : [ ]
3436 taps = taps ? taps_to_untap ( global :, file :) : [ ]
3537 vscode_extensions = vscode ? vscode_extensions_to_uninstall ( global :, file :) : [ ]
38+ flatpaks = flatpak ? flatpaks_to_uninstall ( global :, file :) : [ ]
3639 if force
3740 if casks . any?
3841 args = zap ? [ "--zap" ] : [ ]
@@ -53,6 +56,13 @@ def self.run(global: false, file: nil, force: false, zap: false, dsl: nil,
5356 end
5457 end
5558
59+ if flatpaks . any?
60+ flatpaks . each do |flatpak_name |
61+ Kernel . system "flatpak" , "uninstall" , "-y" , "--system" , flatpak_name
62+ end
63+ puts "Uninstalled #{ flatpaks . size } flatpak#{ "s" if flatpaks . size != 1 } "
64+ end
65+
5666 cleanup = system_output_no_stderr ( HOMEBREW_BREW_FILE , "cleanup" )
5767 puts cleanup unless cleanup . empty?
5868 else
@@ -82,6 +92,12 @@ def self.run(global: false, file: nil, force: false, zap: false, dsl: nil,
8292 would_uninstall = true
8393 end
8494
95+ if flatpaks . any?
96+ puts "Would uninstall flatpaks:"
97+ puts Formatter . columns flatpaks
98+ would_uninstall = true
99+ end
100+
85101 cleanup = system_output_no_stderr ( HOMEBREW_BREW_FILE , "cleanup" , "--dry-run" )
86102 unless cleanup . empty?
87103 puts "Would `brew cleanup`:"
@@ -212,6 +228,23 @@ def self.vscode_extensions_to_uninstall(global: false, file: nil)
212228 current_extensions - kept_extensions
213229 end
214230
231+ def self . flatpaks_to_uninstall ( global : false , file : nil )
232+ return [ ] . freeze unless Bundle . flatpak_installed?
233+
234+ require "bundle/brewfile"
235+ @dsl ||= Brewfile . read ( global :, file :)
236+ kept_flatpaks = @dsl . entries . select { |e | e . type == :flatpak } . map ( &:name )
237+
238+ # To provide a graceful migration from `Brewfile`s that don't yet or
239+ # don't want to use `flatpak`: don't remove any flatpaks if we don't
240+ # find any in the `Brewfile`.
241+ return [ ] . freeze if kept_flatpaks . empty?
242+
243+ require "bundle/flatpak_dumper"
244+ current_flatpaks = Homebrew ::Bundle ::FlatpakDumper . packages
245+ current_flatpaks - kept_flatpaks
246+ end
247+
215248 def self . system_output_no_stderr ( cmd , *args )
216249 IO . popen ( [ cmd , *args ] , err : :close ) . read
217250 end
0 commit comments