diff --git a/.gitignore b/.gitignore index 564c965..ac255b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ result* .direnv/ +build/ diff --git a/c/basic/nixpkgs/.envrc b/c/basic/nixpkgs/.envrc new file mode 100644 index 0000000..af0cc93 --- /dev/null +++ b/c/basic/nixpkgs/.envrc @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +use flake diff --git a/c/basic/nixpkgs/flake.lock b/c/basic/nixpkgs/flake.lock new file mode 100644 index 0000000..4243b18 --- /dev/null +++ b/c/basic/nixpkgs/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1768783163, + "narHash": "sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo+w8KsY4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bde09022887110deb780067364a0818e89258968", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/c/basic/nixpkgs/flake.nix b/c/basic/nixpkgs/flake.nix new file mode 100644 index 0000000..9b0c8a8 --- /dev/null +++ b/c/basic/nixpkgs/flake.nix @@ -0,0 +1,23 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + systems.url = "github:nix-systems/default"; + }; + + outputs = { self, nixpkgs, systems, ... }: + let eachSystem = nixpkgs.lib.genAttrs (import systems); + in { + packages = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + hello = pkgs.callPackage ./package.nix {}; + default = self.packages.${system}.hello; + }); + + devShells = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + default = import ./shell.nix { inherit pkgs; }; + }); + }; +} diff --git a/c/basic/nixpkgs/package.nix b/c/basic/nixpkgs/package.nix new file mode 100644 index 0000000..53b63e9 --- /dev/null +++ b/c/basic/nixpkgs/package.nix @@ -0,0 +1,23 @@ +{ + stdenv +}: +let + source = "src/hello.c"; + exec = "hello"; +in stdenv.mkDerivation { + pname = "hello"; + version = "0.1"; + src = ./.; + + buildPhase = '' + runHook preBuild + gcc ${source} -o ${exec}.bin + runHook postBuild + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/bin + install ${exec}.bin $out/bin/${exec} + runHook postInstall + ''; +} diff --git a/c/basic/nixpkgs/shell.nix b/c/basic/nixpkgs/shell.nix new file mode 100644 index 0000000..4d2f40d --- /dev/null +++ b/c/basic/nixpkgs/shell.nix @@ -0,0 +1,8 @@ +{ pkgs ? import {} }: +let inherit (pkgs) + mkShell + llvmPackages_21 +; +in mkShell { + packages = [ llvmPackages_21.clang-tools ]; +} diff --git a/c/basic/nixpkgs/src/hello.c b/c/basic/nixpkgs/src/hello.c new file mode 100644 index 0000000..f26b97c --- /dev/null +++ b/c/basic/nixpkgs/src/hello.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello, World!\n"); + return 0; +} diff --git a/c/make/nixpkgs/.envrc b/c/make/nixpkgs/.envrc new file mode 100644 index 0000000..af0cc93 --- /dev/null +++ b/c/make/nixpkgs/.envrc @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +use flake diff --git a/c/make/nixpkgs/Makefile b/c/make/nixpkgs/Makefile new file mode 100644 index 0000000..fb93306 --- /dev/null +++ b/c/make/nixpkgs/Makefile @@ -0,0 +1,37 @@ +## +# Example GCC Nix Project +# +# @file +# @version 0.1 + +SRC_DIR := ./src +BUILD_DIR := ./build + +EXEC ?= hello +INSTALL ?= $(PREFIX)/bin/ + +# Find all the C files we want to compile +SRCS := $(shell find $(SRC_DIR) -name '*.c') +OBJS := $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) + +.PHONY: build install clean + +build: $(BUILD_DIR)/$(EXEC) +install: build + mkdir -p $(INSTALL) + cp $(BUILD_DIR)/$(EXEC) $(INSTALL) + + +# Link +$(BUILD_DIR)/$(EXEC): $(OBJS) + $(CC) $^ -o $@ $(LDFLAGS) + +# Compile +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c + mkdir -p $(dir $@) + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ + +clean: + rm -r $(BUILD_DIR) + +# end diff --git a/c/make/nixpkgs/flake.lock b/c/make/nixpkgs/flake.lock new file mode 100644 index 0000000..4243b18 --- /dev/null +++ b/c/make/nixpkgs/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1768783163, + "narHash": "sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo+w8KsY4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bde09022887110deb780067364a0818e89258968", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/c/make/nixpkgs/flake.nix b/c/make/nixpkgs/flake.nix new file mode 100644 index 0000000..9b0c8a8 --- /dev/null +++ b/c/make/nixpkgs/flake.nix @@ -0,0 +1,23 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + systems.url = "github:nix-systems/default"; + }; + + outputs = { self, nixpkgs, systems, ... }: + let eachSystem = nixpkgs.lib.genAttrs (import systems); + in { + packages = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + hello = pkgs.callPackage ./package.nix {}; + default = self.packages.${system}.hello; + }); + + devShells = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + default = import ./shell.nix { inherit pkgs; }; + }); + }; +} diff --git a/c/make/nixpkgs/package.nix b/c/make/nixpkgs/package.nix new file mode 100644 index 0000000..795863a --- /dev/null +++ b/c/make/nixpkgs/package.nix @@ -0,0 +1,10 @@ +{ + stdenv +}: + +stdenv.mkDerivation rec { + pname = "hello"; + version = "0.1"; + src = ./.; + installFlags = [ "PREFIX=$(out)" "EXEC=${pname}" ]; +} diff --git a/c/make/nixpkgs/shell.nix b/c/make/nixpkgs/shell.nix new file mode 100644 index 0000000..4d2f40d --- /dev/null +++ b/c/make/nixpkgs/shell.nix @@ -0,0 +1,8 @@ +{ pkgs ? import {} }: +let inherit (pkgs) + mkShell + llvmPackages_21 +; +in mkShell { + packages = [ llvmPackages_21.clang-tools ]; +} diff --git a/c/make/nixpkgs/src/hello.c b/c/make/nixpkgs/src/hello.c new file mode 100644 index 0000000..f26b97c --- /dev/null +++ b/c/make/nixpkgs/src/hello.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello, World!\n"); + return 0; +} diff --git a/flake.nix b/flake.nix index 02907d6..fff4f4c 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,7 @@ aliases = { bash = "bash_script_nixpkgs"; fish = "fish_script_nixpkgs"; + c = "c_make_nixpkgs"; python = "python_pyproject_nixpkgs_basic"; rust = "rust_cargo-nightly_crane+fenix"; };