mirror of
https://github.com/aviallon/nixos-lib.git
synced 2026-04-05 17:27:50 +00:00
Massive refactoring in configurable modules
This commit is contained in:
commit
4319f5a3cc
14 changed files with 603 additions and 0 deletions
84
boot.nix
Normal file
84
boot.nix
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
customKernelPatches = {
|
||||
enableX32ABI = {
|
||||
name = "enable-x32";
|
||||
patch = null;
|
||||
extraConfig = ''
|
||||
X86_X32 y
|
||||
'';
|
||||
};
|
||||
grayskyUarches = {
|
||||
name = "graysky-optimized-5.10";
|
||||
patch = pkgs.fetchpatch {
|
||||
name = "graysky-optimized-5.10.patch";
|
||||
url = "https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch";
|
||||
#url = "https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.15%2B.patch"
|
||||
sha256 = "sha256:079f1gvgj7k1irj25k6bc1dgnihhmxvcwqwbgmvrdn14f7kh8qb3";
|
||||
};
|
||||
extraConfig = ''
|
||||
MK10 y
|
||||
'';
|
||||
};
|
||||
};
|
||||
cfg = config.aviallon.boot;
|
||||
in
|
||||
{
|
||||
|
||||
options.aviallon.boot = {
|
||||
enable = mkOption {
|
||||
description = "Enable default boot settings";
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
};
|
||||
useGrub = mkOption {
|
||||
description = "Use Grub instead of systemd-boot";
|
||||
default = !cfg.efi;
|
||||
example = cfg.efi;
|
||||
type = types.bool;
|
||||
};
|
||||
x32abi = {
|
||||
enable = mkEnableOption "X32 kernel ABI";
|
||||
};
|
||||
efi = mkOption rec {
|
||||
description = "Use EFI bootloader";
|
||||
default = builtins.pathExists "/sys/firmware/efi";
|
||||
example = !default;
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
hardware.enableAllFirmware = mkOverride 500 true;
|
||||
|
||||
boot = {
|
||||
initrd.kernelModules = [ ];
|
||||
initrd.availableKernelModules = [ "ehci_pci" ];
|
||||
|
||||
kernelParams = concatLists [
|
||||
(optional cfg.x32abi.enable "syscall.x32=y")
|
||||
];
|
||||
|
||||
kernelPatches = concatLists [
|
||||
(optional cfg.x32abi.enable customKernelPatches.enableX32ABI)
|
||||
];
|
||||
|
||||
loader.grub.enable = cfg.useGrub || (!cfg.efi);
|
||||
loader.grub = {
|
||||
version = 2;
|
||||
device = (if cfg.efi then "nodev" else null);
|
||||
efiSupport = true;
|
||||
};
|
||||
|
||||
loader.systemd-boot.enable = cfg.efi && (!cfg.useGrub);
|
||||
|
||||
loader = {
|
||||
efi.efiSysMountPoint = mkDefault "/boot/efi";
|
||||
efi.canTouchEfiVariables = mkDefault true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
57
desktop.nix
Normal file
57
desktop.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.desktop;
|
||||
in {
|
||||
options.aviallon.desktop = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = types.bool;
|
||||
description = "Enable desktop related configuration";
|
||||
};
|
||||
layout = mkOption {
|
||||
type = types.str;
|
||||
default = "fr";
|
||||
example = "us";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
# Configure keymap in X11
|
||||
services.xserver.layout = cfg.layout;
|
||||
services.xserver.xkbOptions = "eurosign:e";
|
||||
|
||||
|
||||
# Enable the Plasma 5 Desktop Environment.
|
||||
services.xserver.displayManager.sddm.enable = true;
|
||||
services.xserver.desktopManager.plasma5.enable = true;
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
sound.enable = true;
|
||||
# hardware.pulseaudio.enable = true;
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
services.xserver.libinput.enable = true;
|
||||
|
||||
|
||||
environment.systemPackages = with pkgs; with libsForQt5; [
|
||||
firefox
|
||||
konsole
|
||||
kate
|
||||
yakuake
|
||||
];
|
||||
|
||||
networking.networkmanager = {
|
||||
packages = [
|
||||
pkgs.networkmanager-openvpn
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
65
filesystems.nix
Normal file
65
filesystems.nix
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.filesystems;
|
||||
ioSchedType = types.enum [ "bfq" "kyber" "mq-deadline" "none" null ];
|
||||
in
|
||||
{
|
||||
options.aviallon.filesystems = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
description = "Enable aviallon's filesystem tuning";
|
||||
type = types.bool;
|
||||
};
|
||||
hddScheduler = mkOption {
|
||||
default = "bfq";
|
||||
example = null;
|
||||
description = "Automatically set HDDs IO queue algorithm";
|
||||
type = ioSchedType;
|
||||
};
|
||||
slowFlashScheduler = mkOption {
|
||||
default = "kyber";
|
||||
example = "none";
|
||||
description = "Automatically set flash storage IO queue algorithm";
|
||||
type = ioSchedType;
|
||||
};
|
||||
nvmeScheduler = mkOption {
|
||||
default = "none";
|
||||
example = "kyber";
|
||||
description = "Automatically set NVMe IO queue algorithm";
|
||||
type = ioSchedType;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.udev.extraRules = concatStringsSep "\n" (
|
||||
concatLists [
|
||||
(optional (!(builtins.isNull cfg.hddScheduler))
|
||||
''ACTION=="add|change" SUBSYSTEM=="block", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}!="none", ATTR{queue/scheduler}="${cfg.hddScheduler}"''
|
||||
)
|
||||
(optional (!(builtins.isNull cfg.slowFlashScheduler))
|
||||
''ACTION=="add|change" SUBSYSTEM=="block", KERNEL=="sd[a-z]*|nvme[0-9]*n[0-9]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="${cfg.slowFlashScheduler}"''
|
||||
)
|
||||
(optional (!(builtins.isNull cfg.nvmeScheduler))
|
||||
''ACTION=="add|change" SUBSYSTEM=="block", KERNEL=="nvme[0-9]*n[0-9]*", ATTR{queue/scheduler}="${cfg.nvmeScheduler}"''
|
||||
)
|
||||
]
|
||||
);
|
||||
|
||||
services.smartd = {
|
||||
enable = mkDefault true;
|
||||
autodetect = true;
|
||||
defaults.autodetected = "-a -o on -s (S/../.././02|L/../../7/04)";
|
||||
notifications.mail = {
|
||||
enable = true;
|
||||
sender = "admin@${config.networking.hostName}.local";
|
||||
recipient = "antoine@lesviallon.fr";
|
||||
};
|
||||
notifications.x11 = {
|
||||
enable = true;
|
||||
display = ":0";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
92
general.nix
Normal file
92
general.nix
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.general;
|
||||
in
|
||||
{
|
||||
options.aviallon.general = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
description = "Enable aviallon's general tuning";
|
||||
type = types.bool;
|
||||
};
|
||||
cpuArch = mkOption {
|
||||
default = "x86-64";
|
||||
example = "x86-64-v2";
|
||||
description = "Set CPU arch used in overlays, ...";
|
||||
type = types.str;
|
||||
};
|
||||
cpuTune = mkOption {
|
||||
default = "generic";
|
||||
example = "sandybridge";
|
||||
description = "Set CPU tuning for compilers";
|
||||
type = types.str;
|
||||
};
|
||||
unsafeOptimizations = mkEnableOption "unsafe system tuning";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Paris";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n = {
|
||||
defaultLocale = "fr_FR.UTF-8";
|
||||
};
|
||||
|
||||
console = {
|
||||
keyMap = "fr-pc";
|
||||
font = "Lat2-Terminus16";
|
||||
};
|
||||
|
||||
boot.kernelParams = concatLists [
|
||||
(optional cfg.unsafeOptimizations "mitigations=off")
|
||||
];
|
||||
|
||||
powerManagement.cpuFreqGovernor = mkDefault "schedutil";
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
programs.mtr.enable = true;
|
||||
programs.gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
nix.gc.automatic = mkDefault true;
|
||||
nix.gc.randomizedDelaySec = "30min";
|
||||
nix.optimise.automatic = mkDefault true;
|
||||
|
||||
nix.daemonIOSchedPriority = 5;
|
||||
nix.daemonCPUSchedPolicy = "batch";
|
||||
nix.daemonIOSchedClass = "idle";
|
||||
|
||||
system.autoUpgrade.enable = mkDefault true;
|
||||
system.autoUpgrade.allowReboot = mkOverride 500 true;
|
||||
system.autoUpgrade.dates = "00:00";
|
||||
|
||||
|
||||
nixpkgs.localSystem.system = builtins.currentSystem;
|
||||
nixpkgs.localSystem.platform = lib.systems.platforms.pc // {
|
||||
gcc.arch = cfg.cpuArch;
|
||||
gcc.tune = cfg.cpuTune;
|
||||
};
|
||||
|
||||
nix.buildMachines = [
|
||||
{
|
||||
hostName = "lesviallon.fr";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 2;
|
||||
speedFactor = 4;
|
||||
supportedFeatures = [ "kvm" "benchmark" "big-parallel" ];
|
||||
}
|
||||
];
|
||||
nix.distributedBuilds = mkDefault false;
|
||||
|
||||
nix.extraOptions = ''
|
||||
builders-use-substitutes = true
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
||||
61
hardening.nix
Normal file
61
hardening.nix
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.hardening;
|
||||
desktopCfg = config.aviallon.desktop;
|
||||
in
|
||||
{
|
||||
options.aviallon.hardening = {
|
||||
enable = mkOption {
|
||||
default = !desktopCfg.enable; # It usually conflicts with desktop use.
|
||||
example = desktopCfg.enable;
|
||||
description = "Enable aviallon's hardening";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# imports = [
|
||||
# (modulesPath + "/profiles/hardened.nix")
|
||||
# ];
|
||||
boot.kernelPackages = pkgs.linuxPackages_hardened;
|
||||
security.lockKernelModules = mkOverride 500 true;
|
||||
security.protectKernelImage = mkOverride 500 false; # needed for kexec
|
||||
|
||||
security.apparmor.enable = true;
|
||||
services.dbus.apparmor = "enabled";
|
||||
|
||||
boot.kernelParams = [
|
||||
# Slab/slub sanity checks, redzoning, and poisoning
|
||||
"slub_debug=FZP"
|
||||
|
||||
# Overwrite free'd memory
|
||||
"page_poison=1"
|
||||
|
||||
# Enable page allocator randomization
|
||||
"page_alloc.shuffle=1"
|
||||
];
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"kernel.yama.ptrace_scope" = lib.mkOverride 500 1;
|
||||
"kernel.kptr_restrict" = lib.mkOverride 500 2;
|
||||
|
||||
"net.core.bpf_jit_enable" = lib.mkOverride 500 false;
|
||||
|
||||
"kernel.ftrace_enabled" = lib.mkOverride 500 false;
|
||||
};
|
||||
|
||||
security.allowUserNamespaces = mkDefault true;
|
||||
boot.blacklistedKernelModules = mkForce [ ];
|
||||
|
||||
nix.allowedUsers = [ "@wheel" ];
|
||||
|
||||
security.audit.enable = true;
|
||||
security.auditd.enable = true;
|
||||
|
||||
security.audit.rules = [
|
||||
"-a exit,always -F arch=b64 -S execve"
|
||||
];
|
||||
# systemd.services.udisks2.confinement.enable = true;
|
||||
};
|
||||
}
|
||||
22
hardware.nix
Normal file
22
hardware.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.hardware;
|
||||
desktopCfg = config.aviallon.desktop;
|
||||
in
|
||||
{
|
||||
options.aviallon.hardware = {
|
||||
gpuVendor = mkOption {
|
||||
default = null;
|
||||
example = "amd";
|
||||
description = "Enable GPU vendor specific options";
|
||||
type = types.enum [ "amd" "nvidia" "intel" ];
|
||||
};
|
||||
};
|
||||
|
||||
# imports = [
|
||||
# (if (cfg.gpuVendor == "amd") then ./hardware/amd.nix else "")
|
||||
# (if (cfg.gpuVendor == "nvidia") then ./hardware/nvidia.nix else "")
|
||||
# (if (cfg.gpuVendor == "intel") then ./hardware/intel.nix else "")
|
||||
# ];
|
||||
}
|
||||
8
hardware/amd.nix
Normal file
8
hardware/amd.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
inherit (cfg);
|
||||
in
|
||||
{
|
||||
boot.initrd.kernelModules = [ "amdgpu" ];
|
||||
}
|
||||
8
hardware/intel.nix
Normal file
8
hardware/intel.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
#let
|
||||
# inherit (cfg);
|
||||
#in
|
||||
{
|
||||
boot.initrd.kernelModules = [ "i915" ];
|
||||
}
|
||||
8
hardware/nvidia.nix
Normal file
8
hardware/nvidia.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
inherit (cfg);
|
||||
in
|
||||
{
|
||||
boot.initrd.kernelModules = [ "nouveau" ];
|
||||
}
|
||||
19
laptop.nix
Normal file
19
laptop.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.laptop;
|
||||
in {
|
||||
options.aviallon.laptop = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
type = types.bool;
|
||||
description = "Enable aviallon's laptop configuration";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
networking.networkmanager.wifi.powersave = true;
|
||||
aviallon.general.unsafeOptimizations = mkOverride 50 true;
|
||||
};
|
||||
}
|
||||
38
network.nix
Normal file
38
network.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.network;
|
||||
desktopCfg = config.aviallon.desktop;
|
||||
in
|
||||
{
|
||||
options.aviallon.network = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
description = "Enable aviallon's network tuning";
|
||||
type = types.bool;
|
||||
};
|
||||
useNetworkManager = mkOption {
|
||||
default = desktopCfg.enable;
|
||||
example = !desktopCfg.enable;
|
||||
description = "Enable NetworkManager";
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
networking.useNetworkd = mkOverride 500 true;
|
||||
networking.networkmanager.enable = cfg.useNetworkManager;
|
||||
networking.networkmanager.wifi.backend = "iwd";
|
||||
|
||||
networking.dhcpcd.enable = !config.networking.useNetworkd;
|
||||
|
||||
# Must always be false
|
||||
networking.useDHCP = false;
|
||||
|
||||
networking.hostId = lib.mkDefault (builtins.abort "Default hostId not changed" null);
|
||||
networking.hostName = lib.mkDefault (builtins.abort "Default hostname not changed" null);
|
||||
|
||||
networking.firewall.allowPing = !desktopCfg.enable;
|
||||
};
|
||||
}
|
||||
75
packages.nix
Normal file
75
packages.nix
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.programs;
|
||||
desktopCfg = config.aviallon.desktop;
|
||||
generalCfg = config.aviallon.general;
|
||||
|
||||
optimizeWithFlag = pkg: flag:
|
||||
pkg.overrideAttrs (attrs: {
|
||||
NIX_CFLAGS_COMPILE = (attrs.NIX_CFLAGS_COMPILE or "") + " ${flag}";
|
||||
doCheck = false;
|
||||
});
|
||||
optimizeWithFlags = pkg: flags: pkgs.lib.foldl' (pkg: flag: optimizeWithFlag pkg flag) pkg flags;
|
||||
optimizeForThisHost = pkg: optimizeWithFlags pkg (builtins.trace "${toString config.aviallon.programs.compileFlags}" config.aviallon.programs.compileFlags);
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./programs/nano.nix
|
||||
];
|
||||
|
||||
options.aviallon.programs = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
description = "Enable aviallon's programs";
|
||||
type = types.bool;
|
||||
};
|
||||
compileFlags = mkOption {
|
||||
default = [ "-O3" "-march=${generalCfg.cpuArch}" "-mtune=${generalCfg.cpuTune}" ];
|
||||
example = [ "-O2" "-mavx" ];
|
||||
description = "Add specific compile flags";
|
||||
type = types.listOf types.str;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
nixpkgs.config.packageOverrides = pkgs:
|
||||
let
|
||||
optimizePackage = optimizeForThisHost pkgs;
|
||||
in {
|
||||
nano = optimizeForThisHost pkgs.nano;
|
||||
rsyncOptimized = optimizeForThisHost pkgs.rsync;
|
||||
|
||||
opensshOptimized = optimizeForThisHost pkgs.openssh;
|
||||
|
||||
nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
|
||||
inherit pkgs;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
environment.systemPackages = with pkgs; with libsForQt5; [
|
||||
vim
|
||||
wget
|
||||
nano
|
||||
opensshOptimized
|
||||
rsyncOptimized
|
||||
htop
|
||||
];
|
||||
|
||||
programs.ssh.package = pkgs.opensshOptimized;
|
||||
|
||||
programs.ccache.enable = true;
|
||||
programs.ccache.packageNames = [
|
||||
# config.boot.kernelPackages.kernel
|
||||
# "opensshOptimized"
|
||||
# "rsyncOptimized"
|
||||
];
|
||||
nix.sandboxPaths = [
|
||||
(toString config.programs.ccache.cacheDir)
|
||||
];
|
||||
|
||||
};
|
||||
}
|
||||
17
programs/nano.nix
Normal file
17
programs/nano.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{config, pkgs, ...}:
|
||||
{
|
||||
environment.systemPackages = [ pkgs.nanorc ];
|
||||
programs.nano.syntaxHighlight = false;
|
||||
programs.nano.nanorc = ''
|
||||
set tabstospaces
|
||||
set tabsize 2
|
||||
set nowrap
|
||||
set smarthome
|
||||
set positionlog
|
||||
|
||||
include "${pkgs.nano}/share/nano/*.nanorc"
|
||||
include "${pkgs.nanorc}/share/*.nanorc"
|
||||
|
||||
extendsyntax Makefile tabgives " "
|
||||
'';
|
||||
}
|
||||
49
services.nix
Normal file
49
services.nix
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.aviallon.services;
|
||||
desktopCfg = config.aviallon.desktop;
|
||||
in {
|
||||
options.aviallon.services = {
|
||||
enable = mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = types.bool;
|
||||
description = "Enable aviallon's services configuration";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
# services.openssh.permitRootLogin = "prohibit-password";
|
||||
services.openssh.permitRootLogin = "yes";
|
||||
networking.firewall.allowedTCPPorts = [ 22 ];
|
||||
networking.firewall.allowedUDPPorts = [ 22 ];
|
||||
|
||||
services.rsyncd.enable = !desktopCfg.enable;
|
||||
|
||||
services.fstrim.enable = true;
|
||||
|
||||
services.haveged.enable = (builtins.compareVersions config.boot.kernelPackages.kernel.version "5.6" < 0);
|
||||
|
||||
services.irqbalance.enable = true;
|
||||
|
||||
services.printing.enable = desktopCfg.enable;
|
||||
|
||||
services.ananicy.enable = false;
|
||||
services.ananicy.package = pkgs.ananicy-cpp;
|
||||
services.ananicy.settings = {
|
||||
loglevel = "info";
|
||||
cgroup_realtime_workaround = false;
|
||||
};
|
||||
services.ananicy.extraRules = ''
|
||||
{"name": "cp", "type": "BG_CPUIO"}
|
||||
'';
|
||||
|
||||
services.avahi.enable = true; # .lan/.local resolution
|
||||
services.avahi.nssmdns = true; # .lan/.local resolution
|
||||
services.avahi.publish.enable = true;
|
||||
services.avahi.publish.hinfo = true; # Whether to register a mDNS HINFO record which contains information about the local operating system and CPU.
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue