nichts/modules/system/nix/module.nix

163 lines
5 KiB
Nix
Raw Normal View History

2024-08-08 19:21:52 +02:00
# credits to raf
2024-08-22 20:56:58 +02:00
{
2024-09-20 22:57:03 +02:00
config,
2024-08-22 20:56:58 +02:00
inputs,
2024-09-20 22:57:03 +02:00
lib,
2024-08-22 20:56:58 +02:00
pkgs,
...
2024-09-20 22:57:03 +02:00
}: let
inherit (lib.attrsets) mapAttrsToList;
inherit (lib.modules) mkForce;
2024-09-20 22:57:03 +02:00
in {
2024-07-23 00:00:26 +02:00
imports = [
./documentation.nix # nixos documentation
2024-09-22 02:03:18 +02:00
./nixpkgs.nix # global nixpkgs configuration
inputs.lix-module.nixosModules.default
2024-07-23 00:00:26 +02:00
];
nix = {
# package = pkgs.lix;
2024-07-24 17:47:16 +02:00
2024-09-22 01:47:19 +02:00
# fuck channels, no thanks
channel.enable = mkForce false;
2024-09-22 02:03:18 +02:00
# this is taken from sioodmy.
# pin the registry to avoid downloading and evaling a new nixpkgs version every time
2024-10-21 11:56:01 +02:00
registry =
lib.mapAttrs (_: v: {flake = v;}) inputs
// {system.flake = inputs.self;};
2024-09-22 02:03:18 +02:00
2025-04-09 15:31:18 +02:00
# Add inputs to the system's legacy channels
# to make legacy nix commands consistent as well
2024-09-20 22:57:03 +02:00
nixPath = mapAttrsToList (key: _: "${key}=flake:${key}") config.nix.registry;
2025-04-09 15:31:18 +02:00
# Run the Nix daemon on lowest possible priority
2024-07-24 17:47:16 +02:00
daemonCPUSchedPolicy = "idle";
daemonIOSchedClass = "idle";
daemonIOSchedPriority = 7;
# Collect garbage
2025-04-09 15:31:18 +02:00
# NOTE: I use nh for this.
2024-07-24 17:47:16 +02:00
gc = {
automatic = false;
2024-07-24 17:47:16 +02:00
dates = "20:00";
options = "--delete-older-than 7d";
2025-04-09 15:31:18 +02:00
persistent = false;
2024-07-24 17:47:16 +02:00
};
# Automatically optimize nix store by removing hard links
optimise = {
automatic = true;
dates = ["21:00"];
};
2024-07-23 00:00:26 +02:00
settings = {
# Tell nix to use the xdg spec for base directories
# while transitioning, any state must be carried over
# manually, as Nix won't do it for us.
2024-07-24 17:47:16 +02:00
use-xdg-base-directories = true;
# Automatically optimise symlinks
auto-optimise-store = true;
# Allow sudo users to mark the following values as trusted
allowed-users = ["root" "@wheel" "nix-builder"];
# Only allow sudo users to manage the nix store
trusted-users = ["root" "@wheel" "nix-builder"];
# Let the system decide the number of max jobs
# based on available system specs. Usually this is
# the same as the number of cores your CPU has.
2024-08-22 21:26:47 +02:00
max-jobs = 2;
2024-07-24 17:47:16 +02:00
# If set, Nix will perform builds in a sandboxed environment
# that it will set up automatically for each build.
# This prevents impurities in builds by disallowing access
# to dependencies outside of the Nix store by using network
# and mount namespaces in a chroot environment.
2024-07-24 17:47:16 +02:00
sandbox = true;
2024-09-20 22:57:03 +02:00
sandbox-fallback = false;
2024-07-24 17:47:16 +02:00
# Continue building derivations even if one fails
keep-going = true;
# If we haven't received data for >= 20s, retry the download
stalled-download-timeout = 20;
# Show more logs when a build fails and decides to display
# a bunch of lines. `nix log` would normally provide more
# information, but this may save us some time and keystrokes.
log-lines = 30;
# Extra features of Nix that are considered unstable
# and experimental. By default we should always include
# `flakes` and `nix-command`, while others are usually
2024-07-23 00:00:26 +02:00
# optional.
extra-experimental-features = [
"flakes" # flakes
"nix-command" # experimental nix commands
"cgroups" # allow nix to execute builds inside cgroups
"pipe-operator"
2024-07-23 00:00:26 +02:00
];
# Ensures that the result of Nix expressions is fully determined by
2024-07-24 17:47:16 +02:00
# explicitly declared inputs, and not influenced by external state.
# In other words, fully stateless evaluation by Nix at all times.
2024-09-20 22:57:03 +02:00
pure-eval = false;
2024-07-24 17:47:16 +02:00
# Don't warn me that my git tree is dirty, I know.
warn-dirty = false;
# Maximum number of parallel TCP connections
# used to fetch imports and binary caches.
# 0 means no limit, default is 25.
http-connections = 50; # lower values fare better on slow connections
# Whether to accept nix configuration from a flake
# without displaying a Y/N prompt. For those obtuse
# enough to keep this true, I wish the best of luck.
# tl;dr: this is a security vulnerability.
accept-flake-config = false;
# Whether to execute builds inside cgroups. cgroups are
# "a Linux kernel feature that limits, accounts for, and
# isolates the resource usage (CPU, memory, disk I/O, etc.)
# of a collection of processes."
# See:
# <https://en.wikipedia.org/wiki/Cgroups>
use-cgroups = pkgs.stdenv.isLinux; # only supported on Linux
# for direnv GC roots
keep-derivations = true;
keep-outputs = true;
2025-04-09 15:31:18 +02:00
# Use binary cache
2024-07-24 17:47:16 +02:00
builders-use-substitutes = true;
2024-07-23 00:00:26 +02:00
# Substituters to pull from.
2024-07-23 00:00:26 +02:00
substituters = [
2025-04-09 15:31:18 +02:00
"https://cache.nixos.org"
2024-07-23 00:00:26 +02:00
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
];
};
};
systemd.services = {
2024-09-22 01:47:19 +02:00
# WE DONT WANT TO BUILD STUFF ON TMPFS
# ITS NOT A GOOD IDEA
nix-daemon = {
environment.TMPDIR = "/var/tmp";
};
2024-09-22 01:47:19 +02:00
# Do not run garbage collection on AC power.
2024-09-22 19:20:44 +02:00
# This makes for a quite nice difference in battery life.
2024-09-22 01:47:19 +02:00
nix-gc = {
unitConfig.ConditionACPower = true;
};
};
2024-07-23 00:00:26 +02:00
}