diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-10-04 09:53:56 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-10-10 00:23:01 +1100 |
commit | 7d9aa97f9691dd0a8658c4b6626877a198c5d03c (patch) | |
tree | 089dd7d4838501ebc15885103ffbe8c5f20c38e7 | |
parent | ca31e5258fd23a70fb9c7064d39f3a6ff50f120d (diff) |
have typed default config
-rw-r--r-- | main.go | 10 | ||||
-rw-r--r-- | pkg/config/app_config.go | 192 | ||||
-rw-r--r-- | pkg/config/os_config.go | 10 | ||||
-rw-r--r-- | pkg/config/user_config.go | 590 |
4 files changed, 423 insertions, 379 deletions
@@ -48,6 +48,9 @@ func main() { configFlag := false flaggy.Bool(&configFlag, "c", "config", "Print the default config") + configDirFlag := false + flaggy.Bool(&configDirFlag, "cd", "config-dir", "Print the config directory") + workTree := "" flaggy.String(&workTree, "w", "work-tree", "equivalent of the --work-tree git argument") @@ -85,7 +88,12 @@ func main() { if err != nil { log.Fatal(err.Error()) } - fmt.Printf("%v\n", buf.String()) + fmt.Printf("%s\n", buf.String()) + os.Exit(0) + } + + if configDirFlag { + fmt.Printf("%s\n", config.ConfigDir()) os.Exit(0) } diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go index be1d6203e..95ac99b73 100644 --- a/pkg/config/app_config.go +++ b/pkg/config/app_config.go @@ -44,7 +44,7 @@ type AppConfigurer interface { // NewAppConfig makes a new app config func NewAppConfig(name, version, commit, date string, buildSource string, debuggingFlag bool) (*AppConfig, error) { - configDir, err := findOrCreateConfigDir(name) + configDir, err := findOrCreateConfigDir() if err != nil { return nil, err } @@ -80,11 +80,15 @@ func NewAppConfig(name, version, commit, date string, buildSource string, debugg return appConfig, nil } -func findOrCreateConfigDir(projectName string) (string, error) { +func ConfigDir() string { // chucking my name there is not for vanity purposes, the xdg spec (and that // function) requires a vendor name. May as well line up with github - configDirs := xdg.New("jesseduffield", projectName) - folder := configDirs.ConfigHome() + configDirs := xdg.New("jesseduffield", "lazygit") + return configDirs.ConfigHome() +} + +func findOrCreateConfigDir() (string, error) { + folder := ConfigDir() err := os.MkdirAll(folder, 0755) if err != nil { @@ -186,7 +190,7 @@ func (c *AppConfig) GetUserConfigDir() string { } func configFilePath(filename string) (string, error) { - folder, err := findOrCreateConfigDir("lazygit") + folder, err := findOrCreateConfigDir() if err != nil { return "", err } @@ -239,184 +243,6 @@ func loadAppState() (*AppState, error) { return appState, nil } -func GetDefaultConfig() *UserConfig { - userConfig := &UserConfig{} - - if err := yaml.Unmarshal(GetDefaultConfigBytes(), userConfig); err != nil { - panic(err) - } - - userConfig.OS = GetPlatformDefaultConfig() - - return userConfig -} - -// GetDefaultConfigBytes returns the application default configuration -func GetDefaultConfigBytes() []byte { - return []byte( - `gui: - ## stuff relating to the UI - scrollHeight: 2 - scrollPastBottom: true - mouseEvents: true - skipUnstageLineWarning: false - skipStashWarning: true - sidePanelWidth: 0.3333 - expandFocusedSidePanel: false - mainPanelSplitMode: 'flexible' # one of 'horizontal' | 'flexible' | 'vertical' - theme: - lightTheme: false - activeBorderColor: - - green - - bold - inactiveBorderColor: - - white - optionsTextColor: - - blue - selectedLineBgColor: - - default - selectedRangeBgColor: - - blue - commitLength: - show: true -git: - paging: - colorArg: always - useConfig: false - merging: - manualCommit: false - args: "" - pull: - mode: 'merge' # one of 'merge' | 'rebase' | 'ff-only' - skipHookPrefix: 'WIP' - autoFetch: true - branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --" - overrideGpg: false # prevents lazygit from spawning a separate process when using GPG - disableForcePushing: false -update: - method: prompt # can be: prompt | background | never - days: 14 # how often a update is checked for -reporting: 'undetermined' # one of: 'on' | 'off' | 'undetermined' -splashUpdatesIndex: 0 -confirmOnQuit: false -quitOnTopLevelReturn: true -disableStartupPopups: false -keybinding: - universal: - quit: 'q' - quit-alt1: '<c-c>' - return: '<esc>' - quitWithoutChangingDirectory: 'Q' - togglePanel: '<tab>' - prevItem: '<up>' - nextItem: '<down>' - prevItem-alt: 'k' - nextItem-alt: 'j' - prevPage: ',' - nextPage: '.' - gotoTop: '<' - gotoBottom: '>' - prevBlock: '<left>' - nextBlock: '<right>' - prevBlock-alt: 'h' - nextBlock-alt: 'l' - nextMatch: 'n' - prevMatch: 'N' - startSearch: '/' - optionMenu: 'x' - optionMenu-alt1: '?' - select: '<space>' - goInto: '<enter>' - confirm: '<enter>' - confirm-alt1: 'y' - remove: 'd' - new: 'n' - edit: 'e' - openFile: 'o' - scrollUpMain: '<pgup>' - scrollDownMain: '<pgdown>' - scrollUpMain-alt1: 'K' - scrollDownMain-alt1: 'J' - scrollUpMain-alt2: '<c-u>' - scrollDownMain-alt2: '<c-d>' - executeCustomCommand: ':' - createRebaseOptionsMenu: 'm' - pushFiles: 'P' - pullFiles: 'p' - refresh: 'R' - createPatchOptionsMenu: '<c-p>' - nextTab: ']' - prevTab: '[' - nextScreenMode: '+' - prevScreenMode: '_' - undo: 'z' - redo: '<c-z>' - filteringMenu: <c-s> - diffingMenu: 'W' - diffingMenu-alt: '<c-e>' - copyToClipboard: '<c-o>' - status: - checkForUpdate: 'u' - recentRepos: '<enter>' - files: - commitChanges: 'c' - commitChangesWithoutHook: 'w' - amendLastCommit: 'A' - commitChangesWithEditor: 'C' - ignoreFile: 'i' - refreshFiles: 'r' - stashAllChanges: 's' - viewStashOptions: 'S' - toggleStagedAll: 'a' - viewResetOptions: 'D' - fetch: 'f' - branches: - createPullRequest: 'o' - checkoutBranchByName: 'c' - forceCheckoutBranch: 'F' - rebaseBranch: 'r' - renameBranch: 'R' - mergeIntoCurrentBranch: 'M' - viewGitFlowOptions: 'i' - fastForward: 'f' - pushTag: 'P' - setUpstream: 'u' - fetchRemote: 'f' - commits: - squashDown: 's' - renameCommit: 'r' - renameCommitWithEditor: 'R' - viewResetOptions: 'g' - markCommitAsFixup: 'f' - createFixupCommit: 'F' - squashAboveCommits: 'S' - moveDownCommit: '<c-j>' - moveUpCommit: '<c-k>' - amendToCommit: 'A' - pickCommit: 'p' - revertCommit: 't' - cherryPickCopy: 'c' - cherryPickCopyRange: 'C' - pasteCommits: 'v' - tagCommit: 'T' - checkoutCommit: '<space>' - resetCherryPick: '<c-R>' - stash: - popStash: 'g' - commitFiles: - checkoutCommitFile: 'c' - main: - toggleDragSelect: 'v' - toggleDragSelect-alt: 'V' - toggleSelectHunk: 'a' - pickBothHunks: 'b' - submodules: - init: 'i' - update: 'u' - bulkMenu: 'b' -`) -} - // AppState stores data between runs of the app like when the last update check // was performed and which other repos have been checked out type AppState struct { diff --git a/pkg/config/os_config.go b/pkg/config/os_config.go deleted file mode 100644 index b24e0ced3..000000000 --- a/pkg/config/os_config.go +++ /dev/null @@ -1,10 +0,0 @@ -package config - -// OSConfig contains config on the level of the os -type OSConfig struct { - // OpenCommand is the command for opening a file - OpenCommand string `yaml:"openCommand,omitempty"` - - // OpenCommand is the command for opening a link - OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` -} diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 262b8f4bc..a46f9bf1e 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -1,8 +1,32 @@ package config -type CommitPrefixConfig struct { - Pattern string `yaml:"pattern"` - Replace string `yaml:"replace"` +type UserConfig struct { + Gui GuiConfig `yaml:"gui"` + Git GitConfig `yaml:"git"` + Update UpdateConfig `yaml:"update"` + Reporting string `yaml:"reporting"` + SplashUpdatesIndex int `yaml:"splashUpdatesIndex"` + ConfirmOnQuit bool `yaml:"confirmOnQuit"` + QuitOnTopLevelReturn bool `yaml:"quitOnTopLevelReturn"` + Keybinding KeybindingConfig `yaml:"keybinding"` + // OS determines what defaults are set for opening files and links + OS OSConfig `yaml:"os,omitempty"` + DisableStartupPopups bool `yaml:"disableStartupPopups"` + CustomCommands []CustomCommand `yaml:"customCommands"` + Services map[string]string `yaml:"services"` +} + +type GuiConfig struct { + ScrollHeight int `yaml:"scrollHeight"` + ScrollPastBottom bool `yaml:"scrollPastBottom"` + MouseEvents bool `yaml:"mouseEvents"` + SkipUnstageLineWarning bool `yaml:"skipUnstageLineWarning"` + SkipStashWarning bool `yaml:"skipStashWarning"` + SidePanelWidth float64 `yaml:"sidePanelWidth"` + ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` + MainPanelSplitMode string `yaml:"mainPanelSplitMode"` + Theme ThemeConfig `yaml:"theme"` + CommitLength CommitLengthConfig `yaml:"commitLength"` } type ThemeConfig struct { @@ -14,21 +38,196 @@ type ThemeConfig struct { SelectedRangeBgColor []string `yaml:"selectedRangeBgColor"` } -type CustomCommandMenuOption struct { - Name string `yaml:"name"` - Description string `yaml:"description"` - Value string `yaml:"value"` +type CommitLengthConfig struct { + Show bool `yaml:"show"` } -type CustomCommandPrompt struct { - Type string `yaml:"type"` // one of 'input' and 'menu' - Title string `yaml:"title"` +type GitConfig struct { + Paging PagingConfig `yaml:"paging"` + Merging MergingConfig `yaml:"merging"` + Pull PullConfig `yaml:"pull"` + SkipHookPrefix string `yaml:"skipHookPrefix"` + AutoFetch bool `yaml:"autoFetch"` + BranchLogCmd string `yaml:"branchLogCmd"` + OverrideGpg bool `yaml:"overrideGpg"` + DisableForcePushing bool `yaml:"disableForcePushing"` + CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"` +} - // this only apply to prompts - InitialValue string `yaml:"initialValue"` +type PagingConfig struct { + ColorArg string `yaml:"colorArg"` + Pager string `yaml:"pager"` + UseConfig bool `yaml:"useConfig"` +} - // this only applies to menus - Options []CustomCommandMenuOption +type MergingConfig struct { + ManualCommit bool `yaml:"manualCommit"` + Args string `yaml:"args"` +} + +type PullConfig struct { + Mode string `yaml:"mode"` +} + +type CommitPrefixConfig struct { + Pattern string `yaml:"pattern"` + Replace string `yaml:"replace"` +} + +type UpdateConfig struct { + Method string `yaml:"method"` + Days int64 `yaml:"days"` +} + +type KeybindingConfig struct { + Universal KeybindingUniversalConfig `yaml:"universal"` + Status KeybindingStatusConfig `yaml:"status"` + Files KeybindingFilesConfig `yaml:"files"` + Branches KeybindingBranchesConfig `yaml:"branches"` + Commits KeybindingCommitsConfig `yaml:"commits"` + Stash KeybindingStashConfig `yaml:"stash"` + CommitFiles KeybindingCommitFilesConfig `yaml:"commitFiles"` + Main KeybindingMainConfig `yaml:"main"` + Submodules KeybindingSubmodulesConfig `yaml:"submodules"` +} + +type KeybindingUniversalConfig struct { + Quit string `yaml:"quit"` + QuitAlt1 string `yaml:"quit-alt1"` + Return string `yaml:"return"` + QuitWithoutChangingDirectory string `yaml:"quitWithoutChangingDirectory"` + TogglePanel string `yaml:"togglePanel"` + PrevItem string `yaml:"prevItem"` + NextItem string `yaml:"nextItem"` + PrevItemAlt string `yaml:"prevItem-alt"` + NextItemAlt string `yaml:"nextItem-alt"` + PrevPage string `yaml:"prevPage"` + NextPage string `yaml:"nextPage"` + GotoTop string `yaml:"gotoTop"` + GotoBottom string `yaml:"gotoBottom"` + PrevBlock string `yaml:"prevBlock"` + NextBlock string `yaml:"nextBlock"` + PrevBlockAlt string `yaml:"prevBlock-alt"` + NextBlockAlt string `yaml:"nextBlock-alt"` + NextMatch string `yaml:"nextMatch"` + PrevMatch string `yaml:"prevMatch"` + StartSearch string `yaml:"startSearch"` + OptionMenu string `yaml:"optionMenu"` + OptionMenuAlt1 string `yaml:"optionMenu-alt1"` + Select string `yaml:"select"` + GoInto string `yaml:"goInto"` + Confirm string `yaml:"confirm"` + ConfirmAlt1 string `yaml:"confirm-alt1"` + Remove string `yaml:"remove"` + New string `yaml:"new"` + Edit string `yaml:"edit"` + OpenFile string `yaml:"openFile"` + ScrollUpMain string `yaml:"scrollUpMain"` + ScrollDownMain string `yaml:"scrollDownMain"` + ScrollUpMainAlt1 string `yaml:"scrollUpMain-alt1"` + ScrollDownMainAlt1 string `yaml:"scrollDownMain-alt1"` + ScrollUpMainAlt2 string `yaml:"scrollUpMain-alt2"` + ScrollDownMainAlt2 string `yaml:"scrollDownMain-alt2"` + ExecuteCustomCommand string `yaml:"executeCustomCommand"` + CreateRebaseOptionsMenu string `yaml:"createRebaseOptionsMenu"` + PushFiles string `yaml:"pushFiles"` + PullFiles string `yaml:"pullFiles"` + Refresh string `yaml:"refresh"` + CreatePatchOptionsMenu string `yaml:"createPatchOptionsMenu"` + NextTab string `yaml:"nextTab"` + PrevTab string `yaml:"prevTab"` + NextScreenMode string `yaml:"nextScreenMode"` + PrevScreenMode string `yaml:"prevScreenMode"` + Undo string `yaml:"undo"` + Redo string `yaml:"redo"` + FilteringMenu string `yaml:"filteringMenu"` + DiffingMenu string `yaml:"diffingMenu"` + DiffingMenuAlt string `yaml:"diffingMenu-alt"` + CopyToClipboard string `yaml:"copyToClipboard"` +} + +type KeybindingStatusConfig struct { + CheckForUpdate string `yaml:"checkForUpdate"` + RecentRepos string `yaml:"recentRepos"` +} + +type KeybindingFilesConfig struct { + CommitChanges string `yaml:"commitChanges"` + CommitChangesWithoutHook string `yaml:"commitChangesWithoutHook"` + AmendLastCommit string `yaml:"amendLastCommit"` + CommitChangesWithEditor string `yaml:"commitChangesWithEditor"` + IgnoreFile string `yaml:"ignoreFile"` + RefreshFiles string `yaml:"refreshFiles"` + StashAllChanges string `yaml:"stashAllChanges"` + ViewStashOptions string `yaml:"viewStashOptions"` + ToggleStagedAll string `yaml:"toggleStagedAll"` + ViewResetOptions string `yaml:"viewResetOptions"` + Fetch string `yaml:"fetch"` +} + +type KeybindingBranchesConfig struct { + CreatePullRequest string `yaml:"createPullRequest"` + CheckoutBranchByName string `yaml:"checkoutBranchByName"` + ForceCheckoutBranch string `yaml:"forceCheckoutBranch"` + RebaseBranch string `yaml:"rebaseBranch"` + RenameBranch string `yaml:"renameBranch"` + MergeIntoCurrentBranch string `yaml:"mergeIntoCurrentBranch"` + ViewGitFlowOptions string `yaml:"viewGitFlowOptions"` + FastForward string `yaml:"fastForward"` + PushTag string `yaml:"pushTag"` + SetUpstream string `yaml:"setUpstream"` + FetchRemote string `yaml:"fetchRemote"` +} + +type KeybindingCommitsConfig struct { + SquashDown string `yaml:"squashDown"` + RenameCommit string `yaml:"renameCommit"` + RenameCommitWithEditor string `yaml:"renameCommitWithEditor"` + ViewResetOptions string `yaml:"viewResetOptions"` + MarkCommitAsFixup string `yaml:"markCommitAsFixup"` + CreateFixupCommit string `yaml:"createFixupCommit"` + SquashAboveCommits string `yaml:"squashAboveCommits"` + MoveDownCommit string `yaml:"moveDownCommit"` + MoveUpCommit string `yaml:"moveUpCommit"` + AmendToCommit string `yaml:"amendToCommit"` + PickCommit string `yaml:"pickCommit"` + RevertCommit string `yaml:"revertCommit"` + CherryPickCopy string `yaml:"cherryPickCopy"` + CherryPickCopyRange string `yaml:"cherryPickCopyRange"` + PasteCommits string `yaml:"pasteCommits"` + TagCommit string `yaml:"tagCommit"` + CheckoutCommit string `yaml:"checkoutCommit"` + ResetCherryPick string `yaml:"resetCherryPick"` +} + +type KeybindingStashConfig struct { + PopStash string `yaml:"popStash"` +} + +type KeybindingCommitFilesConfig struct { + CheckoutCommitFile string `yaml:"checkoutCommitFile"` +} + +type KeybindingMainConfig struct { + ToggleDragSelect string `yaml:"toggleDragSelect"` + ToggleDragSelectAlt string `yaml:"toggleDragSelect-alt"` + ToggleSelectHunk string `yaml:"toggleSelectHunk"` + PickBothHunks string `yaml:"pickBothHunks"` +} + +type KeybindingSubmodulesConfig struct { + Init string `yaml:"init"` + Update string `yaml:"update"` + BulkMenu string `yaml:"bulkMenu"` +} + +// OSConfig contains config on the level of the os +type OSConfig struct { + // OpenCommand is the command for opening a file + OpenCommand string `yaml:"openCommand,omitempty"` + + // OpenCommand is the command for opening a link + OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` } type CustomCommand struct { @@ -41,175 +240,196 @@ type CustomCommand struct { Description string `yaml:"description"` } -type UserConfig struct { - Gui struct { - ScrollHeight int `yaml:"scrollHeight"` - ScrollPastBottom bool `yaml:"scrollPastBottom"` - MouseEvents bool `yaml:"mouseEvents"` - SkipUnstageLineWarning bool `yaml:"skipUnstageLineWarning"` - SkipStashWarning bool `yaml:"skipStashWarning"` - SidePanelWidth float64 `yaml:"sidePanelWidth"` - ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` - MainPanelSplitMode string `yaml:"mainPanelSplitMode"` - Theme ThemeConfig `yaml:"theme"` - CommitLength struct { - Show bool `yaml:"show"` - } `yaml:"commitLength"` - } `yaml:"gui"` - Git struct { - Paging struct { - ColorArg string `yaml:"colorArg"` - Pager string `yaml:"pager"` - UseConfig bool `yaml:"useConfig"` - } `yaml:"paging"` - Merging struct { - ManualCommit bool `yaml:"manualCommit"` - Args string `yaml:"args"` - } `yaml:"merging"` - Pull struct { - Mode string `yaml:"mode"` - } `yaml:"pull"` - SkipHookPrefix string `yaml:"skipHookPrefix"` - AutoFetch bool `yaml:"autoFetch"` - BranchLogCmd string `yaml:"branchLogCmd"` - OverrideGpg bool `yaml:"overrideGpg"` - DisableForcePushing bool `yaml:"disableForcePushing"` - CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"` - } `yaml:"git"` - Update struct { - Method string `yaml:"method"` - Days int64 `yaml:"days"` - } `yaml:"update"` - Reporting string `yaml:"reporting"` - SplashUpdatesIndex int `yaml:"splashUpdatesIndex"` - ConfirmOnQuit bool `yaml:"confirmOnQuit"` - QuitOnTopLevelReturn bool `yaml:"quitOnTopLevelReturn"` - Keybinding struct { - Universal struct { - Quit string `yaml:"quit"` - QuitAlt1 string `yaml:"quit-alt1"` - Return string `yaml:"return"` - QuitWithoutChangingDirectory string `yaml:"quitWithoutChangingDirectory"` - TogglePanel string `yaml:"togglePanel"` - PrevItem string `yaml:"prevItem"` - NextItem string `yaml:"nextItem"` - PrevItemAlt string `yaml:"prevItem-alt"` - NextItemAlt string `yaml:"nextItem-alt"` - PrevPage string `yaml:"prevPage"` - NextPage string `yaml:"nextPage"` - GotoTop string `yaml:"gotoTop"` - GotoBottom string `yaml:"gotoBottom"` - PrevBlock string `yaml:"prevBlock"` - NextBlock string `yaml:"nextBlock"` - PrevBlockAlt string `yaml:"prevBlock-alt"` - NextBlockAlt string `yaml:"nextBlock-alt"` - NextMatch string `yaml:"nextMatch"` - PrevMatch string `yaml:"prevMatch"` - StartSearch string `yaml:"startSearch"` - OptionMenu string `yaml:"optionMenu"` - OptionMenuAlt1 string `yaml:"optionMenu-alt1"` - Select string `yaml:"select"` - GoInto string `yaml:"goInto"` - Confirm string `yaml:"confirm"` - ConfirmAlt1 string `yaml:"confirm-alt1"` - Remove string `yaml:"remove"` - New string `yaml:"new"` - Edit string `yaml:"edit"` - OpenFile string `yaml:"openFile"` - ScrollUpMain string `yaml:"scrollUpMain"` - ScrollDownMain string `yaml:"scrollDownMain"` - ScrollUpMainAlt1 string `yaml:"scrollUpMain-alt1"` - ScrollDownMainAlt1 string `yaml:"scrollDownMain-alt1"` - ScrollUpMainAlt2 string `yaml:"scrollUpMain-alt2"` - ScrollDownMainAlt2 string `yaml:"scrollDownMain-alt2"` - ExecuteCustomCommand string `yaml:"executeCustomCommand"` - CreateRebaseOptionsMenu string `yaml:"createRebaseOptionsMenu"` - PushFiles string `yaml:"pushFiles"` - PullFiles string `yaml:"pullFiles"` - Refresh string `yaml:"refresh"` - CreatePatchOptionsMenu string `yaml:"createPatchOptionsMenu"` - NextTab string `yaml:"nextTab"` - PrevTab string `yaml:"prevTab"` - NextScreenMode string `yaml:"nextScreenMode"` - PrevScreenMode string `yaml:"prevScreenMode"` - Undo string `yaml:"undo"` - Redo string `yaml:"redo"` - FilteringMenu string `yaml:"filteringMenu"` - DiffingMenu string `yaml:"diffingMenu"` - DiffingMenuAlt string `yaml:"diffingMenu-alt"` - CopyToClipboard string `yaml:"copyToClipboard"` - } `yaml:"universal"` - Status struct { - CheckForUpdate string `yaml:"checkForUpdate"` - RecentRepos string `yaml:"recentRepos"` - } `yaml:"status"` - Files struct { - CommitChanges string `yaml:"commitChanges"` - CommitChangesWithoutHook string `yaml:"commitChangesWithoutHook"` - AmendLastCommit string `yaml:"amendLastCommit"` - CommitChangesWithEditor string `yaml:"commitChangesWithEditor"` - IgnoreFile string `yaml:"ignoreFile"` - RefreshFiles string `yaml:"refreshFiles"` - StashAllChanges string `yaml:"stashAllChanges"` - ViewStashOptions string `yaml:"viewStashOptions"` - ToggleStagedAll string `yaml:"toggleStagedAll"` - ViewResetOptions string `yaml:"viewResetOptions"` - Fetch string `yaml:"fetch"` - } `yaml:"files"` - Branches struct { - CreatePullRequest string `yaml:"createPullRequest"` - CheckoutBranchByName string `yaml:"checkoutBranchByName"` - ForceCheckoutBranch string `yaml:"forceCheckoutBranch"` - RebaseBranch string `yaml:"rebaseBranch"` - RenameBranch string `yaml:"renameBranch"` - MergeIntoCurrentBranch string `yaml:"mergeIntoCurrentBranch"` - ViewGitFlowOptions string `yaml:"viewGitFlowOptions"` - FastForward string `yaml:"fastForward"` - PushTag string `yaml:"pushTag"` - SetUpstream string `yaml:"setUpstream"` - FetchRemote string `yaml:"fetchRemote"` - } `yaml:"branches"` - Commits struct { - SquashDown string `yaml:"squashDown"` - RenameCommit string `yaml:"renameCommit"` - RenameCommitWithEditor string `yaml:"renameCommitWithEditor"` - ViewResetOptions string `yaml:"viewResetOptions"` - MarkCommitAsFixup string `yaml:"markCommitAsFixup"` - CreateFixupCommit string `yaml:"createFixupCommit"` - SquashAboveCommits string `yaml:"squashAboveCommits"` - MoveDownCommit string `yaml:"moveDownCommit"` - MoveUpCommit string `yaml:"moveUpCommit"` - AmendToCommit string `yaml:"amendToCommit"` - PickCommit string `yaml:"pickCommit"` - RevertCommit string `yaml:"revertCommit"` - CherryPickCopy string `yaml:"cherryPickCopy"` - CherryPickCopyRange string `yaml:"cherryPickCopyRange"` - PasteCommits string `yaml:"pasteCommits"` - TagCommit string `yaml:"tagCommit"` - CheckoutCommit string `yaml:"checkoutCommit"` - ResetCherryPick string `yaml:"resetCherryPick"` - } `yaml:"commits"` - Stash struct { - PopStash string `yaml:"popStash"` - } `yaml:"stash"` - CommitFiles struct { - CheckoutCommitFile string `yaml:"checkoutCommitFile"` - } `yaml:"commitFiles"` - Main struct { - ToggleDragSelect string `yaml:"toggleDragSelect"` - ToggleDragSelectAlt string `yaml:"toggleDragSelect-alt"` - ToggleSelectHunk string `yaml:"toggleSelectHunk"` - PickBothHunks string `yaml:"pickBothHunks"` - } `yaml:"main"` - Submodules struct { - Init string `yaml:"init"` - Update string `yaml:"update"` - BulkMenu string `yaml:"bulkMenu"` - } `yaml:"submodules"` - } `yaml:"keybinding"` - // OS determines what defaults are set for opening files and links - OS OSConfig `yaml:"os,omitempty"` - DisableStartupPopups bool `yaml:"disableStartupPopups"` - CustomCommands []CustomCommand `yaml:"customCommands"` - Services map[string]string `yaml:"services"` +type CustomCommandPrompt struct { + Type string `yaml:"type"` // one of 'input' and 'menu' + Title string `yaml:"title"` + + // this only apply to prompts + InitialValue string `yaml:"initialValue"` + + // this only applies to menus + Options []CustomCommandMenuOption +} + +type CustomCommandMenuOption struct { + Name string `yaml:"name"` + Description string `yaml:"description"` + Value string `yaml:"value"` +} + +func GetDefaultConfig() *UserConfig { + return &UserConfig{ + Gui: GuiConfig{ + ScrollHeight: 2, + ScrollPastBottom: true, + MouseEvents: true, + SkipUnstageLineWarning: false, + SkipStashWarning: true, + SidePanelWidth: 0.3333, + ExpandFocusedSidePanel: false, + MainPanelSplitMode: "flexible", + Theme: ThemeConfig{ + LightTheme: false, + ActiveBorderColor: []string{"green", "bold"}, + InactiveBorderColor: []string{"white"}, + OptionsTextColor: []string{"blue"}, + SelectedLineBgColor: []string{"default"}, + SelectedRangeBgColor: []string{"blue"}, + }, + CommitLength: CommitLengthConfig{Show: true}, + }, + Git: GitConfig{ + Paging: PagingConfig{ + ColorArg: "always", + Pager: "", + UseConfig: false}, + Merging: MergingConfig{ + ManualCommit: false, + Args: "", + }, + Pull: PullConfig{ + Mode: "merge", + }, + SkipHookPrefix: "WIP", + AutoFetch: true, + BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --", + OverrideGpg: false, + DisableForcePushing: false, + CommitPrefixes: map[string]CommitPrefixConfig(nil), + }, + Update: UpdateConfig{ + Method: "prompt", + Days: 14, + }, + Reporting: "undetermined", + SplashUpdatesIndex: 0, + ConfirmOnQuit: false, + QuitOnTopLevelReturn: true, + Keybinding: KeybindingConfig{ + Universal: KeybindingUniversalConfig{ + Quit: "q", + QuitAlt1: "<c-c>", + Return: "<esc>", + QuitWithoutChangingDirectory: "Q", + TogglePanel: "<tab>", + PrevItem: "<up>", + NextItem: "<down>", + PrevItemAlt: "k", + NextItemAlt: "j", + PrevPage: ",", + NextPage: ".", + GotoTop: "<", + GotoBottom: ">", + PrevBlock: "<left>", + NextBlock: "<right>", + PrevBlockAlt: "h", + NextBlockAlt: "l", + NextMatch: "n", + PrevMatch: "N", + StartSearch: "/", + OptionMenu: "x", + OptionMenuAlt1: "?", + Select: "<space>", + GoInto: "<enter>", + Confirm: "<enter>", + ConfirmAlt1: "y", + Remove: "d", + New: "n", + Edit: "e", + OpenFile: "o", + ScrollUpMain: "<pgup>", + ScrollDownMain: "<pgdown>", + ScrollUpMainAlt1: "K", + ScrollDownMainAlt1: "J", + ScrollUpMainAlt2: "<c-u>", + ScrollDownMainAlt2: "<c-d>", + ExecuteCustomCommand: ":", + CreateRebaseOptionsMenu: "m", + PushFiles: "P", + PullFiles: "p", + Refresh: "R", + CreatePatchOptionsMenu: "<c-p>", + NextTab: "]", + PrevTab: "[", + NextScreenMode: "+", + PrevScreenMode: "_", + Undo: "z", + Redo: "<c-z>", + FilteringMenu: "<c-s>", + DiffingMenu: "W", + DiffingMenuAlt: "<c-e>", + CopyToClipboard: "<c-o>", + }, + Status: KeybindingStatusConfig{ + CheckForUpdate: "u", + RecentRepos: "<enter>", + }, + Files: KeybindingFilesConfig{ + CommitChanges: "c", + CommitChangesWithoutHook: "w", + AmendLastCommit: "A", + CommitChangesWithEditor: "C", + IgnoreFile: "i", + RefreshFiles: "r", + StashAllChanges: "s", + ViewStashOptions: "S", + ToggleStagedAll: "a", + ViewResetOptions: "D", + Fetch: "f", + }, + Branches: KeybindingBranchesConfig{ + CreatePullRequest: "o", + CheckoutBranchByName: "c", + ForceCheckoutBranch: "F", + RebaseBranch: "r", + RenameBranch: "R", + MergeIntoCurrentBranch: "M", + ViewGitFlowOptions: "i", + FastForward: "f", + PushTag: "P", + SetUpstream: "u", + FetchRemote: "f", + }, + Commits: KeybindingCommitsConfig{SquashDown: "s", + RenameCommit: "r", + RenameCommitWithEditor: "R", + ViewResetOptions: "g", + MarkCommitAsFixup: "f", + CreateFixupCommit: "F", + SquashAboveCommits: "S", + MoveDownCommit: "<c-j>", + MoveUpCommit: |