summaryrefslogtreecommitdiff
path: root/README.md
blob: 461d131cf197bebac14b369a522c742930be2248 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
`xdgctl` is a TUI for managing XDG default applications. View and set defaults for file categories without using `xdg-mime` directly.

Built with C using [GLib/GIO](https://docs.gtk.org/gio/) and [termbox2](https://github.com/termbox/termbox2).

https://github.com/user-attachments/assets/076c9934-f373-486d-9595-eec480e3a429

## Features

- Browse by category (Browsers, Text Editors, etc.)
- Current default marked with `*`
- Minimal dependencies

## Navigation & Controls

| Key                 | Action                                                        |
|---------------------|---------------------------------------------------------------|
| **Arrow Up/Down**   | Navigate through categories or applications                   |
| **Arrow Right/Tab** | Switch from category list to application list                 |
| **Arrow Left**      | Switch back to category list                                  |
| **Enter**           | Set selected application as default for current category      |
| **Esc / q**         | Quit the application                                          |

## Prerequisites

To build `xdgctl`, you need the following development libraries:

- `glib-2.0`
- `gio-2.0`
- `gio-unix-2.0`
- `clang` or `gcc`

```bash
# On Void Linux
sudo xbps-install glibc-devel
```

## Installation

```bash
git clone https://github.com/mitjafelician/xdgctl.git
cd xdgctl

# Build
make
sudo make install

# Using prefix
sudo make PREFIX=/usr/local install
make PREFIX=~/.local install
```

If you manually add new applications to your `~/.local/share/applications` directory, you might need to run `update-desktop-database` again.

## More about XDG

### Application directories

```bash
ls /usr/share/applications
ls ~/.local/share/applications
```

### Querying defaults

```bash
xdg-mime query default text/plain
xdg-mime query default text/html
xdg-mime query default x-scheme-handler/http
xdg-mime query default x-scheme-handler/https
xdg-mime query default inode/directory
```

### Setting defaults manually

```bash
xdg-mime default brave.desktop x-scheme-handler/http
xdg-mime default brave.desktop x-scheme-handler/https
```

### Desktop Entry example

```ini
# ~/.local/share/applications/brave.desktop
[Desktop Entry]
Exec=/home/m/Applications/brave
Type=Application
Categories=Applications
Name=Brave Browser
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
```

### Other useful commands/files
```bash
update-desktop-database ~/.local/share/applications
less ~/.config/mimeapps.list
less /usr/share/applications/mimeapps.list
```

## More material

- https://commandmasters.com/commands/xdg-mime-linux/
- https://noman.sh/en/pages/xdg-mime
- https://linux.die.net/man/1/xdg-mime
- https://wiki.archlinux.org/title/XDG_MIME_Applications
- https://gnome.pages.gitlab.gnome.org/libsoup/gio/
- https://docs.gtk.org/gio/