| Name | Hardware | Role |
|---|---|---|
| splinter | Dell XPS 14 9440 (Intel + Nvidia) | Primary laptop |
| bebop | Dell XPS 9310 2-in-1 (Intel) | Secondary laptop |
| rocksteady | Vultr VPS | Server (mail, forgejo, gotosocial, etc.) |
.
βββ flake.nix # Inputs & outputs (machines, overlays, home-manager)
βββ plumbing/ # Overlay machinery, all magic happens here
β βββ default.nix # Grafts auto-discovery, nixos/hm module lists
β βββ helpers.nix # overrideSrc, mkVimPlugin, fromFlake
β βββ README.md
βββ grafts/ # Package additions and overrides β drop files here
β βββ mpv.nix # override: example β prev.mpv-unwrapped.override { ... }
β βββ ionicons.nix # addition: example β final.callPackage { ... } {}
β βββ vim-plugins.nix # set: merges vim plugins into pkgs
β βββ nixos/ # NixOS modules (auto-applied to all nixosConfigurations)
β βββ home/ # HM modules (auto-applied to all homeConfigurations)
β βββ _dormant/ # Inactive packages β move to grafts/ to activate
β βββ README.md
βββ machines/ # Machine-specific settings
β βββ splinter.nix
β βββ bebop.nix
β βββ rocksteady.nix
β βββ README.md
βββ config/ # All configurations
βββ nixos/
β βββ base.nix # Shared base: overlays, nix settings, registry
β βββ common.nix # All machines: locale, nix, users, packages
β βββ laptop/ # Shared laptop config
β βββ server/ # Server config
β βββ helper-modules/ # Reusable NixOS modules
βββ home/
β βββ home.nix # HM entry point
β βββ common.nix # Orchestrator
β βββ ...
βββ README.md
Expose a flake package or pin a nixpkgs source (no graft file needed):
Name the input <pkgname>-src in flake.nix. The passthrough-overlay handles it automatically β new packages appear as pkgs.<pkgname>; flake = false inputs where <pkgname> exists in nixpkgs pin that package's source in-place.
Override or add a package from scratch:
Create grafts/<pkgname>.nix. It is auto-discovered β no other file needs editing.
The file receives { final, prev, inputs, helpers, ... }:
# grafts/mpv.nix β override existing nixpkgs package
{ prev, ... }:
prev.mpv-unwrapped.override { ffmpeg = prev.ffmpeg_6-full; }
# grafts/mytool.nix β add new package
{ final, ... }:
final.callPackage ({ stdenv, ... }: stdenv.mkDerivation { ... }) {}
# grafts/greenclip.nix β pin source to flake input
{ prev, inputs, helpers, ... }:
helpers.overrideSrc prev.greenclip inputs.greenclip-srcSee grafts/README.md for full documentation.
Drop a .nix file in grafts/nixos/ (NixOS) or grafts/home/ (home-manager). It is auto-applied to all configurations.
config/nixos/base.nix (all machines β overlays + nix settings)
βββ config/nixos/common.nix (locale, nix, users, packages)
βββ config/nixos/laptop/common.nix (splinter + bebop)
β βββ machines/{splinter,bebop}.nix (kernel, GPU, boot, disk)
βββ config/nixos/server/common.nix (rocksteady)
βββ machines/rocksteady.nix (boot, network)
# Build/switch NixOS
nixos-rebuild build --flake .#splinter
nixos-rebuild switch --flake .#splinter
# Build/switch home-manager
home-manager build --flake .#gurkan@splinter
home-manager switch --flake .#gurkan@splinter
# Build a graft package
nix build .#ionicons
nix build .#remark42