{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; devenv.url = "github:cachix/devenv"; fenix.url = "github:nix-community/fenix"; fenix.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, fenix, nixpkgs, devenv, ... }@inputs: let toolchain = fenix.packages.x86_64-linux.minimal.toolchain; pkgs = import nixpkgs { system = "x86_64-linux"; }; lib = pkgs.lib; types = lib.types; in { devShell.x86_64-linux = devenv.lib.mkShell { inherit inputs pkgs; modules = [ { languages.rust = { enable = true; channel = "stable"; }; } ]; }; packages.x86_64-linux.default = (pkgs.makeRustPlatform { cargo = toolchain; rustc = toolchain; }).buildRustPackage { pname = "ozai"; version = "0.1.0"; src = ./.; cargoLock.lockFile = ./Cargo.lock; }; nixosModules = { ozai = { config, pkgs, ... }: { options.services.ozai = { enable = lib.mkEnableOption "Ozai Azul server"; host = lib.mkOption { type = types.str; default = "127.0.0.1"; description = "The host to run the server on"; }; port = lib.mkOption { type = types.int; default = 8000; description = "The port to run the server on"; }; }; config = lib.mkIf config.services.ozai.enable { systemd.services.ozai = { description = "Ozai Azul server"; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${self.packages.x86_64-linux.default}/bin/ozai --port ${toString config.services.ozai.port} --host '${config.services.ozai.host}'"; Restart = "always"; }; }; }; }; }; nixosConfigurations = { ozai = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.ozai { system.stateVersion = "23.11"; boot.isContainer = true; services.ozai.enable = true; } ]; }; }; }; }