Commit graph

441 commits

Author SHA1 Message Date
Karl Hallsby 4b136696a2 Revert "mbsync: remove unneeded extraConfig.channel"
This reverts commit 941c4771ca.

To support backwards compatibility, I need to leave this field/option
in the module, even if it will likely be more confusing to do it this way.
2020-06-27 16:02:02 +02:00
Karl Hallsby 05cf64b9f9 mbsync: acc comment explaining why groups attr set is never empty 2020-06-27 16:01:28 +02:00
Karl Hallsby 82264461e5 mbsync: only generate group/channel configuration if channels present
Typically, when a group is specified, channels will be specified as
well. However, if due to error or mistake, the user forgets to specify
ANY channels for a group, we should not generate that group's
information.

This means that no channels are specified (which maps the remote
master to local slave). In addition, the `Group <gName>` block (which
brings the separate channels together) is also not generated.

Another thing to consider is that a user might specify a group and a
channel, but perform no additional configuration of the channel.
In a configuration, this would be realized by
`accounts.email.accounts.<aName>.mbsync.groups.<gName>.channels.<cName>;`

This creates the channel with the name `<cName>` and the
`masterPattern`, `slavePattern`, and `patterns` fields use their defaults.
By definitions set within mbsync, these defaults actually specify that
the remote master's `INBOX` mail directory is synchronized to the
local slave's `INBOX` directory.

So, if there is a channel that has no fields specified, then we DO
want to generate its configuration. But if there is a group that has
no channels, then we do NOT generate it.
2020-06-27 15:26:11 +02:00
Karl Hallsby ddd47e1e1c mbsync: switch channel/group generation to new functions
Changing this out is what moves us from the old system to the new one.
Instead of having a single channel manage a whole mailbox, we can now
specify an attribute set of groups that should correspond to an email
account.

Each of these groups contains an attribute set of channels that make
it up, and are grouped together for synchronization. In addition, each
of these channels can have additional IMAP4 parameters attached to
them to further refine synchronization.

Lastly, each of the channels is grouped together under the Group
section, ensuring that the channels' mailboxes synchronize as they
have been specified.
2020-06-27 02:25:06 +02:00
Karl Hallsby 8d899802b7 mbsync: correct and improve comment in masterPattern description 2020-06-27 02:24:57 +02:00
Karl Hallsby 941c4771ca mbsync: remove unneeded extraConfig.channel
This was originally placed here, seemingly, just to get this module
working. However, this field is actually more confusing now that a
separate per-channel configuration option for extra configurations has
been made available.
2020-06-27 02:23:30 +02:00
Karl Hallsby fb3c246fe0 mbsync: add extraConfig option for easier-to-format options
These are options that can be handled by the `genSection` function in
the `genAccountFunction`, so they are left to the user to decide.
Most of these are made on a global basis anyways.
2020-06-27 02:21:24 +02:00
Karl Hallsby c62cb82e65 mbsync: per-account groups can have additional patterns
Gave the
`accounts.email.accounts.<name>.mbsync.groups.<gname>.channel.<cname>`
set a `patterns` option, which will allow for greater customization
and filtering of the master maildir to sync to the slave maildir.
2020-06-27 02:18:50 +02:00
Karl Hallsby 2ce482d187 mbsync: create nested-let function to generate channel pattern
This pattern is required to either NOT be present, which means the
master pattern is used to match, or it has a list of patterns to use
beneath the master maildir to match against.

This function checks to ensure that if patterns is not empty, ONLY
then is the `Pattern` keyword printed. Otherwise, there are many, many
problems.
If there IS a list of patterns, then we use proper escaping methods to
ensure that the exact string is constructed.
2020-06-27 02:17:29 +02:00
Karl Hallsby 97a6961db2 mbsync: provide examples of master/slave patterns for channels 2020-06-26 20:41:25 +02:00
Karl Hallsby c072526cfa mbsync: set the submodule's names field according to parameter
This is the same method as is used in creating an email account, named
`<name>` under `accounts.email.accounts.<name>`. This allows the user
to specify groups and channels, in a list-like format, but still gets
the "namespacing" to more easily handle the options available in each
of these locations.
2020-06-26 20:41:23 +02:00
Karl Hallsby f9d8aa6b25 mbsync: write function to generate channel configuration blocks
This function takes in a set of groups, which includes their
consituent channels and writes the appropriate .mbsyncrc block for the
channel. The block that is generated is shown below:
      Channel groupName1-channelName1
      Master :<accountName>-remote:<master-pattern>
      Slave :<accountName>-local:<slave-pattern>

      Channel groupName2-channelName2
      Master :<accountName>-remote:<master-pattern>
      Slave :<accountName>-local:<slave-pattern>

