{ description = "personal NixOS configurations"; inputs = { # Nixpkgs, NixOS's official repo nixpkgs.url = "github:nixos/nixpkgs/release-22.05"; futils.url = "github:numtide/flake-utils"; # We use the unstable nixpkgs repo for some packages. nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; emacs-overlay.url = "github:nix-community/emacs-overlay"; agenix = { url = "github:ryantm/agenix"; inputs.nixpkgs.follows = "nixpkgs"; }; nur.url = "github:nix-community/NUR"; home-manager = { url = "github:nix-community/home-manager/release-22.05"; # We want home-manager to use the same set of nixpkgs as our system. inputs.nixpkgs.follows = "nixpkgs"; }; rust = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; naersk.url = "github:nix-community/naersk"; pre-commit-hooks = { type = "github"; owner = "cachix"; repo = "pre-commit-hooks.nix"; ref = "master"; inputs = { flake-utils.follows = "futils"; nixpkgs.follows = "nixpkgs"; }; }; }; # Output config, or config for NixOS system outputs = { self, ... }@inputs: let inherit (inputs.futils.lib) eachSystem system; mySystems = [ system.x86_64-linux ]; eachMySystem = eachSystem mySystems; lib = import ./nix { inherit inputs; }; in eachMySystem (system: let naersk = inputs.naersk; pkgs = import inputs.nixpkgs { inherit system; }; home-manager = inputs.home-manager.defaultPackage."${system}"; pre-commit-golang = pkgs.callPackage ({ stdenv, fetchFromGitHub }: stdenv.mkDerivation rec { pname = "pre-commit-golang"; version = "0.5.0-96221dc"; src = fetchFromGitHub { owner = "dnephin"; repo = pname; rev = "96221dc741cb30cc0136999083dc6bd0e2113000"; sha256 = "sha256-lIQBoT+UIlVGnFaaGBgXag0Lm1UhGj/pIGlCCz91L4I="; }; dontBuild = true; dontConfigure = true; installPhase = '' runHook preInstall install -d $out find . -type f -name 'run-*.sh' \ | sed -E 's:^\./run-(.*)\.sh:\1:' \ | xargs -I {} install ./run-{}.sh $out/{} runHook postInstall ''; }) { }; pre-commit-golang-hook = name: { "${name}" = { inherit name; enable = true; entry = "${pre-commit-golang}/${name}"; files = "\\.go$"; }; }; in rec { packages = pkgs // { inherit home-manager; tools = import ./tools { inherit pkgs naersk; }; ops = import ./ops { inherit pkgs; }; users.fcuny = import ./users/fcuny { inherit pkgs; }; }; checks = { pre-commit = inputs.pre-commit-hooks.lib.${system}.run { src = ./.; hooks = { trailing-whitespace = { enable = true; entry = "${pkgs.python3Packages.pre-commit-hooks}/bin/trailing-whitespace-fixer"; types = [ "text" ]; }; end-of-file-fixer = { enable = true; entry = "${pkgs.python3Packages.pre-commit-hooks}/bin/end-of-file-fixer"; types = [ "text" ]; }; nixpkgs-fmt = { enable = true; }; terraform-format = { enable = true; }; shellcheck = { enable = true; files = "\\.sh$"; types_or = [ "file" ]; }; } // (pre-commit-golang-hook "go-fmt") // (pre-commit-golang-hook "go-mod-tidy"); }; }; devShells = { default = pkgs.mkShell { name = "NixOS-config"; buildInputs = with pkgs; [ gitAndTools.pre-commit nixUnstable nixfmt nixpkgs-fmt rnix-lsp home-manager git go gopls ]; inherit (self.checks.${system}.pre-commit) shellHook; }; }; }) // { nixosConfigurations = { carmel = lib.mkSystem { hostname = "carmel"; }; aptos = lib.mkSystem { hostname = "aptos"; }; tahoe = lib.mkSystem { hostname = "tahoe"; }; }; }; }