From 4303a3724eeabe14a78ddc4ab6d6b4b01dc08bf8 Mon Sep 17 00:00:00 2001 From: Mira Kristipati Date: Mon, 25 Sep 2023 23:46:38 -0400 Subject: [PATCH] updates and bugfixes --- astro.config.mjs | 2 +- src/layouts/BlogLayout.astro | 2 +- src/layouts/Layout.astro | 2 +- src/layouts/Post.astro | 2 +- src/pages/index.astro | 2 +- src/pages/links.astro | 2 +- src/pages/posts.astro | 4 +- src/pages/posts/disorganized-notes.md | 54 +++ src/pages/posts/drafts/Wolfgrads bot.md | 12 + src/pages/posts/drafts/modern-unix.md | 11 + src/pages/posts/drafts/self-hosting.md | 8 + src/pages/posts/gpg.md | 424 ++++++++++++++++++++ src/pages/posts/images/minecraft-srv-01.png | Bin 0 -> 16676 bytes src/pages/posts/modern-unix.md | 11 - src/pages/posts/self-hosting.md | 8 - src/styles/global.css | 9 +- submodules/littlelink-extended | 2 +- 17 files changed, 526 insertions(+), 29 deletions(-) create mode 100644 src/pages/posts/disorganized-notes.md create mode 100644 src/pages/posts/drafts/Wolfgrads bot.md create mode 100644 src/pages/posts/drafts/modern-unix.md create mode 100644 src/pages/posts/drafts/self-hosting.md create mode 100644 src/pages/posts/gpg.md create mode 100644 src/pages/posts/images/minecraft-srv-01.png delete mode 100644 src/pages/posts/modern-unix.md delete mode 100644 src/pages/posts/self-hosting.md diff --git a/astro.config.mjs b/astro.config.mjs index 3ab7246..969f37d 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -15,4 +15,4 @@ export default defineConfig({ // No `remarkPlugins` applied }) ] -}); \ No newline at end of file +}); diff --git a/src/layouts/BlogLayout.astro b/src/layouts/BlogLayout.astro index bb8de0c..8324f7a 100644 --- a/src/layouts/BlogLayout.astro +++ b/src/layouts/BlogLayout.astro @@ -11,7 +11,7 @@ const { title } = Astro.props; return localStorage.getItem("theme"); } if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "lunar-witch"; + return "lunar_witch"; } return "Bluloco-Zsh-Light"; })(); diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 229d37d..031da33 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -14,7 +14,7 @@ const { return localStorage.getItem("theme"); } if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "lunar-witch"; + return "lunar_witch"; } return "Bluloco-Zsh-Light"; })(); diff --git a/src/layouts/Post.astro b/src/layouts/Post.astro index cb87e7d..b3edebc 100644 --- a/src/layouts/Post.astro +++ b/src/layouts/Post.astro @@ -14,7 +14,7 @@ const { return localStorage.getItem("theme"); } if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "lunar-witch"; + return "lunar_witch"; } return "Bluloco-Zsh-Light"; })(); diff --git a/src/pages/index.astro b/src/pages/index.astro index 7175f8d..23f996f 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -10,7 +10,7 @@ import Footer from "../components/Footer.astro"; return localStorage.getItem("theme"); } if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "lunar-witch"; + return "lunar_witch"; } return "Bluloco-Zsh-Light"; })(); diff --git a/src/pages/links.astro b/src/pages/links.astro index 30e5649..6f44e8a 100644 --- a/src/pages/links.astro +++ b/src/pages/links.astro @@ -18,7 +18,7 @@ const theme = (() => { return localStorage.getItem("theme"); } if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "lunar-witch"; + return "lunar_witch"; } return "Bluloco-Zsh-Light"; })(); diff --git a/src/pages/posts.astro b/src/pages/posts.astro index 5c288b8..5f56dab 100644 --- a/src/pages/posts.astro +++ b/src/pages/posts.astro @@ -1,8 +1,8 @@ --- import BlogLayout from "../layouts/BlogLayout.astro"; import Card from "../components/Card.astro"; -const mdx_posts = await Astro.glob("../pages/posts/**/*.mdx"); -const md_posts = await Astro.glob("../pages/posts/**/*.md"); +const mdx_posts = await Astro.glob("../pages/posts/*.mdx"); +const md_posts = await Astro.glob("../pages/posts/*.md"); const posts = mdx_posts.concat(md_posts); --- diff --git a/src/pages/posts/disorganized-notes.md b/src/pages/posts/disorganized-notes.md new file mode 100644 index 0000000..5960a03 --- /dev/null +++ b/src/pages/posts/disorganized-notes.md @@ -0,0 +1,54 @@ +--- +title: Disorganized Notes +author: ArgentumCation +layout: ../../layouts/Layout.astro +pubDate: 01 Jan, 1970 +slug: disorganized-notes +--- + +# NixOS/Nix +- Show channels: `sudo nix-channel --list` +- add unstable channel: `sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable unstable` +- update repos: `sudo nix-channel --update; sudo nix search -u` + +# Vim +- Sort selected lines: `:sort` +- Open man page: `:man [command]` or `\K` +- Open URL: `gx` +- Move between splits: `ctrl+w [direction]` +- [vim-commentary](https://github.com/tpope/vim-commentary): `gc [motion]` to comment out +- Case switching: + - `gU` to uppercase + - `gu` to lowercase + -`g~` to toggle +- Substitute: + - `/g` **global** - sub all in line + - `:%s/` - substitute in all lines + - `:5,12s/` substitute from lines 5 to 12 + - `:.,+2s/` substitute this line (`.`) and the next 2 + - `:g/^foo/s/bar/baz/g` substitute all instances of bar with baz on lines beginning with foo + - `/c` - ask for confirmation +- Windows + - `:sp [filename]` horizontal split, optionally open file + - `vsp` vertical split + - `ctrl+w w` move between windows + - `ctrl+w =` resize windows to be equal + - `ctrl+w q` close window + - `ctrl+w ` move window +# McFly + +# SSH +- Set up port forwarding in existing connection: +```sh +$ ~C +ssh> -D [port number] +[Enter] +[Enter] +$ +``` + +# Shell +- `!!:s/foo/bar/`, replace first instance of `foo` with `bar` in the previous command +- `^foo^bar` same thing but shorter and less flexible +- `!foo` rerun last command containing `foo` +- \ No newline at end of file diff --git a/src/pages/posts/drafts/Wolfgrads bot.md b/src/pages/posts/drafts/Wolfgrads bot.md new file mode 100644 index 0000000..e241809 --- /dev/null +++ b/src/pages/posts/drafts/Wolfgrads bot.md @@ -0,0 +1,12 @@ +--- +draft: true +--- + +- Needs to get + - Pronouns + - Program + - College + - Department +- Stretch goal + - receive DMs with verification pic + - probably would just OCR for NC State University \ No newline at end of file diff --git a/src/pages/posts/drafts/modern-unix.md b/src/pages/posts/drafts/modern-unix.md new file mode 100644 index 0000000..80fcd54 --- /dev/null +++ b/src/pages/posts/drafts/modern-unix.md @@ -0,0 +1,11 @@ +--- +title: "Lightning Talks: Welcome to the New Extreme" +author: ArgentumCation +layout: ../../../layouts/Layout.astro +pubDate: 14 Apr, 2023 +slug: modern-unix +draft: true +--- +- fcp +- ugrep +- rg \ No newline at end of file diff --git a/src/pages/posts/drafts/self-hosting.md b/src/pages/posts/drafts/self-hosting.md new file mode 100644 index 0000000..172dac2 --- /dev/null +++ b/src/pages/posts/drafts/self-hosting.md @@ -0,0 +1,8 @@ +--- +title: "Lightning Talks: Self Hosting with Docker-Compose and Cloudflare" +author: ArgentumCation +layout: ../../../layouts/Layout.astro +pubDate: 14 Apr, 2023 +slug: self-hosting +draft: true +--- diff --git a/src/pages/posts/gpg.md b/src/pages/posts/gpg.md new file mode 100644 index 0000000..505a9f5 --- /dev/null +++ b/src/pages/posts/gpg.md @@ -0,0 +1,424 @@ +--- + +title: Intro to GPG +author: ArgentumCation +layout: ../../layouts/Layout.astro +pubDate: 25 Sep, 2023 +slug: gpg +tags: + - encryption + - gpg +--- +## What is GPG + +Paraphrasing from the Arch Wiki, GPG is basically an implementation of PGP (Pretty Good Privacy)/ RFC 4880. You can use it to sign stuff, encrypt stuff, and authenticate yourself (eg over SSH or S/MIME). + +## Using GPG for SSH +1. Generate Master Key + - This is the key you'll use to create subkeys. As such you'll want to keep this safe somewhere + + - ```sh + $ gpg --full-generate-key --expert + gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + Please select what kind of key you want: + (1) RSA and RSA + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) + (7) DSA (set your own capabilities) + (8) RSA (set your own capabilities) + (9) ECC (sign and encrypt) *default* + (10) ECC (sign only) + (11) ECC (set your own capabilities) + (13) Existing key + (14) Existing key from card + Your selection? 11 + ``` + + - We want to pick ECC, since that's the more secure algorithm of these + + - Next, we want to disable signing, since we'll only use this key to make more keys (i.e. we'll be certifying other keys) + + - ```sh + Possible actions for this ECC key: Sign Certify Authenticate + Current allowed actions: Sign Certify + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + + Your selection? S + + Possible actions for this ECC key: Sign Certify Authenticate + Current allowed actions: Certify + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + + Your selection? Q + ``` + + - ``` + Please select which elliptic curve you want: + (1) Curve 25519 *default* + (2) Curve 448 + (3) NIST P-256 + (4) NIST P-384 + (5) NIST P-521 + (6) Brainpool P-256 + (7) Brainpool P-384 + (8) Brainpool P-512 + (9) secp256k1 + Your selection? + Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years + Key is valid for? (0) 1y + Key expires at Tue Sep 24 21:26:26 2024 UTC + Is this correct? (y/N) y + ``` + + - Here we pick an elliptic curve, I just went with the default since I have no opinions about these + - As for expiry date, I just put it at 1 year. You can change this later if you want + + - ``` + GnuPG needs to construct a user ID to identify your key. + + Real name: Mira Velturu + Email address: mira@xn--2dkua.xn--tckwe + Comment: GPG Demo + You selected this USER-ID: + "Mira Velturu (GPG Demo) " + + Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O + ``` + + - The last step is linking your data to the key, and entering a password + + - After this, you'll see something like: + + - ``` + gpg: revocation certificate stored as '/home/mira/.local/share/gnupg/openpgp-revocs.d/6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9.rev' + public and secret key created and signed. + + pub ed25519 2023-09-25 [C] [expires: 2024-09-24] + 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 + uid Mira Velturu (GPG Demo) + ``` + + - The revocation cert lets you mark this key as invalid in case it gets leaked or something similar, keep this safe + + - Double check to make sure the output contains `[C]` and no other letters between the braces + +2. Alright now time to add subkeys so we can Sign/Authenticate/Encrypt stuff + + - First we'll add a subkey for signing and authentication + + - ```sh + $ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 + gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + Secret key is available. + + sec ed25519/58C90C69DF7F1AF9 + created: 2023-09-25 expires: 2024-09-24 usage: C + trust: ultimate validity: ultimate + [ultimate] (1). Mira Velturu (GPG Demo) + ``` + + - that long string you see is from the command where we made the key + - if you lost it, you can find it with `gpg --list-keys` + + - Now we add a subkey, the process is pretty similar to how we made the master key + + - ``` + gpg> addkey + Please select what kind of key you want: + (3) DSA (sign only) + (4) RSA (sign only) + (5) Elgamal (encrypt only) + (6) RSA (encrypt only) + (7) DSA (set your own capabilities) + (8) RSA (set your own capabilities) + (10) ECC (sign only) + (11) ECC (set your own capabilities) + (12) ECC (encrypt only) + (13) Existing key + (14) Existing key from card + Your selection? 11 + + Possible actions for this ECC key: Sign Authenticate + Current allowed actions: Sign + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + + Your selection? A + + Possible actions for this ECC key: Sign Authenticate + Current allowed actions: Sign Authenticate + + (S) Toggle the sign capability + (A) Toggle the authenticate capability + (Q) Finished + + Your selection? Q + Please select which elliptic curve you want: + (1) Curve 25519 *default* + (2) Curve 448 + (3) NIST P-256 + (4) NIST P-384 + (5) NIST P-521 + (6) Brainpool P-256 + (7) Brainpool P-384 + (8) Brainpool P-512 + (9) secp256k1 + Your selection? + Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years + Key is valid for? (0) 1y + Key expires at Tue Sep 24 21:55:51 2024 UTC + Is this correct? (y/N) y + Really create? (y/N) y + gpg> save + ``` + + - The main difference here is that we have both the Sign and Authenticate capabilities + + - Your output will look something like: + + - ``` + sec ed25519/58C90C69DF7F1AF9 + created: 2023-09-25 expires: 2024-09-24 usage: C + trust: ultimate validity: ultimate + ssb ed25519/2A7D7227C6F75FF1 + created: 2023-09-25 expires: 2024-09-24 usage: SA + [ultimate] (1). Mira Velturu (GPG Demo) + ``` + + - We'll need to do this process one more time to create an encryption subkey + + - ```sh + $ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9  36s686ms + gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + Secret key is available. + + sec ed25519/58C90C69DF7F1AF9 + created: 2023-09-25 expires: 2024-09-24 usage: C + trust: ultimate validity: ultimate + ssb ed25519/2A7D7227C6F75FF1 + created: 2023-09-25 expires: 2024-09-24 usage: SA + [ultimate] (1). Mira Velturu (GPG Demo) + ``` + + - ``` + gpg> addkey + Please select what kind of key you want: + (3) DSA (sign only) + (4) RSA (sign only) + (5) Elgamal (encrypt only) + (6) RSA (encrypt only) + (7) DSA (set your own capabilities) + (8) RSA (set your own capabilities) + (10) ECC (sign only) + (11) ECC (set your own capabilities) + (12) ECC (encrypt only) + (13) Existing key + (14) Existing key from card + Your selection? 12 + Please select which elliptic curve you want: + (1) Curve 25519 *default* + (2) Curve 448 + (3) NIST P-256 + (4) NIST P-384 + (5) NIST P-521 + (6) Brainpool P-256 + (7) Brainpool P-384 + (8) Brainpool P-512 + (9) secp256k1 + Your selection? + Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years + Key is valid for? (0) 1y + Key expires at Tue Sep 24 22:03:43 2024 UTC + Is this correct? (y/N) y + Really create? (y/N) y + We need to generate a lot of random bytes. It is a good idea to perform + some other action (type on the keyboard, move the mouse, utilize the + disks) during the prime generation; this gives the random number + generator a better chance to gain enough entropy. + + sec ed25519/58C90C69DF7F1AF9 + created: 2023-09-25 expires: 2024-09-24 usage: C + trust: ultimate validity: ultimate + ssb ed25519/2A7D7227C6F75FF1 + created: 2023-09-25 expires: 2024-09-24 usage: SA + ssb cv25519/2AD22394690453C2 + created: 2023-09-25 expires: 2024-09-24 usage: E + [ultimate] (1). Mira Velturu (GPG Demo) + gpg> save + ``` + +3. Okay now you have a key, lets make it work with SSH now + + - ```sh + $ echo enable-ssh-support >> ~/.local/share/gnupg/gpg-agent.conf + ``` + + - Now you're gonna need to set `SSH_AUTH SOCK` so that we use `gpg-agent` instead of `ssh-agent` for handling SSH credentials (don't worry this won't mess with your existing SSH credentials) + + - Add the following to your `.bashprofile` or `.zshrc` + + - ```sh + unset SSH_AGENT_PID + if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" + fi + export GPG_TTY=$(tty) + gpg-connect-agent updatestartuptty /bye >/dev/null + ``` + + - To use your keys for SSH Auth we'll need to add it to the sshcontrol file + + - ```sh + $ gpg --list-keys --with-keygrip + /home/mira/.local/share/gnupg/pubring.kbx + ----------------------------------------- + pub ed25519 2023-09-25 [C] [expires: 2024-09-24] + 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 + Keygrip = 929E520FB577F34E064E670A6500B21D4835B226 + uid [ultimate] Mira Velturu (GPG Demo) + sub ed25519 2023-09-25 [SA] [expires: 2024-09-24] + Keygrip = 25F5E8427F0F9338A00F98225D125C09EAEBFF24 + sub cv25519 2023-09-25 [E] [expires: 2024-09-24] + Keygrip = ED48EF4A2FDD7F03F779EC58B06B1AB0F4B75652 + ``` + + - `echo 25F5E8427F0F9338A00F98225D125C09EAEBFF24 >> ~/.local/share/gnupg/sshcontrol` + + - run `ssh-add -l` to verify + + - I couldn't actually get this part working but trust me bro :tm: + + - ```sh + $ gpg --export-ssh-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWaV6YjtxALsgpvSoBtyW1nFaTTifOQKQmmj9bQsrtJ openpgp:0xC6F75FF1 + ``` + + - this'll spit out your public SSH Key for the given Key ID + +4. Back up your keys and yeet the master key + + - ```sh + $ gpg -a --export-secret-keys > master-secret-key.asc + $ gpg -a --export-secret-subkeys > sub-secret-keys.asc + $ gpg --delete-secret-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 + $ gpg --import sub-secret-keys.gpg + ``` + + - put these two files somewhere safe, like physical media + +## Encryption + +### Asymmetric + +- Okay this one's pretty simple: + +- ```sh + $ gpg --recipient user-ids --encrypt doc + ``` + + - this will encrypt `doc` using your private key and the public keys of your recipients + +- ```sh + $ gpg --output doc --decrypt doc.gpg + ``` + + - this will decrypt `doc.gpg` if you have a matching private key + +### Symmetric + +- Even easier, no keys required + +- ```sh + $ gpg -c doc + ``` + + - this will encrypt and decrypt `doc` using a pre-shared key + +### Signing + +- Don't @ me I know this isn't actually encryption, but being able to provide signatures is important since it'll show a) the file comes from you, and b) the file hasn't been tampered with or corrupted + +- ```sh + $ gpg --output doc.sig --sign doc + ``` + + - this'll attach the signature to your file and output a compressed version + - I don't really recommend this since `doc.sig` will be a binary blob + - if you want to not compress this and leave the contents of `doc` readable in `doc.sig` use `--clearsign` instead of `--sign` + +- ```sh + $ gpg --output doc.sig --detach-sig doc + ``` + + - This will put just the signature into `doc.sig` which you can send to someone alongside `doc` + +- As for verifying signatures, just do + + - ```sh + $ gpg --verify doc.sig + ``` + + - If this is a detached signature, make sure `doc` is in the same folder + +---- + +## ETC + +- By convention, encrypted files end in `.gpg` if they are binary data, or `.asc` if stored with ASCII Armor (which is basically just base64) +- `$ gpg --list-keys`: list pubkeys in your keyring +- `$ gpg --list-secret-keys`: list private keys in your keyring +- `$ gpg --export --armor --output public-key.asc [email or key ID]`: output your pubkey +- `$ gpg --import public-key.asc`: import a pubkey +- `$ gpg --gen-revoke --armor --output revcert.asc [email or key ID]`: output your revocation key +- `$ gpg --keyserver keyserver.ubuntu.com --send-keys [key ID]`: to send your public key to the ubuntu keyserver + - this seems to be the most popular one, keybase.io also exists among others + - + +--- +## Troubleshooting +- if you run into issues with it not prompting for a password or see `no pinentry` + - try adding `--pinentry=loopback` as a flag for gpg + - for a permanent fix, look into adding a config option in `gpg-agent.conf` + - honestly this should really be a `TODO` cause pinentry is its own mess +---- +## References + +- Adapted from https://gist.github.com/mcattarinussi/834fc4b641ff4572018d0c665e5a94d3 + +- https://wiki.archlinux.org/index.php/GnuPG + + + diff --git a/src/pages/posts/images/minecraft-srv-01.png b/src/pages/posts/images/minecraft-srv-01.png new file mode 100644 index 0000000000000000000000000000000000000000..b830568a419603357ff82a41ef04a1e7acd88129 GIT binary patch literal 16676 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 xx&uD;h&H(X&mN!te>0MQKQsJae<65 literal 0 HcmV?d00001 diff --git a/src/pages/posts/modern-unix.md b/src/pages/posts/modern-unix.md deleted file mode 100644 index 2d28f74..0000000 --- a/src/pages/posts/modern-unix.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Lightning Talks: Welcome to the New Extreme" -author: "ArgentumCation" -layout: ../../layouts/Layout.astro -pubDate: "14 Apr, 2023" -slug: "modern-unix" -draft: true ---- -- fcp -- ugrep -- rg \ No newline at end of file diff --git a/src/pages/posts/self-hosting.md b/src/pages/posts/self-hosting.md deleted file mode 100644 index ff15c92..0000000 --- a/src/pages/posts/self-hosting.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Lightning Talks: Self Hosting with Docker-Compose and Cloudflare" -author: "ArgentumCation" -layout: ../../layouts/Layout.astro -pubDate: "14 Apr, 2023" -slug: "self-hosting" -draft: true ---- \ No newline at end of file diff --git a/src/styles/global.css b/src/styles/global.css index 82dbcc0..45075a3 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -222,6 +222,13 @@ select { border-color: var(--primary-color); } +ul li::before { + content: none; +} +ol p { + display: inline; +} + ol { list-style-type: decimal; } @@ -260,4 +267,4 @@ ol ol ol ol ol ol ol ol ol { ol ol ol ol ol ol ol ol ol ol { list-style-type: hebrew; -} \ No newline at end of file +} diff --git a/submodules/littlelink-extended b/submodules/littlelink-extended index fd2f597..f8a5980 160000 --- a/submodules/littlelink-extended +++ b/submodules/littlelink-extended @@ -1 +1 @@ -Subproject commit fd2f597182e2fc9e5e872b4a798848c013a23d76 +Subproject commit f8a5980b33d3df2476fbdb0d4383bb88483e3415