···11-<div align="center">
22- <h1>isabel's dotfiles</h1>
33-44- <img alt="stars" src="https://img.shields.io/github/stars/isabelroses/dotfiles?color=f5c2e7&labelColor=303446&style=for-the-badge&logo=starship&logoColor=f5c2e7" />
55- <img alt="ci" src="https://img.shields.io/github/actions/workflow/status/isabelroses/dotfiles/check.yml?label=build&color=a6e3a1&labelColor=303446&style=for-the-badge&logo=github&logoColor=a6e3a1" />
66- <img alt="repo size" src="https://img.shields.io/github/repo-size/isabelroses/dotfiles?color=fab387&labelColor=303446&style=for-the-badge&logo=github&logoColor=fab387" />
77- <img alt="license" src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=EUPL-1.2&logoColor=ca9ee6&colorA=313244&colorB=cba6f7" />
88- <img alt="nixos-unstable" src="https://img.shields.io/badge/NixOS-unstable-blue.svg?style=for-the-badge&labelColor=303446&logo=NixOS&logoColor=white&color=91D7E3" />
99-</div>
1010-1111-<br />
1212-1313-
1414-1515-
1616-1717-### Foreword
1818-1919-This repository contains my **personal** configuration for my systems, so its really important that you know it's **personal** and not everything will fit your needs.
2020-Therefore most things will not work out of the box without some changes, so be warned!!!!
2121-2222-> [!WARNING]
2323-> Also to note that this configuration will **not** work if you do not change any of the [secrets](./secrets) since they are encrypted.
2424-2525-### What does this repo provided
2626-2727-- Modular configuration, so you can add or remove parts of the configuration
2828-- Sensible defaults, so you can get started quickly
2929-- Docs kind of
3030-- [Catppuccin](https://github.com/catppuccin/catppuccin) everywhere.
3131-3232-[](https://star-history.com/#isabelroses/dotfiles&Date)
···11-I use [lix](https://git.lix.systems/lix-project/lix).
22-33-> [!NOTE]
44-> Furthermore this is with a custom patch set through [izlix](https://github.com/isabelroses/izlix). Though I don't recommend using izlix. If you want the patches you may copy them for personal use.
55-66-This flake makes a point of using lix where possible.
77-88-To do so we add the following snippet taken from [modules/base/nix/overlays/default.nix](https://github.com/isabelroses/dotfiles/blob/463e509725f610d802c483fdc00ce0b77cd778c2/modules/base/nixpkgs/overlays/default.nix#L13-L25).
99-What this does is use lix where possible rather than nix.
···11-I use [fht-compositor](https://github.com/nferhat/fht-compositor) as my window
22-manager on linux. On macos I don't use a window manager, but when I do it has
33-to be [areospace](https://github.com/nikitabobko/AeroSpace). This page documents how they are used.
11+---
22+title: Window manager
33+description: The window managers used on Linux and macOS, with shortcut tables.
44+---
4566+I use [fht-compositor](https://github.com/nferhat/fht-compositor) as my window
77+manager on Linux. On macOS I don't use a window manager, but when I do it has
88+to be [AeroSpace](https://github.com/nikitabobko/AeroSpace). This page
99+documents how they are used.
51066-| SKHD Shortcut | fht-compositor Shortcut | What it does |
1111+| SKHD shortcut | fht-compositor shortcut | What it does |
712| ----------------------------- | ------------------------------- | -------------------------- |
813| <kbd>CMD+RETURN</kbd> | <kbd>SUPER+RETURN</kbd> | open terminal |
914| | <kbd>SUPER+B</kbd> | open browser |
···1217| | <kbd>SUPER+F</kbd> | full screen |
1318| <kbd>CMD+CTRL+[number]</kbd> | <kbd>SUPER+[number]</kbd> | open workspace [number] |
1419| <kbd>CMD+SHIFT+[number]</kbd> | <kbd>SUPER+SHIFT+[number]</kbd> | move to workspace [number] |
1515-
···11+---
22+title: Lix
33+description: Why and how this flake uses Lix.
44+---
55+66+I use [Lix](https://git.lix.systems/lix-project/lix).
77+88+:::note
99+Furthermore this is with a custom patch set through [izlix](https://github.com/isabelroses/izlix). I don't recommend using izlix. If you want the patches you may copy them for personal use.
1010+:::
1111+1212+This flake makes a point of using Lix where possible. The package is wired up directly in [`modules/base/nix/nix.nix`](https://github.com/isabelroses/dotfiles/blob/main/modules/base/nix/nix.nix) via:
1313+1414+```nix
1515+nix.package = inputs'.izlix.packages.lix;
1616+```
1717+1818+If you'd rather use upstream Lix without my patches, swap `izlix` for the `lix-module`/`lix` flake of your choice.
+23
docs/src/content/docs/design/modules.md
···11+---
22+title: Modules
33+description: Conventions for writing modules in this flake.
44+---
55+66+When writing a module, you should follow these guidelines:
77+88+- Use a tree-like structure for the head lambda args if and only if it is needed.
99+1010+ ```nix
1111+ {
1212+ lib,
1313+ pkgs,
1414+ inputs,
1515+ ...
1616+ }:
1717+ {
1818+ # omitted config
1919+ }
2020+ ```
2121+2222+- `imports` should do its best to avoid going backwards in the flake's file structure.
2323+
+35
docs/src/content/docs/design/topology.mdx
···11+---
22+title: Topology
33+description: An overview of the systems and module layout used in this flake.
44+---
55+66+import { Image } from "astro:assets";
77+import topology from "../../../assets/topology.webp";
88+99+## Systems
1010+1111+| Name | Type | OS | Extra Details |
1212+| --------- | ------- | ----- | -------------------------------------------------------------------------- |
1313+| amaterasu | Desktop | NixOS | A powerful desktop dual booting Windows 11 |
1414+| athena | Server + Laptop | NixOS | My oldest laptop, and is now used as a media server |
1515+| aphrodite | Server | NixOS | The host a small number of services |
1616+| lilith | ISO | NixOS | An ISO image of my NixOS configuration, used to install NixOS on new systems |
1717+| minerva | Server | NixOS | The original server, hosting most of my personal services |
1818+| skadi | Server | NixOS | Oracle free server, mostly used for the PDS and aarch64 builds |
1919+| tatsumaki | Laptop | macOS | A MacBook Air, given to me by uni, almost exclusively used at uni |
2020+| valkyrie | WSL2 | NixOS | My WSL2 instance, installed on amaterasu |
2121+2222+## Modules
2323+2424+- [flake](https://github.com/isabelroses/dotfiles/tree/main/modules/flake/) - modules used to build the flake outputs
2525+- [generic](https://github.com/isabelroses/dotfiles/tree/main/modules/generic/) - modules intended to work with any module system (e.g. home-manager, nix-darwin, etc.)
2626+- [nixos](https://github.com/isabelroses/dotfiles/tree/main/modules/nixos/) - modules that work on NixOS
2727+- [base](https://github.com/isabelroses/dotfiles/tree/main/modules/base/) - modules that work on either NixOS or macOS
2828+- [darwin](https://github.com/isabelroses/dotfiles/tree/main/modules/darwin/) - modules that work on macOS
2929+- [home](https://github.com/isabelroses/dotfiles/tree/main/modules/home/) - modules used to configure home-manager
3030+- [iso](https://github.com/isabelroses/dotfiles/tree/main/modules/iso/) - modules used to build ISOs
3131+- [wsl](https://github.com/isabelroses/dotfiles/tree/main/modules/wsl/) - modules that work on WSL2
3232+3333+## Rendition
3434+3535+<Image src={topology} alt="A topology diagram of the flake" />
+22
docs/src/content/docs/guides/adding-packages.md
···11+---
22+title: Adding packages
33+description: How to add packages to your user or system profile in this flake.
44+---
55+66+Adding packages to your user or system profile is different than most other flakes. In this flake we use the `garden.packages` attribute to add our packages, which takes an attrset. This prevents us from having duplicate listings of packages, and lets us think a little less when writing home-manager or nixos/darwin module code.
77+88+An example of this might look like the following:
99+1010+```nix
1111+{ pkgs, ... }:
1212+{
1313+ garden.packages = {
1414+ inherit (pkgs) git;
1515+1616+ wrapped-nvim = pkgs.symlinkJoin {
1717+ name = "wrapped-nvim";
1818+ paths = [ pkgs.nvim pkgs.astro-language-server ];
1919+ };
2020+ };
2121+}
2222+```
+49
docs/src/content/docs/guides/adding-systems.md
···11+---
22+title: Adding systems
33+description: How to declare a new system configuration in this flake.
44+---
55+66+The per-system configuration lives in `/systems/<hostname>/`. To wire a host
77+into the flake it must be declared in `nixosConfigurations` (or
88+`darwinConfigurations`) inside
99+[`modules/flake/default.nix`](https://github.com/isabelroses/dotfiles/blob/main/modules/flake/default.nix).
1010+1111+Each entry is passed through the `mkHost` helper at
1212+[`modules/flake/lib/mkhost.nix`](https://github.com/isabelroses/dotfiles/blob/main/modules/flake/lib/mkhost.nix).
1313+It accepts the following options:
1414+1515+- **arch**
1616+ - default: `"x86_64"`
1717+ - options: `"x86_64"`, `"aarch64"`
1818+- **class**
1919+ - default: `"nixos"`
2020+ - options: `"nixos"`, `"darwin"`, `"iso"`, `"wsl"`
2121+- **modules**
2222+ - default: `[ ]`
2323+ - extra NixOS / nix-darwin modules to import on top of the host's `systems/<hostname>/default.nix`
2424+- **specialArgs**
2525+ - default: `{ }`
2626+ - merged on top of the default `specialArgs` (which already includes `inputs` and `self`)
2727+2828+For example, an aarch64 NixOS server:
2929+3030+```nix
3131+nixosConfigurations = mkHosts {
3232+ skadi = {
3333+ arch = "aarch64";
3434+ };
3535+};
3636+```
3737+3838+A macOS host:
3939+4040+```nix
4141+darwinConfigurations = mkHosts {
4242+ tatsumaki = {
4343+ arch = "aarch64";
4444+ class = "darwin";
4545+ };
4646+};
4747+```
4848+4949+The system tuple (e.g. `aarch64-linux`, `x86_64-linux`, `aarch64-darwin`) is derived from `arch` and `class`, so you don't need to set it yourself.
+23
docs/src/content/docs/guides/adding-users.md
···11+---
22+title: Adding users
33+description: How to declare a new user in this flake.
44+---
55+66+The user side is configured in `/home/<user>`.
77+88+Add the username to the `garden.system.users` list (defined at `/modules/base/users/options.nix`). `/modules/base/users/<user>.nix` can be used for anything that is not preconfigured by `/modules/base/users/mkuser.nix` (such as the user's SSH keys). You'll also want to add a hashed password generated from `mkpasswd` to `/modules/nixos/users/<user>.nix`.
99+1010+You should also add your user into the `users.nix` file for your system, following this template:
1111+1212+```nix
1313+{
1414+ garden.system = {
1515+ mainUser = "kitty";
1616+ users = [ "kitty" ];
1717+ };
1818+1919+ # you can add a home-manager configuration here for the user if it needs
2020+ # anything special
2121+ home-manager.users.kitty.garden = {};
2222+}
2323+```
+14
docs/src/content/docs/guides/debugging.md
···11+---
22+title: Debugging
33+description: How to debug the flake using the Nix REPL.
44+---
55+66+Sometimes you may want to debug the flake. One easy way to do this is to enter the Nix REPL. From there you can load the flake using `:lf`, and start debugging with [`nix-select`](https://clan.lol/blog/nix-select/).
77+88+```console
99+nix-repl> :lf
1010+1111+nix-repl> select = (builtins.getFlake "github:clan-lol/select").lib.select
1212+1313+nix-repl> select "*.config.boot.swraid.enable" nixosConfigurations
1414+```
+77
docs/src/content/docs/guides/installation.md
···11+---
22+title: Installation
33+description: How to install this configuration on NixOS or macOS.
44+---
55+66+## NixOS
77+88+You might want to use the [lilith ISO configuration](/design/topology/#systems), provided in this repository.
99+1010+- To build it, run `just iso lilith`.
1111+- Or download it from the [release page](https://github.com/isabelroses/dotfiles/releases/latest).
1212+1313+If you opted to use the lilith ISO image, you can use the `iztaller` script to partition the target disk and install the system. Otherwise, follow the steps below.
1414+1515+1. Install [NixOS](https://nixos.org/download); you might need to follow the [manual](https://nixos.org/manual/nixos/stable/index.html#sec-installation).
1616+2. Clone this repository to `~/.config/flake`.
1717+3. Run `sudo nixos-rebuild switch --flake ~/.config/flake#<host>`.
1818+1919+### Dual boot
2020+2121+If you'd like to set up dual boot with Windows, you should consider enabling secure boot. To do so, follow the [lanzaboote guide](https://github.com/nix-community/lanzaboote/blob/0bc127c631999c9555cae2b0cdad2128ff058259/docs/QUICK_START.md).
2222+2323+1. Locate the Windows EFI partition:
2424+2525+ ```sh
2626+ lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT
2727+ ```
2828+2929+2. Mount the Windows EFI partition:
3030+3131+ ```sh
3232+ sudo mkdir /mnt/winboot
3333+ sudo mount /dev/nvme0n1p1 /mnt/winboot
3434+ ```
3535+3636+3. Copy the Windows EFI files to the NixOS EFI partition:
3737+3838+ ```sh
3939+ sudo rsync -av /mnt/winboot/EFI/Microsoft/ /boot/EFI/Microsoft/
4040+ ```
4141+4242+4. Finally, clean up:
4343+4444+ ```sh
4545+ sudo umount /mnt/winboot
4646+ sudo rmdir /mnt/winboot
4747+ ```
4848+4949+## macOS
5050+5151+1. Install [Lix](https://lix.systems/install/), the package manager:
5252+5353+ ```sh
5454+ curl -sSf -L https://install.lix.systems/lix | sh -s -- install
5555+ ```
5656+5757+2. Enter a Nix development shell in order to use git and other required tools:
5858+5959+ ```sh
6060+ nix develop
6161+ ```
6262+6363+3. Switch to the configuration. Replace `<host>` with the system you are configuring:
6464+6565+ ```sh
6666+ just provision <host>
6767+ ```
6868+6969+## Imperative steps
7070+7171+- Login to atuin
7272+- Login to gh CLI
7373+- Install user scripts:
7474+ - [bleh](https://github.com/katelyynn/bleh/raw/uwu/fm/bleh.user.js)
7575+ - [Info for merged pull requests](https://github.com/isabelroses/userscripts/raw/refs/heads/main/src/prs/script.user.js)
7676+ - [bluesky hide followers & likes](https://github.com/isabelroses/userscripts/raw/refs/heads/main/src/bsky-hide-follows/script.user.js)
7777+- Grab all my scripts: `git clone me:isabel/skid ~/.local/bin`
+16
docs/src/content/docs/guides/issues.md
···11+---
22+title: Issues
33+description: Documented issues and their fixes.
44+---
55+66+An awesome list of issues I've had that I want to document for future reference.
77+88+## chmod nix-darwin error
99+1010+```
1111+error: chmod '"/nix/store/66kaihiqnn02vpxs6qydcbw9pq7nrkld-iterm2-3.5.4/Applications/iTerm2.app"': Operation not permitted
1212+```
1313+1414+You can get this error when trying to run `nix store gc`. The fix is to give Nix Full Disk Access. To do so, go to `System Settings > Privacy & Security > Full Disk Access` and add Nix to the list of apps that have full disk access.
1515+1616+See also [NixOS/nix#6765](https://github.com/NixOS/nix/issues/6765).
···11+---
22+title: Making it your own
33+description: A guide for adapting this configuration to your own systems.
44+---
55+66+Despite my best efforts to advise against it, many of you still choose to do
77+so. So here is a guide on how to make it your own.
88+99+## Steps
1010+1111+1. There are a number of files you'll want to edit, but the best place to start is renaming the `isabel` user to your own user.
1212+2. User configuration:
1313+ 1. Edit `/modules/base/users/options.nix` and change any mentions of `isabel` to your username.
1414+ 2. Create a file that will contain your SSH key at `/modules/base/users/<user>.nix`.
1515+ 3. Edit `/modules/nixos/users/<user>.nix` to add your encrypted password, generated with `mkpasswd`.
1616+3. Picking a host:
1717+ 1. I host a number of different types of hosts, so there is likely one that will nicely match yours. To check what is a good match for you, look at [the hosts table](/design/topology/#systems).
1818+ 2. Once you've picked the ideal host, rename `/systems/<old>/` to your preferred hostname.
1919+ 3. Update the matching entry in `nixosConfigurations` (or `darwinConfigurations`) in `/modules/flake/default.nix` so the name lines up. See [Adding systems](/guides/adding-systems/) for the available options.
2020+ 4. Make any needed adjustments. This should include renaming the home-manager users and configuring the options.
2121+4. Edit `modules/nixos/environment/locale.nix` so that you have the correct timezone and locale.
2222+5. You likely don't want to use my Lix fork, so regex-replace `izlix` with your preferred Nix implementation. If your preferred Nix implementation does not support nested `input.follows` you'll have to edit the `flake.nix`.
2323+6. There is a lot of maintenance burden in this repository, so see what you can remove safely. There's no safe way to guide you on this — best of luck.
+86
docs/src/content/docs/guides/secrets.md
···11+---
22+title: Secrets
33+description: Managing encrypted secrets with sops-nix.
44+---
55+66+We use [`sops-nix`](https://github.com/Mic92/sops-nix) to manage secrets that
77+are not files. For the most part this will be SSH keys, API keys, and other
88+plaintext secrets.
99+1010+To start, identify whether you are creating a system-level secret or a
1111+user-level secret.
1212+1313+## User secrets
1414+1515+If you are adding a user-level secret, add your user to the list of users in
1616+the `.sops.yaml` file. Then get your public key by running:
1717+1818+```bash
1919+cat ~/.ssh/id_ed25519.pub
2020+```
2121+2222+Then create your user's secrets file:
2323+2424+```bash
2525+sops secrets/your_username.yaml
2626+```
2727+2828+Where `your_username` is your actual username.
2929+3030+## System secrets
3131+3232+If you are adding system-level secrets, get the hostname and its accompanying
3333+public key. To get the public key, run:
3434+3535+```bash
3636+ssh-keyscan <host>
3737+```
3838+3939+Where `<host>` is the IP address or hostname of the system you want to add.
4040+4141+Alternatively, if you are on the machine you can run:
4242+4343+```bash
4444+cat /etc/ssh/ssh_host_ed25519_key.pub
4545+```
4646+4747+Then create the system secrets file:
4848+4949+```bash
5050+sops secrets/services/<service>.yaml
5151+```
5252+5353+Replace `<service>` with the name of the service you are adding the secrets for.
5454+5555+## Rotating secrets
5656+5757+To rotate a secret file, run:
5858+5959+```bash
6060+sops rotate -i secrets/<file>.yaml
6161+```
6262+6363+Where `<file>` is the name of the file you want to rotate.
6464+6565+To rotate all the secrets, run:
6666+6767+```bash
6868+find secrets/ -name "*.yaml" | xargs -I {} sops rotate -i {}
6969+```
7070+7171+## Adding new owners to secrets
7272+7373+To add a new owner to a secret file, you must first add the new recipient to
7474+the `.sops.yaml` file. Then run:
7575+7676+```bash
7777+sops updatekeys secrets/<file>.yaml
7878+```
7979+8080+Where `<file>` is the name of the file you want to update.
8181+8282+To batch update all secrets, run:
8383+8484+```bash
8585+find secrets/ -name "*.yaml" | xargs -I {} sops updatekeys -y {}
8686+```
+15
docs/src/content/docs/guides/templates.md
···11+---
22+title: Templates
33+description: Where the flake templates have moved to and how to use them.
44+---
55+66+In the past this repo used to hold templates. Now the templates are located at
77+[extersia-org/nix-templates](https://github.com/extersia-org/nix-templates).
88+Overall the commands remain the same except for the repo to use.
99+1010+- `nix flake init -t github:extersia-org/nix-templates#<template>` — initialize a new project with the template.
1111+- `nix flake new -t github:extersia-org/nix-templates#<template> <out dir>` — create a new project in the specified directory.
1212+1313+For the full list of templates, check the [nix-templates
1414+repo](https://github.com/extersia-org/nix-templates) directory or run `nix
1515+flake show github:extersia-org/nix-templates`.
+10
docs/src/content/docs/guides/uninstalling.md
···11+---
22+title: Uninstalling
33+description: How to uninstall nix-darwin.
44+---
55+66+To uninstall nix-darwin, run the following command:
77+88+```sh
99+nix run github:LnL7/nix-darwin#darwin-uninstaller
1010+```
···11+---
22+title: Introduction
33+description: An overview of what this repository provides and what to expect.
44+---
55+66+## Foreword
77+88+This repository contains my **personal** configuration for my systems, so it's really important that you know it's **personal** and not everything will fit your needs.
99+Therefore most things will not work out of the box without some changes, so be warned!
1010+1111+:::caution
1212+This configuration will **not** work if you do not change any of the [secrets](/guides/secrets/) since they are encrypted.
1313+:::
1414+1515+Maybe consider donating to me if this config or docs have helped you. Donation
1616+platforms in order of preference:
1717+1818+- [ko-fi](https://ko-fi.com/isabelroses)
1919+- [GitHub Sponsors](https://github.com/sponsors/isabelroses)
2020+- [liberapay](https://liberapay.com/isabelroses)
2121+- [patreon](https://www.patreon.com/isabelroses)
2222+2323+## Mirrors
2424+2525+- [GitHub](https://github.com/isabelroses/dotfiles)
2626+- [GitLab](https://gitlab.com/isabelroses/dotfiles)
2727+- [Codeberg](https://codeberg.org/isabel/dotfiles)
2828+- [iztea](https://git.isabelroses.com/isabel/dotfiles)
2929+- [tangled](https://tangled.org/@isabelroses.com/dotfiles)
3030+3131+## Futher Reading
3232+3333+A collection of resources, configurations, and people worth thanking.
3434+3535+### Resources
3636+3737+A collection of resources from people who just make good stuff.
3838+3939+- [Xe's blog](https://xeiaso.net/blog/)
4040+- [The aux forum](https://forum.aux.computer/)
4141+- [Viper's blog](https://ayats.org/)
4242+- [Nix Pills](https://nixos.org/guides/nix-pills/) — this one might be a bit much if you don't care too much about the internals
4343+- [Solène's blog](https://dataswamp.org/~solene)
4444+- [Jade Lovelace's blog](https://jade.fyi/)
4545+- [Astrid's blog](https://astrid.tech/t/nixos)
4646+- [nixpkgs news](https://nixpkgs.news/)
4747+- [nix.dev](https://nix.dev/)
4848+- [cafkafk's blog](https://cafkafk.dev/)
4949+- [zimbatm's blog](https://zimbatm.com/notes)
5050+- [my own blog](https://isabelroses.com/blog/tag/nix)
5151+- [official wiki](https://wiki.nixos.org/wiki/NixOS_Wiki)
5252+- [zero to nix](https://zero-to-nix.com/start)
5353+5454+### Projects / configurations
5555+5656+These are some configurations or projects that I have taken inspiration from, or find to be of high quality, that people should also consider reading.
5757+5858+- [lovesegfault/nix-config](https://github.com/lovesegfault/nix-config)
5959+- [jakehamilton/config](https://github.com/jakehamilton/config)
6060+- [flake parts](https://flake.parts/)
6161+- [nixos-hardware](https://github.com/NixOS/nixos-hardware)
6262+- [getchoo/flake](https://github.com/getchoo/flake)
6363+- [uncenter/flake](https://github.com/uncenter/flake)
6464+- [lilyinstarlight/foosteros](https://github.com/lilyinstarlight/foosteros)
6565+6666+### People
6767+6868+Thanks to all these people; otherwise this config and I would be lost.
6969+7070+- [getchoo](https://github.com/getchoo) — for making catppuccin/nix and helping a ton
7171+- [nullishamy](https://github.com/nullishamy) — for tricking me into using NixOS
7272+- [nekowinston](https://github.com/nekowinston) — for fixing half my problems
7373+- [jakehamilton](https://github.com/jakehamilton) — for teaching me too much about modules
7474+- [nyxkrage](https://github.com/nyxkrage) — for being there to answer my questions
7575+- [NotAShelf](https://github.com/notashelf) — lots of valuable information
7676+- [Minion3665](https://github.com/Minion3665) — for making me write better docs
7777+- [comfysage](https://github.com/comfysage) — for the help with neovim
7878+- [Thorn](https://git.avery.garden/thorn) — picrewnix????
-24
docs/src/design/layout.md
···11-### 🖥️ Systems
22-33-| Name | Main User | Type | OS | Extra Details |
44-| --------- | --------- | ------- | ----- | ------------- |
55-| amaterasu | isabel | Desktop | NixOS | A powerful desktop dual booting windows 11 |
66-| athena | isabel | Hybrid | NixOS | My oldest laptop, altogh this flake still supports it, its barely in use |
77-| aphrodite | isabel | Sever | NixOS | The host of most tgirl.cloud services |
88-| lilith | n/a | Iso | NixOS | An iso image of my NixOS configuration, used to install NixOS on new systems |
99-| minerva | isabel | Server | NixOS | This is the orginal server, hosting most of my personal services |
1010-| skadi | isabel | Server | NixOS | Oracle free server, mostly used for the pds and aarch64 builds |
1111-| tatsumaki | isabel | Laptop | macOS | A macbook air, given to me by uni, almost exclusively used at uni |
1212-| valkyrie | isabel | WSL2 | NixOS | This is my WSL2 instance, installed on amaterasu |
1313-1414-1515-### 🧩 Modules
1616-1717-* [flake](https://github.com/isabelroses/dotfiles/tree/main/modules/flake/) - modules which are used to build the flake outputs
1818-* [generic](https://github.com/isabelroses/dotfiles/tree/main/modules/generic/) - modules which are intended to work with any module system (e.g. home-manager, nix-darwin, etc.)
1919-* [nixos](https://github.com/isabelroses/dotfiles/tree/main/modules/nixos/) - modules which work on NixOS
2020-* [base](https://github.com/isabelroses/dotfiles/tree/main/modules/base/) - modules which work on either NixOS or macOS
2121-* [darwin](https://github.com/isabelroses/dotfiles/tree/main/modules/darwin/) - modules which work on macOS
2222-* [home](https://github.com/isabelroses/dotfiles/tree/main/modules/home/) - modules which are used to configure home-manager
2323-* [iso](https://github.com/isabelroses/dotfiles/tree/main/modules/iso/) - modules which are used to build isos
2424-* [wsl](https://github.com/isabelroses/dotfiles/tree/main/modules/wsl/) - modules which work on WSL2
-19
docs/src/design/modules.md
···11-When writing a module, you should follow these guidelines:
22-33-- Use a tree like structure for the head lambda args if and only if it is
44- needed.
55-66-```nix
77-{
88- lib,
99- pkgs,
1010- inputs,
1111- ...
1212-}:
1313-{
1414- /* ommitted config */
1515-}
1616-```
1717-1818-- `imports` should do its best to avoid going backwards in the flake's file
1919- structure.
-44
docs/src/further-reading.md
···11-# Resources
22-33-A collection of resources from people who just make good stuff.
44-55-- [Xe's blog](https://xeiaso.net/blog/)
66-- [The aux forum](https://forum.aux.computer/)
77-- [Viper's Blog](https://ayats.org/)
88-- [Nix Pills](https://nixos.org/guides/nix-pills/), this one might be a bit much if you don't care too much about the internals
99-- [Solène's Blog](https://dataswamp.org/~solene)
1010-- [Jade Lovelace's blog](https://jade.fyi/)
1111-- [Astrid's blog](https://astrid.tech/t/nixos)
1212-- [nixpkgs news](https://nixpkgs.news/)
1313-- [nix.dev](https://nix.dev/)
1414-- [cafkafk's blog](https://cafkafk.dev/)
1515-- [zimbatm's blog](https://zimbatm.com/notes)
1616-- [my own blog](https://isabelroses.com/blog/tag/nix)
1717-- [official wiki](https://wiki.nixos.org/wiki/NixOS_Wiki)
1818-- [zero to nix](https://zero-to-nix.com/start)
1919-2020-# Projects / Configurations
2121-2222-These are some configuration or projects that I have taken inspiration from or find to be of a high quality that people should also consider reading.
2323-2424-- [lovesegfault/nix-config](https://github.com/lovesegfault/nix-config)
2525-- [jakehamilton/config](https://github.com/jakehamilton/config)
2626-- [flake parts](https://flake.parts/)
2727-- [nixos-hardware](https://github.com/NixOS/nixos-hardware)
2828-- [getchoo/flake](https://github.com/getchoo/flake)
2929-- [uncenter/flake](https://github.com/uncenter/flake)
3030-- [lilyinstarlight/foosteros](https://github.com/lilyinstarlight/foosteros)
3131-3232-# People
3333-3434-Thanks to all these people otherwise this config and I would be lost.
3535-3636-- [getchoo](https://github.com/getchoo), for making catppucin/nix and helping a ton
3737-- [nullishamy](https://github.com/nullishamy), for tricking me into using NixOS
3838-- [nekowinston](https://github.com/nekowinston), for fixing half my problems
3939-- [jakehamilton](https://github.com/jakehamilton), for teaching me too much about modules
4040-- [nyxkrage](https://github.com/nyxkrage), for being there to answer my questions
4141-- [NotAShelf](https://github.com/notashelf), lots of valuable information
4242-- [Minion3665](https://github.com/Minion3665), for making me write better docs
4343-- [comfysage](https://github.com/comfysage), for the help with neovim
4444-- [Thorn](https://git.avery.garden/thorn), picrewnix????
-21
docs/src/guides/adding-packages.md
···11-Adding packages to your user or system profile is different then most other
22-flakes. In this flake we use the `garden.packages` attribute to add our
33-packages, which take an attrset. This prevents us from having duplicate listings
44-of packages, and lets us think a little less when writing home-manger or
55-nixos/darwin module code.
66-77-An example of this may look like the following:
88-99-```nix
1010-{ pkgs, ... }:
1111-{
1212- garden.packages = {
1313- inherit (pkgs) git;
1414-1515- wrapped-nvim = pkgs.symlinkJoin {
1616- name = "wrapped-nvim";
1717- paths = [ pkgs.nvim pkgs.astro-language-server ];
1818- };
1919- };
2020-}
2121-```
-33
docs/src/guides/adding-systems.md
···11-The systems are configured in `/systems/<hostname>`.
22-33-To set up a system configuration it must be declared in `/systems/default.nix`.
44-55-- arch:
66-77- - default: "x86_64"
88- - options: "x86_64", "aarch64"
99-1010-- class:
1111-1212- - default: "nixos"
1313- - options: "nixos", "darwin", "iso", "wsl"
1414-1515-- system:
1616-1717- - default: `constructSystem config.easyHosts.hosts.<hostname>.target config.easy-hosts.hosts.<hostname>.arch`
1818- - note: This is a function that constructs the system configuration, it will make `x86_64-linux` by from the `target` and `arch` attributes or `aarch64-darwin`
1919-2020-- deployable:
2121-2222- - default: false
2323-2424-- modules:
2525-2626- - default: "[ ]"
2727- - options:
2828-2929-- specialArgs:
3030- - default: "{ }"
3131-3232-> [!TIP]
3333-> Please consult [easy-hosts](https://github.com/isabelroses/easy-hosts) for more information on how to set up a system configuration.
-23
docs/src/guides/adding-users.md
···11-The user side is configured in `/home/<user>`.
22-33-To set up a user configuration it must be declared in
44-`/modules/base/users/options.nix` and `/modules/base/users/<user>.nix` can be
55-used for anything that is not preconfigured by
66-`/modules/base/users/mkusers.nix`. You will also want to add a hashed password
77-generated from `mkpasswd` to `/modules/nixos/users/<user>.nix`.
88-99-You should also add your user into the `users.nix` file for your system. Whilst
1010-following the template:
1111-1212-```nix
1313-{
1414- garden.system = {
1515- mainUser = "kitty";
1616- users = [ "kitty" ];
1717- };
1818-1919- # you can add a home-manager configuration here for the user if it needs
2020- # anything special
2121- home-manager.users.kitty.garden = {};
2222-}
2323-```
-11
docs/src/guides/debugging.md
···11-sometimes you may want to debug the flake. one easy way to do this is to enter
22-the nix repl. from there you can load the flake using `:lf`. and start
33-debugging with [`nix-select`](https://clan.lol/blog/nix-select/).
44-55-```console
66-nix-repl> :lf
77-88-nix-repl> select = (builtins.getFlake "github:clan-lol/select").lib.select
99-1010-nix-repl> select "*.config.boot.swraid.enable" nixosConfigurations
1111-```
-77
docs/src/guides/installation.md
···11-# NixOS
22-33-You might want to use the [lilith iso configuration](./systems/lilith/), provided in this repository
44-55-- To build it you can run `nix build .#images.lilith`.
66-- Or you can download it from the [release page](https://github.com/isabelroses/dotfiles/releases/latest).
77-88-If you opted to use the lilith iso image, you can use the `iznix-install`
99-script to install it on your system. Otherwise, you can follow the steps below.
1010-1111-1. Install [NixOS](https://nixos.org/download), you might need to follow the [manual](https://nixos.org/manual/nixos/stable/index.html#sec-installation)
1212-2. Clone this repository to `~/.config/flake`
1313-3. Run `sudo nixos-rebuild switch --flake ~/.config/flake#<host>`
1414-1515-## Dual boot
1616-1717-If you would like to set up duel boot with Windows, you should consider
1818-enabling secure boot. To do so you should follow the [lanzaboote
1919-guide](https://github.com/nix-community/lanzaboote/blob/0bc127c631999c9555cae2b0cdad2128ff058259/docs/QUICK_START.md).
2020-2121-1. Locate the Windows EFI partition
2222-2323-```sh
2424-lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT
2525-```
2626-2727-2. Mount the Windows EFI partition
2828-2929-```sh
3030-sudo mkdir /mnt/winboot
3131-sudo mount /dev/nvme0n1p1 /mnt/winboot
3232-```
3333-3434-3. Copy the Windows EFI files to the NixOS EFI partition
3535-3636-```sh
3737-sudo rsync -av /mnt/winboot/EFI/Microsoft/ /boot/EFI/Microsoft/
3838-```
3939-4040-4. Finally, clean up
4141-4242-```sh
4343-sudo umount /mnt/winboot
4444-sudo rmdir /mnt/winboot
4545-```
4646-4747-# macOS
4848-4949-1. Install [Lix](https://lix.systems/install/) the package manager
5050-5151-```sh
5252-curl -sSf -L https://install.lix.systems/lix | sh -s -- install
5353-```
5454-5555-2. Then enter a nix development shell in order to use git and other required
5656- tools
5757-5858-```sh
5959-nix develop
6060-```
6161-6262-3. Now we need to switch to the configuration, remember to replace `<host>`
6363- with the system you are configuring
6464-6565-```sh
6666-just provision <host>
6767-```
6868-6969-# Imperative steps
7070-7171-- login to atuin
7272-- login to gh cli
7373-- install users scripts
7474- - [bleh](https://github.com/katelyynn/bleh/raw/uwu/fm/bleh.user.js)
7575- - [Info for merged pull requests](https://github.com/isabelroses/userscripts/raw/refs/heads/main/src/prs/script.user.js)
7676- - [bluesky hide followers & likes](https://github.com/isabelroses/userscripts/raw/refs/heads/main/src/bsky-hide-follows/script.user.js)
7777-- grab all my scripts: `git clone me:isabel/skid ~/.local/bin`
-14
docs/src/guides/issues.md
···11-# Issues
22-33-A awesome list of issues I've had that I want to document for future reference.
44-55-66-## chmod nix darwin error
77-88-`error: chmod '"/nix/store/66kaihiqnn02vpxs6qydcbw9pq7nrkld-iterm2-3.5.4/Applications/iTerm2.app"': Operation not permitted`
99-1010-You can get this error when trying to run `nix store gc`. The fix for this is
1111-to give nix FDA. To do so `System Settings > Privacy & Security > Full Disk
1212-Access` and add nix to the list of apps that have full disk access.
1313-1414-See also https://github.com/NixOS/nix/issues/6765
-38
docs/src/guides/making-it-your-own.md
···11-Despite my best efforts to advice you as to not do this, many of you still
22-choose to do so. So here is a guide on how to make it your own. So maybe
33-consider donating to me before continuing.
44-55-donation platforms in order of preference:
66-- [ko-fi](https://ko-fi.com/isabelroses)
77-- [github sponsors](https://github.com/sponsors/isabelroses)
88-- [liberapay](https://liberapay.com/isabelroses)
99-- [patreon](https://www.patreon.com/isabelroses)
1010-1111-# Making it your own
1212-1313-1. There are a number of files you will want to edit but the best place to
1414- start would be renaming the `isabel` user to your own user.
1515-2.
1616- 1. Following this you will want to edit `/modules/base/users/options.nix` and
1717- change any mentions of `isabel` to your username.
1818- 2. Then you can create a file in that will contain your ssh key
1919- `/modules/base/users/<user>.nix`.
2020- 3. Finally you will want to edit `/modules/nixos/users/<user>.nix` to add
2121- your encrypted password, generated with `mkpasswd`.
2222-3.
2323- 1. I host a number off different types of hosts, so there is likely one that
2424- will nicely match yours. To check what is a good match for you, look at [the
2525- hosts table](/design/layout.html#-systems).
2626- 2. At this point you should have found the ideal host, so your going to
2727- rename the directory that it is into your preferred hostname.
2828- 3. Then you should make any needed adjustments. This should include renaming
2929- the home-manager users and configuring the options.
3030-4. You will then want to edit `modules/nixos/environment/locale.nix` such that
3131- you have the correct timezone and locale.
3232-5. You likely don't want to use my lix fork, so you should regex replace
3333- `izlix` with your preferred nix implementation. If your preferred nix
3434- implementation does not support nested `input.follows` you will have to edit
3535- the `flake.nix`.
3636-6. There is a lot of maintenance burden in this repository, so you should see
3737- what you can remove safely. But there's no safe way to guide you on this so best of luck.
3838-
-81
docs/src/guides/secrets.md
···11-# Sops Nix
22-33-We also use [`sops-nix`](https://github.com/Mic92/sops-nix) to manage secrets
44-that are not files. For the most part this will be ssh keys, api keys and other
55-plaintext secrets.
66-77-To start you should identify whether you are creating a system level secret or
88-a user level secret.
99-1010-## User secrets
1111-1212-If you are adding a user level secret, you should add your user to the list of
1313-users in the `.sops.yaml` file. Then you should get your public key by running:
1414-1515-```bash
1616-ssh-to-age < ~/.ssh/id_ed25519.pub
1717-```
1818-1919-Then you can create your users secrets file. To do so you should run the command:
2020-2121-```bash
2222-sops secrets/your_username.yaml
2323-```
2424-2525-Where `your_username` is your actual username.
2626-2727-## System secrets
2828-2929-If you are adding a system level secrets, you should get the hostname and its accompanied public key. To get the public key, you can run:
3030-3131-```bash
3232-ssh-keyscan <host> | ssh-to-age
3333-```
3434-3535-Where `<host>` is the ip address or hostname of the system you want to add.
3636-3737-Alternatively, if you are on the machine you can run:
3838-3939-```bash
4040-ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
4141-```
4242-4343-Then you can create the system secrets file. To do so you should run the command:
4444-4545-```bash
4646-sops secrets/services/<service>.yaml
4747-```
4848-4949-You should replace `<service>` with the name of the service you are adding the secrets for.
5050-5151-## Rotating secrets
5252-5353-To rotate a secret file all you have to run is:
5454-5555-```bash
5656-sops rotate -i secrets/<file>.yaml
5757-```
5858-5959-Where `<file>` is the name of the file you want to rotate.
6060-6161-To rotate all the secrets, you can run:
6262-6363-```bash
6464-find secrets/ -name "*.yaml" | xargs -I {} sops rotate -i {}
6565-```
6666-6767-## Adding new owners to secrets
6868-6969-To add a new owner to a secret file, you must first add the new recipent to the `.sops.yaml` file. Then you can run the command:
7070-7171-```bash
7272-sops updatekeys secrets/<file>.yaml
7373-```
7474-7575-Where `<file>` is the name of the file you want to update.
7676-7777-Futhermore, to batch update all secrets, you can run:
7878-7979-```bash
8080-find secrets/ -name "*.yaml" | xargs -I {} sops updatekeys -y {}
8181-```
-12
docs/src/guides/templates.md
···11-In the past this repo used to hold templates. Now the templates are located at
22-[extersia-org/nix-templates](https://github.com/extersia-org/nix-templates).
33-Overall the commands remain the same except for the repo to use.
44-55-- `nix flake init -t github:extersia-org/nix-templates#<template>` to initialize
66- a new project with the template
77-- `nix flake new -t github:extersia-org/nix-templates#<template> <out dir>` to
88- create a new project in the specified directory
99-1010-For the full list of templates check the [nix-templates
1111-repo](https://github.com/extersia-org/nix-templates) directory or run `nix flake
1212-show github:extersia-org/nix-templates`.
-5
docs/src/guides/uninstalling.md
···11-To uninstall nix darwin run the following command:
22-33-```sh
44-nix run github:LnL7/nix-darwin#darwin-uninstaller
55-```