71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| let
 | |
|   cfg = config.services.lvm;
 | |
| in {
 | |
|   options.services.lvm = {
 | |
|     package = mkOption {
 | |
|       type = types.package;
 | |
|       default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2;
 | |
|       internal = true;
 | |
|       defaultText = "pkgs.lvm2";
 | |
|       description = ''
 | |
|         This option allows you to override the LVM package that's used on the system
 | |
|         (udev rules, tmpfiles, systemd services).
 | |
|         Defaults to pkgs.lvm2, or pkgs.lvm2_dmeventd if dmeventd is enabled.
 | |
|       '';
 | |
|     };
 | |
|     dmeventd.enable = mkEnableOption "the LVM dmevent daemon";
 | |
|     boot.thin.enable = mkEnableOption "support for booting from ThinLVs";
 | |
|   };
 | |
| 
 | |
|   config = mkMerge [
 | |
|     (mkIf (!config.boot.isContainer) {
 | |
|       systemd.tmpfiles.packages = [ cfg.package.out ];
 | |
|       environment.systemPackages = [ cfg.package ];
 | |
|       systemd.packages = [ cfg.package ];
 | |
| 
 | |
|       # TODO: update once https://github.com/NixOS/nixpkgs/pull/93006 was merged
 | |
|       services.udev.packages = [ cfg.package.out ];
 | |
|     })
 | |
|     (mkIf cfg.dmeventd.enable {
 | |
|       systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
 | |
|       systemd.services."lvm2-monitor".wantedBy = [ "sysinit.target" ];
 | |
| 
 | |
|       environment.etc."lvm/lvm.conf".text = ''
 | |
|         dmeventd/executable = "${cfg.package}/bin/dmeventd"
 | |
|       '';
 | |
|     })
 | |
|     (mkIf cfg.boot.thin.enable {
 | |
|       boot.initrd = {
 | |
|         kernelModules = [ "dm-snapshot" "dm-thin-pool" ];
 | |
| 
 | |
|         extraUtilsCommands = ''
 | |
|           copy_bin_and_libs ${pkgs.thin-provisioning-tools}/bin/pdata_tools
 | |
|           copy_bin_and_libs ${pkgs.thin-provisioning-tools}/bin/thin_check
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       environment.etc."lvm/lvm.conf".text = ''
 | |
|         global/thin_check_executable = "${pkgs.thin-provisioning-tools}/bin/thin_check"
 | |
|       '';
 | |
|     })
 | |
|     (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
 | |
|       boot.initrd.preLVMCommands = ''
 | |
|           mkdir -p /etc/lvm
 | |
|           cat << EOF >> /etc/lvm/lvm.conf
 | |
|           ${optionalString cfg.boot.thin.enable ''
 | |
|             global/thin_check_executable = "$(command -v thin_check)"
 | |
|           ''}
 | |
|           ${optionalString cfg.dmeventd.enable ''
 | |
|             dmeventd/executable = "$(command -v false)"
 | |
|             activation/monitoring = 0
 | |
|           ''}
 | |
|           EOF
 | |
|       '';
 | |
|     })
 | |
|   ];
 | |
| 
 | |
| }
 | 
