build: dendritic flake, devShell and crate skeleton
This commit is contained in:
1 parent
fbdc8da28f
commit
d69049d97c
10 files changed
+1587
No files matched your search
+11
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
!/.gitignore
|
||||
!/.envrc
|
||||
!/flake.nix
|
||||
!/flake.lock
|
||||
!/Cargo.toml
|
||||
!/Cargo.lock
|
||||
!/nix/
|
||||
!/src/
|
||||
!/docs/
|
||||
!/README.md
|
||||
Generated
+1363
File diff suppressed because it is too large.
Load diff
+32
@@ -0,0 +1,32 @@
|
||||
[package]
|
||||
name = "valw"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
description = "macOS-style screenshots for niri"
|
||||
license = "MIT"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.104"
|
||||
chrono = "0.4.45"
|
||||
clap = { version = "4.6.7", features = ["derive"] }
|
||||
image = { version = "0.25.10", default-features = false, features = ["png"] }
|
||||
libc = "0.2.189"
|
||||
niri-ipc = "=26.4.0"
|
||||
rustix = { version = "1.1.5", features = ["event", "fs", "pipe", "process", "stdio"] }
|
||||
serde = { version = "1.0.229", features = ["derive"] }
|
||||
serde_ignored = "0.1.14"
|
||||
smithay-client-toolkit = "0.21.1"
|
||||
toml = "1.1.6"
|
||||
tracing = "0.1.44"
|
||||
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
|
||||
wayland-client = "0.31.15"
|
||||
wayland-protocols = { version = "0.32.13", features = ["client", "staging"] }
|
||||
wayland-protocols-wlr = { version = "0.3.12", features = ["client"] }
|
||||
wl-clipboard-rs = "0.9.4"
|
||||
|
||||
[dev-dependencies]
|
||||
tempfile = "3.27.0"
|
||||
|
||||
# Image encoding is painfully slow unoptimised; keep dev builds usable.
|
||||
[profile.dev.package."*"]
|
||||
opt-level = 3
|
||||
Generated
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1788450739,
|
||||
"narHash": "sha256-glZLQlzIn1fXH6PazR2iUmTo7kzzyYSshrWhLS9TqCU=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "31729ca8cbdb4fa927b34e5f4353e6a83f39e993",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1790578696,
|
||||
"narHash": "sha256-ZoxIApko70jCdbH3l20HWXOBaT2HZd87orzd2yJ9dVE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7a0f122f5090cf4c2ade2a13a0e229d4e19ba71f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
description = "valw, macOS-style screenshots for niri";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
flake-parts = {
|
||||
url = "github:hercules-ci/flake-parts";
|
||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } (
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib.filesystem) listFilesRecursive;
|
||||
inherit (lib.lists) filter;
|
||||
inherit (lib.strings) hasSuffix;
|
||||
in
|
||||
{
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
imports = filter (hasSuffix ".ulu.nix") (listFilesRecursive ./nix);
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{ ... }:
|
||||
{
|
||||
perSystem =
|
||||
{ pkgs, self', ... }:
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
inputsFrom = [ self'.packages.default ];
|
||||
|
||||
packages = with pkgs; [
|
||||
cargo-nextest
|
||||
clippy
|
||||
rust-analyzer
|
||||
rustfmt
|
||||
# Manual verification: grim is the pixel oracle, magick compares.
|
||||
grim
|
||||
imagemagick
|
||||
wayland-utils
|
||||
];
|
||||
|
||||
# The repo is a path: flake, so Nix copies the whole tree on every
|
||||
# evaluation. Keep the multi-gigabyte target dir out of it.
|
||||
shellHook = ''
|
||||
export CARGO_TARGET_DIR="''${XDG_CACHE_HOME:-$HOME/.cache}/valw/target"
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{ ... }:
|
||||
{
|
||||
perSystem =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
formatter = pkgs.writeShellApplication {
|
||||
name = "nixfmt-tree";
|
||||
runtimeInputs = [
|
||||
pkgs.nixfmt
|
||||
pkgs.fd
|
||||
pkgs.findutils
|
||||
];
|
||||
text = ''
|
||||
if [ "$#" -eq 0 ]; then
|
||||
set -- .
|
||||
fi
|
||||
fd --type f --extension nix --hidden --exclude .jj . "$@" \
|
||||
| xargs -r nixfmt
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{ ... }:
|
||||
{
|
||||
perSystem =
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
packages.default = pkgs.rustPlatform.buildRustPackage {
|
||||
pname = "valw";
|
||||
version = "0.1.0";
|
||||
|
||||
src = lib.cleanSourceWith {
|
||||
src = ../.;
|
||||
filter =
|
||||
path: _type:
|
||||
!(builtins.elem (baseNameOf path) [
|
||||
".direnv"
|
||||
".jj"
|
||||
"result"
|
||||
"target"
|
||||
]);
|
||||
};
|
||||
|
||||
cargoLock.lockFile = ../Cargo.lock;
|
||||
|
||||
nativeBuildInputs = [ pkgs.pkg-config ];
|
||||
buildInputs = [
|
||||
pkgs.libxkbcommon
|
||||
pkgs.wayland
|
||||
];
|
||||
|
||||
# Tests run through `nix flake check` instead.
|
||||
doCheck = false;
|
||||
|
||||
meta = {
|
||||
description = "macOS-style screenshots for niri";
|
||||
mainProgram = "valw";
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// Modules land before the CLI uses them; Task 11 removes this.
|
||||
#![allow(dead_code)]
|
||||
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(version, about = "macOS-style screenshots for niri")]
|
||||
struct Cli {}
|
||||
|
||||
fn main() {
|
||||
Cli::parse();
|
||||
}
|
||||
Reference in new issue
Block a user