diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..2ff3f32 --- /dev/null +++ b/default.nix @@ -0,0 +1,25 @@ +# default.nix +let + pkgs = import {}; +in +pkgs.stdenv.mkDerivation rec { + pname = "kte"; + version = "0.1.0"; + + src = ./.; + + nativeBuildInputs = [ pkgs.cmake ]; + buildInputs = [ pkgs.ncurses ]; + + cmakeFlags = [ + "-DCURSES_NEED_NCURSES=TRUE" + "-DCURSES_NEED_WIDE=TRUE" + ]; + + meta = with pkgs.lib; { + description = "A small terminal text editor"; + license = licenses.mit; + platforms = platforms.linux; + mainProgram = "kte"; + }; +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..6ce5045 --- /dev/null +++ b/flake.nix @@ -0,0 +1,61 @@ +# flake.nix +{ + description = "kte – a small terminal text editor"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + packages.default = pkgs.stdenv.mkDerivation { + pname = "kte"; + version = "0.1.0"; # change if you have a version + + src = ./.; + + nativeBuildInputs = [ pkgs.cmake ]; + buildInputs = with pkgs; [ + ncurses # provides libncursesw.so + headers via .dev output + ]; + + # Crucial: tell CMake to use wide ncurses and prefer pkg-config + cmakeFlags = [ + "-DCURSES_NEED_NCURSES=TRUE" + "-DCURSES_NEED_WIDE=TRUE" + "-DUSE_PKGCONFIG=ON" + ]; + + # Optional: make it obvious in the build log + preConfigure = '' + echo "Using ncurses from ${pkgs.ncurses}" + echo "lib dir: ${pkgs.ncurses}/lib" + echo "include dir: ${pkgs.ncurses.dev}/include" + ''; + + meta = with pkgs.lib; { + description = "A small terminal text editor"; + license = licenses.mit; # change if needed + platforms = platforms.linux; + mainProgram = "kte"; + }; + }; + + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; [ + cmake + gdb + clang-tools # for clangd, clang-format, etc. + ncurses + ]; + + # Makes ncurses visible to every tool (including manual cmake runs) + hardeningDisable = [ "all" ]; # optional, only if you hit fortify issues + }; + }); +}