nixos-config/flake.nix

287 lines
8.2 KiB
Nix

rec {
description = "Lotte's NixOS installation";
# Use NixOS unstable
inputs = {
# Sorted by name
admin-fe = {
url = "github:DarkKirb/admin-fe";
inputs.devshell.follows = "devshell";
inputs.flake-parts.follows = "flake-parts";
inputs.nixpkgs.follows = "nixpkgs";
};
akkoma = {
url = "github:DarkKirb/akkoma";
inputs.devshell.follows = "devshell";
inputs.flake-parts.follows = "flake-parts";
inputs.nixpkgs.follows = "nixpkgs";
};
akkoma-fe = {
url = "github:DarkKirb/akkoma-fe";
inputs.devshell.follows = "devshell";
inputs.flake-parts.follows = "flake-parts";
inputs.nixpkgs.follows = "nixpkgs";
};
attic = {
url = "github:DarkKirb/attic";
inputs.cargo2nix.follows = "cargo2nix";
inputs.crane.follows = "crane";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.follows = "rust-overlay";
};
cargo2nix = {
url = "github:DarkKirb/cargo2nix/release-0.11.0";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.follows = "rust-overlay";
};
colorpickle = {
url = "github:AgathaSorceress/colorpickle";
inputs.naersk.follows = "naersk";
inputs.nixpkgs.follows = "nixpkgs";
inputs.utils.follows = "flake-utils";
};
crane = {
url = "github:DarkKirb/crane";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.follows = "rust-overlay";
};
devshell = {
url = "github:numtide/devshell";
inputs.nixpkgs.follows = "nixpkgs";
inputs.systems.follows = "systems";
};
dns = {
url = "github:DarkKirb/dns.nix";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
};
firefox = {
url = "github:nix-community/flake-firefox-nightly";
inputs.cachix.follows = "nixpkgs";
inputs.flake-compat.follows = "flake-compat";
inputs.lib-aggregate.follows = "lib-aggregate";
inputs.mozilla.follows = "mozilla";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
flake-utils = {
url = "github:numtide/flake-utils";
inputs.systems.follows = "systems";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hydra = {
url = "github:DarkKirb/hydra";
#inputs.nixpkgs.follows = "nixpkgs";
};
lib-aggregate = {
url = "github:nix-community/lib-aggregate";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
mozilla.url = "github:mozilla/nixpkgs-mozilla";
naersk = {
url = "github:nix-community/naersk/master";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming = {
url = "github:fufexan/nix-gaming";
#inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
nix-neovim = {
url = "github:syberant/nix-neovim";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-packages = {
url = "github:DarkKirb/nix-packages/main";
inputs.flake-compat.follows = "flake-compat";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:NixOS/nixos-hardware";
nixos-vscode-server = {
url = "github:nix-community/nixos-vscode-server";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs.url = "github:NixOS/nixpkgs";
nixpkgs-staging-next.url = "github:NixOS/nixpkgs/staging-next";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs-stable.follows = "nixpkgs";
};
systems.url = "github:nix-systems/default";
};
outputs = {
self,
nixpkgs,
sops-nix,
home-manager,
...
} @ args: let
systems = [
{
name = "nixos-8gb-fsn1-1"; # Hetzner Server
system = "x86_64-linux";
}
{
name = "thinkrac"; # Thinkpad T470
system = "x86_64-linux";
}
{
name = "nas"; # My nas
system = "x86_64-linux";
}
{
name = "installer"; # Installer iso
system = "x86_64-linux";
}
{
name = "instance-20221213-1915"; # Oracle server
system = "aarch64-linux";
}
{
name = "rainbow-resort"; # PC
system = "x86_64-linux";
}
];
in rec {
nixosConfigurations = builtins.listToAttrs (map
({
name,
system,
configName ? name,
}: {
inherit name;
value =
nixpkgs.lib.nixosSystem
{
inherit system;
specialArgs =
args
// {
inherit system;
};
modules = [
(./config + "/${configName}.nix")
./config/default.nix
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
({pkgs, ...}: {
home-manager.extraSpecialArgs = args // {inherit system;};
})
(import utils/link-input.nix args)
];
};
})
systems);
overlays = {
x86_64-linux = import ./overlays args "x86_64-linux";
aarch64-linux = import ./overlays args "aarch64-linux";
};
devShell.x86_64-linux = let
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [self.overlays.x86_64-linux];
};
in
pkgs.mkShell {
nativeBuildInputs = with pkgs; [
age
sops
ssh-to-age
nix-prefetch
nix-prefetch-git
jq
bundix
python3
python3Packages.yapf
github-cli
statix
alejandra
];
};
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
packages.x86_64-linux = let
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [
self.overlays.x86_64-linux
args.nix-packages.overlays.x86_64-linux.default
];
config.allowUnfree = true;
};
in {
neovim-base = args.nix-neovim.buildNeovim {
inherit pkgs;
configuration = import ./config/programs/vim/configuration.nix false;
};
neovim = args.nix-neovim.buildNeovim {
inherit pkgs;
configuration = import ./config/programs/vim/configuration.nix true;
};
};
packages.aarch64-linux = let
pkgs = import nixpkgs {
system = "aarch64-linux";
overlays = [
self.overlays.aarch64-linux
args.nix-packages.overlays.aarch64-linux.default
];
config.allowUnfree = true;
};
in {
neovim-base = args.nix-neovim.buildNeovim {
inherit pkgs;
configuration = import ./config/programs/vim/configuration.nix false;
};
neovim = args.nix-neovim.buildNeovim {
inherit pkgs;
configuration = import ./config/programs/vim/configuration.nix true;
};
};
hydraJobs =
(builtins.listToAttrs (map
({
name,
system,
...
}: {
inherit name;
value = {
${system} = nixosConfigurations.${name}.config.system.build.toplevel;
};
})
systems))
// {
inherit devShell;
inherit packages;
# Uncomment the line to build an installer image
# This is EXTREMELY LARGE and will make builds take forever
# installer.x86_64-linux = nixosConfigurations.installer.config.system.build.isoImage;
};
};
}