From f651b15b4ee8f8360c756002fc88b69031916e98 Mon Sep 17 00:00:00 2001 From: John Ogle Date: Sat, 10 Jan 2026 13:07:37 -0800 Subject: [PATCH] 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 --- flake.nix | 113 +++++++++++++++++++++++------------------------------- 1 file changed, 47 insertions(+), 66 deletions(-) diff --git a/flake.nix b/flake.nix index 93a194e..1391f91 100644 --- a/flake.nix +++ b/flake.nix @@ -56,94 +56,75 @@ }; outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let + # Shared overlay function to reduce duplication across module sets + # Parameters: + # unstableOverlays: Additional overlays to apply when importing nixpkgs-unstable + mkBaseOverlay = { unstableOverlays ? [] }: (final: prev: { + unstable = import nixpkgs-unstable { + system = prev.stdenv.hostPlatform.system; + config.allowUnfree = true; + overlays = unstableOverlays; + }; + custom = prev.callPackage ./packages {}; + # Compatibility: bitwarden renamed to bitwarden-desktop in unstable + 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.useUserPackages = true; + home-manager.sharedModules = sharedModules ++ [ + inputs.nix-doom-emacs-unstraightened.homeModule + ]; + home-manager.extraSpecialArgs = { + globalInputs = inputs; + }; + }; + nixosModules = [ ./roles - ] ++ [ inputs.home-manager.nixosModules.home-manager { - nixpkgs.overlays = [ - (final: prev: { - unstable = import nixpkgs-unstable { - system = prev.stdenv.hostPlatform.system; - 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.homeModules.plasma-manager - inputs.nix-doom-emacs-unstraightened.homeModule - ]; - home-manager.extraSpecialArgs = { - globalInputs = inputs; - }; + nixpkgs.overlays = [ (mkBaseOverlay {}) ]; } + (mkHomeManagerConfig { + sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ]; + }) ]; + # Modules for unstable-based systems (like nix-deck) nixosModulesUnstable = [ ./roles - ] ++ [ inputs.home-manager-unstable.nixosModules.home-manager inputs.jovian.nixosModules.jovian { - nixpkgs.overlays = [ - (final: prev: { - unstable = import nixpkgs-unstable { - system = prev.stdenv.hostPlatform.system; - 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; - }; + nixpkgs.overlays = [ (mkBaseOverlay {}) ]; } + (mkHomeManagerConfig { + sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ]; + }) ]; + darwinModules = [ ./roles/darwin.nix - ] ++ [ inputs.home-manager.darwinModules.home-manager { nixpkgs.overlays = [ - (final: prev: { - 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 - # (needed for corporate networks that block npm registry) - (ufinal: uprev: { - claude-code = prev.custom.claude-code or (prev.callPackage ./packages {}).claude-code; - }) - ]; - }; - custom = prev.callPackage ./packages {}; - # Compatibility: bitwarden renamed to bitwarden-desktop in unstable - bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden; + (mkBaseOverlay { + # Override claude-code in unstable to use our custom GCS-based build + # (needed for corporate networks that block npm registry) + unstableOverlays = [ + (ufinal: uprev: { + claude-code = uprev.callPackage ./packages/claude-code {}; + }) + ]; }) ]; - 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 {