Commit graph

224 commits

Author SHA1 Message Date
Robert Helgesson
c678162e20
ci: error out if code contains literalExample 2021-11-07 09:20:12 +01:00
superherointj
406eeec0b9
hexchat: add module
Review and contributions from Thiago Kenji Okada
<thiagokokada@gmail.com>.

Co-authored-by: Thiago Kenji Okada <thiagokokada@gmail.com>
Co-authored-by: Nicolas Berbiche <nic.berbiche@gmail.com>
Co-authored-by: Sumner Evans <me@sumnerevans.com>
2021-10-23 21:31:54 +02:00
Robert Helgesson
b5d738b5a3
ci: update install-nix-action to v14.1 2021-10-18 09:45:24 +02:00
Robert Helgesson
d244ca125f
Dependabot should act on release-21.05, not 20.09 2021-10-18 08:47:54 +02:00
Thiago Kenji Okada
309808afbc github: disable strategy.fail-fast
From https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast

macOS pipeline is broken for quite some time, and when it fails before the
Ubuntu pipeline it fails it too (even if the tests are passing).

Setting `strategy.fail-fast` to false should avoid this issue.
2021-10-14 13:47:15 -03:00
Thiago Kenji Okada
223a4a17a4
nixpkgs-disabled: add module
This commit introduces the `nixpkgs-disabled` module, that is
basically a mock of `nixpkgs` module where any value different from
`null` will cause an assertion error.

This is to help debugging cases where `home-manager.useGlobalPkgs` is
set to `true` and `nixpkgs.*` options are being used.

Nowadays this returns the following error:

```
error: The option `home-manager.users.<user>.nixpkgs` does not exist.
```

This will change too:

```
error: `nixpkgs` options are disabled when `home-manager.useGlobalPkgs` is enabled.
```

