aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-01-25 16:03:35 -0800
committerRose Hogenson <rosehogenson@posteo.net>2025-01-25 16:03:35 -0800
commit1b4f73d38b0519956c5662472274a3a02b86d522 (patch)
treeae5b9ce1d5ed1820ca5e154ee6c003c1375c0d25
downloademoji-1b4f73d38b0519956c5662472274a3a02b86d522.tar.zst
Initial commit.
-rw-r--r--.gitignore1
-rw-r--r--flake.lock26
-rw-r--r--flake.nix78
3 files changed, 105 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c4a847d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/result
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..f3881b9
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,26 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1737746512,
+ "narHash": "sha256-nU6AezEX4EuahTO1YopzueAXfjFfmCHylYEFCagduHU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "825479c345a7f806485b7f00dbe3abb50641b083",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "ref": "nixos-unstable",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..fc3d36b
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,78 @@
+{
+ # Nixpkgs / NixOS version to use.
+ inputs.nixpkgs.url = "nixpkgs/nixos-unstable";
+
+ outputs = { self, nixpkgs }:
+ let
+
+ # to work with older version of flakes
+ lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101";
+
+ # Generate a user-friendly version number.
+ version = builtins.substring 0 8 lastModifiedDate;
+
+ # System types to support.
+ supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
+
+ # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'.
+ forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
+
+ # Nixpkgs instantiated for supported system types.
+ nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; overlays = [ self.overlay ]; });
+
+ in
+
+ {
+
+ # A Nixpkgs overlay.
+ overlay = final: prev: {
+
+ emoji = with final; stdenv.mkDerivation rec {
+ name = "emoji-${version}";
+
+ unpackPhase = ":";
+
+ buildInputs = with pkgs; [ unzip ];
+
+ src = ./.;
+
+ cldrVersion = "46";
+
+ emojiList = pkgs.fetchurl {
+ url = "https://unicode.org/Public/cldr/${cldrVersion}/core.zip";
+ sha256 = "sha256-+86cInWGKtJmaPs0eD/mwznz2S3f61oQoXdftYGBoV0=";
+ };
+
+ buildPhase = ''
+ unzip ${emojiList} common/annotations/en.xml
+ grep -E 'annotation cp="[^"]+">' <common/annotations/en.xml |
+ sed -E 's/\s+<annotation cp="//g; s/">/ /g; s|</annotation>||g; s/\s\|\s/, /g' > emoji_list
+
+ cat > emoji_picker << EOF
+ #!/bin/sh
+ ${bemenu}/bin/bemenu -i -l20 <$out/share/emoji_list | ${coreutils}/bin/cut -d' ' -f1 | ${wl-clipboard}/bin/wl-copy -n
+ EOF
+ chmod +x emoji_picker
+ '';
+
+ installPhase = ''
+ mkdir -p $out/{bin,share}
+ cp emoji_picker $out/bin/
+ cp emoji_list $out/share/
+ '';
+ };
+
+ };
+
+ # Provide some binary packages for selected system types.
+ packages = forAllSystems (system:
+ {
+ inherit (nixpkgsFor.${system}) emoji;
+ });
+
+ # The default package for 'nix build'. This makes sense if the
+ # flake provides only one package or there is a clear "main"
+ # package.
+ defaultPackage = forAllSystems (system: self.packages.${system}.emoji);
+ };
+}