{ config, inputs, lib, pkgs, ... }: let normalUsers = lib.attrsets.filterAttrs (name: config: config.isNormalUser) config.users.users; in { imports = [ inputs.home-manager.nixosModules.default ./extra.nix ]; programs = { hyprland.enable = true; fuse.userAllowOther = true; dconf.enable = true; }; home-manager = { extraSpecialArgs = { inherit inputs; }; backupFileExtension = "bak"; sharedModules = [{ imports = [ inputs.impermanence.nixosModules.home-manager.impermanence inputs.stylix.homeManagerModules.stylix ./configs/stylix.nix ./configs/hyprland.nix ./configs/git.nix ./configs/zsh.nix ./configs/kitty.nix ./configs/firefox.nix ]; home = { packages = with pkgs; [ rofi-wayland swww ]; stateVersion = "24.05"; }; systemd.user.startServices = "sd-switch"; }]; }; systemd.tmpfiles.rules = [ "d /persist/home/ 0755 root root -" ] ++ lib.attrsets.mapAttrsToList (user: config: "d /persist${config.home} 0700 ${user} users -" ) normalUsers; home-manager.users = lib.attrsets.mapAttrs' (user: config: lib.attrsets.nameValuePair (user) (let init = pkgs.pkgs.writeShellScriptBin "hyprland-init" '' ${pkgs.swww}/bin/swww-daemon &> /tmp/swww.log & while ! swww query &> /dev/null; do sleep 0.1 done ${pkgs.swww}/bin/swww img ${config.wallpaper} ''; in { home.persistence."/persist${config.home}" = { directories = [ "Documents" "Downloads" "Music" "Pictures" "Videos" "Templates" "VMs" "git" ".mozilla" ]; files = [ ".zsh_history" ".key.txt" ]; allowOther = true; }; programs.git = { userName = config.fullName; userEmail = config.email; }; stylix = { image = config.wallpaper; base16Scheme = config.base16Scheme; }; wayland.windowManager.hyprland.settings.exec-once = "${init}/bin/hyprland-init"; }) ) normalUsers; }