Compare commits

..

3 Commits

Author SHA1 Message Date
Paul Brinkmeier
3ff0dc79d5 Add aarch64-linux target and bump version 2025-07-13 12:06:11 +02:00
paul-brinkmeier
911e0f5f4f Force search index evaluation on startup 2025-07-10 23:15:52 +02:00
paul-brinkmeier
11ed38d364 Improve flake situation 2025-07-10 23:14:45 +02:00
5 changed files with 102 additions and 41 deletions

View File

@ -13,6 +13,9 @@
module Main (main) where module Main (main) where
import Control.DeepSeq (force)
import Control.Exception (evaluate)
import Control.Monad (void)
import Data.Char (chr) import Data.Char (chr)
import Data.FileEmbed (embedFile) import Data.FileEmbed (embedFile)
import Data.Foldable (for_) import Data.Foldable (for_)
@ -55,7 +58,12 @@ import qualified UToy.Names as Names
import qualified UToy.Parsers as Parsers import qualified UToy.Parsers as Parsers
main :: IO () main :: IO ()
main = Warp.run 3000 app main = do
-- Forced evaluation of Names.lowerNames to reduce number of thunks.
putStrLn "* Building search index"
void $ evaluate $ force Names.lowerNames
putStrLn "* Listening on http://localhost:3000"
Warp.run 3000 app
app :: Application app :: Application
app = serve (Proxy :: Proxy API) server app = serve (Proxy :: Proxy API) server

40
flake.lock generated
View File

@ -1,12 +1,30 @@
{ {
"nodes": { "nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1740243248, "lastModified": 1751290243,
"narHash": "sha256-GJ/fV5AE+4i38/eXmAgBZs4lKYXfScpxPYviUV8ujlk=", "narHash": "sha256-kNf+obkpJZWar7HZymXZbW+Rlk3HTEIMlpc6FCNz0Ds=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a6c4bfe37c51686c042b4bdb4e650a9414e96680", "rev": "5ab036a8d97cb9476fbe81b09076e6e91d15e1b6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -18,8 +36,24 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }
},
"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", "root": "root",

View File

@ -2,44 +2,62 @@
description = "Unicode toy"; description = "Unicode toy";
inputs.nixpkgs.url = "github:nixos/nixpkgs/release-24.11"; inputs.nixpkgs.url = "github:nixos/nixpkgs/release-24.11";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs }: outputs = { self, nixpkgs, flake-utils }:
let flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin"] (system:
pkgs = nixpkgs.legacyPackages.x86_64-linux; let
pkgs = import nixpkgs { inherit system; };
utoy = pkgs.haskellPackages.developPackage { inherit (pkgs.haskell.lib) compose;
root = ./.;
overrides = self: super: { # Fix broken unicode-data-names by overriding the version of the unicode-data package.
haskellPackagesOverrides = self: super: {
unicode-data = super.unicode-data_0_6_0; unicode-data = super.unicode-data_0_6_0;
unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names; unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names;
}; };
};
in {
packages.x86_64-linux = rec {
docker =
pkgs.dockerTools.buildImage {
name = "git.pbrinkmeier.de/paul/utoy";
tag = utoy.version;
config.Cmd = [ "${pkgs.haskell.lib.justStaticExecutables utoy}/bin/utoy" ];
};
default = utoy; utoy = pkgs.lib.pipe
}; # The basic package
(pkgs.haskellPackages.developPackage {
root = ./.;
overrides = haskellPackagesOverrides;
})
# And some build configuration.
# See https://nixos.org/manual/nixpkgs/unstable/#haskell-packaging-helpers.
[
# Remove warp which pulls GHC into the runtime deps for some reason.
(compose.overrideCabal (drv: {
postInstall = ''
remove-references-to -t ${pkgs.haskellPackages.warp} $out/bin/utoy
'';
}))
# Return only the bin folder to curb image size
compose.justStaticExecutables
];
in {
packages = rec {
docker =
pkgs.dockerTools.buildImage {
name = "git.pbrinkmeier.de/paul/utoy";
tag = utoy.version;
config.Cmd = [ "${utoy}/bin/utoy" ];
};
devShells.x86_64-linux.default = default = utoy;
(pkgs.haskellPackages.developPackage { };
root = ./.;
overrides = self: super: { devShells.default =
unicode-data = super.unicode-data_0_6_0; (pkgs.haskellPackages.developPackage {
unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names; root = ./.;
}; overrides = haskellPackagesOverrides;
modifier = drv: modifier = drv:
pkgs.haskell.lib.addBuildTools drv [ pkgs.haskell.lib.addBuildTools drv [
pkgs.cabal-install pkgs.cabal-install
pkgs.haskellPackages.implicit-hie pkgs.haskellPackages.implicit-hie
pkgs.haskell-language-server pkgs.haskell-language-server
]; ];
cabal2nixOptions = "--benchmark"; cabal2nixOptions = "--benchmark";
}).env; }).env;
}; });
} }

View File

@ -1,4 +1,4 @@
module UToy.Names (allNames, blockName, searchCaseInsensitive) where module UToy.Names (allNames, blockName, lowerNames, searchCaseInsensitive) where
import Data.Char (ord) import Data.Char (ord)
import Data.Maybe (maybeToList) import Data.Maybe (maybeToList)
@ -25,7 +25,7 @@ searchCaseInsensitive search = filter go [minBound..maxBound]
go c = any matches $ Vector.unsafeIndex lowerNames (ord c - ord minBound) go c = any matches $ Vector.unsafeIndex lowerNames (ord c - ord minBound)
matches t = Text.toLower search `Text.isInfixOf` t matches t = Text.toLower search `Text.isInfixOf` t
lowerNames :: Vector [Text] lowerNames :: Vector (Vector Text)
lowerNames = Vector.fromList $ map go [minBound..maxBound] lowerNames = Vector.fromList $ map go [minBound..maxBound]
where where
go = map Text.toLower . allNames go = Vector.fromList . map Text.toLower . allNames

View File

@ -1,7 +1,7 @@
cabal-version: 1.12 cabal-version: 1.12
name: utoy name: utoy
version: 0.6.2 version: 0.6.3
author: Paul Brinkmeier author: Paul Brinkmeier
maintainer: hallo@pbrinkmeier.de maintainer: hallo@pbrinkmeier.de
copyright: 2023 Paul Brinkmeier copyright: 2023 Paul Brinkmeier
@ -46,6 +46,7 @@ executable utoy
, base >=4.7 && <5 , base >=4.7 && <5
, blaze-html , blaze-html
, bytestring , bytestring
, deepseq
, file-embed , file-embed
, http-media , http-media
, servant-server , servant-server