1
0
Fork 0
nix-configuration/flake.nix

137 lines
4.3 KiB
Nix

# Uses Snowfall: https://snowfall.org/
# For info on Flakes, see: https://nixos-and-flakes.thiscute.world/nixos-with-flakes/nixos-with-flakes-enabled
{
description = "Aires' system Flake";
inputs = {
# Import the desired Nix channel. Defaults to unstable, which uses a fully tested rolling release model.
# You can find a list of channels at https://wiki.nixos.org/wiki/Channel_branches
# To follow a different channel, replace `nixos-unstable` with the channel name, e.g. `nixos-24.05`.
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# Flatpak support
flatpak.url = "github:gmodena/nix-flatpak/v0.5.1";
# Home-manager support
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
# SecureBoot support
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.1";
# Use Lix in place of Nix.
# If you'd rather use regular Nix, remove `lix-module.nixosModules.default` from the `modules` section below.
# To learn more about Lix, see https://lix.systems/
lix = {
url = "git+https://git.lix.systems/lix-project/nixos-module?ref=stable";
inputs.nixpkgs.follows = "nixpkgs";
};
# NixOS hardware quirks
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
# Snowfall lib: https://snowfall.org/guides/lib/quickstart/
# Jake's reference config: https://github.com/jakehamilton/config
snowfall-lib = {
url = "github:snowfallorg/lib";
inputs.nixpkgs.follows = "nixpkgs";
};
# Code formatter
treefmt = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
inputs:
let
lib = inputs.snowfall-lib.mkLib {
inherit inputs;
# Root dir for flake.nix
src = ./.;
# Configure Snowfall
snowfall = {
# Choose a namespace to use for your flake's packages, library, and overlays.
namespace = "Sapana";
# Add flake metadata that can be processed by tools like Snowfall Frost.
meta = {
# A slug to use in documentation when displaying things like file paths.
name = "aires-flake";
# A title to show for your flake, typically the name.
title = "Aires' Flake";
};
};
};
in
lib.mkFlake {
# Allow unfree packages in Nix config
channels-config.allowUnfree = true;
# Define systems
systems = {
# Modules to import for all systems
modules.nixos = with inputs; [
lix.nixosModules.default
lanzaboote.nixosModules.lanzaboote
flatpak.nixosModules.nix-flatpak
home-manager.nixosModules.home-manager
{
_module.args = {
inherit inputs;
};
home-manager = {
/*
When running, Home Manager will use the global package cache.
It will also back up any files that it would otherwise overwrite.
The originals will have the extension shown below.
*/
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "home-manager-backup";
};
}
];
# Individual host configurations
hosts = {
Hevana.modules = with inputs; [
nixos-hardware.nixosModules.common-cpu-amd-pstate
nixos-hardware.nixosModules.common-gpu-amd
];
Khanda.modules = with inputs; [
nixos-hardware.nixosModules.microsoft-surface-pro-9
];
Pihole.modules = with inputs; [
nixos-hardware.nixosModules.raspberry-pi-4
];
Shura.modules = with inputs; [
nixos-hardware.nixosModules.lenovo-legion-16arha7
];
};
};
# Define .nix file templates
templates = {
module.description = "Template for creating a new module.";
systems.description = "Template for defining a new system.";
};
# Use treefmt to format project repo
outputs-builder = channels: {
formatter = (inputs.treefmt.lib.evalModule channels.nixpkgs ./treefmt.nix).config.build.wrapper;
};
};
}