
This Week in Neovim 52 with news and updates from the Neovim plugin ecosystem and Neovim core.

Programmer in California
I'm also on https://leminal.space/u/hallettj
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
This is basically the plot of Loki
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.
When science kills the mystery, semantics keeps the debate alive!
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.
For some more detail see https://dev.to/martiliones/how-i-got-linus-torvalds-in-my-contributors-on-github-3k4g
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
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.
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
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
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:
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
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,
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
This Week in Neovim 52 with news and updates from the Neovim plugin ecosystem and Neovim core.
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.
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.
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
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