forked from auxolotl/templates
Compare commits
6 commits
main
...
liketechni
Author | SHA1 | Date | |
---|---|---|---|
Florian Warzecha | 17a8f609e5 | ||
Florian Warzecha | 90b7063195 | ||
Florian Warzecha | 6c25032fcd | ||
Florian Warzecha | 8142658f81 | ||
Florian Warzecha | 38f8e550cf | ||
Florian Warzecha | a517191742 |
|
@ -3,7 +3,7 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
This is a template repository for getting started with your brand new Auxolotl system.
|
This is a template repository for getting started with your brand new FreshwaterOS system.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
@ -22,7 +22,7 @@ There are 3 main templates in this repository:
|
||||||
|
|
||||||
#### With Darwin (macOS)
|
#### With Darwin (macOS)
|
||||||
|
|
||||||
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flakes flake new -t git+https://git.auxolotl.org/auxolotl/templates#darwin NixFiles` in the terminal. This will setup the basic configuration for the system, this generate a configuration for you from the files located in the `darwin` directory.
|
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flake new -t github:auxolotl/templates#darwin NixFiles` in the terminal. This will setup the basic configuration for the system, this generate a configuration for you from the files located in the `darwin` directory.
|
||||||
2. The next step is to go into the `NixFiles` directory this can be achieved by running `cd NixFiles`.
|
2. The next step is to go into the `NixFiles` directory this can be achieved by running `cd NixFiles`.
|
||||||
3. Now we you need to read over the configuration files and make any changes that you see fit, some of these must include changing your username and hostname.
|
3. Now we you need to read over the configuration files and make any changes that you see fit, some of these must include changing your username and hostname.
|
||||||
4. You now must rebuild this configuration we can do this with `nix run darwin -- switch --flake .#hostname` hostname should be substituted for your systems hostname.
|
4. You now must rebuild this configuration we can do this with `nix run darwin -- switch --flake .#hostname` hostname should be substituted for your systems hostname.
|
||||||
|
@ -30,7 +30,7 @@ There are 3 main templates in this repository:
|
||||||
|
|
||||||
#### With NixOS
|
#### With NixOS
|
||||||
|
|
||||||
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flakes flake new -t git+https://git.auxolotl.org/auxolotl/templates#system NixFiles`
|
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flake new -t github:auxolotl/templates#system NixFiles`
|
||||||
2. Move into your new system with `cd NixFiles`
|
2. Move into your new system with `cd NixFiles`
|
||||||
3. Fill in your `hostName` in `flake.nix`
|
3. Fill in your `hostName` in `flake.nix`
|
||||||
4. Run `nixos-generate-config --show-hardware-config > hardware-configuration.nix` to generate configuration based on your filesystems and drivers
|
4. Run `nixos-generate-config --show-hardware-config > hardware-configuration.nix` to generate configuration based on your filesystems and drivers
|
||||||
|
@ -40,6 +40,6 @@ Congratulations, you are now using Aux!
|
||||||
|
|
||||||
#### With Home-manager
|
#### With Home-manager
|
||||||
|
|
||||||
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flakes flake new -t git+https://git.auxolotl.org/auxolotl/templates#home-manager NixFiles` to start
|
1. Run `nix --extra-experimental-features nix-command --extra-experimental-features flake new -t github:auxolotl/templates#home-manager NixFiles` to start
|
||||||
2. Move into your new Nix system with `cd NixFiles`
|
2. Move into your new Nix system with `cd NixFiles`
|
||||||
3. Fill in your `username` in `flake.nix`
|
3. Fill in your `username` in `flake.nix`
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
indent_size = 4
|
|
||||||
indent_style = space
|
|
||||||
insert_final_newline = true
|
|
||||||
max_line_length = 80
|
|
||||||
tab_width = 4
|
|
||||||
|
|
||||||
[{Makefile,*.mk}]
|
|
||||||
indent_style = tab
|
|
||||||
|
|
||||||
[*.nix]
|
|
||||||
indent_style = space
|
|
||||||
tab_width = 2
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.lock]
|
|
||||||
indent_style = unset
|
|
||||||
insert_final_newline = unset
|
|
64
c/.gitignore
vendored
64
c/.gitignore
vendored
|
@ -1,64 +0,0 @@
|
||||||
# binaries
|
|
||||||
hello
|
|
||||||
|
|
||||||
# language support
|
|
||||||
compile_commands.json
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# nix
|
|
||||||
.direnv
|
|
||||||
result*
|
|
||||||
repl-result-*
|
|
||||||
|
|
||||||
# Prerequisites
|
|
||||||
*.d
|
|
||||||
|
|
||||||
# Object files
|
|
||||||
*.o
|
|
||||||
*.ko
|
|
||||||
*.obj
|
|
||||||
*.elf
|
|
||||||
|
|
||||||
# Linker output
|
|
||||||
*.ilk
|
|
||||||
*.map
|
|
||||||
*.exp
|
|
||||||
|
|
||||||
# Precompiled Headers
|
|
||||||
*.gch
|
|
||||||
*.pch
|
|
||||||
|
|
||||||
# Libraries
|
|
||||||
*.lib
|
|
||||||
*.a
|
|
||||||
*.la
|
|
||||||
*.lo
|
|
||||||
|
|
||||||
# Shared objects (inc. Windows DLLs)
|
|
||||||
*.dll
|
|
||||||
*.so
|
|
||||||
*.so.*
|
|
||||||
*.dylib
|
|
||||||
|
|
||||||
# Executables
|
|
||||||
*.exe
|
|
||||||
*.out
|
|
||||||
*.app
|
|
||||||
*.i*86
|
|
||||||
*.x86_64
|
|
||||||
*.hex
|
|
||||||
|
|
||||||
# Debug files
|
|
||||||
*.dSYM/
|
|
||||||
*.su
|
|
||||||
*.idb
|
|
||||||
*.pdb
|
|
||||||
|
|
||||||
# Kernel Module Compile Results
|
|
||||||
*.mod*
|
|
||||||
*.cmd
|
|
||||||
.tmp_versions/
|
|
||||||
modules.order
|
|
||||||
Module.symvers
|
|
||||||
Mkfile.old
|
|
||||||
dkms.conf
|
|
30
c/Makefile
30
c/Makefile
|
@ -1,30 +0,0 @@
|
||||||
CC ?= gcc
|
|
||||||
CFLAGS += -pedantic -Wall -Wextra -O2
|
|
||||||
|
|
||||||
OUT := hello
|
|
||||||
BINDIR ?= /usr/bin
|
|
||||||
|
|
||||||
SRC += main.c
|
|
||||||
OBJ := $(SRC:.c=.o)
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: $(OUT)
|
|
||||||
|
|
||||||
$(OUT): $(OBJ)
|
|
||||||
$(CC) -o $@ $<
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
$(RM) $(OBJ)
|
|
||||||
|
|
||||||
.PHONY: fclean
|
|
||||||
fclean: clean
|
|
||||||
$(RM) -r $(OUT)
|
|
||||||
|
|
||||||
.PHONY: re
|
|
||||||
.NOTPARALLEL: re
|
|
||||||
re: fclean all
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
install -D hello ${BINDIR}/hello --mode 0755
|
|
27
c/flake.nix
27
c/flake.nix
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
description = "Aux template for C project";
|
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
outputs =
|
|
||||||
{ nixpkgs, ... }:
|
|
||||||
let
|
|
||||||
forAllSystems =
|
|
||||||
function:
|
|
||||||
nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (
|
|
||||||
system: function nixpkgs.legacyPackages.${system}
|
|
||||||
);
|
|
||||||
in
|
|
||||||
rec {
|
|
||||||
devShells = forAllSystems (pkgs: {
|
|
||||||
default = pkgs.mkShell { inputsFrom = [ packages.${pkgs.system}.hello ]; };
|
|
||||||
});
|
|
||||||
|
|
||||||
packages = forAllSystems (pkgs: rec {
|
|
||||||
default = hello;
|
|
||||||
hello = pkgs.callPackage ./hello.nix { };
|
|
||||||
});
|
|
||||||
|
|
||||||
overlays.default = final: prev: { hello = prev.callPackage ./default.nix { }; };
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
{ stdenv }:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "hello";
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
env.BINDIR = "${placeholder "out"}/bin";
|
|
||||||
}
|
|
11
c/main.c
11
c/main.c
|
@ -1,11 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
char greet[] = "hello, world!\n";
|
|
||||||
int written = printf("%s", greet);
|
|
||||||
|
|
||||||
return written == (sizeof(greet) - 1)
|
|
||||||
? EXIT_SUCCESS : EXIT_FAILURE;
|
|
||||||
}
|
|
|
@ -4,7 +4,7 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
# nixpkgs is the input that we use for this flake the end section `nixpkgs-unstable` refers to the branch
|
# nixpkgs is the input that we use for this flake the end section `nixpkgs-unstable` refers to the branch
|
||||||
# of nixpkgs that we want to use. This can be changed to any branch or commit hash.
|
# of nixpkgs that we want to use. This can be changed to any branch or commit hash.
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
|
@ -23,7 +23,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs@{ darwin, home-manager, ... }:
|
inputs@{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
darwin,
|
||||||
|
home-manager,
|
||||||
|
...
|
||||||
|
}:
|
||||||
# we can use the `let` and `in` syntax to define variables
|
# we can use the `let` and `in` syntax to define variables
|
||||||
# and use them in the rest of the expression
|
# and use them in the rest of the expression
|
||||||
let
|
let
|
||||||
|
@ -76,7 +82,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Here we can create our user
|
# Here we can create our user
|
||||||
users.users.${username} = {
|
uses.users.${username} = {
|
||||||
home = "/Users/${username}";
|
home = "/Users/${username}";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
description = "An empty devshell with direnv support";
|
description = "An empty devshell with direnv support";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
inputs.nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{ nixpkgs, ... }:
|
{ nixpkgs, ... }:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
description = "Templates for getting started with Aux";
|
description = "Templates for getting started with Aux";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
inputs.nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{ self, nixpkgs }:
|
{ self, nixpkgs }:
|
||||||
|
@ -34,6 +34,10 @@
|
||||||
path = ./direnv;
|
path = ./direnv;
|
||||||
description = "An empty devshell with direnv support";
|
description = "An empty devshell with direnv support";
|
||||||
};
|
};
|
||||||
|
rust = {
|
||||||
|
path = ./rust;
|
||||||
|
description = "Rust specific template providing packaging, dev-shell & cross-compilation; based on fenix.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
|
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
description = "A simple home-manager flake using Aux";
|
description = "A simple home-manager flake using Aux";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
|
|
38
rust/.editorconfig
Normal file
38
rust/.editorconfig
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.nix]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = false
|
||||||
|
|
||||||
|
[*.rs,Cargo.toml]
|
||||||
|
indent_size = 4
|
||||||
|
insert_final_newline = false
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
indent_size = 2
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
insert_final_newline = false
|
||||||
|
|
||||||
|
[*.{json,json5,yaml,yml,webmanifest}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.toml]
|
||||||
|
indent_style = unset
|
||||||
|
indent_size = 0
|
||||||
|
|
||||||
|
[*.lock]
|
||||||
|
indent_style = unset
|
||||||
|
insert_final_newline = unset
|
||||||
|
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
2
rust/.gitignore
vendored
Normal file
2
rust/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
result
|
||||||
|
target/
|
6
rust/Cargo.lock
generated
Normal file
6
rust/Cargo.lock
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# placeholder for the real Cargo.lock,
|
||||||
|
# so that evaluating the flake does not fail due to missing files,
|
||||||
|
# before using `cargo init` to create the 'real' files
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
9
rust/Cargo.toml
Normal file
9
rust/Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# placeholder for the real Cargo.toml,
|
||||||
|
# so that evaluating the flake does not fail due to missing files,
|
||||||
|
# before using `cargo init` to create the 'real' files
|
||||||
|
[package]
|
||||||
|
name = "bin"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
overflow-checks = true
|
9
rust/default.nix
Normal file
9
rust/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
(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
|
164
rust/flake.nix
Normal file
164
rust/flake.nix
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
flake-compat = {
|
||||||
|
url = "github:edolstra/flake-compat";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
fenix = {
|
||||||
|
url = "github:nix-community/fenix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
fenix,
|
||||||
|
...
|
||||||
|
}@inputs:
|
||||||
|
let
|
||||||
|
cargoMeta = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
||||||
|
packageName = cargoMeta.package.name;
|
||||||
|
|
||||||
|
forSystems =
|
||||||
|
function:
|
||||||
|
nixpkgs.lib.genAttrs [ "x86_64-linux" ] (
|
||||||
|
system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
|
||||||
|
overlays = [ (final: prev: { ${packageName} = self.packages.${system}.${packageName}; }) ];
|
||||||
|
};
|
||||||
|
|
||||||
|
fenixPkgs = fenix.packages.${pkgs.system};
|
||||||
|
fenixChannel = fenixPkgs.toolchainOf {
|
||||||
|
channel = "nightly";
|
||||||
|
date =
|
||||||
|
builtins.replaceStrings [ "nightly-" ] [ "" ]
|
||||||
|
(builtins.fromTOML (builtins.readFile ./rust-toolchain.toml)).toolchain.channel;
|
||||||
|
sha256 = "sha256-SzEeSoO54GiBQ2kfANPhWrt0EDRxqEvhIbTt2uJt/TQ=";
|
||||||
|
};
|
||||||
|
|
||||||
|
toolchainFor =
|
||||||
|
pkgs:
|
||||||
|
with fenixPkgs;
|
||||||
|
combine [
|
||||||
|
minimal.cargo
|
||||||
|
minimal.rustc
|
||||||
|
targets.${pkgs.rust.lib.toRustTarget pkgs.stdenv.targetPlatform}.latest.rust-std
|
||||||
|
];
|
||||||
|
|
||||||
|
rustPlatformFor =
|
||||||
|
pkgs:
|
||||||
|
let
|
||||||
|
toolchain = toolchainFor pkgs;
|
||||||
|
in
|
||||||
|
pkgs.makeRustPlatform {
|
||||||
|
cargo = toolchain;
|
||||||
|
rustc = toolchain;
|
||||||
|
};
|
||||||
|
|
||||||
|
crossPackageFor =
|
||||||
|
pkgs:
|
||||||
|
let
|
||||||
|
rustPlatform = rustPlatformFor pkgs;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"${packageName}-cross-${pkgs.stdenv.hostPlatform.config}${
|
||||||
|
if pkgs.stdenv.hostPlatform.isStatic then "-static" else ""
|
||||||
|
}" = pkgs.callPackage (./. + "/nix/packages/${packageName}.nix") {
|
||||||
|
inherit cargoMeta rustPlatform;
|
||||||
|
flake-self = self;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
function {
|
||||||
|
inherit
|
||||||
|
system
|
||||||
|
pkgs
|
||||||
|
fenixPkgs
|
||||||
|
fenixChannel
|
||||||
|
toolchainFor
|
||||||
|
rustPlatformFor
|
||||||
|
crossPackageFor
|
||||||
|
;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
formatter = forSystems ({ pkgs, ... }: pkgs.alejandra);
|
||||||
|
|
||||||
|
checks = forSystems (
|
||||||
|
{ pkgs, fenixChannel, ... }:
|
||||||
|
{
|
||||||
|
rustfmt =
|
||||||
|
pkgs.runCommand "check-rustfmt"
|
||||||
|
{
|
||||||
|
nativeBuildInputs =
|
||||||
|
let
|
||||||
|
fenixRustToolchain = fenixChannel.withComponents [
|
||||||
|
"cargo"
|
||||||
|
"rustfmt-preview"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
[ fenixRustToolchain ];
|
||||||
|
}
|
||||||
|
''
|
||||||
|
cd ${./.}
|
||||||
|
cargo fmt -- --check
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
packages = forSystems (
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
fenixChannel,
|
||||||
|
system,
|
||||||
|
crossPackageFor,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
${packageName} = pkgs.callPackage (./. + "/nix/packages/${packageName}.nix") {
|
||||||
|
inherit cargoMeta;
|
||||||
|
flake-self = self;
|
||||||
|
rustPlatform = pkgs.makeRustPlatform {
|
||||||
|
cargo = fenixChannel.toolchain;
|
||||||
|
rustc = fenixChannel.toolchain;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
default = self.packages.${system}.${packageName};
|
||||||
|
}
|
||||||
|
// crossPackageFor pkgs.pkgsCross.musl64.pkgsStatic
|
||||||
|
// crossPackageFor pkgs.pkgsCross.musl32.pkgsStatic
|
||||||
|
// crossPackageFor pkgs.pkgsCross.aarch64-multiplatform-musl.pkgsStatic
|
||||||
|
// crossPackageFor pkgs.pkgsCross.armv7l-hf-multiplatform.pkgsStatic
|
||||||
|
// crossPackageFor pkgs.pkgsCross.mingwW64.pkgsStatic
|
||||||
|
);
|
||||||
|
|
||||||
|
devShells = forSystems (
|
||||||
|
{ pkgs, fenixChannel, ... }:
|
||||||
|
let
|
||||||
|
fenixRustToolchain = fenixChannel.withComponents [
|
||||||
|
"cargo"
|
||||||
|
"clippy-preview"
|
||||||
|
"rust-src"
|
||||||
|
"rustc"
|
||||||
|
"rustfmt-preview"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
default = pkgs.callPackage (./. + "/nix/dev-shells/${packageName}.nix") {
|
||||||
|
inherit fenixRustToolchain cargoMeta;
|
||||||
|
};
|
||||||
|
ci = pkgs.callPackage (./nix/dev-shells/ci.nix) { inherit fenixRustToolchain cargoMeta; };
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
45
rust/justfile
Normal file
45
rust/justfile
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# move bin.nix files under nix/
|
||||||
|
# to the correct place
|
||||||
|
# for the new package name $packageName
|
||||||
|
# (i.e. $packageName.nix)
|
||||||
|
# delete this after running it
|
||||||
|
setup packageName:
|
||||||
|
mv nix/dev-shells/bin.nix "nix/dev-shells/{{ packageName }}.nix"
|
||||||
|
mv nix/packages/bin.nix "nix/packages/{{ packageName }}.nix"
|
||||||
|
rm Cargo.lock Cargo.toml
|
||||||
|
# pass --vcs none to disable addition to .gitignore
|
||||||
|
# (which would add the Cargo.lock to it)
|
||||||
|
cargo init --vcs none --lib --edition 2021 --name "{{ packageName }}"
|
||||||
|
# generate inital lockfile
|
||||||
|
cargo build
|
||||||
|
# make sure nix sees new *.nix files
|
||||||
|
git add .
|
||||||
|
|
||||||
|
build:
|
||||||
|
cargo build
|
||||||
|
|
||||||
|
build-release:
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
|
run:
|
||||||
|
cargo run
|
||||||
|
|
||||||
|
run-release:
|
||||||
|
cargo run --release
|
||||||
|
|
||||||
|
format:
|
||||||
|
cargo fmt --check
|
||||||
|
eclint -exclude "{Cargo.lock,flake.lock}"
|
||||||
|
|
||||||
|
format-fix:
|
||||||
|
cargo fmt
|
||||||
|
eclint -exclude "{Cargo.lock,flake.lock}" -fix
|
||||||
|
|
||||||
|
lint:
|
||||||
|
cargo clippy
|
||||||
|
|
||||||
|
lint-fix:
|
||||||
|
cargo clippy --fix
|
||||||
|
|
||||||
|
reuse:
|
||||||
|
reuse lint
|
34
rust/nix/dev-shells/bin.nix
Normal file
34
rust/nix/dev-shells/bin.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
cargoMeta,
|
||||||
|
pkgs,
|
||||||
|
mkShell,
|
||||||
|
fenixRustToolchain,
|
||||||
|
bashInteractive,
|
||||||
|
cargo-edit,
|
||||||
|
reuse,
|
||||||
|
just,
|
||||||
|
eclint,
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkShell {
|
||||||
|
|
||||||
|
inputsFrom = [ pkgs.${cargoMeta.package.name} ];
|
||||||
|
|
||||||
|
packages = [
|
||||||
|
fenixRustToolchain
|
||||||
|
|
||||||
|
bashInteractive
|
||||||
|
|
||||||
|
# for upgrading dependencies (i.e. versions in Cargo.toml)
|
||||||
|
cargo-edit
|
||||||
|
|
||||||
|
reuse
|
||||||
|
just
|
||||||
|
eclint
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
unset SOURCE_DATE_EPOCH
|
||||||
|
just --list --list-heading $'just <task>:\n'
|
||||||
|
'';
|
||||||
|
}
|
37
rust/nix/dev-shells/ci.nix
Normal file
37
rust/nix/dev-shells/ci.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
cargoMeta,
|
||||||
|
pkgs,
|
||||||
|
mkShell,
|
||||||
|
fenixRustToolchain,
|
||||||
|
bashInteractive,
|
||||||
|
reuse,
|
||||||
|
just,
|
||||||
|
eclint,
|
||||||
|
commitlint,
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkShell {
|
||||||
|
|
||||||
|
inputsFrom = [ pkgs.${cargoMeta.package.name} ];
|
||||||
|
|
||||||
|
packages = [
|
||||||
|
fenixRustToolchain
|
||||||
|
|
||||||
|
bashInteractive
|
||||||
|
|
||||||
|
reuse
|
||||||
|
just
|
||||||
|
eclint
|
||||||
|
# nix develop ".#ci" --command --
|
||||||
|
# eclint
|
||||||
|
# -exclude "Cargo.lock"
|
||||||
|
# -exclude "flake.lock"
|
||||||
|
|
||||||
|
commitlint
|
||||||
|
# nix develop ".#ci" --command --
|
||||||
|
# commitlint
|
||||||
|
# --color false --verbose
|
||||||
|
# --from $(git rev-list --max-parents=0 HEAD | head -n 1)
|
||||||
|
# --to HEAD
|
||||||
|
];
|
||||||
|
}
|
36
rust/nix/packages/bin.nix
Normal file
36
rust/nix/packages/bin.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
flake-self,
|
||||||
|
cargoMeta,
|
||||||
|
rustPlatform,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
fs = lib.fileset;
|
||||||
|
sourceFiles = fs.unions [
|
||||||
|
(fs.maybeMissing ../../src)
|
||||||
|
(fs.maybeMissing ../../Cargo.toml)
|
||||||
|
(fs.maybeMissing ../../Cargo.lock)
|
||||||
|
];
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
inherit (cargoMeta.package) version;
|
||||||
|
pname = cargoMeta.package.name;
|
||||||
|
|
||||||
|
src = fs.toSource {
|
||||||
|
root = ../../.;
|
||||||
|
fileset = sourceFiles;
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoLock.lockFile = ../../Cargo.lock;
|
||||||
|
|
||||||
|
VERGEN_IDEMPOTENT = "1";
|
||||||
|
VERGEN_GIT_SHA =
|
||||||
|
if flake-self ? "rev" then
|
||||||
|
flake-self.rev
|
||||||
|
else if flake-self ? "dirtyRev" then
|
||||||
|
flake-self.dirtyRev
|
||||||
|
else
|
||||||
|
lib.warn "no git rev available" "NO_GIT_REPO";
|
||||||
|
VERGEN_GIT_BRANCH = if flake-self ? "ref" then flake-self.ref else "";
|
||||||
|
VERGEN_GIT_COMMIT_TIMESTAMP = flake-self.lastModifiedDate;
|
||||||
|
}
|
4
rust/rust-toolchain.toml
Normal file
4
rust/rust-toolchain.toml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[toolchain]
|
||||||
|
channel = "nightly-2023-12-21"
|
||||||
|
components = ["rust-analyzer", "rust-src"]
|
||||||
|
profile = "default"
|
27
rust/rustfmt.toml
Normal file
27
rust/rustfmt.toml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
edition = "2021"
|
||||||
|
version = "Two"
|
||||||
|
|
||||||
|
newline_style = "Unix"
|
||||||
|
format_generated_files = false
|
||||||
|
|
||||||
|
hard_tabs = true
|
||||||
|
tab_spaces = 4
|
||||||
|
|
||||||
|
max_width = 80
|
||||||
|
doc_comment_code_block_width = 80
|
||||||
|
comment_width = 80
|
||||||
|
error_on_line_overflow = true
|
||||||
|
error_on_unformatted = true
|
||||||
|
|
||||||
|
normalize_comments = true
|
||||||
|
normalize_doc_attributes = true
|
||||||
|
use_try_shorthand = true
|
||||||
|
|
||||||
|
imports_granularity = "Crate"
|
||||||
|
group_imports = "StdExternalCrate"
|
||||||
|
|
||||||
|
reorder_impl_items = true
|
||||||
|
|
||||||
|
match_block_trailing_comma = true
|
||||||
|
|
||||||
|
use_field_init_shorthand = true
|
9
rust/shell.nix
Normal file
9
rust/shell.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
(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
|
|
@ -101,27 +101,37 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
|
registry.nixpkgs = {
|
||||||
|
from = {
|
||||||
|
id = "nixpkgs";
|
||||||
|
type = "indirect";
|
||||||
|
};
|
||||||
|
to = {
|
||||||
|
owner = "auxolotl";
|
||||||
|
repo = "nixpkgs";
|
||||||
|
type = "github";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
gc.automatic = true;
|
gc.automatic = true;
|
||||||
|
|
||||||
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
#
|
||||||
|
# Most users should NEVER change this value after the initial install, for any reason,
|
||||||
|
# even if you've upgraded your system to a new NixOS release.
|
||||||
|
#
|
||||||
|
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||||
|
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||||
|
# to actually do that.
|
||||||
|
#
|
||||||
|
# This value being lower than the current NixOS release does NOT mean your system is
|
||||||
|
# out of date, out of support, or vulnerable.
|
||||||
|
#
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
};
|
};
|
||||||
|
|
||||||
# This option defines the first version of NixOS you have installed on this particular machine,
|
|
||||||
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
|
||||||
#
|
|
||||||
# Most users should NEVER change this value after the initial install, for any reason,
|
|
||||||
# even if you've upgraded your system to a new NixOS release.
|
|
||||||
#
|
|
||||||
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
|
||||||
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
|
||||||
# to actually do that.
|
|
||||||
#
|
|
||||||
# This value being lower than the current NixOS release does NOT mean your system is
|
|
||||||
# out of date, out of support, or vulnerable.
|
|
||||||
#
|
|
||||||
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
|
||||||
# and migrated your data accordingly.
|
|
||||||
#
|
|
||||||
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
|
||||||
system.stateVersion = "24.05"; # Did you read the comment?
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
description = "A simple system flake using some Aux defaults";
|
description = "A simple system flake using some Aux defaults";
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
inputs.nixpkgs.url = "github:auxolotl/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs@{ nixpkgs, ... }:
|
inputs@{ nixpkgs, ... }:
|
||||||
|
@ -11,13 +11,11 @@
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations.${hostName} = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.${hostName} = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
modules = [
|
modules = [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
|
|
||||||
{
|
{ networking.hostName = hostName; }
|
||||||
networking.hostName = hostName;
|
|
||||||
nixpkgs.hostPlatform = system;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
|
|
Loading…
Reference in a new issue