From 0b2e349268e8bf5fcea668315d94044986c5da32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Sat, 21 Mar 2026 13:48:30 +0100 Subject: [PATCH] feat(templates): add cmake-c --- flake.nix | 4 ++ templates/cmake-c/.gitignore | 1 + templates/cmake-c/CMakeLists.txt | 10 +++++ templates/cmake-c/flake.nix | 56 ++++++++++++++++++++++++++++ templates/cmake-c/nix/derivation.nix | 17 +++++++++ templates/cmake-c/src/main.c | 6 +++ 6 files changed, 94 insertions(+) create mode 100644 templates/cmake-c/.gitignore create mode 100644 templates/cmake-c/CMakeLists.txt create mode 100644 templates/cmake-c/flake.nix create mode 100644 templates/cmake-c/nix/derivation.nix create mode 100644 templates/cmake-c/src/main.c diff --git a/flake.nix b/flake.nix index 4e08568..b72f9f0 100644 --- a/flake.nix +++ b/flake.nix @@ -238,6 +238,10 @@ Before running nix build, make sure to run `cargo generate-lockfile` first. ''; }; + cmake-c = { + path = ./templates/cmake-c; + description = "A simple cmake c project."; + }; }; }; } diff --git a/templates/cmake-c/.gitignore b/templates/cmake-c/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/templates/cmake-c/.gitignore @@ -0,0 +1 @@ +build diff --git a/templates/cmake-c/CMakeLists.txt b/templates/cmake-c/CMakeLists.txt new file mode 100644 index 0000000..1f0e64f --- /dev/null +++ b/templates/cmake-c/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.15) + +project(Hello + DESCRIPTION "Hello World" + LANGUAGES C +) + +add_executable(hello src/main.c) + +install(TARGETS hello) diff --git a/templates/cmake-c/flake.nix b/templates/cmake-c/flake.nix new file mode 100644 index 0000000..1a56dc3 --- /dev/null +++ b/templates/cmake-c/flake.nix @@ -0,0 +1,56 @@ +{ + description = "Cmake C Flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; + }; + + outputs = inputs @ { + self, + flake-parts, + ... + }: + flake-parts.lib.mkFlake {inherit inputs;} ( + top: { + imports = []; + + flake = { + overlays.default = final: prev: { + my-derivation = final.callPackage ./nix/derivation.nix {}; + }; + }; + + systems = [ + "x86_64-linux" + ]; + + perSystem = { + self', + pkgs, + system, + ... + }: { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + overlays = [self.overlays.default]; + }; + + packages.default = pkgs.my-derivation; + + devShells.default = pkgs.mkShell { + packages = [ + pkgs.cmake-language-server + pkgs.cmake-format + pkgs.clang-tools + pkgs.gdb + ]; + inputsFrom = [self'.packages.default]; + shellHook = '' + export CMAKE_EXPORT_COMPILE_COMMANDS=ON + ''; + }; + }; + } + ); +} diff --git a/templates/cmake-c/nix/derivation.nix b/templates/cmake-c/nix/derivation.nix new file mode 100644 index 0000000..c1d08b8 --- /dev/null +++ b/templates/cmake-c/nix/derivation.nix @@ -0,0 +1,17 @@ +{ + cmake, + stdenv, + ... +}: +stdenv.mkDerivation (finalAttrs: { + pname = "my-derivation"; + version = "0.1.0"; + src = ../.; + nativeBuildInputs = [cmake]; + buildInputs = []; + + meta = { + description = "Hello World Binary"; + mainProgram = "hello"; + }; +}) diff --git a/templates/cmake-c/src/main.c b/templates/cmake-c/src/main.c new file mode 100644 index 0000000..39ccd04 --- /dev/null +++ b/templates/cmake-c/src/main.c @@ -0,0 +1,6 @@ +#include + +int main() { + puts("Hello, Flake!"); + return 0; +}