From 109f2eff37a72d844ad785f7bd2b9dc7d01353b6 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sun, 3 Dec 2023 18:54:24 +0100 Subject: chore: setup nix flake --- 2023/flake.nix | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 2023/flake.nix (limited to '2023/flake.nix') diff --git a/2023/flake.nix b/2023/flake.nix new file mode 100644 index 0000000..6f6ad62 --- /dev/null +++ b/2023/flake.nix @@ -0,0 +1,104 @@ +{ + description = "Environment for the Advent of Code 2023, solved in C++"; + + inputs.devshell.url = "github:numtide/devshell"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + + inputs.flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + + outputs = { self, flake-utils, devshell, nixpkgs, ... }: + flake-utils.lib.eachDefaultSystem (system: { + devShells.default = let + pkgs = import nixpkgs { + inherit system; + overlays = [ devshell.overlays.default ]; + }; + in pkgs.devshell.mkShell { + + devshell = { + motd = '' + {bold}{3}🎄 Advent of Code 2023 🎄{reset} + $(for CMD in g++ make gdb clangd ; do + "$CMD" --version | head -n1 + done) + $(type -p menu &>/dev/null && menu) + ''; + interactive = { + prompt.text = '' + export PS1="\n> " + ''; + }; + }; + + packages = with pkgs; [ + gcc gnumake gdb clang-tools bear + ]; + + #env = [ + # { name = "ENV"; value = "val"; } + #]; + + commands = [ + { + category = "aoc"; + name = "start"; + help = "Deploy directory structure for day $1"; + command = '' + BASE="$(printf %02d $1)" + [ -d "$BASE" ] && echo "Existing directory '$BASE'" && exit 1 + mkdir -p "$BASE" && cd $_ + mkdir -p src resources + + cat << EOF >> src/part1.cpp + #include + #include + + int main(void) + { + int answer{}; + + std::ifstream input{ "resources/input_small.txt" }; + if (input.is_open()) + { + std::string line; + while (not std::getline(input,line).eof()) + { + /* ... */ + } + } + input.close(); + + /* ... */ + + std::cout << answer << std::endl; + return 0; + } + EOF + cp src/part1.cpp src/part2.cpp + + cat << EOF >> Makefile + CXXFLAGS := -std=c++17 + EXE := part1 part2 + + .PHONY: all clean + + all: \$(EXE) + + %.o: %.cpp + \$(CXX) -c \$(CXXFLAGS) $< -o $@ + + clean: + rm -rf \$(EXE) src/*.o + + %: src/%.o + \$(CXX) $^ -o $@ + EOF + ''; + } + ]; + }; + }); +} -- cgit v1.2.3