From 7cb12c45826c70c601d10fbd9cc1ddaa0de00176 Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Mon, 29 Dec 2025 21:14:44 +0100 Subject: [PATCH] updated aliases --- modules/home/git.nix | 64 +++++++++++++++++++++++++++++++++++---- modules/home/packages.nix | 26 ++++++++++++++++ 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/modules/home/git.nix b/modules/home/git.nix index 740a08a..c9ae53c 100644 --- a/modules/home/git.nix +++ b/modules/home/git.nix @@ -159,18 +159,70 @@ in # Aliases alias = { + + # Log and history aliases + # ===== + + # Pretty graph log with GPG info graph = "log --graph --color --pretty=format:\"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%C(blue)%x20(%ce)%x20%C(cyan)[gpg:%GK%x20%G?]%C(reset)%n%x20%s%n\""; + # One-line log ll = "log --oneline"; - st = "status -sb"; - cm = "commit -m"; - append = "commit --amend --no-edit"; - sobmodules = "submodule update --init --recursive"; - df = "difftool -t nvimdiff -y"; + # Last commit with stats last = "log -1 --stat"; + + # Status and branch aliases + # ===== + + # Short branch status + st = "status -sb"; + # Formatted local branches br = "branch --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate"; + # Formatted remote branches brr = "branch --remote --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate"; - undo = "reset HEAD~1 --mixed"; + + # Commit aliases + # ===== + + # Commit with message + cm = "commit -m"; + # Amend last commit without editing message + append = "commit --amend --no-edit"; + # Stage all and amend to last commit + aa = "!git add . && git commit --amend --no-edit"; + # Stage all, amend, rebase, and force push with lease + aap = "!f() { git add . && git commit --amend --no-edit && git rebase origin/$(git rev-parse --abbrev-ref HEAD) && git push --force-with-lease; }; f"; + + # Fixup workflow aliases + # ===== + + # Interactive fixup: pick commit with fzf, stage all, create fixup + fixup = "!f() { commit=$(git log --oneline --color=always | fzf --ansi --height 40% | awk '{print $1}'); [ -n \"$commit\" ] && git add . && git commit --fixup=\"$commit\"; }; f"; + # Quick fixup for previous commit + fixup1 = "!git add . && git commit --fixup=HEAD~1"; + # Quick fixup for 2 commits ago + fixup2 = "!git add . && git commit --fixup=HEAD~2"; + # Quick fixup for 3 commits ago + fixup3 = "!git add . && git commit --fixup=HEAD~3"; + # Rebase with autosquash (auto-detects upstream/main/master) + squash-fixups = "!f() { upstream=$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null); if [ -n \"$upstream\" ]; then git rebase -i --autosquash \"$upstream\"; elif git show-ref --verify --quiet refs/remotes/origin/main; then git rebase -i --autosquash origin/main; elif git show-ref --verify --quiet refs/remotes/origin/master; then git rebase -i --autosquash origin/master; else echo \"No upstream branch found. Usage: git squash-fixups \"; fi; }; f"; + # Squash all commits unique to current branch (auto-detects default branch) + squash-all = "!f() { default=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo \"main\"); if ! git show-ref --verify --quiet \"refs/remotes/origin/$default\"; then default=\"master\"; fi; if git show-ref --verify --quiet \"refs/remotes/origin/$default\"; then base=$(git merge-base HEAD \"origin/$default\"); git rebase -i \"$base\"; else echo \"Could not find default branch (main/master). Usage: git squash-all \"; fi; }; f"; + + # Undo and reset aliases + # ===== + + # Interactive undo: pick state from reflog, show diff, confirm before hard reset + undo = "!f() { target=$(git reflog --color=always --date=relative --format=\"%C(yellow)%h%C(reset) %C(cyan)%gd%C(reset) %C(green)%gs%C(reset)\" | fzf --ansi --height 40% --header=\"Select a state to reset to\" | awk '{print $1}'); if [ -n \"$target\" ]; then echo \"\n=== Diff between HEAD and selected state ===\n\"; git diff --color=always HEAD \"$target\"; echo \"\n=== This will discard all changes above ===\n\"; read -p \"Reset to $target? (y/N): \" confirm; if [ \"$confirm\" = \"y\" ] || [ \"$confirm\" = \"Y\" ]; then git reset --hard \"$target\"; else echo \"Reset cancelled.\"; fi; fi; }; f"; + # Unstage all staged files unstage = "reset HEAD --"; + + # Other aliases + # ===== + + # Initialize and update submodules + sobmodules = "submodule update --init --recursive"; + # Diff tool using nvimdiff + df = "difftool -t nvimdiff -y"; }; }; }; diff --git a/modules/home/packages.nix b/modules/home/packages.nix index 030a671..660483a 100644 --- a/modules/home/packages.nix +++ b/modules/home/packages.nix @@ -191,4 +191,30 @@ programs.lazygit = { enable = true; }; + + programs.k9s = { + enable = true; + plugins = { + "edit-secret" = { + shortCut = "Ctrl-X"; + confirm = false; + description = "Edit Decoded Secret"; + scopes = [ "secrets" ]; + command = "sh"; + background = false; + args = [ + "-c" + '' + tempfile=$(mktemp); + secret=$(kubectl get secrets --context $CONTEXT --namespace $NAMESPACE $NAME -o json); + printf '%s\n' $secret | jq '.data | map_values(@base64d)' > $tempfile; + vim $tempfile; + secret_data=$(cat $tempfile | jq -c '. | map_values(@base64)'); + rm $tempfile; + printf '%s\n' $secret | jq -r --argjson secret_data "$secret_data" '.data = $secret_data' | kubectl apply -f -; + '' + ]; + }; + }; + }; }