Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/appaquet/dotfiles
My NixOS + nix-darwin + home manager dotfiles
https://github.com/appaquet/dotfiles
Last synced: 8 days ago
JSON representation
My NixOS + nix-darwin + home manager dotfiles
- Host: GitHub
- URL: https://github.com/appaquet/dotfiles
- Owner: appaquet
- Created: 2023-02-26T18:35:08.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2025-02-10T13:38:30.000Z (9 days ago)
- Last Synced: 2025-02-10T14:41:32.080Z (9 days ago)
- Language: Nix
- Homepage:
- Size: 593 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Nixified dotfiles
## Initial setup on NixOS
1. Setup NixOS using the installer.
1. Once installed, edit `/etc/nixos/configuration.nix` and rebuild:
* Enable sshd
* Change hostname
* Enable flakes: `nix.settings.experimental-features = [ "flakes" ];`1. SSH to the machine.
1. Clone this repo recursively (need to setup ssh keys, use a nix-shell with git and neovim).
1. Setup a GitHub personal access token in `~/.config/nix/nix.conf` (see [doc](https://nix.dev/manual/nix/2.18/command-ref/conf-file#conf-access-tokens))
```conf
access-tokens = github.com:
```1. Setup home-manager & activate it.
1. Copy `/etc/nixos/*.nix` to this repo to compare & adapt.
1. Rebuild nixos & switch using this flake.
1. Enable vscode server patcher (see )
1. Enable service: `systemctl --user enable --now auto-fix-vscode-server.service` (it's safe to ignore warning)
1. To prevent GC: `ln -sfT /run/current-system/etc/systemd/user/auto-fix-vscode-server.service ~/.config/systemd/user/auto-fix-vscode-server.service`## Initial setup on MacOS
1. Download nix installer & run it with multi-user mode enabled: `curl -L https://nixos.org/nix/install | sh -s -- --daemon`
1. Enable flakes: `mkdir -p ~/.config/nix/ && echo 'experimental-features = nix-command flakes fetch-closure' > ~/.config/nix/nix.conf`
1. Clone this repo recursively.
1. Setup home-manager & activate it.
1. Install [HomeBrew](https://brew.sh/).
1. Setup nix-darwin & activate it.
## Initial setup on Non-NixOS Linux
1. Download nix installer & run it with multi-user mode enabled: `curl -L https://nixos.org/nix/install | sh -s -- --daemon`
1. Enable flakes: `mkdir -p ~/.config/nix/ && echo 'experimental-features = nix-command flakes fetch-closure' > ~/.config/nix/nix.conf`
1. 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](./darwin/mbpapp/configuration.nix))```conf
keep-outputs = true
keep-derivations = true
auto-optimise-store = true# allow use of cached builds, require fast internet
builders-use-substitutes = trueexperimental-features = nix-command flakes fetch-closure
```1. Build `./x home build` and activate `./x home switch`
1. Activate shell by adding `/home/appaquet/.nix-profile/bin/fish` to `/etc/shells`
and running `chsh -s /home/appaquet/.nix-profile/bin/fish`## Initial setup for Raspberry Pi
### Notes
* is used to simplify a lot of the quirks for Rpi.
* Because of the use of `raspberry-pi-nix`, there is no need for a `hardware-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.### Steps
1. On a UTM NixOS host, create the Rpi NixOS config, and then build and SD card: `nix build '.#nixosConfigurations.piapp.config.system.build.sdImage'`1. 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`
1. Boot the Rpi and change password.
1. Follow normal procedure to setup home-manager & rebuild NixOS.
## Common
1. The [nix-community](https://app.cachix.org/cache/nix-community) cachix cache may need to be configured and enabled manually before building nixos for the
first time (`cachix use nix-community`).## Troubleshooting
1. 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:```bash
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/
```
1. `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
```
1. 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 )The fix is to uninstall the old one: `sudo -i nix-env --uninstall nix`
## Cheat sheets
## Nix
* Run a uninstalled package: `nix run nixpkgs#cowsay hello world`
* Run a uninstalled package, with fuzzy finding: `nix run nixpkgs#(fzf-nix)`, or `nr`
* Start a shell with a package: `nix shell nixpkgs#ripgrep`
* Start a shell with a package, with fuzzy finding: `nix shell nixpkgs#(fzf-nix)`, or `ns`### Fish
* 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` or `set -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]`* Shortcuts
* See for all shortcuts
* With no input `` or `` to jump to previous directory in history
* With input `` or `` to between words
* With input `w` to delete previous word
* With input `e` or `v` to open input in editor
* `n`: fzf nix packages
* `g`: fzf ripgrep
* `f`: fzf fd (find file)
* `p`: fzf processes
* `l`: fzf git log
* `s`: fzf git status### Neovim
See [README.nvim.md](./README.nvim.md)
### tmux
* Shortcuts
* See for all shortcuts
* `b S` to toggle synchronized panes
* `b m` to toggle mouse support (useful to allow select + copy)
* `b l / h` to navigate to next / prev window
* `b L / H / J / K` to resize pane
* `b l / h / j / k` to navigate between panes
* `b ;` to switch to last pane
* `b y / u` to swap window left / right
* `b ` to navigate to last window
* `b r` to reload config
* `b ` to get into copy mode
* `v` for selection
* `ctrl-v` to switch between between block and line selection
* `y` to yank
* `H` and `L` start line / end line
* `b q` to show pane ids, then `:swap-pane -s X -t Y` to swap
* History search
* Enable copy mode: `b [`
* Use `?` or `/` and then navigate matches with `n` or `N`* Plugins (via integrated .tmux.conf's tpm)
* [tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect)
* `b s` to save current layout
* `b r` to ressurect last saved layout## Resources
*
*
*