# zoey's nixos dotfiles ![image](https://github.com/zackartz/nixos-dots/assets/34588810/0f4c85c2-f9e8-4de3-89c1-0a95c0ab681f) 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. > [!WARNING] > You can choose whatever desktop environment you want, but make sure the username you choose is the one you will want to continue with! > [!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 } ``` One note, change the `# Bootloader` section to what is currently in `/etc/nixos/configuration.nix` so that the bootloader config stays the same. 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; enableNushellIntegration = 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!