about summary refs log tree commit diff stats
path: root/system/disks/hibernate.nix
diff options
context:
space:
mode:
Diffstat (limited to 'system/disks/hibernate.nix')
-rw-r--r--system/disks/hibernate.nix42
1 files changed, 42 insertions, 0 deletions
diff --git a/system/disks/hibernate.nix b/system/disks/hibernate.nix
new file mode 100644
index 00000000..5bb0f8d5
--- /dev/null
+++ b/system/disks/hibernate.nix
@@ -0,0 +1,42 @@
+{pkgs}: {
+  services = {
+    hibernate-preparation = {
+      # TODO check if they work
+      wantedBy = ["systemd-hibernate.service"];
+      unitConfig = {
+        Description = "Enable swap file and disable zram before hibernate";
+        Before = "systemd-hibernate.service";
+      };
+      serviceConfig = {
+        Type = "oneshot";
+        User = "root";
+        ExecStart = "${pkgs.dash}/bin/dash -c \"${pkgs.util-linux}/bin/swapon /swap/swapfile && ${pkgs.util-linux}/bin/swapoff /dev/zram0\"";
+      };
+    };
+    hibernate-resume = {
+      wantedBy = ["hibernate.target"];
+      unitConfig = {
+        Description = "Disable swap after resuming from hibernation";
+        After = "hibernate.target";
+      };
+      serviceConfig = {
+        Type = "oneshot";
+        User = "root";
+        ExecStart = "${pkgs.util-linux}/bin/swapoff /swap/swapfile";
+      };
+    };
+    swapoff-start = {
+      wantedBy = ["multi-user.target"];
+      unitConfig = {
+        Description = "Disable hardware swap after booting";
+      };
+      serviceConfig = {
+        Type = "oneshot";
+        User = "root";
+        ExecStart = "${pkgs.util-linux}/bin/swapoff /swap/swapfile";
+      };
+    };
+    #systemd-hibernate.serviceConfig.Environment = "SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1";
+    #systemd-logind.serviceConfig.Environment = "SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1";
+  };
+}