{ 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 ./ and ./home/ 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 /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; }; }