-
Setup NixOS using the installer.
-
Once installed, edit
/etc/nixos/configuration.nix
and rebuild:- Enable sshd
- 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
-
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/
- 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
-
General
<leader>
is configured to\
(backslash)<leader> 1 through 9
to switch between opened buffers<leader>]
to switch to next buffer<leader>[
to switch to previous buffer<leader>s
to save current buffer<leader>x
to save and then execute current buffer (as long as it's chmod +x)<leader>z
to execute current visual selection in a shell<leader>r
to save current buffer and then executersync.sh
in working dir<leader>w
to close the current buffer by trying not to messup the layout
-
<leader>o
to close all buffers except the current one<leader>q
to quit vim<leader><tab>
to switch between tab and spaces<ctrl>e
to toggle file etree<ctrl>p
fuzzy finding file<ctrl>l
fuzzy finding buffers and history<ctrl>f
riggrep search<ctrl>o
go back to previous cursor<ctrl>i
go forward to next cursor<leader>m
to toggle mouse support (useful to allow select + copy)<leader>y
to yank to clipboard using bin/pbcopy util<leader>p
to paste from clipboard using bin/pbpaste util
-
Code / LSP
gD
goto declarationgd
goto definitiongi
goto implementationK
hover info<space>rn
rename symbol<leader>cc
comment<leader>cu
uncomment
-
Nvim tree
- In tree
g?
to show help<ctrl>]
to CD into directory-
go up one directory<ctrl>v
Open in vertical split<ctrl>x
Open in horizontal splitI
Toggle hidden filesr
Rename filed
Delete filea
Add file or directory if it ends with/
c
,x
,v
to copy, cut, paste filesf
to find file,F
to clearq
to close treeE
to expand all,W
to collapse
<ctrl>e
to toggle file tree
- In tree
-
Commands
E <file>
: open a new buffer for a new file in current buffer's directoryDelete
: delete current buffer's file
-
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
-
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