dotfiles/flake.nix
2025-06-05 14:19:27 +02:00

446 lines
12 KiB
Nix

#
# Our system configuration, as a Nix flake.
# Now with bonus packages!
#
# vim: et:ts=2:sw=2:
#
{
#
# The sources we depend on.
#
inputs = {
# Core and utilities.
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
# Not nix -- lix!
lix.url = "git+https://git@git.lix.systems/lix-project/lix";
# Home-manager.
home-manager = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs";
};
# Styling!
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
# Attic cache.
attic = {
url = "github:zhaofengli/attic";
inputs.nixpkgs.follows = "nixpkgs";
};
# Talon voice.
talon = {
url = "github:nix-community/talon-nix/master";
inputs.nixpkgs.follows = "nixpkgs";
};
# For our phone.
nix-on-droid = {
url = "github:nix-community/nix-on-droid/release-24.05";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
# Flakes for packages.
nil.url = "github:oxalica/nil";
agenix.url = "github:ryantm/agenix";
openxc7.url = "github:openXC7/toolchain-nix";
niri.url = "github:sodiboo/niri-flake";
waveforms.url = "github:liff/waveforms-flake";
esp-dev.url = "github:mirrexagon/nixpkgs-esp-dev";
# Flatpack support
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
# Various system type support.
darwin.url = "github:lnl7/nix-darwin/master";
darwin.inputs.nixpkgs.follows = "nixpkgs";
nix-hardware.url = "github:nixos/nixos-hardware";
};
#
# Package definitions for each of our various types.
# Used in the outputs section.
#
#
# Our various products; mostly machine configurations.
#
outputs =
{
self,
nixpkgs,
flake-utils,
home-manager,
openxc7,
darwin,
agenix,
nil,
lix,
niri,
stylix,
waveforms,
esp-dev,
attic,
nix-flatpak,
nix-on-droid,
nixos-hardware,
talon,
...
}:
#
# Include our package repository.
#
(import ./packages) {
inherit flake-utils nixpkgs;
deprekages = self.outputs.packages;
esp-dev = esp-dev.outputs.packages;
}
#
# Our per-machine configurations.
# Appeneded to the output of the packages generated by eachDefaultSystem.
#
// rec {
#
# Helpers.
#
# Common to all machines, Linux or macOS.
commonModuleSet = [
./nixos/packages
./nixos/dotfiles
./nixos/configs/stylix
./nixos/configs/ld.nix
./nixos/configs/lix.nix
./nixos/configs/nix.nix
./nixos/configs/ccache.nix
./nixos/configs/location.nix
./nixos/configs/calendar.nix
./nixos/configs/syncthing.nix
./nixos/configs/include-conf.nix
./nixos/configs/flake-registry.nix
./nixos/configs/storage-optimization.nix
./nixos/services/tailscale.nix
agenix.nixosModules.default
home-manager.nixosModules.home-manager
];
# Modules for all linux machines.
linuxModuleSet = [
./nixos/configuration.linux.nix
./nixos/configs/udev.nix
./nixos/configs/printing.nix
./nixos/configs/virt-host.nix
./nixos/configs/mount-rsync-kate.nix
./nixos/configs/mount-fastmail-tmllc.nix
./nixos/overlays/fixup-canon.nix
#
];
# Modules for Linux machines with Wayland GUIs.
linuxGuiModuleSet = [
nix-flatpak.nixosModules.nix-flatpak
./nixos/dotfiles/vscode.nix
./nixos/packages/gui.nix
./nixos/packages/wine.nix
./nixos/packages/flatpak.nix
./nixos/packages/proprietary.nix
./nixos/configs/gui
./nixos/configs/flatpak.nix
./nixos/configs/music-server
./nixos/configs/fonts-linux.nix
./nixos/overlays/fixup-nheko
./nixos/overlays/fixup-signal
./nixos/overlays/fixup-imhex.nix
#./nixos/overlays/customize-gajim
./nixos/overlays/sddm-no-vnc.nix
./nixos/overlays/fixup-armcord.nix
./nixos/overlays/jd-gui-wayland.nix
./nixos/overlays/fixup-mattermost.nix
./nixos/overlays/yubikey-touch-shitpost
./nixos/overlays/add-depends-calibre.nix
];
# Modules for all darwin machines.
darwinModuleSet = [
./nixos/configuration.darwin.nix
./nixos/packages/homebrew.nix
./nixos/packages/appstore.nix
./nixos/configs/fonts-darwin.nix
./nixos/configs/autosetup-darwin-aarch64.nix
];
# Modules for offline linux machines.
linuxOfflineModuleSet = [
./nixos/packages/offline.nix
./nixos/configs/waydroid.nix
];
# Helper functions for creating modules in the defintions below.
darwinModules = extraModules: commonModuleSet ++ darwinModuleSet ++ extraModules;
linuxModules = extraModules: commonModuleSet ++ linuxModuleSet ++ extraModules;
linuxGuiModules = extraModules: linuxModules (linuxGuiModuleSet ++ extraModules);
linuxOfflineGuiModules = extraModules: linuxGuiModules (linuxOfflineModuleSet ++ extraModules);
# Helper that populates all of our special arguments.
mkSpecialArgsGeneric = (
system: is-hm-standalone: is-droid: {
inherit
nixpkgs
stylix
is-hm-standalone
is-droid
;
niri = niri.outputs;
nil = nil.outputs.packages.${system};
deprekages = self.outputs.packages.${system};
agenix = agenix.outputs.packages.${system};
openxc7 = openxc7.outputs.packages.${system};
attic = attic.outputs.packages.${system};
esp-dev = esp-dev.outputs.packages.${system};
lix = lix.outputs.packages.${system};
talon = talon.outputs.packages.${system};
waveforms = waveforms.outputs.packages.${system};
# Helper to convert hm modules into NixOS or nix-on-droid modules.
callHm = module: (specialArgs: (import module) specialArgs);
normalizeModule =
if is-hm-standalone then
(module: module)
else
(
if is-droid then
(
module:
(
{ deprekages, nil, ... }:
{
home-manager.config =
{ pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages nil; });
}
)
)
else
(
module:
(
{ deprekages, nil, ... }:
{
home-manager.users.deprekated =
{ pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages nil; });
}
)
)
);
}
);
# Generic mkSpecialArgs for NixOS.
mkSpecialArgs = system: (mkSpecialArgsGeneric system false false);
# Specialized mkSpecialArgs for standalone home-manager.
mkSpecialArgsHm = system: pkgs: ((mkSpecialArgsGeneric system true false) // { inherit pkgs; });
mkSpecialArgsDroid = system: pkgs: ((mkSpecialArgsGeneric system false true) // { inherit pkgs; });
#
# Hosts!
#
# Trailblazer (main desktop).
nixosConfigurations.trailblazer = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/trailblazer
];
};
# Valere (powerful laptop).
nixosConfigurations.kanbaru = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/kanbaru.nix
./nixos/configs/steam.nix
./nixos/configs/virtualbox.nix
./nixos/configs/power-saving.nix
];
};
# Miko (mid-tier t2+x64 laptop that's nice and smol).
nixosConfigurations.miko = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/miko.nix
./nixos/configs/power-saving.nix
./nixos/configs/looking-glass.nix
nixos-hardware.nixosModules.apple-t2
];
};
# Hinata (travel laptop).
nixosConfigurations.hinata = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/hinata.nix
./nixos/configs/cellular.nix
./nixos/configs/power-saving.nix
];
};
# Veth (purse laptop).
nixosConfigurations.veth = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxGuiModules [
./nixos/hosts/veth
./nixos/configs/power-saving.nix
];
};
# Komashi (TMLLC T16 gen2).
nixosConfigurations.komashi = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/komashi
./nixos/configs/cellular.nix
./nixos/configs/virtualbox.nix
./nixos/configs/nfc-kernel.nix
./nixos/configs/power-saving.nix
];
};
# Utol (TMLLC T14 Gen1)
nixosConfigurations.utol = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxGuiModules [
./nixos/hosts/utol
./nixos/configs/cellular.nix
./nixos/configs/power-saving.nix
./nixos/packages/offline.nix
];
};
# Aigis (aarch64-linux, apple-silicon, build machine).
nixosConfigurations.aigis = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxGuiModules [
./nixos/hosts/aigis.nix
./nixos/configs/power-saving.nix
];
};
# Nomon (TMLLC aarch64-linux, broadcom-silicon, test machine).
nixosConfigurations.nomon = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxModules [ ./nixos/hosts/salas.nix ];
};
# Roshar (TMLLC aarch64-darwin, apple-silicon build machine).
darwinConfigurations.roshar = darwin.lib.darwinSystem rec {
system = "aarch64-darwin";
specialArgs = mkSpecialArgs system;
modules = darwinModules [ ./nixos/hosts/roshar.nix ];
};
# Mako (x86_64-darwin, apple-silicon build machine).
darwinConfigurations.mako = darwin.lib.darwinSystem rec {
system = "x86_64-darwin";
specialArgs = mkSpecialArgs system;
modules = darwinModules [ ./nixos/hosts/mako.nix ];
};
# Daikon, the UndefineD test machine.
homeConfigurations.daikon = home-manager.lib.homeManagerConfiguration rec {
pkgs = import nixpkgs {
system = "aarch64-linux";
config.allowUnfree = true;
};
extraSpecialArgs = mkSpecialArgsHm "aarch64-linux" pkgs;
modules = [
./nixos/hosts/daikon.nix
./nixos/dotfiles/hm.nix
./nixos/packages/hm.nix
];
};
# Design, our phone.
nixOnDroidConfigurations.design = nix-on-droid.lib.nixOnDroidConfiguration rec {
pkgs = import nixpkgs {
system = "aarch64-linux";
config.allowUnfree = true;
config.permittedInsecurePackages = [ "olm-3.2.16" ];
};
extraSpecialArgs = mkSpecialArgsDroid "aarch64-linux" pkgs;
modules = [
./nixos/hosts/design.nix
./nixos/configuration.droid.nix
./nixos/dotfiles/droid.nix
./nixos/configs/nix.droid.nix
#./nixos/configs/droid-gui.nix
./nixos/configs/flake-registry.nix
./nixos/packages/droid.nix
./nixos/packages/offline.droid.nix
#./nixos/packages/gui.droid.nix
];
};
};
}