260 lines
7 KiB
Markdown
260 lines
7 KiB
Markdown
# zack's nixos dotfiles
|
|
|
|

|
|
|
|
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/<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
|
|
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/<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";
|
|
};
|
|
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#<your-hostname> # 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!
|