mirror of
https://github.com/kmein/niveum
synced 2026-03-16 18:21:07 +01:00
138 lines
3.7 KiB
Nix
138 lines
3.7 KiB
Nix
{
|
||
lib,
|
||
runCommand,
|
||
fetchurl,
|
||
writeText,
|
||
writers,
|
||
coreutils,
|
||
dmenu,
|
||
gnused,
|
||
libnotify,
|
||
xclip,
|
||
xdotool,
|
||
gawk,
|
||
fetchFromGitHub,
|
||
}:
|
||
let
|
||
emoji-flags = builtins.fromJSON (
|
||
builtins.readFile "${
|
||
fetchFromGitHub {
|
||
owner = "matiassingers";
|
||
repo = "emoji-flags";
|
||
rev = "93ae74505d09bb55a3eb3a511f1dfc0dd60a5347";
|
||
sha256 = "10j73sx6jb250v37bz2p7w8big0v8da3r6kpqz9xcl667gl8svwx";
|
||
}
|
||
}/data.json"
|
||
);
|
||
emoji-flags-file = writeText "emoji-flags.txt" (
|
||
lib.strings.concatMapStringsSep "\n" (
|
||
{
|
||
emoji,
|
||
title,
|
||
...
|
||
}:
|
||
"${emoji} ${title}"
|
||
) emoji-flags
|
||
);
|
||
unicode-file = runCommand "unicode.txt" { } ''
|
||
${
|
||
writers.writePython3 "generate.py"
|
||
{
|
||
flakeIgnore = [
|
||
"E501"
|
||
"E722"
|
||
];
|
||
}
|
||
''
|
||
import csv
|
||
|
||
with open("${
|
||
fetchurl {
|
||
url = "https://unicode.org/Public/UCD/latest/ucd/UnicodeData.txt";
|
||
sha256 = "0wva6ygnh3wrzpzy0kcbc32hz1ydx3k2pqc5xkqrfw83cpnrlvl0";
|
||
}
|
||
}", "r") as unicode_data:
|
||
reader = csv.reader(unicode_data, delimiter=";")
|
||
next(reader) # skip first row containing \0
|
||
for row in reader:
|
||
codepoint = row[0]
|
||
name = row[1]
|
||
alternate_name = row[10]
|
||
try:
|
||
print(chr(int(codepoint, 16)), codepoint, name, alternate_name, sep=" ")
|
||
except:
|
||
continue
|
||
''
|
||
} > $out
|
||
'';
|
||
kaomoji-file = writeText "kaomoji.txt" ''
|
||
¯\(°_o)/¯ dunno lol shrug dlol
|
||
¯\_(ツ)_/¯ dunno lol shrug dlol
|
||
( ͡° ͜ʖ ͡°) lenny
|
||
¯\_( ͡° ͜ʖ ͡°)_/¯ lenny shrug dlol
|
||
( ゚д゚) aaah sad noo
|
||
ヽ(^o^)丿 hi yay hello
|
||
(^o^: ups hehe
|
||
(^∇^) yay
|
||
┗(`皿´)┛ angry argh
|
||
ヾ(^_^) byebye!! bye
|
||
<(^.^<) <(^.^)> (>^.^)> (7^.^)7 (>^.^<) dance
|
||
(-.-)Zzz... sleep
|
||
(∩╹□╹∩) oh noes woot
|
||
(╯°□°)╯ ┻━┻ table flip
|
||
(」゜ロ゜)」 why woot
|
||
(_゜_゜_) gloom I see you
|
||
༼ ༎ຶ ෴ ༎ຶ༽ sad
|
||
(\/) (°,,,,°) (\/) krebs
|
||
┳━┳ ヽ(ಠل͜ಠ)ノ putting table back
|
||
┻━┻︵ \(°□°)/ ︵ ┻━┻ flip all dem tablez
|
||
(`・ω・´) bear look
|
||
ᕦ(ຈل͜ຈ)ᕤ strong flex muscle bicep
|
||
ᕦ(ò_óˇ)ᕤ strong flex muscle bicep
|
||
(๑>ᴗ<๑) excite
|
||
(∩ ` -´)⊃━━☆゚.*・。゚ wizard spell magic
|
||
◕ ◡ ◕ puss in boots big eye
|
||
≋≋≋≋≋̯̫⌧̯̫(ˆ•̮ ̮•ˆ) nyan cat
|
||
ʕ•ᴥ•ʔ bear
|
||
(ԾɷԾ) adventure time
|
||
(⁀ᗢ⁀) happy yay
|
||
(≧◡≦) happy yay
|
||
\(º □ º )/ panic
|
||
𓂺 penis
|
||
𓂸 penis
|
||
'';
|
||
in
|
||
# ref https://github.com/LukeSmithxyz/voidrice/blob/9fe6802122f6e0392c7fe20eefd30437771d7f8e/.local/bin/dmenuunicode
|
||
writers.writeDashBin "unicodmenu" ''
|
||
history_file=$HOME/.cache/unicodmenu
|
||
touch "$history_file"
|
||
PATH=${
|
||
lib.makeBinPath [
|
||
coreutils
|
||
dmenu
|
||
gawk
|
||
gnused
|
||
libnotify
|
||
xclip
|
||
xdotool
|
||
]
|
||
}
|
||
|
||
all_characters() {
|
||
tac "$history_file"
|
||
cat ${kaomoji-file} ${unicode-file} ${emoji-flags-file}
|
||
}
|
||
|
||
chosen=$(all_characters | awk '!seen[$0]++' | dmenu -p unicode -i -l 10 | tee --append "$history_file" | sed "s/ .*//")
|
||
|
||
[ "$chosen" != "" ] || exit
|
||
|
||
echo "$chosen" | tr -d '\n' | xclip -selection clipboard
|
||
|
||
if [ -n "$1" ]; then
|
||
xdotool key Shift+Insert
|
||
else
|
||
notify-send --app-name="$(basename "$0")" "'$chosen' copied to clipboard." &
|
||
fi
|
||
''
|