diff --git a/.config/nix/flake.nix b/.config/nix/flake.nix index 9d1e9fe..b8faee6 100755 --- a/.config/nix/flake.nix +++ b/.config/nix/flake.nix @@ -2,8 +2,12 @@ description = "System flake"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + } }; - outputs = { self, nixpkgs, home-manager, ... }@inputs: { + outputs = { self, nixpkgs, ... }@inputs: { nixosConfigurations = { mecca = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; diff --git a/.config/nix/hosts/common.nix b/.config/nix/hosts/common.nix index e084f36..0b7c993 100644 --- a/.config/nix/hosts/common.nix +++ b/.config/nix/hosts/common.nix @@ -1,14 +1,27 @@ { config, lib, pkgs, inputs, ... }: { + + imports = [ + inputs.home-manager.nixosModules.default + ]; # Set default user lunita users.users.lunita = { isNormalUser = true; description = "Lunita"; extraGroups = [ "networkmanager" "wheel" ]; - packages = with pkgs; []; + packages = with pkgs; [ + neovim + firefox + ]; shell = pkgs.zsh; }; + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + "lunita" = import ./home.nix; + }; + }; # Enable automatic system updates system.autoUpgrade = { enable = true; diff --git a/.config/nix/hosts/home.nix b/.config/nix/hosts/home.nix new file mode 100644 index 0000000..9ba54f4 --- /dev/null +++ b/.config/nix/hosts/home.nix @@ -0,0 +1,95 @@ +{ config, pkgs, ... }: + +{ + home.username = "lunita"; + home.homeDirectory = "/home/lunita"; + + home.stateVersion = "25.05"; + + programs.zsh = { + enable = true; + syntaxHighlighting.enable = true; + + shellAliases = { + c = "clear"; + nf = "neofetch"; + v = "nvim"; + d = "cd ~/Documents"; + D = "cd ~/Downloads"; + dot = "cd ~/dotfiles"; + }; + + initContent = '' + # '~' => goto base of user home directory + alias ~='cd ~' + # Vim keybinds + bindkey -v + # Preferred editor for local and remote sessions + if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='vim' + else + export EDITOR='nvim' + fi + # Set TERM for Ghostty ssh workaround + if [[ "$TERM_PROGRAM" == "ghostty" ]]; then + export TERM=xterm-256color + fi + # Run Hyprland if applicable + if [[ "$(tty)" == "/dev/tty"* ]] && command -v Hyprland &> /dev/null; then + exec Hyprland + fi + ''; + + history.size = 10000; + + oh-my-zsh = { + enable = true; + plugins = [ "git" ]; + theme = "lambda"; + }; + }; + + programs.git = { + enable = true; + userName = "lulusilly"; + userEmail = "lunita@puppygirl.onl"; + aliases = { + ci = "commit"; + co = "checkout"; + s = "status"; + pu = "push origin master"; + rmc = "rm -r --cached"; + }; + }; + + nixpkgs.config.allowUnfree = true; + home.packages = with pkgs; [ + tree # Nice file tree views w/permissions + neofetch # Muh epic r1ce!!! + btop # Resource manager + stow # For dotfiles deployment. May use home.file in future + imagemagick # For converting images into other fmts + sxiv # Minimal image viewer + mpv # Video player + zathura # PDF/CBZ/EPUB/DJVU reader + tmux # Tride and true terminal multiplexer + obsidian # For epic note taking (really just mediocre journaling) + keepassxc # Secure password manager + syncthing # Self explanatory + ghostty # Terminal emulator + # Fonts + nerd-fonts.jetbrains-mono + miracode + monocraft + ]; + fonts.fontconfig.enable = true; + + home.file = { + }; + + home.sessionVariables = { + EDITOR = "emacs"; + }; + + programs.home-manager.enable = true; +}