compat: fixes

* fix nixos-option
* use flake-compat for all backward compat concerns
* rebuild devshell after any nix file changes
* reexport system pkgs as legacyPackages
* provide lib flake output
* provide flake lib to nixos configs via `lib.flk`
* clean up flake.nix
This commit is contained in:
Timothy DeHerrera 2021-01-19 00:51:23 -07:00
parent 7002009c86
commit 1b80806516
No known key found for this signature in database
GPG Key ID: 8985725DB5B0C122
13 changed files with 173 additions and 214 deletions

2
.envrc
View File

@ -1,2 +1,2 @@
watch_file shell.nix
watch_file **/*.nix
use flake || use nix

13
compat/default.nix Normal file
View File

@ -0,0 +1,13 @@
let
flake = (import
(
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/99f1c2157fba4bfe6211a321fd0ee43199025dbf.tar.gz";
sha256 = "sha256:0x2jn3vrawwv9xp15674wjz9pixwjyj3j771izayl962zziivbx2";
}
)
{
src = ../.;
});
in
flake

View File

@ -1,17 +0,0 @@
let
inherit (builtins)
fetchTarball
fromJSON
readFile
;
lockfile = fromJSON (readFile ../flake.lock);
in
input:
let
locked = lockfile.nodes."${input}".locked;
inherit (locked) rev narHash owner repo;
in
fetchTarball {
url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";
sha256 = narHash;
}

10
compat/nixos/default.nix Normal file
View File

@ -0,0 +1,10 @@
{ ... }:
let
inherit (default.inputs.nixos) lib;
host = configs.${hostname} or configs.NixOS;
configs = default.nixosConfigurations;
default = (import ../.).defaultNix;
hostname = lib.fileContents /etc/hostname;
in
host

View File

@ -1,5 +0,0 @@
let
fetch = import ./fetch.nix;
nixpkgs = fetch "nixos";
in
nixpkgs

View File

@ -1,41 +0,0 @@
# this file is an impure recreation of the flake profile currently deployed
# based on the systems hostname. The purpose is so tools which do not yet have
# flake support (e.g `nixos-option`), can work as expected.
{ lib, ... }:
let
inherit (builtins) attrNames readDir;
nixpkgs = toString (import ./nixpkgs-compat.nix);
hostname = lib.fileContents /etc/hostname;
host = "/etc/nixos/hosts/${hostname}.nix";
config =
if (builtins.pathExists host) then
[ host ]
else
[ /etc/nixos/hosts/NixOS.nix ];
in
{
imports = (import ./modules/list.nix) ++ [
"${
builtins.fetchTarball
"https://github.com/nix-community/home-manager/archive/master.tar.gz"
}/nixos"
/etc/nixos/profiles/core
] ++ config;
networking.hostName = hostname;
nix.nixPath = [
"nixpkgs=${nixpkgs}"
"nixos-config=/etc/nixos/configuration.nix"
"nixpkgs-overlays=/etc/nixos/overlays"
];
nixpkgs.overlays =
let
overlays = map
(name: import (./overlays + "/${name}"))
(attrNames (readDir ./overlays));
in
overlays;
}

View File

@ -1,15 +1,6 @@
let
inherit (flake.inputs.nixos.lib) recurseIntoAttrs mapAttrs;
flake = (import
(
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/99f1c2157fba4bfe6211a321fd0ee43199025dbf.tar.gz";
sha256 = "sha256:0x2jn3vrawwv9xp15674wjz9pixwjyj3j771izayl962zziivbx2";
}
)
{
src = ./.;
}).defaultNix;
recurse = mapAttrs (_: v: recurseIntoAttrs v) flake.packages;
inherit (default.inputs.nixos.lib) recurseIntoAttrs;
default = (import ./compat).defaultNix;
in
recurse
builtins.mapAttrs (_: v: recurseIntoAttrs v) default.packages

View File

@ -15,48 +15,34 @@
outputs = inputs@{ self, home, nixos, master, flake-utils, nur, devshell, nixos-hardware }:
let
inherit (builtins) attrNames attrValues elem pathExists;
inherit (flake-utils.lib) eachDefaultSystem mkApp flattenTreeSystem;
inherit (nixos) lib;
inherit (lib) recursiveUpdate filterAttrs mapAttrs;
inherit (utils) pathsToImportedAttrs genPkgset overlayPaths modules
genPackages pkgImport;
utils = import ./lib/utils.nix { inherit lib; };
inherit (builtins) attrValues;
inherit (flake-utils.lib) eachDefaultSystem flattenTreeSystem;
inherit (nixos.lib) recursiveUpdate;
inherit (self.lib) overlays nixosModules genPackages pkgImport;
externOverlays = [ nur.overlay devshell.overlay ];
externModules = [ home.nixosModules.home-manager ];
pkgs' = unstable:
let
override = import ./pkgs/override.nix;
overlays = (attrValues self.overlays)
++ externOverlays
++ [ self.overlay (override unstable) ];
in
pkgImport nixos overlays;
unstable' = pkgImport master [ ];
osSystem = "x86_64-linux";
outputs =
let
system = osSystem;
unstablePkgs = unstable' system;
osPkgs = pkgs' unstablePkgs system;
system = "x86_64-linux";
pkgs = self.legacyPackages.${system};
in
{
inherit nixosModules overlays;
nixosConfigurations =
import ./hosts (recursiveUpdate inputs {
inherit lib osPkgs unstablePkgs utils externModules system;
});
import ./hosts
(recursiveUpdate inputs {
inherit pkgs externModules system;
inherit (pkgs) lib;
});
overlay = import ./pkgs;
overlays = pathsToImportedAttrs overlayPaths;
nixosModules = modules;
lib = import ./lib {
inherit (nixos) lib;
};
templates.flk.path = ./.;
@ -69,8 +55,26 @@
(eachDefaultSystem
(system:
let
unstablePkgs = unstable' system;
pkgs = pkgs' unstablePkgs system;
unstable = pkgImport master [ ] system;
pkgs =
let
override = import ./pkgs/override.nix;
overlays = (attrValues self.overlays)
++ externOverlays
++ [
self.overlay
(override unstable)
(final: prev: {
lib = (prev.lib or { }) // {
inherit (nixos.lib) nixosSystem;
flk = self.lib;
utils = flake-utils.lib;
};
})
];
in
pkgImport nixos overlays system;
packages = flattenTreeSystem system
(genPackages {
@ -80,9 +84,11 @@
{
inherit packages;
devShell = import ./shell.nix {
inherit pkgs;
devShell = import ./shell {
inherit pkgs nixos;
};
legacyPackages = pkgs;
}
)
)

View File

@ -3,16 +3,14 @@
, nixos
, master
, nixos-hardware
, osPkgs
, pkgs
, self
, system
, unstablePkgs
, utils
, externModules
, ...
}:
let
inherit (utils) recImport;
inherit (lib.flk) recImport;
inherit (builtins) attrValues removeAttrs;
unstableModules = [ ];
@ -50,12 +48,11 @@ let
[
"nixos-unstable=${master}"
"nixpkgs=${nixos}"
"nixos-config=${path}/configuration.nix"
"nixpkgs-overlays=${path}/overlays"
"home-manager=${home}"
];
nixpkgs.pkgs = osPkgs;
nixpkgs = { inherit pkgs; };
nix.registry = {
master.flake = master;

View File

@ -14,6 +14,7 @@ let
# Generate an attribute set by mapping a function over a list of values.
genAttrs' = values: f: listToAttrs (map f values);
# pkgImport :: Nixpkgs -> Overlays -> System -> Pkgs
pkgImport = nixpkgs: overlays: system:
import nixpkgs {
inherit system overlays;
@ -23,16 +24,13 @@ let
# Convert a list to file paths to attribute set
# that has the filenames stripped of nix extension as keys
# and imported content of the file as value.
#
pathsToImportedAttrs = paths:
genAttrs' paths (path: {
name = removeSuffix ".nix" (baseNameOf path);
value = import path;
});
in
{
inherit mapFilterAttrs genAttrs' pkgImport pathsToImportedAttrs;
overlayPaths =
let
overlayDir = ../overlays;
@ -40,6 +38,12 @@ in
in
map fullPath (attrNames (readDir overlayDir));
in
{
inherit mapFilterAttrs genAttrs' pkgImport pathsToImportedAttrs;
overlays = pathsToImportedAttrs overlayPaths;
recImport = { dir, _import ? base: import "${dir}/${base}.nix" }:
mapFilterAttrs
(_: v: v != null)
@ -51,7 +55,7 @@ in
nameValuePair ("") (null))
(readDir dir);
modules =
nixosModules =
let
# binary cache
cachix = import ../cachix.nix;

View File

@ -74,6 +74,9 @@ in
manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | sk --preview="manix '{}'" | xargs manix
'';
# fix nixos-option
nixos-option = "nixos-option -I nixpkgs=${toString ../../compat}";
# sudo
s = ifSudo "sudo -E ";
si = ifSudo "sudo -i";

View File

@ -1,92 +1 @@
let
nixpkgs = import ./compat/nixpkgs.nix;
fetch = import ./compat/fetch.nix;
devshell' = fetch "devshell";
pkgs' = import devshell' { inherit nixpkgs; };
in
{ pkgs ? pkgs', ... }:
let
build = "config.system.build";
installPkgs = (import "${nixpkgs}/nixos" {
configuration = { };
system = pkgs.system;
}).config.system.build;
flk = pkgs.writeShellScriptBin "flk" ''
if [[ -z "$1" ]]; then
echo "Usage: $(basename "$0") [ iso | up | install {host} | {host} [switch|boot|test] ]"
elif [[ "$1" == "up" ]]; then
mkdir -p up
hostname=$(hostname)
nixos-generate-config --dir up/$hostname
echo \
"{
imports = [ ../up/$hostname/configuration.nix ];
}" > hosts/up-$hostname.nix
git add -f up/$hostname
git add -f hosts/up-$hostname.nix
elif [[ "$1" == "iso" ]]; then
nix build $DEVSHELL_ROOT#nixosConfigurations.niximg.${build}.isoImage "${"\${@:2}"}"
elif [[ "$1" == "install" ]]; then
sudo nixos-install --flake ".#$2" "${"\${@:3}"}"
else
sudo nixos-rebuild --flake ".#$1" "${"\${@:2}"}"
fi
'';
name = "flk";
in
pkgs.mkDevShell {
inherit name;
packages = with pkgs; with installPkgs; [
git-crypt
nixos-install
nixos-generate-config
nixos-enter
pre-commit
];
env = { inherit name; };
commands = with pkgs; [
{
name = nixpkgs-fmt.pname;
package = nixpkgs-fmt;
help = nixpkgs-fmt.meta.description;
category = "linters";
}
{
name = flk.name;
help = "Build, deploy, and install nixflk";
category = "main";
package = flk;
}
{
name = "hooks";
help = "install git hooks";
command = "pre-commit install";
}
{
name = "grip";
help = python38Packages.grip.meta.description;
category = "servers";
package = python38Packages.grip;
}
{
name = git.pname;
help = git.meta.description;
category = "vcs";
package = git;
}
{
name = "nix";
help = nixFlakes.meta.description;
category = "main";
command = ''${nixFlakes}/bin/nix --option experimental-features "nix-command flakes ca-references" "$@"'';
}
];
}
(import ./compat).shellNix

89
shell/default.nix Normal file
View File

@ -0,0 +1,89 @@
{ pkgs ? (import ./compat).defaultNix.legacyPackages."${builtins.currentSystem}"
, nixos ? (import ./compat).defaultNix.inputs.nixos
, ...
}:
let
build = "config.system.build";
installPkgs = (import "${nixos}/nixos" {
configuration = { };
system = pkgs.system;
}).config.system.build;
flk = pkgs.writeShellScriptBin "flk" ''
if [[ -z "$1" ]]; then
echo "Usage: $(basename "$0") [ iso | up | install {host} | {host} [switch|boot|test] ]"
elif [[ "$1" == "up" ]]; then
mkdir -p up
hostname=$(hostname)
nixos-generate-config --dir up/$hostname
echo \
"{
imports = [ ../up/$hostname/configuration.nix ];
}" > hosts/up-$hostname.nix
git add -f up/$hostname
git add -f hosts/up-$hostname.nix
elif [[ "$1" == "iso" ]]; then
nix build $DEVSHELL_ROOT#nixosConfigurations.niximg.${build}.isoImage "${"\${@:2}"}"
elif [[ "$1" == "install" ]]; then
sudo nixos-install --flake ".#$2" "${"\${@:3}"}"
else
sudo nixos-rebuild --flake ".#$1" "${"\${@:2}"}"
fi
'';
name = "flk";
in
pkgs.mkDevShell {
inherit name;
packages = with pkgs; with installPkgs; [
git-crypt
nixos-install
nixos-generate-config
nixos-enter
nixos-option
pre-commit
];
env = { inherit name; };
commands = with pkgs; [
{
name = nixpkgs-fmt.pname;
package = nixpkgs-fmt;
help = nixpkgs-fmt.meta.description;
category = "linters";
}
{
name = flk.name;
help = "Build, deploy, and install nixflk";
category = "main";
package = flk;
}
{
name = "hooks";
help = "install git hooks";
command = "pre-commit install";
}
{
name = "grip";
help = python38Packages.grip.meta.description;
category = "servers";
package = python38Packages.grip;
}
{
name = git.pname;
help = git.meta.description;
category = "vcs";
package = git;
}
{
name = "nix";
help = nixFlakes.meta.description;
category = "main";
command = ''${nixFlakes}/bin/nix --option experimental-features "nix-command flakes ca-references" "$@"'';
}
];
}