commit 1f374d9581531cbf65d2605e71df8c048e3e245d Author: Hunter Date: Wed Dec 3 18:06:10 2025 -0500 NixOS systems config for laptop diff --git a/boot.nix b/boot.nix new file mode 100644 index 0000000..a9f5782 --- /dev/null +++ b/boot.nix @@ -0,0 +1,50 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + + # Bootloader. + boot = { + loader.systemd-boot.enable = true; + loader.efi.canTouchEfiVariables = true; + plymouth.enable = true; + + # Enable "Silent boot" + consoleLogLevel = 3; + initrd.verbose = false; + kernelParams = [ + "quiet" + "splash" + "boot.shell_on_fail" + "udev.log_priority=3" + "rd.systemd.show_status=auto" + ]; + # Hide the OS choice for bootloaders. + # It's still possible to open the bootloader list by pressing any key + # It will just not appear on screen unless a key is pressed + loader.timeout = 0; + }; + + # Set your time zone. + time.timeZone = "America/New_York"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + system.stateVersion = "25.11"; # Did you read the comment? +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ba13d55 --- /dev/null +++ b/flake.lock @@ -0,0 +1,442 @@ +{ + "nodes": { + "devshell": { + "inputs": { + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728330715, + "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", + "owner": "numtide", + "repo": "devshell", + "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764627417, + "narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=", + "owner": "nix-community", + "repo": "disko", + "rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "lazyvim-nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730504689, + "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "506278e768c2a08bec68eb62932193e341f55c90", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "lazyvim-nixvim", + "nixvim", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732021966, + "narHash": "sha256-mnTbjpdqF0luOkou8ZFi2asa1N3AA2CchR/RqCNmsGE=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "3308484d1a443fc5bc92012435d79e80458fe43c", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764776959, + "narHash": "sha256-d+5CGloq7Lo1u2SkzhF8oiOdUc6Z5emh22nTXUB9CFA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e1680d594a9281651cbf7d126941a8c8e2396183", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.11", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732884235, + "narHash": "sha256-r8j6R3nrvwbT1aUp4EPQ1KC7gm0pu9VcV1aNaB+XG6Q=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "819f682269f4e002884702b87e445c82840c68f2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "ixx": { + "inputs": { + "flake-utils": [ + "lazyvim-nixvim", + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729958008, + "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.0.6", + "repo": "ixx", + "type": "github" + } + }, + "lazyvim-nixvim": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "nixvim": "nixvim" + }, + "locked": { + "lastModified": 1733059720, + "narHash": "sha256-iywGWxIn8n0/J23QQAteKUhKgPakPTHStOeZnt4VC3E=", + "owner": "azuwis", + "repo": "lazyvim-nixvim", + "rev": "889a31caed5b62a259ed387ea368dbfca7e06417", + "type": "github" + }, + "original": { + "owner": "azuwis", + "repo": "lazyvim-nixvim", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732603785, + "narHash": "sha256-AEjWTJwOmSnVYsSJCojKgoguGfFfwel6z/6ud6UFMU8=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "6ab87b7c84d4ee873e937108c4ff80c015a40c7a", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nixlib": { + "locked": { + "lastModified": 1736643958, + "narHash": "sha256-tmpqTSWVRJVhpvfSN9KXBvKEXplrwKnSZNAoNPf/S/s=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "1418bc28a52126761c02dd3d89b2d8ca0f521181", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixos-generators": { + "inputs": { + "nixlib": "nixlib", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764234087, + "narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=", + "owner": "nix-community", + "repo": "nixos-generators", + "rev": "032a1878682fafe829edfcf5fdfad635a2efe748", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-generators", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1732981179, + "narHash": "sha256-F7thesZPvAMSwjRu0K8uFshTk3ZZSNAsXTIFvXBT+34=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "62c435d93bf046a5396f3016472e8f7c8e2aed65", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1764522689, + "narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": [ + "lazyvim-nixvim", + "flake-parts" + ], + "git-hooks": "git-hooks", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "lazyvim-nixvim", + "nixpkgs" + ], + "nuschtosSearch": "nuschtosSearch", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1733098942, + "narHash": "sha256-RnDTSTRYcfgqrkBPNN7uvojwRzEKPYiZaFg9VQ4m7hQ=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "838829c8f9cb238a915fe3d6ac36df1a3f040d2c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nuschtosSearch": { + "inputs": { + "flake-utils": "flake-utils", + "ixx": "ixx", + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731936508, + "narHash": "sha256-z0BSSf78LkxIrrFXZYmCoRRAxAmxMUKpK7CyxQRvkZI=", + "owner": "NuschtOS", + "repo": "search", + "rev": "fe07070f811b717a4626d01fab714a87d422a9e1", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "repo": "search", + "type": "github" + } + }, + "root": { + "inputs": { + "disko": "disko", + "home-manager": "home-manager", + "lazyvim-nixvim": "lazyvim-nixvim", + "nixos-generators": "nixos-generators", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "lazyvim-nixvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732894027, + "narHash": "sha256-2qbdorpq0TXHBWbVXaTqKoikN4bqAtAplTwGuII+oAc=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "6209c381904cab55796c5d7350e89681d3b2a8ef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..756c28a --- /dev/null +++ b/flake.nix @@ -0,0 +1,27 @@ +# /etc/nixos/flake.nix +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; + home-manager = { + url = "github:nix-community/home-manager/release-25.11"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-generators = { + url = "github:nix-community/nixos-generators"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + lazyvim-nixvim.url = "github:azuwis/lazyvim-nixvim"; + }; + outputs = inputs@{ self, nixpkgs, home-manager, disko, nixos-generators, lazyvim-nixvim, ... }: { + nixosConfigurations = { + "nix-laptop1" = import ./hosts { + inherit inputs; + hostName = "nix-laptop1"; + }; + }; + }; +} diff --git a/hosts/default.nix b/hosts/default.nix new file mode 100644 index 0000000..9a16b45 --- /dev/null +++ b/hosts/default.nix @@ -0,0 +1,85 @@ +{ inputs, hostName, system ? "x86_64-linux" }: + +let + nixpkgs = inputs.nixpkgs; + home-manager = inputs.home-manager; + disko = inputs.disko; + + lib = nixpkgs.lib; + + commonModules = [ + ../boot.nix + ../net.nix + ../sw.nix + ../users + home-manager.nixosModules.home-manager + disko.nixosModules.disko + ({ ... }: { + disko.enableConfig = true; + + disko.devices = { + disk.main = { + type = "disk"; + + device = lib.mkDefault "/dev/nvme0n1"; + + content = { + type = "gpt"; + partitions = { + ESP = { + name = "ESP"; + label = "BOOT"; + size = "1024MiB"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + extraArgs = [ "-n" "BOOT" ]; + }; + }; + + swap = { + name = "swap"; + label = "swap"; + size = "34GiB"; + content = { + type = "swap"; + }; + }; + + root = { + name = "root"; + label = "root"; + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + extraArgs = [ "-L" "ROOT" ]; + }; + }; + }; + }; + }; + }; + }) + ]; + + # Map hostnames to their per-host module + hostModules = { + nix-laptop1 = ./nix-laptop1.nix; + }; +in +lib.nixosSystem { + inherit system; + + specialArgs = { inherit inputs; }; + + modules = + commonModules + ++ [ (hostModules.${hostName} or (throw "Unknown host '${hostName}' in hosts/default.nix")) ] + ++ [ + { networking.hostName = hostName; } + ]; +} diff --git a/hosts/nix-laptop1.nix b/hosts/nix-laptop1.nix new file mode 100644 index 0000000..ddc5754 --- /dev/null +++ b/hosts/nix-laptop1.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/net.nix b/net.nix new file mode 100644 index 0000000..bcd3e01 --- /dev/null +++ b/net.nix @@ -0,0 +1,13 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/New_York"; +} diff --git a/sw.nix b/sw.nix new file mode 100644 index 0000000..d095ef3 --- /dev/null +++ b/sw.nix @@ -0,0 +1,57 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, inputs, ... }: + +{ + # Enable the KDE Plasma Desktop Environment. + services.displayManager.sddm.enable = true; + services.desktopManager.plasma6.enable = true; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + # Install firefox. + programs.firefox.enable = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + environment.systemPackages = with pkgs; [ + tmux + htop + binutils + man + oh-my-posh + zsh + git + inputs.lazyvim-nixvim.packages.${stdenv.hostPlatform.system}.nvim + ]; + + programs.zsh.enable = true; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + programs.mtr.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh.enable = true; +} diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..bbbaef0 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,43 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users = { + root.hashedPassword = "!"; + engr-ugaif = { + isNormalUser = true; + description = "UGA Innovation Factory"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + kdePackages.kate + ]; + hashedPassword = "$6$El6e2NhPrhVFjbFU$imlGZqUiizWw5fMP/ib0CeboOcFhYjIVb8oR1V1dP2NjDeri3jMoUm4ZABOB2uAF8UEDjAGHhFuZxhtbHg647/"; + }; + + hdh20267 = { + isNormalUser = true; + description = "Hunter Halloran"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + kdePackages.kate + ]; + shell = pkgs.zsh; + }; + }; + + # Home Manager configs per user + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + + users = { + "engr-ugaif" = import ./engr-ugaif.nix; + "hdh20267" = import ./hdh20267.nix; + "root" = import ./root.nix; + }; + }; +} diff --git a/users/engr-ugaif.nix b/users/engr-ugaif.nix new file mode 100644 index 0000000..be484e2 --- /dev/null +++ b/users/engr-ugaif.nix @@ -0,0 +1,78 @@ +{ config, pkgs, lib, ... }: +let + # Fetch upstream OMP theme once + jyumppTheme = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/Jyumpp/jyumpp-zsh-theme/refs/heads/master/.jyumpp.omp.json"; + # After first build Nix will show the wanted hash; add it here for reproducibility: + hash = "sha256-jsN3hkyT0dJNTYEmDHQPp++oscQLgYGNj7PZAcIW2TA="; + }; +in +{ + home.username = "engr-ugaif"; + home.homeDirectory = "/home/engr-ugaif"; + home.stateVersion = "25.11"; + + home.packages = []; + + programs.zsh = { + enable = true; + + # Plugins + historySubstringSearch = { + enable = true; + searchDownKey = "^[[B"; + searchUpKey = "^[[A"; + }; + + zplug = { + enable = true; + plugins = [ + { + name = "jeffreytse/zsh-vi-mode"; + } + { + name = "BronzeDeer/zsh-completion-sync"; + } + ]; + }; + + history = { + append = true; + }; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + }; + + programs.zoxide = { + enable = true; + enableZshIntegration = true; + }; + + programs.lsd = { + enable = true; + enableZshIntegration = true; + }; + + programs.oh-my-posh = { + enable = true; + enableZshIntegration = true; + enableBashIntegration = true; + settings = builtins.fromJSON (builtins.unsafeDiscardStringContext (builtins.readFile(jyumppTheme))); + }; + + # https://github.com/nvim-treesitter/nvim-treesitter#i-get-query-error-invalid-node-type-at-position + xdg.configFile."nvim/parser".source = + let + parsers = pkgs.symlinkJoin { + name = "treesitter-parsers"; + paths = (pkgs.vimPlugins.nvim-treesitter.withPlugins (plugins: with plugins; [ + c + lua + ])).dependencies; + }; + in + "${parsers}/parser"; + +} diff --git a/users/hdh20267.nix b/users/hdh20267.nix new file mode 100644 index 0000000..da4181a --- /dev/null +++ b/users/hdh20267.nix @@ -0,0 +1,78 @@ +{ config, pkgs, lib, ... }: +let + # Fetch upstream OMP theme once + jyumppTheme = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/Jyumpp/jyumpp-zsh-theme/refs/heads/master/.jyumpp.omp.json"; + # After first build Nix will show the wanted hash; add it here for reproducibility: + hash = "sha256-jsN3hkyT0dJNTYEmDHQPp++oscQLgYGNj7PZAcIW2TA="; + }; +in +{ + home.username = "hdh20267"; + home.homeDirectory = "/home/hdh20267"; + home.stateVersion = "25.11"; + + home.packages = []; + + programs.zsh = { + enable = true; + + # Plugins + historySubstringSearch = { + enable = true; + searchDownKey = "^[[B"; + searchUpKey = "^[[A"; + }; + + zplug = { + enable = true; + plugins = [ + { + name = "jeffreytse/zsh-vi-mode"; + } + { + name = "BronzeDeer/zsh-completion-sync"; + } + ]; + }; + + history = { + append = true; + }; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + }; + + programs.zoxide = { + enable = true; + enableZshIntegration = true; + }; + + programs.lsd = { + enable = true; + enableZshIntegration = true; + }; + + programs.oh-my-posh = { + enable = true; + enableZshIntegration = true; + enableBashIntegration = true; + settings = builtins.fromJSON (builtins.unsafeDiscardStringContext (builtins.readFile(jyumppTheme))); + }; + + # https://github.com/nvim-treesitter/nvim-treesitter#i-get-query-error-invalid-node-type-at-position + xdg.configFile."nvim/parser".source = + let + parsers = pkgs.symlinkJoin { + name = "treesitter-parsers"; + paths = (pkgs.vimPlugins.nvim-treesitter.withPlugins (plugins: with plugins; [ + c + lua + ])).dependencies; + }; + in + "${parsers}/parser"; + +} diff --git a/users/root.nix b/users/root.nix new file mode 100644 index 0000000..68df022 --- /dev/null +++ b/users/root.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, ... }: + +let + # Fetch upstream OMP theme once + jyumppTheme = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/Jyumpp/jyumpp-zsh-theme/refs/heads/master/.jyumpp.omp.json"; + # After first build Nix will show the wanted hash; add it here for reproducibility: + sha256 = "sha256-jsN3hkyT0dJNTYEmDHQPp++oscQLgYGNj7PZAcIW2TA="; + }; + + # Make a root variant with red username (wraps {{ .UserName }} with ANSI red) + jyumppRootTheme = pkgs.runCommand "jyumpp-root.omp.json" {} '' + sed -E 's|\{\{[[:space:]]*\.UserName[[:space:]]*\}\}|<#FF3B30>{{ .UserName }}|g' \ + ${jyumppTheme} > $out +''; +in +{ + home.username = "root"; + home.homeDirectory = "/root"; + home.stateVersion = "25.05"; + + programs.zsh = { + enable = true; + + # Plugins + historySubstringSearch = { + enable = true; + searchDownKey = "^[[B"; + searchUpKey = "^[[A"; + }; + + history = { + append = true; + }; + + autosuggestion.enable = true; + + syntaxHighlighting.enable = true; + }; + + programs.oh-my-posh = { + enable = true; + enableBashIntegration = true; + enableZshIntegration = true; + settings = builtins.fromJSON (builtins.unsafeDiscardStringContext (builtins.readFile(jyumppRootTheme))); + + }; + + # Add any root-specific HM packages if desired + home.packages = [ ]; +}