Jump to content

Installing Nix on Crostini: Difference between revisions

General improvements
imported>Matthewbauer
No edit summary
imported>Thiagokokada
(General improvements)
 
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:


Once you have Nix installed, there are a few things that need to be done.
Once you have Nix installed, there are a few things that need to be done.


== Home-Manager ==
== Home-Manager ==
Line 16: Line 15:
First we extend the service with new environment variables
First we extend the service with new environment variables


<code>
<syntaxhighlight lang="console">
mkdir -p ~/.config/systemd/user/cros-garcon.service.d/
$ mkdir -p ~/.config/systemd/user/cros-garcon.service.d/
</code>
</syntaxhighlight>


followed by.
followed by.


<pre>
<syntaxhighlight lang="console">
cat > ~/.config/systemd/user/cros-garcon.service.d/override.conf <<EOF
$ cat > ~/.config/systemd/user/cros-garcon.service.d/override.conf <<EOF
[Service]
[Service]
Environment="PATH=%h/.nix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/local/games:/usr/sbin:/usr/bin:/usr/games:/sbin:/bin"
Environment="PATH=%h/.nix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/local/games:/usr/sbin:/usr/bin:/usr/games:/sbin:/bin"
Environment="XDG_DATA_DIRS=%h/.nix-profile/share:%h/.local/share:/usr/local/share:/usr/share"
Environment="XDG_DATA_DIRS=%h/.nix-profile/share:%h/.local/share:%h/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share"
EOF
</syntaxhighlight>
</pre>
 
You can also set this inside your Home-Manager configuration:
 
<syntaxhighlight lang="nix">
{ ... }:
{
    xdg.configFile."systemd/user/cros-garcon.service.d/override.conf".text = ''
      [Service]
      Environment="PATH=%h/.nix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/local/games:/usr/sbin:/usr/bin:/usr/games:/sbin:/bin"
      Environment="XDG_DATA_DIRS=%h/.nix-profile/share:%h/.local/share:%h/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share"
    '';
}
</syntaxhighlight>


Then we need to restart our container. I found restarting the whole laptop to be the easiest and most effective method.
Then we need to restart our container. I found restarting the whole laptop to be the easiest and most effective method.
Line 34: Line 45:
After this, we can simply start adding GUI packages to our home-manager configuration. Alternatively, if we are not using home-manager, then we can directly install packages:
After this, we can simply start adding GUI packages to our home-manager configuration. Alternatively, if we are not using home-manager, then we can directly install packages:


<code>
<syntaxhighlight lang="console">
nix-env -i slack
$ nix-env -i slack
</code>
</syntaxhighlight>


Note: These instructions were adapted from the following post [https://www.reddit.com/r/Crostini/comments/9lazhn/environment_variables_for_launcher_applications/e769u4y/ on Reddit]
Note: These instructions were adapted from the following post [https://www.reddit.com/r/Crostini/comments/9lazhn/environment_variables_for_launcher_applications/e769u4y/ on Reddit]
== Graphical applications ==
Thanks to the usage of VirtGL as the GPU driver, you can easily run applications that depend on OpenGL/Vulkan by using [https://github.com/nix-community/nixGL NixGL]:
<syntaxhighlight lang="console">
$ nix run --impure github:guibou/nixGL -- program
</syntaxhighlight>
If you are setting up it in your Flakes/Home-Manager configuration, you can use:
<syntaxhighlight lang="nix">
{
  outputs = { nixgl, nixpkgs, home-manager, ... }:
  let
    pkgs = import nixpkgs {
      system = "x86_64-linux"; # or "aarch64-linux"
      overlays = [ nixgl.overlay ];
    };
  in
  {
    homeConfigurations.penguin = home-manager.lib.homeManagerConfiguration {
      inherit pkgs;
      modules = [
        ({ pkgs, ...}: {
          home.packages = with pkgs; [ nixgl.nixGLMesa ];
        })
      ];
    };
  }
}
</syntaxhighlight>
Using <code>nixgl.nixGLMesa</code> instead of <code>nixgl.auto.nixGLDefault</code> allow usage of pure evaluation.
Afterwards, you can call programs with:
<syntaxhighlight lang="console">
$ nixGLMesa program
</syntaxhighlight>
Anonymous user