diff --git a/.gitignore b/.gitignore index 2d5df85..9624092 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target .direnv +result diff --git a/default.nix b/default.nix deleted file mode 100644 index e5e080b..0000000 --- a/default.nix +++ /dev/null @@ -1,38 +0,0 @@ -{pkgs ? import {}}: let - manifest = (pkgs.lib.importTOML ./Cargo.toml).package; - packages = with pkgs; [ - pkg-config - libGLU - libGL - libxkbcommon - wayland - ]; -in - pkgs.rustPlatform.buildRustPackage { - pname = manifest.name; - version = manifest.version; - cargoLock.lockFile = ./Cargo.lock; - src = pkgs.lib.cleanSource ./.; - - meta = { - description = manifest.description ? null; - }; - postBuild = '' - patchelf --add-needed libxkbcommon.so target/x86_64-unknown-linux-gnu/release/todoodoo - patchelf --add-needed libwayland-client.so target/x86_64-unknown-linux-gnu/release/todoodoo - patchelf --add-needed libGLU.so target/x86_64-unknown-linux-gnu/release/todoodoo - patchelf --add-needed libEGL.so target/x86_64-unknown-linux-gnu/release/todoodoo - old_rpath=$(patchelf --print-rpath target/x86_64-unknown-linux-gnu/release/todoodoo) - if [[ -z "$old_rpath" ]]; then - patchelf --set-rpath "${pkgs.lib.makeLibraryPath packages}" target/x86_64-unknown-linux-gnu/release/todoodoo - else - patchelf --set-rpath "${pkgs.lib.makeLibraryPath packages}:$old_rpath" target/x86_64-unknown-linux-gnu/release/todoodoo - fi - ''; - - postInstall = '' - mkdir -p $out/share/applications/ - cp todoodoo.desktop $out/share/applications/todoodoo.desktop - substituteInPlace $out/share/applications/todoodoo.desktop --replace /usr/bin/todoodoo $out/bin/todoodoo - ''; - } diff --git a/flake.lock b/flake.lock index 84cd8a7..5c77198 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,33 @@ { "nodes": { + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1715063087, + "narHash": "sha256-cktPkcCmJ2sR0V/FaWEuCWmKuGPbwoMltih/EfF0mXg=", + "owner": "nix-community", + "repo": "fenix", + "rev": "f8f16c1f2c83bea4e51e6522d988ec8bfcc8420e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1706913249, - "narHash": "sha256-x3M7iV++CsvRXI1fpyFPduGELUckZEhSv0XWnUopAG8=", + "lastModified": 1715087517, + "narHash": "sha256-CLU5Tsg24Ke4+7sH8azHWXKd0CFd4mhLWfhYgUiDBpQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e92b6015881907e698782c77641aa49298330223", + "rev": "b211b392b8486ee79df6cdfb1157ad2133427a29", "type": "github" }, "original": { @@ -18,7 +39,46 @@ }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "fenix": "fenix", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1714936835, + "narHash": "sha256-M+PpgfRMBfHo8Jb2ou/s3maAZbps0XnuHXQU9Hv9vL0=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "c4618fe14d39992fbbb85c2d6cad028a232c13d2", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index af890c9..4eb4def 100644 --- a/flake.nix +++ b/flake.nix @@ -1,22 +1,113 @@ { description = "ToDooDoo"; + inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { - self, - nixpkgs, - }: let - supportedSystems = ["x86_64-linux"]; - forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - pkgsFor = nixpkgs.legacyPackages; - in { - formatter = forAllSystems (system: pkgsFor.${system}.alejandra); - packages = forAllSystems (system: { - default = pkgsFor.${system}.callPackage ./default.nix {}; - }); - devShells = forAllSystems (system: { - default = pkgsFor.${system}.callPackage ./shell.nix {}; - }); - }; + + outputs = + + { + self, + nixpkgs, + treefmt-nix, + fenix, + }: + let + supportedSystems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + forEachSupportedSystem = + f: + nixpkgs.lib.genAttrs supportedSystems ( + system: + f ( + let + pkgs = import nixpkgs { inherit system; }; + fenix' = (import fenix { inherit system pkgs; }); + toolchain = fenix'.fromToolchainFile { + file = ./rust-toolchain.toml; + sha256 = "sha256-opUgs6ckUQCyDxcB9Wy51pqhd0MPGHUVbwRKKPGiwZU="; + }; + buildInputs = with pkgs; [ + rust-analyzer + rustfmt + clippy + + clang + mold + + pkg-config + libGLU + libGL + libxkbcommon + + wayland + ]; + in + { + inherit pkgs toolchain buildInputs; + } + ) + ); + in + { + formatter = forEachSupportedSystem ( + { pkgs, ... }: (treefmt-nix.lib.evalModule pkgs ./treefmt.nix).config.build.wrapper + ); + devShells = forEachSupportedSystem ( + { + pkgs, + toolchain, + buildInputs, + }: + { + default = pkgs.mkShell { + buildInputs = buildInputs ++ [ toolchain ]; + env = { + LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; + LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath (buildInputs)}"; + }; + }; + } + ); + packages = forEachSupportedSystem ( + { + pkgs, + toolchain, + buildInputs, + }: + { + default = ( + let + manifest = (pkgs.lib.importTOML ./Cargo.toml).package; + rustPlatform = pkgs.makeRustPlatform { + cargo = toolchain; + rustc = toolchain; + }; + in + rustPlatform.buildRustPackage { + inherit buildInputs; + pname = manifest.name; + version = manifest.version; + cargoLock.lockFile = ./Cargo.lock; + src = pkgs.lib.cleanSource ./.; + } + ); + } + ); + }; } diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..7fd885e --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "stable" +components = ["rustfmt", "cargo", "rustc", "rust-src"] diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 08cffe6..0000000 --- a/shell.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - pkgs ? import {}, - lib, -}: let - packages = with pkgs; [ - rust-analyzer - rustfmt - clippy - - clang - mold - - pkg-config - - libGLU - libGL - libxkbcommon - - wayland - ]; -in - pkgs.mkShell { - # Get dependencies from the main package - inputsFrom = [(pkgs.callPackage ./default.nix {})]; - nativeBuildInputs = packages; - buildInputs = packages; - env = { - LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; - LD_LIBRARY_PATH = "${lib.makeLibraryPath packages}"; - }; - } diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..a54f850 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + projectRootFile = "flake.nix"; + programs = { + nixfmt-rfc-style.enable = true; + rustfmt.enable = true; + }; +}