Skip Navigation

Posts
12
Comments
184
Joined
2 yr. ago

Just a basic programmer living in California

  • I agree that this doesn't seem necessary. Personally I think Nix would be a good candidate for dependency management that works consistently between languages. I think that may be partway set up for Haskell, and I've noticed that nixpkgs has a good collection of Python dependencies. But for most cases the Nix flow currently usually involves using the language's bespoke dependency manifest to generate a Nix expression that downloads dependencies from the language's bespoke package repo.

    One advantage of Nix is that you don't need all packages in one repo. Nixpkgs is mostly geared for the NixOS Linux distro. Each language ecosystem could have its own repo if that makes the most sense, with Nix being the common connective language.

  • I think it would be more clear with an apostrophe at the beginning of the word. But if you do the technically correct thing and put apostrophes at both ends to stand in for both elided syllables then it looks like the whole word is in quotes, and you're back to square one. It's a 'nundrum.

  • So long Garnix! It will be missed

  • I'm using Rust on the server, Typescript on the client. Some very interesting options have appeared in Typescript over time for better ADT handling!

    ts-pattern provides a match function that verifies matches are exhaustive. Yes, it's a static check. It's got a powerful matching language that does stuff like extract nested properties from complex inputs, like Rust's match. I recommend reading the documentation - for me it led to some "I didn't know that was possible!" moments.

    I've also been using fp-ts to get Option and Either types. (Either instead of Result because fp-ts is inspired by Haskell.) It has features for processing fallible values as monads which gets close to the conciseness of Rust's ? operator and try Trait, but is more generalized. It also has mtl-ish types like TaskEither which roughly serve the purpose of a Promise but with an explicit error type.

    Now that you mention it, must-use detection for Either values would be helpful. Eslint has a built-in check that does exactly that for Javascript's native Promise type. I haven't tried it, but it looks like eslint-plugin-fp-ts has a rule that might do the same for other types.

  • Oh, nice! Does this do something like Git Butler where you can have multiple branches "checked out" simultaneously, and keep track of which changes belong to which of those branches as you work? But maybe without the commitment that Git Butler requires to using its tooling?

  • I try to capture every detail of the build and test environments in Nix devshells. And where I can I try to encapsulate as much as possible in Nix checks and packages which run in build sandboxes - both locally and on the server. Build sandboxes don't work for everything, but the devshells alone are great for reproducibility.

    • Wrong interpreter version? A devshell with a flake.lock file ensures every environment is using the exact same interpreter.
    • Accidentally picking up stuff from the local .env? Sandboxed checks and builds don't get any files that aren't version controlled, so that's not an issue. But it's still an issue with devshells.
    • Accidentally picking up programs or env vars in your environment? Sandboxed builds always get a clean starting environment. If you run nix develop --ignore-env you get a devshell that also gets a clean starting state.

    Nix doesn't fix everything.

    • File system case sensitivity - depending on where this issue presents (program-generated files vs source files), I use property testing to catch this problem. In fact I was working on exactly that the other day.
    • Timing issues - that's a good old fashioned hard problem. Try to make logical dependencies explicit. It's really easy to get implicit order dependencies in concurrent code if you aren't on guard. In languages that support it promises or futures are good for spelling out what needs to happen in what order.
    • Edit: Difficulty keeping secrets in sync - one option is to use Sops or Age to put encrypted secrets in version control. Then your CI only needs to be configured with one secret to decrypt the other secrets it needs.
  • I'm not sure how to pronounce that name so I'm going to opt for an all-in French pronunciation. That makes the capital X silent!

  • Thanks for the plug! Bloom County is definitely my favorite print comic

  • I haven't done this, but I think this idea is going to stick with me going forward

  • Heads up: when I upgraded network name resolution broke. It looks like the problem was services.mullvad. Unfortunately booting into an old generation still left me in a broken state. I guess there is some non-declarative state set. If you get into this situation there is a recovery procedure given here: https://github.com/NixOS/nixpkgs/issues/314694

  • No problem! We've all been there!

  • It looks to me like 696b10c removes the filter that previously skipped the xrizer-fix-aarch64 patch. So I would expect that patch to be applied in the latest nixpkgs-xr

  • I think one of those kisses in Exhibit A was an evil duplicate. But yes, you make a strong case

  • What does your flake.lock look like before and after running nix flake update nixpkgs-xr ?

    • That alien transporter with a range of 40,000 light years (the spatial trajector) that just can't work on Voyager because it has an incompatible power supply
    • Infinitely fast travel at warp 10 that comes with serious, but entirely curable side-effects
  • Oh I was pissed when the bubble burst right before I graduated from high school

  • IIRC in the movie The Last Temptation of Christ making crosses is kinda his thing

  • Nix / NixOS @programming.dev

    Embedded SQL highlighting in Neovim, a look into Treesitter, and some NixOS patching

    sitr.us /2026/05/03/embedded-sql-highlighting-in-neovim/
  • Ok, I don't really know what I'm talking about. I think the deal is that there is a concept of a "bargaining unit", and the government usually limits bargaining units to one workplace, or maybe one employer. And employers can't be compelled to negotiate with a group that is not a single bargaining unit. So in practice organizing has to be done workplace by workplace. Unless I've misunderstood.

  • I had a workplace organizing training session the other day, and learned a couple of things. I'm not sure I have all this correct, but from what I recall US laws are strict in what kind of organizing is allowed - I think cross-industry unions aren't allowed. Contractors aren't eligible to unionize. (That's on top of the "wage theft" effect of classifying full time employees as contractors instead of W-2 employees.) Organizing protections for workers don't extend to managers. It's a lot of bullshit.

  • I think Templates is for cases where you make lots of documents that have the same starting structure. Like a letter head, or a spreadsheet you recreate every month. The starting structure can be saved in Templates so you can copy it ever time you need it. Maybe I'll put a Nix flake template there instead of always copying from a recent project.

    Public might be for files that other users have read access to on a multi user system? Or maybe for network shares? Or a personal website? I'm not sure. Edit: I found a comment saying that Gnome file sharing uses Public.

  • Programming @programming.dev

    The 6 Big Ideas of Typescript

    sitr.us /2026/04/06/big-ideas-of-typescript.html/
  • Nix / NixOS @programming.dev

    run Kodi media center

  • Linux @programming.dev

    Selective VPN confinement in NixOS

  • Nix / NixOS @programming.dev

    Selective VPN confinement in NixOS

  • Nix / NixOS @programming.dev

    Patch interpreter path in embedded binary?

  • Nix / NixOS @programming.dev

    work around a misbehaving binary cache

  • Nix / NixOS @programming.dev

    Native Wayland gaming with Wine on NixOS

  • Rust @programming.dev

    Comprehending Proc Macros

  • Rust @programming.dev

    “Truly Hygienic” Let Statements in Rust

    sabrinajewson.org /blog/truly-hygienic-let
  • Nix / NixOS @programming.dev

    gnome-keyring as ssh agent in lightweight window manager