summary refs log blame commit diff
path: root/upstart-jobs/swap.nix
blob: cd640b5060e470d9e8daab9b2c622af7a6aa99b0 (plain) (tree)
1
2
3
4
5
6
7
8
9
                              



                 
                                                               

                  
                                                             

  





                
                    

      
                                               


                                                    

                                                      
        











                                                                   




          
{lib, utillinux, swapDevices}:

let

  devicesByPath =
    map (x: x.device) (lib.filter (x: x ? device) swapDevices);
    
  devicesByLabel =
    map (x: x.label) (lib.filter (x: x ? label) swapDevices);

in

{
  name = "swap";
  
  job = "
start on startup
start on new-devices

script
    for device in ${toString devicesByPath}; do
        ${utillinux}/sbin/swapon \"$device\" || true
    done

    for label in ${toString devicesByLabel}; do
        ${utillinux}/sbin/swapon -L \"$label\" || true
    done

    # Remove swap devices not listed in swapDevices.
    # !!! disabled because it doesn't work with labels
    #for used in $(cat /proc/swaps | grep '^/' | sed 's/ .*//'); do
    #    found=
    #    for device in $ {toString swapDevices}; do
    #        if test \"$used\" = \"$device\"; then found=1; fi
    #    done
    #    if test -z \"$found\"; then
    #        ${utillinux}/sbin/swapoff \"$used\" || true
    #    fi
    #done
    
end script
  ";

}