diff --git a/README.md b/README.md index ce48083..c6c8116 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,19 @@ Without nix: check out this repository and use `cargo run --release`. ## Command line arguments -The application binds to `0.0.0.0:2342` by default (`./servicepoint-simulator --bind host:port` to change this). +``` +Usage: servicepoint-simulator [OPTIONS] + +Options: + --bind address and port to bind to [default: 0.0.0.0:2342] + -f, --font The name of the font family to use. This defaults to the system monospace font. + -s, --spacers add spacers between tile rows to simulate gaps in real display + -r, --red Use the red color channel + -g, --green Use the green color channel + -b, --blue Use the blue color channel + -v, --verbose Set default log level lower. You can also change this via the RUST_LOG environment variable. + -h, --help Print help +``` See [env_logger](https://docs.rs/env_logger/latest/env_logger/) to configure logging. diff --git a/flake.lock b/flake.lock index cdd30be..dfb3db6 100644 --- a/flake.lock +++ b/flake.lock @@ -37,11 +37,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1737672001, - "narHash": "sha256-YnHJJ19wqmibLQdUeq9xzE6CjrMA568KN/lFPuSVs4I=", + "lastModified": 1736200483, + "narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", "owner": "nixos", "repo": "nixpkgs", - "rev": "035f8c0853c2977b24ffc4d0a42c74f00b182cd8", + "rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6254f4e..96cbeaa 100644 --- a/flake.nix +++ b/flake.nix @@ -25,99 +25,24 @@ "aarch64-darwin" "x86_64-darwin" ]; - forAllSystems = lib.genAttrs supported-systems; - make-rust-toolchain-core = - pkgs: - pkgs.symlinkJoin { - name = "rust-toolchain-core"; - paths = with pkgs; [ - rustc - cargo - rustPlatform.rustcSrc - ]; - }; + forAllSystems = + f: + lib.genAttrs supported-systems ( + system: + f rec { + pkgs = nixpkgs.legacyPackages.${system}; + inherit system; + } + ); in rec { packages = forAllSystems ( - system: - let - pkgs = nixpkgs.legacyPackages."${system}"; - rust-toolchain-core = make-rust-toolchain-core pkgs; - naersk' = pkgs.callPackage naersk { - cargo = rust-toolchain-core; - rustc = rust-toolchain-core; - }; - in + { pkgs, ... }: rec { - servicepoint-simulator = naersk'.buildPackage rec { - src = nix-filter.lib.filter { - root = ./.; - include = [ - ./Cargo.toml - ./Cargo.lock - ./src - ./Web437_IBM_BIOS.woff - ./README.md - ./LICENSE - ]; - }; - nativeBuildInputs = with pkgs; [ - pkg-config - makeWrapper - ]; - strictDeps = true; - buildInputs = - with pkgs; - [ - xe - xz - - roboto - ] - ++ lib.optionals pkgs.stdenv.isLinux ( - with pkgs; - [ - # gpu - libGL - vulkan-headers - vulkan-loader - vulkan-tools vulkan-tools-lunarg - vulkan-extension-layer - vulkan-validation-layers - - # keyboard - libxkbcommon - - # font loading - fontconfig - freetype - - # WINIT_UNIX_BACKEND=wayland - wayland - - # WINIT_UNIX_BACKEND=x11 - xorg.libXcursor - xorg.libXrandr - xorg.libXi - xorg.libX11 - xorg.libX11.dev - ] - ) - ++ lib.optionals pkgs.stdenv.isDarwin ( - with pkgs.darwin.apple_sdk.frameworks; - [ - Carbon - QuartzCore - AppKit - ] - ); - - postInstall = '' - wrapProgram $out/bin/servicepoint-simulator \ - --suffix LD_LIBRARY_PATH : ${lib.makeLibraryPath buildInputs} - ''; + servicepoint-simulator = import ./servicepoint-simulator.nix { + inherit nix-filter pkgs; + naersk' = pkgs.callPackage naersk { }; }; - default = servicepoint-simulator; } ); @@ -125,29 +50,35 @@ legacyPackages = packages; devShells = forAllSystems ( - system: - let - pkgs = nixpkgs.legacyPackages."${system}"; - rust-toolchain = pkgs.symlinkJoin { - name = "rust-toolchain"; - paths = with pkgs; [ - (make-rust-toolchain-core pkgs) - rustfmt - clippy - cargo-expand - ]; - }; - in + { + pkgs, + system, + }: { default = pkgs.mkShell rec { inputsFrom = [ self.packages.${system}.default ]; - packages = [ rust-toolchain pkgs.gdb ]; + packages = [ + pkgs.gdb + (pkgs.symlinkJoin { + name = "rust-toolchain"; + paths = with pkgs; [ + rustc + cargo + rustPlatform.rustcSrc + rustfmt + clippy + cargo-expand + ]; + }) + ]; LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath (builtins.concatMap (d: d.buildInputs) inputsFrom)}"; + NIX_LD_LIBRARY_PATH = LD_LIBRARY_PATH; + NIX_LD = pkgs.stdenv.cc.bintools.dynamicLinker; RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; }; } ); - formatter = forAllSystems (system: nixpkgs.legacyPackages."${system}".nixfmt-rfc-style); + formatter = forAllSystems ({ pkgs, ... }: pkgs.nixfmt-rfc-style); }; } diff --git a/servicepoint-simulator.nix b/servicepoint-simulator.nix new file mode 100644 index 0000000..efb8fd4 --- /dev/null +++ b/servicepoint-simulator.nix @@ -0,0 +1,74 @@ +{ + naersk', + pkgs, + nix-filter, +}: +naersk'.buildPackage rec { + src = nix-filter.lib.filter { + root = ./.; + include = [ + ./Cargo.toml + ./Cargo.lock + ./src + ./Web437_IBM_BIOS.woff + ./README.md + ./LICENSE + ]; + }; + nativeBuildInputs = with pkgs; [ + pkg-config + makeWrapper + ]; + strictDeps = true; + buildInputs = + with pkgs; + [ + xe + xz + + roboto + ] + ++ lib.optionals pkgs.stdenv.isLinux ( + with pkgs; + [ + # gpu + libGL + vulkan-headers + vulkan-loader + vulkan-tools + vulkan-tools-lunarg + vulkan-extension-layer + vulkan-validation-layers + + # keyboard + libxkbcommon + + # font loading + fontconfig + freetype + + # WINIT_UNIX_BACKEND=wayland + wayland + + # WINIT_UNIX_BACKEND=x11 + xorg.libXcursor + xorg.libXrandr + xorg.libXi + xorg.libX11 + xorg.libX11.dev + ] + ) + ++ lib.optionals pkgs.stdenv.isDarwin ( + with pkgs.darwin.apple_sdk.frameworks; + [ + Carbon + QuartzCore + AppKit + ] + ); + + postInstall = '' + wrapProgram $out/bin/servicepoint-simulator \ + --suffix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath buildInputs} + ''; +} diff --git a/src/cli.rs b/src/cli.rs index 0e82f74..5d7adf0 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -8,12 +8,6 @@ pub struct Cli { help = "address and port to bind to" )] pub bind: String, - #[arg( - short, - long, - help = "Set default log level lower. You can also change this via the RUST_LOG environment variable." - )] - pub debug: bool, #[arg( short, long, @@ -22,10 +16,23 @@ pub struct Cli { pub font: Option, #[clap(flatten)] pub gui: GuiOptions, + #[arg( + short, + long, + help = "Set default log level lower. You can also change this via the RUST_LOG environment variable." + )] + pub verbose: bool, } #[derive(Parser, Debug)] pub struct GuiOptions { + #[arg( + short, + long, + default_value_t = false, + help = "add spacers between tile rows to simulate gaps in real display" + )] + pub spacers: bool, #[arg( short, long, @@ -47,11 +54,4 @@ pub struct GuiOptions { help = "Use the blue color channel" )] pub blue: bool, - #[arg( - short, - long, - default_value_t = false, - help = "add spacers between tile rows to simulate gaps in real display" - )] - pub spacers: bool, } diff --git a/src/main.rs b/src/main.rs index 4ea5b7b..fa0b127 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,7 +29,7 @@ fn main() { cli.gui.green = true; } - init_logging(cli.debug); + init_logging(cli.verbose); info!("starting with args: {:?}", &cli); let socket = UdpSocket::bind(&cli.bind).expect("could not bind socket");