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`.

Install `home-manager` see: https://nix-community.github.io/home-manager/index.html
Execute `home-manager switch`

Usage
-----

Add packages to `home/packages.nix` and run `home-manager switch`.

Folder structure
----------------

The folder `overlays` contains overlays for nix itself.
E.g. alter packages like patching.

The folder `home` is related to extras for home-manager.
It has the following sub folder:

`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.

`shells/`
    Holds shells 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.

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
-----

MacBook:

* Provide script to update system

Migration:

* Check vpnc which is currently installed via ubuntu.

* Install i3lock (Right now installed via ubuntu)

* Migrate home manager to use flake for better rollback support if update breaks something.

* Maybe create upstream PRs for

  * `home/modules/programs/*.nix`

Additions:

* 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
