From 07b1141ab10e0935186dc01341fa744a572464fd Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 3 Oct 2025 01:58:23 -0400 Subject: [PATCH 01/36] feat: overhaul `lib.mkModules` to dynamically resolve modules A full implementation of #53. I'm not going to explain the code itself because I feel that it is sufficiently self-documenting, but I will elaborate on some smaller details. `lib.mkModules` is intended to enter from the top-level `modules` directory rather than for specific modules. This is because it takes full control of resolution by making the assumptions laid out in #53. The `nixosModules` exposed by my flake have been updated to reflect this. I've also changed a lot of path construction in `lib.flakes` from using string interpolation to using concatenation. The main reason for this is because concatenation will respect the original value type and possibly avoid the idiotic flake copy semantics. To explain this further, when you try to interpolate a path into a string via `"${pathValue}"`, Nix will copy the path into the store. This can be a very expensive operation depending on whether it's a big file or not, and it's really annoying that it does this. On the other hand, concatenation will respect the original path type and concatenate it into a new path value, without performing the stupid flake copy behaviour. This avoids unnecessary I/O operations and potentially fragmenting files by grabbing them in their isolated contexts and not as part of the flake that they evaluate in. --- lib/flakes.nix | 81 +++++++++++++++---- modules/common/my/persist/module.nix | 9 --- .../my/programs/app2unit/module.nix | 9 --- .../home-manager/my/programs/bat/module.nix | 9 --- .../home-manager/my/programs/doggo/module.nix | 9 --- .../home-manager/my/programs/duf/module.nix | 9 --- .../home-manager/my/programs/dust/module.nix | 9 --- .../my/programs/element/module.nix | 9 --- .../my/programs/fastfetch/module.nix | 9 --- .../home-manager/my/programs/fd/module.nix | 9 --- .../home-manager/my/programs/gnupg/module.nix | 9 --- .../my/programs/hyperfine/module.nix | 9 --- .../home-manager/my/programs/inxi/module.nix | 9 --- .../my/programs/legcord/module.nix | 9 --- .../my/programs/libreoffice/module.nix | 9 --- .../my/programs/microsoft-edge/module.nix | 9 --- .../my/programs/patool/module.nix | 9 --- .../my/programs/ripgrep/module.nix | 9 --- .../my/programs/swayosd/module.nix | 9 --- .../my/programs/thunar/module.nix | 9 --- .../my/programs/vscode/module.nix | 9 --- .../home-manager/my/desktops/gnome/module.nix | 11 --- .../home-manager/my/desktops/niri/module.nix | 11 --- .../my/services/yubico/module.nix | 10 --- modules/nixos/home-manager/nix/module.nix | 10 --- .../home-manager/programs/zsh/module.nix | 10 --- .../services/gnome/gnome-keyring/module.nix | 10 --- modules/nixos/my/desktops/gnome/module.nix | 9 --- modules/nixos/my/desktops/niri/module.nix | 9 --- .../my/programs/libimobiledevice/module.nix | 9 --- modules/nixos/my/programs/powertop/module.nix | 9 --- modules/nixos/my/services/yubico/module.nix | 9 --- .../desktops/gnome/config/home-manager.nix} | 0 .../my/desktops/gnome/config/nixos.nix} | 0 .../desktops/gnome/options/home-manager.nix} | 0 .../my/desktops/gnome/options/nixos.nix} | 0 .../my/desktops/niri/config/home-manager.nix} | 0 .../my/desktops/niri/config/nixos.nix} | 0 .../desktops/niri/options/home-manager.nix} | 0 .../my/desktops/niri/options/nixos.nix} | 0 .../my/persist/config/nixos}/copy-service.nix | 0 .../my/persist/config/nixos}/default.nix | 0 .../config/nixos}/initrd-mount-service.nix | 0 .../persist/config/nixos}/remount-service.nix | 0 .../my/persist/options/_utils.nix} | 27 +------ .../my/persist/options/home-manager.nix | 18 +++++ .../my/persist/options/nixos}/default.nix | 0 .../shared/my/persist/options/nixos/paths.nix | 17 ++++ .../my/persist/options/nixos}/toplevel.nix | 0 .../yubico/config/home-manager/default.nix} | 0 .../config/home-manager}/yubikey-manager.nix | 0 .../my/services/yubico/config/nixos.nix} | 0 .../my/services/yubico/options/nixos.nix} | 0 .../nix/config/home-manager.nix} | 0 .../nix/config/nixos/default.nix} | 0 .../nix/config/nixos}/package.nix | 0 .../nix/config/nixos}/wrapper/default.nix | 0 .../nix/config/nixos}/wrapper/nix.sh | 0 .../programs/zsh/config/home-manager.nix} | 0 .../programs/zsh/config/nixos.nix} | 0 .../gnome-keyring/config/home-manager.nix} | 0 .../services/pipewire/config/default.nix | 9 --- modules/shared/services/pipewire/module.nix | 8 -- nix/nixosModules/default.nix | 9 +-- 64 files changed, 104 insertions(+), 352 deletions(-) delete mode 100644 modules/common/my/persist/module.nix delete mode 100644 modules/home-manager/my/programs/app2unit/module.nix delete mode 100644 modules/home-manager/my/programs/bat/module.nix delete mode 100644 modules/home-manager/my/programs/doggo/module.nix delete mode 100644 modules/home-manager/my/programs/duf/module.nix delete mode 100644 modules/home-manager/my/programs/dust/module.nix delete mode 100644 modules/home-manager/my/programs/element/module.nix delete mode 100644 modules/home-manager/my/programs/fastfetch/module.nix delete mode 100644 modules/home-manager/my/programs/fd/module.nix delete mode 100644 modules/home-manager/my/programs/gnupg/module.nix delete mode 100644 modules/home-manager/my/programs/hyperfine/module.nix delete mode 100644 modules/home-manager/my/programs/inxi/module.nix delete mode 100644 modules/home-manager/my/programs/legcord/module.nix delete mode 100644 modules/home-manager/my/programs/libreoffice/module.nix delete mode 100644 modules/home-manager/my/programs/microsoft-edge/module.nix delete mode 100644 modules/home-manager/my/programs/patool/module.nix delete mode 100644 modules/home-manager/my/programs/ripgrep/module.nix delete mode 100644 modules/home-manager/my/programs/swayosd/module.nix delete mode 100644 modules/home-manager/my/programs/thunar/module.nix delete mode 100644 modules/home-manager/my/programs/vscode/module.nix delete mode 100644 modules/nixos/home-manager/my/desktops/gnome/module.nix delete mode 100644 modules/nixos/home-manager/my/desktops/niri/module.nix delete mode 100644 modules/nixos/home-manager/my/services/yubico/module.nix delete mode 100644 modules/nixos/home-manager/nix/module.nix delete mode 100644 modules/nixos/home-manager/programs/zsh/module.nix delete mode 100644 modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix delete mode 100644 modules/nixos/my/desktops/gnome/module.nix delete mode 100644 modules/nixos/my/desktops/niri/module.nix delete mode 100644 modules/nixos/my/programs/libimobiledevice/module.nix delete mode 100644 modules/nixos/my/programs/powertop/module.nix delete mode 100644 modules/nixos/my/services/yubico/module.nix rename modules/{nixos/home-manager/my/desktops/gnome/config.nix => shared/my/desktops/gnome/config/home-manager.nix} (100%) rename modules/{nixos/my/desktops/gnome/config.nix => shared/my/desktops/gnome/config/nixos.nix} (100%) rename modules/{nixos/home-manager/my/desktops/gnome/options.nix => shared/my/desktops/gnome/options/home-manager.nix} (100%) rename modules/{nixos/my/desktops/gnome/options.nix => shared/my/desktops/gnome/options/nixos.nix} (100%) rename modules/{nixos/home-manager/my/desktops/niri/config.nix => shared/my/desktops/niri/config/home-manager.nix} (100%) rename modules/{nixos/my/desktops/niri/config.nix => shared/my/desktops/niri/config/nixos.nix} (100%) rename modules/{nixos/home-manager/my/desktops/niri/options.nix => shared/my/desktops/niri/options/home-manager.nix} (100%) rename modules/{nixos/my/desktops/niri/options.nix => shared/my/desktops/niri/options/nixos.nix} (100%) rename modules/{common/my/persist/config => shared/my/persist/config/nixos}/copy-service.nix (100%) rename modules/{common/my/persist/config => shared/my/persist/config/nixos}/default.nix (100%) rename modules/{common/my/persist/config => shared/my/persist/config/nixos}/initrd-mount-service.nix (100%) rename modules/{common/my/persist/config => shared/my/persist/config/nixos}/remount-service.nix (100%) rename modules/{common/my/persist/options/paths.nix => shared/my/persist/options/_utils.nix} (50%) create mode 100644 modules/shared/my/persist/options/home-manager.nix rename modules/{common/my/persist/options => shared/my/persist/options/nixos}/default.nix (100%) create mode 100644 modules/shared/my/persist/options/nixos/paths.nix rename modules/{common/my/persist/options => shared/my/persist/options/nixos}/toplevel.nix (100%) rename modules/{nixos/home-manager/my/services/yubico/config.nix => shared/my/services/yubico/config/home-manager/default.nix} (100%) rename modules/{nixos/home-manager/my/services/yubico => shared/my/services/yubico/config/home-manager}/yubikey-manager.nix (100%) rename modules/{nixos/my/services/yubico/config.nix => shared/my/services/yubico/config/nixos.nix} (100%) rename modules/{nixos/my/services/yubico/options.nix => shared/my/services/yubico/options/nixos.nix} (100%) rename modules/{nixos/home-manager/nix/config.nix => shared/nix/config/home-manager.nix} (100%) rename modules/{nixos/nix/module.nix => shared/nix/config/nixos/default.nix} (100%) rename modules/{nixos/nix => shared/nix/config/nixos}/package.nix (100%) rename modules/{nixos/nix => shared/nix/config/nixos}/wrapper/default.nix (100%) rename modules/{nixos/nix => shared/nix/config/nixos}/wrapper/nix.sh (100%) rename modules/{nixos/home-manager/programs/zsh/config.nix => shared/programs/zsh/config/home-manager.nix} (100%) rename modules/{nixos/programs/zsh/module.nix => shared/programs/zsh/config/nixos.nix} (100%) rename modules/{nixos/home-manager/services/gnome/gnome-keyring/config.nix => shared/services/gnome/gnome-keyring/config/home-manager.nix} (100%) delete mode 100644 modules/shared/services/pipewire/config/default.nix delete mode 100644 modules/shared/services/pipewire/module.nix diff --git a/lib/flakes.nix b/lib/flakes.nix index e53fee2..3b61799 100644 --- a/lib/flakes.nix +++ b/lib/flakes.nix @@ -4,21 +4,72 @@ ... }: let + sharedNixOSEntrypoints = [ "nixos.nix" "nixos" ]; + sharedHomeManagerEntrypoints = [ "home-manager.nix" "home-manager" ]; + + levelEntrypoints = [ + "module.nix" + + "config.nix" "config" + "options.nix" "options" + ]; + + # Accept any/all of the entrypoints. This is slightly better than using + # `lib.filesystem.listFilesRecursive` because the recursion can be forcibly + # stopped early when valid imports are found, saving on precious I/O time + # that could be used elsewhere. + # + # NOTE: There is no error or duplication checking. A module can multiple of + # these things, which can possibly cause duplicate definitions. + listFilesRecursive = (modulesPath: moduleEntrypoints: + let + entries = builtins.readDir modulesPath; + importOptional = file: lib.optional (entries ? "${file}") (modulesPath + "/${file}"); + + modules = + map importOptional moduleEntrypoints + |> lib.flatten; + in + # Does not recurse when valid import files are found. + modules ++ lib.optionals (modules == []) (entries + |> lib.filterAttrs (_: value: value == "directory") + |> lib.mapAttrsToList (name: _: listFilesRecursive (modulesPath + "/${name}") moduleEntrypoints) + |> lib.flatten) + ); + + # Wrap in an extremely hacky functor to extend arguments given into the + # module without using the extra upper function of upstream's implementation + # of `lib.importApply`. + importApply = (_file: extraArgs: + let + imported = import _file; + in { + # args = { config, lib, modulesPath, options, pkgs, ... } + __functor = _: args: (imported (args // extraArgs)) // { + inherit _file; # better error reporting in the module system + }; + + __functionArgs = lib.functionArgs imported; + }); + self' = { - mkModules = (modulesPath: { ... } @ extraArgs: { - imports = lib.filesystem.listFilesRecursive modulesPath - |> lib.filter (lib.hasSuffix "module.nix") - |> map (mod: - let - imported = import mod; - in { - # args = { config, lib, modulesPath, options, pkgs, ... } - __functor = _: args: (imported (args // extraArgs)) // { - _file = mod; # better error reporting in the module system - }; - __functionArgs = lib.functionArgs imported; - } - ); + mkModules = (directory: { ... } @ extraArgs: + let + levelNixOS = listFilesRecursive (directory + "/nixos") levelEntrypoints; + levelHomeManager = listFilesRecursive (directory + "/home-manager") levelEntrypoints; + + # TODO: performance penalties for iterating this same directory twice. + # Should it be merged into one operation, and separated later? + sharedNixOS = listFilesRecursive (directory + "/shared") sharedNixOSEntrypoints; + sharedHomeManager = listFilesRecursive (directory + "/shared") sharedHomeManagerEntrypoints; + in { + imports = map (file: + importApply file extraArgs + ) (levelNixOS ++ sharedNixOS); + + config.home-manager.sharedModules = map (file: + importApply file extraArgs + ) (levelHomeManager ++ sharedHomeManager); }); mkNixOSConfigurations = (system: list: list @@ -43,7 +94,7 @@ let mkPackages = (pkgs: directory: builtins.readDir directory |> lib.mapAttrs (name: _: - pkgs.callPackage "${directory}/${name}/nix/package.nix" {} + pkgs.callPackage (directory + "/${name}/nix/package.nix") {} ) ); diff --git a/modules/common/my/persist/module.nix b/modules/common/my/persist/module.nix deleted file mode 100644 index 39f4dc1..0000000 --- a/modules/common/my/persist/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options - ./config - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/module.nix b/modules/home-manager/my/programs/app2unit/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/app2unit/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/bat/module.nix b/modules/home-manager/my/programs/bat/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/bat/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/doggo/module.nix b/modules/home-manager/my/programs/doggo/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/doggo/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/duf/module.nix b/modules/home-manager/my/programs/duf/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/duf/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/dust/module.nix b/modules/home-manager/my/programs/dust/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/dust/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/element/module.nix b/modules/home-manager/my/programs/element/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/element/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/fastfetch/module.nix b/modules/home-manager/my/programs/fastfetch/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/fastfetch/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/fd/module.nix b/modules/home-manager/my/programs/fd/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/fd/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/gnupg/module.nix b/modules/home-manager/my/programs/gnupg/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/gnupg/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/hyperfine/module.nix b/modules/home-manager/my/programs/hyperfine/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/hyperfine/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/inxi/module.nix b/modules/home-manager/my/programs/inxi/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/inxi/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/legcord/module.nix b/modules/home-manager/my/programs/legcord/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/legcord/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/libreoffice/module.nix b/modules/home-manager/my/programs/libreoffice/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/libreoffice/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/microsoft-edge/module.nix b/modules/home-manager/my/programs/microsoft-edge/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/microsoft-edge/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/patool/module.nix b/modules/home-manager/my/programs/patool/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/patool/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/ripgrep/module.nix b/modules/home-manager/my/programs/ripgrep/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/ripgrep/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/swayosd/module.nix b/modules/home-manager/my/programs/swayosd/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/swayosd/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/thunar/module.nix b/modules/home-manager/my/programs/thunar/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/thunar/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/vscode/module.nix b/modules/home-manager/my/programs/vscode/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/home-manager/my/programs/vscode/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/gnome/module.nix b/modules/nixos/home-manager/my/desktops/gnome/module.nix deleted file mode 100644 index f2dbf63..0000000 --- a/modules/nixos/home-manager/my/desktops/gnome/module.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./options.nix - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/niri/module.nix b/modules/nixos/home-manager/my/desktops/niri/module.nix deleted file mode 100644 index f2dbf63..0000000 --- a/modules/nixos/home-manager/my/desktops/niri/module.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./options.nix - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/services/yubico/module.nix b/modules/nixos/home-manager/my/services/yubico/module.nix deleted file mode 100644 index fa54126..0000000 --- a/modules/nixos/home-manager/my/services/yubico/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/nix/module.nix b/modules/nixos/home-manager/nix/module.nix deleted file mode 100644 index fa54126..0000000 --- a/modules/nixos/home-manager/nix/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/programs/zsh/module.nix b/modules/nixos/home-manager/programs/zsh/module.nix deleted file mode 100644 index fa54126..0000000 --- a/modules/nixos/home-manager/programs/zsh/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix b/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix deleted file mode 100644 index fa54126..0000000 --- a/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/nixos/my/desktops/gnome/module.nix b/modules/nixos/my/desktops/gnome/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/nixos/my/desktops/gnome/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/my/desktops/niri/module.nix b/modules/nixos/my/desktops/niri/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/nixos/my/desktops/niri/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/my/programs/libimobiledevice/module.nix b/modules/nixos/my/programs/libimobiledevice/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/nixos/my/programs/libimobiledevice/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/my/programs/powertop/module.nix b/modules/nixos/my/programs/powertop/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/nixos/my/programs/powertop/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/my/services/yubico/module.nix b/modules/nixos/my/services/yubico/module.nix deleted file mode 100644 index aa5a227..0000000 --- a/modules/nixos/my/services/yubico/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/gnome/config.nix b/modules/shared/my/desktops/gnome/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/my/desktops/gnome/config.nix rename to modules/shared/my/desktops/gnome/config/home-manager.nix diff --git a/modules/nixos/my/desktops/gnome/config.nix b/modules/shared/my/desktops/gnome/config/nixos.nix similarity index 100% rename from modules/nixos/my/desktops/gnome/config.nix rename to modules/shared/my/desktops/gnome/config/nixos.nix diff --git a/modules/nixos/home-manager/my/desktops/gnome/options.nix b/modules/shared/my/desktops/gnome/options/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/my/desktops/gnome/options.nix rename to modules/shared/my/desktops/gnome/options/home-manager.nix diff --git a/modules/nixos/my/desktops/gnome/options.nix b/modules/shared/my/desktops/gnome/options/nixos.nix similarity index 100% rename from modules/nixos/my/desktops/gnome/options.nix rename to modules/shared/my/desktops/gnome/options/nixos.nix diff --git a/modules/nixos/home-manager/my/desktops/niri/config.nix b/modules/shared/my/desktops/niri/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/my/desktops/niri/config.nix rename to modules/shared/my/desktops/niri/config/home-manager.nix diff --git a/modules/nixos/my/desktops/niri/config.nix b/modules/shared/my/desktops/niri/config/nixos.nix similarity index 100% rename from modules/nixos/my/desktops/niri/config.nix rename to modules/shared/my/desktops/niri/config/nixos.nix diff --git a/modules/nixos/home-manager/my/desktops/niri/options.nix b/modules/shared/my/desktops/niri/options/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/my/desktops/niri/options.nix rename to modules/shared/my/desktops/niri/options/home-manager.nix diff --git a/modules/nixos/my/desktops/niri/options.nix b/modules/shared/my/desktops/niri/options/nixos.nix similarity index 100% rename from modules/nixos/my/desktops/niri/options.nix rename to modules/shared/my/desktops/niri/options/nixos.nix diff --git a/modules/common/my/persist/config/copy-service.nix b/modules/shared/my/persist/config/nixos/copy-service.nix similarity index 100% rename from modules/common/my/persist/config/copy-service.nix rename to modules/shared/my/persist/config/nixos/copy-service.nix diff --git a/modules/common/my/persist/config/default.nix b/modules/shared/my/persist/config/nixos/default.nix similarity index 100% rename from modules/common/my/persist/config/default.nix rename to modules/shared/my/persist/config/nixos/default.nix diff --git a/modules/common/my/persist/config/initrd-mount-service.nix b/modules/shared/my/persist/config/nixos/initrd-mount-service.nix similarity index 100% rename from modules/common/my/persist/config/initrd-mount-service.nix rename to modules/shared/my/persist/config/nixos/initrd-mount-service.nix diff --git a/modules/common/my/persist/config/remount-service.nix b/modules/shared/my/persist/config/nixos/remount-service.nix similarity index 100% rename from modules/common/my/persist/config/remount-service.nix rename to modules/shared/my/persist/config/nixos/remount-service.nix diff --git a/modules/common/my/persist/options/paths.nix b/modules/shared/my/persist/options/_utils.nix similarity index 50% rename from modules/common/my/persist/options/paths.nix rename to modules/shared/my/persist/options/_utils.nix index 78bcade..b5bfcb0 100644 --- a/modules/common/my/persist/options/paths.nix +++ b/modules/shared/my/persist/options/_utils.nix @@ -1,6 +1,5 @@ { lib, - ... }: let pathSubmodule = coercedType: coercedFunc: { @@ -14,7 +13,7 @@ let }; }; }; - +in { mkOption' = { coercedType, coercedFunc, unique }: lib.genAttrs [ "directories" "files" ] (_: lib.mkOption { default = []; @@ -23,28 +22,4 @@ let inherit path unique; }) (submodule (pathSubmodule coercedType coercedFunc))); }); -in { - options = { - my.persist = mkOption' { - coercedType = with lib.types; systemPath; - coercedFunc = lib.id; - - # System state usually wants to be shared - unique = false; - }; - }; - - config = { - home-manager.sharedModules = [({ config, ... }: { - options = { - my.persist = mkOption' { - coercedType = with lib.types; userPath; - coercedFunc = lib.replaceStrings [ "~" ] [ config.home.homeDirectory ]; - - # User state usually wants to be unique - unique = true; - }; - }; - })]; - }; } \ No newline at end of file diff --git a/modules/shared/my/persist/options/home-manager.nix b/modules/shared/my/persist/options/home-manager.nix new file mode 100644 index 0000000..eee44b2 --- /dev/null +++ b/modules/shared/my/persist/options/home-manager.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + ... +}: +let + utils = import ./_utils.nix { inherit lib; }; +in { + options = { + my.persist = utils.mkOption' { + coercedType = with lib.types; userPath; + coercedFunc = lib.replaceStrings [ "~" ] [ config.home.homeDirectory ]; + + # User state usually wants to be unique + unique = true; + }; + }; +} \ No newline at end of file diff --git a/modules/common/my/persist/options/default.nix b/modules/shared/my/persist/options/nixos/default.nix similarity index 100% rename from modules/common/my/persist/options/default.nix rename to modules/shared/my/persist/options/nixos/default.nix diff --git a/modules/shared/my/persist/options/nixos/paths.nix b/modules/shared/my/persist/options/nixos/paths.nix new file mode 100644 index 0000000..71164c3 --- /dev/null +++ b/modules/shared/my/persist/options/nixos/paths.nix @@ -0,0 +1,17 @@ +{ + lib, + ... +}: +let + utils = import ../_utils.nix { inherit lib; }; +in { + options = { + my.persist = utils.mkOption' { + coercedType = with lib.types; systemPath; + coercedFunc = lib.id; + + # System state usually wants to be shared + unique = false; + }; + }; +} \ No newline at end of file diff --git a/modules/common/my/persist/options/toplevel.nix b/modules/shared/my/persist/options/nixos/toplevel.nix similarity index 100% rename from modules/common/my/persist/options/toplevel.nix rename to modules/shared/my/persist/options/nixos/toplevel.nix diff --git a/modules/nixos/home-manager/my/services/yubico/config.nix b/modules/shared/my/services/yubico/config/home-manager/default.nix similarity index 100% rename from modules/nixos/home-manager/my/services/yubico/config.nix rename to modules/shared/my/services/yubico/config/home-manager/default.nix diff --git a/modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix b/modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix similarity index 100% rename from modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix rename to modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix diff --git a/modules/nixos/my/services/yubico/config.nix b/modules/shared/my/services/yubico/config/nixos.nix similarity index 100% rename from modules/nixos/my/services/yubico/config.nix rename to modules/shared/my/services/yubico/config/nixos.nix diff --git a/modules/nixos/my/services/yubico/options.nix b/modules/shared/my/services/yubico/options/nixos.nix similarity index 100% rename from modules/nixos/my/services/yubico/options.nix rename to modules/shared/my/services/yubico/options/nixos.nix diff --git a/modules/nixos/home-manager/nix/config.nix b/modules/shared/nix/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/nix/config.nix rename to modules/shared/nix/config/home-manager.nix diff --git a/modules/nixos/nix/module.nix b/modules/shared/nix/config/nixos/default.nix similarity index 100% rename from modules/nixos/nix/module.nix rename to modules/shared/nix/config/nixos/default.nix diff --git a/modules/nixos/nix/package.nix b/modules/shared/nix/config/nixos/package.nix similarity index 100% rename from modules/nixos/nix/package.nix rename to modules/shared/nix/config/nixos/package.nix diff --git a/modules/nixos/nix/wrapper/default.nix b/modules/shared/nix/config/nixos/wrapper/default.nix similarity index 100% rename from modules/nixos/nix/wrapper/default.nix rename to modules/shared/nix/config/nixos/wrapper/default.nix diff --git a/modules/nixos/nix/wrapper/nix.sh b/modules/shared/nix/config/nixos/wrapper/nix.sh similarity index 100% rename from modules/nixos/nix/wrapper/nix.sh rename to modules/shared/nix/config/nixos/wrapper/nix.sh diff --git a/modules/nixos/home-manager/programs/zsh/config.nix b/modules/shared/programs/zsh/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/programs/zsh/config.nix rename to modules/shared/programs/zsh/config/home-manager.nix diff --git a/modules/nixos/programs/zsh/module.nix b/modules/shared/programs/zsh/config/nixos.nix similarity index 100% rename from modules/nixos/programs/zsh/module.nix rename to modules/shared/programs/zsh/config/nixos.nix diff --git a/modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix b/modules/shared/services/gnome/gnome-keyring/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix rename to modules/shared/services/gnome/gnome-keyring/config/home-manager.nix diff --git a/modules/shared/services/pipewire/config/default.nix b/modules/shared/services/pipewire/config/default.nix deleted file mode 100644 index 30f51c5..0000000 --- a/modules/shared/services/pipewire/config/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./nixos.nix - ]; - - config.home-manager.sharedModules = [ - ./home-manager.nix - ]; -} \ No newline at end of file diff --git a/modules/shared/services/pipewire/module.nix b/modules/shared/services/pipewire/module.nix deleted file mode 100644 index fac2ea2..0000000 --- a/modules/shared/services/pipewire/module.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./config - ]; -} \ No newline at end of file diff --git a/nix/nixosModules/default.nix b/nix/nixosModules/default.nix index f0fe625..3453b24 100644 --- a/nix/nixosModules/default.nix +++ b/nix/nixosModules/default.nix @@ -14,14 +14,11 @@ in { flake = { nixosModules.default = { imports = [ - home-manager.nixosModules.default - - (lib.mkModules ../../modules/common {}) - (lib.mkModules ../../modules/shared {}) - (lib.mkModules ../../modules/nixos { + (lib.mkModules ../../modules { inherit inputs; }) + home-manager.nixosModules.default ../../users ]; @@ -37,8 +34,6 @@ in { sharedModules = [ stylix.homeModules.stylix { config.stylix.autoEnable = false; } - - (lib.mkModules ../../modules/home-manager {}) ]; }; }; From f69f3a9a878b4b70949f512a172196ce6a67421d Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 3 Oct 2025 23:42:46 -0400 Subject: [PATCH 02/36] feat: stop using busybox and toybox for inxi wrapper That was stupid of me. I originally used them because they had more of the common binaries, but they didn't even work correctly for `inxi`. Case in point, it always failed to read PCI devices. --- .../home-manager/my/programs/inxi/options.nix | 5 ++- .../home-manager/my/programs/inxi/package.nix | 34 ++++++++++++++----- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/modules/home-manager/my/programs/inxi/options.nix b/modules/home-manager/my/programs/inxi/options.nix index 8e9c751..8f6e8bd 100644 --- a/modules/home-manager/my/programs/inxi/options.nix +++ b/modules/home-manager/my/programs/inxi/options.nix @@ -8,7 +8,10 @@ my.programs.inxi = { enable = lib.mkDefaultEnableOption "inxi"; package = lib.mkOption { - default = pkgs.callPackage ./package.nix {}; + default = pkgs.inxi; + apply = inxi: pkgs.callPackage ./package.nix { + inherit inxi; + }; type = with lib.types; package; }; diff --git a/modules/home-manager/my/programs/inxi/package.nix b/modules/home-manager/my/programs/inxi/package.nix index afa9aee..4c3f1c2 100644 --- a/modules/home-manager/my/programs/inxi/package.nix +++ b/modules/home-manager/my/programs/inxi/package.nix @@ -5,33 +5,51 @@ inxi, - bluez, + # `inxi --recommnds` system programs bluez-tools, - busybox, dig, dmidecode, + file, + hddtemp, + iproute2, + kmod, lm_sensors, + lvm2, + mdadm, + pciutils, + procps, smartmontools, - toybox, + tree, usbutils, - virtualgl, + + # `inxi --recommends` display information programs + mesa-demos, vulkan-tools, wayland-utils, + wlr-randr, }: let runtimeInputs = [ - bluez bluez-tools - busybox dig dmidecode + file + hddtemp + iproute2 + kmod lm_sensors + lvm2 + mdadm + pciutils + procps smartmontools - toybox + tree usbutils - virtualgl + + mesa-demos vulkan-tools wayland-utils + wlr-randr ]; in symlinkJoin { name = "inxi"; From 28b79845303ed6749e7e964d7e0e065f928f05ea Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 7 Oct 2025 18:50:15 -0400 Subject: [PATCH 03/36] feat: stop using FHS vscode, fix up some extensions FHS VSCode is abysmal, it fails to interop with devshells, it cannot run priviledged commands from the terminal due to being in a container, its impure, etc. Instead, I want to fixup extensions where applicable directly, usually by referring to Nixpkgs derivations. --- .../my/programs/vscode/config.nix | 7 +---- .../my/programs/vscode/options.nix | 19 ++++++++---- .../my/programs/vscode/package.nix | 3 +- .../frontear/home/programs/vscode/default.nix | 30 +++++-------------- .../home/programs/vscode/extensions.nix | 21 ------------- .../home/programs/vscode/settings.nix | 1 + 6 files changed, 24 insertions(+), 57 deletions(-) diff --git a/modules/home-manager/my/programs/vscode/config.nix b/modules/home-manager/my/programs/vscode/config.nix index f9a6507..b4a1b84 100644 --- a/modules/home-manager/my/programs/vscode/config.nix +++ b/modules/home-manager/my/programs/vscode/config.nix @@ -7,11 +7,6 @@ let cfg = config.my.programs.vscode; fmt = pkgs.formats.json {}; - - vscode = pkgs.callPackage ./package.nix { - withExtensions = cfg.extensions; - withPackages = cfg.packages; - }; in { config = lib.mkIf cfg.enable { my.persist.directories = [ @@ -19,7 +14,7 @@ in { ]; home.packages = [ - vscode + cfg.package ]; xdg.configFile."Code/User/settings.json".source = diff --git a/modules/home-manager/my/programs/vscode/options.nix b/modules/home-manager/my/programs/vscode/options.nix index 5b69fc0..ccbdcd4 100644 --- a/modules/home-manager/my/programs/vscode/options.nix +++ b/modules/home-manager/my/programs/vscode/options.nix @@ -1,25 +1,32 @@ { + config, lib, pkgs, ... }: let + cfg = config.my.programs.vscode; fmt = pkgs.formats.json {}; in { options = { my.programs.vscode = { enable = lib.mkEnableOption "vscode"; - extensions = lib.mkOption { - default = []; + package = lib.mkOption { + default = pkgs.vscode; + apply = vscode: pkgs.callPackage ./package.nix { + inherit vscode; - type = with lib.types; listOf package; + withExtensions = cfg.extensions; + }; + + type = with lib.types; package; }; - packages = lib.mkOption { - default = _: []; + extensions = lib.mkOption { + default = []; - type = with lib.types; functionTo (listOf package); + type = with lib.types; listOf package; }; settings = lib.mkOption { diff --git a/modules/home-manager/my/programs/vscode/package.nix b/modules/home-manager/my/programs/vscode/package.nix index 472592d..534a69b 100644 --- a/modules/home-manager/my/programs/vscode/package.nix +++ b/modules/home-manager/my/programs/vscode/package.nix @@ -3,10 +3,9 @@ vscode-with-extensions, withExtensions ? [], - withPackages ? (pkgs: []), }: vscode-with-extensions.override { - vscode = vscode.fhsWithPackages withPackages; + inherit vscode; vscodeExtensions = withExtensions; } \ No newline at end of file diff --git a/users/frontear/home/programs/vscode/default.nix b/users/frontear/home/programs/vscode/default.nix index fc924c5..88bf082 100644 --- a/users/frontear/home/programs/vscode/default.nix +++ b/users/frontear/home/programs/vscode/default.nix @@ -6,28 +6,14 @@ my.programs.vscode = { enable = true; - extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace (import ./extensions.nix); - - packages = pkgs: with pkgs; [ - # For `ms-vscode.cpptools` - gcc-unwrapped - gdb - - # For `dbaeumer.vscode-eslint` - eslint - - # For `redhat.java - openjdk21 - - # For `jnoortheen.nix-ide` - nixd - - # For `ms-python.python` - python3 - - # For `rust-lang.rust-analyzer` - rust-analyzer - ]; + extensions = + pkgs.vscode-utils.extensionsFromVscodeMarketplace (import ./extensions.nix) + ++ (with pkgs.vscode-extensions; [ + # TODO: prefer Nixpkgs extensions when possible + ms-python.python + ms-vscode.cpptools + rust-lang.rust-analyzer + ]); settings = import ./settings.nix; }; diff --git a/users/frontear/home/programs/vscode/extensions.nix b/users/frontear/home/programs/vscode/extensions.nix index f4efc27..6d04d2d 100644 --- a/users/frontear/home/programs/vscode/extensions.nix +++ b/users/frontear/home/programs/vscode/extensions.nix @@ -293,13 +293,6 @@ publisher = "ms-python"; version = "2025.13.2025091201"; } - { - arch = "linux-x64"; - hash = "sha256-cdPPACBdUKYyClvh3/qV8Te4rfZJieFHeVfgJYGtCUs="; - name = "python"; - publisher = "ms-python"; - version = "2025.15.2025091901"; - } { arch = ""; hash = "sha256-Z2R7gUZw1S2iL3KX/3fB326lFzE39v9LGq17Ec2aHCA="; @@ -307,13 +300,6 @@ publisher = "ms-python"; version = "2025.8.2"; } - { - arch = "linux-x64"; - hash = "sha256-UlSNIfMSQQCFTaJQ/sNzZPcnKcql2V8wP1xPAoOq5os="; - name = "cpptools"; - publisher = "ms-vscode"; - version = "1.27.7"; - } { arch = ""; hash = "sha256-MibP2zqTwlXXVsXQOSuoi5SO8BskJC/AihrhJFg8tac="; @@ -377,13 +363,6 @@ publisher = "redhat"; version = "1.46.2025091808"; } - { - arch = "linux-x64"; - hash = "sha256-d3Qy3efm9AtdY9wRauJfcKYXdrtu0eK1YG5/tfgvQHg="; - name = "rust-analyzer"; - publisher = "rust-lang"; - version = "0.4.2619"; - } { arch = ""; hash = "sha256-zgCqKwnP7Fm655FPUkD5GL+/goaplST8507X890Tnhc="; diff --git a/users/frontear/home/programs/vscode/settings.nix b/users/frontear/home/programs/vscode/settings.nix index 8311835..c0d98fe 100644 --- a/users/frontear/home/programs/vscode/settings.nix +++ b/users/frontear/home/programs/vscode/settings.nix @@ -49,6 +49,7 @@ "workbench.layoutControl.enabled" = false; "workbench.list.smoothScrolling" = true; "workbench.productIconTheme" = "material-product-icons"; + "workbench.secondarySideBar.defaultVisibility" = "hidden"; # stupid LLM chat "workbench.startupEditor" = "newUntitledFile"; # Extensions From 5db55a7cba04e0c71fb3038dabcc325f60e621f2 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 7 Oct 2025 19:14:47 -0400 Subject: [PATCH 04/36] feat: drop term ssh alias This is not a good default. More info can be found on the [ArchLinux wiki](https://wiki.archlinux.org/title/OpenSSH#%22Terminal_unknown%22_or_%22Error_opening_terminal%22_error_message). --- users/frontear/home/default.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/users/frontear/home/default.nix b/users/frontear/home/default.nix index 3d481c1..4a340cc 100644 --- a/users/frontear/home/default.nix +++ b/users/frontear/home/default.nix @@ -12,11 +12,6 @@ home.stateVersion = "24.11"; - home.shellAliases = { - # Prevent TERM capabilities leaking into a shitty ssh - "ssh" = "TERM= ssh"; - }; - programs = { direnv = { enable = true; From 810454a446cc188c2a8990f0c84ce2a176293b4c Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 7 Oct 2025 20:51:18 -0400 Subject: [PATCH 05/36] feat: add `/var/tmp` to persist, extract module-specific persists --- modules/nixos/security/sudo/module.nix | 15 +++++++++++++++ .../shared/my/persist/config/nixos/default.nix | 15 +++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 modules/nixos/security/sudo/module.nix diff --git a/modules/nixos/security/sudo/module.nix b/modules/nixos/security/sudo/module.nix new file mode 100644 index 0000000..8102fa6 --- /dev/null +++ b/modules/nixos/security/sudo/module.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + ... +}: +let + cfg = config.security.sudo; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "/var/db/sudo/lectured"; + unique = false; + }]; + }; +} \ No newline at end of file diff --git a/modules/shared/my/persist/config/nixos/default.nix b/modules/shared/my/persist/config/nixos/default.nix index 512ebe4..793d304 100644 --- a/modules/shared/my/persist/config/nixos/default.nix +++ b/modules/shared/my/persist/config/nixos/default.nix @@ -27,10 +27,13 @@ in { path = "/var/log"; unique = true; } - ] ++ lib.optionals config.security.sudo.enable [{ - path = "/var/db/sudo/lectured"; # preferential. - unique = false; - }]; + { + # contrary to the name, it's intended to hold persistent data. + # see: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05s15.html + path = "/var/tmp"; + unique = true; + } + ]; files = [ { @@ -54,8 +57,8 @@ in { # save it, which causes the service to fail. # # This doesn't matter at all for our setup because we have the confidence - # in knowing the file is safe. If for some reason it's not, then that was - # a concious decision by the user and they can handle the problems with it. + # in knowing the file is safe. If for some reason it's not, then that was a + # conscious decision by the user and they can handle the problems with it. boot.initrd.systemd.suppressedUnits = [ "systemd-machine-id-commit.service" ]; systemd.suppressedSystemUnits = [ "systemd-machine-id-commit.service" ]; }; From 71d832006ef65f2d9e52bee58a78a00880e4efca Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 7 Oct 2025 21:06:59 -0400 Subject: [PATCH 06/36] feat: cleanup nix wrapper directory --- modules/shared/nix/config/nixos/default.nix | 2 +- .../nix/config/nixos/{package.nix => package/default.nix} | 4 +++- .../config/nixos/{wrapper/default.nix => package/package.nix} | 4 ++-- .../shared/nix/config/nixos/{wrapper => package/src}/nix.sh | 0 4 files changed, 6 insertions(+), 4 deletions(-) rename modules/shared/nix/config/nixos/{package.nix => package/default.nix} (79%) rename modules/shared/nix/config/nixos/{wrapper/default.nix => package/package.nix} (91%) rename modules/shared/nix/config/nixos/{wrapper => package/src}/nix.sh (100%) diff --git a/modules/shared/nix/config/nixos/default.nix b/modules/shared/nix/config/nixos/default.nix index 850930c..919b49b 100644 --- a/modules/shared/nix/config/nixos/default.nix +++ b/modules/shared/nix/config/nixos/default.nix @@ -31,7 +31,7 @@ in { # Set the system Nix package to our custom wrapper, which provides # instant access to all `pkgs` and `lib` attributes. - nix.package = pkgs.callPackage ./package.nix {}; + nix.package = pkgs.callPackage ./package {}; } { # Throttle the nix-daemon so it doesn't consume diff --git a/modules/shared/nix/config/nixos/package.nix b/modules/shared/nix/config/nixos/package/default.nix similarity index 79% rename from modules/shared/nix/config/nixos/package.nix rename to modules/shared/nix/config/nixos/package/default.nix index 1a7c650..aeaf14b 100644 --- a/modules/shared/nix/config/nixos/package.nix +++ b/modules/shared/nix/config/nixos/package/default.nix @@ -5,7 +5,9 @@ nix, }: let - wrapper = callPackage ./wrapper { inherit nix; }; + wrapper = callPackage ./package.nix { + inherit nix; + }; in buildEnv { inherit (nix) name version; diff --git a/modules/shared/nix/config/nixos/wrapper/default.nix b/modules/shared/nix/config/nixos/package/package.nix similarity index 91% rename from modules/shared/nix/config/nixos/wrapper/default.nix rename to modules/shared/nix/config/nixos/package/package.nix index 6b5b90b..fda140b 100644 --- a/modules/shared/nix/config/nixos/wrapper/default.nix +++ b/modules/shared/nix/config/nixos/package/package.nix @@ -10,14 +10,14 @@ stdenvNoCC.mkDerivation { src = with lib.fileset; toSource { root = ./.; fileset = unions [ - ./nix.sh + ./src ]; }; installPhase = '' runHook preInstall - install -Dm755 nix.sh $out/bin/nix + install -Dm755 src/nix.sh $out/bin/nix runHook postInstall ''; diff --git a/modules/shared/nix/config/nixos/wrapper/nix.sh b/modules/shared/nix/config/nixos/package/src/nix.sh similarity index 100% rename from modules/shared/nix/config/nixos/wrapper/nix.sh rename to modules/shared/nix/config/nixos/package/src/nix.sh From cd14ccc7905dbce9c06550da52f2acd5f00a4861 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 7 Oct 2025 23:03:05 -0400 Subject: [PATCH 07/36] feat: add `xrandr` to inxi closure For some reason, the display information does not populate without this, even though we are using wayland. --- modules/home-manager/my/programs/inxi/package.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/home-manager/my/programs/inxi/package.nix b/modules/home-manager/my/programs/inxi/package.nix index 4c3f1c2..b5b20d5 100644 --- a/modules/home-manager/my/programs/inxi/package.nix +++ b/modules/home-manager/my/programs/inxi/package.nix @@ -27,6 +27,7 @@ vulkan-tools, wayland-utils, wlr-randr, + xrandr, }: let runtimeInputs = [ @@ -50,6 +51,7 @@ let vulkan-tools wayland-utils wlr-randr + xrandr ]; in symlinkJoin { name = "inxi"; From 1d5cb53bbc69f40293478dad5b500449c93dcb91 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 10 Oct 2025 15:30:58 -0400 Subject: [PATCH 08/36] feat: bump `flake.lock`, drop yubikey fixes, disable some nix settings The yubikey fixes are no longer needed since the respective PR has been merged. The nix settings I disabled were causing trouble during the build of this update, which tells me that these settings are not very good. I still want to set them, but I obviously did not pick good values, so I will need to deliberate on that further. --- flake.lock | 30 ++++---- .../yubico/config/home-manager/default.nix | 11 +-- .../config/home-manager/yubikey-manager.nix | 73 ------------------- modules/shared/nix/config/nixos/default.nix | 8 +- 4 files changed, 20 insertions(+), 102 deletions(-) delete mode 100644 modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix diff --git a/flake.lock b/flake.lock index f3171b0..19d132a 100644 --- a/flake.lock +++ b/flake.lock @@ -88,11 +88,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1759362264, + "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", "type": "github" }, "original": { @@ -162,11 +162,11 @@ ] }, "locked": { - "lastModified": 1759106866, - "narHash": "sha256-GjLvAl7qxGxKtop6ghasxjQ1biTT7pA+WU45byzMl/4=", + "lastModified": 1760103600, + "narHash": "sha256-R4cltQFceN3POiPhBu7aTKsrwqTiwo6zjzmitrHD80E=", "owner": "nix-community", "repo": "home-manager", - "rev": "619ae569293b6427d23cce4854eb4f3c33af3eec", + "rev": "bcccb01d0a353c028cc8cb3254cac7ebae32929e", "type": "github" }, "original": { @@ -177,11 +177,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1758663926, - "narHash": "sha256-6CFdj7Xs616t1W4jLDH7IohAAvl5Dyib3qEv/Uqw1rk=", + "lastModified": 1760106635, + "narHash": "sha256-2GoxVaKWTHBxRoeUYSjv0AfSOx4qw5CWSFz2b+VolKU=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "170ff93c860b2a9868ed1e1102d4e52cb3d934e1", + "rev": "9ed85f8afebf2b7478f25db0a98d0e782c0ed903", "type": "github" }, "original": { @@ -192,11 +192,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1758690382, - "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", + "lastModified": 1760038930, + "narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3", "type": "github" }, "original": { @@ -276,11 +276,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1759069666, - "narHash": "sha256-/oVAVpL4xxR4KG4MlFspi8fiP9wEaSs+zqHkD2tw17g=", + "lastModified": 1759690047, + "narHash": "sha256-Vlpa0d1xOgPO9waHwxJNi6LcD2PYqB3EjwLRtSxXlHc=", "owner": "nix-community", "repo": "stylix", - "rev": "f23b6c30cc002786a22998caf15312ea01c20654", + "rev": "09022804b2bcd217f3a41a644d26b23d30375d12", "type": "github" }, "original": { diff --git a/modules/shared/my/services/yubico/config/home-manager/default.nix b/modules/shared/my/services/yubico/config/home-manager/default.nix index 8e78f55..721ecfa 100644 --- a/modules/shared/my/services/yubico/config/home-manager/default.nix +++ b/modules/shared/my/services/yubico/config/home-manager/default.nix @@ -7,15 +7,6 @@ }: let cfg = nixosConfig.my.services.yubico; - - # Temporary extension to `pkgs` to fix an upstream incompatibility between - # `yubikey-manager` and `yubioath-flutter`. - # - # TODO: drop with https://github.com/NixOS/nixpkgs/issues/442315 - pkgs' = pkgs.extend (final: prev: { - # from: https://github.com/NixOS/nixpkgs/blob/3a75333d2d9e9114e0d8223f8bcd9d3b32c6401f/pkgs/by-name/yu/yubikey-manager/package.nix - yubikey-manager = prev.callPackage ./yubikey-manager.nix {}; - }); in { config = lib.mkIf cfg.enable { my.persist.directories = [ @@ -29,7 +20,7 @@ in { } ]; - home.packages = with pkgs'; [ + home.packages = with pkgs; [ yubikey-manager yubioath-flutter ]; diff --git a/modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix b/modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix deleted file mode 100644 index 1e68a75..0000000 --- a/modules/shared/my/services/yubico/config/home-manager/yubikey-manager.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitHub, - python3Packages, - installShellFiles, - procps, -}: - -python3Packages.buildPythonPackage rec { - pname = "yubikey-manager"; - version = "5.7.2"; - pyproject = true; - - src = fetchFromGitHub { - owner = "Yubico"; - repo = "yubikey-manager"; - tag = version; - hash = "sha256-dgOi9gJ7jO3+EjZQjHfx+KDsBtj6b4JWR3Bp9xWM6FI="; - }; - - postPatch = '' - substituteInPlace "ykman/pcsc/__init__.py" \ - --replace 'pkill' '${if stdenv.hostPlatform.isLinux then procps else "/usr"}/bin/pkill' - ''; - - nativeBuildInputs = with python3Packages; [ - poetry-core - installShellFiles - ]; - - propagatedBuildInputs = with python3Packages; [ - cryptography - pyscard - fido2 - click - keyring - ]; - - pythonRelaxDeps = [ - "keyring" - ]; - - postInstall = '' - installManPage man/ykman.1 - - installShellCompletion --cmd ykman \ - --bash <(_YKMAN_COMPLETE=bash_source "$out/bin/ykman") \ - --zsh <(_YKMAN_COMPLETE=zsh_source "$out/bin/ykman") \ - --fish <(_YKMAN_COMPLETE=fish_source "$out/bin/ykman") \ - ''; - - nativeCheckInputs = with python3Packages; [ - pytestCheckHook - makefun - ]; - - meta = { - homepage = "https://developers.yubico.com/yubikey-manager"; - changelog = "https://github.com/Yubico/yubikey-manager/releases/tag/${src.tag}"; - description = "Command line tool for configuring any YubiKey over all USB transports"; - - license = lib.licenses.bsd2; - platforms = lib.platforms.unix; - maintainers = with lib.maintainers; [ - benley - lassulus - pinpox - nickcao - ]; - mainProgram = "ykman"; - }; -} \ No newline at end of file diff --git a/modules/shared/nix/config/nixos/default.nix b/modules/shared/nix/config/nixos/default.nix index 919b49b..e4a2c3b 100644 --- a/modules/shared/nix/config/nixos/default.nix +++ b/modules/shared/nix/config/nixos/default.nix @@ -101,8 +101,8 @@ in { debugger-on-trace = true; # debugger-on-warn = true; - download-attempts = 2; - download-speed = 5 * 1000; # 5 MB/s to prevent bandwidth exhaustion. + download-attempts = 5; + # download-speed = 5 * 1000; # TODO: determine a better value # It's useful to know when a substitute is failing! # Can use `--fallback` on the CLI when needed. @@ -112,7 +112,7 @@ in { fsync-metadata = true; # fsync-store-paths = true; TODO: not on Lix - http-connections = 10; # Don't open too many connections at once. + # http-connections = 10; # TODO: determine a better value # Keeping these is very useful for development. keep-build-log = true; @@ -133,7 +133,7 @@ in { sandbox-fallback = false; show-trace = true; - stalled-download-timeout = 30; # wait 30s before cancelling + # stalled-download-timeout = 30; # TODO: determine a better value sync-before-registering = true; # TODO: needed with fsync options? trace-verbose = true; From e926c0e47f0ca1cceadedc7986fa6e5a0a4db84d Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 16 Oct 2025 13:31:07 -0400 Subject: [PATCH 09/36] feat: bump `flake.lock`, re-use flake-parts input for stylix This achieves a very slight reduction of the flake inputs closure size. --- flake.lock | 50 ++++++++++++++++---------------------------------- flake.nix | 2 ++ 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/flake.lock b/flake.lock index 19d132a..855e473 100644 --- a/flake.lock +++ b/flake.lock @@ -21,16 +21,17 @@ "base16-fish": { "flake": false, "locked": { - "lastModified": 1622559957, - "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "lastModified": 1754405784, + "narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=", "owner": "tomyun", "repo": "base16-fish", - "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "type": "github" }, "original": { "owner": "tomyun", "repo": "base16-fish", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "type": "github" } }, @@ -101,27 +102,6 @@ "type": "github" } }, - "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "stylix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "fromYaml": { "flake": false, "locked": { @@ -162,11 +142,11 @@ ] }, "locked": { - "lastModified": 1760103600, - "narHash": "sha256-R4cltQFceN3POiPhBu7aTKsrwqTiwo6zjzmitrHD80E=", + "lastModified": 1760500983, + "narHash": "sha256-zfY4F4CpeUjTGgecIJZ+M7vFpwLc0Gm9epM/iMQd4w8=", "owner": "nix-community", "repo": "home-manager", - "rev": "bcccb01d0a353c028cc8cb3254cac7ebae32929e", + "rev": "c53e65ec92f38d30e3c14f8d628ab55d462947aa", "type": "github" }, "original": { @@ -192,11 +172,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1760038930, - "narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=", + "lastModified": 1760524057, + "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3", + "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5", "type": "github" }, "original": { @@ -262,7 +242,9 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_2", + "flake-parts": [ + "flake-parts" + ], "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" @@ -276,11 +258,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1759690047, - "narHash": "sha256-Vlpa0d1xOgPO9waHwxJNi6LcD2PYqB3EjwLRtSxXlHc=", + "lastModified": 1760472212, + "narHash": "sha256-4C3I/ssFsq8EgaUmZP0xv5V7RV0oCHgL/Rx+MUkuE+E=", "owner": "nix-community", "repo": "stylix", - "rev": "09022804b2bcd217f3a41a644d26b23d30375d12", + "rev": "8d008296a1b3be9b57ad570f7acea00dd2fc92db", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 02322a6..e5534ab 100644 --- a/flake.nix +++ b/flake.nix @@ -14,7 +14,9 @@ stylix = { url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-parts.follows = "flake-parts"; }; }; From 19634f2dd0a0f48e13569ab7b0856c0493fed672 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 16 Oct 2025 16:28:54 -0400 Subject: [PATCH 10/36] fix: migrate `require("lspconfig")` to `vim.lsp.config` This was a change made upstream in https://www.github.com/neovim/nvim-lspconfig/issues/3693. In a nutshell, `require("lspconfig")..setup` is no longer the accepted way to configure language servers. Instead, one should use `vim.lsp.config. = {}`. The migration itself is fairly trivial, though we also need to throw `vim.lsp.enable("")` to activate it. --- users/frontear/home/programs/neovim/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/users/frontear/home/programs/neovim/default.nix b/users/frontear/home/programs/neovim/default.nix index 283092b..45ff578 100644 --- a/users/frontear/home/programs/neovim/default.nix +++ b/users/frontear/home/programs/neovim/default.nix @@ -102,15 +102,16 @@ --lsp_format.setup {} - local lspconfig = require("lspconfig") local capabilities = require("cmp_nvim_lsp").default_capabilities() --local on_attach = lsp_format.on_attach ${lib.concatStringsSep "\n" (map (lsp: '' - lspconfig.${lsp}.setup({ + vim.lsp.config["${lsp}"] = { capabilities = capabilities, --on_attach = on_attach - }) + } + + vim.lsp.enable("${lsp}") '') [ "basedpyright" "clangd" From cb4896cbd2ea51aa2da223d21d40de6ad1e76226 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 17 Oct 2025 01:12:02 -0400 Subject: [PATCH 11/36] feat: refactor neovim module to wrap config in args Motivated by #38. The interface has also been slighly change to use `extraConfig` instead of `init`, but otherwise remains identical. Eventually I'll want to improve this entire thing completely, but for now it's simply not an extensive priority. --- .../my/programs/neovim/config.nix | 24 ++++++ .../my/programs/neovim/module.nix | 83 ------------------- .../my/programs/neovim/options.nix | 80 ++++++++++++++++++ .../my/programs/neovim/package.nix | 9 +- .../frontear/home/programs/neovim/default.nix | 2 +- 5 files changed, 112 insertions(+), 86 deletions(-) create mode 100644 modules/home-manager/my/programs/neovim/config.nix delete mode 100644 modules/home-manager/my/programs/neovim/module.nix create mode 100644 modules/home-manager/my/programs/neovim/options.nix diff --git a/modules/home-manager/my/programs/neovim/config.nix b/modules/home-manager/my/programs/neovim/config.nix new file mode 100644 index 0000000..45a7b24 --- /dev/null +++ b/modules/home-manager/my/programs/neovim/config.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + ... +}: +let + cfg = config.my.programs.neovim; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "~/.local/state/nvim"; + unique = false; + }]; + + + home.packages = [ + cfg.package + ]; + + home.sessionVariables = { + EDITOR = "nvim"; + }; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/neovim/module.nix b/modules/home-manager/my/programs/neovim/module.nix deleted file mode 100644 index a72f1bb..0000000 --- a/modules/home-manager/my/programs/neovim/module.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.my.programs.neovim; - - pluginSubmodule = { - options = { - bins = lib.mkOption { - default = []; - - type = with lib.types; listOf package; - }; - - plugins = lib.mkOption { - default = null; - - type = with lib.types; listOf package; - }; - - config = lib.mkOption { - default = ""; - - type = with lib.types; lines; - }; - }; - }; -in { - options.my.programs.neovim = { - enable = lib.mkDefaultEnableOption "neovim"; - package = lib.mkOption { - default = pkgs.callPackage ./package.nix { - extraBins = cfg.extraBins ++ - (lib.flatten (map (e: e.bins) cfg.plugins)); - - plugins = lib.flatten (map (e: e.plugins) cfg.plugins); - }; - - type = with lib.types; package; - }; - - extraBins = lib.mkOption { - default = []; - - type = with lib.types; listOf package; - }; - - init = lib.mkOption { - default = ""; - - type = with lib.types; lines; - }; - - plugins = lib.mkOption { - default = []; - - type = with lib.types; listOf (coercedTo package (plugins: { - inherit plugins; - }) (submodule pluginSubmodule)); - }; - }; - - config = lib.mkIf cfg.enable { - my.persist.directories = [{ - path = "~/.local/state/nvim"; - unique = false; - }]; - - xdg.configFile."nvim/init.lua".text = '' - ${cfg.init} - - ${lib.concatStringsSep "\n" (map (e: e.config) cfg.plugins)} - ''; - - home.packages = [ cfg.package ]; - home.sessionVariables = { - EDITOR = "nvim"; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/neovim/options.nix b/modules/home-manager/my/programs/neovim/options.nix new file mode 100644 index 0000000..c917088 --- /dev/null +++ b/modules/home-manager/my/programs/neovim/options.nix @@ -0,0 +1,80 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.programs.neovim; + + pluginsSubmodule = { + options = { + config = lib.mkOption { + default = ""; + + type = with lib.types; lines; + }; + } // lib.genAttrs [ "bins" "plugins" ] (_: lib.mkOption { + default = []; + + type = with lib.types; listOf package; + }); + }; +in { + options = { + my.programs.neovim = { + enable = lib.mkDefaultEnableOption "neovim"; + + package = lib.mkOption { + default = pkgs.neovim-unwrapped; + apply = neovim-unwrapped: pkgs.callPackage ./package.nix { + inherit neovim-unwrapped; + + bins = cfg.extraBins ++ ( + cfg.plugins + |> map (e: e.bins) + |> lib.flatten + ); + + plugins = ( + cfg.plugins + |> map (e: e.plugins) + |> lib.flatten + ); + + config = pkgs.writeText "init.lua" '' + ${cfg.extraConfig} + + ${lib.concatStringsSep "\n" ( + cfg.plugins + |> map (e: e.config) + )} + ''; + }; + + type = with lib.types; package; + }; + + + plugins = lib.mkOption { + default = []; + + type = with lib.types; listOf (coercedTo package (plugins: { + inherit plugins; + }) (submodule pluginsSubmodule)); + }; + + extraBins = lib.mkOption { + default = []; + + type = with lib.types; listOf package; + }; + + extraConfig = lib.mkOption { + default = []; + + type = with lib.types; lines; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/neovim/package.nix b/modules/home-manager/my/programs/neovim/package.nix index ae14e0e..c86e635 100644 --- a/modules/home-manager/my/programs/neovim/package.nix +++ b/modules/home-manager/my/programs/neovim/package.nix @@ -6,8 +6,9 @@ neovim-unwrapped, # from module - extraBins, + bins, plugins, + config, }: wrapNeovimUnstable neovim-unwrapped (neovimUtils.makeNeovimConfig { # withPython3 = true; @@ -18,5 +19,9 @@ wrapNeovimUnstable neovim-unwrapped (neovimUtils.makeNeovimConfig { wrapRc = false; } // { - wrapperArgs = lib.escapeShellArgs [ "--prefix" "PATH" ":" "${lib.makeBinPath extraBins}" ]; + wrapperArgs = lib.escapeShellArgs [ + "--prefix" "PATH" ":" "${lib.makeBinPath bins}" + "--add-flags" "-u" + "--add-flags" "${config}" + ]; }) \ No newline at end of file diff --git a/users/frontear/home/programs/neovim/default.nix b/users/frontear/home/programs/neovim/default.nix index 45ff578..c63f3c5 100644 --- a/users/frontear/home/programs/neovim/default.nix +++ b/users/frontear/home/programs/neovim/default.nix @@ -11,7 +11,7 @@ wl-clipboard ]; - init = '' + extraConfig = '' vim.g.mapleader = ' ' vim.g.localmapleader = ' ' From ce005563fc87f476fd831d2b901f145f20b52892 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 17 Oct 2025 02:55:55 -0400 Subject: [PATCH 12/36] feat: improve the nixos-clean helper script Motivated by #49. This makes use of `zparseopts` which requires that the interpreter be changed from `bash` to `zsh`. Small other improvements were made, though the script functionality remains identical to before. I'm considering creating a Rust multi-call binary instead to implement these applications, as otherwise their codebase is going to duplicate a lot of stuff (such as the `dry-run`, `verbose`, and `help` options, the log levels, etc). It might be better off to do that. --- pkgs/nixos-clean/nix/package.nix | 6 ++ pkgs/nixos-clean/src/nixos-clean.sh | 101 ++++++++++++++-------------- 2 files changed, 56 insertions(+), 51 deletions(-) diff --git a/pkgs/nixos-clean/nix/package.nix b/pkgs/nixos-clean/nix/package.nix index d08c7e2..2eb9399 100644 --- a/pkgs/nixos-clean/nix/package.nix +++ b/pkgs/nixos-clean/nix/package.nix @@ -5,6 +5,8 @@ installShellFiles, pandoc, + zsh, + coreutils, }: stdenvNoCC.mkDerivation { @@ -29,6 +31,10 @@ stdenvNoCC.mkDerivation { pandoc ]; + buildInputs = [ + zsh + ]; + buildPhase = '' pandoc src/nixos-clean.1.md -f markdown -t man -s -o nixos-clean.1 ''; diff --git a/pkgs/nixos-clean/src/nixos-clean.sh b/pkgs/nixos-clean/src/nixos-clean.sh index fab9cb9..25d8562 100755 --- a/pkgs/nixos-clean/src/nixos-clean.sh +++ b/pkgs/nixos-clean/src/nixos-clean.sh @@ -1,93 +1,92 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail +#!/usr/bin/env zsh export PATH="@path@:$PATH" showUsage() { - echo "Usage: $(basename $0) [OPTION]..." - echo "Clean up old NixOS and home-manager generations when applicable." + echo "Usage: nixos-clean [OPTION]..." + echo "Clean up old NixOS generations when applicable." echo "" echo " -d, --dry-run show what would be done without doing it" echo " -v, --verbose increase verbosity of diagnostic messages" echo " -h, --help display this help and exit" - exit 1 } -if [ "$UID" -ne 0 ]; then - echo "Please run this script as root." - exit 1 -fi +zmodload zsh/zutil +zparseopts -D -E -F - \ + d=dryRun -dry-run=dryRun \ + v=verbose -verbose=verbose \ + h=help -help=help \ + || exit 1 -origArgs=("$@") -systemProfiles=/nix/var/nix/profiles -dryRun= -verbose= -cleanStore= +((rmidx=$@[(i)(--|-)])) +set -- "${@[0,rmidx-1]}" "${@[rmidx+1,-1]}" -log() { +debug() { if [ -n "$verbose" ]; then - echo "[nixos-clean] $@" >&2 + echo "[nixos-clean/DEBUG]: $@" fi } +info() { + echo "[nixos-clean/INFO]: $@" +} + +warn() { + echo "[nixos-clean/WARN]: $@" +} + +err() { + echo "[nixos-clean/ERROR]: $@" +} + run() { if [ -n "$dryRun" ]; then echo "$@" elif [ -n "$verbose" ]; then $@ else - local discard=$($@ 2>&1) + $@ 2>/dev/null fi } -while [ "$#" -gt 0 ]; do - i="$1"; shift 1 - case "$i" in - --help|-h) - showUsage - ;; - --dry-run|-d) - dryRun=1 - ;; - --verbose|-v) - verbose=1 - ;; - *) - log "unknown option '$i'" - exit 1 - ;; - esac -done +if [ -n "$help" ]; then + showUsage + exit 0 +fi + +if [ "$EUID" -ne 0 ]; then + err "this program requires root priviledges" + exit 1 +fi + +globalProfiles=/nix/var/nix/profiles cleanNixOS() { - log "cleaning up nixos generations..." + info "cleaning up NixOS generations..." + + local latest="$(readlink -f $globalProfiles/system)" + debug "resolved system profile to '$latest'" - local latest="$(readlink -f $systemProfiles/system)" - for p in $systemProfiles/system*; do - if [ "$(readlink -f $p)" != "$latest" ]; then - log "going to delete $p" - run rm -f "$p" + for profile in $globalProfiles/system*; do + debug "found profile '$profile'" + if [ "$(readlink -f $profile)" != "$latest" ]; then + debug "deleting profile '$profile'" + run rm -f "$profile" fi done - log "regenerating boot entries" + debug "refreshing boot entries" run /run/current-system/bin/switch-to-configuration boot } -cleanNix() { - log "cleaning up the /nix/store" +cleanStore() { + info "cleaning up /nix/store..." run nix-collect-garbage -d } if [ -f /etc/NIXOS ]; then cleanNixOS - cleanStore=1 fi -if [ -n "$cleanStore" ]; then - cleanNix -fi \ No newline at end of file +cleanStore \ No newline at end of file From 8a4b58ff240aab656f8e81efdcf064c2ea09932b Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 18 Oct 2025 23:56:14 -0400 Subject: [PATCH 13/36] feat: use Stylix for GNOME --- .../frontear/home/desktops/gnome/default.nix | 4 + .../desktops/gnome/stylix/assets/bg_dark.jpg | Bin 0 -> 334305 bytes .../home/desktops/gnome/stylix/default.nix | 77 ++++++++++++++++++ .../home/desktops/gnome/stylix/theme.yaml | 29 +++++++ 4 files changed, 110 insertions(+) create mode 100644 users/frontear/home/desktops/gnome/stylix/assets/bg_dark.jpg create mode 100644 users/frontear/home/desktops/gnome/stylix/default.nix create mode 100644 users/frontear/home/desktops/gnome/stylix/theme.yaml diff --git a/users/frontear/home/desktops/gnome/default.nix b/users/frontear/home/desktops/gnome/default.nix index 81d981c..a19229d 100644 --- a/users/frontear/home/desktops/gnome/default.nix +++ b/users/frontear/home/desktops/gnome/default.nix @@ -6,6 +6,10 @@ let cfg = config.my.desktops.gnome; in { + imports = [ + ./stylix + ]; + config = lib.mkIf cfg.enable { my.programs = { microsoft-edge.enable = true; diff --git a/users/frontear/home/desktops/gnome/stylix/assets/bg_dark.jpg b/users/frontear/home/desktops/gnome/stylix/assets/bg_dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3612d144f0abb9d0130190690044365b21ae80cf GIT binary patch literal 334305 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 AumAu6 literal 0 HcmV?d00001 diff --git a/users/frontear/home/desktops/gnome/stylix/default.nix b/users/frontear/home/desktops/gnome/stylix/default.nix new file mode 100644 index 0000000..8bdc4b9 --- /dev/null +++ b/users/frontear/home/desktops/gnome/stylix/default.nix @@ -0,0 +1,77 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.desktops.gnome; +in { + config = lib.mkIf cfg.enable { + # TODO: de-duplicate from Niri + stylix = { + enable = true; + + base16Scheme = ./theme.yaml; + + cursor = { + name = "Bibata-Modern-Classic"; + package = pkgs.bibata-cursors; + + size = 24; + }; + + fonts = { + sizes = { + applications = 11; + desktop = 11; + terminal = 11; + popups = 11; + }; + + emoji = { + name = "Noto Color Emoji"; + package = pkgs.noto-fonts-emoji; + }; + + monospace = { + name = "Noto Sans Mono"; + package = pkgs.noto-fonts; + }; + + sansSerif = { + name = "Noto Sans"; + package = pkgs.noto-fonts; + }; + + serif = { + name = "Noto Serif"; + package = pkgs.noto-fonts; + }; + }; + + icons = { + enable = true; + package = pkgs.papirus-icon-theme; + + dark = "Papirus-Dark"; + light = "Papirus-Light"; + }; + + image = ./assets/bg_dark.jpg; + imageScalingMode = "fit"; + + polarity = "dark"; + }; + + stylix.targets = { + fontconfig.enable = true; + font-packages.enable = true; + + gtk.enable = true; + qt.enable = true; + + gnome.enable = true; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/gnome/stylix/theme.yaml b/users/frontear/home/desktops/gnome/stylix/theme.yaml new file mode 100644 index 0000000..bbdd5a4 --- /dev/null +++ b/users/frontear/home/desktops/gnome/stylix/theme.yaml @@ -0,0 +1,29 @@ +system: "base24" +name: "Pnevma" +author: "FredHappyface (https://github.com/fredHappyface)" +variant: "dark" +palette: + base00: "#1c1c1c" + base01: "#2f2e2d" + base02: "#4a4845" + base03: "#6b6a67" + base04: "#8d8c8a" + base05: "#aeaead" + base06: "#d0d0d0" + base07: "#efefef" + base08: "#a36666" + base09: "#d7af87" + base0A: "#a1bdce" + base0B: "#90a57d" + base0C: "#8adbb4" + base0D: "#7fa5bd" + base0E: "#c79ec4" + base0F: "#513333" + base10: "#31302e" + base11: "#181817" + base12: "#d78787" + base13: "#e4c9af" + base14: "#afbea2" + base15: "#b1e7dd" + base16: "#a1bdce" + base17: "#d7beda" \ No newline at end of file From fd7f1e6544d48d71be74d118451fd2341070ab0d Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 00:01:19 -0400 Subject: [PATCH 14/36] fix: set `NIXOS_OZONE_WL` on GNOME Eventually this should be moved to some common module that enables everything required for a Wayland environment. --- modules/shared/my/desktops/gnome/config/nixos.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/shared/my/desktops/gnome/config/nixos.nix b/modules/shared/my/desktops/gnome/config/nixos.nix index 3c49aba..74b214a 100644 --- a/modules/shared/my/desktops/gnome/config/nixos.nix +++ b/modules/shared/my/desktops/gnome/config/nixos.nix @@ -17,6 +17,11 @@ in { displayManager.gdm.enable = true; }; + # TODO: de-duplicate from Niri + environment.sessionVariables = { + "NIXOS_OZONE_WL" = 1; + }; + environment.gnome.excludePackages = with pkgs; [ epiphany ]; From c72d1f7803847e614679a433688c522bffbbf693 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 00:32:00 -0400 Subject: [PATCH 15/36] fix: strictly specify nixos-hardware modules This lets me explicitly pick the tiger-lake modules, which brings some better defaults and actually reduces closure size, since it doesn't need to pull extra things that are useless for my system. --- hosts/laptop/hardware/default.nix | 7 +++++++ nix/nixosConfigurations/default.nix | 7 +++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/hosts/laptop/hardware/default.nix b/hosts/laptop/hardware/default.nix index 857b892..635c81e 100644 --- a/hosts/laptop/hardware/default.nix +++ b/hosts/laptop/hardware/default.nix @@ -3,4 +3,11 @@ ./mounts.nix ./power-savings ]; + + config = { + services = { + fwupd.enable = true; + thermald.enable = true; + }; + }; } \ No newline at end of file diff --git a/nix/nixosConfigurations/default.nix b/nix/nixosConfigurations/default.nix index ca36cad..a81612c 100644 --- a/nix/nixosConfigurations/default.nix +++ b/nix/nixosConfigurations/default.nix @@ -15,8 +15,11 @@ in { { hostName = "LAPTOP-3DT4F02"; modules = [ - nixos-hardware.nixosModules.dell-inspiron-14-5420 - nixos-hardware.nixosModules.common-hidpi + "${nixos-hardware}/common/cpu/intel/tiger-lake/cpu-only.nix" + "${nixos-hardware}/common/gpu/intel/tiger-lake" + "${nixos-hardware}/common/pc/laptop" + "${nixos-hardware}/common/pc/ssd" + "${nixos-hardware}/common/hidpi.nix" ../../hosts/laptop ]; From 7f656522631f6fb51e15bb340e7e37bb2e5fa626 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 00:57:02 -0400 Subject: [PATCH 16/36] fix: check `allowUnfree` from `pkgs` instance It's possible for `nixpkgs.pkgs` to be set in configuration, which makes `nixpkgs.config` a useless option to check. As such, it's better to check that state directly through the instantiated `pkgs` instead. --- hosts/iso/hardware-configuration.nix | 4 ++-- modules/nixos/hardware/module.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hosts/iso/hardware-configuration.nix b/hosts/iso/hardware-configuration.nix index 6848c53..feada92 100644 --- a/hosts/iso/hardware-configuration.nix +++ b/hosts/iso/hardware-configuration.nix @@ -1,11 +1,11 @@ { - config, lib, + pkgs, ... }: { config.hardware = { - enableAllFirmware = config.nixpkgs.config.allowUnfree; + enableAllFirmware = pkgs.config.allowUnfree; enableRedistributableFirmware = lib.mkForce true; cpu = lib.genAttrs [ "amd" "intel" ] (_: { diff --git a/modules/nixos/hardware/module.nix b/modules/nixos/hardware/module.nix index 95bf4d2..4694abe 100644 --- a/modules/nixos/hardware/module.nix +++ b/modules/nixos/hardware/module.nix @@ -1,10 +1,10 @@ { - config, lib, + pkgs, ... }: { - config = lib.mkIf config.nixpkgs.config.allowUnfree { + config = lib.mkIf pkgs.config.allowUnfree { # An easy catch-all to enable all possible firmware needed by the system. hardware.enableAllFirmware = true; }; From da941901d925d530c43992e333c75d21f745f3a3 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 01:38:31 -0400 Subject: [PATCH 17/36] feat!: migrate to home-manager VSCode module and use Stylix I've actually explicitly chosen to not use the theme generated by Stylix, as I feel that the colors do not look very good. My current **Atomize** theme already perfectly matches my base16 definitions, so I don't see a need to switch things up for now. --- .../my/programs/vscode/config.nix | 23 ----------- .../my/programs/vscode/options.nix | 39 ------------------- .../my/programs/vscode/package.nix | 11 ------ .../home-manager/programs/vscode/module.nix | 14 +++++++ .../frontear/home/programs/vscode/default.nix | 35 +++++++++++------ .../home/programs/vscode/settings.nix | 5 --- 6 files changed, 38 insertions(+), 89 deletions(-) delete mode 100644 modules/home-manager/my/programs/vscode/config.nix delete mode 100644 modules/home-manager/my/programs/vscode/options.nix delete mode 100644 modules/home-manager/my/programs/vscode/package.nix create mode 100644 modules/home-manager/programs/vscode/module.nix diff --git a/modules/home-manager/my/programs/vscode/config.nix b/modules/home-manager/my/programs/vscode/config.nix deleted file mode 100644 index b4a1b84..0000000 --- a/modules/home-manager/my/programs/vscode/config.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.my.programs.vscode; - fmt = pkgs.formats.json {}; -in { - config = lib.mkIf cfg.enable { - my.persist.directories = [ - "~/.config/Code" - ]; - - home.packages = [ - cfg.package - ]; - - xdg.configFile."Code/User/settings.json".source = - fmt.generate "settings.json" cfg.settings; - }; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/vscode/options.nix b/modules/home-manager/my/programs/vscode/options.nix deleted file mode 100644 index ccbdcd4..0000000 --- a/modules/home-manager/my/programs/vscode/options.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.my.programs.vscode; - fmt = pkgs.formats.json {}; -in { - options = { - my.programs.vscode = { - enable = lib.mkEnableOption "vscode"; - - package = lib.mkOption { - default = pkgs.vscode; - apply = vscode: pkgs.callPackage ./package.nix { - inherit vscode; - - withExtensions = cfg.extensions; - }; - - type = with lib.types; package; - }; - - extensions = lib.mkOption { - default = []; - - type = with lib.types; listOf package; - }; - - settings = lib.mkOption { - default = {}; - - type = fmt.type; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/my/programs/vscode/package.nix b/modules/home-manager/my/programs/vscode/package.nix deleted file mode 100644 index 534a69b..0000000 --- a/modules/home-manager/my/programs/vscode/package.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - vscode, - vscode-with-extensions, - - withExtensions ? [], -}: -vscode-with-extensions.override { - inherit vscode; - - vscodeExtensions = withExtensions; -} \ No newline at end of file diff --git a/modules/home-manager/programs/vscode/module.nix b/modules/home-manager/programs/vscode/module.nix new file mode 100644 index 0000000..91fc5b3 --- /dev/null +++ b/modules/home-manager/programs/vscode/module.nix @@ -0,0 +1,14 @@ +{ + config, + lib, + ... +}: +let + cfg = config.programs.vscode; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [ + "~/.config/Code" + ]; + }; +} \ No newline at end of file diff --git a/users/frontear/home/programs/vscode/default.nix b/users/frontear/home/programs/vscode/default.nix index 88bf082..62895bc 100644 --- a/users/frontear/home/programs/vscode/default.nix +++ b/users/frontear/home/programs/vscode/default.nix @@ -1,20 +1,33 @@ { + lib, pkgs, ... }: { - my.programs.vscode = { - enable = true; + config = { + stylix.targets.vscode.enable = true; - extensions = - pkgs.vscode-utils.extensionsFromVscodeMarketplace (import ./extensions.nix) - ++ (with pkgs.vscode-extensions; [ - # TODO: prefer Nixpkgs extensions when possible - ms-python.python - ms-vscode.cpptools - rust-lang.rust-analyzer - ]); + programs.vscode = { + enable = true; - settings = import ./settings.nix; + profiles."default" = { + enableExtensionUpdateCheck = false; + enableUpdateCheck = false; + + extensions = + pkgs.vscode-utils.extensionsFromVscodeMarketplace (import ./extensions.nix) + ++ (with pkgs.vscode-extensions; [ + # TODO: prefer Nixpkgs extensions when possible + ms-python.python + ms-vscode.cpptools + rust-lang.rust-analyzer + ]); + + userSettings = import ./settings.nix // { + # TODO: these colors aren't amazing.. + "workbench.colorTheme" = lib.mkForce "Atomize"; + }; + }; + }; }; } \ No newline at end of file diff --git a/users/frontear/home/programs/vscode/settings.nix b/users/frontear/home/programs/vscode/settings.nix index c0d98fe..80f53d4 100644 --- a/users/frontear/home/programs/vscode/settings.nix +++ b/users/frontear/home/programs/vscode/settings.nix @@ -1,12 +1,8 @@ { - "update.mode" = "none"; - "extensions.autoCheckUpdates" = false; - "editor.accessibilitySupport" = "off"; "editor.cursorBlinking" = "phase"; "editor.cursorSmoothCaretAnimation" = "on"; "editor.folding" = false; - "editor.fontFamily" = "Noto Sans Mono, Symbols Nerd Font"; "editor.guides.bracketPairs" = true; "editor.matchBrackets" = "never"; "editor.minimap.enabled" = false; @@ -44,7 +40,6 @@ "editorBracketHighlight.foreground6" = "#abb2c0"; "editorBracketHighlight.unexpectedBracket.foreground" = "#db6165"; }; - "workbench.colorTheme" = "Atomize"; "workbench.iconTheme" = "material-icon-theme"; "workbench.layoutControl.enabled" = false; "workbench.list.smoothScrolling" = true; From acf8ccdce831747e14f091bb30d8bdbbeb016048 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 14:43:31 -0400 Subject: [PATCH 18/36] feat: add fprintd for fingerprint authentication --- hosts/laptop/hardware/default.nix | 7 +++++++ modules/nixos/services/fprintd/module.nix | 15 +++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 modules/nixos/services/fprintd/module.nix diff --git a/hosts/laptop/hardware/default.nix b/hosts/laptop/hardware/default.nix index 635c81e..1fec71e 100644 --- a/hosts/laptop/hardware/default.nix +++ b/hosts/laptop/hardware/default.nix @@ -8,6 +8,13 @@ services = { fwupd.enable = true; thermald.enable = true; + + # Using this to log in will not unlock the default keyring. + # The "simple" fix is to just use the password for logging in, + # and use fingerprint scanning for everything else. + # + # see: https://gitlab.gnome.org/GNOME/gdm/-/issues/613 + fprintd.enable = true; }; }; } \ No newline at end of file diff --git a/modules/nixos/services/fprintd/module.nix b/modules/nixos/services/fprintd/module.nix new file mode 100644 index 0000000..0883abd --- /dev/null +++ b/modules/nixos/services/fprintd/module.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + ... +}: +let + cfg = config.services.fprintd; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "/var/lib/fprint"; + unique = false; + }]; + }; +} \ No newline at end of file From 955cc22c9648c1fec7a6f4a5d1f9505382abf552 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 15:41:30 -0400 Subject: [PATCH 19/36] feat: disallow fingerprint authentication for login Since fingerprints cannot be used to decrypt, GNOME keyring is unable to be decrypted at login and will instead pester the user for the password post-login. This is not an easy problem to solve from both practical and philosphical angles, so the best solution is to simply disallow it. --- hosts/laptop/hardware/default.nix | 5 --- modules/nixos/services/fprintd/module.nix | 44 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/hosts/laptop/hardware/default.nix b/hosts/laptop/hardware/default.nix index 1fec71e..6b716c3 100644 --- a/hosts/laptop/hardware/default.nix +++ b/hosts/laptop/hardware/default.nix @@ -9,11 +9,6 @@ fwupd.enable = true; thermald.enable = true; - # Using this to log in will not unlock the default keyring. - # The "simple" fix is to just use the password for logging in, - # and use fingerprint scanning for everything else. - # - # see: https://gitlab.gnome.org/GNOME/gdm/-/issues/613 fprintd.enable = true; }; }; diff --git a/modules/nixos/services/fprintd/module.nix b/modules/nixos/services/fprintd/module.nix index 0883abd..4129f9e 100644 --- a/modules/nixos/services/fprintd/module.nix +++ b/modules/nixos/services/fprintd/module.nix @@ -5,11 +5,43 @@ }: let cfg = config.services.fprintd; + + cfg-gdm = config.services.displayManager.gdm; + cfg-greetd = config.services.greetd; in { - config = lib.mkIf cfg.enable { - my.persist.directories = [{ - path = "/var/lib/fprint"; - unique = false; - }]; - }; + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + my.persist.directories = [{ + path = "/var/lib/fprint"; + unique = false; + }]; + } + + # Prevent fingerprint login, as it breaks UX expectations and has no + # straightforward solution. + # + # NOTE: this isn't unique to GDM, despite the issue being filed there. + # see: https://gitlab.gnome.org/GNOME/gdm/-/issues/613 + { + programs.dconf.profiles = lib.mkIf cfg-gdm.enable { + gdm.databases = [{ + lockAll = true; + + settings = { + "org/gnome/login-screen" = { + enable-fingerprint-authentication = false; + }; + }; + }]; + }; + + security.pam.services = lib.mkMerge [ + { "login".fprintAuth = false; } + + (lib.mkIf cfg-greetd.enable { + "greetd".fprintAuth = false; + }) + ]; + } + ]); } \ No newline at end of file From df80cae37ef37fe54db63653e356e98949392355 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 19 Oct 2025 17:00:11 -0400 Subject: [PATCH 20/36] fix: add `TODO` note for recursive module importing I'm honestly a little surprised I didn't catch this originally, especially since it was a core part of the specification I laid out in #53. To my credit though, I have faithfully followed that specification, and this wouldn't be the only snippet that doesn't have error-checking, so I'm not entirely sure if I should bother with this at all. --- lib/flakes.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/flakes.nix b/lib/flakes.nix index 3b61799..a970cdf 100644 --- a/lib/flakes.nix +++ b/lib/flakes.nix @@ -4,6 +4,14 @@ ... }: let + # TODO: this doesn't clearly communicate the intent of how modules should be + # structured in the shared directory. From just this snippet, it appears that + # modules should be in the form `/{nixos.nix,home-manager.nix}`, + # but I'm doing `/{config,options}/{nixos.nix,home-manager.nix}`. + # + # There should be a strict requirement here, I'm not sure whether I want to + # enforce the `config/options` directory or `nixos/home-manager` as the first + # directory. I can see valid use-cases for both.. sharedNixOSEntrypoints = [ "nixos.nix" "nixos" ]; sharedHomeManagerEntrypoints = [ "home-manager.nix" "home-manager" ]; From 18e5a89a055275d2d67b799752dd2faed340e7f1 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Mon, 20 Oct 2025 16:42:49 -0400 Subject: [PATCH 21/36] fix: don't use `fprintd` for auth with swaylock --- modules/shared/my/desktops/niri/config/nixos.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/shared/my/desktops/niri/config/nixos.nix b/modules/shared/my/desktops/niri/config/nixos.nix index faea64d..ddc2712 100644 --- a/modules/shared/my/desktops/niri/config/nixos.nix +++ b/modules/shared/my/desktops/niri/config/nixos.nix @@ -35,6 +35,13 @@ in { enable = true; }; + # TODO: resolve this. + # + # see: https://github.com/Frontear/dotfiles/issues/63 + security.pam.services.swaylock = { + fprintAuth = false; + }; + # This is being overriden from what Niri provides by default so that it can # support other file-managers besides Nautilus, since the GNOME Portal only # defaults to Nautilus for the file chooser dialog. From 83a6ff17244fabd58d721ad4df75c8d2a5161f22 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 21 Oct 2025 02:16:29 -0400 Subject: [PATCH 22/36] feat: create `sl-darken` for an image darken effect for Swaylock --- pkgs/sl-darken/.editorconfig | 9 ++++++ pkgs/sl-darken/.gitignore | 6 ++++ pkgs/sl-darken/Cargo.lock | 16 ++++++++++ pkgs/sl-darken/Cargo.toml | 10 ++++++ pkgs/sl-darken/nix/package.nix | 31 +++++++++++++++++++ pkgs/sl-darken/src/lib.rs | 25 +++++++++++++++ .../niri/programs/swaylock/default.nix | 4 ++- 7 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 pkgs/sl-darken/.editorconfig create mode 100644 pkgs/sl-darken/.gitignore create mode 100644 pkgs/sl-darken/Cargo.lock create mode 100644 pkgs/sl-darken/Cargo.toml create mode 100644 pkgs/sl-darken/nix/package.nix create mode 100644 pkgs/sl-darken/src/lib.rs diff --git a/pkgs/sl-darken/.editorconfig b/pkgs/sl-darken/.editorconfig new file mode 100644 index 0000000..3e4d7d3 --- /dev/null +++ b/pkgs/sl-darken/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = false +trim_trailing_whitespace = true \ No newline at end of file diff --git a/pkgs/sl-darken/.gitignore b/pkgs/sl-darken/.gitignore new file mode 100644 index 0000000..8129cd5 --- /dev/null +++ b/pkgs/sl-darken/.gitignore @@ -0,0 +1,6 @@ +.direnv/ +.envrc + +target/ + +result \ No newline at end of file diff --git a/pkgs/sl-darken/Cargo.lock b/pkgs/sl-darken/Cargo.lock new file mode 100644 index 0000000..928f346 --- /dev/null +++ b/pkgs/sl-darken/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "hsl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575fb7f1167f3b88ed825e90eb14918ac460461fdeaa3965c6a50951dee1c970" + +[[package]] +name = "sl-darken" +version = "0.1.0" +dependencies = [ + "hsl", +] diff --git a/pkgs/sl-darken/Cargo.toml b/pkgs/sl-darken/Cargo.toml new file mode 100644 index 0000000..963cf4c --- /dev/null +++ b/pkgs/sl-darken/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "sl-darken" +version = "0.1.0" +edition = "2024" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +hsl = "0.1.1" \ No newline at end of file diff --git a/pkgs/sl-darken/nix/package.nix b/pkgs/sl-darken/nix/package.nix new file mode 100644 index 0000000..030753b --- /dev/null +++ b/pkgs/sl-darken/nix/package.nix @@ -0,0 +1,31 @@ +{ + lib, + rustPlatform, +}: +rustPlatform.buildRustPackage (finalAttrs: { + pname = "sl-darken"; + version = "0.1.0"; + + src = with lib.fileset; toSource { + root = ../.; + fileset = unions [ + ../src + ../Cargo.lock + ../Cargo.toml + ]; + }; + + cargoLock.lockFile = ../Cargo.lock; + + passthru = { + libPath = "lib/libsl_darken.so"; # convenience + }; + + meta = with lib; { + description = "Darken the background image for Swaylock Effects"; + + license = licenses.agpl3Plus; + maintainers = with maintainers; [ frontear ]; + platforms = platforms.linux; + }; +}) \ No newline at end of file diff --git a/pkgs/sl-darken/src/lib.rs b/pkgs/sl-darken/src/lib.rs new file mode 100644 index 0000000..72513f0 --- /dev/null +++ b/pkgs/sl-darken/src/lib.rs @@ -0,0 +1,25 @@ +use std::ffi::c_int; + +mod rgb { + pub fn from_u32(rgb: u32) -> (u8, u8, u8) { + return ( + ((rgb & 0xff0000) >> 16) as u8, + ((rgb & 0x00ff00) >> 8) as u8, + ((rgb & 0x0000ff) >> 0) as u8, + ); + } + + pub fn to_u32((r, g, b): (u8, u8, u8)) -> u32 { + return (r as u32) << 16 | (g as u32) << 8 | (b as u32) << 0; + } +} + +#[unsafe(no_mangle)] +pub extern "C" fn swaylock_pixel(pix: u32, _: c_int, _: c_int, _: c_int, _: c_int) -> u32 { + let (r, g, b) = rgb::from_u32(pix); + let mut hsl = hsl::HSL::from_rgb(&[r, g, b]); + + hsl.l *= 0.7; // dim to 70% + + return rgb::to_u32(hsl.to_rgb()); +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/programs/swaylock/default.nix b/users/frontear/home/desktops/niri/programs/swaylock/default.nix index 1d56ae5..2842cdb 100644 --- a/users/frontear/home/desktops/niri/programs/swaylock/default.nix +++ b/users/frontear/home/desktops/niri/programs/swaylock/default.nix @@ -1,6 +1,7 @@ { config, lib, + pkgs, ... }: let @@ -20,7 +21,8 @@ in { clock = true; datestr = "%a, %b %d, %Y"; - effect-blur = "16x2"; + effect-blur = "7x3"; + effect-custom = "${pkgs.frontear.sl-darken}/${pkgs.frontear.sl-darken.libPath}"; }; }; }; From 8ccf466f0dcb7cb8253d5435894a41408c77f7dd Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 25 Oct 2025 03:42:03 -0400 Subject: [PATCH 23/36] fix: update `flake.lock`, refactor module option for `programs.git` --- flake.lock | 30 ++++++++++---------- modules/home-manager/programs/git/module.nix | 2 +- users/frontear/home/default.nix | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/flake.lock b/flake.lock index 855e473..e789cbc 100644 --- a/flake.lock +++ b/flake.lock @@ -89,11 +89,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1759362264, - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", + "lastModified": 1760948891, + "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", + "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", "type": "github" }, "original": { @@ -142,11 +142,11 @@ ] }, "locked": { - "lastModified": 1760500983, - "narHash": "sha256-zfY4F4CpeUjTGgecIJZ+M7vFpwLc0Gm9epM/iMQd4w8=", + "lastModified": 1761344779, + "narHash": "sha256-6LNSptFYhiAd0M/maJoixJw7V0Kp5BSoMRtIahcfu3M=", "owner": "nix-community", "repo": "home-manager", - "rev": "c53e65ec92f38d30e3c14f8d628ab55d462947aa", + "rev": "c644cb018f9fdec55f5ac2afb4713a8c7beb757c", "type": "github" }, "original": { @@ -157,11 +157,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1760106635, - "narHash": "sha256-2GoxVaKWTHBxRoeUYSjv0AfSOx4qw5CWSFz2b+VolKU=", + "lastModified": 1760958188, + "narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "9ed85f8afebf2b7478f25db0a98d0e782c0ed903", + "rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc", "type": "github" }, "original": { @@ -172,11 +172,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1760524057, - "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=", + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", "type": "github" }, "original": { @@ -258,11 +258,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1760472212, - "narHash": "sha256-4C3I/ssFsq8EgaUmZP0xv5V7RV0oCHgL/Rx+MUkuE+E=", + "lastModified": 1761028816, + "narHash": "sha256-s1XiIeJHpODVWfzsPaK9e21iz1dQSCU3H4/1OxOsyps=", "owner": "nix-community", "repo": "stylix", - "rev": "8d008296a1b3be9b57ad570f7acea00dd2fc92db", + "rev": "b81dc0a385443099e7d231fe6275189e32c3b760", "type": "github" }, "original": { diff --git a/modules/home-manager/programs/git/module.nix b/modules/home-manager/programs/git/module.nix index a101d56..fd209f6 100644 --- a/modules/home-manager/programs/git/module.nix +++ b/modules/home-manager/programs/git/module.nix @@ -21,7 +21,7 @@ in { ".envrc" ]; - extraConfig = { + settings = { commit.gpgSign = true; tag.gpgSign = true; diff --git a/users/frontear/home/default.nix b/users/frontear/home/default.nix index 4a340cc..e68476a 100644 --- a/users/frontear/home/default.nix +++ b/users/frontear/home/default.nix @@ -26,7 +26,7 @@ }; git = { - extraConfig = { + settings = { user.email = "contact@frontear.dev"; user.name = "Ali Rizvi"; user.signingKey = "4BC247743ACFF25E"; From 356a11c2895a4ed81eabf506ca34c59eb61e9ffb Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 30 Oct 2025 03:20:27 -0400 Subject: [PATCH 24/36] fix: update `flake.lock`, perform migrations of deprecated things --- flake.lock | 24 +++++++++---------- .../home/desktops/gnome/stylix/default.nix | 2 +- .../niri/my/programs/swayosd/fs/default.nix | 4 ++-- .../home/desktops/niri/stylix/default.nix | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index e789cbc..a712b9c 100644 --- a/flake.lock +++ b/flake.lock @@ -142,11 +142,11 @@ ] }, "locked": { - "lastModified": 1761344779, - "narHash": "sha256-6LNSptFYhiAd0M/maJoixJw7V0Kp5BSoMRtIahcfu3M=", + "lastModified": 1761770832, + "narHash": "sha256-IQIWG6kHxnUpx5KEb9r0BROL3/R6UQ/30aO2oHncBA8=", "owner": "nix-community", "repo": "home-manager", - "rev": "c644cb018f9fdec55f5ac2afb4713a8c7beb757c", + "rev": "124b99dbd1594dbebdd575ac7142752ee96a98a0", "type": "github" }, "original": { @@ -157,11 +157,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1760958188, - "narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=", + "lastModified": 1761759700, + "narHash": "sha256-zuiwvKAPwtMmwf44tb7Q7Y5d7JkBeuaF89PISUnkWA8=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc", + "rev": "2379bc40992ec29feb1933bb4acd224fa055f3f8", "type": "github" }, "original": { @@ -172,11 +172,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761114652, - "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "lastModified": 1761672384, + "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", "type": "github" }, "original": { @@ -258,11 +258,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1761028816, - "narHash": "sha256-s1XiIeJHpODVWfzsPaK9e21iz1dQSCU3H4/1OxOsyps=", + "lastModified": 1761666531, + "narHash": "sha256-nKOOPeblDcebtYfBjHo+PHXHKNSNKuifn1EGcBEgKWs=", "owner": "nix-community", "repo": "stylix", - "rev": "b81dc0a385443099e7d231fe6275189e32c3b760", + "rev": "f8f4e3c3658ee962f8f332a56720c8dfc2836f7a", "type": "github" }, "original": { diff --git a/users/frontear/home/desktops/gnome/stylix/default.nix b/users/frontear/home/desktops/gnome/stylix/default.nix index 8bdc4b9..2801be8 100644 --- a/users/frontear/home/desktops/gnome/stylix/default.nix +++ b/users/frontear/home/desktops/gnome/stylix/default.nix @@ -31,7 +31,7 @@ in { emoji = { name = "Noto Color Emoji"; - package = pkgs.noto-fonts-emoji; + package = pkgs.noto-fonts-color-emoji; }; monospace = { diff --git a/users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix b/users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix index c0013ec..fdd644d 100644 --- a/users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix +++ b/users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix @@ -1,10 +1,10 @@ { lib, - runCommandNoCCLocal, + runCommandLocal, sassc, }: -runCommandNoCCLocal "fs-swayosd" { +runCommandLocal "fs-swayosd" { src = with lib.fileset; toSource { root = ./.; fileset = difference ./. ./default.nix; diff --git a/users/frontear/home/desktops/niri/stylix/default.nix b/users/frontear/home/desktops/niri/stylix/default.nix index 56d4439..4727c1f 100644 --- a/users/frontear/home/desktops/niri/stylix/default.nix +++ b/users/frontear/home/desktops/niri/stylix/default.nix @@ -30,7 +30,7 @@ in { emoji = { name = "Noto Color Emoji"; - package = pkgs.noto-fonts-emoji; + package = pkgs.noto-fonts-color-emoji; }; monospace = { From 601cd68f796460238fa44053668313118b0599b9 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 31 Oct 2025 00:58:00 -0400 Subject: [PATCH 25/36] fix: add cmake-tools extension for VSCode --- users/frontear/home/programs/vscode/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/users/frontear/home/programs/vscode/default.nix b/users/frontear/home/programs/vscode/default.nix index 62895bc..2daa3a3 100644 --- a/users/frontear/home/programs/vscode/default.nix +++ b/users/frontear/home/programs/vscode/default.nix @@ -19,6 +19,7 @@ ++ (with pkgs.vscode-extensions; [ # TODO: prefer Nixpkgs extensions when possible ms-python.python + ms-vscode.cmake-tools ms-vscode.cpptools rust-lang.rust-analyzer ]); From 0f81338821ea5d60f2d9850e4c3ebf5e3c14ce88 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 01:55:19 -0500 Subject: [PATCH 26/36] fix: update `flake.lock` --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index a712b9c..68c5c38 100644 --- a/flake.lock +++ b/flake.lock @@ -89,11 +89,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1760948891, - "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", + "lastModified": 1762040540, + "narHash": "sha256-z5PlZ47j50VNF3R+IMS9LmzI5fYRGY/Z5O5tol1c9I4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", + "rev": "0010412d62a25d959151790968765a70c436598b", "type": "github" }, "original": { @@ -142,11 +142,11 @@ ] }, "locked": { - "lastModified": 1761770832, - "narHash": "sha256-IQIWG6kHxnUpx5KEb9r0BROL3/R6UQ/30aO2oHncBA8=", + "lastModified": 1762296971, + "narHash": "sha256-Jyv3L5rrUYpecON+9zyFz2VqgTSTsIG35fXuCyuCQv0=", "owner": "nix-community", "repo": "home-manager", - "rev": "124b99dbd1594dbebdd575ac7142752ee96a98a0", + "rev": "34fe48801d2a5301b814eaa1efb496499d06cebc", "type": "github" }, "original": { @@ -157,11 +157,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1761759700, - "narHash": "sha256-zuiwvKAPwtMmwf44tb7Q7Y5d7JkBeuaF89PISUnkWA8=", + "lastModified": 1762267440, + "narHash": "sha256-WHjEJ80oYbWyNu0dxysBs5oMlBc5w7YYzL1/UPj4iGo=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "2379bc40992ec29feb1933bb4acd224fa055f3f8", + "rev": "2e85ae1b7030df39269d29118b1f74944d0c8f15", "type": "github" }, "original": { @@ -172,11 +172,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761672384, - "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -188,11 +188,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1754788789, - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", + "lastModified": 1761765539, + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", "type": "github" }, "original": { @@ -258,11 +258,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1761666531, - "narHash": "sha256-nKOOPeblDcebtYfBjHo+PHXHKNSNKuifn1EGcBEgKWs=", + "lastModified": 1762264356, + "narHash": "sha256-QVfC53Ri+8n3e7Ujx9kq6all3+TLBRRPRnc6No5qY5w=", "owner": "nix-community", "repo": "stylix", - "rev": "f8f4e3c3658ee962f8f332a56720c8dfc2836f7a", + "rev": "647bb8dd96a206a1b79c4fd714affc88b409e10b", "type": "github" }, "original": { From b7e86bc282770125f91f92f02f1353b3096b41af Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 03:17:43 -0500 Subject: [PATCH 27/36] fix: drop duplicate `allowUnfree` from ISO It is already set by the modules. --- hosts/iso/configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/hosts/iso/configuration.nix b/hosts/iso/configuration.nix index 091f6a0..72d65cf 100644 --- a/hosts/iso/configuration.nix +++ b/hosts/iso/configuration.nix @@ -15,7 +15,5 @@ console.keyMap = "us"; i18n.defaultLocale = "en_CA.UTF-8"; time.timeZone = "America/Toronto"; - - nixpkgs.config.allowUnfree = true; }; } \ No newline at end of file From bfacf1e9b169a2164a16302c335f98b74ae79e1b Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 17:25:05 -0500 Subject: [PATCH 28/36] feat: introduce `nixos-facter` with modules for hardware This project is incomplete, so it will not fully replace `nixos-hardware` at the moment, but the end-goal is to replace said project. From what I can see right now, it perfectly replaces `hardware-configuration.nix`, so I have removed that for now. --- flake.lock | 177 +- flake.nix | 11 + hosts/iso/configuration.nix | 5 + hosts/laptop/default.nix | 4 +- hosts/laptop/facter.json | 3361 +++++++++++++++++++++++++++ nix/nixosConfigurations/default.nix | 5 + nix/nixosModules/default.nix | 2 + 7 files changed, 3563 insertions(+), 2 deletions(-) create mode 100644 hosts/laptop/facter.json diff --git a/flake.lock b/flake.lock index 68c5c38..0f90c6d 100644 --- a/flake.lock +++ b/flake.lock @@ -68,6 +68,52 @@ "type": "github" } }, + "blueprint": { + "inputs": { + "nixpkgs": [ + "nixos-facter", + "nixpkgs" + ], + "systems": [ + "nixos-facter", + "systems" + ] + }, + "locked": { + "lastModified": 1761645416, + "narHash": "sha256-wTQzbbQ6XHtvNJVuhJj+ytZDRyNtwUKbrIfIvMvKNfQ=", + "owner": "numtide", + "repo": "blueprint", + "rev": "633af1961cae8e02bc6195e6e599a6b09bf75217", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "blueprint", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixos-facter", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762276996, + "narHash": "sha256-TtcPgPmp2f0FAnc+DMEw4ardEgv1SGNR3/WFGH0N19M=", + "owner": "nix-community", + "repo": "disko", + "rev": "af087d076d3860760b3323f6b583f4d828c1ac17", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, "firefox-gnome-theme": { "flake": false, "locked": { @@ -102,6 +148,27 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": [ + "nixos-facter", + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "fromYaml": { "flake": false, "locked": { @@ -155,6 +222,76 @@ "type": "github" } }, + "hwinfo": { + "inputs": { + "blueprint": [ + "nixos-facter", + "blueprint" + ], + "nixpkgs": [ + "nixos-facter", + "nixpkgs" + ], + "systems": [ + "nixos-facter", + "systems" + ] + }, + "locked": { + "lastModified": 1762279079, + "narHash": "sha256-GL3fNCSaU45fNihEksgtPtbuLkc+tVGXtPH05wbrHwI=", + "owner": "numtide", + "repo": "hwinfo", + "rev": "bfeab0b4e38b200c7a62a44d4d01601a86fe1091", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "hwinfo", + "type": "github" + } + }, + "nixos-facter": { + "inputs": { + "blueprint": "blueprint", + "disko": "disko", + "flake-utils": "flake-utils", + "hwinfo": "hwinfo", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1762312445, + "narHash": "sha256-WWTlWGkxqkwXz5LLH7ZGjW4K6cCrbXIoctcrN61Xyjw=", + "owner": "nix-community", + "repo": "nixos-facter", + "rev": "f1e0f885b14b6878a05993f457fb972cae635091", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-facter", + "type": "github" + } + }, + "nixos-facter-modules": { + "locked": { + "lastModified": 1762264948, + "narHash": "sha256-iaRf6n0KPl9hndnIft3blm1YTAyxSREV1oX0MFZ6Tk4=", + "owner": "nix-community", + "repo": "nixos-facter-modules", + "rev": "fa695bff9ec37fd5bbd7ee3181dbeb5f97f53c96", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-facter-modules", + "type": "github" + } + }, "nixos-hardware": { "locked": { "lastModified": 1762267440, @@ -230,6 +367,8 @@ "inputs": { "flake-parts": "flake-parts", "home-manager": "home-manager", + "nixos-facter": "nixos-facter", + "nixos-facter-modules": "nixos-facter-modules", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "stylix": "stylix" @@ -250,7 +389,7 @@ "nixpkgs" ], "nur": "nur", - "systems": "systems", + "systems": "systems_2", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -286,6 +425,21 @@ "type": "github" } }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "tinted-foot": { "flake": false, "locked": { @@ -366,6 +520,27 @@ "repo": "base16-zed", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixos-facter", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762305549, + "narHash": "sha256-iHxl8YwQsCX9QyB0ImEvmr+C3FuZP0BR/9vMmjbaITA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "144d1e80d642c50c71846c0cb674e86c956e9a24", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index e5534ab..d862332 100644 --- a/flake.nix +++ b/flake.nix @@ -5,9 +5,20 @@ home-manager = { url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; }; + nixos-facter = { + url = "github:nix-community/nixos-facter"; + + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixos-facter-modules = { + url = "github:nix-community/nixos-facter-modules"; + }; + nixos-hardware = { url = "github:NixOS/nixos-hardware"; }; diff --git a/hosts/iso/configuration.nix b/hosts/iso/configuration.nix index 72d65cf..4c8aac8 100644 --- a/hosts/iso/configuration.nix +++ b/hosts/iso/configuration.nix @@ -1,5 +1,6 @@ { modulesPath, + nixos-facter, ... }: { @@ -12,6 +13,10 @@ services.displayManager.autoLogin.enable = true; + environment.systemPackages = [ + nixos-facter + ]; + console.keyMap = "us"; i18n.defaultLocale = "en_CA.UTF-8"; time.timeZone = "America/Toronto"; diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix index 6024a91..8cdc676 100644 --- a/hosts/laptop/default.nix +++ b/hosts/laptop/default.nix @@ -1,10 +1,12 @@ { imports = [ ./configuration.nix - ./hardware-configuration.nix + #./hardware-configuration.nix ]; config = { + facter.reportPath = ./facter.json; + system.stateVersion = "25.05"; }; } \ No newline at end of file diff --git a/hosts/laptop/facter.json b/hosts/laptop/facter.json new file mode 100644 index 0000000..f755e87 --- /dev/null +++ b/hosts/laptop/facter.json @@ -0,0 +1,3361 @@ +{ + "version": 1, + "system": "x86_64-linux", + "virtualisation": "none", + "hardware": { + "bios": { + "apm_info": { + "supported": false, + "enabled": false, + "version": 0, + "sub_version": 0, + "bios_flags": 0 + }, + "vbe_info": { + "version": 0, + "video_memory": 0 + }, + "pnp": false, + "pnp_id": 0, + "lba_support": false, + "low_memory_size": 0, + "smbios_version": 770 + }, + "bluetooth": [ + { + "index": 39, + "attached_to": 37, + "class_list": [ + "usb", + "bluetooth" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "0115", + "name": "Bluetooth Device", + "value": 277 + }, + "vendor": { + "hex": "8087", + "value": 32903 + }, + "device": { + "hex": "0026", + "value": 38 + }, + "revision": { + "hex": "0000", + "name": "0.02", + "value": 0 + }, + "model": "Bluetooth Device", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0", + "sysfs_bus_id": "3-10:1.0", + "resources": [ + { + "type": "baud", + "speed": 12000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "00e0", + "name": "wireless", + "value": 224 + }, + "device_subclass": { + "hex": "0001", + "name": "audio", + "value": 1 + }, + "device_protocol": 1, + "interface_class": { + "hex": "00e0", + "name": "wireless", + "value": 224 + }, + "interface_subclass": { + "hex": "0001", + "name": "audio", + "value": 1 + }, + "interface_protocol": 1, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "btusb", + "driver_module": "btusb", + "drivers": [ + "btusb" + ], + "driver_modules": [ + "btusb" + ], + "module_alias": "usb:v8087p0026d0002dcE0dsc01dp01icE0isc01ip01in00" + }, + { + "index": 43, + "attached_to": 37, + "class_list": [ + "usb", + "bluetooth" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "0115", + "name": "Bluetooth Device", + "value": 277 + }, + "vendor": { + "hex": "8087", + "value": 32903 + }, + "device": { + "hex": "0026", + "value": 38 + }, + "revision": { + "hex": "0000", + "name": "0.02", + "value": 0 + }, + "model": "Bluetooth Device", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.1", + "sysfs_bus_id": "3-10:1.1", + "resources": [ + { + "type": "baud", + "speed": 12000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "00e0", + "name": "wireless", + "value": 224 + }, + "device_subclass": { + "hex": "0001", + "name": "audio", + "value": 1 + }, + "device_protocol": 1, + "interface_class": { + "hex": "00e0", + "name": "wireless", + "value": 224 + }, + "interface_subclass": { + "hex": "0001", + "name": "audio", + "value": 1 + }, + "interface_protocol": 1, + "interface_number": 1, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "btusb", + "driver_module": "btusb", + "drivers": [ + "btusb" + ], + "driver_modules": [ + "btusb" + ], + "module_alias": "usb:v8087p0026d0002dcE0dsc01dp01icE0isc01ip01in01" + } + ], + "bridge": [ + { + "index": 12, + "attached_to": 0, + "class_list": [ + "pci", + "bridge" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 28 + }, + "base_class": { + "hex": "0006", + "name": "Bridge", + "value": 6 + }, + "sub_class": { + "hex": "0004", + "name": "PCI bridge", + "value": 4 + }, + "pci_interface": { + "hex": "0000", + "name": "Normal decode", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0bc", + "value": 41148 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel PCI bridge", + "sysfs_id": "/devices/pci0000:00/0000:00:1c.0", + "sysfs_bus_id": "0000:00:1c.0", + "detail": { + "function": 0, + "command": 1031, + "header_type": 1, + "secondary_bus": 43, + "prog_if": 0 + }, + "driver": "pcieport", + "driver_module": "pcieportdrv", + "drivers": [ + "pcieport" + ], + "driver_modules": [ + "pcieportdrv" + ], + "module_alias": "pci:v00008086d0000A0BCsv00001028sd00000A89bc06sc04i00" + }, + { + "index": 16, + "attached_to": 0, + "class_list": [ + "pci", + "bridge" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 31 + }, + "base_class": { + "hex": "0006", + "name": "Bridge", + "value": 6 + }, + "sub_class": { + "hex": "0001", + "name": "ISA bridge", + "value": 1 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a082", + "value": 41090 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel ISA bridge", + "sysfs_id": "/devices/pci0000:00/0000:00:1f.0", + "sysfs_bus_id": "0000:00:1f.0", + "detail": { + "function": 0, + "command": 1031, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "module_alias": "pci:v00008086d0000A082sv00001028sd00000A89bc06sc01i00" + }, + { + "index": 20, + "attached_to": 0, + "class_list": [ + "pci", + "bridge" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 7 + }, + "base_class": { + "hex": "0006", + "name": "Bridge", + "value": 6 + }, + "sub_class": { + "hex": "0004", + "name": "PCI bridge", + "value": 4 + }, + "pci_interface": { + "hex": "0000", + "name": "Normal decode", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a23", + "value": 39459 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel PCI bridge", + "sysfs_id": "/devices/pci0000:00/0000:00:07.0", + "sysfs_bus_id": "0000:00:07.0", + "detail": { + "function": 0, + "command": 1031, + "header_type": 1, + "secondary_bus": 1, + "prog_if": 0 + }, + "driver": "pcieport", + "driver_module": "pcieportdrv", + "drivers": [ + "pcieport" + ], + "driver_modules": [ + "pcieportdrv" + ], + "module_alias": "pci:v00008086d00009A23sv00001028sd00000A89bc06sc04i00" + }, + { + "index": 23, + "attached_to": 0, + "class_list": [ + "pci", + "bridge" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "0006", + "name": "Bridge", + "value": 6 + }, + "sub_class": { + "hex": "0000", + "name": "Host bridge", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a14", + "value": 39444 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel Host bridge", + "sysfs_id": "/devices/pci0000:00/0000:00:00.0", + "sysfs_bus_id": "0000:00:00.0", + "detail": { + "function": 0, + "command": 6, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "module_alias": "pci:v00008086d00009A14sv00001028sd00000A89bc06sc00i00" + } + ], + "camera": [ + { + "index": 38, + "attached_to": 37, + "class_list": [ + "camera", + "usb" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010f", + "name": "Camera", + "value": 271 + }, + "vendor": { + "hex": "1bcf", + "name": "SunplusIT Inc", + "value": 7119 + }, + "device": { + "hex": "2a02", + "name": "Integrated_Webcam_HD", + "value": 10754 + }, + "revision": { + "hex": "0000", + "name": "11.15", + "value": 0 + }, + "serial": "01.00.00", + "model": "SunplusIT Integrated_Webcam_HD", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.1", + "sysfs_bus_id": "3-6:1.1", + "resources": [ + { + "type": "baud", + "speed": 480000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "00ef", + "name": "miscellaneous", + "value": 239 + }, + "device_subclass": { + "hex": "0002", + "name": "comm", + "value": 2 + }, + "device_protocol": 1, + "interface_class": { + "hex": "000e", + "name": "video", + "value": 14 + }, + "interface_subclass": { + "hex": "0002", + "name": "comm", + "value": 2 + }, + "interface_protocol": 0, + "interface_number": 1, + "interface_alternate_setting": 0, + "interface_association": { + "function_class": { + "hex": "000e", + "name": "video", + "value": 14 + }, + "function_subclass": { + "hex": "0003", + "name": "hid", + "value": 3 + }, + "function_protocol": 0, + "interface_count": 2, + "first_interface": 0 + } + }, + "hotplug": "usb", + "driver": "uvcvideo", + "driver_module": "uvcvideo", + "drivers": [ + "uvcvideo" + ], + "driver_modules": [ + "uvcvideo" + ], + "module_alias": "usb:v1BCFp2A02d1115dcEFdsc02dp01ic0Eisc02ip00in01" + }, + { + "index": 45, + "attached_to": 37, + "class_list": [ + "camera", + "usb" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010f", + "name": "Camera", + "value": 271 + }, + "vendor": { + "hex": "1bcf", + "name": "SunplusIT Inc", + "value": 7119 + }, + "device": { + "hex": "2a02", + "name": "Integrated_Webcam_HD", + "value": 10754 + }, + "revision": { + "hex": "0000", + "name": "11.15", + "value": 0 + }, + "serial": "01.00.00", + "model": "SunplusIT Integrated_Webcam_HD", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0", + "sysfs_bus_id": "3-6:1.0", + "resources": [ + { + "type": "baud", + "speed": 480000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "00ef", + "name": "miscellaneous", + "value": 239 + }, + "device_subclass": { + "hex": "0002", + "name": "comm", + "value": 2 + }, + "device_protocol": 1, + "interface_class": { + "hex": "000e", + "name": "video", + "value": 14 + }, + "interface_subclass": { + "hex": "0001", + "name": "audio", + "value": 1 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0, + "interface_association": { + "function_class": { + "hex": "000e", + "name": "video", + "value": 14 + }, + "function_subclass": { + "hex": "0003", + "name": "hid", + "value": 3 + }, + "function_protocol": 0, + "interface_count": 2, + "first_interface": 0 + } + }, + "hotplug": "usb", + "driver": "uvcvideo", + "driver_module": "uvcvideo", + "drivers": [ + "uvcvideo" + ], + "driver_modules": [ + "uvcvideo" + ], + "module_alias": "usb:v1BCFp2A02d1115dcEFdsc02dp01ic0Eisc01ip00in00" + } + ], + "cpu": [ + { + "architecture": "x86_64", + "vendor_name": "GenuineIntel", + "model_name": "11th Gen Intel(R) Core(TM) i7-1195G7 @ 2.90GHz", + "family": 6, + "model": 140, + "stepping": 2, + "features": [ + "fpu", + "vme", + "de", + "pse", + "tsc", + "msr", + "pae", + "mce", + "cx8", + "apic", + "sep", + "mtrr", + "pge", + "mca", + "cmov", + "pat", + "pse36", + "clflush", + "dts", + "acpi", + "mmx", + "fxsr", + "sse", + "sse2", + "ss", + "ht", + "tm", + "pbe", + "syscall", + "nx", + "pdpe1gb", + "rdtscp", + "lm", + "constant_tsc", + "art", + "arch_perfmon", + "pebs", + "bts", + "rep_good", + "nopl", + "xtopology", + "nonstop_tsc", + "cpuid", + "aperfmperf", + "tsc_known_freq", + "pni", + "pclmulqdq", + "dtes64", + "monitor", + "ds_cpl", + "vmx", + "est", + "tm2", + "ssse3", + "sdbg", + "fma", + "cx16", + "xtpr", + "pdcm", + "pcid", + "sse4_1", + "sse4_2", + "x2apic", + "movbe", + "popcnt", + "tsc_deadline_timer", + "aes", + "xsave", + "avx", + "f16c", + "rdrand", + "lahf_lm", + "abm", + "3dnowprefetch", + "cpuid_fault", + "epb", + "cat_l2", + "cdp_l2", + "ssbd", + "ibrs", + "ibpb", + "stibp", + "ibrs_enhanced", + "tpr_shadow", + "flexpriority", + "ept", + "vpid", + "ept_ad", + "fsgsbase", + "tsc_adjust", + "bmi1", + "avx2", + "smep", + "bmi2", + "erms", + "invpcid", + "rdt_a", + "avx512f", + "avx512dq", + "rdseed", + "adx", + "smap", + "avx512ifma", + "clflushopt", + "clwb", + "intel_pt", + "avx512cd", + "sha_ni", + "avx512bw", + "avx512vl", + "xsaveopt", + "xsavec", + "xgetbv1", + "xsaves", + "split_lock_detect", + "user_shstk", + "dtherm", + "ida", + "arat", + "pln", + "pts", + "hwp", + "hwp_notify", + "hwp_act_window", + "hwp_epp", + "hwp_pkg_req", + "vnmi", + "avx512vbmi", + "umip", + "pku", + "ospke", + "avx512_vbmi2", + "gfni", + "vaes", + "vpclmulqdq", + "avx512_vnni", + "avx512_bitalg", + "avx512_vpopcntdq", + "rdpid", + "movdiri", + "movdir64b", + "fsrm", + "avx512_vp2intersect", + "md_clear", + "ibt", + "flush_l1" + ], + "bugs": [ + "spectre_v1", + "spectre_v2", + "spec_store_bypass", + "swapgs", + "eibrs_pbrsb", + "gds", + "bhi", + "its", + "its_native_only" + ], + "power_management": [ + "" + ], + "bogo": 3609, + "cache": 12288, + "units": 16, + "page_size": 4096, + "physical_id": 0, + "siblings": 8, + "cores": 4, + "fpu": false, + "fpu_exception": false, + "cpuid_level": 27, + "write_protect": false, + "tlb_size": 32766, + "clflush_size": 64, + "cache_alignment": 64, + "address_sizes": { + "physical": "0x27", + "virtual": "0x30" + } + } + ], + "disk": [ + { + "index": 34, + "attached_to": 26, + "class_list": [ + "disk", + "block_device", + "nvme" + ], + "bus_type": { + "hex": "0096", + "name": "NVME", + "value": 150 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "0106", + "name": "Mass Storage Device", + "value": 262 + }, + "sub_class": { + "hex": "0000", + "name": "Disk", + "value": 0 + }, + "vendor": { + "hex": "1e0f", + "value": 7695 + }, + "sub_vendor": { + "hex": "1e0f", + "value": 7695 + }, + "device": { + "hex": "0001", + "name": "KBG40ZNS512G NVMe KIOXIA 512GB", + "value": 1 + }, + "sub_device": { + "hex": "0001", + "value": 1 + }, + "serial": "X1OPCI8IQXD3", + "model": "KBG40ZNS512G NVMe KIOXIA 512GB", + "sysfs_id": "/class/block/nvme0n1", + "sysfs_bus_id": "nvme0", + "sysfs_device_link": "/devices/pci0000:00/0000:00:1c.0/0000:2b:00.0/nvme/nvme0", + "unix_device_names": [ + "/dev/disk/by-id/nvme-KBG40ZNS512G_NVMe_KIOXIA_512GB_X1OPCI8IQXD3", + "/dev/disk/by-id/nvme-KBG40ZNS512G_NVMe_KIOXIA_512GB_X1OPCI8IQXD3_1", + "/dev/disk/by-id/nvme-eui.01000000000000008ce38e0402fa167e", + "/dev/disk/by-path/pci-0000:2b:00.0-nvme-1", + "/dev/nvme0n1" + ], + "resources": [ + { + "type": "disk_geo", + "cylinders": 61048, + "heads": 64, + "sectors": 32, + "size": "0x0", + "geo_type": "logical" + }, + { + "type": "size", + "unit": "sectors", + "value_1": 125026902, + "value_2": 4096 + } + ], + "driver": "nvme", + "driver_module": "nvme", + "drivers": [ + "nvme" + ], + "driver_modules": [ + "nvme" + ] + } + ], + "graphics_card": [ + { + "index": 28, + "attached_to": 0, + "class_list": [ + "graphics_card", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 2 + }, + "base_class": { + "hex": "0003", + "name": "Display controller", + "value": 3 + }, + "sub_class": { + "hex": "0000", + "name": "VGA compatible controller", + "value": 0 + }, + "pci_interface": { + "hex": "0000", + "name": "VGA", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a49", + "value": 39497 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0003", + "value": 3 + }, + "model": "Intel VGA compatible controller", + "sysfs_id": "/devices/pci0000:00/0000:00:02.0", + "sysfs_bus_id": "0000:00:02.0", + "resources": [ + { + "type": "io", + "base": 12288, + "range": 64, + "enabled": true, + "access": "read_write" + } + ], + "detail": { + "function": 0, + "command": 1031, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "i915", + "driver_module": "i915", + "drivers": [ + "i915" + ], + "driver_modules": [ + "i915" + ], + "module_alias": "pci:v00008086d00009A49sv00001028sd00000A89bc03sc00i00" + } + ], + "hub": [ + { + "index": 37, + "attached_to": 29, + "class_list": [ + "usb", + "hub" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010a", + "name": "Hub", + "value": 266 + }, + "vendor": { + "hex": "1d6b", + "name": "Linux 6.12.57 xhci-hcd", + "value": 7531 + }, + "device": { + "hex": "0002", + "name": "xHCI Host Controller", + "value": 2 + }, + "revision": { + "hex": "0000", + "name": "6.12", + "value": 0 + }, + "serial": "0000:00:14.0", + "model": "Linux 6.12.57 xhci-hcd xHCI Host Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0", + "sysfs_bus_id": "3-0:1.0", + "resources": [ + { + "type": "baud", + "speed": 480000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "device_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "device_protocol": 1, + "interface_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "interface_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "hub", + "driver_module": "usbcore", + "drivers": [ + "hub" + ], + "driver_modules": [ + "usbcore" + ], + "module_alias": "usb:v1D6Bp0002d0612dc09dsc00dp01ic09isc00ip00in00" + }, + { + "index": 40, + "attached_to": 29, + "class_list": [ + "usb", + "hub" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010a", + "name": "Hub", + "value": 266 + }, + "vendor": { + "hex": "1d6b", + "name": "Linux 6.12.57 xhci-hcd", + "value": 7531 + }, + "device": { + "hex": "0003", + "name": "xHCI Host Controller", + "value": 3 + }, + "revision": { + "hex": "0000", + "name": "6.12", + "value": 0 + }, + "serial": "0000:00:14.0", + "model": "Linux 6.12.57 xhci-hcd xHCI Host Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb4/4-0:1.0", + "sysfs_bus_id": "4-0:1.0", + "detail": { + "device_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "device_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "device_protocol": 3, + "interface_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "interface_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "hub", + "driver_module": "usbcore", + "drivers": [ + "hub" + ], + "driver_modules": [ + "usbcore" + ], + "module_alias": "usb:v1D6Bp0003d0612dc09dsc00dp03ic09isc00ip00in00" + }, + { + "index": 42, + "attached_to": 14, + "class_list": [ + "usb", + "hub" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010a", + "name": "Hub", + "value": 266 + }, + "vendor": { + "hex": "1d6b", + "name": "Linux 6.12.57 xhci-hcd", + "value": 7531 + }, + "device": { + "hex": "0002", + "name": "xHCI Host Controller", + "value": 2 + }, + "revision": { + "hex": "0000", + "name": "6.12", + "value": 0 + }, + "serial": "0000:00:0d.0", + "model": "Linux 6.12.57 xhci-hcd xHCI Host Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:0d.0/usb1/1-0:1.0", + "sysfs_bus_id": "1-0:1.0", + "resources": [ + { + "type": "baud", + "speed": 480000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "device_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "device_protocol": 1, + "interface_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "interface_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "hub", + "driver_module": "usbcore", + "drivers": [ + "hub" + ], + "driver_modules": [ + "usbcore" + ], + "module_alias": "usb:v1D6Bp0002d0612dc09dsc00dp01ic09isc00ip00in00" + }, + { + "index": 46, + "attached_to": 14, + "class_list": [ + "usb", + "hub" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "010a", + "name": "Hub", + "value": 266 + }, + "vendor": { + "hex": "1d6b", + "name": "Linux 6.12.57 xhci-hcd", + "value": 7531 + }, + "device": { + "hex": "0003", + "name": "xHCI Host Controller", + "value": 3 + }, + "revision": { + "hex": "0000", + "name": "6.12", + "value": 0 + }, + "serial": "0000:00:0d.0", + "model": "Linux 6.12.57 xhci-hcd xHCI Host Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:0d.0/usb2/2-0:1.0", + "sysfs_bus_id": "2-0:1.0", + "detail": { + "device_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "device_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "device_protocol": 3, + "interface_class": { + "hex": "0009", + "name": "hub", + "value": 9 + }, + "interface_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "driver": "hub", + "driver_module": "usbcore", + "drivers": [ + "hub" + ], + "driver_modules": [ + "usbcore" + ], + "module_alias": "usb:v1D6Bp0003d0612dc09dsc00dp03ic09isc00ip00in00" + } + ], + "memory": [ + { + "index": 11, + "attached_to": 0, + "class_list": [ + "memory" + ], + "base_class": { + "hex": "0101", + "name": "Internally Used Class", + "value": 257 + }, + "sub_class": { + "hex": "0002", + "name": "Main Memory", + "value": 2 + }, + "model": "Main Memory", + "resources": [ + { + "type": "phys_mem", + "range": 11811160064 + } + ] + } + ], + "monitor": [ + { + "index": 33, + "attached_to": 28, + "class_list": [ + "monitor" + ], + "base_class": { + "hex": "0100", + "name": "Monitor", + "value": 256 + }, + "sub_class": { + "hex": "0002", + "name": "LCD Monitor", + "value": 2 + }, + "vendor": { + "hex": "06af", + "name": "W2D6P B140HAB", + "value": 1711 + }, + "device": { + "hex": "323d", + "value": 12861 + }, + "serial": "0", + "model": "W2D6P B140HAB LCD Monitor", + "resources": [ + { + "type": "monitor", + "width": 1920, + "height": 1080, + "vertical_frequency": 60, + "interlaced": false + }, + { + "type": "size", + "unit": "mm", + "value_1": 309, + "value_2": 174 + } + ], + "detail": { + "manufacture_year": 2020, + "manufacture_week": 6, + "vertical_sync": { + "min": 0, + "max": 0 + }, + "horizontal_sync": { + "min": 0, + "max": 0 + }, + "horizontal_sync_timings": { + "disp": 1920, + "sync_start": 1936, + "sync_end": 1952, + "total": 2180 + }, + "vertical_sync_timings": { + "disp": 1080, + "sync_start": 1083, + "sync_end": 1097, + "total": 1162 + }, + "clock": 121600, + "width": 1920, + "height": 1080, + "width_millimetres": 309, + "height_millimetres": 174, + "horizontal_flag": 45, + "vertical_flag": 43, + "vendor": "W2D6P B140HAB", + "name": "" + } + } + ], + "mouse": [ + { + "index": 49, + "attached_to": 0, + "bus_type": { + "hex": "0081", + "name": "serial", + "value": 129 + }, + "base_class": { + "hex": "0118", + "name": "touchpad", + "value": 280 + }, + "sub_class": { + "hex": "0001", + "name": "bus", + "value": 1 + }, + "vendor": { + "hex": "27c6", + "value": 10182 + }, + "device": { + "hex": "0d41", + "value": 3393 + }, + "sysfs_id": "/devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-2/i2c-DELL0A89:00/0018:27C6:0D41.0005/input/input30", + "unix_device_names": [ + "/dev/input/event17", + "/dev/input/ + handler" + ] + } + ], + "network_controller": [ + { + "index": 18, + "attached_to": 0, + "class_list": [ + "network_controller", + "pci", + "wlan_card" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 20 + }, + "base_class": { + "hex": "0002", + "name": "Network controller", + "value": 2 + }, + "sub_class": { + "hex": "0082", + "name": "WLAN controller", + "value": 130 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "device": { + "hex": "a0f0", + "value": 41200 + }, + "sub_device": { + "hex": "4070", + "value": 16496 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel WLAN controller", + "sysfs_id": "/devices/pci0000:00/0000:00:14.3", + "sysfs_bus_id": "0000:00:14.3", + "unix_device_names": [ + "wlp0s20f3" + ], + "resources": [ + { + "type": "hwaddr", + "address": 57 + }, + { + "type": "phwaddr", + "address": 100 + }, + { + "type": "wlan", + "channels": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "36", + "40", + "44", + "48", + "52", + "56", + "60", + "64", + "100", + "104", + "108", + "112", + "116", + "120", + "124", + "128", + "132", + "136", + "140" + ], + "frequencies": [ + "2.412", + "2.417", + "2.422", + "2.427", + "2.432", + "2.437", + "2.442", + "2.447", + "2.452", + "2.457", + "2.462", + "2.467", + "2.472", + "5.18", + "5.2", + "5.22", + "5.24", + "5.26", + "5.28", + "5.3", + "5.32", + "5.5", + "5.52", + "5.54", + "5.56", + "5.58", + "5.6", + "5.62", + "5.64", + "5.66", + "5.68", + "5.7" + ], + "auth_modes": [ + "open", + "sharedkey", + "wpa-psk", + "wpa-eap" + ], + "enc_modes": [ + "WEP40", + "WEP104", + "TKIP", + "CCMP" + ] + } + ], + "detail": { + "function": 3, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "iwlwifi", + "driver_module": "iwlwifi", + "drivers": [ + "iwlwifi" + ], + "driver_modules": [ + "iwlwifi" + ], + "module_alias": "pci:v00008086d0000A0F0sv00008086sd00004070bc02sc80i00" + } + ], + "network_interface": [ + { + "index": 47, + "attached_to": 0, + "class_list": [ + "network_interface" + ], + "base_class": { + "hex": "0107", + "name": "Network Interface", + "value": 263 + }, + "sub_class": { + "hex": "0000", + "name": "Loopback", + "value": 0 + }, + "model": "Loopback network interface", + "sysfs_id": "/class/net/lo", + "unix_device_names": [ + "lo" + ] + }, + { + "index": 48, + "attached_to": 18, + "class_list": [ + "network_interface" + ], + "base_class": { + "hex": "0107", + "name": "Network Interface", + "value": 263 + }, + "sub_class": { + "hex": "0001", + "name": "Ethernet", + "value": 1 + }, + "model": "Ethernet network interface", + "sysfs_id": "/class/net/wlp0s20f3", + "sysfs_device_link": "/devices/pci0000:00/0000:00:14.3", + "unix_device_names": [ + "wlp0s20f3" + ], + "resources": [ + { + "type": "hwaddr", + "address": 57 + }, + { + "type": "phwaddr", + "address": 100 + } + ], + "driver": "iwlwifi", + "driver_module": "iwlwifi", + "drivers": [ + "iwlwifi" + ], + "driver_modules": [ + "iwlwifi" + ] + } + ], + "pci": [ + { + "index": 13, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 8 + }, + "base_class": { + "hex": "0008", + "name": "Generic system peripheral", + "value": 8 + }, + "sub_class": { + "hex": "0080", + "name": "System peripheral", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a11", + "value": 39441 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel System peripheral", + "sysfs_id": "/devices/pci0000:00/0000:00:08.0", + "sysfs_bus_id": "0000:00:08.0", + "detail": { + "function": 0, + "command": 0, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "module_alias": "pci:v00008086d00009A11sv00001028sd00000A89bc08sc80i00" + }, + { + "index": 15, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 21 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0080", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0e9", + "value": 41193 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Serial bus controller", + "sysfs_id": "/devices/pci0000:00/0000:00:15.1", + "sysfs_bus_id": "0000:00:15.1", + "detail": { + "function": 1, + "command": 6, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "intel-lpss", + "driver_module": "intel_lpss_pci", + "drivers": [ + "intel-lpss" + ], + "driver_modules": [ + "intel_lpss_pci" + ], + "module_alias": "pci:v00008086d0000A0E9sv00001028sd00000A89bc0Csc80i00" + }, + { + "index": 17, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 4 + }, + "base_class": { + "hex": "0011", + "name": "Signal processing controller", + "value": 17 + }, + "sub_class": { + "hex": "0080", + "name": "Signal processing controller", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a03", + "value": 39427 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel Signal processing controller", + "sysfs_id": "/devices/pci0000:00/0000:00:04.0", + "sysfs_bus_id": "0000:00:04.0", + "detail": { + "function": 0, + "command": 2, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "proc_thermal", + "driver_module": "processor_thermal_device_pci_legacy", + "drivers": [ + "proc_thermal" + ], + "driver_modules": [ + "processor_thermal_device_pci_legacy" + ], + "module_alias": "pci:v00008086d00009A03sv00001028sd00000A89bc11sc80i00" + }, + { + "index": 19, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 22 + }, + "base_class": { + "hex": "0007", + "name": "Communication controller", + "value": 7 + }, + "sub_class": { + "hex": "0080", + "name": "Communication controller", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0e0", + "value": 41184 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Communication controller", + "sysfs_id": "/devices/pci0000:00/0000:00:16.0", + "sysfs_bus_id": "0000:00:16.0", + "detail": { + "function": 0, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "mei_me", + "driver_module": "mei_me", + "drivers": [ + "mei_me" + ], + "driver_modules": [ + "mei_me" + ], + "module_alias": "pci:v00008086d0000A0E0sv00001028sd00000A89bc07sc80i00" + }, + { + "index": 21, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 31 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0080", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0a4", + "value": 41124 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Serial bus controller", + "sysfs_id": "/devices/pci0000:00/0000:00:1f.5", + "sysfs_bus_id": "0000:00:1f.5", + "detail": { + "function": 5, + "command": 1026, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "intel-spi", + "driver_module": "spi_intel_pci", + "drivers": [ + "intel-spi" + ], + "driver_modules": [ + "spi_intel_pci" + ], + "module_alias": "pci:v00008086d0000A0A4sv00001028sd00000A89bc0Csc80i00" + }, + { + "index": 24, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 18 + }, + "base_class": { + "hex": "0007", + "name": "Communication controller", + "value": 7 + }, + "sub_class": { + "hex": "0000", + "name": "Serial controller", + "value": 0 + }, + "pci_interface": { + "hex": "0000", + "name": "8250", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0fc", + "value": 41212 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Serial controller", + "sysfs_id": "/devices/pci0000:00/0000:00:12.0", + "sysfs_bus_id": "0000:00:12.0", + "detail": { + "function": 0, + "command": 6, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "intel_ish_ipc", + "driver_module": "intel_ish_ipc", + "drivers": [ + "intel_ish_ipc" + ], + "driver_modules": [ + "intel_ish_ipc" + ], + "module_alias": "pci:v00008086d0000A0FCsv00001028sd00000A89bc07sc00i00" + }, + { + "index": 25, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 21 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0080", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0e8", + "value": 41192 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Serial bus controller", + "sysfs_id": "/devices/pci0000:00/0000:00:15.0", + "sysfs_bus_id": "0000:00:15.0", + "detail": { + "function": 0, + "command": 6, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "intel-lpss", + "driver_module": "intel_lpss_pci", + "drivers": [ + "intel-lpss" + ], + "driver_modules": [ + "intel_lpss_pci" + ], + "module_alias": "pci:v00008086d0000A0E8sv00001028sd00000A89bc0Csc80i00" + }, + { + "index": 27, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 20 + }, + "base_class": { + "hex": "0005", + "name": "Memory controller", + "value": 5 + }, + "sub_class": { + "hex": "0000", + "name": "RAM memory", + "value": 0 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0ef", + "value": 41199 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel RAM memory", + "sysfs_id": "/devices/pci0000:00/0000:00:14.2", + "sysfs_bus_id": "0000:00:14.2", + "detail": { + "function": 2, + "command": 0, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "module_alias": "pci:v00008086d0000A0EFsv00001028sd00000A89bc05sc00i00" + }, + { + "index": 30, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 31 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0005", + "name": "SMBus", + "value": 5 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0a3", + "value": 41123 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel SMBus", + "sysfs_id": "/devices/pci0000:00/0000:00:1f.4", + "sysfs_bus_id": "0000:00:1f.4", + "resources": [ + { + "type": "io", + "base": 61344, + "range": 32, + "enabled": true, + "access": "read_write" + } + ], + "detail": { + "function": 4, + "command": 3, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "i801_smbus", + "driver_module": "i2c_i801", + "drivers": [ + "i801_smbus" + ], + "driver_modules": [ + "i2c_i801" + ], + "module_alias": "pci:v00008086d0000A0A3sv00001028sd00000A89bc0Csc05i00" + }, + { + "index": 32, + "attached_to": 0, + "class_list": [ + "pci", + "unknown" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 10 + }, + "base_class": { + "hex": "0011", + "name": "Signal processing controller", + "value": 17 + }, + "sub_class": { + "hex": "0080", + "name": "Signal processing controller", + "value": 128 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a0d", + "value": 39437 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0001", + "value": 1 + }, + "model": "Intel Signal processing controller", + "sysfs_id": "/devices/pci0000:00/0000:00:0a.0", + "sysfs_bus_id": "0000:00:0a.0", + "detail": { + "function": 0, + "command": 2, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "intel_vsec", + "driver_module": "intel_vsec", + "drivers": [ + "intel_vsec" + ], + "driver_modules": [ + "intel_vsec" + ], + "module_alias": "pci:v00008086d00009A0Dsv00001028sd00000A89bc11sc80i00" + } + ], + "sound": [ + { + "index": 22, + "attached_to": 0, + "class_list": [ + "sound", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 31 + }, + "base_class": { + "hex": "0004", + "name": "Multimedia controller", + "value": 4 + }, + "sub_class": { + "hex": "0001", + "name": "Multimedia audio controller", + "value": 1 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0c8", + "value": 41160 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel Multimedia audio controller", + "sysfs_id": "/devices/pci0000:00/0000:00:1f.3", + "sysfs_bus_id": "0000:00:1f.3", + "detail": { + "function": 3, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 0 + }, + "driver": "sof-audio-pci-intel-tgl", + "driver_module": "snd_sof_pci_intel_tgl", + "drivers": [ + "sof-audio-pci-intel-tgl" + ], + "driver_modules": [ + "snd_sof_pci_intel_tgl" + ], + "module_alias": "pci:v00008086d0000A0C8sv00001028sd00000A89bc04sc01i00" + } + ], + "storage_controller": [ + { + "index": 26, + "attached_to": 12, + "class_list": [ + "storage_controller", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 43, + "number": 0 + }, + "base_class": { + "hex": "0001", + "name": "Mass storage controller", + "value": 1 + }, + "sub_class": { + "hex": "0008", + "value": 8 + }, + "pci_interface": { + "hex": "0002", + "value": 2 + }, + "vendor": { + "hex": "1e0f", + "value": 7695 + }, + "sub_vendor": { + "hex": "1e0f", + "value": 7695 + }, + "device": { + "hex": "0001", + "value": 1 + }, + "sub_device": { + "hex": "0001", + "value": 1 + }, + "model": "Mass storage controller", + "sysfs_id": "/devices/pci0000:00/0000:00:1c.0/0000:2b:00.0", + "sysfs_bus_id": "0000:2b:00.0", + "detail": { + "function": 0, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 2 + }, + "driver": "nvme", + "driver_module": "nvme", + "drivers": [ + "nvme" + ], + "driver_modules": [ + "nvme" + ], + "module_alias": "pci:v00001E0Fd00000001sv00001E0Fsd00000001bc01sc08i02" + } + ], + "system": { + "form_factor": "laptop" + }, + "usb": [ + { + "index": 41, + "attached_to": 37, + "class_list": [ + "usb", + "unknown" + ], + "bus_type": { + "hex": "0086", + "name": "USB", + "value": 134 + }, + "slot": { + "bus": 0, + "number": 0 + }, + "base_class": { + "hex": "0000", + "name": "Unclassified device", + "value": 0 + }, + "sub_class": { + "hex": "0000", + "name": "Unclassified device", + "value": 0 + }, + "vendor": { + "hex": "27c6", + "name": "Goodix Technology Co., Ltd.", + "value": 10182 + }, + "device": { + "hex": "639c", + "name": "Goodix USB2.0 MISC", + "value": 25500 + }, + "revision": { + "hex": "0000", + "name": "1.00", + "value": 0 + }, + "serial": "UIDA58B1138_XXXX_MOC_B0", + "model": "Goodix USB2.0 MISC", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-5/3-5:1.0", + "sysfs_bus_id": "3-5:1.0", + "resources": [ + { + "type": "baud", + "speed": 12000000, + "bits": 0, + "stop_bits": 0, + "parity": 0, + "handshake": 0 + } + ], + "detail": { + "device_class": { + "hex": "00ef", + "name": "miscellaneous", + "value": 239 + }, + "device_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "device_protocol": 0, + "interface_class": { + "hex": "00ff", + "name": "vendor_spec", + "value": 255 + }, + "interface_subclass": { + "hex": "0000", + "name": "per_interface", + "value": 0 + }, + "interface_protocol": 0, + "interface_number": 0, + "interface_alternate_setting": 0 + }, + "hotplug": "usb", + "module_alias": "usb:v27C6p639Cd0100dcEFdsc00dp00icFFisc00ip00in00" + } + ], + "usb_controller": [ + { + "index": 14, + "attached_to": 0, + "class_list": [ + "usb_controller", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 13 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0003", + "name": "USB Controller", + "value": 3 + }, + "pci_interface": { + "hex": "0030", + "value": 48 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a13", + "value": 39443 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel USB Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:0d.0", + "sysfs_bus_id": "0000:00:0d.0", + "detail": { + "function": 0, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 48 + }, + "driver": "xhci_hcd", + "driver_module": "xhci_pci", + "drivers": [ + "xhci_hcd" + ], + "driver_modules": [ + "xhci_pci" + ], + "module_alias": "pci:v00008086d00009A13sv00001028sd00000A89bc0Csc03i30" + }, + { + "index": 29, + "attached_to": 0, + "class_list": [ + "usb_controller", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 20 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0003", + "name": "USB Controller", + "value": 3 + }, + "pci_interface": { + "hex": "0030", + "value": 48 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "a0ed", + "value": 41197 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0030", + "value": 48 + }, + "model": "Intel USB Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:14.0", + "sysfs_bus_id": "0000:00:14.0", + "detail": { + "function": 0, + "command": 1030, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 48 + }, + "driver": "xhci_hcd", + "driver_module": "xhci_pci", + "drivers": [ + "xhci_hcd" + ], + "driver_modules": [ + "xhci_pci" + ], + "module_alias": "pci:v00008086d0000A0EDsv00001028sd00000A89bc0Csc03i30" + }, + { + "index": 31, + "attached_to": 0, + "class_list": [ + "usb_controller", + "pci" + ], + "bus_type": { + "hex": "0004", + "name": "PCI", + "value": 4 + }, + "slot": { + "bus": 0, + "number": 13 + }, + "base_class": { + "hex": "000c", + "name": "Serial bus controller", + "value": 12 + }, + "sub_class": { + "hex": "0003", + "name": "USB Controller", + "value": 3 + }, + "pci_interface": { + "hex": "0040", + "value": 64 + }, + "vendor": { + "hex": "8086", + "name": "Intel Corporation", + "value": 32902 + }, + "sub_vendor": { + "hex": "1028", + "value": 4136 + }, + "device": { + "hex": "9a1b", + "value": 39451 + }, + "sub_device": { + "hex": "0a89", + "value": 2697 + }, + "revision": { + "hex": "0002", + "value": 2 + }, + "model": "Intel USB Controller", + "sysfs_id": "/devices/pci0000:00/0000:00:0d.2", + "sysfs_bus_id": "0000:00:0d.2", + "detail": { + "function": 2, + "command": 1031, + "header_type": 0, + "secondary_bus": 0, + "prog_if": 64 + }, + "driver": "thunderbolt", + "driver_module": "thunderbolt", + "drivers": [ + "thunderbolt" + ], + "driver_modules": [ + "thunderbolt" + ], + "module_alias": "pci:v00008086d00009A1Bsv00001028sd00000A89bc0Csc03i40" + } + ] + }, + "smbios": { + "bios": { + "handle": 0, + "vendor": "Dell Inc.", + "version": "2.35.0", + "date": "06/30/2025", + "features": [ + "PCI supported", + "PnP supported", + "BIOS flashable", + "BIOS shadowing allowed", + "CD boot supported", + "Selectable boot supported", + "EDD spec supported", + "Print Screen supported", + "8042 Keyboard Services supported", + "Serial Services supported", + "Printer Services supported", + "ACPI supported", + "USB Legacy supported", + "Smart Battery supported", + "BIOS Boot Spec supported", + "F12 Network boot supported" + ], + "start_address": "0x0", + "rom_size": 16777216 + }, + "board": { + "handle": 512, + "manufacturer": "Dell Inc.", + "product": "0TPG56", + "version": "A00", + "board_type": { + "hex": "000a", + "name": "Motherboard", + "value": 10 + }, + "features": [ + "Hosting Board", + "Replaceable" + ], + "location": "", + "chassis": 768 + }, + "cache": [ + { + "handle": 1792, + "socket": "L1 Cache", + "size_max": 192, + "size_current": 192, + "speed": 0, + "mode": { + "hex": "0001", + "name": "Write Back", + "value": 1 + }, + "enabled": true, + "location": { + "hex": "0000", + "name": "Internal", + "value": 0 + }, + "socketed": false, + "level": 0, + "ecc": { + "hex": "0004", + "name": "Parity", + "value": 4 + }, + "cache_type": { + "hex": "0004", + "name": "Data", + "value": 4 + }, + "associativity": { + "hex": "0009", + "name": "Other", + "value": 9 + }, + "sram_type_current": [ + "Synchronous" + ], + "sram_type_supported": [ + "Synchronous" + ] + }, + { + "handle": 1793, + "socket": "L1 Cache", + "size_max": 128, + "size_current": 128, + "speed": 0, + "mode": { + "hex": "0001", + "name": "Write Back", + "value": 1 + }, + "enabled": true, + "location": { + "hex": "0000", + "name": "Internal", + "value": 0 + }, + "socketed": false, + "level": 0, + "ecc": { + "hex": "0004", + "name": "Parity", + "value": 4 + }, + "cache_type": { + "hex": "0003", + "name": "Instruction", + "value": 3 + }, + "associativity": { + "hex": "0007", + "name": "8-way Set-Associative", + "value": 7 + }, + "sram_type_current": [ + "Synchronous" + ], + "sram_type_supported": [ + "Synchronous" + ] + }, + { + "handle": 1794, + "socket": "L2 Cache", + "size_max": 5120, + "size_current": 5120, + "speed": 0, + "mode": { + "hex": "0001", + "name": "Write Back", + "value": 1 + }, + "enabled": true, + "location": { + "hex": "0000", + "name": "Internal", + "value": 0 + }, + "socketed": false, + "level": 1, + "ecc": { + "hex": "0005", + "name": "Single-bit", + "value": 5 + }, + "cache_type": { + "hex": "0005", + "name": "Unified", + "value": 5 + }, + "associativity": { + "hex": "0001", + "name": "Other", + "value": 1 + }, + "sram_type_current": [ + "Synchronous" + ], + "sram_type_supported": [ + "Synchronous" + ] + }, + { + "handle": 1795, + "socket": "L3 Cache", + "size_max": 12288, + "size_current": 12288, + "speed": 0, + "mode": { + "hex": "0001", + "name": "Write Back", + "value": 1 + }, + "enabled": true, + "location": { + "hex": "0000", + "name": "Internal", + "value": 0 + }, + "socketed": false, + "level": 2, + "ecc": { + "hex": "0006", + "name": "Multi-bit", + "value": 6 + }, + "cache_type": { + "hex": "0005", + "name": "Unified", + "value": 5 + }, + "associativity": { + "hex": "0009", + "name": "Other", + "value": 9 + }, + "sram_type_current": [ + "Synchronous" + ], + "sram_type_supported": [ + "Synchronous" + ] + } + ], + "chassis": [ + { + "handle": 768, + "manufacturer": "Dell Inc.", + "version": "", + "chassis_type": { + "hex": "001f", + "name": "Other", + "value": 31 + }, + "lock_present": false, + "bootup_state": { + "hex": "0003", + "name": "Safe", + "value": 3 + }, + "power_state": { + "hex": "0003", + "name": "Safe", + "value": 3 + }, + "thermal_state": { + "hex": "0003", + "name": "Safe", + "value": 3 + }, + "security_state": { + "hex": "0003", + "name": "None", + "value": 3 + }, + "oem": "0x0" + } + ], + "config": { + "handle": 3072, + "options": [ + "J6H1:1-X Boot with Default; J8H1:1-X BIOS RECOVERY" + ] + }, + "group_associations": [ + { + "handle": 3584, + "name": "$MEI", + "handles": [ + 0 + ] + }, + { + "handle": 3585, + "name": "Firmware Version Info", + "handles": [ + 225404178713856, + 225408473681153, + 225412768648450, + 225417063615747, + 225421358583044, + 225425653550341, + 52486 + ] + } + ], + "language": [ + { + "handle": 3328, + "languages": [ + "enUS" + ] + } + ], + "memory_array": [ + { + "handle": 4096, + "location": { + "hex": "0003", + "name": "Motherboard", + "value": 3 + }, + "usage": { + "hex": "0003", + "name": "System memory", + "value": 3 + }, + "ecc": { + "hex": "0003", + "name": "None", + "value": 3 + }, + "max_size": "0x1000000", + "error_handle": 65534, + "slots": 2 + } + ], + "memory_array_mapped_address": [ + { + "handle": 4864, + "array_handle": 4096, + "start_address": "0x0", + "end_address": "0x300000000", + "part_width": 2 + } + ], + "memory_device": [ + { + "handle": 4352, + "location": "DIMM 1", + "bank_location": "BANK 0", + "manufacturer": "80AD000080AD", + "part_number": "HMAA1GS6CJR6N-XN", + "array_handle": 4096, + "error_handle": 65534, + "width": 64, + "ecc_bits": 0, + "size": 8388608, + "form_factor": { + "hex": "000d", + "name": "SODIMM", + "value": 13 + }, + "set": 0, + "memory_type": { + "hex": "001a", + "name": "Other", + "value": 26 + }, + "memory_type_details": [ + "Synchronous" + ], + "speed": 3200 + }, + { + "handle": 4356, + "location": "DIMM 2", + "bank_location": "BANK 0", + "manufacturer": "802C0000802C", + "part_number": "4ATF51264HZ-3G2J1", + "array_handle": 4096, + "error_handle": 65534, + "width": 64, + "ecc_bits": 0, + "size": 4194304, + "form_factor": { + "hex": "000d", + "name": "SODIMM", + "value": 13 + }, + "set": 0, + "memory_type": { + "hex": "001a", + "name": "Other", + "value": 26 + }, + "memory_type_details": [ + "Synchronous" + ], + "speed": 3200 + } + ], + "pointing_device": [ + { + "handle": 5376, + "mouse_type": { + "hex": "0007", + "name": "Touch Pad", + "value": 7 + }, + "interface": { + "hex": "0007", + "name": "Bus Mouse", + "value": 7 + }, + "buttons": 2 + } + ], + "power_controls": [ + { + "handle": 6400, + "month": 0, + "day": 0, + "hour": 0, + "minute": 0, + "second": 0 + } + ], + "processor": [ + { + "handle": 1024, + "socket": "U3E1", + "socket_type": { + "hex": "0001", + "name": "Other", + "value": 1 + }, + "socket_populated": true, + "manufacturer": "Intel(R) Corporation", + "version": "11th Gen Intel(R) Core(TM) i7-1195G7 @ 2.90GHz", + "part": "", + "processor_type": { + "hex": "0003", + "name": "CPU", + "value": 3 + }, + "processor_family": { + "hex": "00c6", + "name": "Other", + "value": 198 + }, + "processor_status": { + "hex": "0001", + "name": "Enabled", + "value": 1 + }, + "clock_ext": 100, + "clock_max": 5000, + "cache_handle_l1": 1793, + "cache_handle_l2": 1794, + "cache_handle_l3": 1795 + } + ], + "slot": [ + { + "handle": 2304, + "designation": "PCI-Express 0", + "slot_type": { + "hex": "00aa", + "name": "Other", + "value": 170 + }, + "bus_width": { + "hex": "000d", + "name": "Other", + "value": 13 + }, + "usage": { + "hex": "0004", + "name": "In Use", + "value": 4 + }, + "length": { + "hex": "0004", + "name": "Long", + "value": 4 + }, + "id": 0, + "features": [ + "3.3 V", + "PME#", + "Hot-Plug" + ] + }, + { + "handle": 2305, + "designation": "PCI-Express 1", + "slot_type": { + "hex": "00a5", + "name": "Other", + "value": 165 + }, + "bus_width": { + "hex": "0008", + "name": "Other", + "value": 8 + }, + "usage": { + "hex": "0003", + "name": "Available", + "value": 3 + }, + "length": { + "hex": "0004", + "name": "Long", + "value": 4 + }, + "id": 1, + "features": [ + "3.3 V", + "PME#", + "Hot-Plug" + ] + }, + { + "handle": 2306, + "designation": "PCI-Express 2", + "slot_type": { + "hex": "00a5", + "name": "Other", + "value": 165 + }, + "bus_width": { + "hex": "0008", + "name": "Other", + "value": 8 + }, + "usage": { + "hex": "0004", + "name": "In Use", + "value": 4 + }, + "length": { + "hex": "0004", + "name": "Long", + "value": 4 + }, + "id": 2, + "features": [ + "3.3 V", + "PME#", + "Hot-Plug" + ] + } + ], + "system": { + "handle": 256, + "manufacturer": "Dell Inc.", + "product": "Inspiron 14 5410 2-in-1", + "version": "", + "wake_up": { + "hex": "0003", + "name": "APM Timer", + "value": 3 + } + } + } +} \ No newline at end of file diff --git a/nix/nixosConfigurations/default.nix b/nix/nixosConfigurations/default.nix index a81612c..e0c5746 100644 --- a/nix/nixosConfigurations/default.nix +++ b/nix/nixosConfigurations/default.nix @@ -29,6 +29,11 @@ in { modules = [ ../../hosts/iso ]; + + specialArgs = { + nixos-facter = + inputs.nixos-facter.packages."x86_64-linux".nixos-facter; + }; } ]; }; diff --git a/nix/nixosModules/default.nix b/nix/nixosModules/default.nix index 3453b24..1a7c266 100644 --- a/nix/nixosModules/default.nix +++ b/nix/nixosModules/default.nix @@ -6,6 +6,7 @@ let inherit (inputs) home-manager + nixos-facter-modules stylix ; @@ -19,6 +20,7 @@ in { }) home-manager.nixosModules.default + nixos-facter-modules.nixosModules.facter ../../users ]; From 72d50c01ab66afaa1208f6b95a53307be73fc0db Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 17:31:45 -0500 Subject: [PATCH 29/36] fix: drop hardware-configuration.nix, minorly change specialArgs --- hosts/iso/configuration.nix | 4 ++-- hosts/laptop/default.nix | 1 - hosts/laptop/hardware-configuration.nix | 25 ------------------------- nix/nixosConfigurations/default.nix | 6 ++++-- 4 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 hosts/laptop/hardware-configuration.nix diff --git a/hosts/iso/configuration.nix b/hosts/iso/configuration.nix index 4c8aac8..baee515 100644 --- a/hosts/iso/configuration.nix +++ b/hosts/iso/configuration.nix @@ -1,6 +1,6 @@ { + inputs, modulesPath, - nixos-facter, ... }: { @@ -14,7 +14,7 @@ services.displayManager.autoLogin.enable = true; environment.systemPackages = [ - nixos-facter + inputs.nixos-facter.packages.nixos-facter ]; console.keyMap = "us"; diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix index 8cdc676..323908b 100644 --- a/hosts/laptop/default.nix +++ b/hosts/laptop/default.nix @@ -1,7 +1,6 @@ { imports = [ ./configuration.nix - #./hardware-configuration.nix ]; config = { diff --git a/hosts/laptop/hardware-configuration.nix b/hosts/laptop/hardware-configuration.nix deleted file mode 100644 index 6c770cc..0000000 --- a/hosts/laptop/hardware-configuration.nix +++ /dev/null @@ -1,25 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - - boot.initrd.availableKernelModules = - [ "xhci_pci" "thunderbolt" "nvme" "usbhid" "usb_storage" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; -} \ No newline at end of file diff --git a/nix/nixosConfigurations/default.nix b/nix/nixosConfigurations/default.nix index e0c5746..4581882 100644 --- a/nix/nixosConfigurations/default.nix +++ b/nix/nixosConfigurations/default.nix @@ -31,8 +31,10 @@ in { ]; specialArgs = { - nixos-facter = - inputs.nixos-facter.packages."x86_64-linux".nixos-facter; + inputs = { + nixos-facter = + lib.flakes.stripSystem "x86_64-linux" inputs.nixos-facter; + }; }; } ]; From f53ccc3869a25ab4200d833d48c3739c554a741e Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 17:57:44 -0500 Subject: [PATCH 30/36] feat: drop nixos-hardware for facter modules Some in-tree modules needed to be written. I will look to upstreaming these at some point. --- flake.lock | 16 ------------- flake.nix | 4 ---- .../facter/report/hardware/disk/module.nix | 15 ++++++++++++ .../report/hardware/graphics_card/module.nix | 23 +++++++++++++++++++ nix/checks/default.nix | 4 +++- nix/nixosConfigurations/default.nix | 10 -------- 6 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 modules/nixos/facter/report/hardware/disk/module.nix create mode 100644 modules/nixos/facter/report/hardware/graphics_card/module.nix diff --git a/flake.lock b/flake.lock index 0f90c6d..f45f4ed 100644 --- a/flake.lock +++ b/flake.lock @@ -292,21 +292,6 @@ "type": "github" } }, - "nixos-hardware": { - "locked": { - "lastModified": 1762267440, - "narHash": "sha256-WHjEJ80oYbWyNu0dxysBs5oMlBc5w7YYzL1/UPj4iGo=", - "owner": "NixOS", - "repo": "nixos-hardware", - "rev": "2e85ae1b7030df39269d29118b1f74944d0c8f15", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixos-hardware", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1762111121, @@ -369,7 +354,6 @@ "home-manager": "home-manager", "nixos-facter": "nixos-facter", "nixos-facter-modules": "nixos-facter-modules", - "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "stylix": "stylix" } diff --git a/flake.nix b/flake.nix index d862332..a51c0ed 100644 --- a/flake.nix +++ b/flake.nix @@ -19,10 +19,6 @@ url = "github:nix-community/nixos-facter-modules"; }; - nixos-hardware = { - url = "github:NixOS/nixos-hardware"; - }; - stylix = { url = "github:nix-community/stylix"; diff --git a/modules/nixos/facter/report/hardware/disk/module.nix b/modules/nixos/facter/report/hardware/disk/module.nix new file mode 100644 index 0000000..fe84f25 --- /dev/null +++ b/modules/nixos/facter/report/hardware/disk/module.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + ... +}: +let + usingFacter = config.facter.reportPath != null; + + hasSSD = + lib.any (disk: disk.driver == "nvme") config.facter.report.hardware.disk; +in { + config = lib.mkIf (usingFacter && hasSSD) { + services.fstrim.enable = lib.mkDefault true; + }; +} \ No newline at end of file diff --git a/modules/nixos/facter/report/hardware/graphics_card/module.nix b/modules/nixos/facter/report/hardware/graphics_card/module.nix new file mode 100644 index 0000000..036deef --- /dev/null +++ b/modules/nixos/facter/report/hardware/graphics_card/module.nix @@ -0,0 +1,23 @@ +{ + config, + lib, + pkgs, + ... +}: +# TODO: assumes tigerlake CPU/GPU, assumes i915 kernel module +let + usingFacter = config.facter.reportPath != null; + + hasIntelGpu = + lib.any (x: x.driver == "i915") config.facter.report.hardware.graphics_card; +in { + config = lib.mkIf (usingFacter && hasIntelGpu) { + boot.kernelParams = [ "i915.enable_guc=3" ]; + + hardware.graphics.extraPackages = with pkgs; [ + intel-media-driver + intel-compute-runtime + vpl-gpu-rt + ]; + }; +} \ No newline at end of file diff --git a/nix/checks/default.nix b/nix/checks/default.nix index 0709d08..79026ea 100644 --- a/nix/checks/default.nix +++ b/nix/checks/default.nix @@ -16,7 +16,9 @@ nixosConfigurations = (pkgs.linkFarm "all-nixosConfigurations" ( self.nixosConfigurations - |> lib.filterAttrs (_: value: value.pkgs.system == pkgs.system) + |> lib.filterAttrs (_: value: + value.pkgs.stdenv.hostPlatform == pkgs.stdenv.hostPlatform + ) |> lib.mapAttrs (_: value: value.config.system.build) |> lib.mapAttrsToList (name: value: { inherit name; diff --git a/nix/nixosConfigurations/default.nix b/nix/nixosConfigurations/default.nix index 4581882..b8d7a57 100644 --- a/nix/nixosConfigurations/default.nix +++ b/nix/nixosConfigurations/default.nix @@ -4,10 +4,6 @@ ... }: let - inherit (inputs) - nixos-hardware - ; - inherit (self) lib; in { flake = { @@ -15,12 +11,6 @@ in { { hostName = "LAPTOP-3DT4F02"; modules = [ - "${nixos-hardware}/common/cpu/intel/tiger-lake/cpu-only.nix" - "${nixos-hardware}/common/gpu/intel/tiger-lake" - "${nixos-hardware}/common/pc/laptop" - "${nixos-hardware}/common/pc/ssd" - "${nixos-hardware}/common/hidpi.nix" - ../../hosts/laptop ]; } From 16704b609a9d3ebc96be13cb5f72a3a74bbee813 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Wed, 5 Nov 2025 18:05:03 -0500 Subject: [PATCH 31/36] fix: check cpu/gpu type for facter module --- .../facter/report/hardware/graphics_card/module.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/nixos/facter/report/hardware/graphics_card/module.nix b/modules/nixos/facter/report/hardware/graphics_card/module.nix index 036deef..f36688f 100644 --- a/modules/nixos/facter/report/hardware/graphics_card/module.nix +++ b/modules/nixos/facter/report/hardware/graphics_card/module.nix @@ -4,14 +4,19 @@ pkgs, ... }: -# TODO: assumes tigerlake CPU/GPU, assumes i915 kernel module let usingFacter = config.facter.reportPath != null; + # TODO: migrate to `xe` module once stable hasIntelGpu = lib.any (x: x.driver == "i915") config.facter.report.hardware.graphics_card; + + isTigerlake = lib.any (x: + x.family == 6 && + x.model == 140 + ) config.facter.report.hardware.cpu; in { - config = lib.mkIf (usingFacter && hasIntelGpu) { + config = lib.mkIf (usingFacter && hasIntelGpu && isTigerlake) { boot.kernelParams = [ "i915.enable_guc=3" ]; hardware.graphics.extraPackages = with pkgs; [ From c313b7701b5c99c5687a846b6ccc98d8200a90ba Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 6 Nov 2025 15:09:19 -0500 Subject: [PATCH 32/36] fix: persist some important directories for fwupd --- modules/nixos/services/fwupd/module.nix | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 modules/nixos/services/fwupd/module.nix diff --git a/modules/nixos/services/fwupd/module.nix b/modules/nixos/services/fwupd/module.nix new file mode 100644 index 0000000..af3bc6e --- /dev/null +++ b/modules/nixos/services/fwupd/module.nix @@ -0,0 +1,21 @@ +{ + config, + lib, + ... +}: +let + cfg = config.services.fwupd; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [ + { + path = "/var/cache/fwupd"; + unique = false; + } + { + path = "/var/lib/fwupd"; + unique = false; + } + ]; + }; +} \ No newline at end of file From e9daf7a97268f29fe9480147fd5db20d1a3a8614 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 6 Nov 2025 15:13:16 -0500 Subject: [PATCH 33/36] fix: automatically enable fwupd if there is a physical host --- hosts/laptop/hardware/default.nix | 1 - modules/nixos/services/fwupd/module.nix | 33 ++++++++++++++++--------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/hosts/laptop/hardware/default.nix b/hosts/laptop/hardware/default.nix index 6b716c3..8db86b9 100644 --- a/hosts/laptop/hardware/default.nix +++ b/hosts/laptop/hardware/default.nix @@ -6,7 +6,6 @@ config = { services = { - fwupd.enable = true; thermald.enable = true; fprintd.enable = true; diff --git a/modules/nixos/services/fwupd/module.nix b/modules/nixos/services/fwupd/module.nix index af3bc6e..a90340c 100644 --- a/modules/nixos/services/fwupd/module.nix +++ b/modules/nixos/services/fwupd/module.nix @@ -5,17 +5,26 @@ }: let cfg = config.services.fwupd; + + usingFacter = config.facter.reportPath != null; + isBaremetal = config.facter.detected.virtualisation.none.enable; in { - config = lib.mkIf cfg.enable { - my.persist.directories = [ - { - path = "/var/cache/fwupd"; - unique = false; - } - { - path = "/var/lib/fwupd"; - unique = false; - } - ]; - }; + config = lib.mkMerge [ + (lib.mkIf (usingFacter && isBaremetal) { + # Firmware updates only make sense if we are running on a real device. + services.fwupd.enable = true; + }) + (lib.mkIf cfg.enable { + my.persist.directories = [ + { + path = "/var/cache/fwupd"; + unique = false; + } + { + path = "/var/lib/fwupd"; + unique = false; + } + ]; + }) + ]; } \ No newline at end of file From ab52f2bdc91fc26ea64da8e3dccaec66019af86a Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 6 Nov 2025 16:20:58 -0500 Subject: [PATCH 34/36] feat: introduce `lib.facter`, mark facter modules for future removal These particular modules only exist due to a lacking upstream module. Normally I would not hesitate to PR such modules myself, but I'm unfamiliar with the wider set of hardware that might be relevant for particular modules (such as detecting SATA SSDs for fstrim, or detecting the various different GPU types from Intel for graphics stuff). As such, I don't feel comfortable providing an upstream PR, since any PR I do make would be incomplete and probably not suitable for merging. I simply don't have the wide variety of hardware to test off of. --- lib/default.nix | 1 + lib/facter/cpu.nix | 18 ++++++++++++++ lib/facter/default.nix | 24 +++++++++++++++++++ lib/facter/disk.nix | 14 +++++++++++ lib/facter/gpu.nix | 14 +++++++++++ lib/facter/machine.nix | 11 +++++++++ .../facter/report/hardware/disk/module.nix | 9 ++++--- .../report/hardware/graphics_card/module.nix | 15 ++++-------- 8 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 lib/facter/cpu.nix create mode 100644 lib/facter/default.nix create mode 100644 lib/facter/disk.nix create mode 100644 lib/facter/gpu.nix create mode 100644 lib/facter/machine.nix diff --git a/lib/default.nix b/lib/default.nix index fe06b3d..6908471 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -10,6 +10,7 @@ let self' = { flakes = callLib ./flakes.nix; + facter = callLib ./facter; options = callLib ./options.nix // prev.options; path = callLib ./path.nix // prev.path; diff --git a/lib/facter/cpu.nix b/lib/facter/cpu.nix new file mode 100644 index 0000000..fe3ec8e --- /dev/null +++ b/lib/facter/cpu.nix @@ -0,0 +1,18 @@ +{ + lib, + + facterGuard, + ... +}: +let + self' = { + isIntel = config: facterGuard config && + (config.facter.report.hardware.cpu + |> lib.any (x: x.vendor_name == "GenuineIntel")); + + isTigerlake = config: self'.isIntel config && + (config.facter.report.hardware.cpu + |> lib.any (x: x.family == 6 && x.model == 140)); + }; +in + self' \ No newline at end of file diff --git a/lib/facter/default.nix b/lib/facter/default.nix new file mode 100644 index 0000000..4ac8fa8 --- /dev/null +++ b/lib/facter/default.nix @@ -0,0 +1,24 @@ +{ + lib, + ... +}: +let + callLib = file: import file { + inherit lib; + + # Used by all lib functions to immediately return false if this is false. + facterGuard = config: + config.facter.reportPath != null; + }; + + # NOTE: many of these definitions are incomplete, due to lacking hardware. + # If at any point the definitions can be completed, consider doing so, and + # subsequently consider upstreaming. + self' = { + cpu = callLib ./cpu.nix; + disk = callLib ./disk.nix; + gpu = callLib ./gpu.nix; + machine = callLib ./machine.nix; + }; +in + self' \ No newline at end of file diff --git a/lib/facter/disk.nix b/lib/facter/disk.nix new file mode 100644 index 0000000..65076ad --- /dev/null +++ b/lib/facter/disk.nix @@ -0,0 +1,14 @@ +{ + lib, + + facterGuard, + ... +}: +let + self' = { + isNVMe = config: facterGuard config && + (config.facter.report.hardware.disk + |> lib.any (x: x.driver == "nvme")); + }; +in + self' \ No newline at end of file diff --git a/lib/facter/gpu.nix b/lib/facter/gpu.nix new file mode 100644 index 0000000..368c579 --- /dev/null +++ b/lib/facter/gpu.nix @@ -0,0 +1,14 @@ +{ + lib, + + facterGuard, + ... +}: +let + self' = { + isIntel = config: facterGuard config && + (config.facter.report.hardware.graphics_card + |> lib.any (x: x.driver == "i915")); + }; +in + self' \ No newline at end of file diff --git a/lib/facter/machine.nix b/lib/facter/machine.nix new file mode 100644 index 0000000..9068401 --- /dev/null +++ b/lib/facter/machine.nix @@ -0,0 +1,11 @@ +{ + facterGuard, + ... +}: +let + self' = { + isPhysical = config: facterGuard config && + (config.facter.report.virtualisation == "none"); + }; +in + self' \ No newline at end of file diff --git a/modules/nixos/facter/report/hardware/disk/module.nix b/modules/nixos/facter/report/hardware/disk/module.nix index fe84f25..a8a4abe 100644 --- a/modules/nixos/facter/report/hardware/disk/module.nix +++ b/modules/nixos/facter/report/hardware/disk/module.nix @@ -4,12 +4,11 @@ ... }: let - usingFacter = config.facter.reportPath != null; - - hasSSD = - lib.any (disk: disk.driver == "nvme") config.facter.report.hardware.disk; + validDisk = lib.facter.disk.isNVMe config; in { - config = lib.mkIf (usingFacter && hasSSD) { + # TODO: way too opinionated. This is unsuitable for here and should be dropped + # if/when there is a proper upstream module for Intel graphics. + config = lib.mkIf validDisk { services.fstrim.enable = lib.mkDefault true; }; } \ No newline at end of file diff --git a/modules/nixos/facter/report/hardware/graphics_card/module.nix b/modules/nixos/facter/report/hardware/graphics_card/module.nix index f36688f..1a39391 100644 --- a/modules/nixos/facter/report/hardware/graphics_card/module.nix +++ b/modules/nixos/facter/report/hardware/graphics_card/module.nix @@ -5,18 +5,11 @@ ... }: let - usingFacter = config.facter.reportPath != null; - - # TODO: migrate to `xe` module once stable - hasIntelGpu = - lib.any (x: x.driver == "i915") config.facter.report.hardware.graphics_card; - - isTigerlake = lib.any (x: - x.family == 6 && - x.model == 140 - ) config.facter.report.hardware.cpu; + validGPU = lib.facter.cpu.isTigerlake config && lib.facter.gpu.isIntel config; in { - config = lib.mkIf (usingFacter && hasIntelGpu && isTigerlake) { + # TODO: way too opinionated. This is unsuitable for here and should be dropped + # if/when there is a proper upstream module for Intel graphics. + config = lib.mkIf validGPU { boot.kernelParams = [ "i915.enable_guc=3" ]; hardware.graphics.extraPackages = with pkgs; [ From 91b5a87620c70a077071428f4be4dcc9cbe65ef3 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 6 Nov 2025 16:57:47 -0500 Subject: [PATCH 35/36] fix: stricter matching for facter graphics module --- lib/facter/cpu.nix | 18 ------------------ lib/facter/default.nix | 1 - lib/facter/gpu.nix | 9 +++++++-- .../report/hardware/graphics_card/module.nix | 2 +- 4 files changed, 8 insertions(+), 22 deletions(-) delete mode 100644 lib/facter/cpu.nix diff --git a/lib/facter/cpu.nix b/lib/facter/cpu.nix deleted file mode 100644 index fe3ec8e..0000000 --- a/lib/facter/cpu.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - - facterGuard, - ... -}: -let - self' = { - isIntel = config: facterGuard config && - (config.facter.report.hardware.cpu - |> lib.any (x: x.vendor_name == "GenuineIntel")); - - isTigerlake = config: self'.isIntel config && - (config.facter.report.hardware.cpu - |> lib.any (x: x.family == 6 && x.model == 140)); - }; -in - self' \ No newline at end of file diff --git a/lib/facter/default.nix b/lib/facter/default.nix index 4ac8fa8..07c770c 100644 --- a/lib/facter/default.nix +++ b/lib/facter/default.nix @@ -15,7 +15,6 @@ let # If at any point the definitions can be completed, consider doing so, and # subsequently consider upstreaming. self' = { - cpu = callLib ./cpu.nix; disk = callLib ./disk.nix; gpu = callLib ./gpu.nix; machine = callLib ./machine.nix; diff --git a/lib/facter/gpu.nix b/lib/facter/gpu.nix index 368c579..db0e21d 100644 --- a/lib/facter/gpu.nix +++ b/lib/facter/gpu.nix @@ -6,9 +6,14 @@ }: let self' = { - isIntel = config: facterGuard config && + isTigerlake = config: facterGuard config && (config.facter.report.hardware.graphics_card - |> lib.any (x: x.driver == "i915")); + |> lib.any (x: + # Intel Corporation + x.vendor.hex == "8086" + # TigerLake-LP GT2 + && x.device.hex == "9a49" + )); }; in self' \ No newline at end of file diff --git a/modules/nixos/facter/report/hardware/graphics_card/module.nix b/modules/nixos/facter/report/hardware/graphics_card/module.nix index 1a39391..e29e778 100644 --- a/modules/nixos/facter/report/hardware/graphics_card/module.nix +++ b/modules/nixos/facter/report/hardware/graphics_card/module.nix @@ -5,7 +5,7 @@ ... }: let - validGPU = lib.facter.cpu.isTigerlake config && lib.facter.gpu.isIntel config; + validGPU = lib.facter.gpu.isTigerlake config; in { # TODO: way too opinionated. This is unsuitable for here and should be dropped # if/when there is a proper upstream module for Intel graphics. From 20d0436ae8d85399e9ae62f2b990a9967822fa5e Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Mon, 10 Nov 2025 17:54:17 -0500 Subject: [PATCH 36/36] fix: update flake.lock Nothing noteworthy to migrate this time around. I suspect most of the big changes have already made it into the release-cycle, and the final few are still churning in staging. Release cut-off is November 30th, only 20 days (3 weeks) away. I would've loved to contribute to the release cycle, but alas, school is a full-time job in and of itself. --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index f45f4ed..df205b6 100644 --- a/flake.lock +++ b/flake.lock @@ -135,11 +135,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1762040540, - "narHash": "sha256-z5PlZ47j50VNF3R+IMS9LmzI5fYRGY/Z5O5tol1c9I4=", + "lastModified": 1762440070, + "narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "0010412d62a25d959151790968765a70c436598b", + "rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8", "type": "github" }, "original": { @@ -209,11 +209,11 @@ ] }, "locked": { - "lastModified": 1762296971, - "narHash": "sha256-Jyv3L5rrUYpecON+9zyFz2VqgTSTsIG35fXuCyuCQv0=", + "lastModified": 1762787259, + "narHash": "sha256-t2U/GLLXHa2+kJkwnFNRVc2fEJ/lUfyZXBE5iKzJdcs=", "owner": "nix-community", "repo": "home-manager", - "rev": "34fe48801d2a5301b814eaa1efb496499d06cebc", + "rev": "37a3d97f2873e0f68711117c34d04b7c7ead8f4e", "type": "github" }, "original": { @@ -264,11 +264,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1762312445, - "narHash": "sha256-WWTlWGkxqkwXz5LLH7ZGjW4K6cCrbXIoctcrN61Xyjw=", + "lastModified": 1762744937, + "narHash": "sha256-37twpZntKS1NOPDSULAyaUPMCyrvw2vhcyYd1bMT40E=", "owner": "nix-community", "repo": "nixos-facter", - "rev": "f1e0f885b14b6878a05993f457fb972cae635091", + "rev": "bfc460a1df6056f97152252bc45c3668b584e068", "type": "github" }, "original": { @@ -294,11 +294,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", + "lastModified": 1762596750, + "narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", + "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e", "type": "github" }, "original": { @@ -513,11 +513,11 @@ ] }, "locked": { - "lastModified": 1762305549, - "narHash": "sha256-iHxl8YwQsCX9QyB0ImEvmr+C3FuZP0BR/9vMmjbaITA=", + "lastModified": 1762410071, + "narHash": "sha256-aF5fvoZeoXNPxT0bejFUBXeUjXfHLSL7g+mjR/p5TEg=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "144d1e80d642c50c71846c0cb674e86c956e9a24", + "rev": "97a30861b13c3731a84e09405414398fbf3e109f", "type": "github" }, "original": {