diff --git a/default.nix b/default.nix index f4d5739..2cccff2 100644 --- a/default.nix +++ b/default.nix @@ -1,12 +1,10 @@ -{ pkgs ? import {}, - extraDeps ? [] -}: - -let - pypkgs = pkgs.python38Packages; -in pypkgs.buildPythonPackage { - name = "intake"; - src = builtins.path { path = ./.; name = "intake"; }; - format = "pyproject"; - propagatedBuildInputs = with pypkgs; [ flask setuptools ] ++ extraDeps; -} +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).defaultNix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..b16eab7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,44 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1669833724, + "narHash": "sha256-/HEZNyGbnQecrgJnfE8d0WC5c1xuPSD2LUpB6YXlg4c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4d2b37a84fad1091b9de401eb450aae66f1a741e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..f390ac7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "A personal feed aggregator"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/22.11"; + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + }; + + outputs = { self, nixpkgs, flake-compat }: + let system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + packages.${system} = { + default = self.packages.${system}.intake; + intake = pkgs.python38Packages.buildPythonPackage { + name = "intake"; + src = builtins.path { path = ./.; name = "intake"; }; + format = "pyproject"; + propagatedBuildInputs = with pkgs.python38Packages; [ flask setuptools ]; + }; + }; + + devShells.${system} = { + default = let + pythonEnv = pkgs.python38.withPackages (pypkgs: with pypkgs; [ flask black pytest ]); + in pkgs.mkShell { + packages = [ pythonEnv pkgs.nixos-shell ]; + shellHook = '' + PS1="(develop) $PS1" + ''; + }; + }; + }; +} diff --git a/shell.nix b/shell.nix index 757aabc..6234bb4 100644 --- a/shell.nix +++ b/shell.nix @@ -1,12 +1,10 @@ -{ pkgs ? import {} }: - -let - extraDeps = [ - pkgs.nixos-shell - pkgs.python38Packages.black - pkgs.python38Packages.pytest - ]; - intake = import ./default.nix { - inherit pkgs extraDeps; - }; -in intake +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).shellNix