140 lines
3.8 KiB
Nix
Executable File
140 lines
3.8 KiB
Nix
Executable File
{
|
|
description = "SoraFlake";
|
|
inputs = {
|
|
# Trick renovate into working: "github:NixOS/nixpkgs/nixpkgs-unstable"
|
|
nixUnstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
|
|
hardware.url = "github:nixos/nixos-hardware";
|
|
nur = {
|
|
url = "github:nix-community/nur";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
home-manager = {
|
|
url = "github:nix-community/home-manager/release-26.05";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
darwin = {
|
|
url = "github:lnl7/nix-darwin/master";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
sops-nix = {
|
|
url = "github:Mic92/sops-nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
nix-colors.url = "github:misterio77/nix-colors";
|
|
nixos-wsl = {
|
|
url = "github:nix-community/nixos-wsl";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
vscode-server = {
|
|
url = "github:nix-community/nixos-vscode-server";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
inputs:
|
|
let
|
|
lib = inputs.nixpkgs.lib;
|
|
supportedSystems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
"x86_64-darwin"
|
|
"aarch64-darwin"
|
|
];
|
|
linuxSystems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
forEachSystem = lib.genAttrs;
|
|
overlays = import ./overlays { inherit inputs; };
|
|
mkPkgs =
|
|
system:
|
|
import inputs.nixpkgs {
|
|
inherit system;
|
|
overlays = overlays ++ [
|
|
(final: prev: {
|
|
custom = import ./packages { pkgs = final; };
|
|
})
|
|
];
|
|
config.allowUnfree = true;
|
|
};
|
|
gen = import ./generator.nix { inherit inputs mkPkgs supportedSystems; };
|
|
systemsDir = ./systems;
|
|
isIgnoredSystemDir = name: lib.hasPrefix "_" name || lib.hasPrefix "." name;
|
|
systemNames = lib.attrNames (
|
|
lib.filterAttrs (
|
|
name: type:
|
|
type == "directory"
|
|
&& !isIgnoredSystemDir name
|
|
&& builtins.pathExists (systemsDir + "/${name}/cfg.nix")
|
|
) (builtins.readDir systemsDir)
|
|
);
|
|
hostsByType =
|
|
systemType:
|
|
lib.filter (host: (import (systemsDir + "/${host}/cfg.nix")).syscfg.type == systemType) systemNames;
|
|
generateHosts =
|
|
systemType: lib.genAttrs (hostsByType systemType) (host: gen.generate { inherit host; });
|
|
flattenPackages =
|
|
prefix: attrs:
|
|
lib.concatMapAttrs (
|
|
name: value:
|
|
let
|
|
packageName = lib.concatStringsSep "-" (prefix ++ [ name ]);
|
|
defaultPackageName = lib.concatStringsSep "-" prefix;
|
|
in
|
|
if lib.isDerivation value then
|
|
{
|
|
"${if name == "default" && prefix != [ ] then defaultPackageName else packageName}" = value;
|
|
}
|
|
else if lib.isAttrs value then
|
|
flattenPackages (if name == "default" then prefix else prefix ++ [ name ]) value
|
|
else
|
|
{ }
|
|
) attrs;
|
|
mkPackages =
|
|
system:
|
|
let
|
|
pkgs = mkPkgs system;
|
|
in
|
|
lib.optionalAttrs pkgs.stdenv.isLinux (flattenPackages [ ] pkgs.custom);
|
|
in
|
|
{
|
|
packages = forEachSystem linuxSystems mkPackages;
|
|
devShells = import ./shells {
|
|
inherit inputs mkPkgs;
|
|
supportedSystems = linuxSystems;
|
|
};
|
|
|
|
nixosConfigurations = generateHosts "nixos";
|
|
darwinConfigurations = generateHosts "macos";
|
|
homeConfigurations = generateHosts "home";
|
|
};
|
|
|
|
# ===== Unsupported/NotImplemented ======
|
|
# menel - PI/ARM64
|
|
# ilduma - PI/ARM64
|
|
# daimoth - PI/ARM64
|
|
# gimle - ....
|
|
|
|
# ===== Unused ======
|
|
#
|
|
# naraka - ?
|
|
# diyu - ?
|
|
# tirnanog - ?
|
|
# valhalla - ?
|
|
# arcadia - ?
|
|
# elysium - ?
|
|
# empyrean - ?
|
|
# duat - ?
|
|
# sheol - ?
|
|
# adlivun - ?
|
|
# araf - ?
|
|
# aman/araman - ?
|
|
|
|
}
|