This commit is contained in:
Jayson Rhynas 2026-01-26 14:12:12 -07:00 committed by GitHub
commit 7e17e15ab8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 57 additions and 6 deletions

View file

@ -48,6 +48,13 @@ gui:
wrapMainPanel: true wrapMainPanel: true
# Side panel width as a ratio of the screen's width # Side panel width as a ratio of the screen's width
sidePanelWidth: 0.333 sidePanelWidth: 0.333
# Determines whether each side panel is shown or not
sidePanelVisibility:
services: true
containers: true
images: true
volumes: true
networks: true
# Determines whether we show the bottom line (the one containing keybinding # Determines whether we show the bottom line (the one containing keybinding
# info and the status of the app). # info and the status of the app).
showBottomLine: true showBottomLine: true

View file

@ -74,6 +74,15 @@ type ThemeConfig struct {
OptionsTextColor []string `yaml:"optionsTextColor,omitempty"` OptionsTextColor []string `yaml:"optionsTextColor,omitempty"`
} }
// SidePanelVisibilityConfig is for toggling visiblity of side panels.
type SidePanelVisibilityConfig struct {
Services bool `yaml:"services,omitempty"`
Containers bool `yaml:"containers,omitempty"`
Images bool `yaml:"images,omitempty"`
Volumes bool `yaml:"volumes,omitempty"`
Networks bool `yaml:"networks,omitempty"`
}
// GuiConfig is for configuring visual things like colors and whether we show or // GuiConfig is for configuring visual things like colors and whether we show or
// hide things // hide things
type GuiConfig struct { type GuiConfig struct {
@ -123,6 +132,9 @@ type GuiConfig struct {
// If 0.333, then the side panels will be 1/3 of the screen's width // If 0.333, then the side panels will be 1/3 of the screen's width
SidePanelWidth float64 `yaml:"sidePanelWidth"` SidePanelWidth float64 `yaml:"sidePanelWidth"`
// Determines which side panels to show. Each panel defaults to `true` (visible).
SidePanelVisibility SidePanelVisibilityConfig `yaml:"sidePanelVisibility,omitempty"`
// Determines whether we show the bottom line (the one containing keybinding // Determines whether we show the bottom line (the one containing keybinding
// info and the status of the app). // info and the status of the app).
ShowBottomLine bool `yaml:"showBottomLine"` ShowBottomLine bool `yaml:"showBottomLine"`
@ -373,6 +385,13 @@ func GetDefaultConfig() UserConfig {
WrapMainPanel: true, WrapMainPanel: true,
LegacySortContainers: false, LegacySortContainers: false,
SidePanelWidth: 0.3333, SidePanelWidth: 0.3333,
SidePanelVisibility: SidePanelVisibilityConfig{
Services: true,
Containers: true,
Images: true,
Volumes: true,
Networks: true,
},
ShowBottomLine: true, ShowBottomLine: true,
ExpandFocusedSidePanel: false, ExpandFocusedSidePanel: false,
ScreenMode: "normal", ScreenMode: "normal",

View file

@ -175,11 +175,19 @@ func (gui *Gui) sidePanelChildren(width int, height int) []*boxlayout.Box {
return defaultBox return defaultBox
} }
return append([]*boxlayout.Box{ projectBox := &boxlayout.Box{
{
Window: sideWindowNames[0], Window: sideWindowNames[0],
Size: 3, Size: 3,
}, }
if len(sideWindowNames) == 1 {
projectBox = &boxlayout.Box{
Window: sideWindowNames[0],
Weight: 1,
}
}
return append([]*boxlayout.Box{
projectBox,
}, lo.Map(sideWindowNames[1:], func(window string, _ int) *boxlayout.Box { }, lo.Map(sideWindowNames[1:], func(window string, _ int) *boxlayout.Box {
return accordionBox(&boxlayout.Box{Window: window, Weight: 1}) return accordionBox(&boxlayout.Box{Window: window, Weight: 1})
})...) })...)

View file

@ -96,6 +96,7 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container]
return true return true
}, },
ConfigHidden: !gui.Config.UserConfig.Gui.SidePanelVisibility.Containers,
GetTableCells: func(container *commands.Container) []string { GetTableCells: func(container *commands.Container) []string {
return presentation.GetContainerDisplayStrings(&gui.Config.UserConfig.Gui, container) return presentation.GetContainerDisplayStrings(&gui.Config.UserConfig.Gui, container)
}, },

