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
|
2024-09-22 01:47:19 +02:00
|
|
|
inherit (lib) mapAttrsToList 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
|
2024-10-29 17:27:04 +01:00
|
|
|
|
|
|
|
inputs.lix-module.nixosModules.lixFromNixpkgs
|
2024-07-23 00:00:26 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
nix = {
|
2024-08-21 22:36:13 +02:00
|
|
|
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
|
|
|
|
2024-09-20 22:57:03 +02:00
|
|
|
# This will additionally add your inputs to the system's legacy channels
|
|
|
|
# Making legacy nix commands consistent as well
|
|
|
|
nixPath = mapAttrsToList (key: _: "${key}=flake:${key}") config.nix.registry;
|
|
|
|
|
2024-07-24 17:47:16 +02:00
|
|
|
# Run the Nix daemon on lowest possible priority so that my system
|
|
|
|
# stays responsive during demanding tasks such as GC and builds.
|
|
|
|
# This is especially useful while auto-gc and auto-upgrade are enabled
|
|
|
|
# as they can be quite demanding on the CPU.
|
|
|
|
daemonCPUSchedPolicy = "idle";
|
|
|
|
daemonIOSchedClass = "idle";
|
|
|
|
daemonIOSchedPriority = 7;
|
|
|
|
|
|
|
|
# Collect garbage
|
|
|
|
gc = {
|
2024-08-13 11:48:37 +02:00
|
|
|
automatic = false;
|
2024-07-24 17:47:16 +02:00
|
|
|
dates = "20:00";
|
|
|
|
options = "--delete-older-than 7d";
|
|
|
|
persistent = false; # don't try to catch up on missed GC runs
|
|
|
|
};
|
|
|
|
|
|
|
|
# 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
|
|
|
|
2024-08-16 13:32:13 +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
|
|
|
|
];
|
|
|
|
|
|
|
|
# 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;
|
|
|
|
|
|
|
|
# Use binary cache, this is not Gentoo
|
|
|
|
# external builders can also pick up those substituters
|
|
|
|
builders-use-substitutes = true;
|
2024-07-23 00:00:26 +02:00
|
|
|
|
2024-08-16 13:32:13 +02:00
|
|
|
# Substituters to pull from.
|
2024-07-23 00:00:26 +02:00
|
|
|
substituters = [
|
|
|
|
"https://cache.nixos.org" # funny binary cache
|
|
|
|
"https://nix-community.cachix.org" # nix-community cache
|
|
|
|
"https://hyprland.cachix.org" # hyprland
|
2024-09-12 14:59:39 +02:00
|
|
|
"https://helix.cachix.org" # a chache for helix
|
2024-07-23 00:00:26 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
trusted-public-keys = [
|
|
|
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
|
|
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
|
|
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
2024-09-20 22:57:03 +02:00
|
|
|
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
|
2024-07-23 00:00:26 +02:00
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2024-09-22 00:19:44 +02:00
|
|
|
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 00:19:44 +02:00
|
|
|
|
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-09-22 00:19:44 +02:00
|
|
|
};
|
2024-07-23 00:00:26 +02:00
|
|
|
}
|