From 377fe0dd3db0d163b6076d10ec0c39a5f56f5765 Mon Sep 17 00:00:00 2001
From: Matei Adriel <rafaeladriel11@gmail.com>
Date: Sun, 22 Oct 2023 01:06:33 +0200
Subject: [PATCH] Update keymap

---
 flake.lock   |  8 +++----
 flake.nix    |  6 +++---
 src/index.ts | 60 ++++++++++++++++++++++++++++++----------------------
 swoop.nix    |  2 +-
 4 files changed, 43 insertions(+), 33 deletions(-)

diff --git a/flake.lock b/flake.lock
index 2ce82ad..19efcc3 100644
--- a/flake.lock
+++ b/flake.lock
@@ -17,10 +17,10 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1671883564,
-        "narHash": "sha256-C15oAtyupmLB3coZY7qzEHXjhtUx/+77olVdqVMruAg=",
-        "path": "/nix/store/0b1s6l5i9izifskg8kgc29jn5bzgdjnv-source",
-        "rev": "dac57a4eccf1442e8bf4030df6fcbb55883cb682",
+        "lastModified": 1695360818,
+        "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=",
+        "path": "/nix/store/09yvj6yyxspzfivv91bcxwrjxawpk1g2-source",
+        "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f",
         "type": "path"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 68c2049..94c4a00 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,17 +2,17 @@
   description = "Kayboard layout diagram generation";
   inputs.flake-utils.url = "github:numtide/flake-utils";
 
-  outputs = { nixpkgs, flake-utils, ... }@inputs:
+  outputs = { nixpkgs, flake-utils, ... }:
     flake-utils.lib.eachDefaultSystem
       (system:
         let
           pkgs = nixpkgs.legacyPackages.${system};
-          swoop = pkgs.callPackage ./swoop.nix {};
+          swoop = pkgs.callPackage ./swoop.nix { };
         in
         rec {
           packages.swoop = swoop;
           defaultPackage = packages.swoop;
-          devShell = pkgs.callPackage ./shell.nix {};
+          devShell = pkgs.callPackage ./shell.nix { };
         }
       );
 }
diff --git a/src/index.ts b/src/index.ts
index 0f89da2..e9339fb 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -45,7 +45,7 @@ function indent(amount: number, text: string) {
 function tag(
   name: string,
   attributes: Record<string, string | number | undefined>,
-  children: string = ""
+  children: string = "",
 ) {
   const attributeString = Object.entries(attributes)
     .map(([k, v]) => `${k}="${v}"`)
@@ -74,7 +74,7 @@ function textContents(input: string): string {
 function renderKey(
   visual: VisualKey,
   key: KeyboardKey,
-  colorscheme: LayoutColorscheme
+  colorscheme: LayoutColorscheme,
 ) {
   const centerX = visual.position[0] + visual.size[0] / 2;
   const centerY = visual.position[1] + visual.size[1] / 2;
@@ -117,7 +117,7 @@ function renderKey(
           fill: textColor(key.main, colorscheme.mainLayerColor),
           ...textAttribs,
         },
-        textContents(key.main)
+        textContents(key.main),
       ),
       tag(
         "text",
@@ -128,7 +128,7 @@ function renderKey(
           "font-size": "66%",
           ...textAttribs,
         },
-        textContents(key.tlLayer)
+        textContents(key.tlLayer),
       ),
       tag(
         "text",
@@ -140,7 +140,7 @@ function renderKey(
           ...textAttribs,
           "text-anchor": "end",
         },
-        textContents(key.trLayer)
+        textContents(key.trLayer),
       ),
       tag(
         "text",
@@ -152,9 +152,9 @@ function renderKey(
           ...textAttribs,
           "text-anchor": "start",
         },
-        textContents(key.blLayer)
+        textContents(key.blLayer),
       ),
-    ].join("\n")
+    ].join("\n"),
   );
 }
 
@@ -168,12 +168,14 @@ function renderLayout(layout: Layout) {
         2 * layout.padding + layout.size[0],
         2 * layout.padding + layout.size[1],
       ].join(" "),
