> For the complete documentation index, see [llms.txt](https://bharatkalluri.gitbook.io/gnome-developer-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bharatkalluri.gitbook.io/gnome-developer-handbook/writing-apps-using-python/the-setup.md).

# The Setup

### Some Prerequisites

* Install `git`
* Sign up on a git hosting provider ([Github](https://github.com/)/[GitLab](https://gitlab.com/)/[GNOME's GitLab instance](https://gitlab.gnome.org/))

### Installing [GNOME Builder](https://wiki.gnome.org/Apps/Builder)

#### Install Builder using your distributions package manager

* Most of the distributions have Builder in their default repositories. You can directly install builder using your trusty package manager.

#### (or) Install Builder using Flatpak

* Install [Flatpak](https://www.flatpak.org/) (Flatpak is a package/application manager) , instructions to install flatpak on your distribution can be found [here](https://flatpak.org/setup/)
* Setup [flathub](https://flathub.org/) by issuing this command in the terminal

```
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```

* A restart is recommended at this point. Later issue this command in the terminal to install GNOME Builder. GNOME Builder is a [Integrated development environment (IDE)](https://en.wikipedia.org/wiki/Integrated_development_environment) made using GNOME technologies.

```
flatpak install flathub org.gnome.Builder
```

That is about all you need to get started!

### What will we be building?

We will be building a desktop application which will fetch random pictures from [UnSplash](https://unsplash.com/) and set them as desktop wallpaper.&#x20;

The UI will be fairly simple, there will be one button on the header bar called shuffle. On press, it will fetch a new wallpaper, show the wallpaper on the window and automatically set the wallpaper. Our application will also have an about dialog and a shortcuts dialog.

### Creating a new project in Builder

Open Builder

![Builder start screen](/files/-MCsPnM7_Va2lflku2Hb)

Click on `Start New Project` , Let us call our project name **Splash**!&#x20;

An App ID is a unique identifier for an application on the desktop. The idea is to make sure multiple applications in the same system do not conflict. This can be achieved by using something called the Reverse Domain Naming Notion (or RDNN in short). So let us name the App ID to be com.yourusername.splash (replace your user name here, and make sure you do that step from here on)

Select the language as Python and the we will leave the default license selection for now.

![Starting a new project ](/files/-MCsR3vaMZBm9jqBGjoc)

Looks good. Click on `Create Project` to create the project in your `Projects` folder!

Open the project, you will be welcomed with a screen like this

![GNOME Builder welcome screen](/files/-MCugnuXlaudqSieZH30)

Click on the first top left editor icon and click on `Build Preferences`&#x20;

![Select Build configuration screen](/files/-MCuhTidXOMcep4nOcid)

Select the `Default` build configuration and click on `Make Active`. Now click on the Play (▶️) button to start running the application. There should be a new window which pops up saying Hello World!

![Hello World!](/files/-MCuiFhR4cyTUDSVYcDn)

Congratulations! Next up let us understand what are the files which were auto generated and how an application is actually built.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://bharatkalluri.gitbook.io/gnome-developer-handbook/writing-apps-using-python/the-setup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
