env-manager: ui polish (#127)

* env-manager: migrate to pico 2.0.6

* env: option to hide children from ui

* introduce template hierarchy

* style: improve menu styling

* env: reorganize tasks, pull before install

---------

Co-authored-by: Giorgi Lekveishvili <lekva@gl-mbp-m1-max.local>
diff --git a/core/installer/tasks/tasks.go b/core/installer/tasks/tasks.go
index 75e8a68..6d0ec01 100644
--- a/core/installer/tasks/tasks.go
+++ b/core/installer/tasks/tasks.go
@@ -86,25 +86,31 @@
 
 type parentTask struct {
 	leafTask
-	subtasks []Task
+	subtasks     []Task
+	showChildren bool
 }
 
-func newParentTask(title string, start func() error, subtasks ...Task) parentTask {
+func newParentTask(title string, showChildren bool, start func() error, subtasks ...Task) parentTask {
 	return parentTask{
-		leafTask: newLeafTask(title, start),
-		subtasks: subtasks,
+		leafTask:     newLeafTask(title, start),
+		subtasks:     subtasks,
+		showChildren: showChildren,
 	}
 }
 
 func (t *parentTask) Subtasks() []Task {
-	return t.subtasks
+	if t.showChildren {
+		return t.subtasks
+	} else {
+		return make([]Task, 0)
+	}
 }
 
 type sequentialParentTask struct {
 	parentTask
 }
 
-func newSequentialParentTask(title string, subtasks ...Task) *sequentialParentTask {
+func newSequentialParentTask(title string, showChildren bool, subtasks ...Task) *sequentialParentTask {
 	start := func() error {
 		errCh := make(chan error)
 		for i := range subtasks[:len(subtasks)-1] {
@@ -124,7 +130,7 @@
 		return <-errCh
 	}
 	return &sequentialParentTask{
-		parentTask: newParentTask(title, start, subtasks...),
+		parentTask: newParentTask(title, showChildren, start, subtasks...),
 	}
 }
 
@@ -132,7 +138,7 @@
 	parentTask
 }
 
-func newConcurrentParentTask(title string, subtasks ...Task) *concurrentParentTask {
+func newConcurrentParentTask(title string, showChildren bool, subtasks ...Task) *concurrentParentTask {
 	start := func() error {
 		errCh := make(chan error)
 		for i := range subtasks {
@@ -151,6 +157,6 @@
 		return nil
 	}
 	return &concurrentParentTask{
-		parentTask: newParentTask(title, start, subtasks...),
+		parentTask: newParentTask(title, showChildren, start, subtasks...),
 	}
 }