From 1a2d9edc99661b8817418d02d8de6b40269cf942 Mon Sep 17 00:00:00 2001 From: Paul Brinkmeier Date: Sun, 2 Apr 2023 17:03:35 +0200 Subject: [PATCH] Make nix develop work --- README.md | 12 ++++++-- flake.nix | 80 ++++++++++++++++++++++++++----------------------- shell.nix | 17 ----------- stack-shell.nix | 10 ------- stack.yaml | 7 +---- 5 files changed, 53 insertions(+), 73 deletions(-) delete mode 100644 shell.nix delete mode 100644 stack-shell.nix diff --git a/README.md b/README.md index b75d1c8..ef53b1b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## Building the executable ``` -$ nix run +$ nix build ``` ## Building the Docker image @@ -18,6 +18,12 @@ $ docker load < $(nix-build nix/docker-image.nix) Includes Stack, `haskell-language-server`, `gen-hie` etc. ``` -# TODO -$ nix-shell +nix develop +``` + +## Running Stack and GHC + +``` +nix run .#stack +nix run .#ghc ``` diff --git a/flake.nix b/flake.nix index d045dce..e664880 100644 --- a/flake.nix +++ b/flake.nix @@ -12,58 +12,64 @@ pkgs = nixpkgs.legacyPackages.x86_64-linux.extend overlay; haskellPackages = pkgs.haskell.packages."${settings.ghc}"; + ghc = haskellPackages.ghcWithPackages haskellDeps; stack = pkgs.stdenv.mkDerivation { - pname = "stack"; - version = "0"; + name = "stack"; dontUnpack = true; dontConfigure = true; dontBuild = true; nativeBuildInputs = [ pkgs.makeWrapper ]; installPhase = '' makeWrapper ${pkgs.stack}/bin/stack $out/bin/stack \ - --add-flags '--no-nix --no-install-ghc' + --prefix PATH : ${ghc}/bin \ + --add-flags '--no-nix --system-ghc --no-install-ghc' ''; }; + utoy' = + { mkDerivation }: + mkDerivation { + version = "0.5"; + pname = "utoy"; + license = pkgs.lib.licenses.mit; + src = + let + buildFiles = [ + ./LICENSE + ./utoy.cabal + ./Setup.hs + ./app + ./src + ./static + ./test + ]; + in + pkgs.lib.sources.cleanSourceWith { + src = ./.; + filter = path: _type: pkgs.lib.any (prefix: pkgs.lib.hasPrefix (toString prefix) path) buildFiles; + }; + + libraryHaskellDepends = haskellDeps haskellPackages; + }; + utoy = pkgs.haskell.lib.justStaticExecutables (haskellPackages.callPackage utoy' {}); in { - packages.x86_64-linux.stack = stack; - packages.x86_64-linux.utoy = - let - utoy = - { mkDerivation }: - mkDerivation { - version = "0.5"; - pname = "utoy"; - license = pkgs.lib.licenses.mit; - src = - let - buildFiles = [ - ./LICENSE - ./utoy.cabal - ./Setup.hs - ./app - ./src - ./static - ./test - ]; - in - pkgs.lib.sources.cleanSourceWith { - src = ./.; - filter = path: _type: pkgs.lib.any (prefix: pkgs.lib.hasPrefix (toString prefix) path) buildFiles; - }; + packages.x86_64-linux = { + inherit ghc; + inherit stack; + inherit utoy; - libraryHaskellDepends = haskellDeps haskellPackages; - }; - in - pkgs.haskell.lib.justStaticExecutables (haskellPackages.callPackage utoy {}); + default = utoy; + }; - packages.x86_64-linux.default = self.packages.x86_64-linux.utoy; - - devShells.default = pkgs.mkShell { - buildInputs = [ + devShells.x86_64-linux.default = pkgs.mkShell { + packages = [ stack + ghc + + haskellPackages.haskell-language-server + haskellPackages.implicit-hie ]; shellHook = '' - PS1+=" (utoy)"; + PS1+="(utoy) "; ''; }; }; diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 04a9521..0000000 --- a/shell.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ pkgs ? import ./nix/pkgs.nix {} }: -let - haskellDeps = import ./nix/haskell-deps.nix; - settings = import ./nix/settings.nix; - haskellPackages = pkgs.haskell.packages."${settings.ghc}"; - - tools = with pkgs; [ - # haskell tools - stack - (haskellPackages.ghcWithPackages haskellDeps) - haskellPackages.haskell-language-server - haskellPackages.implicit-hie - ]; -in - pkgs.mkShellNoCC { - nativeBuildInputs = tools; - } diff --git a/stack-shell.nix b/stack-shell.nix deleted file mode 100644 index b3a2c03..0000000 --- a/stack-shell.nix +++ /dev/null @@ -1,10 +0,0 @@ -{}: -let - pkgs = import ./nix/pkgs.nix {}; - haskellDeps = import ./nix/haskell-deps.nix; - settings = import ./nix/settings.nix; -in - pkgs.haskell.lib.buildStackProject { - name = "utoy"; - ghc = pkgs.haskell.packages."${settings.ghc}".ghcWithPackages haskellDeps; - } diff --git a/stack.yaml b/stack.yaml index 82c52de..8f828e5 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,9 +1,4 @@ +# You can get a working environment using nix develop. resolver: ghc-9.4.4 -# GHC is managed through Nix -install-ghc: false packages: - . -nix: - enable: true - shell-file: stack-shell.nix - path: ["nixpkgs=./nix/pkgs.nix"]