Each group must have a unique name, no matter which account it is
declared under. The same holds true for channels.

Using channels with the patterns set up this way allows one to specify
which maildir directories are to be synchronized FROM the master TO
the slave. In addition, it allows for these maildirs to be remapped,
between the master server and the local slave.
This is critical, because Gmail has a strange way of storing its mail
that makes using mbsync, mu, and mu4e more difficult.

There are additional channel parameters that are already present in
this codebase from the previous use of group-channel configuration,
which will be reused.
2020-06-26 20:22:45 +02:00
Karl Hallsby e469020cb0 mbsync: write function to generate group-channel blocks
This function takes in a set of groups, and their consituent
channels and writes the appropriate .mbsyncrc block. The block is as
shown below:

      Group groupName1
      Channel channelName1
      Channel channelName2

      Group groupName2
      Channel channelName3

Each group must have a unique name, no matter which account it is
declared under. The same holds true for channels. However, if there is
a group that shares the same name as the channel, the channel will
effectively be "shadowed" by the group, and mbsync will default to
working with the group in that case.
2020-06-26 20:22:38 +02:00
Karl Hallsby 00e4a33cd1 mbsync: create groups configuration attribute
This is the end of the configuration that the end-user will use.

They will specify an attribute set that contains the name for the
group, so they can say
`accounts.email.accounts.<aname>.groups.<gname>` to access the
configuration for the group with the name `<gname>`.
2020-06-26 13:43:41 +02:00
Karl Hallsby 8bee65350b mbsync: option for configuring a group
A group is a grouping of channels together, so that many channels with
very different names can be handled as a single entity.

Groups are unique in mbsync because they will shadow channels that
have the same name on the command-line.
2020-06-26 13:42:51 +02:00
Karl Hallsby d6dcf9f106 mbsync: option for configuring a channel
A channel is a relationship between 2 directories/boxes/mailboxes
between the local machine (slave) and the remote mail server (master).
Each channel must be given at least:
     * an account-unique name
     * a pattern for which mailboxes to sync from master
     * a pattern for what directory where that mail ends up on the
     slave

Additional options can be added later.
2020-06-26 13:36:15 +02:00
cwyc 8f2342e13a
ne: add module
Added a simple module to place configuration files for ne: the nice
editor.

PR #1336
2020-06-23 22:37:02 +02:00
Mario Rodas 8ab1139891
tmux: only enable secureSocket on Linux by default
Darwin does not have the `/run/user` directory.

PR #1349
2020-06-22 19:34:52 +02:00
Robert Helgesson bf7297d55c
Move email account options to their owning modules
This removes the long list of submodules from

    modules/accounts/email.nix

and instead move each entry to its owning module.
2020-06-16 00:45:20 +02:00
Jonathan Reeve ad4f33cfc4
qutebrowser: add package option
Fixes #1315
PR #1334
2020-06-15 21:06:14 +02:00
s1341 1b210e7143
zplug: add module
This adds initial support for the zsh package manager "zplug".

PR #1105
2020-06-14 15:12:49 +02:00
Robert Helgesson bb567e20b3
vte: add module
This abstracts out the VTE setup from the gnome-terminal module into
its own module and options.
2020-06-14 12:20:12 +02:00
Zsolt Szende 507e446475
vscode: fix extensions directory path
Fixes #1302
PR #1327
2020-06-14 00:43:44 +02:00
Damien Cassou 478022afad
powerline-go: add module
PR #1285
2020-06-13 00:02:13 +02:00
Shamrock Lee 561b3d5650
eclipse: add option package
PR #1310
2020-06-12 19:34:39 +02:00
Dany Marcoux c378c1cbcd
autorandr: add crtc option
This option was missing. It is generated by autorandr when executing
`autorandr --save my_profile`.

