{ inputs, specialArgs, config, lib, pkgs, realUsers, ... }: { imports = [ inputs.home-manager.nixosModules.home-manager ]; options = { imalison.nixOverlay.enable = lib.mkOption { default = false; type = lib.types.bool; }; }; config = { home-manager.users = lib.genAttrs realUsers (_: {}); home-manager.extraSpecialArgs = { nixos = { inherit specialArgs config; }; }; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.backupCommand = pkgs.writeShellScript "home-manager-backup-command" '' set -eu target_path="$1" backup_ext="''${HOME_MANAGER_BACKUP_EXT:-hm-backup}" backup_path="''${target_path}.''${backup_ext}" if [[ ! -e "$backup_path" ]]; then mv -- "$target_path" "$backup_path" exit 0 fi timestamp="$(date +%Y%m%d-%H%M%S)" candidate="''${backup_path}.''${timestamp}" counter=0 while [[ -e "$candidate" ]]; do counter=$((counter + 1)) candidate="''${backup_path}.''${timestamp}-''${counter}" done mv -- "$target_path" "$candidate" ''; home-manager.backupFileExtension = "hm-backup"; home-manager.sharedModules = [./home-manager.nix]; nix = rec { extraOptions = '' experimental-features = nix-command flakes ''; registry.nixpkgs.flake = inputs.nixpkgs; settings = { # Allow per-repo flake `nixConfig` (substituters, keys, etc). accept-flake-config = true; keep-outputs = true; keep-derivations = true; substituters = [ "https://cache.nixos.org" "https://cuda-maintainers.cachix.org" "https://ai.cachix.org" "https://colonelpanic8-dotfiles.cachix.org" "https://codex-cli.cachix.org" "https://claude-code.cachix.org" ]; trusted-public-keys = [ "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" "ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc=" "colonelpanic8-dotfiles.cachix.org-1:O6GF3nptpeMFapX29okzO92eSWXR36zqW6ZF2C8P0eQ=" "codex-cli.cachix.org-1:1Br3H1hHoRYG22n//cGKJOk3cQXgYobUel6O8DgSing=" "claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk=" ]; nix-path = nixPath; }; channel.enable = false; nixPath = [ "nixpkgs=${inputs.nixpkgs.outPath}" ]; }; nixpkgs.overlays = [ # (import ./nvidia-container-toolkit-overlay.nix) (import ./runc-overlay.nix) (import ./emacs-overlay.nix) (import ./overlay.nix) # Use codex and claude-code from dedicated flakes with cachix (final: prev: { codex = inputs.codex-cli-nix.packages.${prev.stdenv.hostPlatform.system}.default; claude-code = inputs.claude-code-nix.packages.${prev.stdenv.hostPlatform.system}.default; git-sync-rs = let base = inputs.git-sync-rs.packages.${prev.stdenv.hostPlatform.system}.default; in prev.symlinkJoin { name = "${base.name}-wrapped"; paths = [base]; postBuild = '' ln -s $out/bin/git-sync-rs $out/bin/git-sync-on-inotify ln -s $out/bin/git-sync-rs $out/bin/git-sync ''; }; }) ] ++ ( if config.imalison.nixOverlay.enable then [inputs.nix.overlays.default] else [] ); # Allow all the things nixpkgs.config.allowUnfree = true; }; }