diff --git a/README.md b/README.md index e5d25b1..293bda0 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,249 @@ my customized versions of other's dotfiles major credits to [sioodmy](https://github.com/sioodmy/dotfiles) and [luckasRanarison](https://github.com/luckasRanarison/nvimrc). could not have done this without their work :) + +## Installation Instructions + +### Step 0: Install NixOS Normally + +Grab the [nixos iso](https://nixos.org/download/) and install nixos on to your computer using the graphical installer. + +> [!TIP] +> You can use [nixos anywhere](https://github.com/nix-community/nixos-anywhere) to install your config to other systems (or like, a server) via ssh once you have your desktop installed :) + +### Step 1: Enable Flakes and the Nix command + +Right now the configuration you installed resides in `/etc/nixos/configuration.nix`, we want to edit that file to enable the `nix` command and the Flake feature. Simply add this line to that file: + +```nix +nix.settings.experimental-features = [ "nix-command" "flakes" ]; +``` + +After this is done, go ahead and run `sudo nixos-rebuild switch`. + +### Step 2: Cloning the Github Repo + +Go ahead and create a nix shell with git with the following: + +```bash +nix shell nixpkgs#git +git clone https://github.com/zackartz/nixos-dots.git nixos +``` + +> [!WARNING] +> Various scripts expect your local config to be at `~/nixos`, by changing the `FLAKE` sessionVariable in `modules/home/shells/zsh/default.nix` you can choose a different path. + +### Step 3: Adding a new `system` and `home` + +This config is built with [home-manager](https://github.com/nix-community/home-manager), which allows us to declare config files in our home directory and install user-specific applications. + +With this, it also uses [snowfall](https://github.com/snowfallorg/lib) which is a directory-oriented opinionated way of structuring your flake, files added to `systems` or `homes` get picked up and auto exported from our flake, and anything in `lib`, `packages`, or `overlays` are exported and automatically shared within our flake. + +Let's start with the `system`. + +Create a new file in `systems/x86_64-linux//default.nix` with the following contents. + +```nix +{ + pkgs, + lib, + system, + inputs, + config, + ... +}: { + imports = [./hardware-configuration.nix]; + + hardware.audio.enable = true; + hardware.nvidia.enable = false; # Enable if you have a nvidia GPU + ui.fonts.enable = true; + + protocols.wayland.enable = true; + + services.fstrim.enable = true; # Optional, improve SSD lifespan + services.xserver.enable = true; # Optional, but recommended (allows XWayland to work) + services.gnome.gnome-keyring.enable = true; + + # Bootloader. + boot.loader.systemd-boot.enable = lib.mkForce false; + boot.lanzaboote = { + enable = true; + pkiBundle = "/etc/secureboot"; + }; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "earth"; # Define your hostname. MUST BE THE SAME AS THE HOSTNAME YOU SPECIFIED EARLIER!!! + + # services.openssh = { + # enable = true; + # PasswordAuthentication = true; + # }; + + time.timeZone = "America/Detroit"; # Change to your TZ + + programs.zsh.enable = true; + # REMEMBER TO CHANGE TO YOUR USERNAME + users.users.zoey = { + isNormalUser = true; + description = "zoey"; + extraGroups = ["networkmanager" "wheel"]; + shell = pkgs.zsh; + }; + + # CHANGE USERNAME HERE TOO + snowfallorg.users.zoey = { + create = true; + admin = false; + + home = { + enable = true; + }; + }; + + catppuccin.enable = true; # If you want your TTY to be catppuccin too haha +} +``` + +Nice! We're also going to need the `hardware-configuration.nix` for your system, copy that file from `/etc/nixos/hardware-configuration.nix` so it sits alongside the `default.nix` file. + +Now, lets add a file to define your home. Create a file at `homes/x86_64-linux/@/default.nix`. + +```nix +{ + inputs, + pkgs, + system, + lib, + ... +}: { + wms.hyprland.enable = true; # Hyprland is the only fully-supported window manager in my config atm. + apps = { + web.librewolf.enable = true; # can also use firefox + web.librewolf.setDefault = true; + + tools.git.enable = true; + tools.tmux.enable = true; + tools.neovim.enable = true; + tools.skim.enable = true; + tools.starship.enable = true; + tools.direnv.enable = true; + tools.tealdeer.enable = true; + tools.bat.enable = true; + + tools.gh.enable = true; + + term.kitty.enable = true; + + music.spotify.enable = true; # disable if you don't use spotify + + helpers = { + anyrun.enable = true; + ags.enable = true; + }; + }; + + shells.zsh.enable = true; + + rice.gtk.enable = true; + + services.lock.enable = true; + + xdg.enable = true; + + programs = { + gpg.enable = true; + man.enable = true; + eza.enable = true; + dircolors = { + enable = true; + enableZshIntegration = true; + }; + }; + + catppuccin.enable = true; + catppuccin.flavor = "macchiato"; + catppuccin.accent = "pink"; + + # Add any packages you want in your path here! + home.packages = [ + pkgs.ungoogled-chromium + + pkgs.postman + pkgs.mosh + + pkgs.dconf + pkgs.wl-clipboard + pkgs.pavucontrol + pkgs.wlogout + pkgs.sway-audio-idle-inhibit + pkgs.grim + pkgs.slurp + + pkgs.xfce.thunar + pkgs.feh + pkgs.nitch + pkgs.nix-output-monitor + + pkgs.nh + pkgs.dwl + + pkgs.custom.rebuild + pkgs.custom.powermenu + ]; + + programs.zoxide = { + enable = true; + enableZshIntegration = true; + options = ["--cmd cd"]; + }; + + programs.cava.enable = true; + + programs.btop = { + enable = true; + extraConfig = '' + update_ms = 100 + vim_keys = true + ''; + }; + + programs.lazygit.enable = true; + programs.fzf.enable = true; + + systemd.user.services.xwaylandvideobridge = { + Unit = { + Description = "Tool to make it easy to stream wayland windows and screens to exisiting applications running under Xwayland"; + }; + Service = { + Type = "simple"; + ExecStart = lib.getExe pkgs.xwaylandvideobridge; + Restart = "on-failure"; + }; + Install = { + WantedBy = ["default.target"]; + }; + }; + + services = { + gpg-agent = { + enable = true; + pinentryPackage = lib.mkForce pkgs.pinentry-gnome3; + enableSshSupport = true; + enableZshIntegration = true; + }; + }; +} +``` + +This is a pretty minimal config, (with some neat applications), but feel free to disable any you don't want or need! + +### Step 4: Installing the config + +Once you have all that, run these two commands to install and build the config! + +```bash +git add -A # add the new files you created +sudo nixos-rebuild switch --flake ~/nixos# # replace the ~/nixos with the location of the config if you changed it. +``` + +Go ahead and reboot and you should be in the new config, tada!