refactor(flake): Consolidate overlay configurations into shared functions

Extract duplicated overlay and home-manager configuration code into two
reusable factory functions:

- mkBaseOverlay: Creates the base overlay with unstable pkgs, custom
  packages, and bitwarden-desktop compatibility. Accepts optional
  unstableOverlays parameter for darwin-specific customizations.

- mkHomeManagerConfig: Creates home-manager configuration with shared
  settings (useGlobalPkgs, useUserPackages, doom-emacs module). Accepts
  sharedModules parameter for platform-specific modules like plasma-manager.

This reduces code duplication across nixosModules, nixosModulesUnstable,
and darwinModules, making the flake easier to maintain and extend.

Implements bead: nixos-configs-ek5
This commit was merged in pull request #21.
This commit is contained in:
2026-01-10 13:07:37 -08:00
committed by johno
parent c28d6a7896
commit bbcb13881f

View File

@@ -56,94 +56,75 @@
}; };
outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let
nixosModules = [ # Shared overlay function to reduce duplication across module sets
./roles # Parameters:
] ++ [ # unstableOverlays: Additional overlays to apply when importing nixpkgs-unstable
inputs.home-manager.nixosModules.home-manager mkBaseOverlay = { unstableOverlays ? [] }: (final: prev: {
{
nixpkgs.overlays = [
(final: prev: {
unstable = import nixpkgs-unstable { unstable = import nixpkgs-unstable {
system = prev.stdenv.hostPlatform.system; system = prev.stdenv.hostPlatform.system;
config.allowUnfree = true; config.allowUnfree = true;
overlays = unstableOverlays;
}; };
custom = prev.callPackage ./packages {}; custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable # Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden; bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) });
];
# Shared home-manager configuration factory
# Parameters:
# sharedModules: Additional modules to include in home-manager.sharedModules
mkHomeManagerConfig = { sharedModules ? [] }: {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.sharedModules = [ home-manager.sharedModules = sharedModules ++ [
inputs.plasma-manager.homeModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.homeModule inputs.nix-doom-emacs-unstraightened.homeModule
]; ];
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
globalInputs = inputs; globalInputs = inputs;
}; };
};
nixosModules = [
./roles
inputs.home-manager.nixosModules.home-manager
{
nixpkgs.overlays = [ (mkBaseOverlay {}) ];
} }
(mkHomeManagerConfig {
sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ];
})
]; ];
# Modules for unstable-based systems (like nix-deck) # Modules for unstable-based systems (like nix-deck)
nixosModulesUnstable = [ nixosModulesUnstable = [
./roles ./roles
] ++ [
inputs.home-manager-unstable.nixosModules.home-manager inputs.home-manager-unstable.nixosModules.home-manager
inputs.jovian.nixosModules.jovian inputs.jovian.nixosModules.jovian
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [ (mkBaseOverlay {}) ];
(final: prev: { }
unstable = import nixpkgs-unstable { (mkHomeManagerConfig {
system = prev.stdenv.hostPlatform.system; sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ];
config.allowUnfree = true;
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) })
]; ];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.plasma-manager-unstable.homeModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
}
];
darwinModules = [ darwinModules = [
./roles/darwin.nix ./roles/darwin.nix
] ++ [
inputs.home-manager.darwinModules.home-manager inputs.home-manager.darwinModules.home-manager
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (mkBaseOverlay {
unstable = import nixpkgs-unstable {
system = prev.stdenv.hostPlatform.system;
config.allowUnfree = true;
overlays = [
# Override claude-code in unstable to use our custom GCS-based build # Override claude-code in unstable to use our custom GCS-based build
# (needed for corporate networks that block npm registry) # (needed for corporate networks that block npm registry)
unstableOverlays = [
(ufinal: uprev: { (ufinal: uprev: {
claude-code = prev.custom.claude-code or (prev.callPackage ./packages {}).claude-code; claude-code = uprev.callPackage ./packages/claude-code {};
}) })
]; ];
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) })
]; ];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
} }
(mkHomeManagerConfig { sharedModules = []; })
]; ];
in { in {