diff --git a/bash/nixpkgs/flake.lock b/bash/nixpkgs/flake.lock new file mode 100644 index 0000000..45fde49 --- /dev/null +++ b/bash/nixpkgs/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1722073938, + "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/bash/nixpkgs/flake.nix b/bash/nixpkgs/flake.nix new file mode 100644 index 0000000..9505679 --- /dev/null +++ b/bash/nixpkgs/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + systems.url = "github:nix-systems/default"; + }; + + outputs = { self, nixpkgs, systems, ... }: + let eachSystem = nixpkgs.lib.genAttrs (import systems); + in { + packages = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + soe = pkgs.callPackage ./package.nix {}; + default = self.packages.${system}.soe; + }); + }; +} diff --git a/bash/nixpkgs/package.nix b/bash/nixpkgs/package.nix new file mode 100644 index 0000000..20e14bc --- /dev/null +++ b/bash/nixpkgs/package.nix @@ -0,0 +1,17 @@ +{ stdenv +, bash +}: + +stdenv.mkDerivation { + pname = "soe"; + version = "1.0"; + + src = ./.; + + buildInputs = [ bash ]; + + installPhase = '' + mkdir -p $out/bin + cp soe $out/bin + ''; +} diff --git a/bash/nixpkgs/soe b/bash/nixpkgs/soe new file mode 100755 index 0000000..e861d8f --- /dev/null +++ b/bash/nixpkgs/soe @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +echo -n "Primes up to: " +read num +echo + +nums=() +for i in `seq 2 $num`; do + nums+=($i) +done + +unset nums[-1] + +while [ -n "$nums" ]; do + prime=${nums[0]} + echo -n "$prime " + nums_=() + for elem in "${nums[@]}"; do + [ $(( $elem % $prime )) -eq 0 ] || nums_+=($elem) + done + nums=(${nums_[@]}) +done + +echo diff --git a/fish/nixpkgs/flake.lock b/fish/nixpkgs/flake.lock new file mode 100644 index 0000000..c44d5a5 --- /dev/null +++ b/fish/nixpkgs/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1722141560, + "narHash": "sha256-Ul3rIdesWaiW56PS/Ak3UlJdkwBrD4UcagCmXZR9Z7Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "038fb464fcfa79b4f08131b07f2d8c9a6bcc4160", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/fish/nixpkgs/flake.nix b/fish/nixpkgs/flake.nix new file mode 100644 index 0000000..9505679 --- /dev/null +++ b/fish/nixpkgs/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + systems.url = "github:nix-systems/default"; + }; + + outputs = { self, nixpkgs, systems, ... }: + let eachSystem = nixpkgs.lib.genAttrs (import systems); + in { + packages = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + soe = pkgs.callPackage ./package.nix {}; + default = self.packages.${system}.soe; + }); + }; +} diff --git a/fish/nixpkgs/package.nix b/fish/nixpkgs/package.nix new file mode 100644 index 0000000..aaeb6d2 --- /dev/null +++ b/fish/nixpkgs/package.nix @@ -0,0 +1,17 @@ +{ stdenv +, fish +}: + +stdenv.mkDerivation { + pname = "soe"; + version = "1.0"; + + src = ./.; + + buildInputs = [ fish ]; + + installPhase = '' + mkdir -p $out/bin + cp soe $out/bin + ''; +} diff --git a/fish/nixpkgs/soe b/fish/nixpkgs/soe new file mode 100755 index 0000000..5cc2b5a --- /dev/null +++ b/fish/nixpkgs/soe @@ -0,0 +1,19 @@ +#!/usr/bin/env fish + +read -P "Primes up to: " num +echo + +set nums (seq 2 $num)[..-2] + +while test -n "$nums" + set prime $nums[1] + echo -n "$prime " + + set -e nums_ + for elem in $nums + test (math $elem % $prime) -eq 0 || set -a nums_ $elem + end + set nums $nums_ +end + +echo diff --git a/flake.lock b/flake.lock index 785f948..5999137 100644 --- a/flake.lock +++ b/flake.lock @@ -1,41 +1,6 @@ { "nodes": { - "flake-utils": { - "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1675132057, - "narHash": "sha256-lq7VYB8J2wn35CeByP9760tR6mwQtztPze+J8O4fHdU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5b374db81f4a26de2cef6dae71b4478b362866a4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" - } - } + "root": {} }, "root": "root", "version": 7 diff --git a/flake.nix b/flake.nix index cf65e5a..6164411 100644 --- a/flake.nix +++ b/flake.nix @@ -1,20 +1,43 @@ { - description = "The Sieve of Eratosthenes implemented in many different languages"; + description = "Templates of the Sieve of Eratosthenes implemented in various languages"; - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs"; - flake-utils.url = "github:numtide/flake-utils"; - }; + outputs = { self, ... }: + let + # Get all project directories + subdirs = dir: + let sub = builtins.readDir dir; + in builtins.filter + (d: sub.${d} == "directory") + (builtins.attrNames sub); - outputs = { self, nixpkgs, flake-utils, ... }: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = nixpkgs.legacyPackages.${system}; + vowelStart = str: builtins.elem (builtins.substring 0 1 str) [ "a" "e" "i" "o" "u" ]; - currentDir = builtins.readDir ./.; - dirs = pkgs.lib.filterAttrs (_: v: v == "directory") currentDir; - in { - packages = builtins.mapAttrs (dir: _: pkgs.callPackage ./${dir} {}) dirs; - devShells = builtins.mapAttrs (dir: _: pkgs.callPackage ./${dir}/shell.nix {}) dirs; - }); + concatMapAttrs = func: attr: + builtins.foldl' (x: y: x // y) {} + (builtins.map func attr); + + templateDirs = + builtins.concatMap (lang: + builtins.map + (pkg: { inherit lang pkg; }) + (subdirs ./${lang})) + (subdirs ./.); + in { + templates = concatMapAttrs ({ lang, pkg }: { + "${lang}-${pkg}" = { + description = "Packaging a${if vowelStart lang + then "n" + else ""} ${lang} executable using ${pkg}"; + path = builtins.filterSource + (path: type: builtins.baseNameOf path != "flake.lock") + ./${lang}/${pkg}; + }; + }) templateDirs // concatMapAttrs (lang: { + "${lang}" = self.templates."${lang}-nixpkgs" // { + description = "Packaging a${if vowelStart lang + then "n" + else ""} ${lang} executable"; + }; + }) (subdirs ./.); + }; } diff --git a/python/.envrc b/python/nixpkgs/.envrc similarity index 100% rename from python/.envrc rename to python/nixpkgs/.envrc diff --git a/python/bin/soe-python b/python/nixpkgs/bin/soe old mode 100644 new mode 100755 similarity index 100% rename from python/bin/soe-python rename to python/nixpkgs/bin/soe diff --git a/python/nixpkgs/flake.lock b/python/nixpkgs/flake.lock new file mode 100644 index 0000000..c44d5a5 --- /dev/null +++ b/python/nixpkgs/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1722141560, + "narHash": "sha256-Ul3rIdesWaiW56PS/Ak3UlJdkwBrD4UcagCmXZR9Z7Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "038fb464fcfa79b4f08131b07f2d8c9a6bcc4160", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/python/nixpkgs/flake.nix b/python/nixpkgs/flake.nix new file mode 100644 index 0000000..9505679 --- /dev/null +++ b/python/nixpkgs/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + systems.url = "github:nix-systems/default"; + }; + + outputs = { self, nixpkgs, systems, ... }: + let eachSystem = nixpkgs.lib.genAttrs (import systems); + in { + packages = eachSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + soe = pkgs.callPackage ./package.nix {}; + default = self.packages.${system}.soe; + }); + }; +} diff --git a/python/default.nix b/python/nixpkgs/package.nix similarity index 68% rename from python/default.nix rename to python/nixpkgs/package.nix index 76a15d5..961c388 100644 --- a/python/default.nix +++ b/python/nixpkgs/package.nix @@ -1,7 +1,7 @@ -{ python3, ... }: +{ python3 }: python3.pkgs.buildPythonApplication { - pname = "soe-python"; + pname = "soe"; version = "1.0"; src = ./.; diff --git a/python/setup.py b/python/nixpkgs/setup.py similarity index 71% rename from python/setup.py rename to python/nixpkgs/setup.py index 0e31be3..158092b 100644 --- a/python/setup.py +++ b/python/nixpkgs/setup.py @@ -3,5 +3,5 @@ from setuptools import setup setup( name="soe", version="1.0.0", - scripts=["bin/soe-python"] + scripts=["bin/soe"] ) diff --git a/python/shell.nix b/python/nixpkgs/shell.nix similarity index 53% rename from python/shell.nix rename to python/nixpkgs/shell.nix index 5feafb5..332eaff 100644 --- a/python/shell.nix +++ b/python/nixpkgs/shell.nix @@ -1,2 +1,3 @@ -{ python3, ... }: +{ python3 }: + python3.buildEnv.env diff --git a/python/soe/__init__.py b/python/nixpkgs/soe/__init__.py similarity index 100% rename from python/soe/__init__.py rename to python/nixpkgs/soe/__init__.py diff --git a/python/soe/main.py b/python/nixpkgs/soe/main.py similarity index 59% rename from python/soe/main.py rename to python/nixpkgs/soe/main.py index 23f1cf2..f6a1425 100644 --- a/python/soe/main.py +++ b/python/nixpkgs/soe/main.py @@ -1,5 +1,4 @@ - def sieve_of_eratosthenes(n): nums = list(range(2, n)) while nums: @@ -8,18 +7,11 @@ def sieve_of_eratosthenes(n): yield prime def main(): - num = 0 - another = True - while another: - try: - num = int(input()) - another = False - except ValueError: - pass - + num = int(input("Primes up to: ")) print() for i in sieve_of_eratosthenes(num): - print(i) + print(i, end=" ") + print() if __name__ == "__main__":