ref: d731a8f85ec4ccc5994eff9a13dda0dcb25e8ed5
parent: b956da83f5a7aeefe8f85a6cde0abd1f409fff4d
parent: 9e6cbaf315de73685ac16b2d3db2ca027c8fbc22
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Thu Aug 8 04:21:07 EDT 2024
Merge pull request #160 from pope/main Use a Nix Flake for m8c
--- a/.github/workflows/nix-package.yml
+++ b/.github/workflows/nix-package.yml
@@ -1,4 +1,4 @@
-name: Update Version and Hash in default.nix
+name: Update Version and Hash in flake.nix
on:
push:
@@ -42,15 +42,15 @@
echo "valid=false" >> $GITHUB_OUTPUT
fi
- - name: Update version in default.nix
+ - name: Update version in flake.nix
if: steps.valid-tag.outputs.valid
run: |
latest_annotated_tag="${{ steps.newest-tag.outputs.latest_annotated_tag }}" latest_annotated_tag_without_v="${latest_annotated_tag#v}" # Remove 'v' prefix- sed -i "s/version = \".*\";/version = \"$latest_annotated_tag_without_v\";/" default.nix
+ sed -i "s/version = \".*\";/version = \"$latest_annotated_tag_without_v\";/" flake.nix
new_hash=$(nix-prefetch-url --unpack --type sha256 "https://github.com/laamaa/m8c/archive/v$latest_annotated_tag_without_v.tar.gz") # Use updated variable name
- sed -i "s/hash = \".*\";/hash = \"sha256:$new_hash\";/" default.nix
+ sed -i "s/hash = \".*\";/hash = \"sha256:$new_hash\";/" flake.nix
git config user.email "github-actions@github.com"
git config user.name "GitHub Actions"
- git commit -am "Update version and hash in default.nix to $latest_annotated_tag_without_v"
+ git commit -am "Update version and hash in flake.nix to $latest_annotated_tag_without_v"
git push origin HEAD:main
--- a/README.md
+++ b/README.md
@@ -43,6 +43,12 @@
nix-env -iA m8c-stable -f https://github.com/laamaa/m8c/archive/refs/heads/main.tar.gz
```
+Or if you're using flakes and the nix command, you can run the app directly with:
+
+```sh
+nix run github:laamaa/m8c
+```
+
### Building from source code
#### Install dependencies
--- a/default.nix
+++ b/default.nix
@@ -1,47 +1,18 @@
-{ pkgs ? import <nixpkgs> {} }:-
-with pkgs;
-
-# HOWTO keep this package definition up-to-date:
-#
-# 1. NEW VERSION:
-# After the new version is tagged and pushed, update the `version` var to the
-# proper value and update the hash. You can use the following command to find
-# out the sha256, for example, with version 1.0.3:
-# `nix-prefetch-github --rev v1.0.3 laamaa m8c`
-#
-# 2. NEW DEPENDENCIES:
-# Make sure new dependencies are added. Runtime deps go to buildInputs and
-# compile-time deps go to nativeBuildInputs. Use the nixpkgs manual for help
-#
-let m8c-package =
- { stdenv- , gnumake
- , pkg-config
- , SDL2
- , libserialport
- , fetchFromGitHub
- }:
-
- let
- pname = "m8c";
- version = "1.7.6";
- in
- stdenv.mkDerivation {- inherit pname version;
-
- src = fetchFromGitHub {- owner = "laamaa";
- repo = pname;
- rev = "v${version}";- hash = "sha256:1b2wg8zmxisn1kc3wkfzcij1707pz560yq8v6rwjirr0dd27a3n2";
- };
-
- installFlags = [ "PREFIX=$(out)" ];
- nativeBuildInputs = [ gnumake pkg-config ];
- buildInputs = [ SDL2 libserialport ];
- };
-in {- m8c-stable = pkgs.callPackage m8c-package {};- m8c-dev = (pkgs.callPackage m8c-package {}).overrideAttrs (oldAttrs: {src = ./.;});+let
+ pkgs = (import
+ (
+ let
+ lock = builtins.fromJSON (builtins.readFile ./flake.lock);
+ in
+ fetchTarball {+ url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";+ sha256 = lock.nodes.flake-compat.locked.narHash;
+ }
+ )
+ {+ src = ./.;
+ }).defaultNix.packages.${builtins.currentSystem};+in
+{+ inherit (pkgs) m8c-stable m8c-dev;
}
--- /dev/null
+++ b/flake.lock
@@ -1,0 +1,81 @@
+{+ "nodes": {+ "flake-compat": {+ "flake": false,
+ "locked": {+ "lastModified": 1696426674,
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+ "type": "github"
+ },
+ "original": {+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {+ "locked": {+ "lastModified": 1721821769,
+ "narHash": "sha256-PhmkdTJs2SfqKzSyDB74rDKp1MH4mGk0pG/+WqrnGEw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "d0907b75146a0ccc1ec0d6c3db287ec287588ef6",
+ "type": "github"
+ },
+ "original": {+ "owner": "NixOS",
+ "ref": "nixos-24.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {+ "inputs": {+ "flake-compat": "flake-compat",
+ "nixpkgs": "nixpkgs",
+ "systems": "systems",
+ "treefmt-nix": "treefmt-nix"
+ }
+ },
+ "systems": {+ "locked": {+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {+ "inputs": {+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {+ "lastModified": 1721769617,
+ "narHash": "sha256-6Pqa0bi5nV74IZcENKYRToRNM5obo1EQ+3ihtunJ014=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "8db8970be1fb8be9c845af7ebec53b699fe7e009",
+ "type": "github"
+ },
+ "original": {+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
--- /dev/null
+++ b/flake.nix
@@ -1,0 +1,98 @@
+{+ inputs = {+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
+ systems.url = "github:nix-systems/default";
+ treefmt-nix = {+ url = "github:numtide/treefmt-nix";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ flake-compat = {+ url = "github:edolstra/flake-compat";
+ flake = false;
+ };
+ };
+
+ outputs = { self, nixpkgs, systems, treefmt-nix, ... }:+ let
+ # HOWTO keep this package definition up-to-date:
+ #
+ # 1. NEW VERSION:
+ # After the new version is tagged and pushed, update the `version` var to the
+ # proper value and update the hash. You can use the following command to find
+ # out the sha256, for example, with version 1.0.3:
+ # `nix-prefetch-github --rev v1.0.3 laamaa m8c`
+ #
+ # 2. NEW DEPENDENCIES:
+ # Make sure new dependencies are added. Runtime deps go to buildInputs and
+ # compile-time deps go to nativeBuildInputs. Use the nixpkgs manual for help
+ pname = "m8c";
+ version = "1.7.6";
+ m8c-package =
+ { stdenv+ , gnumake
+ , pkg-config
+ , SDL2
+ , libserialport
+ , fetchFromGitHub
+ }:
+ stdenv.mkDerivation {+ inherit pname version;
+
+ src = fetchFromGitHub {+ owner = "laamaa";
+ repo = pname;
+ rev = "v${version}";+ hash = "sha256:1b2wg8zmxisn1kc3wkfzcij1707pz560yq8v6rwjirr0dd27a3n2";
+ };
+
+ installFlags = [ "PREFIX=$(out)" ];
+ nativeBuildInputs = [ gnumake pkg-config ];
+ buildInputs = [ SDL2 libserialport ];
+ };
+ eachSystem = f: nixpkgs.lib.genAttrs (import systems) (system: f
+ (import nixpkgs { inherit system; })+ );
+ treefmtEval = eachSystem (pkgs: treefmt-nix.lib.evalModule pkgs (_: {+ projectRootFile = "flake.nix";
+ programs = {+ clang-format.enable = false; # TODO(pope): Enable and format C code
+ deadnix.enable = true;
+ nixpkgs-fmt.enable = true;
+ statix.enable = true;
+ };
+ }));
+ in
+ {+ packages = eachSystem (pkgs: rec {+ m8c-stable = pkgs.callPackage m8c-package { };+ m8c-dev = (pkgs.callPackage m8c-package { }).overrideAttrs (_oldAttrs: {+ src = ./.;
+ });
+ default = m8c-stable;
+ });
+
+ overlays.default = final: _prev: {+ inherit (self.packages.${final.system}) m8c-stable m8c-dev;+ };
+
+ apps = eachSystem (pkgs: rec {+ m8c = {+ type = "app";
+ program = "${self.packages.${pkgs.system}.m8c-stable}/bin/m8c";+ };
+ default = m8c;
+ });
+
+ devShells = eachSystem (pkgs: with pkgs; {+ default = mkShell {+ packages = [
+ nix-prefetch-github
+ treefmtEval.${system}.config.build.wrapper+ ];
+ inputsFrom = [ self.packages.${system}.m8c-dev ];+ };
+ });
+
+ formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);+ };
+}
--- a/shell.nix
+++ b/shell.nix
@@ -1,8 +1,13 @@
-{ pkgs ? import <nixpkgs> {} }:-
-with pkgs;
-
-mkShell {- packages = with pkgs; [ nix-prefetch-github ];
- inputsFrom = [ (import ./default.nix {}).m8c-dev ];-}
+(import
+ (
+ let
+ lock = builtins.fromJSON (builtins.readFile ./flake.lock);
+ in
+ fetchTarball {+ url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";+ sha256 = lock.nodes.flake-compat.locked.narHash;
+ }
+ )
+ {+ src = ./.;
+ }).shellNix
--
⑨