diff --git a/flake.nix b/flake.nix index ce80d94..cdf9efd 100644 --- a/flake.nix +++ b/flake.nix @@ -52,6 +52,7 @@ ./modules/zsh.nix ./modules/ssh.nix ./modules/git.nix + ./modules/lazygit.nix ./modules/papis.nix ./modules/termscp.nix ./modules/rsync.nix @@ -77,7 +78,6 @@ openssh papis claude-code.packages.aarch64-darwin.claude-code - lazygit ncdu git-credential-oauth rsync diff --git a/modules/lazygit.nix b/modules/lazygit.nix new file mode 100644 index 0000000..afaaf4f --- /dev/null +++ b/modules/lazygit.nix @@ -0,0 +1,354 @@ +{ config, pkgs, ... }: + +{ + programs.lazygit = { + enable = true; + settings = { + gui = { + # Gruvbox dark theme colors + theme = { + # Light text on dark backgrounds + lightTheme = false; + + # Active panel border color (bright blue) + activeBorderColor = ["#458588" "bold"]; + + # Inactive panel border color (dark gray) + inactiveBorderColor = ["#504945"]; + + # Search text color + searchingActiveBorderColor = ["#fabd2f" "bold"]; + + # Options text color + optionsTextColor = ["#83a598"]; + + # Selected line colors + selectedLineBgColor = ["#3c3836"]; + selectedRangeBgColor = ["#3c3836"]; + + # Cherry picked commit colors + cherryPickedCommitBgColor = ["#458588"]; + cherryPickedCommitFgColor = ["#ebdbb2"]; + + # Marked base commit for rebase + markedBaseCommitBgColor = ["#fabd2f"]; + markedBaseCommitFgColor = ["#282828"]; + + # Unstagged changes color + unstagedChangesColor = ["#fb4934"]; + + # Default text color + defaultFgColor = ["#ebdbb2"]; + }; + + # UI settings + showFileTree = true; + showListFooter = true; + showRandomTip = false; + showCommandLog = true; + showBottomLine = true; + showPanelJumps = true; + commandLogSize = 8; + splitDiff = "auto"; + + # Screen mode (previously windowSize) + screenMode = "normal"; + + # Border style + border = "rounded"; + + # Commit length + commitLength = { + show = true; + }; + + # Mouse support + mouseEvents = true; + + # Skip discard changes warning + skipDiscardChangeWarning = false; + + # Skip stash warning + skipStashWarning = false; + + # Side panel width + sidePanelWidth = 0.3333; + + # Expand focused side panel + expandFocusedSidePanel = false; + + # Main panel split mode + mainPanelSplitMode = "flexible"; + + # Enlarge active view + enlargedSideViewLocation = "left"; + + # Language + language = "en"; + + # Emoji + nerdFontsVersion = "3"; + + # Diff context size + diffContextSize = 3; + }; + + # Git settings + git = { + paging = { + colorArg = "always"; + pager = "delta --dark --paging=never"; + }; + + # Commit settings + commit = { + signOff = false; + autoWrapCommitMessage = true; + autoWrapWidth = 72; + }; + + # Merge settings + merging = { + manualCommit = false; + args = ""; + }; + + # Skip hook prefix + skipHookPrefix = "WIP"; + + # Auto fetch + autoFetch = true; + autoRefresh = true; + + # Branch log cmd + branchLogCmd = "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --"; + + # All branches log cmds (array format) + allBranchesLogCmds = [ + "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium" + ]; + + # Disable force pushing + disableForcePushing = false; + + # Commit prefixes + commitPrefixes = {}; + + # Parse emoji + parseEmoji = false; + + # Log settings + log = { + order = "topo-order"; + showGraph = "always"; + showWholeGraph = false; + }; + }; + + # Refresher settings + refresher = { + refreshInterval = 10; + fetchInterval = 60; + }; + + # Update settings + update = { + method = "never"; + }; + + # Confirmation on quit + confirmOnQuit = false; + + # Quit on top level return + quitOnTopLevelReturn = false; + + # Keybindings + keybinding = { + universal = { + quit = "q"; + quit-alt1 = ""; + return = ""; + quitWithoutChangingDirectory = "Q"; + togglePanel = ""; + prevItem = ""; + nextItem = ""; + prevItem-alt = "k"; + nextItem-alt = "j"; + prevPage = ","; + nextPage = "."; + scrollLeft = "H"; + scrollRight = "L"; + gotoTop = "<"; + gotoBottom = ">"; + toggleRangeSelect = "v"; + rangeSelectDown = ""; + rangeSelectUp = ""; + prevBlock = ""; + nextBlock = ""; + prevBlock-alt = "h"; + nextBlock-alt = "l"; + nextBlock-alt2 = ""; + prevBlock-alt2 = ""; + jumpToBlock = ["1" "2" "3" "4" "5"]; + nextMatch = "n"; + prevMatch = "N"; + startSearch = "/"; + optionMenu = "?"; + optionMenu-alt1 = "x"; + select = ""; + goInto = ""; + confirm = ""; + confirmInEditor = ""; + remove = "d"; + new = "n"; + edit = "e"; + openFile = "o"; + scrollUpMain = ""; + scrollDownMain = ""; + scrollUpMain-alt1 = "K"; + scrollDownMain-alt1 = "J"; + scrollUpMain-alt2 = ""; + scrollDownMain-alt2 = ""; + executeShellCommand = ":"; + createRebaseOptionsMenu = "m"; + + # Diff view + diffingMenu = "W"; + diffingMenu-alt = ""; + copyToClipboard = ""; + submitEditorText = ""; + extrasMenu = "@"; + toggleWhitespaceInDiffView = ""; + increaseContextInDiffView = "}"; + decreaseContextInDiffView = "{"; + }; + + # Status panel + status = { + checkForUpdate = "u"; + recentRepos = ""; + allBranchesLogGraph = "a"; + }; + + # Files panel + files = { + commitChanges = "c"; + commitChangesWithoutHook = "w"; + amendLastCommit = "A"; + commitChangesWithEditor = "C"; + findBaseCommitForFixup = ""; + confirmDiscard = "x"; + ignoreFile = "i"; + refreshFiles = "r"; + stashAllChanges = "s"; + viewStashOptions = "S"; + toggleStagedAll = "a"; + viewResetOptions = "D"; + fetch = "f"; + toggleTreeView = "`"; + openMergeTool = "M"; + openStatusFilter = ""; + }; + + # Branches panel + branches = { + createPullRequest = "o"; + viewPullRequestOptions = "O"; + copyPullRequestURL = ""; + checkoutBranchByName = "c"; + forceCheckoutBranch = "F"; + rebaseBranch = "r"; + renameBranch = "R"; + mergeIntoCurrentBranch = "M"; + viewGitFlowOptions = "i"; + fastForward = "f"; + createTag = "T"; + pushTag = "P"; + setUpstream = "u"; + fetchRemote = "f"; + }; + + # Worktrees + worktrees = { + viewWorktreeOptions = "w"; + }; + + # Commits panel + commits = { + squashDown = "s"; + renameCommit = "r"; + renameCommitWithEditor = "R"; + viewResetOptions = "g"; + markCommitAsFixup = "f"; + createFixupCommit = "F"; + squashAboveCommits = "S"; + moveDownCommit = ""; + moveUpCommit = ""; + amendToCommit = "A"; + resetCommitAuthor = "a"; + pickCommit = "p"; + revertCommit = "t"; + cherryPickCopy = "C"; + pasteCommits = "V"; + markCommitAsBaseForRebase = "B"; + tagCommit = "T"; + checkoutCommit = ""; + resetCherryPick = ""; + copyCommitAttributeToClipboard = "y"; + openLogMenu = ""; + openInBrowser = "o"; + viewBisectOptions = "b"; + startInteractiveRebase = "i"; + }; + + # Stash panel + stash = { + popStash = "g"; + renameStash = "r"; + }; + + # Commit files panel + commitFiles = { + checkoutCommitFile = "c"; + }; + + # Main panel + main = { + toggleSelectHunk = "a"; + pickBothHunks = "b"; + editSelectHunk = "E"; + }; + + # Submodules panel + submodules = { + init = "i"; + update = "u"; + bulkMenu = "b"; + }; + + # Commit message panel + commitMessage = { + commitMenu = ""; + }; + }; + + # OS settings + os = { + open = "open {{filename}}"; + openLink = "open {{link}}"; + }; + + # Disable startup popup + disableStartupPopups = false; + + # Custom commands + customCommands = []; + + # Services + services = {}; + + # Note to self + notARepository = "prompt"; + }; + }; +}