Skip to content

Commit 82d99c2

Browse files
committed
refactor(nix): self-guard hardware modules
1 parent 5761906 commit 82d99c2

10 files changed

Lines changed: 60 additions & 12 deletions

File tree

default.nix

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ with lib.my;
1818
let
1919
modulesPath = toString ./modules;
2020
allModulePaths = mapModulesRec' modulesPath id;
21-
# Filter out NixOS-only directories on Darwin
22-
nixosOnlyDirs = [ "hardware" ];
2321
# NixOS-only subdirectories within desktop (allow desktop/term for ghostty)
2422
nixosOnlyDesktopDirs = [
2523
"desktop/browsers"
@@ -48,7 +46,7 @@ with lib.my;
4846
"desktop/gnome.nix" # GNOME desktop environment
4947
"desktop/kde.nix" # KDE desktop environment
5048
"desktop/bspwm.nix" # BSPWM window manager
51-
# NixOS-only hardware/shell modules
49+
# NixOS-only shell modules
5250
"nushell.nix"
5351
"yubikey.nix"
5452
# NixOS-only services
@@ -81,7 +79,7 @@ with lib.my;
8179
lib.hasInfix "/modules/${dir}/" pathStr
8280
# Files inside directory
8381
|| lib.hasSuffix "/modules/${dir}" pathStr # Directory itself
84-
) (nixosOnlyDirs ++ nixosOnlyDesktopDirs)
82+
) nixosOnlyDesktopDirs
8583
|| lib.any (
8684
file:
8785
lib.hasSuffix file pathStr

lib/platform.nix

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,53 @@ let
99
isDarwin = hasSuffix "darwin" system;
1010
isLinux = hasSuffix "linux" system;
1111
isNixOS = isLinux; # For clarity when we specifically mean NixOS
12+
13+
mkUnsupportedPlatformConfig =
14+
{
15+
enabled,
16+
moduleName,
17+
supportedPlatform,
18+
unsupported,
19+
config,
20+
}:
21+
mkMerge (
22+
[
23+
{
24+
assertions = [
25+
{
26+
assertion = !(enabled && unsupported);
27+
message = "${moduleName} is only supported on ${supportedPlatform}.";
28+
}
29+
];
30+
}
31+
]
32+
++ optional (!unsupported) (mkIf enabled config)
33+
);
34+
35+
mkNixOSOnlyConfig =
36+
isDarwin: moduleName: enabled: config:
37+
mkUnsupportedPlatformConfig {
38+
inherit enabled moduleName config;
39+
supportedPlatform = "NixOS";
40+
unsupported = isDarwin;
41+
};
42+
43+
mkDarwinOnlyConfig =
44+
isDarwin: moduleName: enabled: config:
45+
mkUnsupportedPlatformConfig {
46+
inherit enabled moduleName config;
47+
supportedPlatform = "Darwin";
48+
unsupported = !isDarwin;
49+
};
1250
in
1351
{
1452
inherit
1553
isDarwin
1654
isLinux
1755
isNixOS
1856
system
57+
mkNixOSOnlyConfig
58+
mkDarwinOnlyConfig
1959
;
2060

2161
# Helper to get the correct home base directory

modules/hardware/audio.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -15,7 +16,7 @@ in
1516
easyeffects.enable = mkBoolOpt false;
1617
};
1718

18-
config = mkIf cfg.enable (mkMerge [
19+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.audio" cfg.enable (mkMerge [
1920
{
2021
services.pipewire = {
2122
enable = true;

modules/hardware/bluetooth.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -16,7 +17,7 @@ in
1617
audio.enable = mkBoolOpt false;
1718
};
1819

19-
config = mkIf cfg.enable (mkMerge [
20+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.bluetooth" cfg.enable (mkMerge [
2021
{ hardware.bluetooth.enable = true; }
2122

2223
(mkIf cfg.audio.enable {

modules/hardware/ergodox.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -19,7 +20,7 @@ in
1920
};
2021
};
2122

22-
config = mkIf cfg.enable {
23+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.ergodox" cfg.enable {
2324
user.packages = with pkgs; [
2425
teensy-loader-cli
2526
# QMK build environment for local firmware compilation

modules/hardware/fs.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -17,7 +18,7 @@ in
1718
# TODO automount.enable = mkBoolOpt false;
1819
};
1920

20-
config = mkIf cfg.enable (mkMerge [
21+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.fs" cfg.enable (mkMerge [
2122
{
2223
programs.udevil.enable = true;
2324

modules/hardware/nvidia.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -14,7 +15,7 @@ in
1415
enable = mkBoolOpt false;
1516
};
1617

17-
config = mkIf cfg.enable {
18+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.nvidia" cfg.enable {
1819
hardware.graphics.enable = true;
1920

2021
services.xserver.videoDrivers = [ "nvidia" ];

modules/hardware/printing.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -14,7 +15,7 @@ in
1415
enable = mkBoolOpt false;
1516
};
1617

17-
config = mkIf cfg.enable {
18+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.printing" cfg.enable {
1819
services.printing.enable = true;
1920
services.printing.drivers = [ pkgs.brlaser ];
2021
# Network discovery

modules/hardware/sensors.nix

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
config,
33
lib,
44
pkgs,
5+
isDarwin,
56
...
67
}:
78
with lib;
@@ -14,5 +15,7 @@ in
1415
enable = mkBoolOpt false;
1516
};
1617

17-
config = mkIf cfg.enable { user.packages = [ pkgs.lm_sensors ]; };
18+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.sensors" cfg.enable {
19+
user.packages = [ pkgs.lm_sensors ];
20+
};
1821
}

modules/hardware/wacom.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
config,
33
lib,
4+
isDarwin,
45
...
56
}:
67
with lib;
@@ -13,7 +14,7 @@ in
1314
enable = mkBoolOpt false;
1415
};
1516

16-
config = mkIf cfg.enable {
17+
config = mkNixOSOnlyConfig isDarwin "modules.hardware.wacom" cfg.enable {
1718
# For my intuos4 pro. Doesn't work for cintiqs.
1819
services.xserver.wacom.enable = true;
1920
# TODO Move this to udev

0 commit comments

Comments
 (0)