nixpkgs / nix home-manager ========================== I currently use Ubuntu and installed nix alongside. This repository contains my personal `~/.config/nixpkgs` folder, for sharing, inspiration and retrieving feedback. This includes `home.nix` to maintain `home-manager`, see: https://nix-community.github.io/home-manager/index.html Disclaimer ---------- This is my personal setup for my local laptop running Ubuntu. I share this for free so everyone can have a look and inspiration or provide feedback to me. This is not intended to be used by anyone else just by copy and pasting or cloning. Installation ------------ Install (clone) into `~/.config/nixpkgs`. Create `~/.config/home-manager` and create a symlink from `~/.config/nixpkgs/home.nix` to `~/.config/home-manager/home.nix`. Install `home-manager` see: https://nix-community.github.io/home-manager/index.html Execute `home-manager switch` Folder structure ---------------- `assets/` contains assets used within nix. E.g. images used for search engines configured for Firefox. `gpg/` contains everything related to gpg, like public keys. `home/` is related to extras for home-manager. `home/files` Holds configuration files. home-manager doesn't provide modules for all programs. `home/modules` Holds nix modules. Not all programs provide modules out of the box. I add my own here, which I might create PRs for in future. `home/packages` Holds custom nix packages. Not all programs are available. Foreign programs are added here. Custom programs / scripts are added within subfolder `custom`. `home/programs` Holds home-manager `programs.` entries. Each file corresponds to a single program. `home/services` Holds home-manager `services.` entries. Each file corresponds to a single service. `home/*.nix` Holds files for most `home.*` modules. I don't like to clutter a single file with to many entries. Instead `home.nix` loads files from within here. Each file name should correspond to the home sub option / module. `overlays/` Holds overlays for existing packages. E.g. in order to patch them. `projects/` Holds shells and compose.yaml files for customer projects. The customers are not aware of Nix and I don't want to stress them. I use this folder to have them in version control and symlink them into the project. `systems/` Holds nix os configuration for different systems. Each system has its own subfolder. Update ------ Update can be done via `custom-update-system` package which is a custom package. Manual changes -------------- List of manual needed changes for various reasons. * Use xdm as display manager, or: Allow gdm3 to use xsessions as login. Add the following content as `/usr/share/xsessions/xsession.desktop`:: [Desktop Entry] Name=XSession Comment=This session uses the custom xsession file Exec=/etc/X11/Xsession Type=Application X-DesktopNames=GNOME-Flashback;GNOME; X-Ubuntu-Gettext-Domain=gnome-flashback This is used by gdm3 (installed via ubuntu host) to allow logging in via xsession which will pick up all the settings generated by home-manager. Do not forget to call `sudo desktop-file-install xsession.desktop` to make system aware of the file. Todos ----- Additions: * Check https://github.com/nix-community/home-manager/blob/bb4b25b302dbf0f527f190461b080b5262871756/modules/files.nix#L64 to symlink files instead of re compiling setup everytime? Also see: https://www.foodogsquared.one/posts/2023-03-24-managing-mutable-files-in-nixos/ * https://github.com/altdesktop/playerctl#selecting-the-most-recent-player in order to not worry about current media player, control whatever was last * https://github.com/darrenburns/dunk diff alternative * Integrate https://github.com/Wilfred/difftastic for diffing source code https://github.com/nix-community/home-manager/pull/2850 * Alternative file managers: * http://www.krusader.org * https://ignorantguru.github.io/spacefm/ * https://www.mucommander.com/ Resources --------- Some resources I found useful (in no particular order): * https://www.youtube.com/playlist?list=PLRGI9KQ3_HP_OFRG6R-p4iFgMSK1t5BHs * https://nixos.org/learn.html * https://nix-community.github.io/home-manager/index.html * https://nixos.wiki/ * https://nixcloud.io/main/en/ * https://teu5us.github.io/nix-lib.html * https://ryantm.github.io/nixpkgs/ * https://www.tweag.io/blog/2020-05-25-flakes/ * https://github.com/NixOS/nix-book