This is my setup for NixOS.
Screenshot
screenshot showing niri with neofetch and yazi in wezterm. thefuck plugin for zsh filled the JIT-install command for the missing app neofetch. wallpaper by Alena Aenami.
This configuration was made with the following devices in mind:
Name | Use | Model | Config |
---|---|---|---|
hammer |
home laptop | Lenovo IdeaPad Slim 5 16ABR8 | nixosConfigurations |
krost |
work laptop | Dell Latitude 5430 Google Chromebook | homeConfigurations |
clean install from NixOS USB
cd Downloads
git clone https://codeberg.org/kiara/cfg.git
cd cfg
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko -f .#hammer
dest=/mnt/persist/home/kiara/.config/sops/age/
sudo mkdir -p $dest
sudo cp -r ./. $dest
sudo cp ~/Downloads/keys.txt $dest # import/create
sudo nixos-install --no-root-passwd --flake .#default --no-root-passwd
sudo nixos-enter --root /mnt
cp /etc/{machine-id,group,passwd,shadow} /persist/etc
- install NixOS
- update
./hosts/<PROFILE>/hardware-configuration.nix
- get a user password by either:
- setting one in
./hosts/<PROFILE>/configuration.nix
- decoding secrets by adding the
age
keys file to/etc/nixos/keys.txt
- setting one in
$ just -l
Available recipes:
age # Check when inputs were last updated
boot # Build a new configuration
clean # Remove all generations older than 7 days
decode # Decode secrets
default # default action: list actions
dry # Dry-build a new configuration
encode # Encode secrets
ephemeral dir="$HOME" # Show what has yet to be persisted in a folder. Usage: just ephemeral $PWD | $PAGER
fmt # Format code
gc # Garbage collect all unused nix store entries
home # Rebuild the home config
repl # Open a Nix REPL - run manually to load flake: `:lf .`
switch # Rebuild the system
test # Run tests
up # Update all inputs
upp input # Update specific input. Usage: just upp nixpkgs
... or if just
isn't available yet:
nix run nixpkgs#just -- -l
to ensure you can persist useful state on an ephemeral system, you can find say:
- newly created (5 mins) files:
find ~ -cmin -5
- files now on root:
tree -x /
- diffs from last backup:
rsync --dry-run
- secrets: sops
- formatter: treefmt
- commands: just
- CI: garnix
- cache:
./cachix/
- environment loader: direnv
- declarative partitioning: disko
- ephemeral root: impermanence
- the
flake.lock
ed nixpkgs is used for:- nix commands
- 'command not found' errors
nix flake show
is fixed using Flake Schemas
Component | Software |
---|---|
Nix interpreter | Lix |
DM | TUIgreet |
Compositor | Niri1 |
Bar | Waybar |
Notifications | Swaynotificationcenter |
Menu | Anyrun |
Web browser | Firefox |
File browser | Yazi |
Terminal | Wezterm |
Text editor | VSCodium |
Editor (shell) | Helix |
Shell | Zsh |
Fuzzy finder | Fzf |
Pager | Nvimpager |
Text-to-speech | Piper thru LocalAI |
- theming module: Stylix
- GUI theme: Catppuccin-Mocha-Maroon
- shell theme: base16-classic-dark
- icons: Papirus-Dark
- fonts:
- regular: DejaVu Sans
- monospace MartianMono
- emoji: Twemoji
command | drop-in | improvements |
---|---|---|
cd |
n/a | (can skip it in Zsh) |
cd |
z |
remembers visited locations |
cd |
cd (enhancd) |
interactive directory picker using cd , cd . or cd .. |
ls |
eza (aliased to ls ) |
friendlier output and interface |
cat |
bat |
syntax highlighting |
less |
less (lesspipe) |
syntax highlighting |
find |
fd |
faster, friendlier interface, respects .gitignore |
grep |
rg |
friendlier interface |
make |
just |
show comments, friendlier file format |
ssh |
xxh |
use your favorite shell |
Used keyboard layouts, with Caps Lock
remapped to Esc
:
- workman-programmer, with application keymaps modified to keep arrow actions
h
/j
/k
/l
(+ actions 'y'/'n') in their ergonomic qwerty positions (at the cost of moving actionse
/o
to keysh
/l
) en-us
(qwerty)
Application keybinds, tweaked to layout by setting config.keyboard.active
:
niri
: see./home-manager/kiara/niri.nix
(TODO)swaynotificationcenter
firefox
(vimium-c
)yazi
(custom)wezterm
(overrides:./home-manager/kiara/wezterm.nix
)vscodium
(overrides:./home-manager/kiara/vscode.nix
)helix
(overrides:./home-manager/kiara/features/text/helix.nix
)neovim
zsh
gum
zathura
module | left-click | right-click | scroll |
---|---|---|---|
start button | open anyrun application launcher |
toggle swaync notifications |
- |
media player | toggle play/pause | skip ahead | previous/next |
clock | - | toggle month/year in calendar pop-up | previous/next in calendar pop-up |
volume | toggle mute | Pulse Audio Volume Control | change volume |
memory | manage processes with Gnome System Monitor | manage processes with btop |
- |
CPU | open monitoring tool zfxtop |
manage processes with btop |
- |
battery | run battery viewer powersupply |
- | - |
storage | garbage-collect nix | show big files/folders using dust |
- |
network | manage network by networkmanager_dmenu |
manage network by nmtui |
- |
systray | (application-specific) | open application context menu | - |
what | where |
---|---|
system configuration | ./hosts/ |
home-manager configuration | ./home-manager/ |
binaries and command wrappers | ./home-manager/kiara/commands.nix |
reusable modules | ./modules/ |
custom functions | ./lib/ |
custom packages | ./pkgs/*.nix (from flake inputs: ./pkgs/default.nix ) |
overlays | ./overlays/*.nix (from flake inputs: ./flake.nix ) |
LSP (vscodium / coc.nvim) | ./home-manager/kiara/features/development/ |
shell scripts | ./home-manager/kiara/scripts/*.sh |
dotfiles | ./home-manager/kiara/dotfiles/ + ./home-manager/kiara/dotfiles.nix |
custom desktop entries | ./home-manager/kiara/desktop.nix |
MIME types | ./home-manager/kiara/mime.nix |
file templates | ./home-manager/kiara/dotfiles/Templates/ |
keybinds | ./home-manager/kiara/niri.nix |
persisted state | ./hosts/hammer/persistence.nix |
Footnotes
-
While Niri uses Wayland, X11 applications can be emulated thru
xwayland-run
. ↩