From 84ca20017bb8e36e11ebdf9ae9939230ba531fd9 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Dec 2021 21:33:22 +0100 Subject: [PATCH 01/12] pythonPackages.pscript: init at 0.7.6 Signed-off-by: Matthias Beyer --- .../python-modules/pscript/default.nix | 29 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 pkgs/development/python-modules/pscript/default.nix diff --git a/pkgs/development/python-modules/pscript/default.nix b/pkgs/development/python-modules/pscript/default.nix new file mode 100644 index 000000000000..5e200c1d406f --- /dev/null +++ b/pkgs/development/python-modules/pscript/default.nix @@ -0,0 +1,29 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +}: + +buildPythonPackage rec { + pname = "pscript"; + version = "0.7.6"; + + # PyPI tarball doesn't include tests directory + src = fetchFromGitHub { + owner = "flexxui"; + repo = pname; + rev = "v${version}"; + sha256 = "169px5n4jjnpdn9y86f28qwd95bwf1q1rz0a1h3lb5nn5c6ym8c4"; + }; + + doCheck = false; + + meta = with lib; { + description = "Python to JavaScript compiler"; + license = licenses.bsd2; + homepage = "https://pscript.readthedocs.io"; + maintainers = [ maintainers.matthiasbeyer ]; + }; +} + + + diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3808da50d76a..e5239298bf88 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6330,6 +6330,8 @@ in { psautohint = callPackage ../development/python-modules/psautohint { }; + pscript = callPackage ../development/python-modules/pscript { }; + psd-tools = callPackage ../development/python-modules/psd-tools { }; psutil = callPackage ../development/python-modules/psutil { }; From 4f44ede48e9e8b8c2849f247f514d61e11149649 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Dec 2021 21:33:53 +0100 Subject: [PATCH 02/12] pythonPackages.itemdb: init at 1.1.1 Signed-off-by: Matthias Beyer --- .../python-modules/itemdb/default.nix | 26 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 pkgs/development/python-modules/itemdb/default.nix diff --git a/pkgs/development/python-modules/itemdb/default.nix b/pkgs/development/python-modules/itemdb/default.nix new file mode 100644 index 000000000000..f9afc4c5cb36 --- /dev/null +++ b/pkgs/development/python-modules/itemdb/default.nix @@ -0,0 +1,26 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +}: + +buildPythonPackage rec { + pname = "itemdb"; + version = "1.1.1"; + + # PyPI tarball doesn't include tests directory + src = fetchFromGitHub { + owner = "almarklein"; + repo = pname; + rev = "v${version}"; + sha256 = "0ksad5j91nlbsn0a11clf994qz7r9ijand5hxnjhgd66i9hl3y78"; + }; + + meta = with lib; { + description = "Easy transactional database for Python dicts, backed by SQLite"; + license = licenses.bsd2; + homepage = "https://itemdb.readthedocs.io"; + maintainers = [ maintainers.matthiasbeyer ]; + }; +} + + diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e5239298bf88..9911784f728a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4055,6 +4055,8 @@ in { itemadapter = callPackage ../development/python-modules/itemadapter { }; + itemdb = callPackage ../development/python-modules/itemdb { }; + itemloaders = callPackage ../development/python-modules/itemloaders { }; iterm2 = callPackage ../development/python-modules/iterm2 { }; From e9d1e53c6ebbfe512d3fd8ea76a428eb7cf3a2e5 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Dec 2021 21:34:15 +0100 Subject: [PATCH 03/12] pythonPackages.asgineer: init at 0.8.1 Signed-off-by: Matthias Beyer --- .../python-modules/asgineer/default.nix | 27 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 pkgs/development/python-modules/asgineer/default.nix diff --git a/pkgs/development/python-modules/asgineer/default.nix b/pkgs/development/python-modules/asgineer/default.nix new file mode 100644 index 000000000000..082fa7a056fe --- /dev/null +++ b/pkgs/development/python-modules/asgineer/default.nix @@ -0,0 +1,27 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +}: + +buildPythonPackage rec { + pname = "asgineer"; + version = "0.8.1"; + + # PyPI tarball doesn't include tests directory + src = fetchFromGitHub { + owner = "almarklein"; + repo = pname; + rev = "v${version}"; + sha256 = "0hd1i9pc8m7sc8bkn31q4ygkmnl5vklrcziq9zkdiqaqm8clyhcx"; + }; + + doCheck = false; + + meta = with lib; { + description = "A really thin ASGI web framework"; + license = licenses.bsd2; + homepage = "https://asgineer.readthedocs.io"; + maintainers = [ maintainers.matthiasbeyer ]; + }; +} + diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9911784f728a..13ed5ccc9b27 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -634,6 +634,8 @@ in { asgi-csrf = callPackage ../development/python-modules/asgi-csrf { }; + asgineer = callPackage ../development/python-modules/asgineer { }; + asgiref = callPackage ../development/python-modules/asgiref { }; asmog = callPackage ../development/python-modules/asmog { }; From a2a43df955355e4679acc04dc71a7c737950dd60 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Dec 2021 21:34:40 +0100 Subject: [PATCH 04/12] timetagger: init at 21.11.2 Signed-off-by: Matthias Beyer --- .../python-modules/timetagger/default.nix | 36 +++++++++++++++++ pkgs/servers/timetagger/default.nix | 39 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + pkgs/top-level/python-packages.nix | 2 + 4 files changed, 79 insertions(+) create mode 100644 pkgs/development/python-modules/timetagger/default.nix create mode 100644 pkgs/servers/timetagger/default.nix diff --git a/pkgs/development/python-modules/timetagger/default.nix b/pkgs/development/python-modules/timetagger/default.nix new file mode 100644 index 000000000000..b83b287782a1 --- /dev/null +++ b/pkgs/development/python-modules/timetagger/default.nix @@ -0,0 +1,36 @@ +{ lib +, python3Packages +, fetchFromGitHub +}: + +python3Packages.buildPythonPackage rec { + pname = "timetagger"; + version = "21.11.2"; + + src = fetchFromGitHub { + owner = "almarklein"; + repo = pname; + rev = "v${version}"; + sha256 = "0fyxlm5l3xhbp2p9di51pkkb65mrwzyix74nizr2ady43ylpm07p"; + }; + + meta = with lib; { + homepage = "https://timetagger.app"; + license = licenses.gpl3; + description = "Tag your time, get the insight"; + maintainers = with maintainers; [ matthiasbeyer ]; + }; + + doCheck = false; + + propagatedBuildInputs = with python3Packages; [ + asgineer + itemdb + jinja2 + markdown + pscript + pyjwt + uvicorn + ]; + +} diff --git a/pkgs/servers/timetagger/default.nix b/pkgs/servers/timetagger/default.nix new file mode 100644 index 000000000000..5e4629f455b2 --- /dev/null +++ b/pkgs/servers/timetagger/default.nix @@ -0,0 +1,39 @@ +{ lib +, pkgs +, python3Packages +, fetchFromGitHub + +, addr ? "127.0.0.1" +, port ? 8082 +}: + +# +# Timetagger itself is a library that a user must write a "run.py" script for +# We provide a basic "run.py" script with this package, which simply starts +# timetagger. +# + +let + tt = python3Packages.timetagger; +in +python3Packages.buildPythonPackage rec { + pname = tt.name; + version = tt.version; + src = tt.src; + meta = tt.meta; + + propagatedBuildInputs = [ tt ] + ++ (with python3Packages; [ + setuptools + ]); + + format = "custom"; + installPhase = '' + mkdir -p $out/bin + echo "#!${pkgs.python3}/bin/python3" >> $out/bin/timetagger + cat run.py >> $out/bin/timetagger + sed -Ei 's,0\.0\.0\.0:80,${addr}:${toString port},' $out/bin/timetagger + chmod +x $out/bin/timetagger + ''; +} + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ff2ae2087025..a33026a55491 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10200,6 +10200,8 @@ with pkgs; timetrap = callPackage ../applications/office/timetrap { }; + timetagger = callPackage ../servers/timetagger { }; + timekeeper = callPackage ../applications/office/timekeeper { }; timezonemap = callPackage ../development/libraries/timezonemap { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 13ed5ccc9b27..324c9ce46fcc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9719,6 +9719,8 @@ in { timeout-decorator = callPackage ../development/python-modules/timeout-decorator { }; + timetagger = callPackage ../development/python-modules/timetagger { }; + timezonefinder = callPackage ../development/python-modules/timezonefinder { }; tinycss2 = callPackage ../development/python-modules/tinycss2 { }; From f3eaf668820a41ec78a6b6d8aedb078b4a87372e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 20 Dec 2021 18:37:01 +0100 Subject: [PATCH 05/12] Add service module for timetagger Signed-off-by: Matthias Beyer --- .../modules/services/web-apps/timetagger.nix | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 nixos/modules/services/web-apps/timetagger.nix diff --git a/nixos/modules/services/web-apps/timetagger.nix b/nixos/modules/services/web-apps/timetagger.nix new file mode 100644 index 000000000000..9dad949b0930 --- /dev/null +++ b/nixos/modules/services/web-apps/timetagger.nix @@ -0,0 +1,77 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkEnableOption mkIf mkOption types literalExpression; + + cfg = config.services.timetagger; +in { + + options = { + services.timetagger = { + enable = mkEnableOption '' + Tag your time, get the insight + + + This app does not do authentication. + You must setup authentication yourself or run it in an environment where + only allowed users have access. + + ''; + + bindAddr = mkOption { + description = "Address to bind to."; + type = types.str; + default = "127.0.0.1"; + }; + + port = mkOption { + description = "Port to bind to."; + type = types.port; + default = 8080; + }; + + package = mkOption { + description = '' + Use own package for starting timetagger web application. + + The ${literalExpression ''pkgs.timetagger''} package only provides a + "run.py" script for the actual package + ${literalExpression ''pkgs.python3Packages.timetagger''}. + + If you want to provide a "run.py" script for starting timetagger + yourself, you can do so with this option. + If you do so, the 'bindAddr' and 'port' options are ignored. + ''; + + default = null; + type = types.package; + }; + }; + }; + + config = let + timetaggerPkg = if !isNull cfg.package then cfg.package else + pkgs.timetagger.overwriteAttrs { + addr = cfg.bindAddr; + port = cfg.port; + }; + + in mkIf cfg.enable { + systemd.services.timetagger = { + description = "Timetagger service"; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + User = "timetagger"; + Group = "timetagger"; + StateDirectory = "timetagger"; + + ExecStart = "${timetaggerPkg}/bin/timetagger"; + + Restart = "on-failure"; + RestartSec = 1; + }; + }; + }; +} + From a24dc8d2ef61ccbd16f2a046c83be2e5ab2bdd9a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 21 Dec 2021 10:08:53 +0100 Subject: [PATCH 06/12] timetagger: Use default value for package option Signed-off-by: Matthias Beyer Suggested-by: Aaron Andersen --- .../modules/services/web-apps/timetagger.nix | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/nixos/modules/services/web-apps/timetagger.nix b/nixos/modules/services/web-apps/timetagger.nix index 9dad949b0930..085bd57872d5 100644 --- a/nixos/modules/services/web-apps/timetagger.nix +++ b/nixos/modules/services/web-apps/timetagger.nix @@ -43,20 +43,19 @@ in { If you do so, the 'bindAddr' and 'port' options are ignored. ''; - default = null; + default = pkgs.timetagger.override { addr = cfg.bindAddr; port = cfg.port; }; + defaultText = literalExpression '' + pkgs.timetagger.override { + addr = ${cfg.bindAddr}; + port = ${cfg.port}; + }; + ''; type = types.package; }; }; }; - config = let - timetaggerPkg = if !isNull cfg.package then cfg.package else - pkgs.timetagger.overwriteAttrs { - addr = cfg.bindAddr; - port = cfg.port; - }; - - in mkIf cfg.enable { + config = mkIf cfg.enable { systemd.services.timetagger = { description = "Timetagger service"; wantedBy = [ "multi-user.target" ]; @@ -66,7 +65,7 @@ in { Group = "timetagger"; StateDirectory = "timetagger"; - ExecStart = "${timetaggerPkg}/bin/timetagger"; + ExecStart = "${cfg.package}/bin/timetagger"; Restart = "on-failure"; RestartSec = 1; From 87419823ada3f19b0c5fc5cac26614b8c48417ac Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 21 Dec 2021 19:33:39 +0100 Subject: [PATCH 07/12] pythonPackages.asgineer: Add test inputs Signed-off-by: Matthias Beyer Suggested-by: Joachim Ernst --- pkgs/development/python-modules/asgineer/default.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/asgineer/default.nix b/pkgs/development/python-modules/asgineer/default.nix index 082fa7a056fe..3a1861bbd182 100644 --- a/pkgs/development/python-modules/asgineer/default.nix +++ b/pkgs/development/python-modules/asgineer/default.nix @@ -1,6 +1,8 @@ { lib , buildPythonPackage , fetchFromGitHub +, pytestCheckHook +, requests }: buildPythonPackage rec { @@ -15,7 +17,10 @@ buildPythonPackage rec { sha256 = "0hd1i9pc8m7sc8bkn31q4ygkmnl5vklrcziq9zkdiqaqm8clyhcx"; }; - doCheck = false; + checkInputs = [ + pytestCheckHook + requests + ]; meta = with lib; { description = "A really thin ASGI web framework"; From 6304e619bca38074a1933a62993a87dee1df226f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 21 Dec 2021 19:33:39 +0100 Subject: [PATCH 08/12] pythonPackages.timetagger: Add test inputs Signed-off-by: Matthias Beyer Suggested-by: Joachim Ernst --- .../python-modules/timetagger/default.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/timetagger/default.nix b/pkgs/development/python-modules/timetagger/default.nix index b83b287782a1..c437dcaa9865 100644 --- a/pkgs/development/python-modules/timetagger/default.nix +++ b/pkgs/development/python-modules/timetagger/default.nix @@ -1,6 +1,8 @@ { lib , python3Packages , fetchFromGitHub +, pytestCheckHook +, requests }: python3Packages.buildPythonPackage rec { @@ -21,7 +23,16 @@ python3Packages.buildPythonPackage rec { maintainers = with maintainers; [ matthiasbeyer ]; }; - doCheck = false; + checkInputs = [ + pytestCheckHook + requests + ]; + + preCheck = '' + # https://github.com/NixOS/nixpkgs/issues/12591 + mkdir -p check-phase + export HOME=$(pwd)/check-phase + ''; propagatedBuildInputs = with python3Packages; [ asgineer From b90efe70883d5de9ccd4aa99f56f83b483fe4b97 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 21 Dec 2021 19:33:39 +0100 Subject: [PATCH 09/12] pythonPackages.pscript: Add test inputs Signed-off-by: Matthias Beyer Suggested-by: Joachim Ernst --- pkgs/development/python-modules/pscript/default.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/pscript/default.nix b/pkgs/development/python-modules/pscript/default.nix index 5e200c1d406f..fae2c8a42818 100644 --- a/pkgs/development/python-modules/pscript/default.nix +++ b/pkgs/development/python-modules/pscript/default.nix @@ -1,6 +1,8 @@ { lib , buildPythonPackage , fetchFromGitHub +, pytestCheckHook +, nodejs }: buildPythonPackage rec { @@ -15,7 +17,15 @@ buildPythonPackage rec { sha256 = "169px5n4jjnpdn9y86f28qwd95bwf1q1rz0a1h3lb5nn5c6ym8c4"; }; - doCheck = false; + checkInputs = [ + pytestCheckHook + nodejs + ]; + + preCheck = '' + # do not execute legacy tests + rm -rf pscript_legacy + ''; meta = with lib; { description = "Python to JavaScript compiler"; From 1f10b0434f96c8fc7b68ab32f245159e6dbc83fb Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Thu, 30 Dec 2021 09:40:24 +0100 Subject: [PATCH 10/12] timetagger: Make enable option with mkOption Signed-off-by: Matthias Beyer --- .../modules/services/web-apps/timetagger.nix | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/nixos/modules/services/web-apps/timetagger.nix b/nixos/modules/services/web-apps/timetagger.nix index 085bd57872d5..373f4fcd52f8 100644 --- a/nixos/modules/services/web-apps/timetagger.nix +++ b/nixos/modules/services/web-apps/timetagger.nix @@ -8,15 +8,19 @@ in { options = { services.timetagger = { - enable = mkEnableOption '' - Tag your time, get the insight + enable = mkOption { + type = types.bool; + default = false; + description = '' + Tag your time, get the insight - - This app does not do authentication. - You must setup authentication yourself or run it in an environment where - only allowed users have access. - - ''; + + This app does not do authentication. + You must setup authentication yourself or run it in an environment where + only allowed users have access. + + ''; + }; bindAddr = mkOption { description = "Address to bind to."; From 65aaf4e22dcf77a7559b4745f1e301059f9dff82 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Thu, 30 Dec 2021 09:43:06 +0100 Subject: [PATCH 11/12] Add timetagger to release notes Why the f*** would anyone ever add generated stuff to a git repository, where the sources for the generated stuff AND the scripts to generate them are in the repository? Signed-off-by: Matthias Beyer --- .../doc/manual/from_md/release-notes/rl-2205.section.xml | 8 ++++++++ nixos/doc/manual/release-notes/rl-2205.section.md | 2 ++ 2 files changed, 10 insertions(+) diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml index e77ca0a85218..50aa2ca3893f 100644 --- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml +++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml @@ -150,6 +150,14 @@ services.prosody-filer. + + + timetagger, + an open source time-tracker with an intuitive user experience + and powerful reporting. + services.timetagger. + +
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md index 5957f82bce92..a7f8f5a7f4e0 100644 --- a/nixos/doc/manual/release-notes/rl-2205.section.md +++ b/nixos/doc/manual/release-notes/rl-2205.section.md @@ -46,6 +46,8 @@ In addition to numerous new and upgraded packages, this release has the followin - [prosody-filer](https://github.com/ThomasLeister/prosody-filer), a server for handling XMPP HTTP Upload requests. Available at [services.prosody-filer](#opt-services.prosody-filer.enable). +- [timetagger](https://timetagger.app), an open source time-tracker with an intuitive user experience and powerful reporting. [services.timetagger](options.html#opt-services.timetagger.enable). + ## Backward Incompatibilities {#sec-release-22.05-incompatibilities} - `pkgs.ghc` now refers to `pkgs.targetPackages.haskellPackages.ghc`. From ab58c31ecb3ebf597f63e30ce34e80f3da87c0e0 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 15 Jan 2022 09:06:53 +0100 Subject: [PATCH 12/12] pythonPackages.timetagger: 21.11.2 -> 22.1.2 Signed-off-by: Matthias Beyer --- pkgs/development/python-modules/timetagger/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/timetagger/default.nix b/pkgs/development/python-modules/timetagger/default.nix index c437dcaa9865..58bf190495f4 100644 --- a/pkgs/development/python-modules/timetagger/default.nix +++ b/pkgs/development/python-modules/timetagger/default.nix @@ -7,13 +7,13 @@ python3Packages.buildPythonPackage rec { pname = "timetagger"; - version = "21.11.2"; + version = "22.1.2"; src = fetchFromGitHub { owner = "almarklein"; repo = pname; rev = "v${version}"; - sha256 = "0fyxlm5l3xhbp2p9di51pkkb65mrwzyix74nizr2ady43ylpm07p"; + sha256 = "0xrajx0iij7r70ch17m4y6ydyh368dn6nbjsv74pn1x8frd686rw"; }; meta = with lib; {