diff --git a/flake.lock b/flake.lock index 1d201d1..1f1ec9f 100644 --- a/flake.lock +++ b/flake.lock @@ -43,6 +43,24 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -85,6 +103,25 @@ "type": "github" } }, + "langtool-ngrams": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1752490825, + "narHash": "sha256-3TyLqwD0oWg78i5uNRdL0z/gffih/KvQRHXKmBlCRsY=", + "owner": "peperunas", + "repo": "nix-languagetool-ngram", + "rev": "33ad4c7cf3bbef86fd4f1e90d3ee1166afdf3d4e", + "type": "github" + }, + "original": { + "owner": "peperunas", + "repo": "nix-languagetool-ngram", + "type": "github" + } + }, "local-unstable": { "locked": { "lastModified": 0, @@ -146,6 +183,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1710631334, + "narHash": "sha256-rL5LSYd85kplL5othxK5lmAtjyMOBg390sGBTb3LRMM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c75037bbf9093a2acb617804ee46320d6d1fea5a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1752308619, "narHash": "sha256-pzrVLKRQNPrii06Rm09Q0i0dq3wt2t2pciT/GNq5EZQ=", @@ -161,7 +214,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1735264675, "narHash": "sha256-MgdXpeX2GuJbtlBrH9EdsUeWl/yXEubyvxM1G+yO4Ak=", @@ -200,7 +253,7 @@ }, "pepeflake": { "inputs": { - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1739457875, @@ -220,9 +273,10 @@ "inputs": { "agenix-flake": "agenix-flake", "home-manager": "home-manager_2", + "langtool-ngrams": "langtool-ngrams", "local-unstable": "local-unstable", "nixos-unstable": "nixos-unstable", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "nixpkgs-master": "nixpkgs-master", "nvidia-patch": "nvidia-patch", "pepeflake": "pepeflake" @@ -258,9 +312,24 @@ "type": "github" } }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "utils": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1710146030, diff --git a/flake.nix b/flake.nix index f6a9a92..b48e9ff 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,7 @@ url = "github:icewind1991/nvidia-patch-nixos"; inputs.nixpkgs.follows = "nixpkgs"; }; + langtool-ngrams.url = "github:peperunas/nix-languagetool-ngram"; }; outputs = @@ -26,6 +27,7 @@ , nvidia-patch , agenix-flake , pepeflake + , langtool-ngrams }: let sysLinuxX64 = "x86_64-linux"; @@ -65,6 +67,7 @@ localPkgs = importNixpkgs { flake = local-unstable; }; agenixPkgs = importNixpkgs { flake = agenix-flake; }; pepePkgs = pepeflake.packages.${system} // pepeflake.legacyPackages.${system} or { }; + langtoolPkgs = langtool-ngrams.packages.${system} // langtool-ngrams.legacyPackages.${system} or { }; additionalOverlays = [ (final: prev: { inherit unstablePkgs; }) @@ -72,6 +75,7 @@ (final: prev: { inherit agenixPkgs; }) (final: prev: { inherit masterPkgs; }) (final: prev: { inherit pepePkgs; }) + (final: prev: { inherit langtoolPkgs; }) ]; in import nixpkgs { diff --git a/hosts/architect/default.nix b/hosts/architect/default.nix index 003416f..0a09bb7 100644 --- a/hosts/architect/default.nix +++ b/hosts/architect/default.nix @@ -278,6 +278,11 @@ in enableBeets = true; beetsPackage = pkgs.unstablePkgs.beets; }; + + languagetool = { + enable = true; + domain = "lang.giugl.io"; + }; }; }; } diff --git a/modules/services/default.nix b/modules/services/default.nix index 6417f20..d618183 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -16,5 +16,6 @@ ./redlib ./sonarr ./headscale + ./languagetool ]; } diff --git a/modules/services/languagetool/default.nix b/modules/services/languagetool/default.nix new file mode 100644 index 0000000..e0a25d7 --- /dev/null +++ b/modules/services/languagetool/default.nix @@ -0,0 +1,47 @@ +{ config, pkgs, lib, ... }: + +let + inherit (lib) mkIf; + + cfg = config.pepe.services.languagetool; + + ngramDataDir = pkgs.symlinkJoin { + name = "languagetool-ngrams"; + paths = builtins.attrValues pkgs.langtoolPkgs; + }; +in +{ + options.pepe.services.languagetool = with lib; { + enable = mkEnableOption "Enable LanguageTool"; + package = mkPackageOption pkgs "languagetool" { }; + fasttextPackage = mkPackageOption pkgs "fasttext" {}; + domain = mkOption { + type = types.str; + default = null; + }; + }; + + config = mkIf cfg.enable { + pepe.core = { + vhost.hosts.${cfg.domain} = { + locations."/" = { + port = config.services.languagetool.port; + allowLAN = true; + allowVPN = true; + allowWAN = true; + }; + }; + }; + + services.languagetool = { + enable = true; + package = cfg.package; + allowOrigin = cfg.domain; + settings = { + languageModel = "${ngramDataDir}/share/languagetool/ngrams/"; + fasttextModel = "${pkgs.langtoolPkgs.fasttext}/share/languagetool/fasttextmodel/lid.176.bin"; + fasttextBinary = "${cfg.fasttextPackage}/bin/fasttext"; + }; + }; + }; +}