librephoenix / nixos-config

Nix noob trying to build his system
GNU General Public License v3.0
574 stars 49 forks source link
config dotfiles dotfiles-linux linux linux-dotfiles nix nixos nixos-config nixos-configuration nixos-dotfiles

+title: NixOS Config

+author: Emmet

[[https://gitlab.com/librephoenix/nixos-config][Main Repo Link (GitLab)]]

[[https://github.com/librephoenix/nixos-config][Mirror Repo Link (GitHub)]]

[[https://codeberg.org/librephoenix/nixos-config][Mirror Repo Link (Codeberg)]]

** What is this repository? These are my dotfiles (configuration files) for my NixOS setup(s).

Here is my main setup: [[desktop.png]]

** My Themes [[https://github.com/danth/stylix#readme][Stylix]] (and [[https://github.com/SenchoPens/base16.nix#readme][base16.nix]], of course) is amazing, allowing you to theme your entire system with base16-themes.

Using this I have [[./themes][55+ themes]] (I add more sometimes) I can switch between on-the-fly. Visit the [[./themes][themes directory]] for more info and screenshots!

** Install I wrote some reinstall notes for myself [[./install.org][here (install.org)]].

TLDR: You should™ be able to install my dotfiles to a fresh NixOS system with the following experimental script:

+begin_src sh :noeval

nix-shell -p git --command "nix run --experimental-features 'nix-command flakes' gitlab:librephoenix/nixos-config"

+end_src

Disclaimer: Ultimately, I can't gaurantee this will work for anyone other than myself, so /use this at your own discretion/. Also my dotfiles are /highly/ opinionated, which you will discover immediately if you try them out.

Potential Errors: I've only tested it working on UEFI with the default EFI mount point of =/boot=. I've added experimental legacy (BIOS) boot support, but it does rely on a quick and dirty script to find the grub device. If you are testing it using some weird boot configuration for whatever reason, try modifying =bootMountPath= (UEFI) or =grubDevice= (legacy BIOS) in =flake.nix= before install, or else it will complain about not being able to install the bootloader.

Note: If you're installing this to a VM, Hyprland won't work unless 3D acceleration is enabled.

Security Disclaimer: If you install or copy my =homelab= or =worklab= profiles, /CHANGE THE PUBLIC SSH KEYS UNLESS YOU WANT ME TO BE ABLE TO SSH INTO YOUR SERVER. YOU CAN CHANGE OR REMOVE THE SSH KEY IN THE RELEVANT CONFIGURATION.NIX/:

** Modules Separate Nix files can be imported as modules using an import block:

+BEGIN_SRC nix

imports = [ ./import1.nix ./import2.nix ... ];

+END_SRC

This conveniently allows configurations to be (*cough cough) /modular/ (ba dum, tssss).

I have my modules separated into two groups:

More detailed information on these specific modules are in the [[./system][system directory]] and [[./user][user directory]] respectively.

** Patches In some cases, since I use =nixpgs-unstable=, I must patch nixpkgs. This can be done inside of a flake via:

+BEGIN_SRC nix

nixpkgs-patched = (import nixpkgs { inherit system; }).applyPatches {
  name = "nixpkgs-patched";
  src = nixpkgs;
  patches = [ ./example-patch.nix ];
};

# configure pkgs
pkgs = import nixpkgs-patched { inherit system; };

# configure lib
lib = nixpkgs.lib;

+END_SRC

Patches can either be local or remote, so you can even import unmerged pull requests by using =fetchpatch= and the raw patch url, i.e: https://github.com/NixOS/nixpkgs/pull/example.patch.

I currently curate patches local to this repo in the [[./patches][patches]] directory.

** Profiles I separate my configurations into [[./profiles][profiles]] (essentially system templates), i.e:

My profile can be conveniently selected in [[./flake.nix][my flake.nix]] by setting the =profile= variable.

More detailed information on these profiles is in the [[./profiles][profiles directory]].

** Nix Wrapper Script Some Nix commands are confusing, really long to type out, or require me to be in the directory with my dotfiles. To solve this, I wrote a [[./system/bin/phoenix.nix][wrapper script called phoenix]], which calls various scripts in the root of this directory.

TLDR:

** Star History Didn't think this would get that many [[https://star-history.com/#librephoenix/nixos-config&Date][stars on GitHub]], yet here we are: [[https://api.star-history.com/svg?repos=librephoenix/nixos-config&type=Date.png]]