Initial commit
This commit is contained in:
commit
cfcc57a8bd
353 changed files with 18756 additions and 0 deletions
70
flake/den/templates/default/modules/aspects/alice.nix
Normal file
70
flake/den/templates/default/modules/aspects/alice.nix
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
{ den, eg, ... }:
|
||||
{
|
||||
den.aspects.alice = {
|
||||
|
||||
# Alice can include other aspects.
|
||||
# For small, private one-shot aspects, use let-bindings like here.
|
||||
# for more complex or re-usable ones, define on their own modules,
|
||||
# as part of any aspect-subtree.
|
||||
includes =
|
||||
let
|
||||
# deadnix: skip # not required, showcasing angle-brackets syntax.
|
||||
inherit (den.lib) __findFile;
|
||||
|
||||
customEmacs.homeManager =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.emacs.enable = true;
|
||||
programs.emacs.package = pkgs.emacs30-nox;
|
||||
};
|
||||
in
|
||||
[
|
||||
# from local bindings.
|
||||
customEmacs
|
||||
# from the aspect tree, cooper example is defined bellow
|
||||
den.aspects.cooper
|
||||
den.aspects.setHost
|
||||
# from the `eg` namespace.
|
||||
eg.autologin
|
||||
# den included batteries that provide common configs.
|
||||
<den/primary-user> # alice is admin always.
|
||||
(<den/user-shell> "fish") # default user shell
|
||||
];
|
||||
|
||||
# Alice configures NixOS hosts it lives on.
|
||||
nixos =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
users.users.alice.packages = [ pkgs.vim ];
|
||||
};
|
||||
|
||||
# Alice home-manager.
|
||||
homeManager =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = [ pkgs.htop ];
|
||||
};
|
||||
|
||||
# <user>.provides.<host>, via eg/routes.nix
|
||||
provides.igloo =
|
||||
{ host, ... }:
|
||||
{
|
||||
nixos.programs.nh.enable = host.name == "igloo";
|
||||
};
|
||||
};
|
||||
|
||||
# This is a context-aware aspect, that emits configurations
|
||||
# **anytime** at least the `user` data is in context.
|
||||
# read more at https://vic.github.io/den/context-aware.html
|
||||
den.aspects.cooper =
|
||||
{ user, ... }:
|
||||
{
|
||||
nixos.users.users.${user.userName}.description = "Alice Cooper";
|
||||
};
|
||||
|
||||
den.aspects.setHost =
|
||||
{ host, ... }:
|
||||
{
|
||||
networking.hostName = host.hostName;
|
||||
};
|
||||
}
|
||||
48
flake/den/templates/default/modules/aspects/defaults.nix
Normal file
48
flake/den/templates/default/modules/aspects/defaults.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
config,
|
||||
# deadnix: skip # enable <den/brackets> syntax for demo.
|
||||
__findFile ? __findFile,
|
||||
den,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# Lets also configure some defaults using aspects.
|
||||
# These are global static settings.
|
||||
den.default = {
|
||||
darwin.system.stateVersion = 6;
|
||||
nixos.system.stateVersion = "25.05";
|
||||
homeManager.home.stateVersion = "25.05";
|
||||
};
|
||||
|
||||
# These are functions that produce configs
|
||||
den.default.includes = [
|
||||
# ${user}.provides.${host} and ${host}.provides.${user}
|
||||
<eg/routes>
|
||||
|
||||
# Enable home-manager on all hosts.
|
||||
<den/home-manager>
|
||||
|
||||
# Automatically create the user on host.
|
||||
<den/define-user>
|
||||
|
||||
# Disable booting when running on CI on all NixOS hosts.
|
||||
(if config ? _module.args.CI then <eg/ci-no-boot> else { })
|
||||
|
||||
# NOTE: be cautious when adding fully parametric functions to defaults.
|
||||
# defaults are included on EVERY host/user/home, and IF you are not careful
|
||||
# you could be duplicating config values. For example:
|
||||
#
|
||||
# # This will append 42 into foo option for the {host} and for EVERY {host,user}
|
||||
# ({ host, ... }: { nixos.foo = [ 42 ]; }) # DO-NOT-DO-THIS.
|
||||
#
|
||||
# # Instead try to be explicit if a function is intended for ONLY { host }.
|
||||
(den.lib.take.exactly (
|
||||
# deadnix: skip
|
||||
{ OS, host }:
|
||||
{
|
||||
nixos.networking.hostName = host.hostName;
|
||||
}
|
||||
))
|
||||
|
||||
];
|
||||
}
|
||||
15
flake/den/templates/default/modules/aspects/eg/autologin.nix
Normal file
15
flake/den/templates/default/modules/aspects/eg/autologin.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
# autologin is context-aware, parametric aspect.
|
||||
# it applies only if the context has at least { user }
|
||||
# meaning that has access to user data
|
||||
eg.autologin =
|
||||
{ user, ... }:
|
||||
{
|
||||
nixos =
|
||||
{ config, lib, ... }:
|
||||
lib.mkIf config.services.displayManager.enable {
|
||||
services.displayManager.autoLogin.enable = true;
|
||||
services.displayManager.autoLogin.user = user.userName;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
eg.ci-no-boot = {
|
||||
description = "Disables booting during CI";
|
||||
nixos = {
|
||||
boot.loader.grub.enable = false;
|
||||
fileSystems."/".device = "/dev/null";
|
||||
};
|
||||
};
|
||||
}
|
||||
37
flake/den/templates/default/modules/aspects/eg/routes.nix
Normal file
37
flake/den/templates/default/modules/aspects/eg/routes.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# This example implements an aspect "routing" pattern.
|
||||
#
|
||||
# Unlike `den.default` which is `parametric.atLeast`
|
||||
# we use `parametric.fixedTo` here, which help us
|
||||
# propagate an already computed context to all includes.
|
||||
#
|
||||
# This aspect, when installed in a `parametric.atLeast`
|
||||
# will just forward the same context.
|
||||
# The `mutual` helper returns an static configuration which
|
||||
# is ignored by parametric aspects, thus allowing
|
||||
# non-existing aspects to be just ignored.
|
||||
#
|
||||
# Be sure to read: https://vic.github.io/den/dependencies.html
|
||||
# See usage at: defaults.nix, alice.nix, igloo.nix
|
||||
#
|
||||
{ den, eg, ... }:
|
||||
{
|
||||
# Usage: `den.default.includes [ eg.routes ]`
|
||||
eg.routes =
|
||||
let
|
||||
inherit (den.lib) parametric;
|
||||
|
||||
# eg, `<user>._.<host>` and `<host>._.<user>`
|
||||
mutual = from: to: den.aspects.${from.aspect}._.${to.aspect} or { };
|
||||
|
||||
routes =
|
||||
{ host, user, ... }@ctx:
|
||||
{
|
||||
__functor = parametric.fixedTo ctx;
|
||||
includes = [
|
||||
(mutual user host)
|
||||
(mutual host user)
|
||||
];
|
||||
};
|
||||
in
|
||||
routes;
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
let
|
||||
installer = variant: {
|
||||
nixos =
|
||||
{ modulesPath, ... }:
|
||||
{
|
||||
imports = [ (modulesPath + "/installer/cd-dvd/installation-cd-${variant}.nix") ];
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
# make USB/VM installers.
|
||||
eg.vm-bootable.provides = {
|
||||
tui = installer "minimal";
|
||||
gui = installer "graphical-base";
|
||||
};
|
||||
}
|
||||
15
flake/den/templates/default/modules/aspects/eg/vm.nix
Normal file
15
flake/den/templates/default/modules/aspects/eg/vm.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ eg, ... }:
|
||||
{
|
||||
eg.vm.provides = {
|
||||
gui.includes = [
|
||||
eg.vm
|
||||
eg.vm-bootable._.gui
|
||||
eg.xfce-desktop
|
||||
];
|
||||
|
||||
tui.includes = [
|
||||
eg.vm
|
||||
eg.vm-bootable._.tui
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
eg.xfce-desktop.nixos =
|
||||
{ lib, ... }:
|
||||
{
|
||||
# https://gist.github.com/nat-418/1101881371c9a7b419ba5f944a7118b0
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
desktopManager = {
|
||||
xterm.enable = false;
|
||||
xfce.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
services.displayManager = {
|
||||
defaultSession = lib.mkDefault "xfce";
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
20
flake/den/templates/default/modules/aspects/igloo.nix
Normal file
20
flake/den/templates/default/modules/aspects/igloo.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
den.aspects.igloo = {
|
||||
# igloo host provides some home-manager defaults to its users.
|
||||
homeManager.programs.direnv.enable = true;
|
||||
|
||||
# NixOS configuration for igloo.
|
||||
nixos =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = [ pkgs.hello ];
|
||||
};
|
||||
|
||||
# <host>.provides.<user>, via eg/routes.nix
|
||||
provides.alice =
|
||||
{ user, ... }:
|
||||
{
|
||||
homeManager.programs.helix.enable = user.name == "alice";
|
||||
};
|
||||
};
|
||||
}
|
||||
5
flake/den/templates/default/modules/den.nix
Normal file
5
flake/den/templates/default/modules/den.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
den.hosts.x86_64-linux.igloo.users.alice = { };
|
||||
den.hosts.aarch64-darwin.apple.users.alice = { };
|
||||
den.homes.x86_64-linux.alice = { };
|
||||
}
|
||||
6
flake/den/templates/default/modules/dendritic.nix
Normal file
6
flake/den/templates/default/modules/dendritic.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.flake-file.flakeModules.dendritic
|
||||
];
|
||||
}
|
||||
37
flake/den/templates/default/modules/inputs.nix
Normal file
37
flake/den/templates/default/modules/inputs.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# This repo was generated with github:vic/flake-file#dendritic template.
|
||||
# Run `nix run .#write-flake` after changing any input.
|
||||
#
|
||||
# Inputs can be placed in any module, the best practice is to have them
|
||||
# as close as possible to their actual usage.
|
||||
# See: https://vic.github.io/dendrix/Dendritic.html#minimal-and-focused-flakenix
|
||||
#
|
||||
# For our template, we enable home-manager and nix-darwin by default, but
|
||||
# you are free to remove them if not being used by you.
|
||||
{ inputs, ... }:
|
||||
{
|
||||
|
||||
flake-file.inputs = {
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
darwin = {
|
||||
url = "github:nix-darwin/nix-darwin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
## these stable inputs are for wsl
|
||||
#nixpkgs-stable.url = "github:nixos/nixpkgs/release-25.05";
|
||||
#home-manager-stable.url = "github:nix-community/home-manager/release-25.05";
|
||||
#home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable";
|
||||
|
||||
#nixos-wsl = {
|
||||
# url = "github:nix-community/nixos-wsl";
|
||||
# inputs.nixpkgs.follows = "nixpkgs-stable";
|
||||
# inputs.flake-compat.follows = "";
|
||||
#};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
14
flake/den/templates/default/modules/namespace.nix
Normal file
14
flake/den/templates/default/modules/namespace.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ inputs, den, ... }:
|
||||
{
|
||||
# create an `eg` (example!) namespace.
|
||||
imports = [ (inputs.den.namespace "eg" false) ];
|
||||
|
||||
# you can have more than one namespace, create yours.
|
||||
# imports = [ (inputs.den.namespace "yours" true) ];
|
||||
|
||||
# you can also import namespaces from remote flakes.
|
||||
# imports = [ (inputs.den.namespace "ours" inputs.theirs) ];
|
||||
|
||||
# this line enables den angle brackets syntax in modules.
|
||||
_module.args.__findFile = den.lib.__findFile;
|
||||
}
|
||||
34
flake/den/templates/default/modules/tests.nix
Normal file
34
flake/den/templates/default/modules/tests.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Some CI checks to ensure this template always works.
|
||||
# Feel free to adapt or remove when this repo is yours.
|
||||
{ inputs, ... }:
|
||||
{
|
||||
perSystem =
|
||||
{
|
||||
pkgs,
|
||||
self',
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
checkCond = name: cond: pkgs.runCommandLocal name { } (if cond then "touch $out" else "");
|
||||
apple = inputs.self.darwinConfigurations.apple.config;
|
||||
igloo = inputs.self.nixosConfigurations.igloo.config;
|
||||
alice-at-igloo = igloo.home-manager.users.alice;
|
||||
vmBuilds = !pkgs.stdenvNoCC.isLinux || builtins.pathExists (self'.packages.vm + "/bin/vm");
|
||||
iglooBuilds = !pkgs.stdenvNoCC.isLinux || builtins.pathExists (igloo.system.build.toplevel);
|
||||
appleBuilds = !pkgs.stdenvNoCC.isDarwin || builtins.pathExists (apple.system.build.toplevel);
|
||||
in
|
||||
{
|
||||
checks."igloo builds" = checkCond "igloo-builds" iglooBuilds;
|
||||
checks."apple builds" = checkCond "apple-builds" appleBuilds;
|
||||
checks."vm builds" = checkCond "vm-builds" vmBuilds;
|
||||
|
||||
checks."alice enabled igloo nh" = checkCond "alice.provides.igloo" igloo.programs.nh.enable;
|
||||
checks."igloo enabled alice helix" =
|
||||
checkCond "igloo.provides.alice" alice-at-igloo.programs.helix.enable;
|
||||
|
||||
checks."alice-custom-emacs" = checkCond "hm.programs.emacs.package" (
|
||||
"emacs-nox" == lib.getName alice-at-igloo.programs.emacs.package
|
||||
);
|
||||
};
|
||||
}
|
||||
22
flake/den/templates/default/modules/vm.nix
Normal file
22
flake/den/templates/default/modules/vm.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# enables `nix run .#vm`. it is very useful to have a VM
|
||||
# you can edit your config an launch the VM to test stuff
|
||||
# instead of having to reboot each time.
|
||||
{ inputs, eg, ... }:
|
||||
{
|
||||
|
||||
den.aspects.igloo.includes = [
|
||||
eg.vm._.gui
|
||||
# eg.vm._.tui
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
packages.vm = pkgs.writeShellApplication {
|
||||
name = "vm";
|
||||
text = ''
|
||||
${inputs.self.nixosConfigurations.igloo.config.system.build.vm}/bin/run-igloo-vm "$@"
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue