feat: use flake-parts to clean up the flake.nix #95
11 changed files with 250 additions and 198 deletions
26
flake-modules/checks.nix
Normal file
26
flake-modules/checks.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, self', ... }:
|
||||||
|
{
|
||||||
|
checks =
|
||||||
|
let
|
||||||
|
src = builtins.path {
|
||||||
|
path = ../.;
|
||||||
|
name = "configuration.nix";
|
||||||
|
};
|
||||||
|
runCmdInSrc =
|
||||||
|
name: cmd:
|
||||||
|
pkgs.runCommandNoCC name { } ''
|
||||||
|
cd ${src}
|
||||||
|
${cmd}
|
||||||
|
mkdir $out
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
fmt = runCmdInSrc "fmt-src" "${lib.getExe self'.formatter} --check .";
|
||||||
|
lint = runCmdInSrc "lint-src" "${lib.getExe pkgs.statix} check .";
|
||||||
|
typos = runCmdInSrc "typos-src" "${lib.getExe pkgs.typos} .";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
25
flake-modules/default.nix
Normal file
25
flake-modules/default.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
let
|
||||||
|
overlays = builtins.attrValues inputs.self.overlays;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./checks.nix
|
||||||
|
./devshells.nix
|
||||||
|
./docs.nix
|
||||||
|
./example-vm.nix
|
||||||
|
./nixos-modules.nix
|
||||||
|
./nvim.nix
|
||||||
|
./overlays.nix
|
||||||
|
./scripts.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
perSystem =
|
||||||
|
{ system, pkgs, ... }:
|
||||||
|
{
|
||||||
|
_module.args.pkgs = import inputs.nixpkgs { inherit system overlays; };
|
||||||
|
|
||||||
|
# Nix files formatter (run `nix fmt`)
|
||||||
|
formatter = pkgs.nixfmt-rfc-style;
|
||||||
|
};
|
||||||
|
}
|
13
flake-modules/devshells.nix
Normal file
13
flake-modules/devshells.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
_: {
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, self', ... }:
|
||||||
|
{
|
||||||
|
devShells.default = pkgs.mkShellNoCC {
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.just
|
||||||
|
self'.packages.nvim
|
||||||
|
];
|
||||||
|
QEMU_OPTS_WL = "--enable-kvm -smp 4 -device virtio-gpu-rutabaga,gfxstream-vulkan=on,cross-domain=on,hostmem=2G,wsi=headless";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
16
flake-modules/docs.nix
Normal file
16
flake-modules/docs.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
packages = {
|
||||||
|
# Documentation
|
||||||
|
inherit (import ../docs { inherit pkgs lib; })
|
||||||
|
docs
|
||||||
|
nixos-markdown
|
||||||
|
nvim-markdown
|
||||||
|
home-markdown
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
46
flake-modules/example-vm.nix
Normal file
46
flake-modules/example-vm.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{ inputs, lib, ... }:
|
||||||
|
{
|
||||||
|
# Example vm configuration
|
||||||
|
flake.nixosConfigurations.vm =
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlays = builtins.attrValues inputs.self.overlays;
|
||||||
|
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam-original" ];
|
||||||
|
pkgs = import inputs.nixpkgs { inherit system overlays config; };
|
||||||
|
in
|
||||||
|
lib.nixosSystem {
|
||||||
|
inherit system pkgs;
|
||||||
|
modules = [
|
||||||
|
inputs.self.nixosModules.vm # import vm module
|
||||||
|
{
|
||||||
|
time.timeZone = "Europe/Berlin";
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
users.users.jdoe = {
|
||||||
|
password = "example";
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
"video"
|
||||||
|
"networkmanager"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
home-manager.users.jdoe = {
|
||||||
|
home = {
|
||||||
|
username = "jdoe";
|
||||||
|
homeDirectory = "/home/jdoe";
|
||||||
|
};
|
||||||
|
jhome = {
|
||||||
|
enable = true;
|
||||||
|
gui.enable = true;
|
||||||
|
dev.rust.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nix.registry.nixpkgs.flake = inputs.nixpkgs;
|
||||||
|
jconfig = {
|
||||||
|
enable = true;
|
||||||
|
gui.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
43
flake-modules/nixos-modules.nix
Normal file
43
flake-modules/nixos-modules.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ inputs, lib, ... }:
|
||||||
|
{
|
||||||
|
flake.nixosModules =
|
||||||
|
let
|
||||||
|
nvim-config.imports = [
|
||||||
|
inputs.nixvim.homeManagerModules.nixvim
|
||||||
|
../nvim
|
||||||
|
];
|
||||||
|
homeManagerModuleSandalone = import ../home {
|
||||||
|
inherit nvim-config;
|
||||||
|
inherit (inputs) stylix;
|
||||||
|
};
|
||||||
|
homeManagerModuleNixOS = import ../home { inherit nvim-config; };
|
||||||
|
nixosModule = {
|
||||||
|
imports = [
|
||||||
|
(import ../system { inherit (inputs) stylix; })
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
] ++ lib.optional (inputs.lix-module != null) inputs.lix-module.nixosModules.default;
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
sharedModules = [ homeManagerModuleNixOS ];
|
||||||
|
};
|
||||||
|
# Pin nixpkgs
|
||||||
|
nix.registry.nixpkgs.flake = inputs.nixpkgs;
|
||||||
|
};
|
||||||
|
|
||||||
|
machines = [ "vm" ];
|
||||||
|
mkMachine = hostname: {
|
||||||
|
imports = [
|
||||||
|
nixosModule
|
||||||
|
(import (../machines + "/${hostname}"))
|
||||||
|
];
|
||||||
|
home-manager.sharedModules = [ { jhome.hostName = hostname; } ];
|
||||||
|
};
|
||||||
|
machineModules = lib.genAttrs machines mkMachine;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
default = nixosModule;
|
||||||
|
inherit nixosModule homeManagerModuleNixOS homeManagerModuleSandalone;
|
||||||
|
}
|
||||||
|
// machineModules;
|
||||||
|
}
|
24
flake-modules/nvim.nix
Normal file
24
flake-modules/nvim.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
let
|
||||||
|
standalone = ../nvim/standalone.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.overlays.nixvim = inputs.nixvim.overlays.default;
|
||||||
|
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, system, ... }:
|
||||||
|
{
|
||||||
|
# Check standalone nvim build
|
||||||
|
checks.nvim = inputs.nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule {
|
||||||
|
inherit pkgs;
|
||||||
|
module = ../nvim/standalone.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Nvim standalone module
|
||||||
|
packages.nvim = inputs.nixvim.legacyPackages.${system}.makeNixvimWithModule {
|
||||||
|
inherit pkgs;
|
||||||
|
module = standalone;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
26
flake-modules/overlays.nix
Normal file
26
flake-modules/overlays.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
# Add unstable packages to overlay
|
||||||
|
flake.overlays.unstable =
|
||||||
|
final: prev:
|
||||||
|
let
|
||||||
|
unstablePkgs = inputs.unstable.legacyPackages.${prev.stdenv.hostPlatform.system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Get unstable packages
|
||||||
|
unstable = unstablePkgs;
|
||||||
|
|
||||||
|
# Update vim plugins with the versions from unstable
|
||||||
|
vimPlugins = prev.vimPlugins // unstablePkgs.vimPlugins;
|
||||||
|
|
||||||
|
# Get specific packages from unstable
|
||||||
|
inherit (unstablePkgs)
|
||||||
|
gitoxide
|
||||||
|
jujutsu
|
||||||
|
neovim-unwrapped
|
||||||
|
ruff # nixpkgs stable version is improperly configured by nixvim
|
||||||
|
# wezterm
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
14
flake-modules/scripts.nix
Normal file
14
flake-modules/scripts.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
let
|
||||||
|
scripts = import ../scripts;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Add scripts to overlay
|
||||||
|
flake.overlays.scripts = final: prev: scripts final;
|
||||||
|
|
||||||
|
# Add scripts to packages
|
||||||
|
perSystem =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
packages = scripts pkgs;
|
||||||
|
};
|
||||||
|
}
|
12
flake.lock
12
flake.lock
|
@ -117,16 +117,15 @@
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs-lib": [
|
||||||
"nixvim",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1726153070,
|
"lastModified": 1727826117,
|
||||||
"narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
|
"narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
|
"rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -278,7 +277,9 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"devshell": [],
|
"devshell": [],
|
||||||
"flake-compat": [],
|
"flake-compat": [],
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": [
|
||||||
|
"flake-parts"
|
||||||
|
],
|
||||||
"git-hooks": [],
|
"git-hooks": [],
|
||||||
"home-manager": [
|
"home-manager": [
|
||||||
"home-manager"
|
"home-manager"
|
||||||
|
@ -306,6 +307,7 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"lix-module": "lix-module",
|
"lix-module": "lix-module",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
|
203
flake.nix
203
flake.nix
|
@ -2,6 +2,7 @@
|
||||||
{
|
{
|
||||||
# A helpful description of your flake
|
# A helpful description of your flake
|
||||||
description = "My NixOS configuration";
|
description = "My NixOS configuration";
|
||||||
|
|
||||||
# Flake inputs
|
# Flake inputs
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "nixpkgs/nixos-24.05";
|
nixpkgs.url = "nixpkgs/nixos-24.05";
|
||||||
|
@ -33,6 +34,7 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "unstable";
|
nixpkgs.follows = "unstable";
|
||||||
home-manager.follows = "home-manager";
|
home-manager.follows = "home-manager";
|
||||||
|
flake-parts.follows = "flake-parts";
|
||||||
# disable optional inputs
|
# disable optional inputs
|
||||||
flake-compat.follows = "";
|
flake-compat.follows = "";
|
||||||
nix-darwin.follows = "";
|
nix-darwin.follows = "";
|
||||||
|
@ -41,205 +43,20 @@
|
||||||
git-hooks.follows = "";
|
git-hooks.follows = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
flake-parts = {
|
||||||
|
url = "github:hercules-ci/flake-parts";
|
||||||
|
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||||
|
};
|
||||||
# For deduplication
|
# For deduplication
|
||||||
systems.url = "github:nix-systems/default";
|
systems.url = "github:nix-systems/default";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Flake outputs that other flakes can use
|
# Flake outputs that other flakes can use
|
||||||
outputs =
|
outputs =
|
||||||
{
|
inputs:
|
||||||
self,
|
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
nixpkgs,
|
systems = import inputs.systems;
|
||||||
unstable,
|
|
||||||
stylix,
|
|
||||||
home-manager,
|
|
||||||
nixvim,
|
|
||||||
lix-module,
|
|
||||||
systems,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (nixpkgs) lib;
|
|
||||||
# Helpers for producing system-specific outputs
|
|
||||||
supportedSystems = import systems;
|
|
||||||
forEachSupportedSystem =
|
|
||||||
f:
|
|
||||||
nixpkgs.lib.genAttrs supportedSystems (
|
|
||||||
system:
|
|
||||||
f {
|
|
||||||
inherit system;
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
overlays = builtins.attrValues self.overlays;
|
|
||||||
scripts_pkgs = import ./scripts;
|
|
||||||
scripts = final: prev: scripts_pkgs final;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
checks = forEachSupportedSystem (
|
|
||||||
{ pkgs, system }:
|
|
||||||
let
|
|
||||||
src = builtins.path {
|
|
||||||
path = ./.;
|
|
||||||
name = "configuration.nix";
|
|
||||||
};
|
|
||||||
runCmdInSrc =
|
|
||||||
name: cmd:
|
|
||||||
pkgs.runCommandNoCC name { } ''
|
|
||||||
cd ${src}
|
|
||||||
${cmd}
|
|
||||||
mkdir $out
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
nvim = nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule {
|
|
||||||
pkgs = import nixpkgs { inherit system overlays; };
|
|
||||||
module = ./nvim/standalone.nix;
|
|
||||||
};
|
|
||||||
fmt = runCmdInSrc "fmt-src" "${lib.getExe self.formatter.${system}} --check .";
|
|
||||||
lint = runCmdInSrc "lint-src" "${lib.getExe pkgs.statix} check .";
|
|
||||||
typos = runCmdInSrc "typos-src" "${lib.getExe pkgs.typos} .";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
packages = forEachSupportedSystem (
|
imports = [ ./flake-modules ];
|
||||||
{ pkgs, system }:
|
|
||||||
scripts_pkgs pkgs
|
|
||||||
// {
|
|
||||||
inherit (import ./docs { inherit pkgs lib; })
|
|
||||||
docs
|
|
||||||
nixos-markdown
|
|
||||||
nvim-markdown
|
|
||||||
home-markdown
|
|
||||||
;
|
|
||||||
# Nvim standalone module
|
|
||||||
nvim = nixvim.legacyPackages.${system}.makeNixvimWithModule {
|
|
||||||
pkgs = import nixpkgs { inherit system overlays; };
|
|
||||||
module = ./nvim/standalone.nix;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
# Provide necessary overlays
|
|
||||||
overlays = {
|
|
||||||
inherit scripts;
|
|
||||||
nixvim = nixvim.overlays.default;
|
|
||||||
unstable =
|
|
||||||
final: prev:
|
|
||||||
let
|
|
||||||
unstablePkgs = unstable.legacyPackages.${prev.system};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Get unstable packages
|
|
||||||
unstable = unstablePkgs;
|
|
||||||
|
|
||||||
# Update vim plugins with the versions from unstable
|
|
||||||
vimPlugins = prev.vimPlugins // unstablePkgs.vimPlugins;
|
|
||||||
# Get specific packages from unstable
|
|
||||||
inherit (unstablePkgs)
|
|
||||||
gitoxide
|
|
||||||
jujutsu
|
|
||||||
neovim-unwrapped
|
|
||||||
ruff # nixpkgs stable version is improperly configured by nixvim
|
|
||||||
# wezterm
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Nix files formatter (run `nix fmt`)
|
|
||||||
formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixfmt-rfc-style);
|
|
||||||
|
|
||||||
# Example vm configuration
|
|
||||||
nixosConfigurations.vm =
|
|
||||||
let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam-original" ];
|
|
||||||
pkgs = import nixpkgs { inherit system overlays config; };
|
|
||||||
in
|
|
||||||
lib.nixosSystem {
|
|
||||||
inherit system pkgs;
|
|
||||||
modules = [
|
|
||||||
self.nixosModules.vm # import vm module
|
|
||||||
{
|
|
||||||
time.timeZone = "Europe/Berlin";
|
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
|
||||||
users.users.jdoe = {
|
|
||||||
password = "example";
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [
|
|
||||||
"wheel"
|
|
||||||
"video"
|
|
||||||
"networkmanager"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
home-manager.users.jdoe = {
|
|
||||||
home = {
|
|
||||||
username = "jdoe";
|
|
||||||
homeDirectory = "/home/jdoe";
|
|
||||||
};
|
|
||||||
jhome = {
|
|
||||||
enable = true;
|
|
||||||
gui.enable = true;
|
|
||||||
dev.rust.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
nix.registry.nixpkgs.flake = nixpkgs;
|
|
||||||
jconfig = {
|
|
||||||
enable = true;
|
|
||||||
gui.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nixosModules =
|
|
||||||
let
|
|
||||||
nvim-config.imports = [
|
|
||||||
nixvim.homeManagerModules.nixvim
|
|
||||||
./nvim
|
|
||||||
];
|
|
||||||
homeManagerModuleSandalone = import ./home { inherit nvim-config stylix; };
|
|
||||||
homeManagerModuleNixOS = import ./home { inherit nvim-config; };
|
|
||||||
nixosModule = {
|
|
||||||
imports = [
|
|
||||||
(import ./system { inherit stylix; })
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
] ++ nixpkgs.lib.optional (lix-module != null) lix-module.nixosModules.default;
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
sharedModules = [ homeManagerModuleNixOS ];
|
|
||||||
};
|
|
||||||
# Pin nixpkgs
|
|
||||||
nix.registry.nixpkgs.flake = nixpkgs;
|
|
||||||
};
|
|
||||||
|
|
||||||
machines = [ "vm" ];
|
|
||||||
mkMachine = hostname: {
|
|
||||||
imports = [
|
|
||||||
nixosModule
|
|
||||||
(import (./machines + "/${hostname}"))
|
|
||||||
];
|
|
||||||
home-manager.sharedModules = [ { jhome.hostName = hostname; } ];
|
|
||||||
};
|
|
||||||
machineModules = lib.genAttrs machines mkMachine;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
default = nixosModule;
|
|
||||||
inherit nixosModule homeManagerModuleNixOS homeManagerModuleSandalone;
|
|
||||||
}
|
|
||||||
// machineModules;
|
|
||||||
|
|
||||||
devShells = forEachSupportedSystem (
|
|
||||||
{ pkgs, system }:
|
|
||||||
{
|
|
||||||
default = pkgs.mkShellNoCC {
|
|
||||||
buildInputs = [
|
|
||||||
pkgs.just
|
|
||||||
self.packages.${system}.nvim
|
|
||||||
];
|
|
||||||
QEMU_OPTS_WL = "--enable-kvm -smp 4 -device virtio-gpu-rutabaga,gfxstream-vulkan=on,cross-domain=on,hostmem=2G,wsi=headless";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue