diff --git a/templates/haskell/.gitignore b/templates/haskell/.gitignore index 2bbdbfe..6c13751 100644 --- a/templates/haskell/.gitignore +++ b/templates/haskell/.gitignore @@ -1,2 +1,3 @@ .direnv result +dist-newstyle diff --git a/templates/haskell/example.cabal b/templates/haskell/example.cabal new file mode 100644 index 0000000..0026f82 --- /dev/null +++ b/templates/haskell/example.cabal @@ -0,0 +1,76 @@ +cabal-version: 3.4 +-- The cabal-version field refers to the version of the .cabal specification, +-- and can be different from the cabal-install (the tool) version and the +-- Cabal (the library) version you are using. As such, the Cabal (the library) +-- version used must be equal or greater than the version stated in this field. +-- Starting from the specification version 2.2, the cabal-version field must be +-- the first thing in the cabal file. + +-- Initial package description 'todo-list' generated by +-- 'cabal init'. For further documentation, see: +-- http://haskell.org/cabal/users-guide/ +-- +-- The name of the package. +name: todo-list + +-- The package version. +-- See the Haskell package versioning policy (PVP) for standards +-- guiding when and how versions should be incremented. +-- https://pvp.haskell.org +-- PVP summary: +-+------- breaking API changes +-- | | +----- non-breaking API additions +-- | | | +--- code changes with no API change +version: 0.1.0.0 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +-- The license under which the package is released. +-- license: GPL-3.0-or-later + +-- The file containing the license text. +-- license-file: LICENSE + +-- The package author(s). +author: sh-koh + +-- An email address to which users can send suggestions, bug reports, and patches. +maintainer: 70974710+sh-koh@users.noreply.github.com + +-- A copyright notice. +-- copyright: +build-type: Simple + +-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README. +-- extra-doc-files: CHANGELOG.md + +-- Extra source files to be distributed with the package, such as examples, or a tutorial module. +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable todo-list + -- Import common warning flags. + import: warnings + + -- .hs or .lhs file containing the Main module. + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + + -- Other library packages from which modules are imported. + build-depends: base ^>=4.18.2.1 + + -- Directories containing source files. + hs-source-dirs: src + + -- Base language which the package is written in. + default-language: Haskell2010 diff --git a/templates/haskell/flake.nix b/templates/haskell/flake.nix index 5a02f96..5e50572 100644 --- a/templates/haskell/flake.nix +++ b/templates/haskell/flake.nix @@ -3,35 +3,43 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - flake-parts.url = "github:hercules-ci/flake-parts"; + haskell-flake.url = "github:srid/haskell-flake"; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; }; - outputs = - inputs: - inputs.flake-parts.lib.mkFlake { inherit inputs; } { - systems = inputs.nixpkgs.lib.systems.flakeExposed; - perSystem = - { pkgs, ... }: - { - devShells.default = pkgs.mkShell { packages = with pkgs; [ ghc ]; }; - packages.default = pkgs.stdenv.mkDerivation ( - finalAttrs: - let - pname = "haskell-template"; - in - { - inherit pname; - version = "git"; - src = ./.; - buildInputs = with pkgs; [ ghc ]; - nativeBuildInputs = with pkgs; [ ]; - buildPhase = '' - mkdir -p $out/bin - ${pkgs.ghc}/bin/ghc src/Main.hs -o ${pname} - cp ${pname} $out/bin/${pname} - ''; - } - ); - }; - }; + outputs = inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } + { + imports = [ + inputs.haskell-flake.flakeModule + ]; + + systems = inputs.nixpkgs.lib.systems.flakeExposed; + + perSystem = { pkgs, self', ... }: + { + packages.default = self'.packages.package; # TODO: replace with package name + haskellProjects.default = { + basePackages = pkgs.haskellPackages; + packages = { + # Dependencies + # aeson.source = "1.5.0.0"; + }; + settings = { + # Settings for dependecies + # aeson = { + # check = false; + # }; + }; + devShell = { + enable = true; + # tools = hp: { cabal = hp.cabal; }; + hlsCheck.enable = false; + }; + }; + }; + }; } diff --git a/templates/haskell/src/Main.hs b/templates/haskell/src/Main.hs new file mode 100644 index 0000000..adec038 --- /dev/null +++ b/templates/haskell/src/Main.hs @@ -0,0 +1,5 @@ +module Main where + +main :: IO () +main = do + putStrLn "New haskell project!"