| { |
| description = "A flake to deploy and configure Clicks' NixOS server"; |
| |
| # input URLs |
| inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; |
| inputs.nixpkgs-clicksforms.url = "github:nixos/nixpkgs/nixos-22.05"; |
| inputs.flake-utils.url = "github:numtide/flake-utils"; |
| inputs.deploy-rs.url = "github:serokell/deploy-rs"; |
| inputs.home-manager.url = "github:nix-community/home-manager/release-23.05"; |
| inputs.sops-nix.url = "github:Mic92/sops-nix"; |
| inputs.scalpel.url = "github:polygon/scalpel"; |
| |
| inputs.nixpkgs-privatebin.url = "github:e1mo/nixpkgs/privatebin"; |
| inputs.nixpkgs-mongodb.url = "github:nixos/nixpkgs?rev=8dfad603247387df1df4826b8bea58efc5d012d8"; |
| |
| inputs.helpers.url = "git+https://git.clicks.codes/Clicks/NixHelpers"; |
| |
| # follow settings |
| inputs.home-manager.inputs.nixpkgs.follows = "nixpkgs"; |
| |
| inputs.sops-nix.inputs.nixpkgs.follows = "nixpkgs"; |
| |
| inputs.scalpel.inputs.nixpkgs.follows = "nixpkgs"; |
| inputs.scalpel.inputs.sops-nix.follows = "sops-nix"; |
| |
| outputs = { self, nixpkgs, deploy-rs, home-manager, sops-nix, scalpel |
| , nixpkgs-privatebin, ... }@inputs: |
| let |
| system = "x86_64-linux"; |
| pkgs = import nixpkgs { |
| inherit system; |
| config.allowUnfree = true; |
| overlays = [ |
| (final: prev: { |
| inherit (nixpkgs-privatebin.legacyPackages.${system}) |
| privatebin pbcli; |
| }) |
| ]; |
| }; |
| helpers = inputs.helpers.helpers { inherit pkgs nixpkgs; }; |
| drive_paths = import ./variables/drive_paths.nix; |
| |
| a1d1 = import ./modules/a1d1 { inherit self pkgs system inputs drive_paths; }; |
| a1d2 = import ./modules/a1d2 { inherit self pkgs system inputs; drive_paths = null; }; |
| in rec { |
| nixosConfigurations.clicks = let |
| base = nixpkgs.lib.nixosSystem { |
| inherit system pkgs; |
| modules = [ |
| { |
| system.stateVersion = "22.11"; |
| nix.settings.experimental-features = [ "nix-command" "flakes" ]; |
| nix.settings.trusted-users = [ "minion" "coded" ]; |
| time.timeZone = "Etc/UTC"; |
| users.mutableUsers = false; |
| |
| fileSystems."/" = {}; |
| } |
| ] |
| ++ (helpers.nixFilesIn ./modules/common) |
| ++ [ |
| sops-nix.nixosModules.sops |
| "${nixpkgs-privatebin}/nixos/modules/services/web-apps/privatebin.nix" |
| ]; |
| specialArgs = inputs // { |
| base = null; |
| inherit system; |
| inherit helpers; |
| drive_paths = null; |
| }; |
| }; |
| in base.extendModules { |
| modules = [ scalpel.nixosModules.scalpel ]; |
| specialArgs = { inherit base; }; |
| }; |
| |
| nixosConfigurations.clicks-without-mongodb = |
| nixosConfigurations.clicks.extendModules { |
| modules = [{ services.mongodb.enable = nixpkgs.lib.mkForce false; }]; |
| }; |
| |
| nixosConfigurations.a1d1 = a1d1.config; |
| nixosConfigurations.a1d2 = a1d2.config; |
| |
| deploy.nodes.a1d1 = a1d1.deploy; |
| deploy.nodes.a1d2 = a1d2.deploy; |
| |
| devShells.x86_64-linux.default = |
| pkgs.mkShell { packages = [ pkgs.deploy-rs ]; }; |
| |
| formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; |
| }; |
| } |