168 lines
5.0 KiB
Nix
168 lines
5.0 KiB
Nix
{
|
|
description = "NixOS configuration";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
|
|
nixos.url = "github:nixos/nixpkgs/nixos-26.05";
|
|
|
|
nix-xilinx = {
|
|
url = "gitlab:asmir.abdulahovic/nix-xilinx";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
zremap = {
|
|
url = "git+https://git.project-cloud.net/asmir/zremap";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
swaysw = {
|
|
url = "git+https://git.project-cloud.net/asmir/swaysw";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
quickshell_bar = {
|
|
url = "git+https://git.project-cloud.net/asmir/quickshell_bar";
|
|
};
|
|
|
|
nvim = {
|
|
url = "git+https://git.project-cloud.net/asmir/nvim_flake";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
sops-nix = {
|
|
url = "github:Mic92/sops-nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
home-manager = {
|
|
url = "github:nix-community/home-manager/release-26.05";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
simple-nixos-mailserver = {
|
|
url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/nixos-26.05/nixos-mailserver-nixos-26.05.tar.gz";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
project-cloud = {
|
|
url = "git+https://git.project-cloud.net/asmir/project-cloud";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
inputs@{ home-manager
|
|
, nixpkgs
|
|
, nix-xilinx
|
|
, nvim
|
|
, project-cloud
|
|
, simple-nixos-mailserver
|
|
, sops-nix
|
|
, swaysw
|
|
, zremap
|
|
, nixos
|
|
, ...
|
|
}:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.x86_64-linux.pkgs;
|
|
inherit (nixpkgs) lib;
|
|
|
|
# Build a host's nixosConfiguration from the shared boilerplate.
|
|
# Per-host differences are expressed as flags / extraModules rather
|
|
# than copy-pasted module blocks.
|
|
mkHost =
|
|
{ hostname # name of the ./<hostname> and ./home/<hostname> dirs
|
|
, system ? "x86_64-linux"
|
|
, homeHost ? hostname # which home/<...> config to use (iso reuses nixy)
|
|
, packages ? true # import common/packages.nix
|
|
, suspend ? true # import common/suspend.nix
|
|
, hardware ? true # import <hostname>/hardware-configuration.nix
|
|
, sops ? true # wire sops-nix
|
|
, hm ? true # wire home-manager
|
|
, hmBackup ? true # set home-manager.backupFileExtension
|
|
, nixosLib ? nixpkgs.lib # nixosSystem source (iso uses `nixos`)
|
|
, extraModules ? [ ]
|
|
}:
|
|
nixosLib.nixosSystem {
|
|
inherit system;
|
|
modules =
|
|
[
|
|
{ _module.args = inputs; }
|
|
{ _module.args.system = system; }
|
|
{ nix.registry.nixpkgs.flake = nixpkgs; }
|
|
]
|
|
++ lib.optional packages ./common/packages.nix
|
|
++ lib.optional suspend ./common/suspend.nix
|
|
++ [ (./. + "/${hostname}/configuration.nix") ]
|
|
++ lib.optional hardware (./. + "/${hostname}/hardware-configuration.nix")
|
|
++ lib.optional sops sops-nix.nixosModules.sops
|
|
++ lib.optionals hm [
|
|
home-manager.nixosModules.home-manager
|
|
{
|
|
home-manager.useGlobalPkgs = true;
|
|
home-manager.useUserPackages = true;
|
|
home-manager.users.akill = import (./home + "/${homeHost}/home.nix");
|
|
home-manager.extraSpecialArgs = { inherit inputs system; };
|
|
}
|
|
]
|
|
++ lib.optional (hm && hmBackup) { home-manager.backupFileExtension = "home_backup"; }
|
|
++ extraModules;
|
|
};
|
|
in
|
|
{
|
|
nixosConfigurations = {
|
|
nixy = mkHost { hostname = "nixy"; };
|
|
|
|
fuji = mkHost { hostname = "fuji"; };
|
|
|
|
nixy_iso = mkHost {
|
|
hostname = "nixy";
|
|
hardware = false;
|
|
nixosLib = nixos.lib;
|
|
extraModules = [
|
|
{ isoImage.squashfsCompression = "gzip -Xcompression-level 1"; }
|
|
"${nixos}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix"
|
|
];
|
|
};
|
|
|
|
mediabox = mkHost {
|
|
hostname = "mediabox";
|
|
hmBackup = false;
|
|
extraModules = [ ./modules/qbittorrent.nix ];
|
|
};
|
|
|
|
blue = mkHost {
|
|
hostname = "blue";
|
|
suspend = false;
|
|
sops = false;
|
|
hmBackup = false;
|
|
};
|
|
|
|
magpie = mkHost {
|
|
hostname = "magpie";
|
|
system = "aarch64-linux";
|
|
packages = false;
|
|
suspend = false;
|
|
hm = false;
|
|
extraModules = [
|
|
simple-nixos-mailserver.nixosModule
|
|
(builtins.toPath "${nixpkgs}/nixos/modules/profiles/qemu-guest.nix")
|
|
];
|
|
};
|
|
};
|
|
|
|
devShell.x86_64-linux = pkgs.mkShell {
|
|
buildInputs = with pkgs; [
|
|
sops
|
|
ssh-to-age
|
|
age
|
|
];
|
|
shellHook = ''
|
|
echo "Configuring NixOS!"
|
|
'';
|
|
};
|
|
|
|
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
|
|
};
|
|
}
|