From 40d6a40b1de18f28003c4aa5f36d9b4b0ef4afdd Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Mon, 21 Jul 2025 13:00:38 -0700 Subject: move all profiles, modules, and flakes to top-level --- flake/apps.nix | 16 +++++ flake/checks.nix | 42 ++++++++++++ flake/devshells.nix | 62 ++++++++++++++++++ flake/formatter.nix | 17 +++++ flake/hosts.nix | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++ flake/overlays.nix | 21 ++++++ flake/packages.nix | 13 ++++ 7 files changed, 355 insertions(+) create mode 100644 flake/apps.nix create mode 100644 flake/checks.nix create mode 100644 flake/devshells.nix create mode 100644 flake/formatter.nix create mode 100644 flake/hosts.nix create mode 100644 flake/overlays.nix create mode 100644 flake/packages.nix (limited to 'flake') diff --git a/flake/apps.nix b/flake/apps.nix new file mode 100644 index 0000000..e0b23f4 --- /dev/null +++ b/flake/apps.nix @@ -0,0 +1,16 @@ +{ self, ... }: +{ + perSystem = + { pkgs, ... }: + let + mkFcunyNet = import "${self}/src/fcuny.net" { inherit pkgs; }; + in + { + apps = { + "fcuny_net-serve" = { + type = "app"; + program = "${mkFcunyNet.serve}/bin/serve-fcuny-net"; + }; + }; + }; +} diff --git a/flake/checks.nix b/flake/checks.nix new file mode 100644 index 0000000..87d4a7f --- /dev/null +++ b/flake/checks.nix @@ -0,0 +1,42 @@ +{ inputs, ... }: +{ + perSystem = + { system, pkgs, ... }: + let + treefmtEval = inputs.treefmt-nix.lib.evalModule pkgs { + projectRootFile = "flake.nix"; + programs = { + nixfmt.enable = true; + deadnix.enable = true; + }; + }; + + mkPreCommitHooks = + src: + inputs.pre-commit-hooks.lib.${system}.run { + inherit src; + hooks = { + check-merge-conflicts.enable = true; + deadnix.enable = true; + detect-private-keys.enable = true; + end-of-file-fixer.enable = true; + mixed-line-endings.enable = true; + shellcheck = { + enable = true; + excludes = [ "\\.envrc$" ]; + }; + flake-checker.enable = true; + treefmt = { + enable = true; + entry = "${treefmtEval.config.build.wrapper}/bin/treefmt --ci"; + }; + trim-trailing-whitespace.enable = true; + }; + }; + in + { + checks = { + pre-commit-check = mkPreCommitHooks ./.; + }; + }; +} diff --git a/flake/devshells.nix b/flake/devshells.nix new file mode 100644 index 0000000..d28c4b3 --- /dev/null +++ b/flake/devshells.nix @@ -0,0 +1,62 @@ +{ self, inputs, ... }: +{ + perSystem = + { system, pkgs, ... }: + let + treefmtEval = inputs.treefmt-nix.lib.evalModule pkgs { + projectRootFile = "flake.nix"; + programs = { + nixfmt.enable = true; + deadnix.enable = true; + }; + }; + + mkPreCommitHooks = + src: + inputs.pre-commit-hooks.lib.${system}.run { + inherit src; + hooks = { + check-merge-conflicts.enable = true; + deadnix.enable = true; + detect-private-keys.enable = true; + end-of-file-fixer.enable = true; + mixed-line-endings.enable = true; + shellcheck = { + enable = true; + excludes = [ "\\.envrc$" ]; + }; + flake-checker.enable = true; + treefmt = { + enable = true; + entry = "${treefmtEval.config.build.wrapper}/bin/treefmt --ci"; + }; + trim-trailing-whitespace.enable = true; + }; + }; + + pre-commit-check = mkPreCommitHooks ./.; + scripts = import "${self}/scripts" { + inherit + pkgs + self + system + inputs + ; + }; + in + { + devShells = { + default = pkgs.mkShellNoCC { + inherit (pre-commit-check) shellHook; + packages = + with pkgs; + [ + nixos-rebuild + git + inputs.agenix.packages."${system}".default + ] + ++ scripts.all; + }; + }; + }; +} diff --git a/flake/formatter.nix b/flake/formatter.nix new file mode 100644 index 0000000..44c0190 --- /dev/null +++ b/flake/formatter.nix @@ -0,0 +1,17 @@ +{ inputs, ... }: +{ + perSystem = + { pkgs, ... }: + let + treefmtEval = inputs.treefmt-nix.lib.evalModule pkgs { + projectRootFile = "flake.nix"; + programs = { + nixfmt.enable = true; + deadnix.enable = true; + }; + }; + in + { + formatter = treefmtEval.config.build.wrapper; + }; +} diff --git a/flake/hosts.nix b/flake/hosts.nix new file mode 100644 index 0000000..ecfcca1 --- /dev/null +++ b/flake/hosts.nix @@ -0,0 +1,184 @@ +{ + inputs, + self, + withSystem, + ... +}: +let + inherit (inputs.nixpkgs.lib // builtins) + filterAttrs + foldl' + makeOverridable + mapAttrs' + mapAttrsToList + mkForce + mkIf + nixosSystem + readDir + replaceStrings + substring + ; + + inherit (inputs.darwin.lib) darwinSystem; + + nixSettings = { + nix.registry.nixpkgs = { + flake = inputs.nixpkgs; + }; + }; + + mapSystems = + dir: mapAttrsToList (name: _: name) (filterAttrs (_: type: type == "directory") (readDir dir)); + + mapHosts = foldl' ( + hosts: system: + hosts + // (mapAttrs' ( + filename: _: + let + name = replaceStrings [ ".nix" ] [ "" ] filename; + in + { + inherit name; + value = { + inherit system; + hostconf = "${self}/machines/nixos/${system}/${filename}"; + }; + } + ) (builtins.readDir "${self}/machines/nixos/${system}")) + ) { }; + + mapMacs = foldl' ( + hosts: system: + hosts + // (mapAttrs' ( + filename: _: + let + name = replaceStrings [ ".nix" ] [ "" ] filename; + in + { + inherit name; + value = { + inherit system; + hostconf = "${self}/machines/darwin/${system}/${filename}"; + }; + } + ) (builtins.readDir "${self}/machines/darwin/${system}")) + ) { }; + + defaultModules = [ + nixSettings + inputs.agenix.nixosModules.age + inputs.disko.nixosModules.disko + inputs.home-manager.nixosModules.home-manager + "${self}/modules/default.nix" + ]; + + darwinDefaultModules = [ + nixSettings + inputs.agenix.darwinModules.age + inputs.home-manager.darwinModules.home-manager + "${self}/modules/default-darwin.nix" + ]; + + darwinConfigurations = mapAttrs' ( + name: conf: + let + inherit (conf) system hostconf; + adminUser = { + name = "fcuny"; + userinfo = { + email = "franck@fcuny.net"; + fullName = "Franck Cuny"; + }; + }; + in + { + inherit name; + value = withSystem system ( + { pkgs, ... }: + makeOverridable darwinSystem { + inherit system; + specialArgs = { + hostName = name; + inherit adminUser; + inherit self; + inherit inputs; + }; + modules = + [ + { inherit adminUser; } + { + nixpkgs.pkgs = pkgs; + nixpkgs.hostPlatform = system; + system.stateVersion = 5; + environment.systemPackages = [ + pkgs.git + ]; + } + ] + ++ darwinDefaultModules + ++ [ + hostconf + ]; + } + ); + } + ) (mapMacs (mapSystems "${self}/machines/darwin")); + + nixosConfigurations = mapAttrs' ( + name: conf: + let + inherit (conf) system hostconf; + adminUser = { + name = "fcuny"; + userinfo = { + email = "franck@fcuny.net"; + fullName = "Franck Cuny"; + }; + }; + in + { + inherit name; + value = withSystem system ( + { pkgs, ... }: + makeOverridable nixosSystem { + inherit system; + specialArgs = { + hostName = name; + inherit adminUser; + inherit self; + hostConfigurations = mapAttrs' (name: conf: { + inherit name; + value = conf.config; + }) nixosConfigurations; + inherit inputs; + }; + modules = + [ + { + inherit adminUser; + } + { + system.configurationRevision = mkIf (self ? rev) self.rev; + system.nixos.versionSuffix = mkForce "git.${substring 0 11 inputs.nixpkgs.rev}"; + nixpkgs.pkgs = pkgs; + environment.systemPackages = [ + pkgs.git + ]; + } + ] + ++ defaultModules + ++ [ + hostconf + ]; + } + ); + } + ) (mapHosts (mapSystems "${self}/machines/nixos")); +in +{ + flake = { + inherit nixosConfigurations darwinConfigurations; + }; +} diff --git a/flake/overlays.nix b/flake/overlays.nix new file mode 100644 index 0000000..83eadd0 --- /dev/null +++ b/flake/overlays.nix @@ -0,0 +1,21 @@ +{ inputs, self, ... }: +{ + + flake.overlays.default = _final: prev: { + llmPython = prev.callPackage "${self}/pkgs/llmPython/" { }; + }; + + perSystem = + { system, ... }: + { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ + inputs.agenix.overlays.default + inputs.emacs-overlay.overlay + self.overlays.default + ]; + }; + }; +} diff --git a/flake/packages.nix b/flake/packages.nix new file mode 100644 index 0000000..68f43c0 --- /dev/null +++ b/flake/packages.nix @@ -0,0 +1,13 @@ +{ self, ... }: +{ + perSystem = + { pkgs, ... }: + let + mkFcunyNet = import "${self}/src/fcuny.net" { inherit pkgs; }; + in + { + packages = { + "fcuny_net" = mkFcunyNet.site; + }; + }; +} -- cgit v1.2.3