my laptop setup for NixOS
0BSD License
This is my setup for NixOS.
(credit: wallpaper by Alena Aenami.)
thefuck plugin for zsh (hit double Esc
) filled the JIT-install command for the missing app neofetch.
the expanded notification bar SwayNotificationCenter
is shown with a notification about a completed rebuild. this menu can be opened using `Super+`` or by right-clicking the 'Windows' button.
yazi
is a terminal-based file manager with vim-like keybindings.
thunar
is available as a graphical alternative.
Firefox is used as a web browser, with some basic add-ons.
running ide
in the WezTerm terminal opens a terminal-based IDE at that directory, consisting of:
lazygit
, offering a terminal-based way to work with Git repositories, including vim keybindings.helix
, featuring language servers for nix (thru nixd
) and otherspowerline-go
As a back-up, the graphical VSCodium is provided (with some plugins).
Application menu anyrun
can be opened using Super+Space
or by left-clicking the 'Windows' button.
A menu to JIT-install and run applications can be opened using Super+Shift+Space
.
Right-clicking the volume icon in the bar opens Pulse Audio Volume Control.
Pressing Super+i
or right-clicking the wifi icon opens the Network Manager TUI.
command just age
showing the age of any dependencies included in flake.lock
pressing the Microsoft keyboard's emoji key](https://support.microsoft.com/en-us/topic/use-microsoft-ergonomic-keyboard-c917dad0-3797-d97b-efb3-fbe27ac9703c#ID0EDFBBDDD) (Super-Ctrl-Alt-Shift-Space
) triggers an emoji picker using fuzzy picker fzf.
keybind Super+B
lets the user pick symbols using anyrun
's symbols
plugin
right-clicking the CPU or RAM bar indicators opens the resource-monitor btop
pressing CTRL-T
in the shell opens fzf
's file picker, copying the selected file or directory path to the clipboard.
ctrl+alt+delete
triggers Gnome System Monitor
Pressing Ctrl-Shift-Escape
or left-clicking the CPU icon opens monitoring tool zfxtop
.
This configuration was made with the following devices in mind:
Name | Use | Model | Config |
---|---|---|---|
hammer |
home laptop | Lenovo IdeaPad Slim 5 16ABR8 | nixosConfigurations |
krost |
old work laptop | Dell Latitude 5430 Google Chromebook | homeConfigurations |
orca |
work laptop | Dell XPS 13 9340 | homeConfigurations |
./hosts/<PROFILE>/hardware-configuration.nix
./hosts/<PROFILE>/configuration.nix
age
keys file to /etc/nixos/keys.txt
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
$ nix --experimental-features "nix-command flakes" run nixpkgs#just -- switch
$ 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:
find ~ -cmin -5
tree -x /
rsync --dry-run
./cachix/
flake.lock
ed nixpkgs is used for:
nix flake show
is fixed using Flake Schemas
$SHELL
is retained in nix shell
Component | Software |
---|---|
Nix interpreter | Lix |
DM | TUIgreet |
Compositor | Niri[^1] |
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 |
[^1]: While Niri uses Wayland, X11 applications can be emulated thru xwayland-run
.
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
:
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
:
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 |