Skip Navigation
hallettj

Programmer in California

I'm also on https://leminal.space/u/hallettj

Posts
14
Comments
236
Joined
2 yr. ago
  • I think you can mount an ISO image under your running system and make changes. I found a couple of guides that might be helpful:

    How to Mount an ISO File on Linux

    Edit and repack .iso bootable image

    I haven't done this before, but I think you can chroot into the mount directory, and run package manager commands in the mounted image to install another package.

    Or I have an alternative suggestion that might or might not be easier. I've been hearing a lot about immutable/atomic distros, and people designing their own images. You could make your own ublue image, for example, with whatever you want on it.

    A promising looking starting point is github:ublue-os/startingpoint. Ignore the "Installation" instructions, and follow the "ISO" instructions instead.

    Or I saw recently an announcement of a new way to build atomic images that is supposed to be easier than ever, BlueBuild

  • Oh is that where all the memes went? My instance isn't federated with lemmy.world so it just looked like the star trek energy vanished.

    While I'm here... I finally finished season 4 of Discovery. That show has been getting much stronger as it goes on IMO. I especially enjoyed the last ~3 episodes! I also like the take on the "villains" of the late season (the two humanoid ones). It's a refreshing departure from unsympathetic, plain evil antagonists.

  • LEDs should last for tens of thousands of hours. There may have been a manufacturing defect in OP's case.

  • It scrolls smoothly, it doesn't snap line by line. Although once the scroll animation is complete the final positions of lines and columns do end up aligned to a grid.

    Neovim (as opposed to Vim) is not limited to terminal rendering. It's designed to be a UI-agnostic backend. It happens that the default frontend runs in a terminal.

  • I realized I made an implicit assumption that I didn't explain. You can use Nix without NixOS. But the configuration you're looking at is specifically a NixOS configuration. The shortcuts for setting up nextcloud services are based on the NixOS module system. You could get the same setup with Nix without NixOS, but you'd have to reproduce some of the functionality that is provided out-of-the-box in NixOS. My answer is one way to use the functionality from NixOS without fully installing NixOS.

  • I think there's a way that might be easy-ish. In short what the services setting does is to get necessary packages, write configuration files, and install systemd unit files. You can build a NixOS configuration, and symlink or copy the necessary systemd units and configuration files. I think that would work, and would not interfere with other stuff on your system.

    NixOS configurations must be built with nixos-rebuild - you can't use nix-build by itself. You can put your configuration wherever, and run:

     undefined
        
    $ nixos-rebuild build -I nixos-config=./configuration.nix
    
      

    That will build everything in paths under /nix/store/ without touching anything else on your system. It will create a symlink in your working directory called result/ with a fully-built, bot not installed, NixOS. If you were running NixOS you would run nixos-rebuild switch to update symlinks to point to all of this stuff. But you'd skip that step.

    result/etc/systemd/system/ contains systemd units. There will be a lot of stuff there that you don't want. You'd need to selectively symlink or copy units from this directory to your /etc/systemd/ tree.

    The units use full paths to binaries in /nix/store/ so you don't need to do anything extra to install software packages.

    You might need to symlink or copy configuration files for your services. Those should also be somewhere in result/.

    If NixOS and Debian use the same systemd target names your services should run automatically on boot. If not you might have to do some fix-up, or run systemctl commands manually. I think you'd need to run some systemctl commands to start and stop services if you want to update without rebooting.

    You can probably do all that symlinking just once if you symlink everything through that result symlink.

    Edit: Although, taking a closer look at what services.nextcloud does I see that it does a lot, like initializing databases and creating user accounts if you choose to use a local database. It might be a lot of work to chase down all of the configuration that you would have to copy over. Running NixOS is definitely going to be easier.

  • I don't know if it's your cup of tea, but Neovide provides smooth scrolling at arbitrary refresh rates. (It's a graphical frontend for Neovim, my IDE of choice.)

  • A credit system is an essential piece of a robust economy

  • If I'm doing more than one cracking two together is best. For the last one, countertop.

    I get the flat, inside-the-sink idea. But I'd want to clean either way, and I clean the counters more often than I clean the sides of the sink.

  • Well you're really feeding my Nix confirmation bias here. I used to use Ansible with my dot files to configure my personal computers to make it easy to get set up on a new machine or server shell account. But it wasn't great because I would have to remember to update my Ansible config whenever I installed stuff with my OS package manager (and usually I did not remember). Then along came Nix and Home Manager which combined package management and configuration management in exactly the way I wanted. Now my config stays in sync because editing it is how I install stuff.

    Nix with either Home Manager or NixOps checks all of the benefits you listed, except arguably using a "known" programming language. What are you waiting for?

  • For the PaperWM fans, this is a dedicated WM based on the same idea

  • AFAIK the best thing you can do to improve your coffee-freezing process is to prevent moisture from getting into the beans when you thaw. If you let it, moisture from the air will condense on the cold beans. So keep the beans in a closed, airtight container until they come to room temperature. (Airtight because water vapor is air.) So yeah, jars are good for this. Or sealed freezer bags should work too.

  • I haven't used Krita. But I can tell you that those wrappers are "options" defined by NixOS modules. There is documentation for writing them in the NixOS Manual.

    Built-in NixOS options are documented in the Configuration Options Appendix with links to implementations which provide helpful examples when writing your own options.

  • Hmm, good point. But it was Ursula Le Guin who coined the word. Maybe there's a workable reference in Left Hand of Darkness, or The Dispossessed.

  • Well ok, they both use symlinks but in different ways. I think what I was trying to say is that in NixOS it's symlinks all the way down.

    IIUC on Fedora Atomic you have an ostree image, and some directories in the image are actually symlinks to the mutable filesystem on /var. Files that are not symlinks to /var (and that are not inside those symlinked directories), are hard links to files in the ostree object store. (Basically like checked-out files in a git repository?)

    On NixOS this is what happens if examine what's in my path:

     undefined
            $ which curl
        /run/current-system/sw/bin/curl
    
        $ ls -l /run | grep current-system
        /run/current-system -> /nix/store/p92xzjwwykjj1ak0q6lcq7pr9psjzf6w-nixos-system-yu-23.11.20231231.32f6357
    
        $ ls -l /run/current-system/sw/bin/curl
        /run/current-system/sw/bin/curl -> /nix/store/r304lglsa9i2jy5hpbdz48z3j3x2n4a6-curl-8.4.0-bin/bin/curl
    
    
      

    If I select a previous configuration when I boot I would get a different symlink target for /run/current-system. And what makes updates atomic is the last step is to switch the /run/current-system symlink which switches over all installed packages at once.

    I can temporarily load up the version of curl from NixOS Unstable in a shell and see a different result,

     undefined
            $ nix shell nixpkgs-unstable#curl  # this works because I added nixpkgs-unstable to my flake registry
        $ which curl
        /nix/store/0mjq6w6cx1k9907vxm0k5pk7pm1ifib3-curl-8.4.0-bin/bin/curl  # note the hash is different
    
    
      

    I could have a different version curl installed in my user profile than the one installed system-wide. In that case I'd see this:

     undefined
            $ which curl
        /home/jesse/.nix-profile/bin/curl
    
        $ ls -la /home/jesse | grep .nix-profile
        .nix-profile -> /nix/var/nix/profiles/per-user/jesse/profile
    
        $ ls -l /nix/var/nix/profiles/per-user/jesse
        profile -> profile-133-link
        profile-130-link -> /nix/store/ylysfs90018zc9k0p0dg7x6wvzqcq68j-user-environment
        profile-131-link -> /nix/store/9hjiznbaii7a8aa36i8zah4c0xcd8w6d-user-environment
        profile-132-link -> /nix/store/h4kkw1m5q6zdhr6mlwr26n638vdbbm2c-user-environment
        profile-133-link -> /nix/store/jgxhrhqiagvhd6g42d17h4jhfpgxsk3n-user-environment
    
    
      

    Basically symlinks upon symlinks everywhere you look. (And environment variables.)

    So I guess at the end everything is symlinks on NixOS, and everything is hard links plus a set of mount paths on Fedora Atomic.

  • If you put an FHS on the actual system you wouldn't be able to install multiple versions of the same package, updates wouldn't be atomic - you wouldn't get the big selling points of Nix.

  • To answer your other question, yes there are still single-cell organisms evolving into new species all the time, in the ocean and elsewhere. That includes new multi-cellular species evolving from single cells all the time. But it takes a long time to develop from cell, to clump of slime, to something with legs. So you might not notice the changes if you aren't super patient.

    Or were those separate questions? Are you asking if chickens descended from single-cell organisms? Yes they did. With a lot of steps in between.

  • Neovim @programming.dev
    hallettj @beehaw.org

    Neovim lua to check if file is in given directory

    Posting just because I looked all over and didn't see an answer. This function expands its arguments to canonical, absolute file paths, and tests whether one is a string prefix of the other. It also works for checking whether a directory is inside of or is identical to another directory.

     lua
        
    local is_file_in_directory = function(file_path, directory_path)
      local file = vim.fn.fnamemodify(file_path, ':p')
      local dir = vim.fn.fnamemodify(directory_path, ':p')
      return file ~= nil and dir ~= nil and
          -- is dir an initial substring of file?
          file:find(dir, 1, true) == 1
    end
    
      

    This came up because I'm setting up obsidian.nvim which looks like a handy way to get the best of both worlds between Obsidian and Neovim. I'm setting up some custom configuration to automatically change th

    nixos @lemmy.ml
    hallettj @beehaw.org

    How do you find non-top-level packages in nixpkgs?

    This is something that I struggle with. I know how to find top-level packages like git or cowsay. But what about utilities under nested paths? I always spend ages digging through the nixpkgs source code to try to find utilities to use in my nix expressions.

    Today I want to use buildRustPackage. It's defined here, and is propagated here. But how do I access it given a pkgs variable? I have no idea!

    https://search.nixos.org/packages is no help

    nix search nixpkgs doesn't find it

    I think I need to search by attribute name, not by derivation name. But I don't know how to do that.

    nixos @lemmy.ml
    hallettj @beehaw.org

    check Home Manager dconf settings

    It took me a while to figure this out. I use Home Manager to manage my Gnome settings by setting dconf.settings = { ... }. My settings are non-trivial (for example my paperwm module). So it's helpful for me to check the actual dconf settings that Home Manager produces.

    To do that build your configuration with home-manager build, open result/activate, and find a line that looks like this:

     bash
        
    $DRY_RUN_CMD $DCONF_DBUS_RUN_SESSION /nix/store/4ab7dx08wx640444m71axlqvbrvz73bv-dconf-0.40.0/bin/dconf load / 
      < /nix/store/0hdnvwx8d9sifd6ib8n2hhblyblq0ccp-hm-dconf.ini
    
      

    The store path for hm-dconf.ini has the settings.

    Edit: added a line break to the script line so you can see the relevant store path

    nixos @lemmy.ml
    hallettj @beehaw.org

    builtins.getFlake is slow - why is that? (Also, Arion is nifty)

    I have a workaround so this isn't exactly a problem for me. I'm just curious about what is going on, and what best practices are.

    I'm setting up Arion. I think it will be helpful for my development flow in a project where I have several services that need to run and communicate with each other. Docker-compose is a nice way to handle this, but you have to have a Docker image to run, and it's a pain to create a new image after each code change. OTOH Arion will run an arbitrary command, and creates Nix-friendly images automatically. Very promising!

    The Nix expression for the service I'm developing is exported from a flake, while the arion executable reads its configuration from a Nix expression that is not a flake. There is an example configuration that recommends importing a flake using builtins.getFlake which you can see here: https://github.com/hercules-ci/arion/blob/main/examples/flake/arion-pkgs.nix

    The problem is that builtins.getFlake

    Neovim @programming.dev
    hallettj @beehaw.org

    Error writing commit message with fugitive

    I've had a problem making commits with fugitive for a long time, over a number of versions of Neovim. Has anyone seen this error before? I've searched a number of times but not found anything.

    I use the cc binding in a fugitive window to open a split to write a commit message. Then I run :x to close the split and finish the commit. Most times - but not every time - I get this error message, the commit is not made, and the fugitive window becomes blank.

     undefined
        
    g`"                                                                                                                            
    Error detected while processing BufEnter Autocommands for "fugitive://*//"..function 81_ReloadWinStatus[11]..81_Reloa
    dStatusBuffer[6]..fugitive#BufReadStatus[364]..BufEnter Autocommands for "fugitive://*//"..function 81_ReloadWinStatus[11]
    ..81_ReloadStatusBuffer[6]..fugitive#BufReadStatus[292]..BufReadPost Autocommands for "*"..function fugitive#Resume[5]..<s>81_RunWait:                              
      
    nixos @lemmy.ml
    hallettj @beehaw.org

    How to: compile Treesitter grammars for Neovim in NixOS

    Instead of getting plugins through nixpkgs I prefer to use my neovim-specific plugin manager. (In my case that's lazy.nvim.) Mostly this works without problems - but some setup is required when a plugin needs to compile something. The plugin that has given me the most trouble is Treesitter which wants to compile grammars. Here is how I got that working.

    tl;dr: Configure Treesitter to compile grammars with gcc instead of clang.

    As has been reported in https://github.com/nvim-treesitter/nvim-treesitter/issues/1449 Treesitter will try to use clang to compile Treesitter grammars, and on NixOS for some reason clang is not able to locate necessary C++ libraries. The fix that works for me is to configure Treesitter to use gcc instead. Here is the relevant part of my plugin config:

     lua
        
    return {
      'nvim-treesitter/nvim-treesitter',
      build = ':TSUpdate',
      config = function()
        -- Set compiler to get grammar installation working in NixOS. See
        -- https://github.com/nvim-treesitter/nv
      
    Linux @lemmy.ml
    hallettj @beehaw.org

    Help me find my tiling workflow?

    I'm using a PaperWM which is a scrolling window manager extension for Gnome, and I love it! But it's an extensive extension which means it is sometimes brittle. I've thought it would be nice to find a window manager that is natively designed with a workflow that I like. There don't seem to be any actively-maintained scrolling window managers out there. But scrolling is kind of a special type of tiling - I was hoping that someone with tiling experience could give me some tips on how to configure Hyprland, Sway, or something else to customize it for my particular working style.

    I've realized that generally what I want is to be able to look at 2 windows at a time. But often I want to keep one of those windows in view, while swapping out the second window. For example,

    • When programming I want to keep my editor in view while switching between a terminal or a browser as my second window.
    • When researching I have a browser window in
    Neovim @programming.dev
    hallettj @beehaw.org

    This Week in Neovim #52: packer.nvim is unmaintained with pckr.nvim as a spiritual successor, treesitter query editor added to Neovim core, and floating windows can have a footer

    Personal Finance @lemmy.ml
    hallettj @beehaw.org

    Buying a used car, best source for financing?

    My family needs a second car. I'm thinking about a used Chevy Bolt or Nissan Leaf so I think the cost will be about $20,000.

    What's a good source for financing? I was thinking about getting a loan from my bank, Chase. But I see there are also lenders that specialize in car loans, and there might be dealership options? My credit score is over 700.

    nixos @lemmy.ml
    hallettj @beehaw.org

    Try Home Manager config without switching?

    I've been searching for a way to do this, but I haven't found anything. After I have refactored my Home Manager configuration is there a way I can test the changes in a shell before I switch?

    From what I understand the next-best option is to switch, and then find and run the activate script of the previous generation to switch back.

    nixos @lemmy.ml
    hallettj @beehaw.org

    How to install Wine runners in Lutris in NixOS?

    I'm trying to set up Lutris to play games with Wine. I don't understand how I am supposed to install wine runners? Can anyone help?

    Edit:* It seems the answer is to install runners through the Lutris UI as usual. The Lutris package runs in an FHS which makes everything work even though the runners are not built for NixOS.

    It turns out that what I was missing (I think) was 32-bit DRI support. I enabled that with these lines in my NixOS configuration:

     nix
        
    # in /etc/nix/configuration.nix
    
    hardware.opengl = {
      driSupport = true;
      driSupport32Bit = true;
    };
    
      

    Everything below this edit is red herrings.

    /end of edit*

    I tried installing a runner, lutris-GE-Proton8, through Lutris itself as I do in another distro. That crashed with some sort of error - instead of spending time investigating that I thought I'm probably supposed to install things the Nix way so that dependencies are set up correctly.

    I tried installing Wine from nixpkgs like this, and configuring Lutris to

    Operating Systems @beehaw.org
    hallettj @beehaw.org

    About to get started with NixOS

    I've been thinking about trying NixOS for a while. I think the concepts are elegant, and I have been finding Nix flakes to be very nice for software development. I'm about to get a new machine so I'm ready to take the plunge. Any advice before I dive in?

    I'd like to set up Gnome with some extensions. One of the things I especially want to learn is how to set up graphics drivers, Vulkan, and Lutris.

    For anyone who hasn't heard of it, Nix is a "declarative" package manager. Each package is stored with a hash that encodes its exact source, build script, dependencies, etc. You can have packages installed with mutually-incompatible library dependencies, and Nix makes it just work. For purposes of setting up per-project dependencies Nix does what Docker does, but faster, with more cache hits, and without emulation / containerization. If you want to deploy Docker images, Nix can build images that are [more efficient](https://grahamc.com/blog/nix-and-layered-docker-imag