Skip to content

Commit

Permalink
「✨」 feat(templates): new haskell template using haskell-flake
Browse files Browse the repository at this point in the history
  • Loading branch information
sh-koh committed Sep 18, 2024
1 parent e518977 commit 916e0fb
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 29 deletions.
1 change: 1 addition & 0 deletions templates/haskell/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.direnv
result
dist-newstyle
76 changes: 76 additions & 0 deletions templates/haskell/example.cabal
Original file line number Diff line number Diff line change
@@ -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: [email protected]

-- 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
66 changes: 37 additions & 29 deletions templates/haskell/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
};
};
};
}
5 changes: 5 additions & 0 deletions templates/haskell/src/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Main where

main :: IO ()
main = do
putStrLn "New haskell project!"

0 comments on commit 916e0fb

Please sign in to comment.