Skip to content

KiaraGrouwstra/cfg

Repository files navigation

kiara's nix config

Gitea Last Commit GitHub commit activity Gitea Issues

This is my setup for NixOS.

Screenshot

screenshot showing niri with neofetch and yazi in wezterm.

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.

devices

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

usage

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

prerequisites

commands

$ 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

impermanence

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

features

fixes for flake

  • the flake.locked nixpkgs is used for:
    • nix commands
    • 'command not found' errors
  • nix flake show is fixed using Flake Schemas

used software

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

style

package types

command drop-ins

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

keybinds

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 actions e/o to keys h/l)
  • en-us (qwerty)

Application keybinds, tweaked to layout by setting config.keyboard.active:

bottom bar

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 goes where

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

  1. While Niri uses Wayland, X11 applications can be emulated thru xwayland-run.