Fixes #1024
PR #1283
2020-06-09 23:15:44 +02:00
Robert Helgesson abcddfe090
firefox: update extensions option description
This adds a note that the extensions will only apply to profiles
managed through Home Manager.
2020-06-09 22:12:08 +02:00
Damien Cassou b33802ca7f
direnv: add support for nix-direnv
PR #1297
2020-06-06 22:17:43 +02:00
Robert Helgesson 248dc17394
gnome-terminal: replace deprecated package names
The names `gnome3.vte` and `gnome3.gnome_terminal` have been replaced
by their more modern names.
2020-06-06 14:53:42 +02:00
Robert Helgesson 42fd47b246
emacs: replace use of emacsPackagesGen
Instead we use `emacsPackagesFor`, which `emacsPackagesGen` aliases
anyway.
2020-06-06 14:53:40 +02:00
Julien Moutinho 0ee5c9536b
broot: fix install check
broot uses `~/.config/broot/launcher/installed-v1`, not
`~/.config/broot/launcher/installed`.

PR #1303
2020-06-04 21:54:35 +02:00
Damien Cassou ca6fcc92a1
firefox: show how to get pre-packaged add-ons
PR #1296
2020-06-04 21:29:51 +02:00
Damien Cassou a21c97d011
ssh: add support for ServerAliveCountMax
PR #1299
2020-06-03 23:16:43 +02:00
Nicolas Berbiche b567d27394
mpv: use wrapMpv instead of mpv-with-scripts
The latter has been removed from Nixpkgs.

See:

- <https://github.com/NixOS/nixpkgs/pull/88620>
- <https://github.com/NixOS/nixpkgs/pull/89208>

PR #1295
2020-05-31 14:11:10 +02:00
Justin Lovinger 3a80ece9fa
dircolors: fix usage together with zsh.oh-my-zsh
PR #1280
2020-05-28 00:08:15 +02:00
Mario Rodas a957e2dc6b
zoxide: add module
PR #1274
2020-05-26 19:14:39 +02:00
Nikita Uvarov 99a97c917a
autorandr: remove blank lines from config
Fixes #1249.
2020-05-26 19:04:26 +02:00
Robert Helgesson ac6235e53d
emacs: apply nixfmt 2020-05-25 00:45:51 +02:00
Sophie Taylor a43e7112e5
starship: improve Emacs handling for fish
PR #1248
2020-05-19 00:12:11 +02:00
Robert Helgesson 69f8e47e9e
starship: allow running in Emacs if vterm is used
The vterm buffer is backed by libvterm and can handle Starship prompts
without issues.
2020-05-15 22:58:57 +02:00
Andrew McDermott 40b1c5c448
gnome-terminal: allow for 'system' theme variant
PR #1228
2020-05-13 00:30:09 +02:00
Justin Lovinger e9945ee6ee
dircolors: add module
PR #1219
2020-05-12 22:15:32 +02:00
Bruno Bigras cca024da2b
starship: check if $TERM == "dumb" for Bash setup
This fixes an issue with Emacs tramp.

PR #1191
2020-05-12 20:40:34 +02:00
Samuel Grahn 1ec45b11ab
rofi: add package option
Add option to specify which package provides the rofi binary.

PR #1225
2020-05-11 23:07:26 +02:00
Mario Rodas cba7b6ee6e
git: add basic support for delta
PR #1198
2020-05-05 00:12:58 +02:00
ivann 03b4f81679
qutebrowser: add some options
Specificially, this adds options

- `aliases`,
- `searchEngines`,
- `keyMappings`, and
- `keyBindings`.

PR #1212
2020-05-03 13:53:06 +02:00
Justin Lovinger 1dd226fde7
aria2: add module
PR #1202
2020-05-03 13:21:52 +02:00
Justin Lovinger ecc1f2310c
i3status: add module
PR #1210
2020-05-03 13:12:13 +02:00
Robert Helgesson 866d7d5152
lib: add maintainers attribute set
This attribute set is for users who are Home Manager maintainers but
not Nixpkgs maintainers.
2020-05-02 16:30:55 +02:00
Robert Helgesson 70f7c9f355
alot: apply nixfmt 2020-05-01 22:33:05 +02:00