Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdc9e18035 | ||
|
|
374ba596ab | ||
|
|
ffeede1dca | ||
|
|
a7c17bc738 | ||
|
|
7e93c5267a | ||
|
|
fd7a2ca07d | ||
|
|
d7d6a42d48 | ||
|
|
3a5cdb5900 | ||
|
|
d8f92486c3 | ||
|
|
f6c6e97707 | ||
|
|
c976621357 |
72
README.md
Normal file
72
README.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# repo-lib
|
||||||
|
|
||||||
|
Simple Nix flake library for:
|
||||||
|
|
||||||
|
- a shared development shell (`mkDevShell`)
|
||||||
|
- an optional release command (`mkRelease`)
|
||||||
|
- a starter template (`template/`)
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- [Nix](https://nixos.org/download/) with flakes enabled
|
||||||
|
- [`direnv`](https://direnv.net/) (recommended)
|
||||||
|
|
||||||
|
## Use the template (new repo)
|
||||||
|
|
||||||
|
From your new project folder:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix flake new myapp -t 'git+https://git.dgren.dev/eric/nix-flake-lib?ref=v1.0.3#default' --refresh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use the library (existing repo)
|
||||||
|
|
||||||
|
Add this flake input:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
inputs.devshell-lib.url = "git+https://git.dgren.dev/eric/nix-flake-lib?ref=v1.0.3";
|
||||||
|
inputs.devshell-lib.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
```
|
||||||
|
|
||||||
|
Create your shell from `mkDevShell`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
env = devshell-lib.lib.mkDevShell {
|
||||||
|
inherit system;
|
||||||
|
extraPackages = [ ];
|
||||||
|
tools = [ ];
|
||||||
|
additionalHooks = { };
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Expose it in `devShells` as `default` and run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix develop
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix fmt # format files
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optional: release command
|
||||||
|
|
||||||
|
If your flake defines:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
packages.${system}.release = devshell-lib.lib.mkRelease { inherit system; };
|
||||||
|
```
|
||||||
|
|
||||||
|
Run releases with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
release
|
||||||
|
release patch
|
||||||
|
release minor beta
|
||||||
|
release stable
|
||||||
|
release set 1.2.3
|
||||||
|
```
|
||||||
|
|
||||||
|
The release script uses `./VERSION` as the source of truth and creates tags like `v1.2.3`.
|
||||||
20
flake.nix
20
flake.nix
@@ -95,6 +95,11 @@
|
|||||||
// additionalHooks;
|
// additionalHooks;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
toolNameWidth = builtins.foldl' (
|
||||||
|
maxWidth: t: pkgs.lib.max maxWidth (builtins.stringLength t.name)
|
||||||
|
) 0 tools;
|
||||||
|
toolLabelWidth = toolNameWidth + 1;
|
||||||
|
|
||||||
toolBannerScript = pkgs.lib.concatMapStrings (
|
toolBannerScript = pkgs.lib.concatMapStrings (
|
||||||
t:
|
t:
|
||||||
let
|
let
|
||||||
@@ -102,7 +107,8 @@
|
|||||||
in
|
in
|
||||||
''
|
''
|
||||||
if command -v ${t.bin} >/dev/null 2>&1; then
|
if command -v ${t.bin} >/dev/null 2>&1; then
|
||||||
printf " $CYAN ${t.name}:$RESET\t${colorVar}%s$RESET\n" "$(${t.bin} ${t.versionCmd})"
|
version="$(${t.bin} ${t.versionCmd} 2>/dev/null | head -n 1 | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//')"
|
||||||
|
printf " $CYAN %-${toString toolLabelWidth}s$RESET ${colorVar}%s$RESET\n" "${t.name}:" "$version"
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
) tools;
|
) tools;
|
||||||
@@ -129,6 +135,12 @@
|
|||||||
CYAN='\033[1;36m'
|
CYAN='\033[1;36m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
BLUE='\033[1;34m'
|
BLUE='\033[1;34m'
|
||||||
|
RED='\033[1;31m'
|
||||||
|
MAGENTA='\033[1;35m'
|
||||||
|
WHITE='\033[1;37m'
|
||||||
|
GRAY='\033[0;90m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
UNDERLINE='\033[4m'
|
||||||
RESET='\033[0m'
|
RESET='\033[0m'
|
||||||
|
|
||||||
printf "\n$GREEN 🚀 Dev shell ready$RESET\n\n"
|
printf "\n$GREEN 🚀 Dev shell ready$RESET\n\n"
|
||||||
@@ -248,8 +260,12 @@
|
|||||||
release = [
|
release = [
|
||||||
{
|
{
|
||||||
run = ''
|
run = ''
|
||||||
sed -E -i "s#^([[:space:]]*devshell-lib\\.url = \")git\\+https://git\\.dgren\\.dev/eric/nix-flake-lib[^"]*(\";)#\\1git+https://git.dgren.dev/eric/nix-flake-lib?ref=$FULL_TAG\\2#" "$ROOT_DIR/template/flake.nix"
|
sed -E -i "s#^([[:space:]]*devshell-lib\\.url = \")git\\+https://git\\.dgren\\.dev/eric/nix-flake-lib[^\"]*(\";)#\\1git+https://git.dgren.dev/eric/nix-flake-lib?ref=$FULL_TAG\\2#" "$ROOT_DIR/template/flake.nix"
|
||||||
log "Updated template/flake.nix devshell-lib ref to $FULL_TAG"
|
log "Updated template/flake.nix devshell-lib ref to $FULL_TAG"
|
||||||
|
|
||||||
|
sed -E -i "s|(nix flake new myapp -t ')git\\+https://git\\.dgren\\.dev/eric/nix-flake-lib[^']*(#default' --refresh)|\\1git+https://git.dgren.dev/eric/nix-flake-lib?ref=$FULL_TAG\\2|" "$ROOT_DIR/README.md"
|
||||||
|
sed -E -i "s#^([[:space:]]*inputs\\.devshell-lib\\.url = \")git\\+https://git\\.dgren\\.dev/eric/nix-flake-lib[^\"]*(\";)#\\1git+https://git.dgren.dev/eric/nix-flake-lib?ref=$FULL_TAG\\2#" "$ROOT_DIR/README.md"
|
||||||
|
log "Updated README.md devshell-lib refs to $FULL_TAG"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
10
template/.vscode/settings.json
vendored
Normal file
10
template/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.git": true,
|
||||||
|
"**/.svn": true,
|
||||||
|
"**/.hg": true,
|
||||||
|
"**/.DS_Store": true,
|
||||||
|
"**/Thumbs.db": true,
|
||||||
|
"VERSION": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
devshell-lib.url = "git+https://git.dgren.dev/eric/nix-flake-lib?ref=v0.0.2";
|
devshell-lib.url = "git+https://git.dgren.dev/eric/nix-flake-lib?ref=v1.0.3";
|
||||||
devshell-lib.inputs.nixpkgs.follows = "nixpkgs";
|
devshell-lib.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user