# SPDX-FileCopyrightText: 2025 Ethan Reece # # SPDX-License-Identifier: MIT { description = "Home Manager configuration"; inputs = { flake-lib = { url = "git+https://git.sudoer777.dev/me/nix-flake-base.git?ref=main"; flake = true; inputs = { devshell.follows = "devshell"; flake-parts.follows = "flake-parts"; git-hooks-nix.follows = "git-hooks-nix"; lix-module.follows = "lix-module"; nixgl.follows = "nixgl"; nixpkgs.follows = "nixpkgs"; treefmt-nix.follows = "treefmt-nix"; }; }; catppuccin.url = "github:catppuccin/nix"; devshell.url = "github:numtide/devshell"; disko = { url = "github:nix-community/disko/latest"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; git-hooks-nix.url = "github:cachix/git-hooks.nix"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; impermanence.url = "github:nix-community/impermanence"; lanzaboote.url = "github:nix-community/lanzaboote"; lix = { url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; flake = false; }; lix-module = { url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; inputs.lix.follows = "lix"; }; niri = { url = "github:sodiboo/niri-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-darwin = { url = "github:nix-darwin/nix-darwin"; inputs.nixpkgs.follows = "nixpkgs"; }; nixgl = { url = "github:nix-community/nixGL"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-on-droid = { url = "github:nix-community/nix-on-droid/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # nixpkgs-glibc235.url = "github:NixOS/nixpkgs/nixos-22.11"; nixpkgs-glibc235.url = "github:ditsuke/nixpkgs-compat/master-glibc__2_35"; nixpkgs-master.url = "github:NixOS/nixpkgs/master"; nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.05"; nixpkgs-xilinx.url = "github:NixOS/nixpkgs?rev=647e5c14cbd5067f44ac86b74f014962df460840"; nur.url = "github:nix-community/NUR"; pwndbg.url = "github:pwndbg/pwndbg"; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; spicetify-nix.url = "github:Gerg-L/spicetify-nix"; treefmt-nix.url = "github:numtide/treefmt-nix"; xlnx-utils.url = "github:moritz-meier/xilinx-nix-utils"; }; outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } ( { config, withSystem, ... }: { systems = [ "aarch64-linux" "aarch64-darwin" "x86_64-linux" ]; imports = [ inputs.flake-lib.flakeModule ./options ./sops ./home-manager/flake-module.nix ./nix-darwin/flake-module.nix ./nix-on-droid/flake-module.nix ./nixos/flake-module.nix ]; dictionary = [ "ASLR" "Boycat" "DLR" "Floorp" "gpg" "Guix" "Haseeb" "iterm" "JMAP" "Jujutsu" "lajp" "LanguageTool" "LicenseRef" "LLMs" "LTeX" "Majid" "MatthewCroughan" "MWMBL" "Niri" "Nix" "Reece" "TODO" "TrackMeNot" "twiter" "UTD" "Vivado" "Xilinx" ]; profiles = let name = "Ethan Reece"; keys = (import ./public-keys.nix); in { personal = rec { enable = true; domains = { realName = "ethanreece.com"; netName = "sudoer777.dev"; }; homeManagerSystem = "aarch64-linux"; fullNames.default = name; shortNames = rec { realFirst = "ethan"; realLast = "reece"; realFull = "${realFirst}${realLast}"; netName = "sudoer777"; }; emails = { default = "contact@${domains.realName}"; }; sshKeys = keys.ssh.profiles.personal; }; utdallas = rec { enable = true; domains.default = "utdallas.edu"; fullNames.default = name; shortNames.default = "edr220000"; emails.default = "${shortNames.default}@${domains.default}"; }; utd_cs4485.enable = true; utd_cs4390.enable = true; utd_syssec.enable = false; proxmox = { enable = true; homeManagerSystem = "x86_64-linux"; }; }; devices = { macos = { enable = true; system = "aarch64-darwin"; }; raspi = { enable = false; system = "aarch64-linux"; }; pixel6p = { enable = true; system = "aarch64-linux"; }; hpenvy = { enable = true; system = "x86_64-linux"; disko = { enable = true; disk = "/dev/nvme0n1"; }; }; minimal-x86_64 = { enable = true; system = "x86_64-linux"; iso = true; disko = { enable = true; disk = "/dev/nvme0n1"; }; }; graphical-x86_64 = { enable = true; system = "x86_64-linux"; iso = true; disko = { enable = true; disk = "/dev/nvme0n1"; }; }; }; perSystem = { lib, pkgs, system, ... }: let pkgs = import inputs.nixpkgs { inherit system; config = { allowUnfree = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin true; }; overlays = [ inputs.niri.overlays.niri inputs.nixgl.overlays.default inputs.nur.overlays.default ]; }; in { _module.args.pkgs = pkgs; editors.helix.enable = true; languages = { en-us = { enable = true; dictionary = config.dictionary; excludes = [ ".sops.yaml" "sops/*" "public-keys.nix" ]; vale."{**/*.md}".packages = { RedHat.enable = true; proselint.enable = true; write-good.enable = true; alex.enable = true; }; }; markdown.enable = true; nix.enable = true; plain-text.enable = true; toml.enable = true; yaml.enable = true; }; # pre-commit.settings.excludes = [ # ".sops.yaml" # "sops" # ]; # treefmt.settings.global.excludes = [ # ".sops.yaml" # "sops/*" # ]; devshells.default = { packages = [ pkgs.forgejo-cli ]; commands = [ { help = " generate GPG key"; name = "keygen-gpg"; command = "${pkgs.gnupg}/bin/gpg --generate-key"; category = " Init"; } { help = " generate SSH key"; name = "keygen-ssh"; command = "${pkgs.openssh}/bin/ssh-keygen"; category = " Init"; } { help = " `mutt_oauth2.py`"; name = "mutt_oauth2"; command = '' #!${pkgs.nushell}/bin/nu def --wrapped main [...args: string] { ^"${pkgs.neomutt}/share/neomutt/oauth2/mutt_oauth2.py" ...$args } ''; } ]; devshell = { motd = '' {202} Nix System Configurations{reset} $(type -p menu &>/dev/null && menu) ''; name = "System Configurations"; }; }; }; } ); }