From 09e8a3c01213c2efc0dda1355f2b4365cc2cfa7f Mon Sep 17 00:00:00 2001 From: Damocles Date: Wed, 29 Apr 2026 20:33:37 +0200 Subject: [PATCH] init flake --- .gitignore | 1 + flake.nix | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 .gitignore create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..86b8dea --- /dev/null +++ b/flake.nix @@ -0,0 +1,92 @@ +{ + description = "damocles-daemon - Matrix chat presence for Damocles"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { + self, + nixpkgs, + treefmt-nix, + ... + }: + let + systems = [ + "x86_64-linux" + "aarch64-linux" + ]; + forAllSystems = + f: + nixpkgs.lib.genAttrs systems ( + system: + f { + pkgs = nixpkgs.legacyPackages.${system}; + treefmt-eval = treefmt-nix.lib.evalModule nixpkgs.legacyPackages.${system} treefmt-config; + } + ); + treefmt-config = { + projectRootFile = "flake.nix"; + programs.nixfmt.enable = true; + programs.rustfmt.enable = true; + programs.taplo.enable = true; + }; + in + { + packages = forAllSystems ( + { pkgs, ... }: + { + default = pkgs.rustPlatform.buildRustPackage { + pname = "damocles-daemon"; + version = "0.1.0"; + src = nixpkgs.lib.cleanSource ./.; + cargoLock.lockFile = ./Cargo.lock; + + nativeBuildInputs = with pkgs; [ pkg-config ]; + buildInputs = with pkgs; [ + openssl + ]; + + meta = { + description = "Matrix chat daemon for Damocles"; + mainProgram = "damocles-daemon"; + platforms = nixpkgs.lib.platforms.linux; + }; + }; + } + ); + + devShells = forAllSystems ( + { pkgs, ... }: + { + default = pkgs.mkShell { + packages = with pkgs; [ + cargo + rustc + rust-analyzer + clippy + rustfmt + pkg-config + openssl + ]; + }; + } + ); + + formatter = forAllSystems ({ treefmt-eval, ... }: treefmt-eval.config.build.wrapper); + + checks = forAllSystems ( + { pkgs, treefmt-eval, ... }: + { + formatting = treefmt-eval.config.build.check self; + build = self.packages.${pkgs.stdenv.hostPlatform.system}.default; + } + ); + }; +}