+      xmlns: "http://www.w3.org/2000/svg",
+      "xmlns:xlink": "http://www.w3.org/1999/xlink",
     },
     layout.visual
       .map((key, index) =>
-        renderKey(key, layout.keys[index], layout.colorscheme)
+        renderKey(key, layout.keys[index], layout.colorscheme),
       )
-      .join("\n")
+      .join("\n"),
   );
 }
 
@@ -209,7 +211,7 @@ function neg(v: Vec2): Vec2 {
 function thumbs(
   at: Vec2,
   reverse: boolean,
-  thumbRotation = reverse ? -15 : 15
+  thumbRotation = reverse ? -15 : 15,
 ): VisualLayout {
   // Distance between thumb key centers
   const factor = keySize;
@@ -238,7 +240,7 @@ function key(
   main: string,
   tlLayer = "",
   trLayer = "",
-  blLayer = ""
+  blLayer = "",
 ): KeyboardKey {
   return { main, tlLayer, trLayer, blLayer };
 }
@@ -269,28 +271,36 @@ const layout: Layout = {
   keys: [
     [
       key("Q", "!", "1", "f1"),
-      key("A", "(", "6", "f6"),
-      key("Z", ")", "", "f11"),
+      key("A", "&lt;", "6", "f6"),
+      key("X", "&gt;", "", "f11"),
     ],
     [
       key("W", "@", "2", "f2"),
-      key("S", "[", "7", "f7"),
-      key("X", "]", "", "f12"),
+      key("R", "(", "7", "f7"),
+      key("C", ")", "", "f12"),
     ],
-    [key("E", "#", "3", "f3"), key("D", "{", "8", "f8"), key("C", "}")],
-    [key("R", "$", "4", "f4"), key("F", "&lt", "9", "f9"), key("V", "&gt")],
-    [key("T", "%", "5", "f5"), key("G", ";", "0", "f10"), key("B", "")],
+    [key("F", "#", "3", "f3"), key("S", "[", "8", "f8"), key("D", "]")],
+    [key("P", "$", "4", "f4"), key("T", "{", "9", "f9"), key("V", "}")],
+    [key("B", "%", "5", "f5"), key("G", "-", "0", "f10"), key("Z", "—")],
     [key("TR", "", ""), key("␣", "", "")],
     [key("⇧", "", ""), key("TL", "", "")],
-    [key("Y", "^", ""), key("H", "-", "◄", "😱"), key("N", "?", "", "🎮")],
+    [key("J", "^", "🏠"), key("M", "?", "◄", "😱"), key("K", "", "", "🎮")],
     [
-      key("U", "&", "", "🔊"),
-      key("J", "_", "▼", "🔉"),
-      key("M", "/", "", "🔇"),
+      key("L", "&amp;", "⏬", "🔊"),
+      key("N", "_", "▼", "🔉"),
+      key("H", "|", "", "🔇"),
+    ],
+    [key("U", "*", "⏫", "🔆"), key("E", "/", "▲", "🔅"), key(",", "\\", "")],
+    [
+      key("Y", "~", "end", "⏪"),
+      key("I", "=", "►", "⏯️"),
+      key(".", "+", "", "⏩"),
+    ],
+    [
+      key(":", "`", "del", "copy"),
+      key("O", ";", "", "paste"),
+      key("'", '"', "", "cut"),
     ],
-    [key("I", "*", "", "🔆"), key("K", "=", "▲", "🔅"), key(",", "\\", "")],
-    [key("O", "~", "", "⏪"), key("L", "+", "►", "⏯️"), key(".", "|", "", "⏩")],
-    [key("P", "`", "del"), key(":", "", ""), key('"', "'", "")],
   ].flat(),
   padding: 20,
   size: [keySize * 12, keySize * 6],
diff --git a/swoop.nix b/swoop.nix
index 5bf268c..0d8d355 100644
--- a/swoop.nix
+++ b/swoop.nix
@@ -12,7 +12,7 @@ pkgs.stdenv.mkDerivation {
   ];
 
   buildPhase = ''
-    esbuild $src/index.ts --bundle --outfile=./out.js
+    esbuild $src/index.ts --bundle --outfile=./out.js --platform=node
   '';
 
   installPhase = ''