View file

@ -459,10 +459,15 @@ func (gui *Gui) ShouldRefresh(key string) bool {
} }
func (gui *Gui) initiallyFocusedViewName() string { func (gui *Gui) initiallyFocusedViewName() string {
if gui.DockerCommand.InDockerComposeProject { visiblePanels := gui.Config.UserConfig.Gui.SidePanelVisibility
if gui.DockerCommand.InDockerComposeProject && visiblePanels.Services {
return "services" return "services"
} } else if visiblePanels.Containers {
return "containers" return "containers"
} else {
return "project"
}
} }
func (gui *Gui) IgnoreStrings() []string { func (gui *Gui) IgnoreStrings() []string {

View file

@ -62,6 +62,7 @@ func (gui *Gui) getImagesPanel() *panels.SideListPanel[*commands.Image] {
return a.ID < b.ID return a.ID < b.ID
}, },
GetTableCells: presentation.GetImageDisplayStrings, GetTableCells: presentation.GetImageDisplayStrings,
ConfigHidden: !gui.Config.UserConfig.Gui.SidePanelVisibility.Images,
} }
} }

View file

@ -44,6 +44,7 @@ func (gui *Gui) getNetworksPanel() *panels.SideListPanel[*commands.Network] {
return a.Name < b.Name return a.Name < b.Name
}, },
GetTableCells: presentation.GetNetworkDisplayStrings, GetTableCells: presentation.GetNetworkDisplayStrings,
ConfigHidden: !gui.Config.UserConfig.Gui.SidePanelVisibility.Networks,
} }
} }

View file

@ -57,6 +57,9 @@ type SideListPanel[T comparable] struct {
// set this to true if you don't want to allow manual filtering via '/' // set this to true if you don't want to allow manual filtering via '/'
DisableFilter bool DisableFilter bool
// set to true if config file wants this panel to be hidden
ConfigHidden bool
// This can be nil if you want to always show the panel // This can be nil if you want to always show the panel
Hide func() bool Hide func() bool
} }
@ -263,6 +266,10 @@ func (self *SideListPanel[T]) IsFilterDisabled() bool {
} }
func (self *SideListPanel[T]) IsHidden() bool { func (self *SideListPanel[T]) IsHidden() bool {
if self.ConfigHidden {
return true
}
if self.Hide == nil { if self.Hide == nil {
return false return false
} }

View file

@ -77,6 +77,7 @@ func (gui *Gui) getServicesPanel() *panels.SideListPanel[*commands.Service] {
GetTableCells: func(service *commands.Service) []string { GetTableCells: func(service *commands.Service) []string {
return presentation.GetServiceDisplayStrings(&gui.Config.UserConfig.Gui, service) return presentation.GetServiceDisplayStrings(&gui.Config.UserConfig.Gui, service)
}, },
ConfigHidden: !gui.Config.UserConfig.Gui.SidePanelVisibility.Services,
Hide: func() bool { Hide: func() bool {
return !gui.DockerCommand.InDockerComposeProject return !gui.DockerCommand.InDockerComposeProject
}, },

View file

@ -50,6 +50,7 @@ func (gui *Gui) getVolumesPanel() *panels.SideListPanel[*commands.Volume] {
return a.Name < b.Name return a.Name < b.Name
}, },
GetTableCells: presentation.GetVolumeDisplayStrings, GetTableCells: presentation.GetVolumeDisplayStrings,
ConfigHidden: !gui.Config.UserConfig.Gui.SidePanelVisibility.Volumes,
} }
} }