# Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
#
# SPDX-License-Identifier: GPL-3.0-or-later
{
description = "A NixOS System Configuration";
inputs = {
# base
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.11";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# open nixpkgs prs
# FIXME: Close these PRs <2024-09-07>
nixpkgs-tfc.url = "github:soispha/nixpkgs/add-termfilechooser";
nixpkgs-onlykey.url = "github:soispha/nixpkgs/fix-onlykey-agent";
library = {
url = "git+https://git.foss-syndicate.org/vhack.eu/nix-library?ref=prime";
};
# inputs for following
nix-darwin = {
url = "github:lnl7/nix-darwin";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
systems = {
url = "github:nix-systems/x86_64-linux"; # only evaluate for this system
};
nuschtosSearch = {
url = "github:NuschtOS/search";
inputs = {
flake-utils.follows = "flake-utils";
nixpkgs.follows = "nixpkgs";
};
};
git-hooks = {
url = "github:cachix/git-hooks.nix";
inputs = {
flake-compat.follows = "flake-compat";
gitignore.follows = "gitignore";
nixpkgs.follows = "nixpkgs";
};
};
poetry2nix = {
url = "github:nix-community/poetry2nix";
inputs = {
systems.follows = "systems";
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
treefmt-nix.follows = "treefmt-nix";
};
};
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs = {
nixpkgs-lib.follows = "nixpkgs-lib";
};
};
nixpkgs-lib = {
url = "github:nix-community/nixpkgs.lib";
};
haumea = {
url = "github:nix-community/haumea";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
gitignore = {
url = "github:hercules-ci/gitignore.nix";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
beautysh = {
url = "github:lovesegfault/beautysh";
inputs = {
nixpkgs.follows = "nixpkgs";
poetry2nix.follows = "poetry2nix";
utils.follows = "flake-utils";
};
};
devshell = {
url = "github:numtide/devshell";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
pre-commit-hooks = {
url = "github:cachix/pre-commit-hooks.nix";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-compat.follows = "flake-compat";
gitignore.follows = "gitignore";
};
};
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
crane = {
url = "github:ipetkov/crane";
inputs = {};
};
flake-utils = {
url = "github:numtide/flake-utils";
inputs = {
systems.follows = "systems";
};
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
flake_version_update = {
url = "git+https://codeberg.org/soispha/flake_version_update.git";
inputs = {
systems.follows = "systems";
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
};
# nixos modules
home-manager = {
url = "github:nix-community/home-manager/master";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
disko = {
url = "github:nix-community/disko";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
nixVim = {
url = "github:nix-community/nixvim";
inputs = {
devshell.follows = "devshell";
flake-compat.follows = "flake-compat";
flake-parts.follows = "flake-parts";
git-hooks.follows = "git-hooks";
home-manager.follows = "home-manager";
nix-darwin.follows = "nix-darwin";
nixpkgs.follows = "nixpkgs";
treefmt-nix.follows = "treefmt-nix";
nuschtosSearch.follows = "nuschtosSearch";
};
};
agenix = {
url = "github:ryantm/agenix";
inputs = {
darwin.follows = "nix-darwin";
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
systems.follows = "systems";
};
};
ragenix = {
url = "github:yaxitech/ragenix";
inputs = {
nixpkgs.follows = "nixpkgs";
agenix.follows = "agenix";
flake-utils.follows = "flake-utils";
rust-overlay.follows = "rust-overlay";
crane.follows = "crane";
};
};
impermanence = {
url = "github:nix-community/impermanence";
inputs = {
};
};
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs = {
nixpkgs.follows = "nixpkgs";
nixlib.follows = "nixpkgs-lib";
};
};
serverphone = {
url = "git+https://codeberg.org/vhack.eu/serverphone.git";
inputs = {
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
flake-compat.follows = "flake-compat";
flake-utils.follows = "flake-utils";
rust-overlay.follows = "rust-overlay";
crane.follows = "crane";
};
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs = {
nixpkgs.follows = "nixpkgs-stable";
flake-compat.follows = "flake-compat";
flake-parts.follows = "flake-parts";
crane.follows = "crane";
rust-overlay.follows = "rust-overlay";
pre-commit-hooks-nix.follows = "pre-commit-hooks";
};
};
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
# my configs
templates = {
url = "git+https://codeberg.org/bpeetz/flake-templates.git";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
systems.follows = "systems";
treefmt-nix.follows = "treefmt-nix";
};
};
# my bins
shell_library = {
url = "git+https://codeberg.org/soispha/shell_library.git";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
systems.follows = "systems";
flake_version_update.follows = "flake_version_update";
};
};
river_init_lesser = {
url = "git+https://codeberg.org/soispha/river_keymap_init.git";
inputs = {
nixpkgs.follows = "nixpkgs";
crane.follows = "crane";
flake-utils.follows = "flake-utils";
rust-overlay.follows = "rust-overlay";
flake-compat.follows = "flake-compat";
};
};
qmk_firmware = {
url = "git+https://git.foss-syndicate.org/bpeetz/qmk_layout.git?ref=prime";
inputs = {
nixpkgs.follows = "nixpkgs";
treefmt-nix.follows = "treefmt-nix";
systems.follows = "systems";
flake-utils.follows = "flake-utils";
};
};
# external resources
user_js = {
url = "github:arkenfox/user.js";
flake = false;
};
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
};
outputs = {
# core
self,
nixpkgs,
nixpkgs-stable,
nixpkgs-tfc,
nixpkgs-onlykey,
library,
# modules
home-manager,
nixos-generators,
impermanence,
agenix,
ragenix,
serverphone,
disko,
lanzaboote,
nixVim,
nix-index-database,
# external dependencies
user_js,
treefmt-nix,
templates,
# my binaries
shell_library,
river_init_lesser,
qmk_firmware,
...
}: let
system = "x86_64-linux";
sysLib = shell_library.lib.${system};
inherit (library) nixLib;
pkgsStable = nixpkgs-stable.legacyPackages.${system};
pkgs = nixpkgs.legacyPackages.${system};
myPkgs = import ./pkgs {
inherit sysLib pkgs nixLib;
};
nixpkgs_as_input = nixpkgs;
nixpkgs_open_prs = {
inherit
nixpkgs-tfc
nixpkgs-onlykey
;
};
outputs = import ./flake {
inherit
# core
self
pkgs
pkgsStable
nixLib
myPkgs
system
sysLib
nixpkgs_as_input
nixpkgs_open_prs
# modules
home-manager
nixVim
nixos-generators
impermanence
agenix
ragenix
serverphone
disko
lanzaboote
nix-index-database
# external dependencies
treefmt-nix
user_js
templates
# my binaries
shell_library
river_init_lesser
qmk_firmware
;
};
in
outputs;
}