-
Setup NixOS using the installer.
-
Once installed, edit
/etc/nixos/configuration.nix
and rebuild:- Enable sshd
- Change hostname
- Enable flakes:
nix.settings.experimental-features = [ "flakes" ];
-
SSH to the machine.
-
Clone this repo recursively (need to setup ssh keys, use a nix-shell with git and neovim).
-
Setup a GitHub personal access token in
~/.config/nix/nix.conf
(see doc)access-tokens = github.com:<YOUR_TOKEN>
-
Setup home-manager & activate it.
-
Copy
/etc/nixos/*.nix
to this repo to compare & adapt. -
Rebuild nixos & switch using this flake.
-
Enable vscode server patcher (see https://github.com/msteen/nixos-vscode-server#enable-the-service)
- Enable service:
systemctl --user enable --now auto-fix-vscode-server.service
(it's safe to ignore warning) - To prevent GC:
ln -sfT /run/current-system/etc/systemd/user/auto-fix-vscode-server.service ~/.config/systemd/user/auto-fix-vscode-server.service
- Enable service:
-
Download nix installer & run it with multi-user mode enabled:
curl -L https://nixos.org/nix/install | sh -s -- --daemon
-
Enable flakes:
mkdir -p ~/.config/nix/ && echo 'experimental-features = nix-command flakes fetch-closure' > ~/.config/nix/nix.conf
-
Clone this repo recursively.
-
Setup home-manager & activate it.
-
Install HomeBrew.
-
Setup nix-darwin & activate it.
-
Download nix installer & run it with multi-user mode enabled:
curl -L https://nixos.org/nix/install | sh -s -- --daemon
-
Enable flakes:
mkdir -p ~/.config/nix/ && echo 'experimental-features = nix-command flakes fetch-closure' > ~/.config/nix/nix.conf
-
On Linux, configure nix by adding to
/etc/nix/nix.conf
. No need to do it on Darwin since we already do it nix-darwin (see configuration.nix)keep-outputs = true keep-derivations = true auto-optimise-store = true # allow use of cached builds, require fast internet builders-use-substitutes = true experimental-features = nix-command flakes fetch-closure
-
Build
./x home build
and activate./x home switch
-
Activate shell by adding
/home/appaquet/.nix-profile/bin/fish
to/etc/shells
and runningchsh -s /home/appaquet/.nix-profile/bin/fish
- https://github.com/nix-community/raspberry-pi-nix is used to simplify a lot of the quirks for Rpi.
- Because of the use of
raspberry-pi-nix
, there is no need for ahardware-configuration.nix
as it's automatically generated & included. - I use a Mac VM to build the initial SD card to prevent potentially recompiling the whole kernel on a poor Rpi.
-
On a UTM NixOS host, create the Rpi NixOS config, and then build and SD card:
nix build '.#nixosConfigurations.piapp.config.system.build.sdImage'
-
Copy the result image to a SD / USB Stick or Nvme (via USB adapter):
zstdcat result/the-image.img.zstd | dd of=/dev/the-device status=progress
-
Boot the Rpi and change password.
-
Follow normal procedure to setup home-manager & rebuild NixOS.
- The nix-community cachix cache may need to be configured and enabled manually before building nixos for the
first time (
cachix use nix-community
).
-
It seems that when switching to newer fish, the paths weren't properly set. On top of that, it may be shadowed by a global fish path too. Reset fish paths with:
set -ge fish_user_paths set -Ua fish_user_paths /nix/var/nix/profiles/default/bin set -Ua fish_user_paths /home/appaquet/.nix-profile/bin set -Ua fish_user_paths /home/appaquet/.local/utils/
-
failed: unable to open database file at ... command-not-found
As root, run:nix-channel --add https://nixos.org/channels/nixos-unstable nixos nix-channel --update
-
On MacOS, we may end up with an older version of nix installed, leading to flakes not working because of use of newer syntax in the lock files (see LnL7/nix-darwin#931)
The fix is to uninstall the old one:
sudo -i nix-env --uninstall nix
- Run a uninstalled package:
nix run nixpkgs#cowsay hello world
- Run a uninstalled package, with fuzzy finding:
nix run nixpkgs#(fzf-nix)
, ornr
- Start a shell with a package:
nix shell nixpkgs#ripgrep
- Start a shell with a package, with fuzzy finding:
nix shell nixpkgs#(fzf-nix)
, orns
-
Foreign env is used to source
~/.profile
. Any local variables can be set there. -
Paths: fish uses
fish_user_paths
to define paths and can be persisted when using "universal variables" (set with-U
).- To add a path:
fish_add_path /some/new/path
orset -Ua fish_user_paths /some/new/path
- To list current paths:
echo $fish_user_paths | tr " " "\n" | nl
- To remove a path:
set --erase fish_user_paths[NUMBER AS LISTED STARTING AT 1]
- To add a path:
-
Shortcuts
- See https://fishshell.com/docs/current/interactive.html#shared-bindings for all shortcuts
- With no input
<alt><left>
or<alt><right>
to jump to previous directory in history - With input
<alt><left>
or<alt><right>
to between words - With input
<ctl>w
to delete previous word - With input
<alt>e
or<alt>v
to open input in editor (doesn't work on MacOS) <ctl><alt>n
: fzf nix packages<ctl><alt>g
: fzf ripgrep<ctl><alt>f
: fzf fd (find file)<ctl><alt>p
: fzf processes<ctl><alt>l
: fzf git log<ctl><alt>s
: fzf git status
See README.nvim.md
-
Shortcuts
- See https://github.com/gpakosz/.tmux for all shortcuts
<ctrl>b e
to toggle synchronized panes<ctrl>b m
to toggle mouse support (useful to allow select + copy)<ctrl>b <ctrl>l
to navigate to next window<ctrl>b <ctrl>h
to navigate to prev window<ctrl>b Tab
to navigate to last window<ctrl>b <tab>
to navigate to last window<ctrl>b <alt><arrows>
to resize pane<ctrl>b r
to reload config<ctrl>b <enter>
to get into copy modev
for selectionctrl-v
to switch between between block and line selectiony
to yankH
andL
start line / end line
<ctrl>b q
to show pane ids, then:swap-pane -s X -t Y
to swap- History search
- Enable copy mode:
<ctrl>b [
- Use
?
or/
and then navigate matches withn
orN
- Enable copy mode:
-
Plugins (via integrated .tmux.conf's tpm)
- tmux-resurrect
<ctrl>b <ctrl>s
to save current layout<ctrl>b <ctrl>r
to ressurect last saved layout
- tmux-resurrect