initial
This commit is contained in:
commit
aa2a5ebae2
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
result
|
||||||
|
result-doc
|
||||||
|
*.swp
|
||||||
|
|
2
LICENSE
Normal file
2
LICENSE
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
if u use dis repo u agree to not be a chud.
|
||||||
|
military and corps get out.
|
4
Main.hs
Normal file
4
Main.hs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
module Main where
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = putStrLn "Hello, Haskell!"
|
46
README.md
Normal file
46
README.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# Skeleton Haskell Flake
|
||||||
|
|
||||||
|
included is my attempt at a bare bones haskell project, implemented as a nix flake in order to allow reproducible builds.
|
||||||
|
|
||||||
|
## building
|
||||||
|
|
||||||
|
allows usage within `nix shell`, assuming a flakes system, with the followng:
|
||||||
|
|
||||||
|
```
|
||||||
|
nix shell github:techieAgnostic/haskeleton#haskeleton
|
||||||
|
```
|
||||||
|
|
||||||
|
otherwise it can be built normally with:
|
||||||
|
|
||||||
|
```
|
||||||
|
nix build.
|
||||||
|
```
|
||||||
|
|
||||||
|
or added to a system configuration by creating an input:
|
||||||
|
|
||||||
|
```
|
||||||
|
inputs.haskeleton.url = "github:techieAgnostic/haskeleton";
|
||||||
|
```
|
||||||
|
|
||||||
|
and using the `haskeleton.overlay` attribute to import the program into your pkgset.
|
||||||
|
|
||||||
|
## adding hackage dependencies
|
||||||
|
|
||||||
|
dependencies can be added to the `haskeleton.cabal` file as normal. the `haskeleton.nix` file must be regenerated once this happens.
|
||||||
|
|
||||||
|
> !!!important!!!
|
||||||
|
|
||||||
|
in order for this to work without manual editing of `haskeleton.nix`, the command must be run from the `./nix` directory.
|
||||||
|
|
||||||
|
```
|
||||||
|
cd ./nix
|
||||||
|
cabal2nix ../ > haskeleton.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
for packages not in the nixpkgs repository, or that you would like to have a different version of than appears in the repo, you can add them to the `./nix` directory manually like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
cabal2nix cabal://name-version > ./nix/name.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
and in order to disable building tests, documentation, or to jailbreak the dependencies of a package (should the build fail for those reasons), add the packages name to the lists defined in `./release.nix`.
|
43
flake.lock
Normal file
43
flake.lock
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1601282935,
|
||||||
|
"narHash": "sha256-WQAFV6sGGQxrRs3a+/Yj9xUYvhTpukQJIcMbIi7LCJ4=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "588973065fce51f4763287f0fda87a174d78bf48",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1604368813,
|
||||||
|
"narHash": "sha256-UOLaURSO448k+4bGJlaSMYeo2F5F6CuFo9VoYDkhmsk=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d105075a1fd870b1d1617a6008cb38b443e65433",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-20.09",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
19
flake.nix
Normal file
19
flake.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
description = "a skeleton haskell flake";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-20.09";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
overlays = [ (import ./overlay.nix) ];
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
defaultPackage = pkgs.haskeleton;
|
||||||
|
}) // {
|
||||||
|
overlay = import ./overlay.nix;
|
||||||
|
};
|
||||||
|
}
|
27
haskeleton.cabal
Normal file
27
haskeleton.cabal
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
cabal-version: >=1.10
|
||||||
|
-- Initial package description 'haskeleton.cabal' generated by 'cabal
|
||||||
|
-- init'. For further documentation, see
|
||||||
|
-- http://haskell.org/cabal/users-guide/
|
||||||
|
|
||||||
|
name: haskeleton
|
||||||
|
version: 0.1.0.0
|
||||||
|
-- synopsis:
|
||||||
|
-- description:
|
||||||
|
-- bug-reports:
|
||||||
|
-- license:
|
||||||
|
license-file: LICENSE
|
||||||
|
author: Thorn Avery
|
||||||
|
maintainer: s@p7.co.nz
|
||||||
|
-- copyright:
|
||||||
|
-- category:
|
||||||
|
build-type: Simple
|
||||||
|
|
||||||
|
executable haskeleton
|
||||||
|
main-is: Main.hs
|
||||||
|
-- other-modules:
|
||||||
|
-- other-extensions:
|
||||||
|
build-depends: base >=4.13 && <4.14
|
||||||
|
, text
|
||||||
|
, aeson
|
||||||
|
-- hs-source-dirs:
|
||||||
|
default-language: Haskell2010
|
11
nix/haskeleton.nix
Normal file
11
nix/haskeleton.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ mkDerivation, aeson, base, stdenv, text }:
|
||||||
|
mkDerivation {
|
||||||
|
pname = "haskeleton";
|
||||||
|
version = "0.1.0.0";
|
||||||
|
src = ./..;
|
||||||
|
isLibrary = false;
|
||||||
|
isExecutable = true;
|
||||||
|
executableHaskellDepends = [ aeson base text ];
|
||||||
|
license = "unknown";
|
||||||
|
hydraPlatforms = stdenv.lib.platforms.none;
|
||||||
|
}
|
3
overlay.nix
Normal file
3
overlay.nix
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
final: prev: {
|
||||||
|
haskeleton = (import ./release.nix) prev;
|
||||||
|
}
|
47
release.nix
Normal file
47
release.nix
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
bspkgs:
|
||||||
|
let
|
||||||
|
dontCheckPackages = [ ];
|
||||||
|
doJailbreakPackages = [ ];
|
||||||
|
dontHaddockPackages = [ ];
|
||||||
|
config = {
|
||||||
|
packageOverrides = pkgs: rec {
|
||||||
|
haskellPackages =
|
||||||
|
let
|
||||||
|
generatedOverrides = haskellPackagesNew: haskellPackagesOld:
|
||||||
|
let
|
||||||
|
toPackage = file: _: {
|
||||||
|
name = builtins.replaceStrings [ ".nix" ] [ "" ] file;
|
||||||
|
value = haskellPackagesNew.callPackage
|
||||||
|
( ./. + "/nix/${file}") { };
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.lib.mapAttrs' toPackage
|
||||||
|
(builtins.readDir ./nix);
|
||||||
|
makeOverrides =
|
||||||
|
function: names: haskellPackagesNew: haskellPackagesOld:
|
||||||
|
let
|
||||||
|
toPackage = name: {
|
||||||
|
inherit name;
|
||||||
|
value = function haskellPackagesOld.${name};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
builtins.listToAttrs (map toPackage names);
|
||||||
|
composeExtensionsList =
|
||||||
|
pkgs.lib.fold pkgs.lib.composeExtensions (_: _: {});
|
||||||
|
manualOverrides = haskellPackagesNew: haskellPackagesOld: {
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.haskellPackages.override {
|
||||||
|
overrides = composeExtensionsList [
|
||||||
|
generatedOverrides
|
||||||
|
(makeOverrides pkgs.haskell.lib.dontCheck dontCheckPackages)
|
||||||
|
(makeOverrides pkgs.haskell.lib.doJailbreak doJailbreakPackages)
|
||||||
|
(makeOverrides pkgs.haskell.lib.dontHaddock dontHaddockPackages)
|
||||||
|
manualOverrides
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
pkgs = import bspkgs.path { inherit config; system = bspkgs.system; };
|
||||||
|
in
|
||||||
|
pkgs.haskellPackages.haskeleton
|
Loading…
Reference in New Issue
Block a user