Commit graph

497 commits

Author SHA1 Message Date
zimbatm
118b36bf45
direnv: fix the fish source
This is needed for the latest version of direnv. See
https://github.com/direnv/direnv/issues/742
2020-12-31 00:49:55 +01:00
Nicolas Berbiche
f4b5ae026c
waybar: fix css identifier check (#1687)
Fixes #1686
2020-12-30 18:17:39 -05:00
Matthieu Coudron
8e0c1c55fb
programs.neovim: write config in $XDG_CONFIG_HOME/init.vim (#1652)
* neovim: write config in $XDG_CONFIG_HOME/init.vim

instead of wrapping the configuration, which has sideeffects
https://github.com/NixOS/nixpkgs/issues/55376

* fix: update test accordingly
2020-12-29 20:26:02 +01:00
Nicolas Berbiche
99f0074362
waybar: allow CSS class when using a default module
Fixes #1682
2020-12-28 20:43:40 -05:00
Sebastián Estrella
cd86c2638b
gnome-terminal: Add audibleBell option (#1671)
Turn on/off the terminal's bell
2020-12-27 16:09:59 +01:00
Sebastien Waegeneire
3627ec4de5
chromium: add support for external extensions
This allows the installation of external (outside of the Chrome Web
Store) extensions, both local and remote.

PR #1648
2020-12-23 00:59:03 +01:00
Mario Rodas
2901044520
mcfly: add option to enable fuzzy search
McFly 0.5.1 added support for fuzzy searching.
2020-12-22 00:30:47 +01:00
Austin Butler
76de0632ac
starship: update prompt_order to format in example 2020-12-21 23:56:46 +01:00
toonn
a1162e04b3
tmux: add a prefix option overruling shortcut if defined
Previously, it was not possible to set an arbitrary tmux prefix since
CTRL was hardcoded in the module.

To avoid breaking existing configs, a new option was implemented that
conveniently uses the tmux terminology but defaults to null and does
not affect previous behavior when set to null.

The behavior for the shortcut option was not completely replicated,
i.e., it does not bind "b" to send-prefix but stick to the default of
the prefix binding sending prefix (C-b C-b instead of C-b b) and it
does not bind repetition of the prefix (C-b C-b) to `last-window`,
both of these bring the option closer to the default tmux
configuration.

Fixes #1237
2020-12-21 00:10:59 +01:00
seylerius
1a7f190cb9
rofi-pass: add rofi-pass plugin for password-store 2020-12-18 23:22:57 +01:00
c4710n
66a68b4a58
chromium: add support for brave
Brave Browser is a chromium-based browser, too.

+ it use the same web store with Chromium and Google Chrome.
+ the machanism of installing extensions works, and it's verified on
my macOS box.
2020-12-15 18:39:16 +01:00
Jos van Bakel
4f0b0d78af
msmtp: fix passwordeval (#1649) 2020-12-10 22:32:34 +01:00
Matthieu Coudron
9d775bad07
neovim: mark plugins as optional (possibly) (#1559)
can be loaded with packadd!
2020-12-10 22:30:16 +01:00
Jos van Bakel
e3828769e8
msmtp: fix passwordeval (#1643)
msmtp fails with broken pipe error when sending emails.
The new line after the password is not required anymore since msmtp 1.8.0.
2020-12-09 09:22:00 +01:00
Nicolas Berbiche
005ea6cc18
zathura: allow configuring the package used (#1636)
Closes #1633
2020-12-04 18:38:22 +01:00
Blaž Hrastnik
0654364426
waybar: fix systemd service
The current definition makes waybar wait for dbus.service, but that
never happens because dbus.service is started on demand by
dbus.socket.

Per systemd docs:
  https://www.freedesktop.org/software/systemd/man/systemd.service.html#Implicit%20Dependencies

- Services with Type=dbus set automatically acquire dependencies of
  type Requires= and After= on dbus.socket.

- Socket activated services are automatically ordered after their
  activating .socket units via an automatic After= dependency.
  Services also pull in all .socket units listed in Sockets= via
  automatic Wants= and After= dependencies.

Removing Requisite/After makes the service properly start for me,
simply specifying Type=dbus is enough.

See #1370
2020-12-01 23:07:39 +01:00
Nicolas Berbiche
44f9d68d8c
treewide: replace attrs by formats or types.anything 2020-11-29 21:54:55 -05:00
Tyler Benster
c6263347de
zsh: add initExtraFirst option 2020-11-29 19:39:47 +01:00
Nicolas Berbiche
964f698095
waybar: fix null modules-{left,center,right} error
- Change the `attrsOf unspecified` to `pkgs.formats.json`
- Add missing default modules
- Expand the `with lib` with every function used
- Add inline documentation about the generated warnings
2020-11-16 22:56:54 +01:00
Ashish SHUKLA
9e01441c5c
zsh: Add dirHashes option 2020-11-15 23:49:55 +01:00
Martin Toman
b04aa56503
powerline-go: add zsh integration 2020-11-15 00:12:02 +01:00
malte-v
234de0270a
broot: improve configuration
The `invocation` is an optional attribute, so it doesn't make sense to
use it as the key in an attribute set. See

  https://dystroy.org/broot/documentation/configuration/#verb-definition-attributes

Actually, `invocation` should not be defined when one wants to rebind
a built-in verb to a different key.

Also added documentation for the `key` attribute.
2020-11-14 23:04:46 +01:00
Joe Hermaszewski
9c14bbe988
tmux: allow setting default-shell before new-session 2020-11-14 10:59:10 +01:00
workflow
9e9d8ffc7c
i3status-rust: add module
This adds the i3status-rust[0] module, a replacement for i3status
written in pure Rust.

[0] https://github.com/greshake/i3status-rust
2020-11-05 23:59:47 +01:00
AstroSnail
1066e01707
mpv: use lib.generators to render config
There exist mpv configurations which cannot be expressed in
`programs.mpv.config` currently. For example, it is impossible to use
multiple 'profile' attributes. This commit changes the way config and
profiles are parsed, using `lib.generators.toKeyValue` and
`lib.generators.toINI`, to allow for these kinds of configurations
through the use of `listsAsDuplicateKeys`.
2020-11-03 00:28:24 +01:00
Tobias Happ
22a3a5651d
gh: add module 2020-10-22 23:36:15 +02:00
Nicolas Berbiche
0778a80ee0
waybar: use Nixpkgs maintainers entry
I recently had my first package added to Nixpkgs and am now in the
official list of maintainers so this information is no longer required
here.
2020-10-22 22:57:58 +02:00
zimbatm
014d8deb60
tree-wide: update url to the repo 2020-10-22 22:41:56 +02:00
Robert Helgesson
dc5239b5ce
firefox: minor option description fix 2020-10-20 00:28:52 +02:00
dawidsowa
c5e47e25a6
firefox: add enableGnomeExtensions option (#1552) 2020-10-19 15:37:49 +02:00
Robert Helgesson
e7d5531cfa
vscode: apply nixfmt 2020-10-12 22:51:12 +02:00
Robert Helgesson
aecd4acfb4
neovim: apply nixfmt 2020-10-12 22:50:49 +02:00
Nick Hu
18a05a9604
zsh: add support for prezto configuration framework (#655) 2020-10-12 01:27:44 +01:00
happysalada
fc5619764e
skim: add fish integration
Add fish integration to `programs.skim`.

PR #1549
2020-10-11 22:59:23 +02:00
Robbert Gurdeep Singh
b584745506
neovim: add extraPackages (#1522)
Add an option to add packages to the PATH of nvim.
This may be usefull to make extra programes availible
for plugins and/or for usage in :! myprogram
2020-10-10 16:15:42 +02:00
Charlotte Van Petegem
473d9acdad
neomutt: fix duplicated extraConfig in account (#1546)
The `accounts.email.accounts.<name>.neomutt.extraConfig` option is
included twice in the resulting config file for the account. One time as
part of the `mraSection`, one time as part of `accountStr` (`accountStr`
includes the `mraSection`). This removes that duplication. I opted to
keep the one in `accounStr`, since `extraConfig` doesn't necessarily
have anything to do with the `mraSection`.
2020-10-09 20:55:35 +02:00
Evan Stoll
8537920706
autojump: add module
This also deprecates the `programs.bash.enableAutojump` option in
favor of this module.
2020-10-08 23:50:43 +02:00
Olmo Kramer
9ff2188c5d
mpv: make wrapped package available via package 2020-10-01 22:28:33 +02:00
Olmo Kramer
41147ae09a
feh: allow binding actions to multiple buttons/keys
In feh you can bind multiple keys to the same action, but Home Manager
only let you set a single key to an action. You can cheat and pass a
string with space-separated keys, but with this change you can pass a
list for each action to bind multiple keys to it.

Also adds a couple of tests.

Fixes #1366
2020-09-30 00:55:09 +02:00
Olli Helenius
6fed10a09a
gnome-terminal: add backspace- and delete-binding options
These settings control the string sent by gnome-terminal when the
respective keys are pressed. The options are the ones described in
libvte documentation:

https://developer.gnome.org/vte/0.48/VteTerminal.html#VteEraseBinding
2020-09-29 23:48:41 +02:00
Karl Hallsby
f0fc2a8702
mu: add module 2020-09-29 23:26:45 +02:00
Joe Hermaszewski
abfb4cde51
vim: Allow setting init.vim config alongside plugins + neovim test (#876)
* neovim: allow setting init.vim config alongside plugins
* neovim: add test for neovim plugins
* neovim: make pluginWithConfigType a have type submodule
2020-09-25 02:08:39 +02:00
Robert Helgesson
43ab2f40b9
notmuch: inline notmuch-accounts.nix
Having it in a separate file is a bit unnecessary.
2020-09-24 20:02:49 +02:00
Vojtěch Káně
84bcce3c25
pet: add module
Adds a pet module without sync support as it makes no sense when
configuration is managed with Home Manager and the config would be
unwritable for pet anyway.

PR #1045
2020-09-22 23:20:17 +02:00
Karl H
96d7de6db1
mbsync: per account multiple channels (#1360)
* 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.

* 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.

* 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>`.

* 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.

* 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.

* 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.

* mbsync: provide examples of master/slave patterns for channels

* 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.

* 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.

* 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.

* 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.

* mbsync: correct and improve comment in masterPattern description

* 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.

* 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.

* mbsync: acc comment explaining why groups attr set is never empty

* 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.

* mbsync: channel compatibility with previous iteration of mbsync

The previous version of mbsync used a single channel for an entire
account. This leads to issues when trying to change the mailbox
hierarchy on the local machine. The problem with this is that some
email providers (Gmail, among others) use a slightly different maildir
hierarchy, where the standard mailboxes (Inbox, Drafts, Trash, etc.)
are stored inside another directory (`[Gmail]/` in the case of Gmail).

This new version allows the user to specify any number of groups with
any number of channels within to reorder their mail however they wish.

However, to maintain backwards compatibility, I moved the original
channel-generating code to a function that will run ONLY when
there are no groups specified for THIS account.

* Revert "mbsync: channel compatibility with previous iteration of mbsync"

This reverts commit b1a241ff9f.

This function is in the wrong location and this was wrongly committed.

* mbsync: function for backwards compatibility with previous mbsync

NOTE THAT THIS IS THE CORRECT COMMIT FOR THIS CHUNK OF CODE!!

The previous version of mbsync used a single channel for an entire
account. This leads to issues when trying to change the mailbox
hierarchy on the local machine. The problem with this is that some
email providers (Gmail, among others) use a slightly different maildir
hierarchy, where the standard mailboxes (Inbox, Drafts, Trash, etc.)
are stored inside another directory (`[Gmail]/` in the case of Gmail).

This new version allows the user to specify any number of groups with
any number of channels within to reorder their mail however they wish.

However, to maintain backwards compatibility, I moved the original
channel-generating code to a function that will run ONLY when
there are no groups specified for THIS account.

* mbsync: function to choose which style of group/channels to generate

This is a simple if-check. If the old style is used, then this
account's mbsync.groups attribute set is empty. If that is the case,
then the old-style single-channel per account is used.

If that is NOT the case, then the new style is used in preference of
the old. This means that ALL channel code that would be generated by
the old version is replaced by the new one.

* mbsync: switch per-account config generation to check channels

* mbsync: program-wide groups if no account-specific groups

At the end, we have to choose whether or not to generate the old style
of having program-wide groups to specify things, where the boxes on
the channel underneath the group specifies which mailboxes to sync.

Here, we only generate the old style of group IF there is ANY account
that does NOT have the new `accounts.mbsync.groups` defined. At that
point, it is up to the user to ensure that the accounts in
`programs.mbsync.groups.{}` align with the name chosen for the
account, as I have made no attempt to change this old code.

However, if ALL accounts have their `mbsync.groups` defined, even if
each of the groups has a single empty channel, it will generate the
groups in the new style.

* mbsync: ensure \n after hm-generated comment

This was a multi-part fix. First, the `# Generated by Home Manager.`
comment has been reworked to ensure that it will ALWAYS have a
newline, even if the program-wide extraConfiguration is empty.

Next, we switched to placing 2 newlines between every account, to
provide further visual distinction between each account, which can
have multiple channels and multiple groups defined at the same time.

Lastly, the groupsConfig was slightly reworked, so that both the old
and new version can be used, but the new one will take precedence.
Because of this, groupsConfig is now a list of strings, which will
have single newlines inserted between each element.

But if the old style is NOT used, then the groupsConfig list
contains one element, an empty string. A single element has nothing
added as a separator, and an empty string produces no output.

* mbsync: only generate new group/channels if channels present

Here, the problem was if the user created a group for an account, but
did not also include a set of channels. If no channels have been
specified, then the group should NOT have its group-channel mapping generated.

I also corrected and improved the comment regarding
`genGroupChannelString`'s function and intended behavior.

* mbsync: channel patterns generate their own newlines

This means that when a channel has extra `patterns` defined for it, it
will generate those, and a single newline will be appended to the end
of that newly constructed string.

The moving of the newline character is slightly important because
otherwise, every account would receive an extra newline after every
channel, leading to 2 newlines after every channel.

* mbsync: place newline between each channel in a group

* mbsync: ensure old group/channel has proper spacing

This ensures that if the old style of generating program-wide groups
that there is the proper spacing before the group and in between each
line within the group.

* mbsync: ensure no empty channels present

If the user specifies a group correctly, they must still specify an
attribute set of channels. However, if they do not, then we need to
ensure that a group with no channels does NOT have any channel
configurations generated for it.

If there is a channel string generated for a channel that is empty,
then the `mapAttrsToList` returns a singleton list that contains just
the empty string. Thus, we can filter out all those results, to ensure
that no empty channels are generated.

It is important to keep in mind the difference between an empty
channel and a channel that has received no configuration, but is
named.
	* A named channel is technically configured to have a name.
	  While the `masterPattern`, `slavePattern`, and `patterns`
	  field have NOT been populated, mbsync assumes that if
	  master/slave-Pattern are empty that means match against
	  `INBOX`.
	  If `patterns` is empty, no patterns are printed.
	* An empty channel set is a set that has no channels within
	  it, but `mbsync.groups.<gName>.channels` is defined.

* mbsync: filter empty groups and correct newlines

First thing, someone can specify that a group is empty. If this is
done, technically a group with channels would be generated at the end.
However, because they were empty and did not exist, whitespacing would
be generated, leading to a usable, but mangled config file.
The `filter` solves this problem by removing empty strings (which are
generated by groups that are empty) from the output strings to place
in the file.

Lastly, because the whitespacing was fixed elsewhere in the file, the
crazy double-newline at the end was changed to a single newline.
However, the double newline within the `concatStringsSep` is still
required, because the list that is being concatenated together is a
list of channel configurations. Each element corresponds to one of the
groups specified, whose contents are the channels specified within.

The double newline is needed because each string element is lacking a
trailing newline, because `concatStringsSep` does not add the
separator to the end of the last element in the list. So, the last
channel to be configured will not have that newline appended when the
channel-configuration list is created, thus, 2 are inserted here.

* mbsync: update test input to use per-account channels

* mbsync: comment how old/new style collision handled

This is left in the test input for now, because I think it is useful
to see why certain things are happening the way they are.

* mbsync: update test output pattern

The test output should now have the correct configuration according to
the way I have specified it in the input file.

* mbsync: use format script on new code

* mbsync: add KarlJoad as maintainer

Co-authored-by: Nick Hu <me@nickhu.co.uk>
2020-09-21 18:16:06 +01:00
Robert Helgesson
b3498cccb3
info: generate dir file directly in profile
This avoids the need for the activation block. The `dir` file is
instead built directly in the installed profile.
2020-09-18 14:05:42 +02:00
Damien Cassou
472ca211ca
man: support building manual page index cache
The apropos software is useful to get a list of manpages matching a
description or to get a list of all manpages. The latter feature is
used by Emacs to get manpage completion (`M-x man`).

To have apropos working, a database of all available manpages must be
built with mandb. This is what this commits does.

A similar change was done for NixOS:
edc6a76cc0
2020-09-13 20:52:08 +02:00
Damien Cassou
812b64d4d3
man: prepare for new programs.man options 2020-09-11 20:16:33 +02:00
Bruno Bigras
1f04af74f2
mcfly: fix when non-interactive with fish 2020-09-11 11:41:08 +02:00
Paho Lurie-Gregg
1a6d6b8ace
zplug: Reduce noise (#1441)
Running `zplug install` will always product output, even if there is
nothing to do.

Gating it behind a `zplug check` eliminates that output when there is
nothing to do, and is recommended in the zplug README.
2020-09-06 11:16:34 +02:00