> 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:
> 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/<your-hostname>/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
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/<your-username>@<your-hostname>/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";