Hey, you. You're finally awake. You were trying to configure your OS declaratively, right? Walked right into that NixOS ambush, same as us, and those dotfiles over there.
[!IMPORTANT] Disclaimer: This is not a "community framework" or "NixOS distribution". Please do not use it like one. It is an ongoing and haphazard experiment to feel out NixOS for my own purposes, and is home to all manner of unspeakable, overly-opinionated hackery that make the other 9 circles of hell look like tropical beach resorts.
Until I can bend spoons with my Nix-fu, please divert your general Nix(OS) questions to the NixOS discourse instead of my issue tracker. That said, I'm more than happy to hear input and discuss ideas, but be warned: I struggle to stay on top of Github notifications most of the time.
(screenshots coming soon)
Wayland | X11 | |
---|---|---|
Shell: | zsh + zgenom | " |
WM: | hyprland + waybar | lightdm + lightdm-mini-greeter + bspwm + polybar |
Editor: | Doom Emacs | " |
Terminal: | foot | st |
Launcher: | rofi | " |
Browser: | firefox | " |
Acquire or build a NixOS 24.05+ image:
# Yoink nixos-unstable from upstream
$ wget -O nixos.iso https://channels.nixos.org/nixos-unstable/latest-nixos-minimal-x86_64-linux.iso
Write it to a USB drive:
# Replace /dev/sdX with the correct partition!
$ cp nixos.iso /dev/sdX
Restart and boot into the installer.
Do your partitions and mount your root to /mnt
(for
example).
Clone these dotfiles somewhere:
$ git clone --recursive https://github.com/hlissner/dotfiles
Create a host config in hosts/
(see existing ones for examples).
Run the installer:
# The options are optional, but these are their default values, if you omit them.
$ dotfiles/install.zsh \
--root /mnt \
--flake /mnt/etc/dotfiles \
--user "$USER" \
--host "$HOST" \
--dest /mnt/home/$USER/.config/dotfiles
Then reboot and you're good to go!
[!WARNING] Don't forget to change your
root
and$USER
passwords! They are set tonixos
by default.
And I say, bin/hey
, what's going on?.
SYNOPSIS:
hey [-?|-??|-???|-!] [-h|--help] COMMAND [ARGS...]
OPTIONS:
-! -- Do a dry run. WARNING: It's up to called scripts to obey!
-?,-??,-??? -- Enable debug (verbose) mode.
-h,--help -- Display the documentation embedded in a target script's
header.
COMMANDS:
- build|b -- Build nix images or recompile bin/hey
- exec -- Dispatch to $DOTFILES_HOME/{,hosts/$HOST,config/$WM}/bin/shim.d $PATH
- get|set -- Alias for hey vars {get,set} ...
- gc -- Run garbage collection on the user's/system's profile
- help|h -- Display documentation for the command
- hook -- Trigger scripts associated with an event
- host -- Dispatch to $DOTFILES_HOME/hosts/$HOST/bin
- info -- Display information about current system (JSON)
- path -- Display path to area of my dotfiles
- profile -- Manage or analyze a system or user nix profile
- pull -- Update flake inputs
- reload -- Run reload hooks
- repl -- Open a Janet, Nix, or nix-develop REPL
- swap -- Swap nix-store symlinks with copies (and back)
- sync|s -- Rebuild this flake (using nixos-rebuild)
- test -- Run Hey and/or Nix test suites
- which -- Print out the script's path (with arguments) w/o executing it
- wm -- Dispatch to $DOTFILES_HOME/config/$WM/bin
- vars -- Get or set session or persistent state in userspace.
- @* -- Dispatch to $DOTFILES_HOME/config/${1#@}/bin
- .* -- Tries to be smart. Looks for any executable under host, wm,
then $DOTFILES_HOME/bin.
Why NixOS?
Because managing a fleet of servers, a hundred strong, is the tenth circle of hell without a declarative, generational, and immutable single-source-of-truth configuration framework like NixOS.
Sure beats the nightmare of brittle capistrano/chef/puppet/ansible/shell scripts I left behind.
Should I use NixOS?
Short answer: no.
Long answer: no really. Don't.
Long long answer: I'm not kidding. Don't.
Unsigned long long answer: Alright alright. Here's why not:
If you're not discouraged by this, then you didn't need my advice in the first place. Stop procrastinating and try NixOS!
How do you manage secrets?
With agenix.
Why did you write bin/hey?
I envy Guix's CLI and want similar for NixOS, whose toolchain is spread across
many commands, none of which are as intuitive: nix
, nix-collect-garbage
,
nixos-rebuild
, nix-env
, nix-shell
, etc.
I don't claim hey
is the answer, but who doesn't like their own brew?
How 2 flakes?
Would it be the NixOS experience if I gave you all the answers in one, convenient place?
No. Suffer my pain:
And if all else fails, ask for help on the NixOS Discourse.