templates: add 'system-flake' template

This commit is contained in:
Alejandro Soto 2025-01-26 15:38:38 -06:00
parent 4b8609385a
commit 3a3d73d5b6
15 changed files with 212 additions and 0 deletions

View file

@ -18,6 +18,17 @@
formatter = (import nixpkgs {inherit system;}).alejandra;
})
// {
templates = let
system-flake = {
path = ./templates/system-flake;
description = "Opinionated flake for a NixOS system with Home Manager";
};
in {
inherit system-flake;
default = system-flake;
};
overlays = let
overlay = mapOverlayOverride "trivium" (import ./pkgs);
in {

3
templates/system-flake/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
!**/.keep
result
flake.lock

View file

@ -0,0 +1,34 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
trivium = {
url = "git+https://git.posixlycorrect.com/deepState/trivionomicon.git";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = flakes @ {
self,
nixpkgs,
unstable,
home-manager,
trivium,
}:
trivium.lib.mkSystemFlake {
system = "x86_64-linux";
inherit flakes;
localOverlayPath = ./pkgs;
nixpkgsConfigPath = ./pkgs/config;
hmSourcePath = ./home;
nixosSourcePath = ./sys;
};
}

View file

@ -0,0 +1,73 @@
{
config,
pkgs,
...
}: {
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = [
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/<user>/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
# EDITOR = "emacs";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

View file

@ -0,0 +1,10 @@
{
config,
pkgs,
...
}: {
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "ale";
home.homeDirectory = "/home/ale";
}

View file

@ -0,0 +1,5 @@
lib:
with lib; {
android_sdk.accept_license = true;
allowUnfreePredicate = pkg: import ./unfree.nix lib (getName pkg);
}

View file

@ -0,0 +1,7 @@
lib: name:
with lib;
elem name [
"libproprietary-v3"
"closed-source-pkg"
"favorite-abandonware"
]

View file

@ -0,0 +1,12 @@
final: prev:
with prev.lib; let
inherit (final) callPackage fetchpatch;
in {
lib = callPackage ./lib {};
hello-world = callPackage ./hello-world {};
override = {
sl = prev.sl.overrideAttrs {pname = "my-sl";};
};
}

View file

@ -0,0 +1,6 @@
CFLAGS += -O3 -s
all: hello-world
%: %.c
$(CC) $(CFLAGS) -o $@ $<

View file

@ -0,0 +1,14 @@
{stdenv, ...}:
stdenv.mkDerivation {
name = "hello-world";
version = "1.0.0";
src = ./.;
installPhase = ''
mkdir -p $out/bin
cp hello-world $out/bin
'';
meta.mainProgram = "hello-world";
}

View file

@ -0,0 +1,7 @@
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}

View file

@ -0,0 +1,3 @@
{callPackage}: {
fibonacci = callPackage ./fibonacci.nix {};
}

View file

@ -0,0 +1,7 @@
let
fib = n:
if n > 1
then fib (n - 1) + fib (n - 2)
else 1;
in
fib

View file

@ -0,0 +1,14 @@
{pkgs, ...}: {
# Let 'nixos-version --json' know about the Git revision
# of this flake.
system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev;
# Network configuration.
networking.firewall.allowedTCPPorts = [80];
# Enable a web server.
services.httpd = {
enable = true;
adminAddr = "morty@example.org";
};
}

View file

@ -0,0 +1,6 @@
{pkgs, ...}: {
boot.isContainer = true;
# Network configuration.
networking.useDHCP = false;
}