Skip to content

Commit 3f9d8b0

Browse files
brianmcgeeMagicRB
andcommitted
feat: provide nvd and nix-diff view of facter changes
Provides a `debug` namespace within `config.facter` which can be used to display a diff between the system closure with facter enabled, and without. The diffs are in the form of `nvd` or `nix-diff` output e.g. higher level summary versus detailed breakdown. Usage: - `nix run .#nixosConfigurations.basic.config.facter.debug.nvd` - `nix run .#nixosConfigurations.basic.config.facter.debug.nix-diff` Examples: ``` ❯ nix run .#nixosConfigurations.basic.config.facter.debug.nvd <<< /nix/store/fqbia5p8hfnyzxipfjmzxn8v3b69mjvs-nixos-system-nixos-24.11.20240831.12228ff >>> /nix/store/ijkh9sq03y72pfrjvncrsrhwh7g6k8q0-nixos-system-nixos-24.11.20240831.12228ff Added packages: [A.] #1 X-Reload-Triggers-systemd-networkd <none> [A.] #2 X-Restart-Triggers-systemd-networkd <none> [A.] #3 X-Restart-Triggers-systemd-resolved <none> [A.] #4 etc-systemd-networkd.conf <none> [A.] #5 etc-systemd-resolved.conf <none> [A.] #6 graphics-driver.conf <none> [A.] #7 graphics-drivers <none> [A.] #8 hwdata 0.385 [A.] #9 libXfixes 6.0.1 [A.] #10 libXxf86vm 1.1.5 [A.] #11 libdrm 2.4.122 [A.] #12 libpciaccess 0.18.1 [A.] #13 libxshmfence 1.3.2 [A.] #14 llvm 18.1.8-lib [A.] #15 lm-sensors 3.6.0 [A.] #16 mesa 24.2.1, 24.2.1-drivers [A.] #17 unit 99-ethernet-default-dhcp.network, 99-wireless-client-dhcp.network [A.] #18 unit-systemd-network-wait-online-.service <none> [A.] #19 unit-systemd-networkd-wait-online.service <none> [A.] #20 unit-systemd-networkd.service <none> [A.] #21 unit-systemd-networkd.socket <none> [A.] #22 unit-systemd-resolved.service <none> [A.] #23 vulkan-loader 1.3.283.0 [A.] #24 wayland 1.23.0 [A.] #25 xcb-util-keysyms 0.4.1 Removed packages: [R.] #1 X-Restart-Triggers-resolvconf <none> [R-] #2 dhcpcd 10.0.6 [R.] #3 dhcpcd.conf <none> [R-] #4 openresolv 3.13.2 [R.] #5 unit-dhcpcd.service <none> [R.] #6 unit-network-setup.service <none> [R.] #7 unit-resolvconf.service <none> [R.] #8 unit-script-network-setup-start <none> Closure size: 562 -> 581 (55 paths added, 36 paths removed, delta +19, disk usage +700.6MiB). ``` ``` ❯ nix run .#nixosConfigurations.basic.config.facter.debug.nix-diff - /nix/store/fqbia5p8hfnyzxipfjmzxn8v3b69mjvs-nixos-system-nixos-24.11.20240831.12228ff:{out} + /nix/store/ijkh9sq03y72pfrjvncrsrhwh7g6k8q0-nixos-system-nixos-24.11.20240831.12228ff:{out} • The input derivation named `boot.json` differs - /nix/store/zcmdy29f5di6rrfkkld3x773q1d7c1bv-boot.json.drv:{out} + /nix/store/j0wxsmw6fxgzd59pdcljkpq430jbk8jn-boot.json.drv:{out} • The input derivation named `initrd-linux-6.6.48` differs - /nix/store/3z3jgifv3rj5wrh4cx23gzc9hlrwrxwj-initrd-linux-6.6.48.drv:{out} + /nix/store/ds7pcp97k33p93z460b5vzrii02jjkcf-initrd-linux-6.6.48.drv:{out} • The input derivation named `initrd-nixos.conf` differs - /nix/store/y458hw08d5hv2bcf295fv9wvbsfvprrq-initrd-nixos.conf.drv:{out} + /nix/store/989v278ws16mnvlx6fwsa925vgx9a0ia-initrd-nixos.conf.drv:{out} • The environments do not match: text='' virtio_balloon virtio_console virtio_rng virtio_gpu bochs dm_mod '' • The input derivation named `linux-6.6.48-modules-shrunk` differs - /nix/store/dk2xshi6hr85wjyia60nizahl2rq31sz-linux-6.6.48-modules-shrunk.drv:{out} + /nix/store/xxk67p9wy7hxq33gd1mfz5dqcsm2mhsr-linux-6.6.48-modules-shrunk.drv:{out} • The environments do not match: rootModules='' virtio_net virtio_pci virtio_mmio virtio_blk 9p 9pnet_virtio uhci_hcd ata_piix floppy virtio_blk virtio_pci ext2 ext4 autofs tpm-tis tpm-crb efivarfs ahci sata_nv sata_via sata_sis sata_uli ata_piix pata_marvell nvme sd_mod sr_mod mmc_block uhci_hcd ehci_hcd ehci_pci ohci_hcd ohci_pci xhci_hcd xhci_pci usbhid hid_generic hid_lenovo hid_apple hid_roccat hid_logitech_hidpp hid_logitech_dj hid_microsoft hid_cherry hid_corsair pcips2 atkbd i8042 rtc_cmos virtio_balloon virtio_console virtio_rng virtio_gpu bochs dm_mod '' • Skipping environment comparison • Skipping environment comparison ... ... ... ``` Co-authored-by: magicrb <richard@brezak.sk>
1 parent fa11d87 commit 3f9d8b0

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

