Compare commits
	
		
			3 Commits
		
	
	
		
			7d7f628175
			...
			3ff0dc79d5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 3ff0dc79d5 | ||
|   | 911e0f5f4f | ||
|   | 11ed38d364 | 
							
								
								
									
										10
									
								
								app/Main.hs
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								app/Main.hs
									
									
									
									
									
								
							| @ -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
									
									
									
								
							
							
						
						
									
										40
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @ -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", | ||||||
|  | |||||||
							
								
								
									
										46
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								flake.nix
									
									
									
									
									
								
							| @ -2,37 +2,55 @@ | |||||||
|   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 }: | ||||||
|  |   flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin"] (system: | ||||||
|       let |       let | ||||||
|       pkgs = nixpkgs.legacyPackages.x86_64-linux; |         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; | ||||||
|         }; |         }; | ||||||
|       }; | 
 | ||||||
|  |         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 { |       in { | ||||||
|       packages.x86_64-linux = rec { |         packages = rec { | ||||||
|           docker = |           docker = | ||||||
|             pkgs.dockerTools.buildImage { |             pkgs.dockerTools.buildImage { | ||||||
|               name = "git.pbrinkmeier.de/paul/utoy"; |               name = "git.pbrinkmeier.de/paul/utoy"; | ||||||
|               tag = utoy.version; |               tag = utoy.version; | ||||||
|             config.Cmd = [ "${pkgs.haskell.lib.justStaticExecutables utoy}/bin/utoy" ]; |               config.Cmd = [ "${utoy}/bin/utoy" ]; | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|           default = utoy; |           default = utoy; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|       devShells.x86_64-linux.default = |         devShells.default = | ||||||
|           (pkgs.haskellPackages.developPackage { |           (pkgs.haskellPackages.developPackage { | ||||||
|             root = ./.; |             root = ./.; | ||||||
|           overrides = self: super: { |             overrides = haskellPackagesOverrides; | ||||||
|             unicode-data = super.unicode-data_0_6_0; |  | ||||||
|             unicode-data-names = pkgs.haskell.lib.markUnbroken super.unicode-data-names; |  | ||||||
|           }; |  | ||||||
|             modifier = drv: |             modifier = drv: | ||||||
|               pkgs.haskell.lib.addBuildTools drv [ |               pkgs.haskell.lib.addBuildTools drv [ | ||||||
|                 pkgs.cabal-install |                 pkgs.cabal-install | ||||||
| @ -41,5 +59,5 @@ | |||||||
|               ]; |               ]; | ||||||
|             cabal2nixOptions = "--benchmark"; |             cabal2nixOptions = "--benchmark"; | ||||||
|           }).env; |           }).env; | ||||||
|   }; |         }); | ||||||
| } | } | ||||||
|  | |||||||
| @ -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 | ||||||
|  | |||||||
| @ -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 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user