templates: add 'system-flake' template
This commit is contained in:
parent
4b8609385a
commit
3a3d73d5b6
11
flake.nix
11
flake.nix
|
@ -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
3
templates/system-flake/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
!**/.keep
|
||||
result
|
||||
flake.lock
|
34
templates/system-flake/flake.nix
Normal file
34
templates/system-flake/flake.nix
Normal 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;
|
||||
};
|
||||
}
|
73
templates/system-flake/home/default.nix
Normal file
73
templates/system-flake/home/default.nix
Normal 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;
|
||||
}
|
10
templates/system-flake/home/platform/me@foo/default.nix
Normal file
10
templates/system-flake/home/platform/me@foo/default.nix
Normal 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";
|
||||
}
|
5
templates/system-flake/pkgs/config/default.nix
Normal file
5
templates/system-flake/pkgs/config/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
lib:
|
||||
with lib; {
|
||||
android_sdk.accept_license = true;
|
||||
allowUnfreePredicate = pkg: import ./unfree.nix lib (getName pkg);
|
||||
}
|
7
templates/system-flake/pkgs/config/unfree.nix
Normal file
7
templates/system-flake/pkgs/config/unfree.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
lib: name:
|
||||
with lib;
|
||||
elem name [
|
||||
"libproprietary-v3"
|
||||
"closed-source-pkg"
|
||||
"favorite-abandonware"
|
||||
]
|
12
templates/system-flake/pkgs/default.nix
Normal file
12
templates/system-flake/pkgs/default.nix
Normal 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";};
|
||||
};
|
||||
}
|
6
templates/system-flake/pkgs/hello-world/Makefile
Normal file
6
templates/system-flake/pkgs/hello-world/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
|||
CFLAGS += -O3 -s
|
||||
|
||||
all: hello-world
|
||||
|
||||
%: %.c
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
14
templates/system-flake/pkgs/hello-world/default.nix
Normal file
14
templates/system-flake/pkgs/hello-world/default.nix
Normal 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";
|
||||
}
|
7
templates/system-flake/pkgs/hello-world/hello-world.c
Normal file
7
templates/system-flake/pkgs/hello-world/hello-world.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("Hello, world!\n");
|
||||
return 0;
|
||||
}
|
3
templates/system-flake/pkgs/lib/default.nix
Normal file
3
templates/system-flake/pkgs/lib/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
|||
{callPackage}: {
|
||||
fibonacci = callPackage ./fibonacci.nix {};
|
||||
}
|
7
templates/system-flake/pkgs/lib/fibonacci.nix
Normal file
7
templates/system-flake/pkgs/lib/fibonacci.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
let
|
||||
fib = n:
|
||||
if n > 1
|
||||
then fib (n - 1) + fib (n - 2)
|
||||
else 1;
|
||||
in
|
||||
fib
|
14
templates/system-flake/sys/default.nix
Normal file
14
templates/system-flake/sys/default.nix
Normal 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";
|
||||
};
|
||||
}
|
6
templates/system-flake/sys/platform/foo/default.nix
Normal file
6
templates/system-flake/sys/platform/foo/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{pkgs, ...}: {
|
||||
boot.isContainer = true;
|
||||
|
||||
# Network configuration.
|
||||
networking.useDHCP = false;
|
||||
}
|
Loading…
Reference in a new issue