240 lines
6.2 KiB
Nix
240 lines
6.2 KiB
Nix
{
|
|
description = "Toph's Nix-Config";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05";
|
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # Bleeding edge packages from Chaotic-AUR
|
|
|
|
## NixOS ##
|
|
|
|
hardware = {
|
|
url = "github:nixos/nixos-hardware";
|
|
};
|
|
|
|
home-manager = {
|
|
url = "github:nix-community/home-manager";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
## VM tools ##
|
|
|
|
# nixtheplanet.url = "github:matthewcroughan/nixtheplanet";
|
|
nixvirt = {
|
|
url = "https://flakehub.com/f/AshleyYakeley/NixVirt/*.tar.gz";
|
|
inputs.nixpkgs.follows = "nixpkgs-stable";
|
|
};
|
|
|
|
## Theming ##
|
|
|
|
rose-pine-hyprcursor = {
|
|
url = "github:ndom91/rose-pine-hyprcursor";
|
|
};
|
|
|
|
stylix.url = "github:danth/stylix";
|
|
|
|
## Gaming Packages ##
|
|
|
|
nix-gaming = {
|
|
url = "github:fufexan/nix-gaming";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
play = {
|
|
url = "github:tophc7/play.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
## Misc Packages ##
|
|
|
|
# nixcord.url = "github:kaylorben/nixcord";
|
|
# spicetify-nix = {
|
|
# url = "github:Gerg-L/spicetify-nix";
|
|
# inputs.nixpkgs.follows = "nixpkgs";
|
|
# };
|
|
|
|
solaar = {
|
|
url = "github:Svenum/Solaar-Flake";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
snapraid-aio = {
|
|
url = "github:tophc7/snapraid-aio.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
vscode-server = {
|
|
url = "github:nix-community/nixos-vscode-server";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
yay = {
|
|
url = "github:tophc7/yay.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
|
|
zen-browser = {
|
|
url = "github:youwen5/zen-browser-flake";
|
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{ self, nixpkgs, ... }@inputs:
|
|
let
|
|
inherit (self) outputs;
|
|
inherit (nixpkgs) lib;
|
|
|
|
ARM = "aarch64-linux";
|
|
X86 = "x86_64-linux";
|
|
|
|
forAllSystems = nixpkgs.lib.genAttrs [
|
|
ARM
|
|
X86
|
|
];
|
|
|
|
## Host Config ##
|
|
|
|
# read host-dirs under e.g. hosts/x86 or hosts/arm
|
|
readHosts = arch: lib.attrNames (builtins.readDir ./hosts/${arch});
|
|
|
|
# build one host, choosing folder + system by isARM flag
|
|
mkHost =
|
|
host: isARM:
|
|
let
|
|
folder = if isARM then "arm" else "x86";
|
|
system = if isARM then ARM else X86;
|
|
in
|
|
{
|
|
"${host}" = lib.nixosSystem {
|
|
specialArgs = {
|
|
inherit
|
|
inputs
|
|
outputs
|
|
isARM
|
|
system
|
|
;
|
|
lib = nixpkgs.lib.extend (
|
|
# INFO: Extend lib with lib.custom; This approach allows lib.custom to propagate into hm
|
|
self: super: {
|
|
custom = import ./lib { inherit (nixpkgs) lib; };
|
|
}
|
|
);
|
|
};
|
|
modules = [
|
|
{ nixpkgs.overlays = [ self.overlays.default ]; }
|
|
|
|
# Import secrets
|
|
./modules/global/secret-spec.nix
|
|
./secrets.nix
|
|
|
|
# Host-specific configuration
|
|
./hosts/${folder}/${host}
|
|
];
|
|
};
|
|
};
|
|
|
|
# Invoke mkHost for each host config that is declared for either X86 or ARM
|
|
mkHostConfigs =
|
|
hosts: isARM: lib.foldl (acc: set: acc // set) { } (lib.map (host: mkHost host isARM) hosts);
|
|
in
|
|
{
|
|
overlays = import ./overlays { inherit inputs; };
|
|
|
|
# now point at x86 *and* arm directories explicitly
|
|
nixosConfigurations =
|
|
(mkHostConfigs (readHosts "x86") false) // (mkHostConfigs (readHosts "arm") true);
|
|
|
|
packages = forAllSystems (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [ self.overlays.default ];
|
|
};
|
|
|
|
# Get all package directories from pkgs/
|
|
packageDirs = builtins.attrNames (builtins.readDir ./pkgs);
|
|
|
|
# Filter to only include names that resulted in valid packages
|
|
validPackages = builtins.filter (name: builtins.hasAttr name pkgs) packageDirs;
|
|
|
|
# Create a set with all the packages
|
|
customPackages = builtins.listToAttrs (
|
|
builtins.map (name: {
|
|
inherit name;
|
|
value = pkgs.${name};
|
|
}) validPackages
|
|
);
|
|
in
|
|
customPackages
|
|
);
|
|
|
|
## SHELL ##
|
|
|
|
devShells = forAllSystems (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [ self.overlays.default ];
|
|
};
|
|
in
|
|
{
|
|
default = pkgs.mkShell {
|
|
nativeBuildInputs =
|
|
with pkgs;
|
|
[
|
|
# Basic nix tools
|
|
nix
|
|
nixos-rebuild
|
|
home-manager
|
|
nh
|
|
# Git and git-crypt
|
|
git
|
|
git-crypt
|
|
gnupg
|
|
gpg-tui
|
|
# Shells
|
|
fish
|
|
bash
|
|
# Config tools
|
|
dconf2nix
|
|
# Network tools
|
|
curl
|
|
wget
|
|
# System tools
|
|
coreutils
|
|
findutils
|
|
gzip
|
|
zstd
|
|
# Text editors
|
|
micro
|
|
# microsoft-edit
|
|
# Diagnostics
|
|
inxi
|
|
pciutils
|
|
usbutils
|
|
lshw
|
|
]
|
|
++ [
|
|
inputs.yay.packages.${system}.default # My yay.nix tool
|
|
];
|
|
|
|
NIX_CONFIG = "experimental-features = nix-command flakes";
|
|
|
|
shellHook = ''
|
|
clear
|
|
echo "Development shell initialized"
|
|
echo -e "Run '\033[1;34myay rebuild\033[0m' to rebuild your system"
|
|
|
|
# Set FLAKE to the current working directory
|
|
export FLAKE="$PWD"
|
|
echo -e "FLAKE environment variable is set to: \033[1;34m$FLAKE\033[0m"
|
|
'';
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|