Compare commits

..

6 commits

26 changed files with 471 additions and 194 deletions

View file

@ -3,7 +3,7 @@
</p>
<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 align="center">
@ -22,7 +22,7 @@ There are 3 main templates in this repository:
#### 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`.
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.
@ -30,7 +30,7 @@ There are 3 main templates in this repository:
#### 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`
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
@ -40,6 +40,6 @@ Congratulations, you are now using Aux!
#### 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`
3. Fill in your `username` in `flake.nix`

View file

@ -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
View file

@ -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

View file

@ -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

View file

@ -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 { }; };
};
}

View file

@ -1,7 +0,0 @@
{ stdenv }:
stdenv.mkDerivation {
name = "hello";
src = ./.;
env.BINDIR = "${placeholder "out"}/bin";
}

View file

@ -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;
}

View file

@ -4,7 +4,7 @@
inputs = {
# 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.
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
@ -23,7 +23,13 @@
};
outputs =
inputs@{ darwin, home-manager, ... }:
inputs@{
self,
nixpkgs,
darwin,
home-manager,
...
}:
# we can use the `let` and `in` syntax to define variables
# and use them in the rest of the expression
let
@ -76,7 +82,7 @@
};
};
# Here we can create our user
users.users.${username} = {
uses.users.${username} = {
home = "/Users/${username}";
};

View file

@ -1,7 +1,7 @@
{
description = "An empty devshell with direnv support";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
outputs =
{ nixpkgs, ... }:

View file

@ -1,7 +1,7 @@
{
description = "Templates for getting started with Aux";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
outputs =
{ self, nixpkgs }:
@ -34,6 +34,10 @@
path = ./direnv;
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);
};

View file

@ -2,7 +2,7 @@
description = "A simple home-manager flake using Aux";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nixpkgs.url = "github:auxolotl/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";

38
rust/.editorconfig Normal file
View 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
View file

@ -0,0 +1,2 @@
result
target/

6
rust/Cargo.lock generated Normal file
View 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
View 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
View 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
View 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
View 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

View 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'
'';
}

View 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
View 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
View file

@ -0,0 +1,4 @@
[toolchain]
channel = "nightly-2023-12-21"
components = ["rust-analyzer", "rust-src"]
profile = "default"

27
rust/rustfmt.toml Normal file
View 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
View 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

View file

@ -101,27 +101,37 @@
];
nix = {
registry.nixpkgs = {
from = {
id = "nixpkgs";
type = "indirect";
};
to = {
owner = "auxolotl";
repo = "nixpkgs";
type = "github";
};
};
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?
}

View file

@ -1,7 +1,7 @@
{
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 =
inputs@{ nixpkgs, ... }:
@ -11,13 +11,11 @@
in
{
nixosConfigurations.${hostName} = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
./configuration.nix
{
networking.hostName = hostName;
nixpkgs.hostPlatform = system;
}
{ networking.hostName = hostName; }
];
specialArgs = {