mirror of
https://github.com/nmasur/dotfiles
synced 2025-05-10 01:55:52 +00:00
add lazygit as a preset with custom keybinds
This commit is contained in:
parent
d59692c813
commit
aa6c91b65c
@ -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 = "<a-enter>";
|
||||
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";
|
||||
};
|
||||
|
||||
};
|
||||
}
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user