modules/nixos/debug.nix

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{
2+
lib,
3+
pkgs,
4+
config,
5+
extendModules,
6+
...
7+
}:
8+
{
9+
10+
options = {
11+
12+
system.build = {
13+
noFacter = lib.mkOption {
14+
type = lib.types.unspecified;
15+
description = "A version of the system closure with facter disabled";
16+
};
17+
};
18+
19+
facter.debug = {
20+
nvd = lib.mkOption {
21+
type = lib.types.package;
22+
description = ''
23+
A shell application which will produce an nvd diff of the system closure with and without facter enabled.
24+
'';
25+
};
26+
nix-diff = lib.mkOption {
27+
type = lib.types.package;
28+
description = ''
29+
A shell application which will produce a nix-diff of the system closure with and without facter enabled.
30+
'';
31+
};
32+
};
33+
34+
};
35+
36+
config.system.build = {
37+
noFacter = extendModules {
38+
modules = [
39+
{
40+
# we 'disable' facter by overriding the report and setting it to empty with one caveat: hostPlatform
41+
config.facter.report = lib.mkForce {
42+
system = config.nixpkgs.hostPlatform;
43+
};
44+
}
45+
];
46+
};
47+
};
48+
49+
config.facter.debug = {
50+
51+
nvd = pkgs.writeShellApplication {
52+
name = "facter-diff";
53+
runtimeInputs = [ pkgs.nvd ];
54+
text = ''
55+
nvd diff \
56+
${config.system.build.noFacter.config.system.build.toplevel} \
57+
${config.system.build.toplevel}
58+
'';
59+
};
60+
61+
nix-diff = pkgs.writeShellApplication {
62+
name = "facter-diff";
63+
runtimeInputs = [ pkgs.nix-diff ];
64+
text = ''
65+
nix-diff \
66+
${config.system.build.noFacter.config.system.build.toplevel} \
67+
${config.system.build.toplevel}
68+
'';
69+
};
70+
71+
};
72+
73+
}

modules/nixos/facter.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
imports = [
88
./bluetooth.nix
99
./disk.nix
10+
./debug.nix
1011
./fingerprint
1112
./firmware.nix
1213
./graphics

0 commit comments

Comments
 (0)