diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-08-04 10:43:07 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-08-04 10:43:07 +0000 |
commit | 62614cbef7da005c1eda8c9400160f6bcd6546b8 (patch) | |
tree | c2630f69080637987b68acb1ee8676d2681fe304 /doc/builders/images/snaptools.section.md | |
parent | d9c82ed3044c72cecf01c6ea042489d30914577c (diff) | |
parent | e24069138dfec3ef94f211f1da005bb5395adc11 (diff) | |
download | nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.gz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.bz2 nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.lz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.xz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.zst nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.zip |
Merge branch 'nixpkgs-update' into master
Diffstat (limited to 'doc/builders/images/snaptools.section.md')
-rw-r--r-- | doc/builders/images/snaptools.section.md | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/doc/builders/images/snaptools.section.md b/doc/builders/images/snaptools.section.md new file mode 100644 index 00000000000..5f710d2de7f --- /dev/null +++ b/doc/builders/images/snaptools.section.md @@ -0,0 +1,71 @@ +# pkgs.snapTools {#sec-pkgs-snapTools} + +`pkgs.snapTools` is a set of functions for creating Snapcraft images. Snap and Snapcraft is not used to perform these operations. + +## The makeSnap Function {#ssec-pkgs-snapTools-makeSnap-signature} + +`makeSnap` takes a single named argument, `meta`. This argument mirrors [the upstream `snap.yaml` format](https://docs.snapcraft.io/snap-format) exactly. + +The `base` should not be specified, as `makeSnap` will force set it. + +Currently, `makeSnap` does not support creating GUI stubs. + +## Build a Hello World Snap {#ssec-pkgs-snapTools-build-a-snap-hello} + +The following expression packages GNU Hello as a Snapcraft snap. + +``` {#ex-snapTools-buildSnap-hello .nix} +let + inherit (import <nixpkgs> { }) snapTools hello; +in snapTools.makeSnap { + meta = { + name = "hello"; + summary = hello.meta.description; + description = hello.meta.longDescription; + architectures = [ "amd64" ]; + confinement = "strict"; + apps.hello.command = "${hello}/bin/hello"; + }; +} +``` + +`nix-build` this expression and install it with `snap install ./result --dangerous`. `hello` will now be the Snapcraft version of the package. + +## Build a Graphical Snap {#ssec-pkgs-snapTools-build-a-snap-firefox} + +Graphical programs require many more integrations with the host. This example uses Firefox as an example, because it is one of the most complicated programs we could package. + +``` {#ex-snapTools-buildSnap-firefox .nix} +let + inherit (import <nixpkgs> { }) snapTools firefox; +in snapTools.makeSnap { + meta = { + name = "nix-example-firefox"; + summary = firefox.meta.description; + architectures = [ "amd64" ]; + apps.nix-example-firefox = { + command = "${firefox}/bin/firefox"; + plugs = [ + "pulseaudio" + "camera" + "browser-support" + "avahi-observe" + "cups-control" + "desktop" + "desktop-legacy" + "gsettings" + "home" + "network" + "mount-observe" + "removable-media" + "x11" + ]; + }; + confinement = "strict"; + }; +} +``` + +`nix-build` this expression and install it with `snap install ./result --dangerous`. `nix-example-firefox` will now be the Snapcraft version of the Firefox package. + +The specific meaning behind plugs can be looked up in the [Snapcraft interface documentation](https://docs.snapcraft.io/supported-interfaces). |