diff --git a/pkgs/by-name/oa/oatmeal/001-get-themes-and-syntaxes-from-nix-src.patch b/pkgs/by-name/oa/oatmeal/001-get-themes-and-syntaxes-from-nix-src.patch deleted file mode 100644 index 8aa738bd1de90..0000000000000 --- a/pkgs/by-name/oa/oatmeal/001-get-themes-and-syntaxes-from-nix-src.patch +++ /dev/null @@ -1,242 +0,0 @@ -diff --git a/build.rs b/build.rs -index a263377..e63cf0e 100644 ---- a/build.rs -+++ b/build.rs -@@ -5,25 +5,13 @@ use std::collections::HashMap; - use std::env; - use std::fs; - use std::io::prelude::*; --use std::io::Cursor; - use std::path::PathBuf; - - use anyhow::anyhow; - use anyhow::Result; --use flate2::read::GzDecoder; --use glob_match::glob_match; - use syntect::parsing::SyntaxSetBuilder; --use tar::Archive; - use vergen::EmitBuilder; - --#[derive(Debug)] --struct SyntaxDownload<'a> { -- name: &'a str, -- url: &'a str, -- files: Vec<&'a str>, -- keep_folders: bool, --} -- - pub fn get_project_root() -> Result { - let path = env::current_dir()?; - let path_ancestors = path.as_path().ancestors(); -@@ -39,172 +27,13 @@ pub fn get_project_root() -> Result { - return Err(anyhow!("Root directory for rust project not found.")); - } - --fn get_cache_dir() -> Result { -- let out_dir = env::var("OUT_DIR").unwrap(); -- if env::var("OPT_LEVEL").unwrap_or_else(|_| return "0".to_string()) == "3" -- || out_dir.contains("target/package/") -- { -- return Ok(PathBuf::from(out_dir).join(".cache")); -- } -- -- return Ok(get_project_root()?.join(".cache")); --} -- --fn download_files( -- download_folder: PathBuf, -- url: &str, -- files: Vec<&str>, -- keep_folders: bool, --) -> Result<()> { -- fs::create_dir_all(download_folder.clone())?; -- -- let bytes = reqwest::blocking::get(url)?.bytes()?; -- let tar = GzDecoder::new(Cursor::new(bytes)); -- let mut archive = Archive::new(tar); -- -- archive -- .entries()? -- .filter_map(|e| return e.ok()) -- .map(|mut entry| -> Result { -- let filepath = entry.path()?.to_string_lossy().to_string(); -- let filename = entry -- .path()? -- .file_name() -- .unwrap() -- .to_string_lossy() -- .to_string(); -- -- for req_file in files.clone().into_iter() { -- if glob_match(&format!("*/{req_file}"), &filepath) { -- if keep_folders { -- let dir = entry -- .path()? -- .parent() -- .unwrap() -- .components() -- .enumerate() -- .filter_map(|(idx, p)| { -- if idx == 0 { -- return None; -- } -- return Some(p); -- }) -- .collect::() -- .to_string_lossy() -- .to_string(); -- -- if dir.is_empty() { -- entry.unpack(download_folder.clone().join(filename.clone()))?; -- } else { -- fs::create_dir_all(download_folder.clone().join(dir.clone()))?; -- entry.unpack( -- download_folder.clone().join(format!("{dir}/{filename}")), -- )?; -- } -- } else { -- entry.unpack(download_folder.clone().join(filename.clone()))?; -- } -- return Ok(filename); -- } -- } -- -- return Err(anyhow!("No matching file")); -- }) -- .filter_map(|e| return e.ok()) -- .for_each(|x| println!("> {}", x)); -- -- return Ok(()); --} -- - fn get_syntaxes() -> Result<()> { -- let out_dir = get_cache_dir()?.join("syntaxes"); -+ let out_dir = PathBuf::from("@syntaxes_dir@"); - let syntax_bin = out_dir.join("syntaxes.bin"); - println!( - "cargo:rustc-env=OATMEAL_SYNTAX_BIN={}", - syntax_bin.clone().to_str().unwrap() - ); -- println!( -- "cargo:rerun-if-changed={}", -- syntax_bin.clone().to_str().unwrap() -- ); -- -- if syntax_bin.exists() { -- return Ok(()); -- } -- -- let downloads: Vec = vec![ -- SyntaxDownload { -- name: "sublime-packages", -- url: "https://github.com/sublimehq/Packages/archive/759d6eed9b4beed87e602a23303a121c3a6c2fb3.tar.gz", -- files: vec!["LICENSE", "*/LICENSE", "*/LICENSE.*", "*/*.sublime-syntax"], -- keep_folders: true -- }, -- SyntaxDownload { -- name: "bat", -- url: -- "https://github.com/sharkdp/bat/archive/7658334645936d2a956fb19aa96e6fca849cb754.tar.gz", -- files: vec!["LICENSE-MIT", "assets/syntaxes/02_Extra/*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "GraphQL-SublimeText3", -- url: -- "https://github.com/dncrews/GraphQL-SublimeText3/archive/9b6f6d0a86d7e7ef1d44490b107472af7fb4ffaf.tar.gz", -- files: vec!["LICENSE", "*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "protobuf-syntax-highlighting", -- url: -- "https://github.com/VcamX/protobuf-syntax-highlighting/archive/726e21d74dac23cbb036f2fbbd626decdc954060.tar.gz", -- files: vec!["LICENSE", "*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "sublime-zig-language", -- url: -- "https://github.com/ziglang/sublime-zig-language/archive/1a4a38445fec495817625bafbeb01e79c44abcba.tar.gz", -- files: vec!["LICENSE", "Syntaxes/*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "Terraform.tmLanguage", -- url: -- "https://github.com/alexlouden/Terraform.tmLanguage/archive/54d8350c3c5929c921ea7561c932aa15e7d96c48.tar.gz", -- files: vec!["LICENSE", "*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "sublime_toml_highlighting", -- url: -- "https://github.com/jasonwilliams/sublime_toml_highlighting/archive/fd0bf3e5d6c9e6397c0dc9639a0514d9bf55b800.tar.gz", -- files: vec!["LICENSE", "*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "elixir-sublime-syntax", -- url: -- "https://github.com/princemaple/elixir-sublime-syntax/archive/4fb01891dd17434dde42887bc821917a30f4e010.tar.gz", -- files: vec!["LICENSE", "*.sublime-syntax"], -- keep_folders: false -- }, -- SyntaxDownload { -- name: "sublime-text-gleam", -- url: -- "https://github.com/digitalcora/sublime-text-gleam/archive/0b032f78c9c4aec1c598da1d25c67ca21fa8c381.tar.gz", -- files: vec!["LICENSE", "package/*.sublime-syntax"], -- keep_folders: false -- }, -- ]; -- -- for download in downloads { -- download_files( -- out_dir.join(download.name), -- download.url, -- download.files, -- download.keep_folders, -- )?; -- } - - let mut builder = SyntaxSetBuilder::new(); - builder.add_plain_text_syntax(); -@@ -221,36 +50,23 @@ fn get_syntaxes() -> Result<()> { - } - - fn get_themes() -> Result<()> { -- let out_dir = get_cache_dir()?.join("themes"); -+ let out_dir = PathBuf::from("@themes_dir@"); - let themes_bin = out_dir.join("themes.bin"); - println!( - "cargo:rustc-env=OATMEAL_THEMES_BIN={}", - themes_bin.clone().to_str().unwrap() - ); -- println!( -- "cargo:rerun-if-changed={}", -- themes_bin.clone().to_str().unwrap() -- ); -- if themes_bin.exists() { -- return Ok(()); -- } - - let files = vec![ -- "LICENSE.md", - "Themes/base16-github.tmTheme", - "Themes/base16-monokai.tmTheme", - "Themes/base16-one-light.tmTheme", - "Themes/base16-onedark.tmTheme", - "Themes/base16-seti.tmTheme", - ]; -- download_files(out_dir.clone(), "https://github.com/chriskempson/base16-textmate/archive/0e51ddd568bdbe17189ac2a07eb1c5f55727513e.tar.gz", files.clone(), true)?; - - let mut themes_map = HashMap::new(); - for e in files { -- if !e.ends_with(".tmTheme") { -- continue; -- } -- - let theme_path = out_dir.join(e); - let file_name = theme_path - .file_name() diff --git a/pkgs/by-name/oa/oatmeal/Cargo.lock b/pkgs/by-name/oa/oatmeal/Cargo.lock index bfb107406acf1..bcb4c160f1344 100644 --- a/pkgs/by-name/oa/oatmeal/Cargo.lock +++ b/pkgs/by-name/oa/oatmeal/Cargo.lock @@ -508,21 +508,22 @@ dependencies = [ [[package]] name = "dirs" -version = "5.0.1" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" -source = "git+https://github.com/dustinblackman/dirs-sys-rs?rev=5d460f956c7ef21615c3d3169233ae0fe0eb00d4#5d460f956c7ef21615c3d3169233ae0fe0eb00d4" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b" dependencies = [ "libc", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.45.0", ] [[package]] @@ -1208,6 +1209,7 @@ dependencies = [ "dhat", "dialoguer", "dirs", + "dirs-sys", "errno", "flate2", "futures", @@ -1227,6 +1229,7 @@ dependencies = [ "test_utils", "tokio", "tokio-util", + "toml", "toml_edit", "tracing", "tracing-appender", @@ -1234,6 +1237,7 @@ dependencies = [ "tui-textarea", "uuid", "vergen", + "walkdir", "yansi", ] @@ -2821,6 +2825,10 @@ checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" [[package]] name = "xtask" version = "0.1.0" +dependencies = [ + "anyhow", + "toml_edit", +] [[package]] name = "yaml-rust" diff --git a/pkgs/by-name/oa/oatmeal/assets.toml b/pkgs/by-name/oa/oatmeal/assets.toml new file mode 100644 index 0000000000000..c4f79e500e482 --- /dev/null +++ b/pkgs/by-name/oa/oatmeal/assets.toml @@ -0,0 +1,93 @@ +# [[syntaxes]] OR [[themes]] + +# Github account name that owns the repo. +# owner = "" + +# Github repository name +# repo = "" + +# Git revision to lock to. +# rev = "" + +# Glob patterns matching selected files. Be sure to include all licenses! +# files = ["LICENSE", "*/LICENSE", "*/LICENSE.*", "*/*.sublime-syntax"] + +# Nix hash for the git revision archive. This is generated by running `cargo xtash hash-assets.` +# nix-hash = "" + +[[syntaxes]] +owner = "sublimehq" +repo = "Packages" +rev = "759d6eed9b4beed87e602a23303a121c3a6c2fb3" +files = ["LICENSE", "*/LICENSE", "*/LICENSE.*", "*/*.sublime-syntax"] +nix-hash = "sha256-0qadXgGwa3RxUxa6RAQWg933oFvJooWtK7BUx8RwAy0=" + +[[syntaxes]] +owner = "sharkdp" +repo = "bat" +rev = "7658334645936d2a956fb19aa96e6fca849cb754" +files = ["LICENSE-MIT", "assets/syntaxes/02_Extra/*.sublime-syntax"] +nix-hash = "sha256-4IFtaji8ymuGSE1OeMC9by8OJVhbrXXlgkQlusrAAIs=" + +[[syntaxes]] +owner = "dncrews" +repo = "GraphQL-SublimeText3" +rev = "9b6f6d0a86d7e7ef1d44490b107472af7fb4ffaf" +files = ["LICENSE", "*.sublime-syntax"] +nix-hash = "sha256-PTM61P5dObqR0hdMZIg5bXxinPPFQNFm61WiDxXiP2M=" + +[[syntaxes]] +owner = "VcamX" +repo = "protobuf-syntax-highlighting" +rev = "726e21d74dac23cbb036f2fbbd626decdc954060" +files = ["LICENSE", "*.sublime-syntax"] +nix-hash = "sha256-kYVvcz4kTWZTrjaJzdsbO5chhN56fvu4iD6Y0E5Dj68=" + +[[syntaxes]] +owner = "ziglang" +repo = "sublime-zig-language" +rev = "1a4a38445fec495817625bafbeb01e79c44abcba" +files = ["LICENSE", "Syntaxes/*.sublime-syntax"] +nix-hash = "sha256-buQKVIBcwicTFjmtkIDiy6VjkOlKXep47Ol5hk6eNlo=" + +[[syntaxes]] +owner = "alexlouden" +repo = "Terraform.tmLanguage" +rev = "54d8350c3c5929c921ea7561c932aa15e7d96c48" +files = ["LICENSE", "*.sublime-syntax"] +nix-hash = "sha256-cV8eqSi4AkG3JpeJaOV78V6Mg2RHPL7KuJS8+F8rRDI=" + +[[syntaxes]] +owner = "jasonwilliams" +repo = "sublime_toml_highlighting" +rev = "fd0bf3e5d6c9e6397c0dc9639a0514d9bf55b800" +files = ["LICENSE", "*.sublime-syntax"] +nix-hash = "sha256-/9RCQNWpp2j/u4o6jBCPN3HEuuR4ow3h+0Zj+Cbteyc=" + +[[syntaxes]] +owner = "princemaple" +repo = "elixir-sublime-syntax" +rev = "4fb01891dd17434dde42887bc821917a30f4e010" +files = ["LICENSE", "*.sublime-syntax"] +nix-hash = "sha256-R1e6RjirSsCx3uZoEOPpj5/NXZ2Gw48IyHOFW/7GOmY=" + +[[syntaxes]] +owner = "digitalcora" +repo = "sublime-text-gleam" +rev = "0b032f78c9c4aec1c598da1d25c67ca21fa8c381" +files = ["LICENSE", "package/*.sublime-syntax"] +nix-hash = "sha256-5QHjrik+RozACSRuuC9ltM3qHYFh5CdQZuJXJO/EWBQ=" + +[[themes]] +owner = "chriskempson" +repo = "base16-textmate" +rev = "0e51ddd568bdbe17189ac2a07eb1c5f55727513e" +files = [ + "LICENSE.md", + "Themes/base16-github.tmTheme", + "Themes/base16-monokai.tmTheme", + "Themes/base16-one-light.tmTheme", + "Themes/base16-onedark.tmTheme", + "Themes/base16-seti.tmTheme", +] +nix-hash = "sha256-reYGXrhhHNSp/1k6YJ2hxj4jnJQCDgy2Nzxse2PviTA=" diff --git a/pkgs/by-name/oa/oatmeal/package.nix b/pkgs/by-name/oa/oatmeal/package.nix index ca367a4fc7dc6..9f73377c994ec 100644 --- a/pkgs/by-name/oa/oatmeal/package.nix +++ b/pkgs/by-name/oa/oatmeal/package.nix @@ -1,130 +1,43 @@ { lib , stdenv , fetchFromGitHub +, fetchpatch , installShellFiles , rustPlatform -, substituteAll }: let - version = "0.12.1"; - # Absolute pathes are needed or the paths will have `src/domain/services/` - # prefixed to it - themes_dir = "/build/${srcs.oatmeal.name}/"; - syntaxes_dir = "/build/${srcs.oatmeal.name}/syntaxes"; - sytaxesSrcsDirs = - let - onlySyntaxesSrcs = lib.filterAttrs (n: _v: !(builtins.elem n [ "oatmeal" "themes" ])) srcs; - dirs = lib.concatStringsSep " " (lib.forEach (builtins.attrValues onlySyntaxesSrcs) (x: "${x}")); - in - dirs; - srcs = { - oatmeal = fetchFromGitHub { - name = "oatmeal"; - owner = "dustinblackman"; - repo = "oatmeal"; - rev = "v${version}"; - hash = "sha256-eKEYEPW0TOwTiIl1z2ntph4Hf8CHtHIXVPrvJXhtMQs="; - }; - themes = fetchFromGitHub { - name = "base16-textmate"; - owner = "chriskempson"; - repo = "base16-textmate"; - rev = "0e51ddd568bdbe17189ac2a07eb1c5f55727513e"; - hash = "sha256-reYGXrhhHNSp/1k6YJ2hxj4jnJQCDgy2Nzxse2PviTA="; - }; - # Syntaxes - sublime-packages = fetchFromGitHub { - name = "sublime-packages"; - owner = "sublimehq"; - repo = "Packages"; - rev = "759d6eed9b4beed87e602a23303a121c3a6c2fb3"; - hash = "sha256-0qadXgGwa3RxUxa6RAQWg933oFvJooWtK7BUx8RwAy0="; - }; - bat = fetchFromGitHub { - name = "bat"; - owner = "sharkdp"; - repo = "bat"; - rev = "7658334645936d2a956fb19aa96e6fca849cb754"; - hash = "sha256-4IFtaji8ymuGSE1OeMC9by8OJVhbrXXlgkQlusrAAIs="; - }; - GraphQL-SublimeText3 = fetchFromGitHub { - name = "GraphQL-SublimeText3"; - owner = "dncrews"; - repo = "GraphQL-SublimeText3"; - rev = "9b6f6d0a86d7e7ef1d44490b107472af7fb4ffaf"; - hash = "sha256-PTM61P5dObqR0hdMZIg5bXxinPPFQNFm61WiDxXiP2M="; - }; - protobuf-syntax-highlighting = fetchFromGitHub { - name = "protobuf-syntax-highlighting"; - owner = "VcamX"; - repo = "protobuf-syntax-highlighting"; - rev = "726e21d74dac23cbb036f2fbbd626decdc954060"; - hash = "sha256-kYVvcz4kTWZTrjaJzdsbO5chhN56fvu4iD6Y0E5Dj68="; - }; - sublime-zig-language = fetchFromGitHub { - name = "sublime-zig-language"; - owner = "ziglang"; - repo = "sublime-zig-language"; - rev = "1a4a38445fec495817625bafbeb01e79c44abcba"; - hash = "sha256-buQKVIBcwicTFjmtkIDiy6VjkOlKXep47Ol5hk6eNlo="; - }; - "Terraform.tmLanguage" = fetchFromGitHub { - name = "Terraform.tmLanguage"; - owner = "alexlouden"; - repo = "Terraform.tmLanguage"; - rev = "54d8350c3c5929c921ea7561c932aa15e7d96c48"; - hash = "sha256-cV8eqSi4AkG3JpeJaOV78V6Mg2RHPL7KuJS8+F8rRDI="; - }; - sublime_toml_highlighting = fetchFromGitHub { - name = "sublime_toml_highlighting"; - owner = "jasonwilliams"; - repo = "sublime_toml_highlighting"; - rev = "fd0bf3e5d6c9e6397c0dc9639a0514d9bf55b800"; - hash = "sha256-/9RCQNWpp2j/u4o6jBCPN3HEuuR4ow3h+0Zj+Cbteyc="; - }; - elixir-sublime-syntax = fetchFromGitHub { - name = "elixir-sublime-syntax"; - owner = "princemaple"; - repo = "elixir-sublime-syntax"; - rev = "4fb01891dd17434dde42887bc821917a30f4e010"; - hash = "sha256-R1e6RjirSsCx3uZoEOPpj5/NXZ2Gw48IyHOFW/7GOmY="; - }; - sublime-text-gleam = fetchFromGitHub { - name = "sublime-text-gleam"; - owner = "digitalcora"; - repo = "sublime-text-gleam"; - rev = "0b032f78c9c4aec1c598da1d25c67ca21fa8c381"; - hash = "sha256-5QHjrik+RozACSRuuC9ltM3qHYFh5CdQZuJXJO/EWBQ="; - }; + version = "0.12.1-unstable-2023-12-30"; + assets = builtins.fromTOML (builtins.readFile ./assets.toml); + mkSrcsFromTomlArray = tomlArray: lib.forEach tomlArray (x: + fetchFromGitHub { + inherit (x) owner rev repo; + hash = x.nix-hash; + name = x.repo; + }); + syntaxesSrcs = mkSrcsFromTomlArray assets.syntaxes; + themesSrcs = mkSrcsFromTomlArray assets.themes; + oatmealSrc = fetchFromGitHub { + name = "oatmeal"; + owner = "dustinblackman"; + repo = "oatmeal"; + rev = "f5aab048841b91a3db4e749e74b4652848b7f5e1"; + hash = "sha256-31QR9HSjZ4Fbj2a46uHUfr+EmQQktZmVs2gzYHhjZFI="; }; in rustPlatform.buildRustPackage { pname = "oatmeal"; inherit version; - srcs = builtins.attrValues srcs; - sourceRoot = "${srcs.oatmeal.name}"; + srcs = [ oatmealSrc ] ++ themesSrcs ++ syntaxesSrcs; + sourceRoot = oatmealSrc.name; - cargoLock = { - lockFile = ./Cargo.lock; - outputHashes = { - "dirs-sys-0.4.1" = "sha256-ywihWgEZ/dKO6ggnf66FKqiUY0bOjmgwN0Uyw45ZBI4="; - }; - - }; + cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = [ installShellFiles ]; - buildFeatures = [ "manpages" ]; - patches = [ - # Get themes and syntaxes from a nix source instead of trying to download - # them from within the sandbox. - (substituteAll { - src = ./001-get-themes-and-syntaxes-from-nix-src.patch; - # Absolute paths are needed or the paths will have `src/domain/services/` - # prefixed to them - inherit themes_dir; - inherit syntaxes_dir; + (fetchpatch { + url = "https://patch-diff.githubusercontent.com/raw/dustinblackman/oatmeal/pull/32.diff?full_index=true"; + hash = "sha256-q5gE6OxkULGTUWqS7hrFqV+LwgToJpkiEgn2ydCU914="; }) ]; @@ -135,18 +48,25 @@ rustPlatform.buildRustPackage { doCheck = false; preBuild = '' - cp -r ${srcs.themes}/Themes ${themes_dir} - mkdir ${syntaxes_dir} - cp -r ${sytaxesSrcsDirs} ${syntaxes_dir} + OATMEAL_BUILD_DOWNLOADED_THEMES_DIR="$(mktemp -d)" + export OATMEAL_BUILD_DOWNLOADED_THEMES_DIR + OATMEAL_BUILD_DOWNLOADED_SYNTAXES_DIR="$(mktemp -d)" + export OATMEAL_BUILD_DOWNLOADED_SYNTAXES_DIR + for src in $srcs; do + case $src in + *base16-textmate) cp -r $src $OATMEAL_BUILD_DOWNLOADED_THEMES_DIR/''${src#*-} ;; + *oatmeal) ;; + *) cp -r $src $OATMEAL_BUILD_DOWNLOADED_SYNTAXES_DIR/''${src#*-} + esac + done ''; postInstall = lib.optionalString (stdenv.hostPlatform.canExecute stdenv.buildPlatform) '' HOME="$(mktemp -d)" export HOME - mkdir manpages - $out/bin/oatmeal debug manpages - installManPage manpages/*.[[:digit:]] + $out/bin/oatmeal manpages 1>oatmeal.1 + installManPage oatmeal.1 installShellCompletion --cmd oatmeal \ --bash <($out/bin/oatmeal completions -s bash) \