diff --git a/platforms/home-manager/modules/nmasur/presets/programs/lazygit.nix b/platforms/home-manager/modules/nmasur/presets/programs/lazygit.nix new file mode 100644 index 0000000..3159d2d --- /dev/null +++ b/platforms/home-manager/modules/nmasur/presets/programs/lazygit.nix @@ -0,0 +1,96 @@ +{ + config, + pkgs, + lib, + ... +}: + +let + cfg = config.nmasur.presets.programs.lazygit; +in + +{ + options.nmasur.presets.programs.lazygit.enable = lib.mkEnableOption "Lazygit git TUI"; + + config = lib.mkIf cfg.enable { + programs.lazygit = { + enable = true; + settings = { + git.paging = { + # useConfig = true; + pager = "${pkgs.git}/share/git/contrib/diff-highlight/diff-highlight"; + }; + os = { + edit = "${config.home.sessionVariables.EDITOR} {{filename}}"; + editAtLine = "${config.home.sessionVariables.EDITOR} {{filename}}:{{line}}"; + editAtLineAndWait = "${config.home.sessionVariables.EDITOR} {{filename}}:{{line}}"; + openDirInEditor = "${config.home.sessionVariables.EDITOR}"; + open = "${config.home.sessionVariables.EDITOR} {{filename}}"; + }; + customCommands = [ + { + key = "N"; + context = "files"; + command = "git add -N {{.SelectedFile.Name}}"; + } + { + key = ""; + context = "global"; + command = + let + openGitUrl = pkgs.writeShellScriptBin "open-git-url" '' + # Try to get the remote URL using two common methods; suppress stderr for individual commands. + # "git remote get-url origin" is generally preferred. + # "git config --get remote.origin.url" is a fallback. + URL=$(git remote get-url origin 2>/dev/null || git config --get remote.origin.url 2>/dev/null); + + # Check if a URL was actually found. + if [ -z "$URL" ]; then + # Send error message to stderr so it might appear in lazygit logs or notifications. + echo "Lazygit: Could not determine remote URL for 'origin'." >&2; + # Exit with an error code. + exit 1; + fi; + + # Check if the URL is a GitHub SSH URL and convert it to HTTPS. + # This uses echo and grep to check for "@github.com" and then sed for transformation. + if echo "$URL" | grep -q "@github.com:"; then + # Transform git@github.com:user/repo.git to https://github.com/user/repo + # The first sed handles the main transformation. + # The second sed removes a trailing .git if present, for a cleaner URL. + URL=$(echo "$URL" | sed "s|git@github.com:|https://github.com/|" | sed "s|\.git$||"); + # Optional: Log the transformation for debugging. + # echo "Lazygit: Transformed GitHub SSH URL to '$URL'" >&2; + fi; + + # Determine the operating system. + OS="$(uname -s)"; + + # Optional: Echo for debugging. This might appear in lazygit logs or as a brief message. + # Remove " >&2" if you want to see it as a potential success message in lazygit UI (if it shows stdout). + # echo "Lazygit: Opening URL '$URL' on '$OS'" >&2; + + # Execute the appropriate command to open the URL based on the OS. + case "$OS" in + Darwin*) # macOS + open "$URL";; + Linux*) # Linux + xdg-open "$URL";; + *) # Unsupported OS + echo "Lazygit: Unsupported OS ('$OS'). Could not open URL." >&2; + exit 1;; + esac + ''; + in + lib.getExe openGitUrl; + } + ]; + }; + }; + + programs.fish.shellAbbrs = { + lg = "lazygit"; + }; + + }; +} diff --git a/platforms/home-manager/modules/nmasur/profiles/experimental.nix b/platforms/home-manager/modules/nmasur/profiles/experimental.nix index fcdb862..8c2fb22 100644 --- a/platforms/home-manager/modules/nmasur/profiles/experimental.nix +++ b/platforms/home-manager/modules/nmasur/profiles/experimental.nix @@ -20,6 +20,7 @@ in ghostty.enable = lib.mkDefault true; helix.enable = lib.mkDefault true; zellij.enable = lib.mkDefault true; + lazygit.enable = lib.mkDefault true; }; home.packages = [ @@ -37,7 +38,6 @@ in programs.gh-dash.enable = lib.mkDefault true; programs.himalaya.enable = lib.mkDefault true; - programs.lazygit.enable = lib.mkDefault true; }; }