nixconfigs/flake.nix

97 lines
3.3 KiB
Nix

{
description = "NixOS system flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
home-manager = {
url = "github:nix-community/home-manager/release-23.11";
inputs.nixpkgs.follows = "nixpkgs";
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.3.0";
# deliberately do _not_ follow the nixpkgs input here, because paranoia and test coverage
};
utils.url = "github:numtide/flake-utils";
nur.url = "github:nix-community/NUR";
# TODO: possible make this a flake as well
mysecrets = {
flake = false;
url = "git+ssh://gitea@git.orlives.de:2342/schmittlauch/home-manager_secrets.git";
};
};
outputs =
{ self, nixpkgs, nur, lanzaboote, utils, home-manager, ... }@inputs:
let
# FIXME: allow different systems
systems = utils.lib.system;
# necessary to make the top-level inputs available to system configuration
# inspired by https://jade.fyi/blog/flakes-arent-real/
inputInjection = {pkgs, lib, ...}: {
options.inputInjection = lib.mkOption {
type = with lib.types; attrsOf unspecified;
default = {};
};
config.inputInjection = {
flake-inputs = inputs;
};
};
defaultModules = system: [
inputInjection
];
mkSystem = system: extraModules:
nixpkgs.lib.nixosSystem rec {
modules = (defaultModules system) ++ extraModules;
inherit system;
specialArgs = {inherit system;};
};
mkHomeManager = confName: user: system: # unfortunately, home-manager configs are still system-specific
# FIXME: this is thus still linux-x86_64 specific
home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
modules = [
{
imports = [
nur.hmModules.nur
# TODO: $name can be utilised to conditionally load other config files
./home/home.nix
];
# extends the home config
home.username = user;
home.homeDirectory = "/home/${user}";
}
];
# Optionally use extraSpecialArgs
# to pass through arguments to home.nix
extraSpecialArgs = {
inherit inputs system;
};
};
in
{
overlays.default = import ./packages;
nixosConfigurations = {
thinknix = mkSystem systems.x86_64-linux [ ./hosts/thinknix inputs.nixos-hardware.nixosModules.lenovo-thinkpad-t440s lanzaboote.nixosModules.lanzaboote ];
framenix = mkSystem systems.x86_64-linux [ ./hosts/framenix inputs.nixos-hardware.nixosModules.framework-13-7040-amd lanzaboote.nixosModules.lanzaboote ];
};
homeConfigurations.spiollinux = mkHomeManager "spiollinux" "spiollinux" systems.x86_64-linux;
} // utils.lib.eachDefaultSystem(system:
let
nixpkgs = import inputs.nixpkgs {
inherit system;
overlays = nixpkgs.lib.attrValues self.overlays;
};
pkgs = inputs.nixpkgs.legacyPackages.${system};
in {
devShells.default = pkgs.mkShell {
buildInputs = [];
};
# expose nixpkgs with overlay; TODO: figure out role of config
#legacyPackages = nixpkgs;
});
}