• 0 Posts
  • 22 Comments
Joined 1 year ago
cake
Cake day: August 9th, 2023

help-circle











  • Lmao, I’ve had literally 40-70GB of highly active application swap on an SSD for the last couple months now because I opened stuff and then didn’t close it.

    That said, I chose and installed that drive years ago specifically for this use case (though originally for less intensive/more reasonable cases), and I’m aware of the stupidity of letting it be used like this now.



  • …That’s a salt, though, right?

    If you’re counting non-NaCl salts as answers, then basically any “mineral” our body needs would probably be delivered at least partly in salt form. Just reading off some multivitamins here:

    • Calcium Carbonate
    • Chromium Chloride
    • Cupric Sulfate
    • Potassium Iodide
    • Ferrous Fumarate
    • Magnesium Oxide
    • Manganese Sulfate
    • Sodium Molybdate
    • Sodium Selenate
    • Zinc Oxide

    (I haven’t fully checked all of these are salts­— But I mean, a lot of of them are blatantly chemical analogues of stuff that definitely is salt (E.G. “Potassium Iodide” vs. “Sodium Chloride”), plus they’re metals bonded to ionic groups so they’re definitely not alloys or covalent molecules or ceramics.)

    This is probably because in order for our body to absorb stuff, it basically has be water-soluble, which means salts work quite well.

    When eating real food (plants, animals, and fungi), I assume a lot of this won’t be in salt form, but rather it will mostly be bound up in proteins and DNA and such. For example, iron should be primarily in hemoglobin instead of ferrous fumarate. But some of it, for example the potassium, will definitely be technically in the form of dissolved salts/minerals in the fluids inside the food.

    You can of course also rearrange the compounds around. For example, this can of Windsor-brand “salt free salt substitute” I have here further lists:

    • Potassium Chloride
    • Calcium Silicate
    • Magnesium Carbonate

    You’ll note that these are some of the same components as in the list above, just a different combination. I’m pretty sure any ionic mineral that includes at least one ion that our body needs technically counts as “food”, as long as the other half isn’t poisonous— They should be basically the same when they dissolve in the water in our stomachs anyway.

    Meats can also be preserved by adding nitrates and nitrites to it, though technically I guess that’s more of a likely-carcinogenic additive than part of the “food”.

    Fun fact: Your body sorta knows when it’s low on minerals, and will want to start eating dirt and rocks in order to make up for it! Over 100 different types of primate do it too. So in that case, you could probably argue that plain rocks and soil literally are food, in that they provide vital nutrients the body needs and that your brain is smart enough to know that. …These days it’s apparently considered a mental disorder, but I swear it made much more sense back when the likeliest thing you were going to eat was some mud, rather than lead-contaminated radioactive refrigerants or whatever it is we’ve surrounded ourselves with.

    Enjoy, also, this lovely video from a chemistry Youtuber and his friends taste-testing which alkaline-chloride salt tastes the best!


    I am not a doctor. Don’t go around eating rocks unless you’re a bird or some other type of dinosaur.


  • Disk space is an issue… I’ve seen the OS take as much as 100 GB. But in a world of 2TB SSDs for $100, is that a big deal?

    Yes? Storage used for the OS is space not used for projects, entertainment, docs, redundancy, snapshots, avoiding fragmentation (EXT4), etc. Money spent on SSDs is money not spent on going out, food, meeting people, basic needs, other hardware, etc.

    I don’t see why NixOS would be any worse for the lifetime of a disk than other distros.

    Untested, but I’d assume high space use combined with high update frequency, plus occasional builds-from-source and multiple simultaneous package versions, means more disk writes.

    Biased, maybe, because manual GC means you see disk use tick up more than in other package managers, and also because I personally repeatedly rebuilt a custom gigabyte-sized Derivation dozens/hundreds of times. But I think it’s a reasonable point of caution.

    I’ve only hit binary cache missed for packages I created, or where I changed build options.

    Broken packages are, if anything, less of a problem [than] with Debian. Debian has lots of packages that are…not broken, but incomplete, requiring lots of manual config or whatever.

    Maybe this is a NixPkgs vs NixOS thing. Also, using Nix mostly to supplement packages I hadn’t already installed through my distro probably meant I hit more fringe areas. But I’ve even encountered cache misses and failed builds for some pretty big Python libraries on certain commits.

    Debian-based out-of-the-box functionality for stuff is indeed also Not Great, IIRC— Stable, but yeah, sometimes maybe a bit “incomplete”. Actually, Arch-based has worked well IME.

    And on the flip side: you can change package build options! Neat!

    But oh man…you should’ve seen how trivial it was to switch from PulseAudio to PipeWire (including Jack support etc), leaving no trace that Pulse was ever installed… Or switching from X to Wayland, on a system that I’ve been doing rolling updates on since 2017, all with a clear conscience… It’s beautiful.

    Yeah. I personally don’t care about that stuff unless it directly impacts something I’m working on.

    And that’s why I say Nix is a great tool for package management, but not something I’d personally want to use as an OS base. When you’re already elbow-deep in the plumbing anyway, Nix makes it way easier to swap components out. But when you just want to install and use an application, editing Nix configs feels like more work, and it’s so much easier to just pacman/yum/apt-get install firefox or whatever and get on with your day.


    Plus, some specific red flags surrounding stability and interoperability:

    1. ALSA is apparently hardcoded to just straight-up not work with a Nix root. Not sure how NixOS handles it, but in my specific use case, I had to symlinkJoin{paths=[alsa-lib alsa-plugins]} so they could find each other. Pretty sure it took a lot of strace -f -e trace=file and nix-locate for me to figure this one out, just to get sound working.

    2. QtWebEngine/Chromium has to be run through some kind of sed -e "whatever.so" to “Patch library paths in Chromium sources” in order to even run, because it’s also hardcoded to just not work with a Nix root. IIRC, this one I figured out by just straight-up grepping on the compiled binaries after seeing the errors in strace or whereever. Seems a bit ridiculous, using a RegEx to patch a web browser when installing it so it can even run.

    3. Binaries aren’t safe either, because they probably need patchelf to be able to run on Nix.

    4. Flakes are apparently hosted as user repositories on a Microsoft-owned website, and can just randomly disappear sometimes.

    5. Qt generally takes a ton of extra steps to be able to run on Nix. And have you actually ever opened the wrapper the Nix hooks generate to see what it’s actually doing? For one of my applications just now, you get a 43kb Bash script with apparently 581 assignments to just a handful of QT and XDG-related environment variables.

    6. OpenGL doesn’t look safe either. Nix handles the drivers its own way, so to get OpenGL for Nix packages to work on other systems, you have to jump through some hoops. I assume the same amount of work in the opposite direction would be needed to use EG proprietary or statically compiled graphics applications on NixOS too.

    7. Running precompiled binaries on Nix looks… Involved, as well. Sure, there’s tools to automate it. But that only hides the complexity, and adding an opaque dependency sorta defeats the entire purpose of configurability and composability IMO.

    I’m sure most of these problems are “solved”, in the sense that NixOS implements workarounds that are the default when you install the affected derivations, and there are wrappers written for most other cases. But all of that adds maintenance, fragility, and complexity. It remarkably works well enough for userspace, but stuff like this still feels a bit house-of-cards-y for the basic OS and desktop. It’s not Nix’s fault, but so much of the work that goes into Nix seems to be just to force software that was never designed for it to run on it. Ultimately, the Linux FHS has momentum and adoption. Nix’s technical design might be compelling, but so are interoperability, stability, and simplicity.

    The NixOS enthusiasts are doing a lot of technically interesting work, but I personally find the results of that work most useful outside the NixOS ecosystem. And I do think Nix as a package manager is really great. Ever since I’ve installed it, I’ve basically incorporated it as a major component or tool in every sizable software project I’ve since started. But I just personally wouldn’t want to base an entire OS on it.


  • I’m saying that’s a way I might personally consider going if I were to set up a new computer. Rock solid base that you can still get normal packages and binaries to run on without much hassle if needed, plus Nix with more up-to-date packages that you can customize however you find most useful.

    Personally I have a mix of rolling/regular repos, AUR, Nix, Flatpak, and static binaries. They all have their uses, TBH.


  • Nix is great. But I don’t think I’d want to use it for a desktop OS base.

    (Disk space/cycle life potential, binary cache misses, broken packages, and complete incompatibility with everything else. User error, TBH, but also stuff that’s not really a problem with other systems. Well worth it as a package manager, though.)


  • bwrap is so much better without Flatpak.

    To start you off: $ bwrap --dev-bind / / --tmpfs ~ bash

    This basically gives you a shell in a clean virtual home directory (but no meaningful security improvement yet). You can test new builds of software as if you have only the default settings. If you need to access files, move them to /tmp/.

    To see the clean virtual home directory, replace --tmpfs ~ with --bind "$(mktemp -d)" ~. You can browse it where mktemp puts it (usually /tmp/*).

    To start to lock down security, replace the --dev-bind with --ro-bind, and add various --new-session, --uid/--gid, and --unshare-all/--unshare-* flags. You can run untrusted and semi-trusted/less-trusted applications with less security risk this way (as long as you’re aware of pitfalls, such as the /tmp/.X11-unix/X0 socket and other possible avenues of escape).

    To block network access, use --unshare-net or --unshare-all. To virtualize /dev and /proc, use --dev /dev and --proc /proc.

    Some programs might need --dev-bind /dev/dri /dev/dri for graphics driver access, or similar constructs.

    EDIT: …I actually created a way to create completely portable application executables for Linux by using bwrap (or proot, as a fallback) to virtualize a Nix root from inside an AppImage, earlier this year. bwrap offers a lot of granularity in modifying and containing the virtual environment, to the degree that you can basically emulate an entire guest OS/distro on top of the host distro, without even needing root privileges— And without even needing bwrap itself to be installed, since it can work using entirely standard Linux kernel features.



  • Wearing or sporting an American flag gets all the wrong kind of attention. I really don’t want to deal with it. Frightening minorities and getting thumbs up/nods from racists isn’t really my thing.

    Then stick it next to a rainbow flag, or a Statue of Liberty, or a peace sign, or the date of the Emancipation Proclamation, or any of the symbols that y’all actually do still have for actual freedom.

    It’s all about the messaging. Make it clear: “This is the flag of the nation, for everybody in the nation, and anyone who flies a mutilated version of it is a coward.”