Contents
Recurse Center Checkins
My occasional/semi-regular checkins that I wrote to account my time at Recurse
Center. The point of checkins are to keep track of what I work on, who I work
with, and the social events I go to. These are short but down to the point
summaries of what I’ve done.
2024-08-02
Browser Phone Presentation Link
What I’ve done
- Browser Phone Stuff:
- So much progress! See the slides for more.
- Paired with [[@Sam Woldy]] on handling Janus Gateway h264 encoding — we
figured out how to force Janus to send iFrames when you load the page by
toggling
videobufferkf = true
.
- Wrapped it all in typescript with bun (as all things
should be). Started using
fluent ffmpeg which is a
super cool ffmpeg wrapper for typescript. Also learned about
adb-ts, which is something I was
considering making for this project that I no longer have to. Wrapping it
with typescript made it more robust. Who would’ve thought.
- It works! Kinda. I can now stream an android the the browser with very low
latency, it loads almost instantly, and it usually does not lag out over
time. There’s still a bunch of flags and settings I need to adjust though.
- Presented on the progress!
I aimed for 6 seconds per slide, 30 slides. I averaged about 8 :(. This
means that I didn’t get to see if anyone wants to help on the next part:
figuring out how to write typescript C bindings to recreate
scrcpy
’s
custom binary data packets for actually controlling the phone. I’ll be
writing my first lines of C next week hopefully, for the better or the
worse. In the words of scrcpy, “the documentation is the unit tests.” Also
thanks [[@Eric Hayes]] for helping me figure out a bit about c and c
structs. C design patterns do seem a bit funky.
- Later I figured out how to modify media encoder options. Basically there are
two ways I found from reading some java source:
video_codec_options=bitrate-mode=4,latency:float=0.5
basically just add
the constant’s names and their values using this funky syntax. It seems to
do things. The
media codec options
are all here, and you just need to find the string literal values
associated with the constants.
- Edit the java code itself. I figured out enough Gradle to build scrcpy
server. This is important because they decided to hard code some codec
settings that I wanted to change :(
- Starting today to dockerize android emulators with nix. This may finally
convince me to get a more powerful laptop, since it turns out baking docker
images is slow. Or maybe just remote builds on AWS.
- Obsidian Contact Importer
- I use Obsidian for a lot, but one thing that I’ve
wanted to use it for for a while but couldn’t is contact management. I have
a lot of contacts in my phone, and wanted to export them all to schema’d
markdown so that I could load it into Obsidian. There were a few challenges,
like vCards being a pain in the neck to deal with, or handling base64 images
embedded in the vCards, but it works now! You give it a
vcards.vcf
file
and a template.md
and it uses handlebars to produce the output contacts.
- Began pairing with [[Anna Hope|@Anna Hope]] a few weeks ago, and then did
a long pairing session with [[@Eric Hayes|@Eric Hayes]], and afterwards
finally got it working for my needs.
- PR’d
Obsidian @ linking
to make it so that my contacts get prefixed with a literal
@
- This works well enough for my needs now so I will get back to making this
bidirectional (markdown -> vcards) later.
- iClicker Store
- Some professors at my University require iClickers, which are physical
polling devices, for classes. They are really expensive at the book store
but I get them very cheap in bulk so that I can resell them. This week I
shipped iclickwolf.com to facilitate preorderes
for next year. It was my first stripe integration and was a lot of fun to
figure out. Stripe is so easy! My takeaway: the devex for tooling is better
whan the people creating the devex are making money on you using it. I don’t
really like that takeaway though. Also, MUI is great.
2024-07-09
What I’ve done
- Got my Obsidian plugin working! I can edit posts, fetch posts, and more! I can
now do blogging in Obsidian and ship to my website.
- More system configuration — I set up more Hyprland keybinds to deal with
multiple monitors.
- Wrote
some screenshot related scripts.
I’m almost done with a cool
gif
one where I can select a region of my
screen, record a gif, have it copied to clipboard, and then paste it. Bash
scripting with nix is so much fun! You have access to basically every binary
ever. Maybe I’ll give a talk about it.
Social stuff
- Prospect park run with @Seamus Edson (he) (S1’24) and @Seth Walker (he)
(SP2’24). Was a really good pace!
- Board game club! Thanks everyone who came — there’s so many people I won’t be
able to @ everyone. Looks like there’s a lot of Summer-2 board game interest
which is great.
Non programming stuff (new bullet!)
What I want to do
- Finish up Obsidian plugin so I can look into the WebRTC stuff that forever
seems to get pushed back.
- Blog about nix, the obsidian plugin creating process, and a few other things.
- Read Rust book a little — I’ve fallen behind. I left my laptop home today, so
I decided to instead of heading back and forth, do a virtual focused day at
home; it was productive but I look forward to being at the hub again.
Ideas
- Scraping an airline website, making an API for the scraping, then having
notifications for price drops. Predicting flight prices by logging huge
amounts of data this way would be a fun intro to ML project.
2024-07-08
What I’ve done
- Got my Obsidian extension to work for my website for PULLing content. I can
download all my blogs and project posts now, and the images are linked
properly. I had to do a little bit of remark/unified AST stuff to swap out
photo IDs with their filenames, because of how file linking works in Obsidian.
I will probably present on this because it’s so cool!
- Paired with @Joseph Martinez (he) (S1’24) on his medical charting
platform. Was really fun to return to Next.js, it’s
been so long! The bug was that he had an element that was trying to access an
element directly off of
window
, and next
and react
have various
rendering stages where window
doesn’t exist in the global scope. In this
case, we were using a client side component, but the code was being “loaded”
during pre-rendering (and maybe within the virtual DOM after mounting?), and
couldn’t access window
. The error message was obtuse, I’m going to steal
links from Joseph’s
checkin:https://nextjs.org/docs/messages/prerender-error & https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-no-ssr
- Some more neovim config. I’m really happy with my current setup, it’s really
nice now. I definitely want to set up a dap (debugger) soon.
- Did a hello world in rust! I want to start reading “the book” and playing
around a bit. Hope to pair with @Rylee Alanza Lyman (they) (S1’24) to work
on some advent of code problems in rust once I get a little bit more fluent.
- Chatted with Peter (I didn’t get a last name and there’s so many peters!)
about blender stuff. Maybe I’ll return to it and play with the API.
What I want to do
- Still actually get started on webrtc stuff. I’ve been so distracted.
- Starting blogging more. I end up getting too obsessed with the technical side
of my blog than actually blogging!
2024-07-05
What I’ve done
- I implemented everything in
python! Basically, it’s a library that dynamically generates the functions you
import from it, so you can import literally anything from it.
- Some work on an obsidian plugin to sync my website blogs. Paired with
@Thomas Georg Marwitz (he) (S2’24) to work on this a bit, and got to toy
around with debug tools for Obsidian a bit.
- Chatted with @Dennis Owrutsky (he) (S2’24) about his ML project, and about
first class objects / functions in Python. Turns out that my understanding of
what it means for something to be first class was a bit off. Also lead into a
tangent to learn about javascript
symbols
Social stuff
- Talked to @Russell Webb (he) (F1’23) a bit about how he makes checkins
less overwhelming, I might try his approach of reading specific checkins of
people with overlapping interests instead of trying to get myself to read
every single checkin everyone writes.
- Went to @Rylee Alanza Lyman (they) (S1’24)‘s 4th of July party! It was so
much fun to hang out with everyone and meet some new people. So many illegal
fireworks around the area!
- Running group!!!
Ran today with @Carsten Rodin (he) (S1’24) and @Elijah Reissman Kennedy
(he) (S1’24). Was a good run around the park loop. We discussed the idea of
making an IOT locker that locks to bike racks for your backpack when you run
— want to look into how to go about making this.
What I want to do
- Get started looking into how webrdp works, if there’s rust backends for it,
and maybe build a basic front end client for it
- Clean up my android emulator code and look into generating nix to do android
stuff, probably with rust
2024-06-30
Learned about
git submodules! Thanks
@Charles Eckman (he) (SP2’24) for the tip. I have moved out my neovim config
to here and now have it as a submodule in
my nix configuration.
2024-06-27
Lots has happened since my last checkin, so this one’s going to be rather long.
I’m going to try to get into the flow of bi-daily checkins going foward! .
Code stuff:
- Working on wrapping my neovim so that it knows where all my LSPs live. I don’t
want to use
nixnvim
to build my neovim config, since I want to be able to
use the config anywhere. But I also don’t want to pollute my path with LSPs.
So, I basically just wrapped neovim with a shell script to automatically put
LSPs in the path.
- Paired with @Charles Eckman (he) (SP2’24)
- Getting a nix dev environment set up for tawaylon — lots of
LD_LIRBARY_PATH
extension that feels very janky. I want to check [this
out]( https://github.com/NixOS/patchelf)
soon, which is an alternative that patches dynamic linked deps with static
ones automatically.
- Learning a lot about dynamic and static dispatch functions, and a tour of
rust. Thank you again, it was super helpful!
- Mozilla approved
my extension!
It’s a tool to automatically skip past Zoom “open in desktop app” popups,
taking you directly to browser zoom. Google rejected me twice now, so I need
to update the chrome version based on their feedback and try again.
- Went to OS Discussion and talked
about
dynamic linking
and systemd
a bit. I was going to set up a systemd
automount service, but got sidetracked and came in underprepared, so we talked
about the dynamic linking I was doing with Charles, which turned out to be
very OS-related anyway.
- Paired with @Joseph Martinez (he) (S1’24) to work on mktute a bit more and
add tests, but instead we learned about github workflows and set up jest, and
I got to do a bit of janky bash scripting. Was a lot of fun!
- Configured firefox with Nix to build my firefox configuration and extensions
in a pure way.
- Began working on a
Nixified minecraft network
to learn arion and nixpkgs docker (a way to build super minimal base docker
images). Was able to get a really cool missile wars implementation working,
and packaged it with nix and maven. Made a
PR and it looks like
they aren’t as big Nix fans as me. I want to also look into terraform more to
automatically deploy it. The idea is that I’ll use something like Bungeecord,
a reverse proxy for minecraft servers, to manage a network of many nix
packaged dockerized servers running different flavors and versions of the
game.
- Got a look at @Divya _ (she) (S1’24)‘s new elixer raft setup. Exlier
seems super cool. Also chatted about the possibility of having a group next
half batch to watch an opencourseware on distributed systems, which would be
super cool.
- Wrote Hyprland Dash to Dock, a tool
to create hideable ephemeral windows with the Hyprland window manager. It’s
still buggy and implemented a bit jankily, and I kinda want to redo it in rust
to learn some rust. Regardless I need to do some bug fixing.
- Began trying to package KRDP, but wasn’t
successful. I am going to return to this eventually and make a PR with a nix
flake when I get it to work. It’s a wayland native RDP client.
- Learned about Lotion font from @Benjamin Arnav
(he/they) (SP2’24) today, and want to try it out later.
Social stuff
- ALGORAVE. There are so many people to @ so I’ll just leave it at that. Thank
you @Paolo Holinski (he) (SP2’24) for organizing and for everyone who
helped! It was such a fun experience.
- Sunday picnic! Again so many people to @. It was a great experience and was a
ton of fun to hang out with everyone who went!
- Saw space jam (organized by @Peter Kang (he) (SP2’24)). I don’t think I’ve
seen it fully before — it was fun to watch with everyone.
- Went to AITinkerer’s
Prompt Engineering
event with a few people. It was a lot of fun! It was a content to prompt “low
quality” AI models to behave in specific complex ways.
- Niceties and end of batch stuff! It’s too bad that so many people won’t be
here the next 6 weeks. Unfortunately I had to go a little bit early since I
had an important class (I’m taking a late night corporate finance course) I
needed to attend.
Todos
- Fix my sleep schedule! My sleep/breakfast schedule is many hours in the wrong
direction so I need to work on it. This checkin was sent wayy too late at
night :((
- Get back to running! @Elijah Reissman Kennedy (he) (S1’24) and I are going
to put running on the calendar next week at least one day, TBD
- Try out LARPing at
Empire’s Grove. It’s been
many years and I’m excited to get back into it.
- Read over everyone’s #welcomes. I also need to read through a lot of checkins
and get back in sync with Zulip in general.
- I still want to form a git group. I will eventually get around to this!
Probably will post something Monday.
Ideas!
- I want to knock off appetize.io but open
source! I want to make an android emulator that can be used as a web component
and runs android and eventually IOS in a serverless context. Basically, the
idea is to use nix to get an android emulator to run (which is so easy!), and
stream the emulator (probably with
looking glass). I want to have a server that can
spawn lambdas with android emulators, and then returns
iframe
s that are
phone emulators! And I want to learn rust in the process to build the backend.
I don’t really know where to start, so I want to research this tomorrow. This
may be my next half batch project, maybe.
2024-06-11
A checkin! It’s been a while, and a lot of things have happened. I’m going to
get better at being consistent with this. This is a conglomeration of about a
week worth of stuff I’ve done, so it’s on the longer end.
Things I’ve been working on…
- Paired with @Joseph Martinez (he) (S1’24) recently to work on
mktute, a super cool tutorial
generating tool that uses GPT to make tutorials based on git diffs. I started
working to refactor with
typescript
, but quickly ran into import/require
nonsense, and want to spend some time tomorrow figuring out how to properly
deal with having libraries that use both. For what it’s worth, esbuild
seems
to have been able to deal with both at once, and I’ve read that deno
and
bun
can also deal with it, so it might be a node
thing.
- Wrote a chrome extension to skip
past the stupid Zoom popups asking to open in desktop, and take you directly
to the browser zoom website, when you open a Zoom link. I submitted it to the
chrome extensions store, but it’s pending review for now. Hopefully I can
present on it at some point, since it was fun to implement and is genuinely
useful.
- Wrote a nix
flake
for my system with nixosConfigurations
and
homeConfigurations
that are separate, as opposed to using home manager as a
nix module. Here is an example flake that uses it
as a module
and here is one that uses it
as a flake
to see the difference.
- Learned about cookiecutter
and wrote
these project templates for
python3
, typescript
, and java
. Cookiecutter is a super cool tool that
lets you define a project template by actually setting up a project with a
file hierarchy, but using {{ cookiecutter.field }}
anywhere in the template
project (including file names and within files!), along with full jinja
templating code, to do more advanced templating. It lets you specify fields
that you can have interactively prompted for when creating a project, and can
even register hooks to run for project set up. I also added nix
to all these
cookiecutter templates I wrote — learning and then using buildMavenPackage
for java
, buildNpmPackage
for node/npm, and poetry2nix
for python. It
was annoying to learn the APIs for these but seems super powerful now that I
know how to use them. i’m probably going to sign up to present on this for
tool talk on Friday.
- Cleaned up and improved
this Echo360 downloader utility for my
needs. Echo360 is the lecture recording platform my University uses, which
does not come with any way to download lectures. Under the hood it’s just s3,
though (so I’ll be leaving them with a pretty big egress bill, probably, lol).
Lectures have 3-4 streams, where there’s the audio for each stream, along with
a stream for the slideshow itself, which is a video, and the video of the
lectuerer. My version is a
bit cleaner and more safely typed than the original, is much more minimal, and
uses
ffpmeg
to automatically merge together the streams into nice
side-by-side mp4
videos.
Events —
- Joined today’s movie night!
Hacker 1995. Weirdly it got quite low
reviews, but I really enjoyed it. If only systems hacking were as fun as the
movie!
- Did a running event with @Elijah Reissman Kennedy (he) (S1’24) and
@Seamus Edson (he) (S1’24). Also learned about an HTML energy event that I
might attend.
- Signed up for
AI Tinkerers
prompt engineering competition! Planning as part of helping @Joseph Martinez
(he) (S1’24) with mktute also practicing with improving prompting to get
better tutorials.
- Did a board game night take 1! Was a ton of fun, did 7 Wonders, Tsuro, So
Clover, and Coup. Was great to see so many people join, and to try @Isaac
Rhett (he) (S1’24)‘s spicy popcorn. I will also bring popcorn next time (but
it will be a bit more generic)!
- Joined @Finn Boire (he) (S1’19) and a few RCers and a friend to attend the
Twenty Sided Tavern, an interactive DND
event where the audience gets to play along. It was a ton of fun.
- Paired with a few people on learning a bit about how
git
works and more
advanced usages. Got to hear from @Jaseem Abid (he) (S1’24) on how git
objects work and sharding, which was super cool. I’m going to hopefully try to
assemble a git
group soon.
Impossible day!
- I worked with @Divya (she) (S1’24) and @Jacob Zimmerman (he) (S1’24)
on implementing Raft in python for use on raspberry PIs. We were able to draw
out a state transition diagram and table, which we’re using for the
implementation. The idea behind Raft is that we can have a cluster of many
distributed nodes, and the network holds a state, so if any node goes down,
the state can still be accessed. What’s cool about Raft is that there’s a
source of truth, the “leader” of the cluster, which all nodes get their
information from. If the leader node goes down, then there’s a complicated
election process to decide on a new leader, along with reconciliation to
decide which data to consider the most recent.
Stuff I want to do:
- Deploy an API for a mobile app I’ve been working on and learn how to do ssl
with nginx (https). I would like to learn more nginx in general, and how to
use it with docker too.
- Learn how to do nix docker base images.
- Write my own nix home manager module to learn how writing modules and
option
s work.
- Catch up on reading other peoples’ checkins.
- Maybe start a DND campaign if there’s interest, but I’ll have to see about
that.
- Continue working with @Divya (she) (S1’24) on implementing raft in python
- Set up an email signature (like, the thing that is appended to emails), that
looks nice and professional. Maybe also learn how to use
mutt email client.
2024-06-02
It’s been a bit since my last checkin, and I want to try to keep more consistent
going forward. Here’s some things I’ve done…
- Configured neovim with an LSP, completion with CoC and github copilot, added a
file tree and status bar, and set up a bunch of keybinds. I’m starting to use
it as my main IDE and I’m beginning to like it. I really just wish that it was
more reproducable and nixified — this may be the next step I take.
- Figured out how to package things with Python! Paired with @Omar Jatoi (he)
(SP2’24) to work on devshells and building with Python. I was going to go
down a rabbit hole of janking
requirements.txt
to work for my needs by
creating an ad-hoc venv for the build, but realized that this would be impure
and require disabling the sandbox. I figured out that this previously was the
solution, using pypi2nix, but
that’s now abandoned in favor of what seems to be
poetry2nix. I got a
DalleCLI and
ChatGpt CLI working with nix
flakes
, both for devshells
and building! Poetry is an alternative python
dependency and package manager that uses venv behind the scenes, but provides
a really nice UX that includes a lockfile and proper version. Poetry2nix is a
tool that “automagically” (their word!) scans the poetry lockfile and builds
using those exact packages. To get the GPT CLI to work, I also had to deal
with including a different external binary requirement, which I was able to
get working by exporting LD_LIBRARY_PATH = "${pkgs.stdenv.cc.cc.lib}/lib";
(I had to find the export from nixpkgs from a forum post, but this makes
sense). Now I have a terminal GPT and Dalle client!
- Started attending the Tools Talk meetings. Also had dinner with @Paolo
Holinski (he) (SP2’24) and got to talk about ungoogled software and
alternatives, scooter hacking, and a few other things, after attending his
amazing Nix presentation (wherein I learned about
nixeverywhere and
kexec
).
Very excited to learn about overlays this week, try out nix docker containers,
and maybe even nix VMs.
The next steps for me now are:
- Arrange a meeting to practice some git this week. Also maybe finish up the
flexbox froggy pairing group I started last week, and do grid garden.
- Start a board game group! I’m going to kick off a topic in current batches to
gauge interest later today.
- Do some leetcode and research internships. I’m a bit overdue and I really need
to get started.
- Continue work on a react native project that I’m working on for someone. This
is a closed source project that I’m doing for someone, so I don’t really want
to spend my RC time coding the project, but I do want to set up metro with
react native on Nix. I’ve given up on android emulation on Nix for now (and
got a physical android).
- Learn about
direnv
.
- Further configure
hyprland
.
- I want to learn about
special
(yes, that’s the technical name)
workspace
s, which are basically just workspaces that live outside the
usual scroll through workspaces and are “scratchpad” workspaces.
- I need to set up mouse keybinds to drag around floating windows, and polish
my existing keybinds a bit.
- Finish up configuring
waybar
to look nicer and include workspaces. I’m
also considering setting up a workspace matrix for hyprland, and am
considering forking
workspacer, which is a neat
Python utility that adds workspace previews.
- Make a utility to download my school’s lecture recordings as mp4s using ffpmeg
and some puppeteer (probably).
- Figure out why copying and pasting to system clipboard aren’t working with
neovim.
- Read everyone else’s checkins!
2024-05-22
First day at the hub since last summer (okay, I did peep in during spring break
to grab some board games I had left)! It’s great to be back, to have espresso
machine access again, and to be able to socialize with recursers in person.
Tomorrow I will strategically not pack lunch so that I can hang out with
other RC’rs to grab lunch! I will also try to locate an RC tshirt.
I did a lot of meeting-and-greeting today, followed by pairing with @Rylee
Alanza Lyman (they) (S1’24) to configure neovim (which we started, but ended
up pausing because of how much trouble configuring it with raw lua with home
manager was giving me with nix). I still have a long way to go, but it was still
fun to see how configurable and powerful neovim-configuring is. I’ll probably
table this until my nix setup is ready.
Then, I spent most of the rest of the day (and night) trying to get an Android
emulator working on Nix for a React native app I’ve been working on. They say
that android-studio
should work and is already prepackaged, but I haven’t been
able to get it to work. It looks like android studio was having trouble locating
“libpng,” and a friend told me about NixLD to
help binaries locate things when they look in places they aren’t supposed to
look (that’s my understanding). I need to learn more about flakes and figure out
how to hack my way into getting an android emulator to work. I think I’m going
to need to read up on the
ELF file
format.
2024-05-21
Today was a super long day, and I ended up doing a lot. Let’s see…
- Started this morning working with @Charles Eckman (he) (SP2’24) and a few
other current-batch RC’rs who joined in on
Flexbox Froggy, a fun game-like website to help
you learn the ins and outs of flex boxes. It was super interesting to discuss
the implications of flexboxes in right-to-left languages. This included
finally learning the differences between things like
space-between
,
space-around
, space-evenly
, and more! Tomorrow I’m going to try to plan to
finish the tutorials, and then move on to
Grid Garden (a similar game for
grids).
- Went to a formal methods/software foundations book club planning session. It
seems really interesting, and I’m going to attempt a lesson/chapter this week
and see if I’m interested.
- From tinkering I learned that in Vim you need to use \( and \) for the
parenthesis for capture groups in
sed
s and then \<n> to access a specific
captured element. Also, \r for new lines to plop in instead of \n, even though
\n is what you use to find newlines.
- Hopped in a webdev group meeting. I had a ton of fun in a
NextJs group during my last batch, and would love to
stay involved in webdev since it’s still probably my primary interest. I love
typescript!
- Attended the pairing workshop. Last batch it was mastermind, but this time
around it was the game of life. Ended up pairing with @Jonah Vairon (he)
(S1’24) to work on a Python game of life implementation, which we then
continued later on on. We learned about some
super super cool terminal escape character combinations
to allow us to do things like moving around the cursor, delete lines, and
overwrite lines in the terminal.
Here’s the end result of
what we worked on — it is an animation in the terminal itself that
updates in real time to display the game of life. We want to pair later this
week to make a more general purpose library for terminal hackery and
animations, and will probably give a Thursday presentation!
- Helped a friend list a ton of Warhammer figurine kits on ebay. One sold right
away within hours!
- Had a coffee chat with @Oliver Clive-Griffin (SP2’24). Learned about
UV , which basically seems like a
pnpm for Python. It seems super super powerful and useful,
so I will absolutely be fiddling with it.
As for continued progress with configuring my Nix system…
- I ported over my
VSCode
configurations to home-manager
, but still need to
set up my extensions. I want to move over to vscodium
too (an open source
de-microsoft-ed version of VSCode
.
- Setting up more keybinds for dealing with groups with hyprland. Groups are
tabbed windows where you can have multiple windows nested within one window.
I’m trying to replicate the shortcuts I’m used to with popos.
- (related) Paired with @John Isak Texas Falk (he) (W1’23) to give a brief
tour of
hyprland
and also to figure out how to yoink windows out of tabbed
groups. Turns out the dispatcher for this was moveoutofgroup
. Also turns out
that there’s no way to specify a direction to yoink it out by default. Will
need to figure out a hacky solution. John also introduced me to TTY
s
(control + alt + f<n>) to get to specific shells on my computer. I need to
play around with this more — I wonder if I can run multiple instances of
wayland at once.
- Learned about [Sops](-
https://github.com/Mic92/sops-nix)
and Agenix for storing secrets in
Nix
configurations. Will set one of these up later this week or this weekend. If
anyone wants to pair on this DM me!
- Figured out that I can use
import
instead of .imports
to import nix code
directly instead of merging configs with the boilerplate of
home-manager.users.wolf.programs.x.y...
; I can just import specific pieces
of Nix
code. Will play with this more soon.
Now, on my TODO-s:
- Catch up on reading everyone’s checkins
- Finish up organizing a running group for pre-checking runs by the hub
- Learn how
Nix Flakes
work so that I can get an unstable version of
hyprland
working for better configuration.
- Fully configure
neovim
from scratch with lua
. Would love to pair on this
if anyone’s interested!
2024-05-20
Bad sleep deprivation caught up to me and I overslept a bit, but I got to join
meet and greets and am really excited by the usual eclecticity (eclectic-ness?)
of the batch! Judging from welcomes it seems like there’s a lot of other people
also interested in nix, and the other things I’m going to work on. I’m hoping to
start a pre-checkin running group by the hub, and maybe even assemble a nix
group shortly if there’s people interested.
One of my goals this batch is to do daily checkins, every day, and then when the
batch is done somehow put them on my website for reflection.
Today I mostly continued to get my laptop to a slightly more usable state. I’m
in the process of configuring my OS from scratch with hyprland and NixOS (so I
don’t even have a full DE!). It’s been a ton of fun, but literally everything
needs to be configured.
Today, I made some next steps towards general usability…
- I got my audio keys working using
XF86Audio
keys from a
Reddit post
I found. I can even crank my volume above 100% this way! Learning about
XF86 “keyboard
symbols” was neat. Basically they are the non-fn-key-held actions for the top
row keys, like the brightness-up key.
binde =, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+ # -l means limit, since we don't want to go above 140%
binde =, XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-
bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
It took me 30 minutes to figure out that the command after exec
CANNOT have
quotes around it (it silently does not work) 2) Learned about wev
, a command
line wayland keypress viewer that gives you information about the IDs of keys
that get pressed. 3) Figured out how to use hyprland submaps
. Basically, I
can have chords for keybinds, like SUPER + ENTER to enter a “resize” mode, where
I can then use hijk
to scale the active window, and then ESCAPE to leave the
mode. It’s super neat. I still have a lot of bugs to work out. Zulip desktop app
doesn’t launch, possibly because of an actual electron bug. Zulip terminal app
does work, but I need to get used to it. Also, Zoom is super blurry, so I want
to see if running a flatpak version will help. Once I finish getting my laptop
to a more usable place I want to actually study the nix language more.
Oh, and one last thing: I have a Mac Mini that I’m going to set up a bluebubbles
(imessage) server on this wee, at the hub. Basically, it will let me use
imessage in the browser of a linux machine, and on android. If anyone’s
interested in pairing on that later this week at the hub (it involves hacky
things to get around apple nonsense, like disabling disc protection), feel free
to let me know!