Threads for RGBCube

    1. 3

      50ms isn’t too bad in the world of Node.js CLIs that normalize a 1-2 second startup time. I love jq, and at this point, it’ll be hard for anything else to replace it. None of the fancy new Rust tools like bat, exa, procs, or sd have replaced their OG Unix offerings for me.

      1. 6

        Things like jq are a bit different because they are treated like shell builtins and a single shell script can easily contain a dozen or more jq invocations to extract different fields from a JSON document. It may even run a couple of jq commands in a loop to extract and process each element in an array. A 50ms start time adds a 1-2s execution time for the script. If you used nodejs, you wouldn’t use shell and would just pay that start-up cost once.

      2. 4

        Nushell replaces jq entirely and makes it much easier to work with structured data entirely, not just json.

        The Nushell open command even supports SQLite!

        1. 2

          Hello fellow Nushell user :) I’ve also replaced 99% of my jq usage with nushell.

      1. 3

        Stylix contains a bunch of application specific modules to automatically configure them while this seems to mostly center around exposing the colors and letting you handle propagating them to the applications that need them.

        1. 3

          I actually want to do that as well, by adding modules to automatically configure every single program. Currently it doesn’t modify anything but exposes some colors and themes.

    2. 7

      From the listed blog post (

      If you are writing a flake for other people to use, try using the forAllSystems approach. Doing so, your flake won’t pull more dependencies and you will keep the flake.lock of your consumers clean of a million-copies of flake-utils.

      Please don’t use library so downstream folks don’t have to pull in dependencies because you were too lazy to write a for loop. Most folks are probably are only supporting one architecture anyhow (the one they wrote & will run their flake on: x86_64-linux) which is the only architecture the maintainer can guarantee will actually run on (be prepared otherwise as inevitably the Mac folks will start raising issues you don’t have the expensive hardware to solve & maintain). There’s a more-to-come disclaimer on line 3 of the README & maybe the library will do more in the future, but, in its current state, it’s not really offering most users a lot vs. flake-parts which is solving less trivial problems such as nested flakes for those locked into monorepos.

      …And if you wanted “allArches”, there already is nixpkgs.lib.platforms.unix which is maintained upstream rather than this library.

      1. 1

        Yes, currently there aren’t many features, but the forAllSystems way is not similar at all to what I’m doing - it is much simpler.

        Also for nixpkgs.lib.platforms.unix, I did not know this existed, I’ll use that in the library.

    3. 2

      The article linked mentions flake-parts as an alternative to flake-utils. How does FlakeTools compare to flake-parts?

      1. 1

        I am aiming for a less-complicated approach, which doesn’t abstract over much. flake-parts does abstracts over a lot of stuff which most people won’t use (but is useful for people who need it).

    4. 2

      Nushell, it’s an amazing shell, which has freed me from the shackles of normal shells which only work with strings and don’t have almost any builtins. Especially love its http builtin. Nushell itself has replaced jq as well for me while also providing much more formats to work with.

      NixOS. It makes system configuration so much simpler since people have already written the modules. And it is a pleasure to use. Nix flakes are amazing.

      Also really appreciate Helix, it has brought freshness to the command line editor world. I don’t have to edit a ton of lua or sone lisp for it to work, it’s out of the box.

      And carapace, an amazing completer for your shell. Can’t live without it now, it has completions for a ton of tools.

    5. 18

      End of an era for Mercurial? I feel a twinge of sadness/nostalgia because I used Mercurial for my personal projects before Git (c.2006-2010?) and even wrote a Mac GUI client (Murky). I remember Git seeming super awkward when I started using it for work, but now I wouldn’t go back — staging files for commit, and switching branches in a single checkout, are so useful. (Or maybe Mercurial has added those in the meantime?)

      As for GitHub — jeez guys, it’s a distributed VCS, so this is a nonissue as far as code management. OK it’s a proprietary bug tracker, code review and CI system, but I have yet to come across an open source bug tracker or code reviewer that isn’t shit, so…

      1. 5

        The era ended when google and facebook stopped contributing to mercurial development. After that the writing was on the wall.

        1. 1

          Anyone know what happened with that experiment?

          Isn’t there also a Mercurial in Rust effort?

          1. 5

            Google still uses hg for now - we don’t even teach g4 anymore to new hires. The team is still sending occasional work upstream, but for the most part it’s “done” and working. A Googler is working on which looks like a promising future, and has a lot of hg feel to it (and a native git backend.)

            Facebook had an unfortunate falling out with the hg community and is doing their own thing.

            There’s parts of hg being written in Rust, but I don’t think it’s going to be “hg implemented in Rust” - more a minimal subset of hg that’s useful for shell/build-system integrations I think? I’m a little out of touch, I’ve been doing more Rust work than I have source control work for a couple years now.

            1. 2

              Oh I didn’t know they use hg now, that’s interesting! I saw something about an experiment a long time ago but haven’t heard about it since.

              It seems like Mercurial could have a “who uses it?” page like many open source projects

              OK I see it now, couldn’t find it from the home page:



              1. 2

                Yeah, Mercurial as a project has always been kind of weak on publicity.

                (BTW: I doubt you remember me, but we briefly worked together on Google Code…small world.)

                1. 2

                  Oh yes I didn’t recognize your handle, but I googled for it :-)

                  Those were the days when I was using Subversion and then Mercurial ! Sadly, Google Code being shut down pushed my personal projects onto git. Glad to see that there’s still some choice and diversity though.

      2. 3

        Gitea has come a long way, it isn’t crap on mobile unlike GitLab either. You can check out Codeberg which is Gitea.

      3. 2

        I went the other way for my personal projects mainly because of hg absorb. Bundles, rollbacks, and the built-in webserver have all come in handy. The bumbling idiot in me doesn’t miss git one bit :)

        1. 3

          hg absorb sounds great, but someone has already ported it to git.

          1. 2

            That’s inspired by hg absorb but their description of the algorithm makes me confident in saying it’s not going to produce similar results (I ported the core absorb algorithm from C to Python for inclusion in hg.)

            1. 1

              How does it work in mercurial then? I would have expected something similar.

              1. 3

                It constructs a datastructure inspired by an SCCS Weave, using an algorithm learned from BitKeeper. That lets you do very fast blames and some other things, but then we abuse that in absorb by putting current history into even-number revs, then interpolating the edits into the odd-number ones, and then replay the odd-numbered revisions into the new history.

                It’s hard to write it up briefly. The implementation is at least somewhat comprehensible - I tried to link to the most relevant section of the file.

          2. 1

            None of the git absorb replacements I’ve used work perfectly. For example, they need to handle fixing all the branch pointers after the absorb because with git every commit might be a stacked branch.

            @arxanas didn’t implement absorb into git-branchless because Sapling has it, but Sapling doesn’t seem to be healthy.

            1. 1

              What do you mean by “healthy”? The folks on the Sapling Discord seem to be responsive if you’re having issues. Possibly the builds on GitHub are not in a good state, but people seem to be using Sapling fine despite that 🙂.

              1. 1

                A friend’s review (the same one that told me about git-branchless) was that it was pretty good but you could get stuck in bad states (he didn’t get it resolved on Discord), and also that the word on the street was that some things (I think it was reviewstack) got hit by the layoffs and were ownerless.

                A lot of the issues on GitHub have no comments.

                I was about to say “that and they stopped doing releases last May after doing more than 1 release a month” but they just posted a pre-release to github 1 hour ago. That and this thread about the lack of releases has a reasonable response now: So maybe I jumped the gun on my assessment. My apologies!

    6. 3

      It has so many completions. Just look at this, it’s crazy:

      And they aren’t half-assed either. The most featureful tools have completions as featureful, sooo useful, especially for git & nix. Just look at this contribution chart:

      Huge props to the developer for maintaining and adding features this long to this amazing tool.

        1. 1

          Yup, all compiled, not loaded at runtime, so it’s also super fast, instant basically.

    7. 1

      For awhile I capitalized type names as that effectively put them in a kind of namespace apart from variables and functions, but I eventually stopped. I may try this idea in different way in the future.

      Lower-case type names are one of the biggest mistakes in C and C++ that affect readability. I wonder what the “different way” he might try in the future is.

      1. 1

        The header-only library that I’d love to see for C++ is one that created a Standard namespace and imported everything in std with the type names capitalised. Unfortunately, a load of the types are properties of objects, so I don’t think it’s actually feasible.

    8. 4

      I hope support for this comes to Gitea too soon, as a lot of people prefer Gitea to GitLab, as it is more similar to GitHub.

      1. 4

        Yup, Gitea’s been working on it for a bit too

    9. 1

      Is there a new one out or something?

      1. 3

        No, this is just a product page link.

      2. 1

        I thought I’d repost since the Moonlander’s popularity has increased a ton since the last post and the last post didn’t get much traction.

    10. 13

      I ordered one a while back, but it wasn’t very comfortable (coming from a Kinesis Advantage) and the thumb cluster gave me thumb pains within days, so I returned it (they were very nice about returns).

      I now have a Glove80 and it’s just great (bought another one for the office).

      1. 4

        I’m a long time (20+ yrs) Advantage user, and I’m curious about other similar keyboards, but they are a) expensive and b) not immediately a huge improvement over the Advantage, so I’ll probably make it to 30 years on the same keyboard. I was vaguely curious about the Advantage 360, because I like the idea of adjusting the space between the halves, but again, expensive for maybe not any improvement? I wish there were a place I could lease a good keyboard for a month or two to decide if I like it.

        1. 4

          The 360 is quite a garbage fire, I had a 360 Pro, but sold it. They replaced the Cherry Brown/Red switches by cheaper Gateron Browns, which have deeper actuation (more towards 3mm than 2mm) and I found it tiring to type on.

          The 360 Pro uses ZMK, but has a lot of Bluetooth issues, especially connecting the halves. Someone on Reddit offers a switch replacement service and said that on one halve, the key well ribbon cable runs through the clearance zone of the Bluetooth antenna.

          The non-Pro 360 initially had some nasty firmware issues, but I heard they fixed some of them.

          It was quite a disappointment, given that it is even 200 Euro more expensive than the Advantage2. I switched back quite quickly to my Advantage2 with KinT, before getting a Glove80 (which I absolutely love, no Bluetooth issues, better keywell, better thumb cluster).

          1. 2

            I have both the regular and pro models of the advantage 360, and they both work quite well for me.

            Definitely the firmware programming aspect with ZMK was a a hassle with the 360 pro.

            I still prefer my advantage 2, but I’m mostly typing on my advantage 360 these days because the split keypads is really nice.

            The build quality is excellent compared to for instance the Ergodox that I own, it’s up to part with my Advantage 2.

            Just offering another anecdotal experience into the mix here.

          2. 2

            This is disappointing, but useful, information, thank you. I don’t care about Bluetooth, or custom firmware, so if it’s problematic, that’s probably done for the 360 for me.

        2. 3

          I replaced my Advantage USB with an 360 Pro earlier this year and it’s such a mixed bag. I wanted the pro because I wanted Bluetooth, but honestly, I hate that you have to load custom firmware to do things that used to be built-in, like change Mac and Linux command keys. The custom firmware process they have tried to streamline as much as possible, but it still amounts to forking their Github repo, activating pipelines, making changes using their online editor, downloading files, and copying those files onto each half. This is a lot of work for something that used to be a hotkey.

          The hookup between the two halves is glitchy, and it sometimes forgets how to connect. It needs to be charged every two weeks, which means the mild irritant of running two cables, one to each half, and is kind of an overnight job. And a few of the keys are not as easy to hit as they were on the Advantage. It’s also pretty easy to accidentally hit the “reprogram firmware” keys which puts in a mode where you have to power cycle it to get it to work again.

          Work paid for it, or I’d be more irritated. For nearly $500, I think it should be way less annoying. I don’t think Bluetooth should be the discriminator between people who want a keyboard they can just use and people who really want to reprogram the whole thing. This wasn’t clear to me at all when I bought it.

          In short, I have thought about returning to the one you have. This product does not have the same quality as their earlier products.

          1. 1

            This is a big bummer. Oh well.

      2. 3

        I suppose that you use the thumb cluster on the Glove80 regularly. Are you able to use all of the keys on it?

        I use a Moonlander at home and I don’t ever use the red thumb button or the bottom one because of how uncomfortable it is (and having rewritten this now, I’m considering swapping the top right thumb button - return - and the middle left thumb button - backspace - because i use backspace so much more).

        This is basically my biggest complaint about the keyboard. I guess I must have small hands?

        1. 4

          I can reach all 6 per thumb, but I’d say 4 comfortably. On the Moonlander definitely one, maybe two? The issue of the Moonlander thumb cluster is not only that the keys are far away, but also that they are at a weird angle. They don’t follow the natural thumb arc.

        2. 1

          I have fairly long fingers, and I still find it hard to reach the red buttons and also the most inside 3 keys (hovering over the home row)… I feel a layout where the special keys are on the outside, such as on regular QWERTY, is more comfortable to use.

      3. 1

        Does Glove80 work with high profile caps like SA? Is it even compatible with cherry stem caps? It looks like it might be slim chocks.

        1. 3

          Nope, it uses Choc v1 switches, so is only works with Choc v1 keycaps.

          I haven’t felt the need to change the caps. They come with MCC cylindrical profile, which is really nice for column stagger keyboards, since you can easily slide up/down your fingers (I guess the best description is: a half-pipe for your fingers?).

        2. 1

          Should work fine with SA keycaps: the switches are regular MX style

          Er wups, the question was about the Glove80 not the Moonlander

      4. 1

        That keyboard looks really interesting! Can you customize the keys of it like the Moonlander?

        1. 4

          Yeah, you can try their layout editor here:

          They use the open source ZMK firmware.

    11. 14

      I have two of these keyboards in my office and have had them for a few years. Here’s my layout minus all of the fancy keybinds like the #[derive()] key or the if err != nil{\n\t\n} key. Feel free to ask me things!

      Here’s what my main keyboard that I write most of my blogposts on looks like: (Gazzew Boba U4 silent tactile switches, XDA ahegao keycaps)

      I type slower on the moonlander, but it’s a lot more comfortable when I do type on it.

      1. 12

        I wish I had never pressed that 2nd link.

        1. 2

          If it makes you feel better, consider that every one of my articles on in the last 1.5 years have been written on that keyboard. The XDA keycaps that are on that keyboard are unironically one of the most comfortable typing experiences I’ve ever had. I keep meaning to get XDA caps for my work keyboard (forgive the shitty pic, still trying to get used to this wide angle lens attachment), but I keep forgetting to.

      2. 7

        Does you keeb make an appropriate sound for those caps when you type?

        1. 2

          I don’t have enough firmware space for that, or I would as a bit when I stream.

        1. 6

          Things burned into my keyboard firmware can’t be forgotten to be enabled in my editor.

      3. 1

        Sick setup Cadey!

        I have the same keeb, with Glorious Pandas and SA keycaps.

        I recently got the tenting kit and I highly recommend it, super well built and feels solid when typing on it. Only downside is that it does affect the sound, it’s less thick

    12. 5

      Everything just worked on Arch Linux too, except for the fingerprint reader, which, after some digging, has no support in Linux at all

      Fingerprint scanners are actually supported in Linux! You just need to set up fprintd which allows you to use your fingerprint on everything that supports PAM (sudo supports PAM, in fact!).

      Edit: Seems like fprintd doesn’t support the Pangolin, that’s quite sad as it is advertised for Linux.

      1. 2

        Unfortunately not all are :( I have a fingerprint scanner on my Asus laptop and it doesn’t work on Linux. (Seems to have stopped working on windows once I reinstalled it too for that matter, can’t for the life of me find a driver for it)

    13. 3
    14. 1

      Not sure about the tag I used - couldn’t find a more appropriate one, could someone change it?

        1. 3

          Not really.

    15. 5

      Oops, you just invented Firebase.

      1. 4

        Funny you should mention that.

        The satire in the title is reminiscent of how Firebase was born. We were previously working on a chat system called Envolve (, that was ‘Facebook Chat for any website’. A game that was using us for in-game chat created channels, used display: none on them, and passed game state through the chat.

        We scratched our head, asked them why, and learned they wanted to focus on the frontend, not to deal with realtime message passing.

        This led us to create a ‘headless version’ of our chat infra (re-written in Scala) that became the Firebase Realtime Database.

    16. 2

      The one thing that suprised me was the type alias syntax:

      type Foo[T] = Bar[int, T]

      It’s so weird and doesn’t ‘feel’ like Python, but it’s a great solution to a really annoying problem.

    17. 3

      Although this [0] works, you can configure git/any other program if home manager has a module for it, see my configuration for git:

      [0] -

      home.file = {
          ".bashrc".source            = ./sources/";
          ".emacs.d/init.el".source   = ./sources/init.el;
          ".config/git/config".source = ./sources/gitconfig.txt;
          ".Xresources".source        = ./sources/xresources.txt;
      1. 6

        Yes, but not every configuration file has a home-manager module for it. And even if one does exist, as is the case for .gitconfig, if you have an existing configuration file it’s usually more convenient to import it verbatim into a home.file.*.source directive and then translate it into the nix configuration blob for that file.