diff --git a/README.md b/README.md index 99a862f5..a9c463ac 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,8 @@ Some key advantages include: * Defined [packages](./pkgs/default.nix) and [modules](./modules/list.nix), are automatically wired and available from anywhere. They are _also_ sharable via their respective flake outputs. -* Easily [override](./pkgs/override.nix) packages from different nixpkgs versions. +* Easily [override](./unstable/default.nix) packages from different nixpkgs + versions. * Keep [user](./users) configuration isolated and easily reusable by taking advantage of [user profiles](./users/profiles) and [home-manager][home-manager]. * [Overlay](./overlays) files are automatically available and sharable. diff --git a/extern/default.nix b/extern/default.nix new file mode 100644 index 00000000..b3fcb5e7 --- /dev/null +++ b/extern/default.nix @@ -0,0 +1,12 @@ +{ inputs }: with inputs; +{ + modules = [ + home.nixosModules.home-manager + ci-agent.nixosModules.agent-profile + ]; + + overlays = [ + nur.overlay + devshell.overlay + ]; +} diff --git a/flake.nix b/flake.nix index cbd4e9b2..7775366c 100644 --- a/flake.nix +++ b/flake.nix @@ -26,37 +26,28 @@ , nixos-hardware }: let - inherit (builtins) attrValues; inherit (flake-utils.lib) eachDefaultSystem flattenTreeSystem; inherit (nixos.lib) recursiveUpdate; - inherit (self.lib) overlays nixosModules genPackages pkgImport + inherit (self.lib) overlays nixosModules genPackages genPkgs genHomeActivationPackages; - externOverlays = [ nur.overlay devshell.overlay ]; - externModules = [ - home.nixosModules.home-manager - ci-agent.nixosModules.agent-profile - ]; + extern = import ./extern { inherit inputs; }; + + pkgs' = genPkgs { inherit self; }; outputs = let system = "x86_64-linux"; - pkgs = self.legacyPackages.${system}; + pkgs = pkgs'.${system}; in { inherit nixosModules overlays; nixosConfigurations = - import ./hosts - (recursiveUpdate inputs { - inherit pkgs externModules system; - inherit (pkgs) lib; - }); - - homeConfigurations = - builtins.mapAttrs - (_: config: config.config.home-manager.users) - self.nixosConfigurations; + import ./hosts (recursiveUpdate inputs { + inherit pkgs system extern; + inherit (pkgs) lib; + }); overlay = import ./pkgs; @@ -68,50 +59,23 @@ defaultTemplate = self.templates.flk; }; - in - recursiveUpdate - (eachDefaultSystem - (system: - let - unstable = pkgImport master [ ] system; - pkgs = - let - override = import ./pkgs/override.nix; - overlays = [ - (override unstable) - self.overlay - (final: prev: { - lib = (prev.lib or { }) // { - inherit (nixos.lib) nixosSystem; - flk = self.lib; - utils = flake-utils.lib; - }; - }) - ] - ++ (attrValues self.overlays) - ++ externOverlays; - in - pkgImport nixos overlays system; - - packages = - flattenTreeSystem system - (genPackages { - inherit self pkgs; - }); - - in + systemOutputs = eachDefaultSystem (system: + let pkgs = pkgs'.${system}; in { - inherit packages; - hmActivationPackages = genHomeActivationPackages - self.homeConfigurations; + packages = flattenTreeSystem system + (genPackages { + inherit self pkgs; + }); devShell = import ./shell { inherit pkgs nixos; }; - legacyPackages = pkgs; - }) - ) - outputs; + legacyPackages.hmActivationPackages = + genHomeActivationPackages { inherit self; }; + } + ); + in + recursiveUpdate outputs systemOutputs; } diff --git a/hosts/default.nix b/hosts/default.nix index aec06e54..77535f66 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -5,7 +5,7 @@ , pkgs , self , system -, externModules +, extern , ... }: let @@ -15,9 +15,6 @@ let profiles = defaultImports (toString ../profiles); suites = import ../profiles/suites.nix { inherit lib profiles; }; - unstableModules = [ ]; - addToDisabledModules = [ ]; - config = hostName: nixosSystemExtended { inherit system; @@ -33,12 +30,17 @@ let let core = profiles.core.default; - modOverrides = { config, unstableModulesPath, ... }: { - disabledModules = unstableModules ++ addToDisabledModules; - imports = map - (path: "${unstableModulesPath}/${path}") - unstableModules; - }; + modOverrides = { config, unstableModulesPath, ... }: + let + unstable = import ../unstable; + inherit (unstable) modules disabledModules; + in + { + disabledModules = modules ++ disabledModules; + imports = map + (path: "${unstableModulesPath}/${path}") + modules; + }; global = { home-manager.useGlobalPkgs = true; @@ -80,7 +82,7 @@ let global local modOverrides - ] ++ externModules; + ] ++ extern.modules; }; diff --git a/lib/default.nix b/lib/default.nix index 584933ce..a90b1445 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -60,6 +60,34 @@ in overlays = pathsToImportedAttrs overlayPaths; + genPkgs = { self }: + let inherit (self) inputs; + in + (inputs.flake-utils.lib.eachDefaultSystem + (system: + let + extern = import ../extern { inherit inputs; }; + unstable = pkgImport inputs.master [ ] system; + overrides = (import ../unstable).packages; + + overlays = [ + (overrides unstable) + self.overlay + (final: prev: { + lib = (prev.lib or { }) // { + inherit (nixos.lib) nixosSystem; + flk = self.lib; + utils = inputs.flake-utils.lib; + }; + }) + ] + ++ (attrValues self.overlays) + ++ extern.overlays; + in + { pkgs = pkgImport nixos overlays system; } + ) + ).pkgs; + profileMap = map (profile: profile.default); recImport = { dir, _import ? base: import "${dir}/${base}.nix" }: @@ -135,7 +163,12 @@ in in recursiveUpdate cachixAttrs modulesAttrs; - genHomeActivationPackages = hmConfigs: + genHomeActivationPackages = { self }: + let hmConfigs = + builtins.mapAttrs + (_: config: config.config.home-manager.users) + self.nixosConfigurations; + in mapAttrs (_: x: mapAttrs (_: cfg: cfg.home.activationPackage) diff --git a/pkgs/override.nix b/pkgs/override.nix deleted file mode 100644 index 6dbced6c..00000000 --- a/pkgs/override.nix +++ /dev/null @@ -1,20 +0,0 @@ -# Packages inherited are imported in hosts/default.nix, and are pulled from -# nixpkgs master instead of the default nixos release. This doesn't actually -# install them, just creates an overlay to pull them from master if they are -# installed by the user elsewhere in the configuration. -pkgs: final: prev: -{ - inherit (pkgs) - manix; - - haskellPackages = prev.haskellPackages.override { - overrides = hfinal: hprev: - let version = prev.lib.replaceChars [ "." ] [ "" ] prev.ghc.version; - in - { - # same for haskell packages, matching ghc versions - inherit (pkgs.haskell.packages."ghc${version}") - haskell-language-server; - }; - }; -} diff --git a/shell/default.nix b/shell/default.nix index 9f851245..52656e53 100644 --- a/shell/default.nix +++ b/shell/default.nix @@ -11,9 +11,6 @@ let }).config.system.build; flk = pkgs.writeShellScriptBin "flk" '' - system="$(nix eval --impure --expr builtins.currentSystem)" - system="${"\${system//\\\"/"}}" - if [[ -z "$1" ]]; then echo "Usage: $(basename $0) [ up | iso {host} | install {host} | {host} [switch|boot|test] | home {host} {user} [switch] ]" elif [[ "$1" == "up" ]]; then @@ -31,7 +28,7 @@ let elif [[ "$1" == "install" ]]; then sudo nixos-install --flake "$DEVSHELL_ROOT#$2" "${"\${@:3}"}" elif [[ "$1" == "home" ]]; then - nix build "./#hmActivationPackages.$system.$2.$3" "${"\${@:4}"}" + nix build "./#hmActivationPackages.$2.$3" "${"\${@:4}"}" if [[ "$4" == "switch" ]]; then ./result/activate && unlink result fi @@ -50,8 +47,6 @@ pkgs.devshell.mkShell { nixos-install nixos-generate-config nixos-enter - nixos-option - pre-commit ]; env = { inherit name; }; diff --git a/unstable/default.nix b/unstable/default.nix new file mode 100644 index 00000000..ae7858d0 --- /dev/null +++ b/unstable/default.nix @@ -0,0 +1,31 @@ +{ + # modules to pull from master, stable version is automatically disabled + modules = [ ]; + + # if a modules name changed in master, add the old name here + disabledModules = [ ]; + + # packages pulled from master + packages = pkgs: final: prev: { + inherit (pkgs) + dhall + discord + element-desktop + manix + nixpkgs-fmt + qutebrowser + signal-desktop + starship; + + haskellPackages = prev.haskellPackages.override { + overrides = hfinal: hprev: + let version = prev.lib.replaceChars [ "." ] [ "" ] prev.ghc.version; + in + { + # same for haskell packages, matching ghc versions + inherit (pkgs.haskell.packages."ghc${version}") + haskell-language-server; + }; + }; + }; +}