diff --git a/modules/module-list.nix b/modules/module-list.nix index 97c7b9fef1fa..549e4acdc0fc 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -208,6 +208,7 @@ ./tasks/filesystems/nfs.nix ./tasks/filesystems/reiserfs.nix ./tasks/filesystems/vfat.nix + ./tasks/filesystems/xfs.nix ./tasks/kbd.nix ./tasks/lvm.nix ./tasks/network-interfaces.nix diff --git a/modules/tasks/filesystems/xfs.nix b/modules/tasks/filesystems/xfs.nix new file mode 100644 index 000000000000..fbc0fe5ccb19 --- /dev/null +++ b/modules/tasks/filesystems/xfs.nix @@ -0,0 +1,29 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + inInitrd = any (fs: fs == "xfs") config.boot.initrd.supportedFilesystems; + +in + +{ + config = mkIf (any (fs: fs == "xfs") config.boot.supportedFilesystems) { + + system.fsPackages = [ pkgs.xfsprogs ]; + + boot.initrd.kernelModules = mkIf inInitrd [ "xfs" ]; + + boot.initrd.extraUtilsCommands = mkIf inInitrd + '' + cp -v ${pkgs.xfsprogs}/sbin/fsck.xfs $out/bin + ''; + + # Trick just to set 'sh' after the extraUtils nuke-refs. + boot.initrd.extraUtilsCommandsTest = mkIf inInitrd + '' + sed -i -e 's,^#!.*,#!'$out/bin/sh, $out/bin/fsck.xfs + ''; + }; +}