Compare commits

...

6 commits

Author SHA1 Message Date
Alejandro Soto c1d742a383
modules/thinkpad: initial commit 2025-08-06 14:33:08 -06:00
Alejandro Soto f007e55e5f
doctrine/lib: add optional prefix/namespace args to mkModule 2025-08-06 14:33:08 -06:00
Alejandro Soto 8a7c4f302c
doctrine/lib: support module dependencies 2025-08-06 14:33:08 -06:00
Alejandro Soto e05a1ba575
modules/laptop: initial commit 2025-08-06 14:33:08 -06:00
Alejandro Soto f4ed58067e
doctrine/lib: rename importAll.nix -> import-all.nix 2025-08-06 14:33:08 -06:00
Alejandro Soto c435223641
doctrine/lib: refactor 'close' helper 2025-08-06 14:33:07 -06:00
7 changed files with 102 additions and 15 deletions

View file

@ -3,8 +3,18 @@
doctrine,
pkgs,
}: let
close = f: args: f (args // {inherit lib pkgs doctrine;});
close = vars: f: args:
(
if builtins.isPath f
then import f
else f
)
(args // vars);
closeLib = close {inherit lib;};
closeFull = close {inherit lib pkgs doctrine;};
in {
importAll = pkgs.callPackage ./importAll.nix {};
mkModule = close (import ./mk-module.nix);
inherit close;
importAll = closeLib ./import-all.nix;
mkModule = closeFull ./mk-module.nix;
}

View file

@ -1,4 +1,5 @@
{lib}: {
{
lib,
root,
exclude ? ["default"],
}:

View file

@ -1,18 +1,22 @@
{
# The first few arguments are implicitly passed by the 'close' helper
lib,
pkgs,
doctrine,
name,
config,
hm ? null,
sys ? null,
options ? null,
lib,
config,
pkgs,
doctrine,
requires ? [],
prefix ? doctrine.prefix,
namespace ? doctrine.namespace,
}: let
optionsSet = import options {
inherit config lib pkgs cfg name doctrine;
};
configSet = import configFiles.${doctrine.namespace} {
configSet = import configFiles.${namespace} {
inherit config lib pkgs doctrine cfg;
};
@ -20,17 +24,27 @@
inherit sys hm;
};
cfg = config.${doctrine.prefix}.${name};
cfg = config.${prefix}.${name};
in {
config =
lib.optionalAttrs (configFiles ? ${doctrine.namespace})
(lib.mkIf cfg.enable configSet);
lib.optionalAttrs (configFiles ? ${namespace})
(lib.mkIf cfg.enable (lib.mkMerge [
configSet
{
assertions =
map (dependency: {
assertion = cfg.enable -> config.${prefix}.${dependency}.enable;
message = "${prefix}.${name}.enable requires ${prefix}.${dependency}.enable";
})
requires;
}
]));
options = lib.optionalAttrs (options
!= null
&& optionsSet ? ${doctrine.namespace}) {
${doctrine.prefix}.${name} =
optionsSet.${doctrine.namespace}
&& optionsSet ? ${namespace}) {
${prefix}.${name} =
optionsSet.${namespace}
// {
enable = lib.mkEnableOption name;
};

View file

@ -0,0 +1,10 @@
{
config,
doctrine,
...
}:
doctrine.lib.mkModule {
inherit config;
name = "laptop";
sys = ./sys.nix;
}

11
modules/laptop/sys.nix Normal file
View file

@ -0,0 +1,11 @@
{
config,
lib,
pkgs,
...
}: {
services = {
tlp.enable = lib.mkDefault true;
upower.enable = lib.mkDefault true;
};
}

View file

@ -0,0 +1,11 @@
{
config,
doctrine,
...
}:
doctrine.lib.mkModule {
inherit config;
name = "thinkpad";
sys = ./sys.nix;
requires = ["laptop"];
}

30
modules/thinkpad/sys.nix Normal file
View file

@ -0,0 +1,30 @@
{
config,
pkgs,
lib,
...
}: {
# For suspending to RAM to work, set Config -> Power -> Sleep State to "Linux" in EFI.
# See https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Suspend_issues
# Fingerprint sensor requires a firmware-update to work.
boot = {
extraModulePackages = with config.boot.kernelPackages; [acpi_call];
extraModprobeConfig = "options iwlwifi 11n_disable=1 wd_disable=1";
# acpi_call makes tlp work for newer thinkpads
kernelModules = ["acpi_call"];
# Force use of the thinkpad_acpi driver for backlight control.
# This allows the backlight save/load systemd service to work.
kernelParams = ["acpi_backlight=native"];
};
hardware.firmware = [pkgs.sof-firmware];
services = {
fprintd.enable = lib.mkDefault true;
thinkfan.enable = lib.mkDefault true;
tp-auto-kbbl.enable = lib.mkDefault true;
};
}