diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 4c8da8e12bf..751465c9693 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -75,6 +75,7 @@ ./programs/cdemu.nix ./programs/chromium.nix ./programs/command-not-found/command-not-found.nix + ./programs/criu.nix ./programs/dconf.nix ./programs/environment.nix ./programs/fish.nix diff --git a/nixos/modules/programs/criu.nix b/nixos/modules/programs/criu.nix new file mode 100644 index 00000000000..48cf5c88a9f --- /dev/null +++ b/nixos/modules/programs/criu.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let cfg = config.programs.criu; +in { + + options = { + programs.criu = { + enable = mkOption { + default = false; + description = '' + Install criu along with necessary kernel options. + ''; + }; + }; + }; + config = mkIf cfg.enable { + system.requiredKernelConfig = with config.lib.kernelConfig; [ + (isYes "CHECKPOINT_RESTORE") + ]; + boot.kernel.features.criu = true; + environment.systemPackages = [ pkgs.criu ]; + }; + +} diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index 8fb40475bd7..fb846f32a5c 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -682,5 +682,22 @@ with stdenv.lib; WW_MUTEX_SELFTEST? n ''} + ${optionalString (features.criu or false) '' + EXPERT y + CHECKPOINT_RESTORE y + ''} + + ${optionalString ((features.criu or false) && (features.criu_revert_expert or true)) + # Revert some changes, introduced by EXPERT, when necessary for criu + '' + RFKILL_INPUT? y + HID_PICOLCD_FB? y + HID_PICOLCD_BACKLIGHT? y + HID_PICOLCD_LCD? y + HID_PICOLCD_LEDS? y + HID_PICOLCD_CIR? y + DEBUG_MEMORY_INIT? y + ''} + ${extraConfig} ''