dotfiles/flake.nix
2024-11-07 16:25:41 -07:00

505 lines
16 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";
flake = false;
};
lix-module = {
url = "git+https://git@git.lix.systems/lix-project/nixos-module";
inputs.lix.follows = "lix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
# 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";
};
# 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";
};
#
# 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-module,
niri,
stylix,
waveforms,
esp-dev,
attic,
nix-flatpak,
nix-on-droid,
...
}:
#
# Our various packages; generated for each system.
#
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs { inherit system; config.allowUnfree = true; };
callPackage = pkgs.callPackage;
deprekages= self.outputs.packages;
in
{
# The packages themselves,
packages = rec {
# fonts
font-monolisa = callPackage ./fonts/monolisa.nix { };
font-codicon = callPackage ./fonts/codicon.nix { };
font-manrope = callPackage ./fonts/manrope.nix { };
# scientific things
ffts = callPackage ./packages/scopehal-apps/ffts.nix { };
libsigrok4DSL = callPackage ./packages/scopehal-apps/libsigrok4DSL.nix { };
vulkan-sdk = callPackage ./packages/scopehal-apps/vulkan-sdk.nix { };
scopehal-apps = callPackage ./packages/scopehal-apps { deprekages = deprekages.${system}; };
scopehal-sigrok-bridge = callPackage ./packages/scopehal-apps/sigrok-bridge.nix {
deprekages = deprekages.${system};
};
# apps
navit = callPackage ./packages/navit.nix { };
navit-with-maps = callPackage ./packages/navit.nix { with_maps = true; };
binary-ninja = callPackage ./packages/binary-ninja.nix { };
argos = callPackage ./packages/argos.nix { };
todoist-electron = callPackage ./packages/todoist-electron.nix { };
home-assistant-desktop = callPackage ./packages/home-assistant-desktop/x86_64-linux.nix { };
flexbv = callPackage ./packages/flexbv.nix { };
glowing-bear-desktop = callPackage ./packages/glowing-bear-desktop.nix { };
hrvst-cli = callPackage ./packages/hrvst-cli { };
notion-app = callPackage ./packages/notion-app { inherit _7zz; };
# utilities
ykush = callPackage ./packages/ykush.nix { };
wsl-gpg-forward = callPackage ./windows/gpg-forward.nix { };
oxfs = callPackage ./packages/oxfs.nix { };
pcsclite = callPackage ./packages/pcsclite.nix { };
age-plugin-yubikey = callPackage ./packages/age-plugin-yubikey.nix { inherit pcsclite; };
humanfx = callPackage ./packages/humanfx { };
clipboard-sync = callPackage ./packages/clipboard-sync.nix { };
vsmartcard = callPackage ./packages/vsmartcard.nix { };
pcsc-relay = callPackage ./packages/pcsc-relay.nix { };
neard = callPackage ./packages/neard.nix { };
libnfc = callPackage ./packages/libnfc.nix { inherit libnfc-nci; };
jadx = callPackage ./packages/jadx { };
firefox-webserial = callPackage ./packages/firefox-webserial { inherit ws-server; };
ryzen-ppd = callPackage ./packages/ryzen-ppd { };
avbroot = callPackage ./packages/avbroot { };
okc-agents = callPackage ./packages/okc-agents.nix { };
_7zz = pkgs._7zz.override { useUasm = true; };
# libraries
libnfc-nci = callPackage ./packages/libnfc-nci { };
ws-server = callPackage ./packages/ws-server { };
rubyPackages = callPackage ./packages/ruby-gems.nix { };
# jetbrains products
jetbrains-jdk = callPackage ./packages/jetbrains-jdk.nix { };
jetbrains = import ./packages/jetbrains.nix {
inherit pkgs;
jdk = jetbrains-jdk;
};
# kernel modules
linuxPackages_i915-sriov = callPackage ./packages/i915-sriov/kernel.nix { };
i915-sriov = callPackage ./packages/i915-sriov { linuxPackages = linuxPackages_i915-sriov; };
linux-nfc-lenovo = callPackage ./packages/linux-nfc-lenovo { };
# hw support
dell = callPackage ./packages/dell { };
# udev rules~
t5-udev-rules = callPackage ./packages/t5-udev-rules { };
ykush-udev-rules = callPackage ./packages/ykush-udev-rules { };
dreamsource-udev-rules = callPackage ./packages/dreamsource-udev-rules { };
hantek-udev-rules = callPackage ./packages/hantek-udev-rules { };
linux-nfc-lenovo-udev-rules = callPackage ./packages/linux-nfc-lenovo/udev.nix { };
# weechat
weechat-discord = callPackage ./packages/weechat-discord { };
# kakoune
kak-tree-sitter = callPackage ./packages/kak-tree-sitter { };
# xonsh and xontribs
xonsh-with-xontribs = pkgs.xonsh.override {
extraPackages = pythonPackages: [
(callPackage ./packages/xontrib-whole-word-jumping.nix { })
(callPackage ./packages/xontrib-term-integrations.nix { })
(callPackage ./packages/xontrib-sh.nix { })
];
};
};
}
)
#
# 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/configs/stylix
./nixos/configs/nix.nix
./nixos/configs/dotfiles
./nixos/configs/calendar.nix
./nixos/configs/include-conf.nix
./nixos/configs/flake-registry.nix
./nixos/configs/storage-optimization.nix
./nixos/services/tailscale.nix
lix-module.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/services/taskwarrior.nix
./nixos/overlays/fixup-canon.nix
#
];
# Modules for Linux machines with Wayland GUIs.
linuxGuiModuleSet = [
waveforms.nixosModule
nix-flatpak.nixosModules.nix-flatpak
./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/fonts-linux.nix
./nixos/configs/music-server.nix
#./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
./nixos/services/clipboard-sync.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};
# 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, ... }:
{
home-manager.config =
{ pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages; });
}
)
)
else
(
module:
(
{ deprekages, ... }:
{
home-manager.users.deprekated =
{ pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages; });
}
)
)
);
}
);
# 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
./nixos/configs/looking-glass.nix
./nixos/configs/serve-cache.nix
];
};
# Valere (powerful laptop).
nixosConfigurations.valere = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/valere.nix
./nixos/configs/vmware.nix
./nixos/configs/power-saving.nix
];
};
# Tohru (mid-tier laptop with more ram).
nixosConfigurations.tohru = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/tohru.nix
./nixos/configs/power-saving.nix
./nixos/configs/looking-glass.nix
];
};
# Hinata (travel laptop).
nixosConfigurations.hinata = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxOfflineGuiModules [
./nixos/hosts/hinata.nix
./nixos/configs/power-saving.nix
./nixos/configs/cellular.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/vmware.nix
./nixos/configs/cellular.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/vmware.nix
./nixos/configs/cellular.nix
./nixos/configs/power-saving.nix
./nixos/packages/offline.nix
];
};
# Salas (TMLLC aarch64-linux, apple-silicon, build machine).
nixosConfigurations.salas = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = mkSpecialArgs system;
modules = linuxModules [ ./nixos/hosts/salas.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 ];
};
# Design, our phone.
nixOnDroidConfigurations.design = nix-on-droid.lib.nixOnDroidConfiguration rec {
pkgs = import nixpkgs {
system = "aarch64-linux";
config.allowUnfree = true;
};
extraSpecialArgs = mkSpecialArgsDroid "aarch64-linux" pkgs;
modules = [
./nixos/hosts/design.nix
./nixos/configuration.droid.nix
./nixos/configs/nix.droid.nix
./nixos/configs/droid-gui.nix
./nixos/configs/dotfiles/droid.nix
./nixos/configs/flake-registry.nix
./nixos/packages/droid.nix
./nixos/packages/offline.droid.nix
];
};
};
}