startpage-sort.nix (1181B)
1 {pkgs, ...}: let 2 startpage-sort = pkgs.writeShellScriptBin "startpage-sort" '' 3 set -euo pipefail 4 5 source_file="$HOME/vault/src/startpage/index.html" 6 backup="''${source_file}.bak" 7 8 cp "$source_file" "$backup" 9 10 awk ' 11 function ci_cmp(i1, v1, i2, v2, a, b) { 12 a = tolower(v1) 13 b = tolower(v2) 14 return (a < b ? -1 : a > b ? 1 : 0) 15 } 16 17 BEGIN { 18 PROCINFO["sorted_in"] = "ci_cmp" 19 in_bm = 0 20 in_cm = 0 21 nb = 0 22 nc = 0 23 } 24 25 # Start of bookmarks block 26 /^ const bookmarks = \[$/ { 27 in_bm = 1 28 print 29 next 30 } 31 32 # End of bookmarks block 33 in_bm && /^\s+\];$/ { 34 for (i in bookmarks) print bookmarks[i] 35 print 36 in_bm = 0 37 delete bookmarks 38 next 39 } 40 41 # Inside bookmarks block 42 in_bm { 43 bookmarks[$0] = $0 44 next 45 } 46 47 # Start of commandMap block 48 /^ const commandMap = {$/ { 49 in_cm = 1 50 print 51 next 52 } 53 54 # End of commandMap block 55 in_cm && /^\s+\};$/ { 56 for (i in commands) print commands[i] 57 print 58 in_cm = 0 59 delete commands 60 next 61 } 62 63 # Inside commandMap block 64 in_cm { 65 commands[$0] = $0 66 next 67 } 68 69 # Default 70 { 71 print 72 } 73 ' "$backup" > "$source_file" 74 ''; 75 in { 76 environment.systemPackages = [startpage-sort]; 77 }