summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix7
-rw-r--r--src/main.rs31
2 files changed, 35 insertions, 3 deletions
diff --git a/flake.nix b/flake.nix
index 8106847..346c559 100644
--- a/flake.nix
+++ b/flake.nix
@@ -20,7 +20,7 @@
toolchain = fenix.packages.x86_64-linux.minimal.toolchain;
in {
devShells.x86_64-linux.default = pkgs.mkShell {
- buildInputs = [toolchain];
+ buildInputs = [toolchain pkgs.xvfb-run];
shellHook = ''
export RUSTUP_TOOLCHAIN=${toolchain}
'';
@@ -30,7 +30,12 @@
cargo = toolchain;
rustc = toolchain;
}).buildPackage {
+ nativeBuildInputs = [pkgs.makeWrapper];
src = ./.;
+ postInstall = ''
+ wrapProgram $out/bin/anki-cli \
+ --prefix PATH : ${pkgs.xvfb-run}/bin
+ '';
};
};
}
diff --git a/src/main.rs b/src/main.rs
index 5eb84b4..15e12dc 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,7 +7,12 @@ use crossterm::{
terminal::*,
};
use nanohtml2text::html2text;
-use std::io::stdout;
+use std::{
+ io::stdout,
+ process::{Command, Stdio},
+ thread,
+ time::Duration,
+};
const GOOD: char = '3';
const AGAIN: char = '1';
@@ -22,7 +27,29 @@ fn main() {
fn init(anki: &AnkiClient) {
clear_screen();
- let decks = anki.request(DeckNamesRequest {}).unwrap();
+ let mut decks = anki.request(DeckNamesRequest {});
+ if let Err(_) = decks {
+ clear_screen();
+ display_text("initializing headless anki...");
+ Command::new("bash")
+ .arg("-c")
+ .arg("QT_QPA_PLATFORM=xcb xvfb-run -a anki")
+ .stdin(Stdio::null())
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .spawn()
+ .unwrap();
+ loop {
+ thread::sleep(Duration::from_secs(1));
+ display_text(".");
+ decks = anki.request(DeckNamesRequest {});
+ if let Ok(_) = decks {
+ clear_screen();
+ break;
+ }
+ }
+ }
+ let decks = decks.unwrap();
for (index, title) in decks.clone().into_iter().enumerate() {
// 0th index is Default, which is not predictable
if index > 0 {