module tailwind4 import freeflowuniverse.herolib.core.playbook import freeflowuniverse.herolib.ui.console import freeflowuniverse.herolib.osal.startupmanager import freeflowuniverse.herolib.osal.zinit __global ( tailwind4_global map[string]&Tailwind tailwind4_default string ) /////////FACTORY @[params] pub struct ArgsGet { pub mut: name string } pub fn get(args_ ArgsGet) !&Tailwind { return &Tailwind{} } pub fn play(mut plbook PlayBook) ! { mut other_actions := plbook.find(filter: 'tailwind4.')! for other_action in other_actions { if other_action.name in ['destroy', 'install', 'build'] { mut p := other_action.params reset := p.get_default_false('reset') if other_action.name == 'destroy' || reset { console.print_debug('install action tailwind4.destroy') destroy()! } if other_action.name == 'install' { console.print_debug('install action tailwind4.install') install()! } } } } //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager { // unknown // screen // zinit // tmux // systemd match cat { .zinit { console.print_debug('startupmanager: zinit') return startupmanager.get(cat: .zinit)! } .systemd { console.print_debug('startupmanager: systemd') return startupmanager.get(cat: .systemd)! } else { console.print_debug('startupmanager: auto') return startupmanager.get()! } } } @[params] pub struct InstallArgs { pub mut: reset bool } pub fn (mut self Tailwind) install(args InstallArgs) ! { switch(self.name) if args.reset || (!installed()!) { install()! } } pub fn (mut self Tailwind) destroy() ! { switch(self.name) destroy()! } // switch instance to be used for tailwind4 pub fn switch(name string) { tailwind4_default = name } // helpers @[params] pub struct DefaultConfigArgs { instance string = 'default' }