nix-v0/src/nixos/nix.nix
2024-11-03 15:27:57 -06:00

164 lines
4.9 KiB
Nix

{
config,
host,
inputs,
lib,
pkgs,
self,
user,
...
}:
let
dots = "/persist${config.hm.home.homeDirectory}/code/nix-config";
in
{
# execute shebangs that assume hardcoded shell paths
services.envfs.enable = true;
# run unpatched binaries on nixos
programs.nix-ld.enable = true;
environment = {
# for nixlang / nixpkgs
systemPackages = with pkgs; [
nix-init
nix-update
nixfmt-rfc-style
];
};
# make a symlink of flake within the generation (e.g. /run/current-system/src)
system.extraSystemBuilderCmds = "ln -s ${self.sourceInfo.outPath} $out/src";
systemd.tmpfiles.rules = [
# cleanup nixpkgs-review cache on boot
"D! ${config.hm.xdg.cacheHome}/nixpkgs-review 1755 ${user} users 1d"
# cleanup channels so nix stops complaining
"D! /nix/var/nix/profiles/per-user/root 1755 root root 1d"
];
custom.shell.packages = {
# list all installed packages
nix-list-packages = {
text =
let
allPkgs = map (p: p.name) (
config.environment.systemPackages ++ config.users.users.${user}.packages ++ config.hm.home.packages
);
in
''sort -ui <<< "${lib.concatLines allPkgs}"'';
};
};
nix =
let
nixPath = [
"nixpkgs=flake:nixpkgs"
# "/nix/var/nix/profiles/per-user/root/channels"
];
in
{
channel.enable = false;
# required for nix-shell -p to work
inherit nixPath;
gc = {
# Automatic garbage collection
automatic = true;
dates = "daily";
options = "--delete-older-than 7d";
};
package = pkgs.nixVersions.latest;
registry = {
nixpkgs-master = {
from = {
type = "indirect";
id = "nixpkgs-master";
};
to = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
};
};
nixpkgs-stable.flake = inputs.nixpkgs-stable;
};
settings = {
auto-optimise-store = true; # Optimise symlinks
# re-evaluate on every rebuild instead of "cached failure of attribute" error
# eval-cache = false;
# required to be set, for some reason nix.nixPath does not write to nix.conf
nix-path = nixPath;
warn-dirty = false;
# removes ~/.nix-profile and ~/.nix-defexpr
use-xdg-base-directories = true;
# use flakes
experimental-features = [
"nix-command"
"flakes"
# "repl-flake"
];
substituters = [
"https://hyprland.cachix.org"
"https://nix-community.cachix.org"
"https://ghostty.cachix.org"
"https://rayandrew.cachix.org"
];
# allow building and pushing of laptop config from desktop
trusted-users = [ user ];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"ghostty.cachix.org-1:QB389yTa6gTyneehvqG58y0WnHjQOqgnA+wBnpWWxns="
"rayandrew.cachix.org-1:kJnvdWgUyErPGaQWgh/yyu91szgRYD+V/WQ4Dbc4n9M="
];
};
# // lib.optionalAttrs (config.nix.package.pname == "lix") {
# repl-overlays = [ ./repl-overlays.nix ];
# };
};
# better nixos generation label
# https://reddit.com/r/NixOS/comments/16t2njf/small_trick_for_people_using_nixos_with_flakes/k2d0sxx/
system.nixos.label = lib.concatStringsSep "-" (
(lib.sort (x: y: x < y) config.system.nixos.tags)
++ [ "${config.system.nixos.version}.${self.sourceInfo.shortRev or "dirty"}" ]
);
# add nixos-option workaround for flakes
# https://github.com/NixOS/nixpkgs/issues/97855#issuecomment-1075818028
nixpkgs.overlays = [
(_: prev: {
nixos-option =
let
flake-compat = prev.fetchFromGitHub {
owner = "edolstra";
repo = "flake-compat";
rev = "12c64ca55c1014cdc1b16ed5a804aa8576601ff2";
hash = "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=";
};
prefix = ''(import ${flake-compat} { src = ${dots}; }).defaultNix.nixosConfigurations.${host}'';
in
prev.runCommandNoCC "nixos-option" { buildInputs = [ prev.makeWrapper ]; } ''
makeWrapper ${lib.getExe prev.nixos-option} $out/bin/nixos-option \
--add-flags --config_expr \
--add-flags "\"${prefix}.config\"" \
--add-flags --options_expr \
--add-flags "\"${prefix}.options\""
'';
})
];
# enable man-db cache for fish to be able to find manpages
# https://discourse.nixos.org/t/fish-shell-and-manual-page-completion-nixos-home-manager/15661
documentation.man.generateCaches = true;
hm.custom.persist = {
home = {
cache.directories = [
".cache/nix"
".cache/nixpkgs-review"
];
};
};
}