That will direct the user to the correct solution (either removing
`nixpkgs` or disable `home-manager.useGlobalPkgs`).
2021-10-13 23:46:38 +02:00
Nicolas Berbiche
82c92a18ba
gh: use structural settings (#2339) 2021-10-08 23:29:25 +02:00
Thiago Kenji Okada
592da767bd
nnn: init (#2368)
nnn is a terminal file manager.

It is configured mostly using environment variables, so the way I
found it to avoid needing to write either shell specific code or
using `home.sessionVariables` (that would need to make the user
relogin at every configuration change) is to wrap the program using
`wrapProgram`.
2021-10-05 19:14:52 -04:00
Robert Helgesson
af2007bb77
atuin: add module
This commit adds a module for configuring atuin, a replacement shell
history program.

The module adds options for generating atuin's `config.toml` from Nix,
and options to enable atuin's integration for bash and zsh
(which will rebind history keys to open the atuin history).
2021-10-05 23:48:52 +02:00
Josh Robson Chase
e4df31dcea
screen-locker: Make xautolock optional, reorganize options (#2343)
* screen-locker: Make xautolock optional, reorganize options

xautolock isn't really needed to trigger xss-lock on the basis of time
since the built-in screensaver functionality of X serves as one of the
event sources for xss-lock. Keeping it around and defaulting to
"enabled" to avoid unexpected breakage.

Also shuffled around the options to submodules for xss-lock and
xautolock to get rid of prefixes in option names and to make
enableDetectSleep a bit clearer.

* screen-locker: update maintainership

* tests/screen-locker: Stub i3lock and xss-lock

* screen-locker: add package options for xss-lock and xautolock
2021-10-05 12:58:25 -04:00
Thiago Kenji Okada
66d9dbfa36
Makefile: init (#2351)
The idea of this file is to make it easier to run tests. It will ensure
that the tests are running with the correct NIX_PATH (pointing it to
e.g.: unstable), and also allowing it to run either one or all tests.
2021-09-30 21:49:45 -06:00
polykernel
4b964d2f7b
bottom: add module
Bottom is a cross-platform graphical process/system monitor with a
customizable interface and a multitude of features.

Two unit tests were added validate the module behavior for an empty
configuration and the example configuration.
2021-09-14 23:40:21 +02:00
dependabot[bot]
5199bc841a
ci: bump cachix/install-nix-action from 13 to 14
Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 13 to 14.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](https://github.com/cachix/install-nix-action/compare/v13...v14)

---
updated-dependencies:
- dependency-name: cachix/install-nix-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-13 01:12:40 +00:00
Basti
5e46262cb1
betterlockscreen: add module (#2292) 2021-09-05 19:00:28 -06:00
polykernel
521a03d8bf
fnott: add module
Fnott is a keyboard driven and lightweight Wayland notification daemon
for wlroots-based compositors.

There are four unit test to validate behavior for an empty
configuration, the default configuration, global properties and
systemd service file generation.
2021-08-26 08:43:39 +02:00
Robert Helgesson
7ef3db3730
docs: rename "doc" directory to "docs"
Also remove `CONTRIBUTING.adoc` and `FAQ.adoc` from project root since
GitHub knows to pick them up from the docs directory.

Fixes #2273
2021-08-17 19:35:11 +02:00
Ivan Malison
ad0fc085c7
git-sync: add module 2021-08-17 00:00:38 +02:00
Bart Bakker
2c3a968f57
htop: make self code owner of tests too 2021-08-16 23:20:33 +02:00
Mihai Fufezan
c049a09d1a
easyeffects: add module (#2182)
* pulseeffects: change default example

pulseeffects-pw is now an alias to easyeffects, and the `pulseeffects` binary
that this module references is no longer in that package.

* easyeffects: add module

The easyeffects service is the PipeWire equivalent of the pulseeffects
service.
2021-08-11 09:21:43 -06:00
Shamrock Lee
a4a8307897
java: add module 2021-08-10 23:30:12 +02:00
Ivan Malison
2c4234cb79
notify-osd: init (#2240)
Daemon that displays passive pop-up notifications
2021-08-08 20:29:36 -04:00
midchildan
b0d769691c
emacs: add extraConfig option 2021-08-06 23:57:14 +02:00
Andreas Mager
cc6909d407
trayer: add module (#2177) 2021-07-24 00:29:49 +02:00
Nicolas Berbiche
784da32958
meta: github: fix issue template assignees 2021-07-23 23:45:37 +02:00
Ivan Malison
41101d0e62
volnoti: add module (#2183) 2021-07-21 00:17:27 -04:00
Nicolas Berbiche
2b75633b2c
meta: github: update issue template
Also add feature request template.
2021-07-18 23:54:23 +02:00
IvarWithoutBones
775cb20bd4
sm64ex: add module 2021-07-12 08:57:35 +02:00
dawidsowa
97d183e2e4
devilspie2: add module (#1477)
Co-authored-by: Sumner Evans <me@sumnerevans.com>
Co-authored-by: Nicolas Berbiche <nicolas@normie.dev>
2021-07-05 16:29:34 -04:00
t4ccer
3f6cb409ca
xmobar: add module (#2120)
* xmobar: Add module

* xmobar: Add test case

xmobar: Add test default.nix

* xmobar: Order lists alphabetically

* xmobar: Change colon to comma in description

* xmobar: Fix macos tests

* xmobar: Remove extra line

* xmobar: Add literalExample

Co-authored-by: Sumner Evans <me@sumnerevans.com>

* xmobar: Update extraConfig description

Co-authored-by: Sumner Evans <me@sumnerevans.com>
2021-06-29 13:02:43 -06:00
Bruno BELANYI
8d3b273afe
himalaya: add module
A very simple TUI mail client.
2021-06-26 18:29:42 -04:00
Ilan Joselevich
7e2b1a42aa
i18n.inputMethod: add module 2021-06-25 00:58:50 +02:00
Naïm Favier
e70524cd2b
bspwm: various improvements (#2095)
* bspwm: various improvements

- fixes shell escaping issues and general style issues
- allow reloading the config on-the-fly by exposing bspwmrc to the user

* bspwm: add configuration test
2021-06-19 18:40:17 -04:00
Philipp Dargel
d04e52b0c0
terminator: add module (#2063)
added configuration for terminator
2021-06-17 09:06:47 -06:00
Kevin Amado
e92f5bb79e
programs.gnome-terminal: terminal options (#2042)
- Add support for showing bold as bright colors
- Add support to configure the background transparency
- Fix the scrollOnOutput, it was not being dumped to the config
- Add tests!
- Add myself as maintainer
2021-06-15 23:39:56 +02:00
ZerataX
fb50102daf
mangohud: add module 2021-06-12 09:55:58 +02:00
Johannes Schleifenbaum
06a98ba0fd
pantalaimon: add module (#2056) 2021-06-07 17:38:42 -04:00
Dominik Schrempf
f74dc9c70b
xidlehook: add module (#1761)
Co-authored-by: Nicolas Berbiche <nic.berbiche@gmail.com>
2021-06-07 16:13:43 -04:00
Ethan Edwards
9424f31f86
piston-cli: add module (#2052)
* piston-cli: add module

* News: Remove trailing whitespace
2021-06-07 08:07:15 -06:00
malte-v
3ffe2a4cdf
programs.senpai: add module (#2076)
* maintainers: add malvo

* programs.senpai: add module
2021-06-07 07:40:32 -06:00
Bruno BELANYI
7591c8041d
rbw: add module (#1998)
`rbw` is a stand-alone Bitwarden client, which makes use of a daemon to
cache your password and manage state.

Its configuration can be managed by `home-manager` or not, leaving the
user free to configure it through `rbw config`.
2021-06-05 18:09:02 -06:00
cwyc
30102ea9e5
xdg-desktop-entries: add module (#1450)
* xdg-desktop-entries: add module

rebase

* xdg-desktop-entries: adapt to changes in makeDesktopItem

This package depends on the makeDesktopItem function in nixpkgs, which recently changed its syntax:
https://github.com/NixOS/nixpkgs/pull/91790

This commit makes the module compatible with the new syntax.

It also exposes the fileValidation option in makeDesktopItem.

Co-authored-by: cwyc <cwyc@users.noreply.github.com>
Co-authored-by: --get <--show>
2021-06-02 19:36:17 -04:00
Robert Helgesson
9e253a8c30
docs: minor additional issue template update 2021-05-31 17:27:34 +02:00
Robert Helgesson
5573c10ea4
docs: update issue template
Most importantly change chat contact information.
2021-05-31 17:24:37 +02:00
Bart Bakker
91450f23ce
htop: replace individual option with 'settings' (#1844)
* htop: add some missing meters
* htop: replace individual options with 'settings'
Deprecate all options and introduce `settings` for setting htop configuration
values in Nix configuration.

Use `lib.htop` to provide `fields` and `modes` for easy access to htop's integer
configuration. And `leftMeters` and `rightMeters` functions for building the
separate `*_meters` and `*_meter_modes` attributes.

* htop: add release-notes 21.05 entry
* htop: improve deprecation warnings

Move default configuration into `settings` and make deprecated options default
to `null`. Print deprecation warnings for any option that is non-null --
i.e. only show warnings for explicitly specified deprecated options.

* htop: make self code owner of module
* release notes: fix invalid programs.htop xref
2021-05-19 01:36:08 +02:00
Pierre Labadens
ff616b2734
foot: add module
Foot is a fast terminal emulator for Wayland. It can optionally be run
in a client-server configuration.

There are three unit tests to handle an empty configuration, the
default configuration, and systemd service file generation.
2021-05-18 22:29:41 +02:00
Tad Fisher
23769994e8
xdg.systemDirs: init module (#1797)
There is a need to manage XDG Base Directory system directory
environment variables in Home Manager modules. There is an existing
mechanism in `targets.genericLinux.extraXdgDataDirs', but this does not
apply to NixOS systems.

Furthermore, it is important that `XDG_CONFIG_DIRS' and `XDG_DATA_DIRS'
are set in both login shells (to support getty and SSH sessions) as well
as the systemd user manager (to propagate them to user services and
desktop environments).

The first need is addressed by adding the `xdg.systemDirs' module, which
configures lists of directory names for both `config' and `data'
directories. These are then set in
`$XDG_CONFIG_DIR/environment.d/10-home-manager.conf' and picked up by
the systemd user manager.

To make these, and other variables set in
`systemd.user.sessionVariables', available in login shells, an
additional step is added to `etc/profile.d/hm-session-vars.sh' which
exports the result of
`user-environment-generators/30-systemd-environment-d-generator' which
is shipped with systemd. The effect of this generator is to print
variables set on the systemd user manager such that shells can import
these into their environment.
2021-05-10 20:14:42 -04:00
Bruno BELANYI
3b799f6ea4
nix-index: add module (#1984)
`nix-index` is a tool to quickly locate the package providing a certain
file in `nixpkgs`. It indexes built derivations found in binary caches.

This module adds the shell integration for its `command-not-found`
script for interactive shells.
2021-05-09 18:13:10 -04:00
Vincent Breitmoser
30355f8ee6
etesync-dav: add module 2021-05-06 22:48:57 +02:00
Mario Rodas
2f857761d0
ncspot: add module (#1939)
* ncspot: add module

ncspot is a ncurses Spotify client written in Rust using librespot.

* news: fix bad github ui merge

Co-authored-by: Nicolas Berbiche <nicolas@normie.dev>
2021-05-01 17:38:12 -04:00
Christian Kalhauge
614a5b55bf
lazygit: add module (#1930)
Co-authored-by: Nicolas Berbiche <nic.berbiche@gmail.com>
Co-authored-by: Sumner Evans <me@sumnerevans.com>
2021-05-01 09:56:19 -06:00
Kritnich
2eed138026
barrier: add module
Co-authored-by: Sumner Evans <me@sumnerevans.com>
2021-05-01 00:11:17 +02:00
Harsh Shandilya
137a584e22
topgrade: add module (#1924) 2021-04-28 19:56:58 -04:00
Sumner Evans
4edc2091e0
github: configure probot/stale 2021-04-29 00:03:28 +02:00
Sumner Evans
19ebab97e8
i3, sway: extract border functionality to common function (#1947)
* i3, sway: extract border functionality to common function

Converted the i3 module to use default_border and
default_floating_border and extracted that functionality out to be
shared between the i3 and sway modules.

* i3: add sumnerevans as maintainer
2021-04-28 15:52:31 -04:00
Thibaut Marty
a759143ae1
mpris-proxy: add module (#1832) 2021-04-28 15:05:56 -04:00
Thibaut Marty
865e404826
poweralertd: add module (#1951) 2021-04-27 16:38:41 -04:00
Vladimir Serov
b4e3f069f1
pass-secret-service: add module (#1898)
pass-secret-service is a proxy between
secret service (libsecret) and pass.
2021-04-27 15:36:29 -04:00
Phillip Cloud
26fa84ebce
scmpuff: init (#1921)
scmpuff is a command line tool that allows you to work quicker with Git by substituting numeric shortcuts for files
2021-04-22 22:27:29 -04:00
Christian Gram Kalhauge
7cf69a3b8d
exa: add module
Exa is a 'ls' alternative with more sane colorscheme than lsd on white
backgrounds.
2021-04-11 22:47:06 +02:00
Sumner Evans
073710d7f2
newsboat: add sumnerevans as maintainer 2021-04-11 22:20:03 +02:00
Sumner Evans
18930aaf75
sway: add sumnerevans as maintainer 2021-04-11 22:11:23 +02:00
dependabot[bot]
c12897e8e1
ci: bump cachix/cachix-action from v8 to v10
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from v8 to v10.
- [Release notes](https://github.com/cachix/cachix-action/releases)
- [Commits](https://github.com/cachix/cachix-action/compare/v8...73e75d1a0cd4330597a571e8f9dedb41faa2fc4e)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-07 19:21:04 +00:00
dependabot[bot]
4fd4066d2f
ci: bump cachix/install-nix-action from v12 to v13
Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from v12 to v13.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](https://github.com/cachix/install-nix-action/compare/v12...8d6d5e949675fbadb765c6b1a975047fa5f09b27)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-07 21:18:15 +02:00
Jakub Kozłowski
63d5d28db6
sbt: add new module 2021-02-04 23:42:37 +01:00
Sara Johnsson
df7d81b0b3
playerctld: add module 2021-01-31 12:36:30 +01:00
Thiago Kenji Okada
6b15b03898 redshift/gammastep: unify common options
Nowadays services.{redshift,gammastep} modules are really similar. They
should, since Gammastep is a fork of Redshift with the main objective is
to support Wayland.

So instead of trying to maintain two separate modules, this commit unify
the options in lib/options.nix file, making the implementation of the
module itself ends up being really simple (just calling the common
options with the necessary parameters to differentiate between them).
2021-01-26 01:39:50 -03:00
midchildan
e44faef21c
i18n: various fixes 2021-01-23 16:40:25 +01:00
Thiago Kenji Okada
6f7074d21d
rofi: migrate to rasi configuration format (#1736)
* rofi: migrate to rasi configuration format

The Xresources configuration format is deprecated in Rofi. For example,
using Rofi from unstable (1.6.1 as of now) you get the following
warnings when starting the application:

```
(process:9272): Rofi-WARNING **: 01:38:48.596: The old Xresources based configuration format is deprecated.

(process:9272): Rofi-WARNING **: 01:38:48.596: Please upgrade: rofi -upgrade-config.
``````

So this commit migrates it for its new configuration format, called rasi
instead.

This new implementation uses attrsets manipulation instead of using
strings, making the code clearer and also fixing some bugs found during
the way. To make sure everything is right, I also created some tests.

If someone wants to validate if the generated config is correct, just
run in terminal:

```
$ rofi -dump-config
```

And rofi will dump the current configuration file, including all
unsetted options.

* docs: document programs.rofi.extraConfig changes

* rofi: add thiagokokada as maintainer

* rofi: add toRasi function
2021-01-23 16:30:34 +01:00
midchildan
9a12cd7e81
i18n: set the appropriate LOCALE_ARCHIVE_x_xx variable (#1659) 2021-01-23 15:56:38 +01:00
Emery Hemingway
73506f947c
plan9port: add module 2021-01-02 08:50:57 +01:00
Robert Helgesson
f6fd7e3fa4
octant: add code owner entry 2020-12-31 15:49:29 +01:00
Wael M. Nasreddine
bcbf09a202
github: configure dependabot
Configure GH's dependabot to file pull requests automatically that
updates our GitHub actions.
2020-12-26 08:55:23 +01:00
seylerius
1a7f190cb9
rofi-pass: add rofi-pass plugin for password-store 2020-12-18 23:22:57 +01:00
Ivar
e6a58a7e71
pbgopy: add service 2020-12-09 23:45:51 +01:00
Matthias Riße
33407189c1
wlsunset: add module
This adds the wlsunset module, a program for day/night gamma
adjustments on wayland.

Fixes #1625
2020-12-01 21:46:46 +01:00
Robert Helgesson
9fe15dc83b
tests: remove format meta test
This test requires copying the Home Manager checkout to the Nix store,
which seems to require too much memory for the CI jobs. Instead simply
run the format script directly.
2020-11-15 23:12:26 +01:00
Robert Helgesson
b9b8a42fda
github-ci: use default max-jobs 2020-11-15 23:12:06 +01:00
Robert Helgesson
fe849640ad
ci: update github workflow actions 2020-11-14 10:15:12 +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
Robert Helgesson
249e31b656
docs: expand the issue template a bit 2020-11-03 22:46:13 +01:00
Robert Helgesson
0261950395
docs: update issue template 2020-11-03 20:29:25 +01:00
workflow
5125fc0a47
CI: update nix-install-action to v11
Release notes: https://github.com/cachix/install-nix-action/releases/tag/v11
2020-11-02 23:55:37 +01:00
Nikita Uvarov
cabf9ddd98
caffeine: add service 2020-11-02 23:38:47 +01:00
Tobias Happ
22a3a5651d
gh: add module 2020-10-22 23:36:15 +02:00
Milan Pässler
308ee310de
gammastep: add module
Fixes #1396
2020-10-22 23:11:43 +02:00
zimbatm
014d8deb60
tree-wide: update url to the repo 2020-10-22 22:41:56 +02:00
zimbatm
1c4ced745c
ci: deploy the manual to GitHub Pages 2020-10-22 22:41:55 +02:00
zimbatm
731959ef0e
ci: add cachix cache 2020-10-22 22:41:54 +02:00
Nick Hu
18a05a9604
zsh: add support for prezto configuration framework (#655) 2020-10-12 01:27:44 +01: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
Karl Hallsby
f0fc2a8702
mu: add module 2020-09-29 23:26:45 +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
Evan Stoll
9b1b55ba02
numlock: add test
- Add evanjs to CODEOWNERS for numlock and numlock test
- Add evanjs to maintainers for numlock module
2020-09-18 19:35:19 +02:00
Olmo Kramer
4b702bf6b7
ncmpcpp: add module
PR #1457
2020-09-01 22:05:57 +02:00
Tony Olagbaiye
6cf6b587b5
flake: add flake.nix
No flake.lock is added because the only input (nixpkgs) will almost
always be overridden, and currently Home Manager's testing and
verification is not flake based.

PR #1455
2020-08-26 23:49:12 +02:00
Mario Rodas
a79d31fcfd
mcfly: add module
PR #1452
2020-08-26 00:21:01 +02:00
Vincent Gatine
a3dd580adc
kanshi: add service
PR #1142
2020-08-15 01:02:23 +02:00
Nicolas Berbiche
f4f9f1a618
waybar: add module
PR #1329
2020-08-14 00:20:49 +02:00
eyjhb
7b73f84071
dropbox: add module
Ability to control Dropbox daemon, if it should start and where to
place the files.

PR #1391
2020-07-25 23:12:33 +02:00
Philipp Mildenberger
3f1be69359
nushell: add module (#1333) 2020-07-24 17:15:55 +02:00
Alex Rice
05565a0145
CODEOWNERS: fix typo 2020-07-13 12:40:13 +01: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
Vincent Breitmoser
b0e8a1569e
fluidsynth: add module
Fluidsynth is a real-time MIDI synthesizer based on the SoundFont 2
format.

PR #1326
2020-06-14 15:30:51 +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
Damien Cassou
478022afad
powerline-go: add module
PR #1285
2020-06-13 00:02:13 +02:00
Robert Helgesson
21fbc5e5ad
ci: do a nightly test run 2020-06-12 20:13:29 +02:00
Damien Cassou
43ef16c3e1
clipmenu: add module
PR #1309
2020-06-12 19:52:52 +02:00
Tad Fisher
2209d3cb51
emacs: add myself to maintainers 2020-06-11 20:40:10 +02:00
Robert Helgesson
89be0943e1
ci: run tests only for pull requests 2020-06-09 23:07:46 +02:00
Robert Helgesson
5a97bf30d4
ci: switch from Travis CI to GitHub Actions
Unfortunately Travis CI seems stuck on Nix 2.0 on macOS, which no
longer works with Nixpkgs unstable.
2020-06-09 20:48:22 +02:00
Alex Rice
68b931aef8
sway: add alexarice as codeowner 2020-06-06 21:35:09 +02:00
Robert Helgesson
c8b73e415a
doc: add contribution guidelines section
This adds a section in the documentation for describing a list of
guidelines that code in Home Manager should follow.

This also updates the pull request template to reference this new
section.
2020-05-29 21:43:40 +02:00
Robert Helgesson
fe59b5bbc7
Minor cleanup of GitHub issue template
In particular indicate that the IRC channel is better for support
issues.
2020-05-28 00:01:51 +02:00
Robert Helgesson
8af92f844f
Fix link to contributing document in PR template 2020-05-27 20:11:23 +02:00
Robert Helgesson
f36c8a09e6
Add basic GitHub issue template 2020-05-27 00:29:31 +02:00
Mario Rodas
a957e2dc6b
zoxide: add module
PR #1274
2020-05-26 19:14:39 +02:00
dawidsowa
0fe984d575
tmpfiles: add module
PR #1144
2020-05-16 13:32:33 +02:00
Justin Lovinger
e9945ee6ee
dircolors: add module
PR #1219
2020-05-12 22:15:32 +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
Jonathan Ringer
a6037a9eb8
pulseeffects: add module
Pulseeffects is an advanced mixer for PulseAudio.

PR #1182
2020-04-26 15:50:21 +02:00
Owen McGrath
2f2a4396c6
lf: add module
Adds 'programs.lf', configuration managment for lf, a terminal file
manager.

PR #1174
2020-04-23 22:41:22 +02:00
Robert Helgesson
ee18288eeb
codeowners: add entry for mako 2020-04-09 11:28:22 +02:00
Robert Helgesson
5cdbfc9064
Add code owners and pull request template 2020-04-08 19:29:57 +02:00