From 916751169b714ba902d9a72d9625071cb499adc6 Mon Sep 17 00:00:00 2001 From: 514fpv Date: Tue, 2 Jan 2024 14:46:03 +0800 Subject: [PATCH] feat(io): add various I/O configuration --- faucet/io/default.nix | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 faucet/io/default.nix diff --git a/faucet/io/default.nix b/faucet/io/default.nix new file mode 100644 index 00000000..381554db --- /dev/null +++ b/faucet/io/default.nix @@ -0,0 +1,42 @@ +{ pkgs +, lib +, config +, ... }: with lib; let + cfg = config.faucet.io; +in { + options.faucet.io = { + betaflight = mkEnableOption "betaflight udev rules" // { default = true; }; + bluetooth = mkEnableOption "bluetooth daemons and state persistence" // { default = true; }; + audio = mkEnableOption "pulseaudio server configuration" // { default = true; }; + coredump = mkEnableOption "save coredumps handled by systemd"; + }; + + config = { + services.udev.extraRules = "" + (if cfg.betaflight then '' + # DFU (Internal bootloader for STM32 and AT32 MCUs) + SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" + '' else ""); + + networking.networkmanager.enable = mkDefault true; + hardware.bluetooth.enable = mkDefault cfg.bluetooth; + + hardware.pulseaudio = mkIf cfg.audio { + enable = true; + support32Bit = true; + }; + #nixpkgs.config.pulseaudio = mkIf cfg.audio; + + security.pam.loginLimits = mkIf (!cfg.coredump) (singleton { domain = "*"; item = "core"; type = "hard"; value = "0"; }); + systemd.coredump.extraConfig = mkIf (!cfg.coredump) "Storage=none"; + + environment.persistence."/nix/persist/fhs".directories = [ + "/var/log" + "/var/lib/systemd/backlight" + ] ++ + optional config.networking.networkmanager.enable "/etc/NetworkManager/system-connections" ++ + optional cfg.bluetooth "/var/lib/bluetooth" ++ + optional cfg.coredump "/var/lib/systemd/coredump"; + environment.persistence."/nix/persist/fhs".hideMounts = true; + }; +}