summaryrefslogtreecommitdiffstats
path: root/docs/_posts/2023-08-04-config-dump.md
blob: cfa947192a3e7299421357bce9a28800833c1140 (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
---
layout: post
title: Tooling for troubleshooting configuration
excerpt: Getting the final configuration and the sources of values
---

*(This change is in **v0.12.0+**)*

Inspired by [this blog post about reporting configuration file locations](https://utcc.utoronto.ca/~cks/space/blog/sysadmin/ReportConfigFileLocations)
and the [ensuing HackerNews commentary](https://news.ycombinator.com/item?id=36465886).
I've added the `config get` and `config blame` management commands for getting the
final configuration and the source of each property in the configuration, respectively.
I had previously added the file locations used by **lnav** in the `lnav -h` output as
recommended by the blog post.  But, the HN comments made a good case for adding the
the other troubleshooting tooling as well.

If you would like to try out these new commands, you need to run lnav with the `-m`
option to switch to the "management" mode.  For example, just running lnav with this
flag will print out the available operations:

```console
$ lnav -m
✘ error: expecting an operation to perform
 = help: the available operations are:
          • config: perform operations on the lnav configuration
          • format: perform operations on log file formats
          • piper: perform operations on piper storage
          • regex101: create and edit log message regular expressions using regex101.com
```

Executing `config get` will print out the final configuration that lnav is operating
with as JSON:

```console
$ lnav -m config get
```

If you would like to know the source of the value for each property, you can use
the `config blame` command, like so:

```console
$ lnav -m config blame | tail
/ui/theme-defs/solarized-light/vars/black -> solarized-light.json:15
/ui/theme-defs/solarized-light/vars/blue -> solarized-light.json:21
/ui/theme-defs/solarized-light/vars/cyan -> solarized-light.json:22
/ui/theme-defs/solarized-light/vars/green -> solarized-light.json:23
/ui/theme-defs/solarized-light/vars/magenta -> solarized-light.json:19
/ui/theme-defs/solarized-light/vars/orange -> solarized-light.json:17
/ui/theme-defs/solarized-light/vars/red -> solarized-light.json:18
/ui/theme-defs/solarized-light/vars/semantic_highlight_color -> solarized-light.json:24
/ui/theme-defs/solarized-light/vars/violet -> solarized-light.json:20
/ui/theme-defs/solarized-light/vars/yellow -> solarized-light.json:16
```

In the above output, "solarized-light.json" file is built into the lnav
executable and is not from the file system.