nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

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 }