From c8b51a8ab42a14cc5f2e8836e9c51ec034bc52ea Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 13:30:16 +0100 Subject: [PATCH 1/6] fix build --- .github/workflows/rust.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7c4cffc..43dc40e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -16,7 +16,9 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install liblzma-dev - run: sudo apt-get install -y liblzma-dev + + - name: Install system dependencies + run: sudo apt-get install -y liblzma-dev fontconfig + - name: Build run: cargo build --verbose From 36ccd9db6eb97778553369ac49fcdb5afbc08726 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 13:36:33 +0100 Subject: [PATCH 2/6] fix build --- .github/workflows/rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 43dc40e..986f0e0 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - name: Install system dependencies - run: sudo apt-get install -y liblzma-dev fontconfig + run: sudo apt-get install -y liblzma-dev libfontconfig1-dev - name: Build run: cargo build --verbose From 05d9ea1042ea6c62d3ccf8dabc18a356a4953ea4 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 13:30:16 +0100 Subject: [PATCH 3/6] fix build --- .github/workflows/rust.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7c4cffc..986f0e0 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -16,7 +16,9 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install liblzma-dev - run: sudo apt-get install -y liblzma-dev + + - name: Install system dependencies + run: sudo apt-get install -y liblzma-dev libfontconfig1-dev + - name: Build run: cargo build --verbose From c74ae70bd8bd9e2f9575729e30de773596d4aaa1 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 14:29:44 +0100 Subject: [PATCH 4/6] split flake into two files --- flake.nix | 137 +++++++++---------------------------- servicepoint-simulator.nix | 74 ++++++++++++++++++++ 2 files changed, 108 insertions(+), 103 deletions(-) create mode 100644 servicepoint-simulator.nix 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} + ''; +} From 85b3954c35948a0e07b3423fef0b8cd3478a3da2 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 14:45:46 +0100 Subject: [PATCH 5/6] Revert "nix flake update" because wayland lib cannot be found using newer nixpkgs This reverts commit a00c8c237908e001e156c0dd38812ab7aecad79a. --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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": { From 8590b38d0f1e06390f86e1a8a6f5097a0d042a10 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 26 Jan 2025 14:53:53 +0100 Subject: [PATCH 6/6] reorder CLI args, update README --- README.md | 14 +++++++++++++- src/cli.rs | 26 +++++++++++++------------- src/main.rs | 2 +- 3 files changed, 27 insertions(+), 15 deletions(-) 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/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");