forked from fabian/nix_config
Add 'trivionomicon/' from commit '0ae8676d50
'
git-subtree-dir: trivionomicon git-subtree-mainline:00d3799f90
git-subtree-split:0ae8676d50
This commit is contained in:
commit
ad9c16de0c
50 changed files with 2091 additions and 0 deletions
218
trivionomicon/flake.nix
Normal file
218
trivionomicon/flake.nix
Normal file
|
@ -0,0 +1,218 @@
|
|||
{
|
||||
inputs = {
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
};
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
}: let
|
||||
mapOverlayOverride = namespace: overlay: final: prev: let
|
||||
overlayPkgs = overlay final prev;
|
||||
in
|
||||
{
|
||||
"${namespace}" = builtins.removeAttrs overlayPkgs ["override"];
|
||||
}
|
||||
// (overlayPkgs.override or {});
|
||||
|
||||
doctrineNoPkgs = self.lib.mkDoctrine {
|
||||
lib = nixpkgs.lib;
|
||||
pkgs = null;
|
||||
};
|
||||
in
|
||||
flake-utils.lib.eachDefaultSystem (system: let
|
||||
pkgs = import nixpkgs {inherit system;};
|
||||
in {
|
||||
formatter = pkgs.alejandra;
|
||||
|
||||
packages =
|
||||
(import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [(mapOverlayOverride doctrineNoPkgs.prefix (import ./pkgs))];
|
||||
}).${
|
||||
doctrineNoPkgs.prefix
|
||||
};
|
||||
})
|
||||
// {
|
||||
templates = let
|
||||
system-flake = {
|
||||
path = ./templates/system-flake;
|
||||
description = "Opinionated flake for a NixOS system with Home Manager";
|
||||
};
|
||||
in {
|
||||
inherit system-flake;
|
||||
|
||||
default = system-flake;
|
||||
};
|
||||
|
||||
overlays = let
|
||||
overlay = mapOverlayOverride doctrineNoPkgs.prefix (import ./pkgs);
|
||||
in {
|
||||
default = overlay;
|
||||
${doctrineNoPkgs.prefix} = overlay;
|
||||
};
|
||||
|
||||
homeManagerModules.default = ./modules;
|
||||
nixosModules.default = ./modules;
|
||||
|
||||
lib = {
|
||||
mkDoctrine = import ./doctrine;
|
||||
|
||||
mkSystemFlake = {
|
||||
flakes,
|
||||
system,
|
||||
doctrinePrefix ? null,
|
||||
formatter ? "alejandra",
|
||||
paths ? {},
|
||||
}: let
|
||||
mkDoctrine = args:
|
||||
self.lib.mkDoctrine
|
||||
(args
|
||||
// optionalAttrs (doctrinePrefix != null) {
|
||||
prefix = doctrinePrefix;
|
||||
});
|
||||
|
||||
doctrineNoPkgs = mkDoctrine {
|
||||
lib = nixpkgs.lib;
|
||||
pkgs = null;
|
||||
};
|
||||
|
||||
optionalFlake = name:
|
||||
if flakes ? "${name}"
|
||||
then flakes.${name}
|
||||
else null;
|
||||
|
||||
requireFlake = name:
|
||||
if flakes ? "${name}"
|
||||
then flakes.${name}
|
||||
else throw "Required flake input '${name}' is missing";
|
||||
|
||||
nur = optionalFlake "nur";
|
||||
nixpkgs = requireFlake "nixpkgs";
|
||||
unstable = optionalFlake "unstable";
|
||||
|
||||
home-manager =
|
||||
if hmSourcePath != null
|
||||
then requireFlake "home-manager"
|
||||
else null;
|
||||
|
||||
pathFromSelf = path: builtins.toPath "${flakes.self}" + "/${path}";
|
||||
|
||||
localOverlayPath = pathFromSelf paths.localOverlay;
|
||||
nixpkgsConfigPath = pathFromSelf paths.nixpkgsConfig;
|
||||
nixosSourcePath = pathFromSelf paths.nixosSource;
|
||||
nixosPlatformsPath = pathFromSelf paths.nixosPlatforms;
|
||||
hmSourcePath = pathFromSelf paths.hmSource;
|
||||
hmPlatformsPath = pathFromSelf paths.hmPlatforms;
|
||||
|
||||
pkgs = importPkgs nixpkgs;
|
||||
|
||||
importPkgs = flake:
|
||||
import flake ({
|
||||
inherit system;
|
||||
|
||||
overlays = let
|
||||
conditions = [
|
||||
{
|
||||
overlay = nur.overlays.default;
|
||||
condition = nur != null;
|
||||
}
|
||||
# NB: Preserve the relative order
|
||||
{
|
||||
overlay = self.overlays.default;
|
||||
condition = true;
|
||||
}
|
||||
{
|
||||
overlay = flakes.self.overlays.default;
|
||||
condition = true;
|
||||
}
|
||||
];
|
||||
in
|
||||
builtins.map (cond: cond.overlay) (builtins.filter (cond: cond.condition) conditions);
|
||||
}
|
||||
// optionalAttrs (paths ? nixpkgsConfig) {
|
||||
config = import nixpkgsConfigPath {inherit (nixpkgs) lib;};
|
||||
});
|
||||
|
||||
inherit (pkgs) lib;
|
||||
inherit (nixpkgs.lib) optionalAttrs; # Prevents infinite recursion
|
||||
inherit (doctrineNoPkgs) prefix;
|
||||
inherit (doctrineNoPkgs.lib) importAll;
|
||||
in
|
||||
{
|
||||
formatter.${system} =
|
||||
if formatter == "alejandra"
|
||||
then pkgs.alejandra
|
||||
else if formatter == "nixpkgs-fmt"
|
||||
then pkgs.nixpkgs-fmt
|
||||
else throw "Unknown formatter: '${formatter}'";
|
||||
|
||||
packages.${system} = pkgs.${prefix};
|
||||
|
||||
overlays.default = final: prev: let
|
||||
overlay = final: prev:
|
||||
if paths ? localOverlay
|
||||
then import localOverlayPath {inherit final prev flakes;}
|
||||
else {};
|
||||
in
|
||||
mapOverlayOverride prefix overlay final prev
|
||||
// optionalAttrs (unstable != null) {
|
||||
unstable = importPkgs unstable;
|
||||
};
|
||||
}
|
||||
// optionalAttrs (paths ? nixosSource) {
|
||||
nixosConfigurations = let
|
||||
nixosSystem = {modules}:
|
||||
lib.makeOverridable nixpkgs.lib.nixosSystem {
|
||||
inherit modules pkgs system;
|
||||
|
||||
specialArgs = {
|
||||
inherit flakes;
|
||||
|
||||
doctrine = mkDoctrine {
|
||||
inherit pkgs;
|
||||
namespace = "sys";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hostConfig = platform:
|
||||
nixosSystem {
|
||||
modules = [
|
||||
self.nixosModules.default
|
||||
nixosSourcePath
|
||||
platform
|
||||
];
|
||||
};
|
||||
in
|
||||
lib.mapAttrs (_: hostConfig) (importAll {root = nixosPlatformsPath;});
|
||||
}
|
||||
// optionalAttrs (paths ? hmSource) {
|
||||
homeConfigurations = let
|
||||
home = name: platform:
|
||||
home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
|
||||
extraSpecialArgs = {
|
||||
inherit flakes;
|
||||
|
||||
doctrine = mkDoctrine {
|
||||
inherit pkgs;
|
||||
namespace = "hm";
|
||||
};
|
||||
};
|
||||
|
||||
modules = [
|
||||
self.homeManagerModules.default
|
||||
hmSourcePath
|
||||
platform
|
||||
];
|
||||
};
|
||||
in
|
||||
lib.mapAttrs home (importAll {root = hmPlatformsPath;});
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue