I also lack the experience with guile but it sounds very sensible to me. I can confirm that just fixing the grub-menu entries with the subvol path works. I have been invoking guix system reconfigure with a bash script that in the end calls a grubfix function below with the path to each newly generated grub.cfg: In my case the subvol is located at /snap2_rw function grubfix(){ sudo sed -i "s/linux\ \/gnu/linux\ \/snap2_rw\/gnu/g" "$1" sudo sed -i "s/initrd\ \/gnu/initrd\ \/snap2_rw\/gnu/g" "$1" sudo sed -i "s/--set\ \/gnu/--set\ \/snap2_rw\/gnu/g" "$1" } Your suggestion to do this directly in config.scm sounds great. Best regads, David L On Sun, 27 Jan 2019, Svante v. Erichsen wrote: > The subvolume and the mount point are independent issues. > > For example, I have a subvolume named @ as root volume: > > (file-system > (device "/dev/mapper/hd") > (mount-point "/") > (type "btrfs") > (options "compress=lzo,ssd,subvol=@")) > > It also appears that the subvolume name must be prepended to the path as if it > just was an ordinary directory (grub.cfg): > > … > linux /@/gnu/store/… > … > > I could not yet confirm this from documentation, but it works like that for me. > (I semi-manually edit the generated grub.cfg currently.) > > So, additionally to stripping the mount point, the subvolume needs to be > prepended (grub.scm): > > (let ((kernel (prepend-subvol device-subvol > (strip-mount-point device-mount-point > kernel))) > (initrd (prepend-subvol device-subvol > (strip-mount-point device-mount-point > initrd)))) > …) > > This would mean that the menu-entry structure needs the subvol information. > However, I wouldn't want to parse this from the options field in the file-system > entry, so I'd propose allowing a list there, maybe like this: > > (file-system > (device "/dev/mapper/hd") > (mount-point "/") > (type "btrfs") > (options '(("compress" . "lzo") > "ssd" > ("subvol" . "@")))) > > On the other hand, it might be surprising that declaring the options like this > would work for subvols, while using a string doesn't, especially when some older > documentation/blogs/gists is still hanging around on the internet, so maybe it > would be necessary to parse the options anyway (to this list structure). > > I'm lacking experience in guix and guile, so making this work and submit a patch > will take me some time. > > Do you think this is sensible? > > > -- > Svante von Erichsen > > GPG fingerprint: A78A D4FB 762F A922 A495 57E8 2649 9081 6E61 20DE >