{ description = "Personal XMonad configuration."; inputs = { nixpkgs = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixpkgs-unstable"; }; flake-utils = { type = "github"; owner = "numtide"; repo = "flake-utils"; ref = "master"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-compat = { type = "github"; owner = "edolstra"; repo = "flake-compat"; ref = "master"; flake = false; }; pre-commit-hooks = { type = "github"; owner = "cachix"; repo = "pre-commit-hooks.nix"; ref = "master"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; }; }; outputs = inputs: with inputs; let name = "xmonad-ng"; in flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: let pkgs = import nixpkgs { inherit system; inputs = null; nixpkgs = nixpkgs.legacyPackages.${system}; }; package = { returnShellEnv ? false }: with pkgs; haskellPackages.developPackage { inherit name returnShellEnv; root = ./.; overrides = _: _: with haskellPackages; { xmonad = xmonad_0_17_0; xmonad-contrib = xmonad-contrib_0_17_0; }; modifier = drv: haskell.lib.addBuildTools drv (with haskellPackages; [ brittany cabal-install haskell-language-server hlint hpack stack ]); }; in { packages.${name} = package { }; defaultPackage = self.packages.${system}.${name}; checks.preCommit = pre-commit-hooks.lib.${system}.run { src = ./.; hooks = { nix-linter.enable = true; nixfmt.enable = true; hpack.enable = true; hlint.enable = true; yamllint.enable = true; brittany.enable = true; shellcheck.enable = true; shfmt = { enable = true; name = "shfmt"; entry = "${pkgs.shfmt}/bin/shfmt -s -w"; types = [ "shell" ]; }; prettier = { enable = true; types = [ ]; files = "\\.((yaml)|\\d)$"; }; }; }; devShells = { ${name} = package { returnShellEnv = true; }; preCommit = pkgs.mkShell { inherit (self.checks.${system}.preCommit) shellHook; }; }; devShell = self.devShells.${system}.${name}; }) // { # FIXME This exposes an attribute set of "system.package" thus making # importing this package from the overlay to look like this # "pkgs.xmonad-ng.${system}" which is fucking stupid. I have to fix that # somehow. overlay = _: _: { ${name} = self.defaultPackage; }; }; }