mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-26 21:33:03 +03:00
Add freefall NixOS service module
This commit is contained in:
parent
94a600772e
commit
ff5eae075a
@ -144,6 +144,7 @@
|
||||
./services/hardware/acpid.nix
|
||||
./services/hardware/amd-hybrid-graphics.nix
|
||||
./services/hardware/bluetooth.nix
|
||||
./services/hardware/freefall.nix
|
||||
./services/hardware/nvidia-optimus.nix
|
||||
./services/hardware/pcscd.nix
|
||||
./services/hardware/pommed.nix
|
||||
|
62
nixos/modules/services/hardware/freefall.nix
Normal file
62
nixos/modules/services/hardware/freefall.nix
Normal file
@ -0,0 +1,62 @@
|
||||
{ config, lib, pkgs, utils, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
|
||||
###### interface
|
||||
|
||||
options = with types; {
|
||||
|
||||
services.freefall = {
|
||||
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to protect HP/Dell laptop hard drives (not SSDs) in free fall.
|
||||
'';
|
||||
type = bool;
|
||||
};
|
||||
|
||||
devices = mkOption {
|
||||
default = [ "/dev/sda" ];
|
||||
description = ''
|
||||
Device paths to all internal spinning hard drives.
|
||||
'';
|
||||
type = listOf string;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
###### implementation
|
||||
|
||||
config = let
|
||||
|
||||
cfg = config.services.freefall;
|
||||
|
||||
mkService = dev:
|
||||
assert dev != "";
|
||||
let dev' = utils.escapeSystemdPath dev; in
|
||||
nameValuePair "freefall-${dev'}"
|
||||
{ description = "Free-fall protection for ${dev}";
|
||||
after = [ "${dev'}.device" ];
|
||||
wantedBy = [ "${dev'}.device" ];
|
||||
path = [ pkgs.freefall ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.freefall}/bin/freefall ${dev}";
|
||||
Restart = "on-failure";
|
||||
Type = "forking";
|
||||
};
|
||||
};
|
||||
|
||||
in mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.freefall ];
|
||||
|
||||
systemd.services = listToAttrs (map mkService cfg.devices);
|
||||
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user