Merge branch 'nix-community:master' into master

This commit is contained in:
niacdoial 2023-02-05 17:25:27 +01:00 committed by GitHub
commit 1921e1cf5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
355 changed files with 7364 additions and 1316 deletions

60
.github/CODEOWNERS vendored
View file

@ -59,6 +59,8 @@ Makefile @thiagokokada
/tests/modules/misc/xdg/desktop-full-expected.desktop @cwyc /tests/modules/misc/xdg/desktop-full-expected.desktop @cwyc
/tests/modules/misc/xdg/desktop-min-expected.desktop @cwyc /tests/modules/misc/xdg/desktop-min-expected.desktop @cwyc
/modules/misc/xfconf.nix @chuangzhu
/modules/programs/aerc.nix @lukasngl /modules/programs/aerc.nix @lukasngl
/modules/programs/aerc-accounts.nix @lukasngl /modules/programs/aerc-accounts.nix @lukasngl
/tests/modules/programs/aerc @lukasngl /tests/modules/programs/aerc @lukasngl
@ -84,7 +86,7 @@ Makefile @thiagokokada
/modules/programs/bottom.nix @polykernel /modules/programs/bottom.nix @polykernel
/tests/modules/programs/bottom @polykernel /tests/modules/programs/bottom @polykernel
/modules/programs/broot.nix @aheaume /modules/programs/broot.nix @aheaume @dermetfan
/modules/programs/btop.nix @GaetanLepage /modules/programs/btop.nix @GaetanLepage
/tests/modules/programs/btop.nix @GaetanLepage /tests/modules/programs/btop.nix @GaetanLepage
@ -93,6 +95,8 @@ Makefile @thiagokokada
/modules/programs/direnv.nix @rycee /modules/programs/direnv.nix @rycee
/modules/programs/discocss.nix @Kranzes
/modules/programs/eclipse.nix @rycee /modules/programs/eclipse.nix @rycee
/modules/programs/emacs.nix @rycee /modules/programs/emacs.nix @rycee
@ -124,14 +128,16 @@ Makefile @thiagokokada
/modules/programs/go.nix @rvolosatovs /modules/programs/go.nix @rvolosatovs
/modules/programs/havoc.nix @AndersonTorres
/modules/programs/helix.nix @Philipp-M /modules/programs/helix.nix @Philipp-M
/tests/modules/programs/helix @Philipp-M /tests/modules/programs/helix @Philipp-M
/modules/programs/hexchat.nix @thiagokokada /modules/programs/hexchat.nix @thiagokokada
/tests/modules/programs/hexchat @thiagokokada /tests/modules/programs/hexchat @thiagokokada
/modules/programs/himalaya.nix @ambroisie /modules/programs/himalaya.nix @toastal
/tests/modules/programs/himalaya @ambroisie /tests/modules/programs/himalaya @toastal
/modules/programs/home-manager.nix @rycee /modules/programs/home-manager.nix @rycee
@ -151,6 +157,9 @@ Makefile @thiagokokada
/modules/programs/just.nix @maximsmol /modules/programs/just.nix @maximsmol
/modules/programs/k9s.nix @katexochen
/tests/modules/programs/k9s @katexochen
/modules/programs/keychain.nix @marsam /modules/programs/keychain.nix @marsam
/modules/programs/kodi.nix @dwagenk /modules/programs/kodi.nix @dwagenk
@ -158,6 +167,8 @@ Makefile @thiagokokada
/modules/programs/lazygit.nix @kalhauge /modules/programs/lazygit.nix @kalhauge
/modules/programs/ledger.nix @marsam
/modules/programs/less.nix @pamplemousse /modules/programs/less.nix @pamplemousse
/tests/modules/programs/less @pamplemousse /tests/modules/programs/less @pamplemousse
@ -170,6 +181,9 @@ Makefile @thiagokokada
/modules/programs/lieer.nix @tadfisher /modules/programs/lieer.nix @tadfisher
/modules/programs/looking-glass-client.nix @j-brn
/tests/modules/programs/looking-glass-client @j-brn
/modules/programs/lsd.nix @marsam /modules/programs/lsd.nix @marsam
/modules/programs/matplotlib.nix @rprospero /modules/programs/matplotlib.nix @rprospero
@ -225,6 +239,9 @@ Makefile @thiagokokada
/modules/programs/octant.nix @06kellyjac /modules/programs/octant.nix @06kellyjac
/modules/programs/oh-my-posh.nix @arjan-s
/tests/modules/programs/oh-my-posh @arjan-s
/modules/programs/opam.nix @marsam /modules/programs/opam.nix @marsam
/modules/programs/openssh.nix @rycee /modules/programs/openssh.nix @rycee
@ -232,6 +249,9 @@ Makefile @thiagokokada
/modules/programs/pandoc.nix @kirelagin /modules/programs/pandoc.nix @kirelagin
/tests/modules/programs/pandoc @kirelagin /tests/modules/programs/pandoc @kirelagin
/modules/programs/papis.nix @marsam
/tests/modules/programs/papis @marsam
/modules/programs/password-store.nix @pacien /modules/programs/password-store.nix @pacien
/modules/programs/pazi.nix @marsam /modules/programs/pazi.nix @marsam
@ -243,6 +263,12 @@ Makefile @thiagokokada
/modules/programs/piston-cli.nix @ethancedwards8 /modules/programs/piston-cli.nix @ethancedwards8
/modules/programs/pls.nix @arjan-s
/tests/modules/programs/pls @arjan-s
/modules/programs/polybar.nix @h7x4
/tests/modules/programs/polybar @h7x4
/modules/programs/powerline-go.nix @DamienCassou /modules/programs/powerline-go.nix @DamienCassou
/modules/programs/pubs.nix @loicreynier /modules/programs/pubs.nix @loicreynier
@ -250,6 +276,8 @@ Makefile @thiagokokada
/modules/programs/pylint.nix @florpe /modules/programs/pylint.nix @florpe
/modules/programs/rbenv.nix @marsam
/modules/programs/rbw.nix @ambroisie /modules/programs/rbw.nix @ambroisie
/tests/modules/programs/rbw @ambroisie /tests/modules/programs/rbw @ambroisie
@ -292,15 +320,24 @@ Makefile @thiagokokada
/modules/programs/texlive.nix @rycee /modules/programs/texlive.nix @rycee
/modules/programs/thunderbird.nix @d-dervishi
/tests/modules/programs/thunderbird @d-dervishi
/modules/programs/timidity.nix @amesgen /modules/programs/timidity.nix @amesgen
/modules/programs/tint2.nix @CarlosLoboxyz /modules/programs/tint2.nix @CarlosLoboxyz
/modules/programs/tiny.nix @kmaasrud /modules/programs/tiny.nix @kmaasrud
/modules/programs/tmate.nix @jlesquembre
/tests/modules/programs/tmate @jlesquembre
/modules/programs/topgrade.nix @msfjarvis /modules/programs/topgrade.nix @msfjarvis
/tests/modules/programs/topgrade @msfjarvis /tests/modules/programs/topgrade @msfjarvis
/modules/programs/vim-vint.nix @tomodachi94
/tests/modules/programs/vim-vint @tomodachi94
/modules/programs/watson.nix @polykernel /modules/programs/watson.nix @polykernel
/tests/modules/programs/watson @polykernel /tests/modules/programs/watson @polykernel
@ -314,6 +351,7 @@ Makefile @thiagokokada
/tests/modules/programs/xmobar @t4ccer /tests/modules/programs/xmobar @t4ccer
/modules/programs/yt-dlp.nix @marsam /modules/programs/yt-dlp.nix @marsam
/tests/modules/programs/yt-dlp @marsam
/modules/programs/z-lua.nix @marsam /modules/programs/z-lua.nix @marsam
@ -325,15 +363,25 @@ Makefile @thiagokokada
/modules/programs/zsh/prezto.nix @NickHu /modules/programs/zsh/prezto.nix @NickHu
/modules/services/autorandr.nix @GaetanLepage
/modules/services/barrier.nix @Kritnich /modules/services/barrier.nix @Kritnich
/tests/modules/services/barrier @Kritnich /tests/modules/services/barrier @Kritnich
/modules/services/betterlockscreen.nix @SebTM /modules/services/betterlockscreen.nix @SebTM
/modules/programs/borgmatic.nix @DamienCassou
/modules/services/borgmatic.nix @DamienCassou
/tests/modules/programs/borgmatic @DamienCassou
/tests/modules/services/borgmatic @DamienCassou
/modules/services/caffeine.nix @uvNikita /modules/services/caffeine.nix @uvNikita
/modules/services/cbatticon.nix @pmiddend /modules/services/cbatticon.nix @pmiddend
/modules/services/clipman.nix @jwygoda
/tests/modules/services/clipman @jwygoda
/modules/services/clipmenu.nix @DamienCassou /modules/services/clipmenu.nix @DamienCassou
/modules/services/devilspie2.nix @dawidsowa /modules/services/devilspie2.nix @dawidsowa
@ -392,6 +440,8 @@ Makefile @thiagokokada
/modules/services/mbsync.nix @pjones /modules/services/mbsync.nix @pjones
/modules/services/megasync.nix @GaetanLepage
/modules/services/mopidy.nix @foo-dogsquared /modules/services/mopidy.nix @foo-dogsquared
/tests/modules/services/mopidy @foo-dogsquared /tests/modules/services/mopidy @foo-dogsquared
@ -447,6 +497,8 @@ Makefile @thiagokokada
/modules/services/redshift-gammastep @rycee @petabyteboy @thiagokokada /modules/services/redshift-gammastep @rycee @petabyteboy @thiagokokada
/tests/modules/redshift-gammastep @thiagokokada /tests/modules/redshift-gammastep @thiagokokada
/modules/services/safeeyes @Rosuavio
/modules/services/screen-locker.nix @jrobsonchase @rszamszur /modules/services/screen-locker.nix @jrobsonchase @rszamszur
/tests/modules/services/screen-locker @jrobsonchase @rszamszur /tests/modules/services/screen-locker @jrobsonchase @rszamszur
@ -483,6 +535,8 @@ Makefile @thiagokokada
/modules/services/window-managers/bspwm @ncfavier /modules/services/window-managers/bspwm @ncfavier
/tests/modules/services/window-managers/bspwm @ncfavier /tests/modules/services/window-managers/bspwm @ncfavier
/modules/services/window-managers/fluxbox.nix @AndersonTorres
/modules/services/window-managers/herbstluftwm @olmokramer /modules/services/window-managers/herbstluftwm @olmokramer
/tests/modules/services/window-managers/herbstluftwm @olmokramer /tests/modules/services/window-managers/herbstluftwm @olmokramer

View file

@ -10,7 +10,7 @@ updates:
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions"
directory: "/" directory: "/"
target-branch: "release-21.11" target-branch: "release-22.11"
schedule: schedule:
interval: "weekly" interval: "weekly"
commit-message: commit-message:

19
.github/labeler.yml vendored Normal file
View file

@ -0,0 +1,19 @@
"mail":
- modules/programs/alot*.nix
- tests/modules/programs/alot/*
- modules/programs/mujmap.nix
- tests/modules/programs/mujmap/*
- modules/programs/notmuch.nix
- modules/programs/neomutt*
- tests/modules/programs/neomutt/*
- modules/programs/getmail*
- modules/*/mbsync*
- tests/modules/programs/mbsync/*
- modules/programs/himalaya.nix
- tests/modules/programs/himalaya/*
- modules/programs/thunderbird.nix
- tests/modules/programs/thunderbird/*
"neovim":
- modules/programs/neovim.nix
- tests/modules/programs/neovim/**/*

View file

@ -11,13 +11,13 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: cachix/install-nix-action@v17 - uses: cachix/install-nix-action@v18
with: with:
nix_path: nixpkgs=channel:nixos-unstable nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v10 - uses: cachix/cachix-action@v12
with: with:
name: nix-community name: nix-community
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: | - run: |
nix-build -A docs.html nix-build -A docs.html
cp -r result/share/doc/home-manager public cp -r result/share/doc/home-manager public

24
.github/workflows/labeler.yml vendored Normal file
View file

@ -0,0 +1,24 @@
name: "Label PR"
on:
- pull_request_target
# WARNING:
# When extending this action, be aware that $GITHUB_TOKEN allows some write
# access to the GitHub API. This means that it should not evaluate user input in
# a way that allows code injection.
permissions:
contents: read
pull-requests: write
jobs:
labels:
runs-on: ubuntu-latest
if: github.repository_owner == 'nix-community'
steps:
- uses: actions/labeler@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
sync-labels: true

View file

@ -12,13 +12,13 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: cachix/install-nix-action@v17 - uses: cachix/install-nix-action@v18
with: with:
nix_path: nixpkgs=channel:nixos-unstable nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v10 - uses: cachix/cachix-action@v12
with: with:
name: nix-community name: nix-community
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: | - run: |
if grep -R --exclude stdlib-extended.nix literalExample modules ; then if grep -R --exclude stdlib-extended.nix literalExample modules ; then
echo "Error: literalExample should be replaced by literalExpression" > /dev/stderr echo "Error: literalExample should be replaced by literalExpression" > /dev/stderr

View file

@ -12,9 +12,9 @@ jobs:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Install Nix - name: Install Nix
uses: cachix/install-nix-action@v17 uses: cachix/install-nix-action@v18
- name: Update flake.lock - name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@v13 uses: DeterminateSystems/update-flake-lock@v16
with: with:
token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
pr-labels: dependencies pr-labels: dependencies

View file

@ -4,17 +4,8 @@ variables:
NIX_PATH: "nixpkgs=channel:nixos-unstable" NIX_PATH: "nixpkgs=channel:nixos-unstable"
stages: stages:
- test
- deploy - deploy
Run tests:
stage: test
script:
- nix-shell --pure tests -A run.files-text
rules:
- if: $CI_COMMIT_BRANCH == "master"
when: always
pages: pages:
stage: deploy stage: deploy
script: script:

View file

@ -1 +1 @@
22.11 23.05

View file

@ -14,8 +14,9 @@ Before attempting to use Home Manager please read the warning below.
For a systematic overview of Home Manager and its available options, For a systematic overview of Home Manager and its available options,
please see please see
- the [Home Manager manual][manual] and - the [Home Manager manual][manual],
- the [Home Manager configuration options][configuration options]. - the [Home Manager configuration options][configuration options], and
- the 3rd party [Home Manager option search](https://mipmip.github.io/home-manager-option-search/).
If you would like to contribute to Home Manager If you would like to contribute to Home Manager
then please have a look at the [contributing][] chapter of the manual. then please have a look at the [contributing][] chapter of the manual.
@ -41,7 +42,7 @@ will write to your dconf store and cannot tell whether a configuration
that it is about to be overwritten was from a previous Home Manager that it is about to be overwritten was from a previous Home Manager
generation or from manual configuration. generation or from manual configuration.
Home Manager targets [NixOS][] unstable and NixOS version 22.05 (the Home Manager targets [NixOS][] unstable and NixOS version 22.11 (the
current stable version), it may or may not work on other Linux current stable version), it may or may not work on other Linux
distributions and NixOS versions. distributions and NixOS versions.
@ -106,7 +107,7 @@ Home Manager is developed against `nixpkgs-unstable` branch, which
often causes it to contain tweaks for changes/packages not yet often causes it to contain tweaks for changes/packages not yet
released in stable NixOS. To avoid breaking users' configurations, released in stable NixOS. To avoid breaking users' configurations,
Home Manager is released in branches corresponding to NixOS releases Home Manager is released in branches corresponding to NixOS releases
(e.g. `release-22.05`). These branches get fixes, but usually not new (e.g. `release-22.11`). These branches get fixes, but usually not new
modules. If you need a module to be backported, then feel free to open modules. If you need a module to be backported, then feel free to open
an issue. an issue.

View file

@ -28,6 +28,11 @@ Assuming your clone is at `$HOME/devel/home-manager` then you can make the `home
[source,console] [source,console]
$ home-manager -I home-manager=$HOME/devel/home-manager $ home-manager -I home-manager=$HOME/devel/home-manager
+ +
or, if using <<sec-flakes-standalone,flakes>>:
+
[source,console]
$ home-manager --override-input home-manager ~/devel/home-manager
+
or or
2. changing the default path by ensuring your configuration includes 2. changing the default path by ensuring your configuration includes
@ -256,3 +261,8 @@ and run an individual test, for example `alacritty-empty-settings`, through
[source,console] [source,console]
$ nix-shell --pure tests -A run.alacritty-empty-settings $ nix-shell --pure tests -A run.alacritty-empty-settings
However, those invocations will impurely source the systems nixpkgs, and may cause failures. To run against the nixpkgs from the flake.lock, use instead e.g.
[source,console]
$ nix develop --ignore-environment .#tests.all

View file

@ -7,8 +7,8 @@ let
nmdSrc = fetchTarball { nmdSrc = fetchTarball {
url = url =
"https://gitlab.com/api/v4/projects/rycee%2Fnmd/repository/archive.tar.gz?sha=91dee681dd1c478d6040a00835d73c0f4a4c5c29"; "https://git.sr.ht/~rycee/nmd/archive/409f1310b168f96c6c8b556d24731a3e7c26c255.tar.gz";
sha256 = "07szg39wmna287hv5w9hl45wvm04zbh0k54br59nv3yzvg9ymlj4"; sha256 = "1v43qgfwa9s84728lv1njz2zdsfzp8kas3w4s3jan7w813c8flh8";
}; };
nmd = import nmdSrc { inherit lib pkgs; }; nmd = import nmdSrc { inherit lib pkgs; };

View file

@ -51,23 +51,13 @@ $ nix-channel --add https://github.com/nix-community/home-manager/archive/master
$ nix-channel --update $ nix-channel --update
---- ----
+ +
and if you follow a Nixpkgs version 22.05 channel you can run and if you follow a Nixpkgs version 22.11 channel you can run
+ +
[source,console] [source,console]
---- ----
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.05.tar.gz home-manager $ nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
$ nix-channel --update $ nix-channel --update
---- ----
+
On non-NixOS, you may have to add
+
[source,bash]
export NIX_PATH=$HOME/.nix-defexpr/channels:/nix/var/nix/profiles/per-user/root/channels${NIX_PATH:+:$NIX_PATH}
+
to your shell (see https://github.com/NixOS/nix/issues/2033[nix#2033]
and
https://discourse.nixos.org/t/where-is-nix-path-supposed-to-be-set/16434/8[this
reply on the Nix Discourse]).
3. Run the Home Manager installation command and create the first Home 3. Run the Home Manager installation command and create the first Home
Manager generation: Manager generation:
@ -133,11 +123,11 @@ $ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/m
$ sudo nix-channel --update $ sudo nix-channel --update
---- ----
and if you follow a Nixpkgs version 22.05 channel, you can run and if you follow a Nixpkgs version 22.11 channel, you can run
[source,console] [source,console]
---- ----
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.05.tar.gz home-manager $ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
$ sudo nix-channel --update $ sudo nix-channel --update
---- ----
@ -244,11 +234,11 @@ $ nix-channel --add https://github.com/nix-community/home-manager/archive/master
$ nix-channel --update $ nix-channel --update
---- ----
and if you follow a Nixpkgs version 22.05 channel, you can run and if you follow a Nixpkgs version 22.11 channel, you can run
[source,console] [source,console]
---- ----
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.05.tar.gz home-manager $ nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
$ nix-channel --update $ nix-channel --update
---- ----
@ -303,7 +293,7 @@ can be sourced directly by POSIX.2-like shells such as {bash}[Bash] or
[NOTE] [NOTE]
==== ====
By default user packages will not be ignored in favor of By default user packages will not be ignored in favor of
`environment.systemPackages`, but they will be intalled to `environment.systemPackages`, but they will be installed to
`/etc/profiles/per-user/$USERNAME` if `/etc/profiles/per-user/$USERNAME` if
[source,nix] [source,nix]

View file

@ -155,6 +155,18 @@
--keep-going --keep-going
</arg> </arg>
<arg>
<group choice="req">
<arg choice="plain">
-L
</arg>
<arg choice="plain">
--print-build-logs
</arg>
</group>
</arg>
<arg> <arg>
--show-trace --show-trace
</arg> </arg>
@ -167,6 +179,10 @@
--no-out-link --no-out-link
</arg> </arg>
<arg>
--refresh
</arg>
<arg> <arg>
<group choice="req"> <group choice="req">
<arg choice="plain"> <arg choice="plain">
@ -546,6 +562,22 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>-L</option>
</term>
<term>
<option>--print-build-logs</option>
</term>
<listitem>
<para>
Passed on to <citerefentry>
<refentrytitle>nix build</refentrytitle>
</citerefentry>
when building from a flake.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>--show-trace</option> <option>--show-trace</option>
@ -583,6 +615,18 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>--refresh</option>
</term>
<listitem>
<para>
Passed on to <citerefentry>
<refentrytitle>nix-build</refentrytitle>
<manvolnum>1</manvolnum> </citerefentry>
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>-v</option> <option>-v</option>

View file

@ -6,19 +6,31 @@
Home Manager includes a `flake.nix` file for compatibility with {nixos-wiki-flakes}[Nix Flakes]. Home Manager includes a `flake.nix` file for compatibility with {nixos-wiki-flakes}[Nix Flakes].
The support is still experimental and may change in backwards incompatible ways. The support is still experimental and may change in backwards incompatible ways.
[[sec-flakes-prerequisties]] [[sec-flakes-prerequisites]]
=== Prerequisties === Prerequisites
* Install Nix 2.4 or later, or have it in `nix-shell`. * Install Nix 2.4 or later, or have it in `nix-shell`.
* Enable experimental features `nix-command` and `flakes`. * Enable experimental features `nix-command` and `flakes`.
+ +
Either set in `nix.conf` ** When using NixOS, add the following to your `configuration.nix` and rebuild your system.
+
[source,nix]
nix = {
package = pkgs.nixFlakes;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
+
** If you are not using NixOS, add the following to `nix.conf` (located at `~/.config/nix/` or `/etc/nix/nix.conf`).
+ +
[source,bash] [source,bash]
experimental-features = nix-command flakes experimental-features = nix-command flakes
+ +
or pass them to `nix` and `home-manager` by You may need to restart the Nix daemon with, for example, `sudo systemctl restart nix-daemon.service`.
+
** Alternatively, you can enable flakes on a per-command basis with the following additional flags to `nix` and `home-manager`:
+ +
[source,console] [source,console]
---- ----
@ -78,9 +90,9 @@ writing a Home Manager configuration.
==== ====
* The above example tracks the master branch of Home Manager * The above example tracks the master branch of Home Manager
and nixos-unstable branch of Nixpkgs. and nixos-unstable branch of Nixpkgs.
If you would like to use the `release-22.05` branch, If you would like to use the `release-22.11` branch,
change the `home-manager` input url to `github:nix-community/home-manager/release-22.05` change the `home-manager` input url to `github:nix-community/home-manager/release-22.11`
and `nixpkgs` url to `github:NixOS/nixpkgs/nixos-22.05`. and `nixpkgs` url to `github:NixOS/nixpkgs/nixos-22.11`.
* The Home Manager library is exported by the flake under * The Home Manager library is exported by the flake under
`lib.hm`. `lib.hm`.
@ -188,7 +200,7 @@ is similar to that of NixOS. The `flake.nix` would be:
[source,nix] [source,nix]
---- ----
{ {
description = "NixOS configuration"; description = "Darwin configuration";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

View file

@ -6,6 +6,8 @@ This section lists the release notes for stable versions of Home Manager and the
:leveloffset: 1 :leveloffset: 1
include::rl-2305.adoc[]
include::rl-2211.adoc[] include::rl-2211.adoc[]
include::rl-2205.adoc[] include::rl-2205.adoc[]

View file

@ -8,7 +8,7 @@ The 21.05 release branch became the stable branch in May, 2021.
This release has the following notable changes: This release has the following notable changes:
* The <<opt-programs.broot.verbs>> option is now a list rather than an * The `opt-programs.broot.verbs` option is now a list rather than an
attribute set. To migrate, move the keys of the attrset into the list attribute set. To migrate, move the keys of the attrset into the list
items' `invocation` keys. For example, items' `invocation` keys. For example,
+ +

View file

@ -93,4 +93,21 @@ release 20.03. Use `services.picom` instead.
The state version in this release includes the changes below. The state version in this release includes the changes below.
These changes are only active if the `home.stateVersion` option is set to "22.11" or later. These changes are only active if the `home.stateVersion` option is set to "22.11" or later.
* No changes. * The <<opt-services.mpd.musicDirectory>> option now defaults to the
value of <<opt-xdg.userDirs.music>> if <<opt-xdg.userDirs.enable>> is
enabled. Otherwise it is undefined and must be specified in the user
configuration.
* The activation script now resets `PATH` before running. Before, the
user's `PATH` environment variable would be used in the script and
this made it possible for commands in the activation script to run
arbitrary commands accessible to the user. We now restrict the
activation script to commands that are explicitly specified.
+
There is no official way to restore the old behavior. We attempt to
make the activation script as reproducible as possible and honoring
the user's `PATH` reduces reproducibility.
+
If you need to run a command in an activation script block then refer
to the command by its absolute command path, such as
`${pkgs.hello}/bin/hello`.

View file

@ -0,0 +1,23 @@
[[sec-release-23.05]]
== Release 23.05
This is the current unstable branch and the information in this section is therefore not final.
[[sec-release-23.05-highlights]]
=== Highlights
This release has the following notable changes:
* No highlights.
[[sec-release-23.05-state-version-changes]]
=== State Version Changes
The state version in this release includes the changes below.
These changes are only active if the `home.stateVersion` option is set to "23.05" or later.
* The <<opt-xsession.windowManager.i3.config.window.titlebar>>,
<<opt-xsession.windowManager.i3.config.floating.titlebar>>,
<<opt-wayland.windowManager.sway.config.window.titlebar>>,
<<opt-wayland.windowManager.sway.config.floating.titlebar>>, options now default to `true` which
is consistent with the default values for those options used by `i3` and `sway`.

View file

@ -52,7 +52,7 @@ A fresh install of Home Manager will generate a minimal `~/.config/nixpkgs/home.
# You can update Home Manager without changing this value. See # You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version # the Home Manager release notes for a list of state version
# changes in each release. # changes in each release.
home.stateVersion = "22.05"; home.stateVersion = "22.11";
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;
@ -92,7 +92,7 @@ To satisfy the above setup we should elaborate the `home.nix` file as follows:
# You can update Home Manager without changing this value. See # You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version # the Home Manager release notes for a list of state version
# changes in each release. # changes in each release.
home.stateVersion = "22.05"; home.stateVersion = "22.11";
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;

View file

@ -167,9 +167,11 @@ Builds a GVariant array containing the given list of elements, where each elemen
- `hm.gvariant.type.int64` - `hm.gvariant.type.int64`
- `hm.gvariant.type.uint64` - `hm.gvariant.type.uint64`
- `hm.gvariant.type.double` - `hm.gvariant.type.double`
- `hm.gvariant.type.variant`
- `hm.gvariant.type.arrayOf type` - `hm.gvariant.type.arrayOf type`
- `hm.gvariant.type.maybeOf type` - `hm.gvariant.type.maybeOf type`
- `hm.gvariant.type.tupleOf types` - `hm.gvariant.type.tupleOf types`
- `hm.gvariant.type.dictionaryEntryOf types`
-- --
+ +
where `type` and `types` are themselves a type and list of types, respectively. where `type` and `types` are themselves a type and list of types, respectively.
@ -185,3 +187,9 @@ Builds a GVariant maybe value containing the given GVariant element.
+ +
`hm.gvariant.mkTuple elements`::: `hm.gvariant.mkTuple elements`:::
Builds a GVariant tuple containing the given list of elements, where each element is a GVariant value. Builds a GVariant tuple containing the given list of elements, where each element is a GVariant value.
+
`hm.gvariant.mkVariant element`:::
Builds a GVariant variant which contains the value of a GVariant element.
+
`hm.gvariant.mkDictionaryEntry elements`:::
Builds a GVariant dictionary entry containing the given list of elements, where each element is a GVariant value.

View file

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1654953433, "lastModified": 1675115703,
"narHash": "sha256-TwEeh4r50NdWHFAHQSyjCk2cZxgwUfcCCAJOhPdXB28=", "narHash": "sha256-4zetAPSyY0D77x+Ww9QBe8RHn1akvIvHJ/kgg8kGDbk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "90cd5459a1fd707819b9a3fb9c852beaaac3b79a", "rev": "2caf4ef5005ecc68141ecb4aac271079f7371c44",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -24,11 +24,11 @@
}, },
"utils": { "utils": {
"locked": { "locked": {
"lastModified": 1653893745, "lastModified": 1667395993,
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -45,8 +45,7 @@
, configuration ? null, extraModules ? null, stateVersion ? null , configuration ? null, extraModules ? null, stateVersion ? null
, username ? null, homeDirectory ? null, system ? null }@args: , username ? null, homeDirectory ? null, system ? null }@args:
let let
throwForRemovedArg = v: msgForRemovedArg = ''
lib.throwIf (v != null) ''
The 'homeManagerConfiguration' arguments The 'homeManagerConfiguration' arguments
- 'configuration', - 'configuration',
@ -57,15 +56,26 @@
- 'system' - 'system'
have been removed. Instead use the arguments 'pkgs' and have been removed. Instead use the arguments 'pkgs' and
'modules'. See the 22.11 release notes for more. 'modules'. See the 22.11 release notes for more: https://nix-community.github.io/home-manager/release-notes.html#sec-release-22.11-highlights
''; '';
throwForRemovedArgs = throwForRemovedArg configuration # \ throwForRemovedArgs = v:
throwForRemovedArg username # \ let
throwForRemovedArg homeDirectory # \ used = builtins.filter (n: (args.${n} or null) != null) [
throwForRemovedArg stateVersion # \ "configuration"
throwForRemovedArg extraModules # \ "username"
throwForRemovedArg system; "homeDirectory"
"stateVersion"
"extraModules"
"system"
];
msg = msgForRemovedArg + ''
Deprecated args passed: ''
+ builtins.concatStringsSep " " used;
in lib.throwIf (used != [ ]) msg v;
in throwForRemovedArgs (import ./modules { in throwForRemovedArgs (import ./modules {
inherit pkgs lib check extraSpecialArgs; inherit pkgs lib check extraSpecialArgs;
configuration = { ... }: { configuration = { ... }: {
@ -78,7 +88,9 @@
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
docs = import ./docs { inherit pkgs; }; docs = import ./docs { inherit pkgs; };
tests = import ./tests { inherit pkgs; };
in { in {
devShells.tests = tests.run;
packages = rec { packages = rec {
home-manager = pkgs.callPackage ./home-manager { }; home-manager = pkgs.callPackage ./home-manager { };
docs-html = docs.manual.html; docs-html = docs.manual.html;

1
format
View file

@ -21,7 +21,6 @@ find . -name '*.nix' \
! -path ./modules/lib/default.nix \ ! -path ./modules/lib/default.nix \
! -path ./modules/lib/file-type.nix \ ! -path ./modules/lib/file-type.nix \
! -path ./modules/misc/news.nix \ ! -path ./modules/misc/news.nix \
! -path ./modules/programs/bash.nix \
! -path ./modules/programs/ssh.nix \ ! -path ./modules/programs/ssh.nix \
! -path ./modules/programs/zsh.nix \ ! -path ./modules/programs/zsh.nix \
! -path ./tests/default.nix \ ! -path ./tests/default.nix \

View file

@ -293,9 +293,10 @@ _home-manager_completions ()
Options=( "-f" "--file" "-b" "-A" "-I" "-h" "--help" "-n" "--dry-run" "-v" \ Options=( "-f" "--file" "-b" "-A" "-I" "-h" "--help" "-n" "--dry-run" "-v" \
"--verbose" "--cores" "--debug" "--impure" "--keep-failed" \ "--verbose" "--cores" "--debug" "--impure" "--keep-failed" \
"--keep-going" "-j" "--max-jobs" "--no-substitute" "--no-out-link" \ "--keep-going" "-j" "--max-jobs" "--no-substitute" "--no-out-link" \
"-L" "--print-build-logs" \
"--show-trace" "--substitute" "--builders" "--version" \ "--show-trace" "--substitute" "--builders" "--version" \
"--update-input" "--override-input" "--experimental-features" \ "--update-input" "--override-input" "--experimental-features" \
"--extra-experimental-features" ) "--extra-experimental-features" "--refresh")
# ^ « home-manager »'s options. # ^ « home-manager »'s options.

View file

@ -60,6 +60,7 @@ complete -c home-manager -f -l "keep-going" -d "Keep going in case of failed bui
complete -c home-manager -x -s j -l "max-jobs" -d "Max number of build jobs in parallel" complete -c home-manager -x -s j -l "max-jobs" -d "Max number of build jobs in parallel"
complete -c home-manager -x -l "option" -d "Set Nix configuration option" complete -c home-manager -x -l "option" -d "Set Nix configuration option"
complete -c home-manager -x -l "builders" -d "Remote builders" complete -c home-manager -x -l "builders" -d "Remote builders"
complete -c home-manager -f -s L -l "print-build-logs" -d "Print full build logs on standard error"
complete -c home-manager -f -l "show-trace" -d "Print stack trace of evaluation errors" complete -c home-manager -f -l "show-trace" -d "Print stack trace of evaluation errors"
complete -c home-manager -f -l "substitute" complete -c home-manager -f -l "substitute"
complete -c home-manager -f -l "no-substitute" complete -c home-manager -f -l "no-substitute"
@ -68,3 +69,4 @@ complete -c home-manager -f -l "update-input"
complete -c home-manager -f -l "override-input" complete -c home-manager -f -l "override-input"
complete -c home-manager -f -l "experimental-features" complete -c home-manager -f -l "experimental-features"
complete -c home-manager -f -l "extra-experimental-features" complete -c home-manager -f -l "extra-experimental-features"
complete -c home-manager -f -l "refresh" -d "Consider all previously downloaded files out-of-date"

View file

@ -19,6 +19,7 @@ _arguments \
'(-j --max-jobs)'{--max-jobs,-j}'[max jobs]:NUM:()' \ '(-j --max-jobs)'{--max-jobs,-j}'[max jobs]:NUM:()' \
'--option[option]:NAME VALUE:()' \ '--option[option]:NAME VALUE:()' \
'--builders[builders]:SPEC:()' \ '--builders[builders]:SPEC:()' \
'(-L --print-build-logs)'{--print-build-logs,-L}'[print build logs]' \
'--show-trace[show trace]' \ '--show-trace[show trace]' \
'--override-input[override flake input]:NAME VALUE:()' \ '--override-input[override flake input]:NAME VALUE:()' \
'--update-input[update flake input]:NAME:()' \ '--update-input[update flake input]:NAME:()' \
@ -62,6 +63,7 @@ case "$state" in
'--show-trace[show trace]' \ '--show-trace[show trace]' \
'--substitute[substitute]' \ '--substitute[substitute]' \
'--builders[builders]:SPEC:()' \ '--builders[builders]:SPEC:()' \
'--refresh[refresh]' \
'--override-input[override flake input]:NAME VALUE:()' \ '--override-input[override flake input]:NAME VALUE:()' \
'--update-input[update flake input]:NAME:()' \ '--update-input[update flake input]:NAME:()' \
'--experimental-features[set experimental Nix features]:VALUE:()' \ '--experimental-features[set experimental Nix features]:VALUE:()' \

View file

@ -1,5 +1,5 @@
{ runCommand, lib, bash, callPackage, coreutils, findutils, gettext, gnused { runCommand, lib, bash, callPackage, coreutils, findutils, gettext, gnused
, less, ncurses , less, ncurses, unixtools
# used for pkgs.path for nixos-option # used for pkgs.path for nixos-option
, pkgs , pkgs
@ -39,6 +39,7 @@ in runCommand "home-manager" {
less less
ncurses ncurses
nixos-option nixos-option
unixtools.hostname
] ]
}" \ }" \
--subst-var-by HOME_MANAGER_LIB '${../lib/bash/home-manager.sh}' \ --subst-var-by HOME_MANAGER_LIB '${../lib/bash/home-manager.sh}' \

View file

@ -87,7 +87,7 @@ function setHomeManagerNixPath() {
"${XDG_CONFIG_HOME:-$HOME/.config}/nixpkgs/home-manager" \ "${XDG_CONFIG_HOME:-$HOME/.config}/nixpkgs/home-manager" \
"$HOME/.nixpkgs/home-manager" ; do "$HOME/.nixpkgs/home-manager" ; do
if [[ -e "$path" || "$path" =~ ^https?:// ]] ; then if [[ -e "$path" || "$path" =~ ^https?:// ]] ; then
export NIX_PATH="home-manager=$path${NIX_PATH:+:}$NIX_PATH" EXTRA_NIX_PATH+=("home-manager=$path")
return return
fi fi
done done
@ -106,10 +106,17 @@ function setFlakeAttribute() {
local name="${FLAKE_ARG#*#}" local name="${FLAKE_ARG#*#}"
;; ;;
*) *)
local name="$USER@$(hostname)" local name="$USER"
if [ "$(nix eval "$flake#homeConfigurations" --apply "x: x ? \"$name\"")" = "false" ]; then # Check both long and short hostnames; long first to preserve
name="$USER" # pre-existing behaviour in case both happen to be defined.
for n in "$USER@$(hostname)" "$USER@$(hostname -s)"; do
if [[ "$(nix eval "$flake#homeConfigurations" --apply "x: x ? \"$n\"")" == "true" ]]; then
name="$n"
if [[ -v VERBOSE ]]; then
echo "Using flake homeConfiguration for $name"
fi fi
fi
done
;; ;;
esac esac
export FLAKE_CONFIG_URI="$flake#homeConfigurations.\"$name\"" export FLAKE_CONFIG_URI="$flake#homeConfigurations.\"$name\""
@ -123,7 +130,6 @@ function doInspectOption() {
exit 1 exit 1
fi fi
setConfigFile setConfigFile
setHomeManagerNixPath
local extraArgs=("$@") local extraArgs=("$@")
@ -163,7 +169,6 @@ function doInstantiate() {
exit 1 exit 1
fi fi
setConfigFile setConfigFile
setHomeManagerNixPath
local extraArgs=() local extraArgs=()
@ -185,7 +190,6 @@ function doInstantiate() {
function doBuildAttr() { function doBuildAttr() {
setConfigFile setConfigFile
setHomeManagerNixPath
local extraArgs=("$@") local extraArgs=("$@")
@ -282,6 +286,7 @@ function doBuild() {
"$FLAKE_CONFIG_URI.activationPackage" \ "$FLAKE_CONFIG_URI.activationPackage" \
${DRY_RUN+--dry-run} \ ${DRY_RUN+--dry-run} \
${NO_OUT_LINK+--no-link} \ ${NO_OUT_LINK+--no-link} \
${PRINT_BUILD_LOGS+--print-build-logs} \
|| return || return
else else
doBuildAttr \ doBuildAttr \
@ -312,6 +317,7 @@ function doSwitch() {
doBuildFlake \ doBuildFlake \
"$FLAKE_CONFIG_URI.activationPackage" \ "$FLAKE_CONFIG_URI.activationPackage" \
--out-link "$generation" \ --out-link "$generation" \
${PRINT_BUILD_LOGS+--print-build-logs} \
&& "$generation/activate" || return && "$generation/activate" || return
else else
doBuildAttr \ doBuildAttr \
@ -480,7 +486,10 @@ function doUninstall() {
y|Y) y|Y)
_i "Switching to empty Home Manager configuration..." _i "Switching to empty Home Manager configuration..."
HOME_MANAGER_CONFIG="$(mktemp --tmpdir home-manager.XXXXXXXXXX)" HOME_MANAGER_CONFIG="$(mktemp --tmpdir home-manager.XXXXXXXXXX)"
echo "{ lib, ... }: { home.file = lib.mkForce {}; }" > "$HOME_MANAGER_CONFIG" echo "{ lib, ... }: {" > "$HOME_MANAGER_CONFIG"
echo " home.file = lib.mkForce {};" >> "$HOME_MANAGER_CONFIG"
echo " home.stateVersion = \"18.09\";" >> "$HOME_MANAGER_CONFIG"
echo "}" >> "$HOME_MANAGER_CONFIG"
doSwitch doSwitch
$DRY_RUN_CMD $REMOVE_CMD home-manager-path || true $DRY_RUN_CMD $REMOVE_CMD home-manager-path || true
rm "$HOME_MANAGER_CONFIG" rm "$HOME_MANAGER_CONFIG"
@ -541,11 +550,13 @@ function doHelp() {
echo " --keep-going" echo " --keep-going"
echo " -j, --max-jobs NUM" echo " -j, --max-jobs NUM"
echo " --option NAME VALUE" echo " --option NAME VALUE"
echo " -L, --print-build-logs"
echo " --show-trace" echo " --show-trace"
echo " --(no-)substitute" echo " --(no-)substitute"
echo " --no-out-link Do not create a symlink to the output path" echo " --no-out-link Do not create a symlink to the output path"
echo " --no-write-lock-file" echo " --no-write-lock-file"
echo " --builders VALUE" echo " --builders VALUE"
echo " --refresh Consider all previously downloaded files out-of-date"
echo echo
echo "Commands" echo "Commands"
echo echo
@ -589,6 +600,8 @@ COMMAND=""
COMMAND_ARGS=() COMMAND_ARGS=()
FLAKE_ARG="" FLAKE_ARG=""
setHomeManagerNixPath
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
opt="$1" opt="$1"
shift shift
@ -616,7 +629,7 @@ while [[ $# -gt 0 ]]; do
FLAKE_ARG="$1" FLAKE_ARG="$1"
shift shift
;; ;;
--recreate-lock-file|--no-update-lock-file|--no-write-lock-file|--no-registries|--commit-lock-file) --recreate-lock-file|--no-update-lock-file|--no-write-lock-file|--no-registries|--commit-lock-file|--refresh)
PASSTHROUGH_OPTS+=("$opt") PASSTHROUGH_OPTS+=("$opt")
;; ;;
--update-input) --update-input)
@ -638,6 +651,9 @@ while [[ $# -gt 0 ]]; do
--no-out-link) --no-out-link)
NO_OUT_LINK=1 NO_OUT_LINK=1
;; ;;
-L|--print-build-logs)
PRINT_BUILD_LOGS=1
;;
-h|--help) -h|--help)
doHelp doHelp
exit 0 exit 0
@ -661,7 +677,7 @@ while [[ $# -gt 0 ]]; do
export VERBOSE=1 export VERBOSE=1
;; ;;
--version) --version)
echo 22.05 echo 22.11
exit 0 exit 0
;; ;;
*) *)

View file

@ -54,7 +54,7 @@ in runCommand "home-manager-install" {
# You can update Home Manager without changing this value. See # You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version # the Home Manager release notes for a list of state version
# changes in each release. # changes in each release.
home.stateVersion = "22.05"; home.stateVersion = "22.11";
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;

187
home-manager/po/da.po Normal file
View file

@ -0,0 +1,187 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Home Manager contributors
# This file is distributed under the same license as the Home Manager package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2022-09-19 18:22+0000\n"
"Last-Translator: cafkafk <christina@cafkafk.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/home-manager/cli/"
"da/>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: home-manager/home-manager:60
msgid "No configuration file found at %s"
msgstr "Ingen konfigurationsfiler fundet ved %s"
#: home-manager/home-manager:79
msgid "No configuration file found. Please create one at %s"
msgstr "Ingen konfigurationsfiler fundet. Venligst lav en ved %s"
#: home-manager/home-manager:122
msgid "Can't inspect options of a flake configuration"
msgstr "Kan ikke inspicere indstillinger af en flake konfiguration"
#: home-manager/home-manager:162
msgid "Can't instantiate a flake configuration"
msgstr "Kan ikke instantiere en flake konfiguration"
#: home-manager/home-manager:237
msgid ""
"There is %d unread and relevant news item.\n"
"Read it by running the command \"%s news\"."
msgid_plural ""
"There are %d unread and relevant news items.\n"
"Read them by running the command \"%s news\"."
msgstr[0] ""
"Der er %d ulæst og relavante nyheder.\n"
"Læs den ved at køre \"%s news\"."
msgstr[1] ""
"Der er %d ulæste og relavante nyheder.\n"
"Læs dem ved at køre \"%s news\"."
#: home-manager/home-manager:251
msgid "Unknown \"news.display\" setting \"%s\"."
msgstr "Ubekændt \"news.display\" indstilling \"%s\"."
#: home-manager/home-manager:258
#, sh-format
msgid "Please set the $EDITOR environment variable"
msgstr "Venligst sæt $EDITOR miljøvariablen"
#: home-manager/home-manager:273
msgid "Cannot run build in read-only directory"
msgstr "Kan ikke bygge i en læs-kun folder"
#: home-manager/home-manager:355
msgid "No generation with ID %s"
msgstr "Ingen generation med ID %s"
#: home-manager/home-manager:357
msgid "Cannot remove the current generation %s"
msgstr "Kan ikke fjerne den nuværende generation %s"
#: home-manager/home-manager:359
msgid "Removing generation %s"
msgstr "Fjern generation %s"
#: home-manager/home-manager:385
msgid "No generations to expire"
msgstr "Ingen generationer som skal udløbes"
#: home-manager/home-manager:396
msgid "No home-manager packages seem to be installed."
msgstr ""
"Det virker ikke som om der er nogle home-manager pakker der er installeret."
#: home-manager/home-manager:453
msgid "Unknown argument %s"
msgstr "Ubekendt argument %s"
#: home-manager/home-manager:469
msgid "This will remove Home Manager from your system."
msgstr "Dette vil fjerne Home Manager fra dit system."
#: home-manager/home-manager:472
msgid "This is a dry run, nothing will actually be uninstalled."
msgstr "Dette er en tør kørsel, intet vil rent faktisk blive uinstalleret."
#: home-manager/home-manager:476
msgid "Really uninstall Home Manager?"
msgstr "Virkelig uinstaller Home Manager?"
#: home-manager/home-manager:481
msgid "Switching to empty Home Manager configuration..."
msgstr "Skifter til tom Home Manager konfiguration..."
#: home-manager/home-manager:493
msgid "Yay!"
msgstr "Juhuu!"
#: home-manager/home-manager:500
msgid "Remove all Home Manager generations?"
msgstr "Fjern alle Home Manager generationer?"
#: home-manager/home-manager:507
msgid "All generations are now eligible for garbage collection."
msgstr "Alle generationer kan nu blive tjekket for overflødige filer."
#: home-manager/home-manager:510
msgid "Leaving generations but they may still be garbage collected."
msgstr ""
"Forlad generationer, men de kan stadig bliver fjernet som overflødige filer."
#: home-manager/home-manager:514
msgid "Home Manager is uninstalled but your home.nix is left untouched."
msgstr ""
"Home Manager bliver uinstalleret, men din home.nix bliver forladt uberørt."
#: home-manager/home-manager:673
msgid "%s: unknown option '%s'"
msgstr "%s: ukendt indstilling '%s'"
#: home-manager/home-manager:674
msgid "Run '%s --help' for usage help"
msgstr "Kør '%s --help' for brugsvejledning"
#: home-manager/home-manager:708
msgid "expire-generations expects one argument, got %d."
msgstr "expire-generations forventer et argument, fik %d."
#: home-manager/home-manager:730
msgid "Unknown command: %s"
msgstr "Ubekendt kommando: %s"
#: home-manager/install.nix:22
msgid "Creating initial Home Manager configuration..."
msgstr "Laver initial Home Manager konfiguration..."
#: home-manager/install.nix:66
msgid "Creating initial Home Manager generation..."
msgstr "Laver initial Home Manager generation..."
#. translators: The "%s" specifier will be replaced by a file path.
#: home-manager/install.nix:71
msgid ""
"All done! The home-manager tool should now be installed and you can edit\n"
"\n"
" %s\n"
"\n"
"to configure Home Manager. Run 'man home-configuration.nix' to\n"
"see all available options."
msgstr ""
"Alt er færdigt! Home-manager værktøjet burde nu være installeret, og du kan "
"ændre\n"
"\n"
" %s\n"
" \n"
"For at konfigurere Home Manager. Kør 'man home-configuration.nix' for at \n"
"se alle de mulige indstillinger."
#. translators: The "%s" specifier will be replaced by a URL.
#: home-manager/install.nix:76
msgid ""
"Uh oh, the installation failed! Please create an issue at\n"
"\n"
" %s\n"
"\n"
"if the error seems to be the fault of Home Manager."
msgstr ""
"Åh nej, installationen fejlede! Venligst opret en fejlrapport ved\n"
"\n"
" %s\n"
" \n"
"hvis fejlen fremstår som forskyldt af Home Manager."
#: home-manager/install.nix:83
msgid "This derivation is not buildable, please run it using nix-shell."
msgstr "Denne derivation er ikke bygbar, venligst kør den gennem nix-shell."

186
home-manager/po/lt.po Normal file
View file

@ -0,0 +1,186 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Home Manager contributors
# This file is distributed under the same license as the Home Manager package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2023-01-09 11:33+0000\n"
"Last-Translator: Kornelijus Tvarijanavičius <kornelijus@tvaria.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/home-manager/"
"cli/lt/>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
"1 : 2);\n"
"X-Generator: Weblate 4.15.1-dev\n"
#: home-manager/home-manager:60
msgid "No configuration file found at %s"
msgstr "Nerastas konfigūracijos failas %s"
#: home-manager/home-manager:79
msgid "No configuration file found. Please create one at %s"
msgstr "Nerastas konfigūracijos failas. Sukurkite jį adresu %s"
#: home-manager/home-manager:122
msgid "Can't inspect options of a flake configuration"
msgstr "Negalima patikrinti flake konfigūracijos pasirinkimų"
#: home-manager/home-manager:162
msgid "Can't instantiate a flake configuration"
msgstr "Negalima sukurti pradinės flake konfigūracijos"
#: home-manager/home-manager:237
msgid ""
"There is %d unread and relevant news item.\n"
"Read it by running the command \"%s news\"."
msgid_plural ""
"There are %d unread and relevant news items.\n"
"Read them by running the command \"%s news\"."
msgstr[0] ""
"Yra %d neperskaityta ir aktuali naujiena.\n"
"Perskaitykite ją paleidus komandą \"%s news\"."
msgstr[1] ""
"Yra %d neperskaitytos ir aktualios naujienos.\n"
"Perskaitykite jas paleidus komandą \"%s news\"."
msgstr[2] ""
"Yra %d neperskaitytų ir aktualių naujienų.\n"
"Perskaitykite jas paleidus komandą \"%s news\"."
#: home-manager/home-manager:251
msgid "Unknown \"news.display\" setting \"%s\"."
msgstr "Nežinomas \"news.display\" nustatymas \"%s\"."
#: home-manager/home-manager:258
#, sh-format
msgid "Please set the $EDITOR environment variable"
msgstr "Prašome nustatyti $EDITOR aplinkos kintamąjį"
#: home-manager/home-manager:273
msgid "Cannot run build in read-only directory"
msgstr ""
#: home-manager/home-manager:355
msgid "No generation with ID %s"
msgstr "Nėra generacijos su ID %s"
#: home-manager/home-manager:357
msgid "Cannot remove the current generation %s"
msgstr "Negalima pašalinti esamos generacijos %s"
#: home-manager/home-manager:359
msgid "Removing generation %s"
msgstr "Pašalinama generacija %s"
#: home-manager/home-manager:385
msgid "No generations to expire"
msgstr ""
#: home-manager/home-manager:396
msgid "No home-manager packages seem to be installed."
msgstr "Nėra instaliuotų home-manager paketų."
#: home-manager/home-manager:453
msgid "Unknown argument %s"
msgstr "Nežinomas argumentas %s"
#: home-manager/home-manager:469
msgid "This will remove Home Manager from your system."
msgstr "Tai pašalins Home Manager iš jūsų sistemos."
#: home-manager/home-manager:472
msgid "This is a dry run, nothing will actually be uninstalled."
msgstr "Tai bandomasis paleidimas, niekas nebus ištrinta."
#: home-manager/home-manager:476
msgid "Really uninstall Home Manager?"
msgstr "Tikrai išdiegti Home Manager?"
#: home-manager/home-manager:481
msgid "Switching to empty Home Manager configuration..."
msgstr "Perjungiama į tuščią Home Manager konfigūraciją..."
#: home-manager/home-manager:493
msgid "Yay!"
msgstr "Valio!"
#: home-manager/home-manager:500
msgid "Remove all Home Manager generations?"
msgstr "Pašalinti visas Home Manager generacijas?"
#: home-manager/home-manager:507
msgid "All generations are now eligible for garbage collection."
msgstr ""
"Visos generacijos jau tinkamos šiukšlių surinkimui (garbage collection)."
#: home-manager/home-manager:510
msgid "Leaving generations but they may still be garbage collected."
msgstr ""
#: home-manager/home-manager:514
msgid "Home Manager is uninstalled but your home.nix is left untouched."
msgstr "Home Manager yra išdiegtas, bet jūsų home.nix liko nepaliestas."
#: home-manager/home-manager:673
msgid "%s: unknown option '%s'"
msgstr "%s: nežinomas pasirinkimas „%s“"
#: home-manager/home-manager:674
msgid "Run '%s --help' for usage help"
msgstr "Paleiskite „%s --help“, kad gautumėte naudojimosi instrukcijas"
#: home-manager/home-manager:708
msgid "expire-generations expects one argument, got %d."
msgstr "expire-generations tikisi vieno argumento, gauta %d."
#: home-manager/home-manager:730
msgid "Unknown command: %s"
msgstr "Nežinoma komanda: %s"
#: home-manager/install.nix:22
msgid "Creating initial Home Manager configuration..."
msgstr "Kuriama pradinė Home Manager konfigūracija..."
#: home-manager/install.nix:66
msgid "Creating initial Home Manager generation..."
msgstr "Kuriama pradinė Home Manager generacija..."
#. translators: The "%s" specifier will be replaced by a file path.
#: home-manager/install.nix:71
msgid ""
"All done! The home-manager tool should now be installed and you can edit\n"
"\n"
" %s\n"
"\n"
"to configure Home Manager. Run 'man home-configuration.nix' to\n"
"see all available options."
msgstr ""
"Viskas baigta! Įrankis home-manager turėtų būti įdiegtas ir dabar galite "
"redaguoti\n"
"\n"
". . . .%s\n"
"\n"
", kad konfigūruotumėte Home Manager. Paleiskite „man home-configuration.nix“,"
"\n"
"jei norite pamatyti visus pasirinkimus."
#. translators: The "%s" specifier will be replaced by a URL.
#: home-manager/install.nix:76
msgid ""
"Uh oh, the installation failed! Please create an issue at\n"
"\n"
" %s\n"
"\n"
"if the error seems to be the fault of Home Manager."
msgstr ""
#: home-manager/install.nix:83
msgid "This derivation is not buildable, please run it using nix-shell."
msgstr ""

View file

@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: Home Manager\n" "Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2021-12-13 20:50+0000\n" "PO-Revision-Date: 2023-01-08 11:50+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Last-Translator: Petter K <petterkarlsrud@me.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/home-" "Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
"manager/cli/nb_NO/>\n" "home-manager/cli/nb_NO/>\n"
"Language: nb_NO\n" "Language: nb_NO\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.10-dev\n" "X-Generator: Weblate 4.15.1-dev\n"
#: home-manager/home-manager:60 #: home-manager/home-manager:60
msgid "No configuration file found at %s" msgid "No configuration file found at %s"
@ -139,12 +139,13 @@ msgid "Unknown command: %s"
msgstr "Ukjent kommando: %s" msgstr "Ukjent kommando: %s"
#: home-manager/install.nix:22 #: home-manager/install.nix:22
#, fuzzy
msgid "Creating initial Home Manager configuration..." msgid "Creating initial Home Manager configuration..."
msgstr "" msgstr "Oppretter ny Home Manager-konfigurasjon..."
#: home-manager/install.nix:66 #: home-manager/install.nix:66
msgid "Creating initial Home Manager generation..." msgid "Creating initial Home Manager generation..."
msgstr "" msgstr "Oppretter ny Home Manager-generasjon..."
#. translators: The "%s" specifier will be replaced by a file path. #. translators: The "%s" specifier will be replaced by a file path.
#: home-manager/install.nix:71 #: home-manager/install.nix:71

View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager\n" "Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2022-07-12 19:40+0000\n" "PO-Revision-Date: 2022-11-16 13:47+0000\n"
"Last-Translator: Frederik Engels <frederik.engels92@gmail.com>\n" "Last-Translator: Pablo Bollansee <pablo.bollansee@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/home-manager/cli/" "Language-Team: Dutch <https://hosted.weblate.org/projects/home-manager/cli/"
"nl/>\n" "nl/>\n"
"Language: nl\n" "Language: nl\n"
@ -17,23 +17,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14-dev\n" "X-Generator: Weblate 4.15-dev\n"
#: home-manager/home-manager:60 #: home-manager/home-manager:60
msgid "No configuration file found at %s" msgid "No configuration file found at %s"
msgstr "" msgstr "Geen configuratiebestand gevonden op %s"
#: home-manager/home-manager:79 #: home-manager/home-manager:79
msgid "No configuration file found. Please create one at %s" msgid "No configuration file found. Please create one at %s"
msgstr "" msgstr "Geen configuratiebestand gevonden, maak er alstublieft een aan op %s"
#: home-manager/home-manager:122 #: home-manager/home-manager:122
msgid "Can't inspect options of a flake configuration" msgid "Can't inspect options of a flake configuration"
msgstr "" msgstr "Kan de opties van een flake configuratie niet inspecteren"
#: home-manager/home-manager:162 #: home-manager/home-manager:162
msgid "Can't instantiate a flake configuration" msgid "Can't instantiate a flake configuration"
msgstr "" msgstr "Het is niet gelukt om de vlok-configuratie te creëren"
#: home-manager/home-manager:237 #: home-manager/home-manager:237
msgid "" msgid ""
@ -43,66 +43,68 @@ msgid_plural ""
"There are %d unread and relevant news items.\n" "There are %d unread and relevant news items.\n"
"Read them by running the command \"%s news\"." "Read them by running the command \"%s news\"."
msgstr[0] "" msgstr[0] ""
"Er is %d ongelezen and relevant nieuws artikel.\n"
"Lees het door het commando \"%s news\" uit te voeren."
msgstr[1] "" msgstr[1] ""
"Er zijn %d ongelezen and relevante nieuws artikelen.\n"
"Lees ze door het commando \"%s news\" uit te voeren."
#: home-manager/home-manager:251 #: home-manager/home-manager:251
msgid "Unknown \"news.display\" setting \"%s\"." msgid "Unknown \"news.display\" setting \"%s\"."
msgstr "" msgstr "Onbekende \"new.display\" instelling \"%s\"."
#: home-manager/home-manager:258 #: home-manager/home-manager:258
#, sh-format #, sh-format
msgid "Please set the $EDITOR environment variable" msgid "Please set the $EDITOR environment variable"
msgstr "" msgstr "Gelieve de $EDITOR omgevingsvariabele in te stellen"
#: home-manager/home-manager:273 #: home-manager/home-manager:273
msgid "Cannot run build in read-only directory" msgid "Cannot run build in read-only directory"
msgstr "" msgstr "Het is niet mogelijk om te bouwen in een read-only map"
#: home-manager/home-manager:355 #: home-manager/home-manager:355
msgid "No generation with ID %s" msgid "No generation with ID %s"
msgstr "" msgstr "Geen generatie met de ID %s"
#: home-manager/home-manager:357 #: home-manager/home-manager:357
msgid "Cannot remove the current generation %s" msgid "Cannot remove the current generation %s"
msgstr "" msgstr "Het is niet mogelijk om de huidige generatie %s te verwijderen"
#: home-manager/home-manager:359 #: home-manager/home-manager:359
msgid "Removing generation %s" msgid "Removing generation %s"
msgstr "" msgstr "Generatie %s aan het verwijderen"
#: home-manager/home-manager:385 #: home-manager/home-manager:385
msgid "No generations to expire" msgid "No generations to expire"
msgstr "" msgstr "Geen generatie om te beëindigen"
#: home-manager/home-manager:396 #: home-manager/home-manager:396
msgid "No home-manager packages seem to be installed." msgid "No home-manager packages seem to be installed."
msgstr "" msgstr "Er lijkt geen home-manager pakket geïnstalleerd te zijn."
#: home-manager/home-manager:453 #: home-manager/home-manager:453
msgid "Unknown argument %s" msgid "Unknown argument %s"
msgstr "Onbekend argument %s" msgstr "Onbekend argument %s"
#: home-manager/home-manager:469 #: home-manager/home-manager:469
#, fuzzy
msgid "This will remove Home Manager from your system." msgid "This will remove Home Manager from your system."
msgstr "Dit zal Home Manager van jouw systeem verwijderen." msgstr "Dit zal Home Manager van jouw systeem verwijderen."
#: home-manager/home-manager:472 #: home-manager/home-manager:472
#, fuzzy
msgid "This is a dry run, nothing will actually be uninstalled." msgid "This is a dry run, nothing will actually be uninstalled."
msgstr "Dit is een oefening, niks word werkelijk geinstalleerd." msgstr "Dit is een oefening, niets wordt werkelijk geïnstalleerd."
#: home-manager/home-manager:476 #: home-manager/home-manager:476
msgid "Really uninstall Home Manager?" msgid "Really uninstall Home Manager?"
msgstr "Werkelijk Home Manager verwijderen?" msgstr "Wilt u zeker Home Manager verwijderen?"
#: home-manager/home-manager:481 #: home-manager/home-manager:481
msgid "Switching to empty Home Manager configuration..." msgid "Switching to empty Home Manager configuration..."
msgstr "" msgstr "Naar een lege Home Manager configuratie aan het veranderen..."
#: home-manager/home-manager:493 #: home-manager/home-manager:493
msgid "Yay!" msgid "Yay!"
msgstr "Jaaa!" msgstr "Joepie!"
#: home-manager/home-manager:500 #: home-manager/home-manager:500
msgid "Remove all Home Manager generations?" msgid "Remove all Home Manager generations?"
@ -114,7 +116,7 @@ msgstr "Alle generaties zijn nu in aanmerking voor afvalinzameling."
#: home-manager/home-manager:510 #: home-manager/home-manager:510
msgid "Leaving generations but they may still be garbage collected." msgid "Leaving generations but they may still be garbage collected."
msgstr "" msgstr "Generaties blijven momenteel bestaan maar worden later opgekuist."
#: home-manager/home-manager:514 #: home-manager/home-manager:514
msgid "Home Manager is uninstalled but your home.nix is left untouched." msgid "Home Manager is uninstalled but your home.nix is left untouched."
@ -126,11 +128,11 @@ msgstr "%s: onbekende keuze '%s'"
#: home-manager/home-manager:674 #: home-manager/home-manager:674
msgid "Run '%s --help' for usage help" msgid "Run '%s --help' for usage help"
msgstr "" msgstr "Voer '%s --help' in om gebruiksinfo te zien"
#: home-manager/home-manager:708 #: home-manager/home-manager:708
msgid "expire-generations expects one argument, got %d." msgid "expire-generations expects one argument, got %d."
msgstr "" msgstr "expire-generations verwacht één argument, maar kreeg er %d."
#: home-manager/home-manager:730 #: home-manager/home-manager:730
msgid "Unknown command: %s" msgid "Unknown command: %s"
@ -138,11 +140,11 @@ msgstr "Onbekende opdracht: %s"
#: home-manager/install.nix:22 #: home-manager/install.nix:22
msgid "Creating initial Home Manager configuration..." msgid "Creating initial Home Manager configuration..."
msgstr "" msgstr "Initiële Home Manager configuratie aan het maken..."
#: home-manager/install.nix:66 #: home-manager/install.nix:66
msgid "Creating initial Home Manager generation..." msgid "Creating initial Home Manager generation..."
msgstr "" msgstr "Initiële Home Manager generatie aan het maken..."
#. translators: The "%s" specifier will be replaced by a file path. #. translators: The "%s" specifier will be replaced by a file path.
#: home-manager/install.nix:71 #: home-manager/install.nix:71
@ -154,6 +156,14 @@ msgid ""
"to configure Home Manager. Run 'man home-configuration.nix' to\n" "to configure Home Manager. Run 'man home-configuration.nix' to\n"
"see all available options." "see all available options."
msgstr "" msgstr ""
"Helemaal klaar! De home-manager tool zou nu geïnstalleerd moeten zijn en je "
"kan\n"
"\n"
" %s\n"
"\n"
"aanpassen om Home Manager te configureren. Draai 'man home-"
"configuration.nix' om\n"
"alle opties te zien."
#. translators: The "%s" specifier will be replaced by a URL. #. translators: The "%s" specifier will be replaced by a URL.
#: home-manager/install.nix:76 #: home-manager/install.nix:76
@ -164,9 +174,13 @@ msgid ""
"\n" "\n"
"if the error seems to be the fault of Home Manager." "if the error seems to be the fault of Home Manager."
msgstr "" msgstr ""
"Oh nee, de installatie is mislukt. Gelieve een ticket aan te maken in\n"
"\n"
" %s\n"
"\n"
"als de error de schuld van Home Manager lijkt te zijn."
#: home-manager/install.nix:83 #: home-manager/install.nix:83
#, fuzzy
msgid "This derivation is not buildable, please run it using nix-shell." msgid "This derivation is not buildable, please run it using nix-shell."
msgstr "" msgstr ""
"Deze afleiding kan niet gebouwd worden, voer het alstublieft uit met nix-" "Deze afleiding kan niet gebouwd worden, voer het alstublieft uit met nix-"

View file

@ -1,41 +0,0 @@
#!/usr/bin/env bash
# The check for terminal output and color support is heavily inspired
# by https://unix.stackexchange.com/a/10065.
#
# Allow opt out by respecting the `NO_COLOR` environment variable.
function setupColors() {
normalColor=""
errorColor=""
warnColor=""
noteColor=""
# Enable colors for terminals, and allow opting out.
if [[ ! -v NO_COLOR && -t 1 ]]; then
# See if it supports colors.
local ncolors
ncolors=$(tput colors)
if [[ -n "$ncolors" && "$ncolors" -ge 8 ]]; then
normalColor="$(tput sgr0)"
errorColor="$(tput bold)$(tput setaf 1)"
warnColor="$(tput setaf 3)"
noteColor="$(tput bold)$(tput setaf 6)"
fi
fi
}
setupColors
function errorEcho() {
echo "${errorColor}$*${normalColor}"
}
function warnEcho() {
echo "${warnColor}$*${normalColor}"
}
function noteEcho() {
echo "${noteColor}$*${normalColor}"
}

View file

@ -23,7 +23,7 @@ function setupColors() {
if [[ ! -v NO_COLOR && -t 1 ]]; then if [[ ! -v NO_COLOR && -t 1 ]]; then
# See if it supports colors. # See if it supports colors.
local ncolors local ncolors
ncolors=$(tput colors) ncolors=$(tput colors 2> /dev/null || echo 0)
if [[ -n "$ncolors" && "$ncolors" -ge 8 ]]; then if [[ -n "$ncolors" && "$ncolors" -ge 8 ]]; then
normalColor="$(tput sgr0)" normalColor="$(tput sgr0)"

View file

@ -44,6 +44,19 @@ let
''; '';
}; };
delimiter = mkOption {
type = types.str;
default = ''
--
'';
example = literalExpression ''
~*~*~*~*~*~*~*~*~*~*~*~
'';
description = ''
The delimiter used between the document and the signature.
'';
};
command = mkOption { command = mkOption {
type = with types; nullOr path; type = with types; nullOr path;
default = null; default = null;

View file

@ -97,7 +97,7 @@ in {
description = '' description = ''
Cursor configuration. Set to <literal>null</literal> to disable. Cursor configuration. Set to <literal>null</literal> to disable.
</para><para> </para><para>
Top-level options declared under this submodule are backend indepedent Top-level options declared under this submodule are backend independent
options. Options declared under namespaces such as <literal>x11</literal> options. Options declared under namespaces such as <literal>x11</literal>
are backend specific options. By default, only backend independent cursor are backend specific options. By default, only backend independent cursor
configurations are generated. If you need configurations for specific configurations are generated. If you need configurations for specific
@ -131,8 +131,8 @@ in {
# https://github.com/nix-community/home-manager/issues/2812 # https://github.com/nix-community/home-manager/issues/2812
# https://wiki.archlinux.org/title/Cursor_themes#Environment_variable # https://wiki.archlinux.org/title/Cursor_themes#Environment_variable
home.sessionVariables = { home.sessionVariables = {
XCURSOR_PATH = "$XCURSOR_PATH\${XCURSOR_PATH:+:}" XCURSOR_PATH = mkDefault ("$XCURSOR_PATH\${XCURSOR_PATH:+:}"
+ "${config.home.profileDirectory}/share/icons"; + "${config.home.profileDirectory}/share/icons");
}; };
} }

View file

@ -4,7 +4,7 @@ with lib;
let let
cfg = config.home.file; cfg = filterAttrs (n: f: f.enable) config.home.file;
homeDirectory = config.home.homeDirectory; homeDirectory = config.home.homeDirectory;
@ -185,8 +185,9 @@ in
$VERBOSE_ECHO "Skipping '$targetPath' as it is identical to '$sourcePath'" $VERBOSE_ECHO "Skipping '$targetPath' as it is identical to '$sourcePath'"
else else
# Place that symlink, --force # Place that symlink, --force
# This can still fail if the target is a directory, in which case we bail out.
$DRY_RUN_CMD mkdir -p $VERBOSE_ARG "$(dirname "$targetPath")" $DRY_RUN_CMD mkdir -p $VERBOSE_ARG "$(dirname "$targetPath")"
$DRY_RUN_CMD ln -nsf $VERBOSE_ARG "$sourcePath" "$targetPath" $DRY_RUN_CMD ln -Tsf $VERBOSE_ARG "$sourcePath" "$targetPath" || exit 1
fi fi
done done
''; '';

View file

@ -256,7 +256,7 @@ in
home.sessionVariables = mkOption { home.sessionVariables = mkOption {
default = {}; default = {};
type = types.attrs; type = with types; lazyAttrsOf (oneOf [ str path int float ]);
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; }; example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
description = '' description = ''
Environment variables to always set at login. Environment variables to always set at login.
@ -346,12 +346,18 @@ in
home.emptyActivationPath = mkOption { home.emptyActivationPath = mkOption {
internal = true; internal = true;
default = false;
type = types.bool; type = types.bool;
default = versionAtLeast stateVersion "22.11";
defaultText = literalExpression ''
false for state version < 22.11,
true for state version 22.11
'';
description = '' description = ''
Whether the activation script should start with an empty Whether the activation script should start with an empty
<envar>PATH</envar> variable. When <literal>false</literal> <envar>PATH</envar> variable. When <literal>false</literal> then the
then the user's <envar>PATH</envar> will be used. user's <envar>PATH</envar> will be accessible in the script. It is
recommended to keep this at <literal>true</literal> to avoid
uncontrolled use of tools found in PATH.
''; '';
}; };
@ -581,7 +587,6 @@ in
if [[ -e "$nixProfilePath"/manifest.json ]] ; then if [[ -e "$nixProfilePath"/manifest.json ]] ; then
nix profile list \ nix profile list \
| { grep 'home-manager-path$' || test $? = 1; } \ | { grep 'home-manager-path$' || test $? = 1; } \
| awk -F ' ' '{ print $4 }' \
| cut -d ' ' -f 4 \ | cut -d ' ' -f 4 \
| xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG | xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG
else else
@ -592,22 +597,36 @@ in
'' ''
else else
'' ''
function nixReplaceProfile() {
local oldNix="$(command -v nix)"
nix profile list \
| { grep 'home-manager-path$' || test $? = 1; } \
| cut -d ' ' -f 4 \
| xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG
$DRY_RUN_CMD $oldNix profile install $1
}
if [[ -e "$nixProfilePath"/manifest.json ]] ; then if [[ -e "$nixProfilePath"/manifest.json ]] ; then
INSTALL_CMD="nix profile install" INSTALL_CMD="nix profile install"
INSTALL_CMD_ACTUAL="nixReplaceProfile"
LIST_CMD="nix profile list" LIST_CMD="nix profile list"
REMOVE_CMD_SYNTAX='nix profile remove {number | store path}' REMOVE_CMD_SYNTAX='nix profile remove {number | store path}'
else else
INSTALL_CMD="nix-env -i" INSTALL_CMD="nix-env -i"
INSTALL_CMD_ACTUAL="$DRY_RUN_CMD nix-env -i"
LIST_CMD="nix-env -q" LIST_CMD="nix-env -q"
REMOVE_CMD_SYNTAX='nix-env -e {package name}' REMOVE_CMD_SYNTAX='nix-env -e {package name}'
fi fi
if ! $DRY_RUN_CMD $INSTALL_CMD ${cfg.path} ; then if ! $INSTALL_CMD_ACTUAL ${cfg.path} ; then
echo echo
_iError $'Oops, Nix failed to install your new Home Manager profile!\n\nPerhaps there is a conflict with a package that was installed using\n"%s"? Try running\n\n %s\n\nand if there is a conflicting package you can remove it with\n\n %s\n\nThen try activating your Home Manager configuration again.' "$INSTALL_CMD" "$LIST_CMD" "$REMOVE_CMD_SYNTAX" _iError $'Oops, Nix failed to install your new Home Manager profile!\n\nPerhaps there is a conflict with a package that was installed using\n"%s"? Try running\n\n %s\n\nand if there is a conflicting package you can remove it with\n\n %s\n\nThen try activating your Home Manager configuration again.' "$INSTALL_CMD" "$LIST_CMD" "$REMOVE_CMD_SYNTAX"
exit 1 exit 1
fi fi
unset INSTALL_CMD LIST_CMD REMOVE_CMD_SYNTAX unset -f nixReplaceProfile
unset INSTALL_CMD INSTALL_CMD_ACTUAL LIST_CMD REMOVE_CMD_SYNTAX
'' ''
); );
@ -659,7 +678,16 @@ in
gnugrep gnugrep
gnused gnused
ncurses # For `tput`. ncurses # For `tput`.
] ++ config.home.extraActivationPath ]
++ config.home.extraActivationPath
)
+ (
# Add path of the Nix binaries, if a Nix package is configured, then
# use that one, otherwise grab the path of the nix-env tool.
if config.nix.enable && config.nix.package != null then
":${config.nix.package}/bin"
else
":$(${pkgs.coreutils}/bin/dirname $(${pkgs.coreutils}/bin/readlink -m $(type -p nix-env)))"
) )
+ optionalString (!cfg.emptyActivationPath) "\${PATH:+:}$PATH"; + optionalString (!cfg.emptyActivationPath) "\${PATH:+:}$PATH";
@ -685,6 +713,8 @@ in
'' ''
mkdir -p $out mkdir -p $out
echo "${config.home.version.full}" > $out/hm-version
cp ${activationScript} $out/activate cp ${activationScript} $out/activate
mkdir $out/bin mkdir $out/bin

View file

@ -24,6 +24,7 @@ in {
i18n.inputMethod.package = fcitx5Package; i18n.inputMethod.package = fcitx5Package;
home.sessionVariables = { home.sessionVariables = {
GLFW_IM_MODULE = "ibus"; # IME support in kitty
GTK_IM_MODULE = "fcitx"; GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx"; QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx"; XMODIFIERS = "@im=fcitx";

View file

@ -162,12 +162,12 @@ in {
fi fi
if [[ -f "$dstPath" ]]; then if [[ -f "$dstPath" ]]; then
for (( i = 0; i < bootout_retries; i++ )); do for (( i = 0; i < bootout_retries; i++ )); do
$DRY_RUN_CMD launchctl bootout "$domain/$agentName" || err=$? $DRY_RUN_CMD /bin/launchctl bootout "$domain/$agentName" || err=$?
if [[ -v DRY_RUN ]]; then if [[ -v DRY_RUN ]]; then
break break
fi fi
if (( err != 9216 )) && if (( err != 9216 )) &&
! launchctl print "$domain/$agentName" &> /dev/null; then ! /bin/launchctl print "$domain/$agentName" &> /dev/null; then
break break
fi fi
sleep 1 sleep 1
@ -178,7 +178,7 @@ in {
fi fi
fi fi
$DRY_RUN_CMD install -Dm444 -T "$srcPath" "$dstPath" $DRY_RUN_CMD install -Dm444 -T "$srcPath" "$dstPath"
$DRY_RUN_CMD launchctl bootstrap "$domain" "$dstPath" $DRY_RUN_CMD /bin/launchctl bootstrap "$domain" "$dstPath"
done done
if [[ ! -e "$oldDir" ]]; then if [[ ! -e "$oldDir" ]]; then
@ -194,7 +194,7 @@ in {
continue continue
fi fi
$DRY_RUN_CMD launchctl bootout "$domain/$agentName" || : $DRY_RUN_CMD /bin/launchctl bootout "$domain/$agentName" || :
if [[ ! -e "$dstPath" ]]; then if [[ ! -e "$dstPath" ]]; then
continue continue
fi fi

View file

@ -39,19 +39,19 @@ with lib;
default = null; default = null;
description = '' description = ''
This optional key is used as a hint to <literal>launchctl(1)</literal> that it should not submit this job to launchd when This optional key is used as a hint to <literal>launchctl(1)</literal> that it should not submit this job to launchd when
loading a job or jobs. The value of this key does NOT reflect the current state of the job on the run-ning running loading a job or jobs. The value of this key does NOT reflect the current state of the job on the running
ning system. If you wish to know whether a job is loaded in launchd, reading this key from a configura-tion configuration system. If you wish to know whether a job is loaded in launchd, reading this key from a configuration
tion file yourself is not a sufficient test. You should query launchd for the presence of the job using file yourself is not a sufficient test. You should query launchd for the presence of the job using
the <literal>launchctl(1)</literal> list subcommand or use the ServiceManagement framework's the <literal>launchctl(1)</literal> list subcommand or use the ServiceManagement framework's
<literal>SMJobCopyDictionary()</literal> method. <literal>SMJobCopyDictionary()</literal> method.
Note that as of Mac OS X v10.6, this key's value in a configuration file conveys a default value, which Note that as of Mac OS X v10.6, this key's value in a configuration file conveys a default value, which
is changed with the [-w] option of the <literal>launchctl(1)</literal> load and unload subcommands. These subcommands no is changed with the [-w] option of the <literal>launchctl(1)</literal> load and unload subcommands. These subcommands no
longer modify the configuration file, so the value displayed in the configuration file is not necessar-ily necessarily longer modify the configuration file, so the value displayed in the configuration file is not necessarily
ily the value that <literal>launchctl(1)</literal> will apply. See <literal>launchctl(1)</literal> for more information. the value that <literal>launchctl(1)</literal> will apply. See <literal>launchctl(1)</literal> for more information.
Please also be mindful that you should only use this key if the provided on-demand and KeepAlive crite-ria criteria Please also be mindful that you should only use this key if the provided on-demand and KeepAlive criteria
ria are insufficient to describe the conditions under which your job needs to run. The cost to have a are insufficient to describe the conditions under which your job needs to run. The cost to have a
job loaded in launchd is negligible, so there is no harm in loading a job which only runs once or very job loaded in launchd is negligible, so there is no harm in loading a job which only runs once or very
rarely. rarely.
''; '';
@ -147,8 +147,7 @@ with lib;
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = '' description = ''
This flag causes launchd to use the <literal>glob(3)</literal> mechanism to update the program arguments before invoca-tion. invocation. This flag causes launchd to use the <literal>glob(3)</literal> mechanism to update the program arguments before invocation.
tion.
''; '';
}; };
@ -236,12 +235,12 @@ with lib;
description = '' description = ''
This optional key is used to control whether your job is to be kept continuously running or to let This optional key is used to control whether your job is to be kept continuously running or to let
demand and conditions control the invocation. The default is false and therefore only demand will start demand and conditions control the invocation. The default is false and therefore only demand will start
the job. The value may be set to true to unconditionally keep the job alive. Alternatively, a dictio-nary dictionary the job. The value may be set to true to unconditionally keep the job alive. Alternatively, a dictionary
nary of conditions may be specified to selectively control whether launchd keeps a job alive or not. If of conditions may be specified to selectively control whether launchd keeps a job alive or not. If
multiple keys are provided, launchd ORs them, thus providing maximum flexibility to the job to refine multiple keys are provided, launchd ORs them, thus providing maximum flexibility to the job to refine
the logic and stall if necessary. If launchd finds no reason to restart the job, it falls back on the logic and stall if necessary. If launchd finds no reason to restart the job, it falls back on
demand based invocation. Jobs that exit quickly and frequently when configured to be kept alive will demand based invocation. Jobs that exit quickly and frequently when configured to be kept alive will
be throttled to converve system resources. be throttled to conserve system resources.
''; '';
}; };
@ -677,8 +676,8 @@ with lib;
XPC connections. See <literal>xpc_transaction_begin(3)</literal> for details. XPC connections. See <literal>xpc_transaction_begin(3)</literal> for details.
Interactive Interactive
Interactive jobs run with the same resource limitations as apps, that is to say, none. Interac-tive Interactive Interactive jobs run with the same resource limitations as apps, that is to say, none. Interactive
tive jobs are critical to maintaining a responsive user experience, and this key should only be jobs are critical to maintaining a responsive user experience, and this key should only be
used if an app's ability to be responsive depends on it, and cannot be made Adaptive. used if an app's ability to be responsive depends on it, and cannot be made Adaptive.
''; '';
}; };
@ -687,8 +686,8 @@ with lib;
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = '' description = ''
When a job dies, launchd kills any remaining processes with the same process group ID as the job. Set-ting Setting When a job dies, launchd kills any remaining processes with the same process group ID as the job. Setting
ting this key to true disables that behavior. this key to true disables that behavior.
''; '';
}; };
@ -753,9 +752,9 @@ with lib;
description = '' description = ''
This optional key is used to specify launch on demand sockets that can be used to let launchd know when This optional key is used to specify launch on demand sockets that can be used to let launchd know when
to run the job. The job must check-in to get a copy of the file descriptors using APIs outlined in to run the job. The job must check-in to get a copy of the file descriptors using APIs outlined in
launch(3). The keys of the top level Sockets dictionary can be anything. They are meant for the appli-cation application launch(3). The keys of the top level Sockets dictionary can be anything. They are meant for the application
cation developer to use to differentiate which descriptors correspond to which application level proto-cols protocols developer to use to differentiate which descriptors correspond to which application level protocols
cols (e.g. http vs. ftp vs. DNS...). At check-in time, the value of each Sockets dictionary key will (e.g. http vs. ftp vs. DNS...). At check-in time, the value of each Sockets dictionary key will
be an array of descriptors. Daemon/Agent writers should consider all descriptors of a given key to be be an array of descriptors. Daemon/Agent writers should consider all descriptors of a given key to be
to be effectively equivalent, even though each file descriptor likely represents a different networking to be effectively equivalent, even though each file descriptor likely represents a different networking
protocol which conforms to the criteria specified in the job configuration file. protocol which conforms to the criteria specified in the job configuration file.
@ -829,8 +828,8 @@ with lib;
default = null; default = null;
description = '' description = ''
This optional key is a variant of SockPathName. Instead of binding to a known path, a securely This optional key is a variant of SockPathName. Instead of binding to a known path, a securely
generated socket is created and the path is assigned to the environment variable that is inher-ited inherited generated socket is created and the path is assigned to the environment variable that is inherited
ited by all jobs spawned by launchd. by all jobs spawned by launchd.
''; '';
}; };

View file

@ -1,39 +0,0 @@
# The check for terminal output and color support is heavily inspired
# by https://unix.stackexchange.com/a/10065.
#
# Allow opt out by respecting the `NO_COLOR` environment variable.
function setupColors() {
normalColor=""
errorColor=""
warnColor=""
noteColor=""
# Enable colors for terminals, and allow opting out.
if [[ ! -v NO_COLOR && -t 1 ]]; then
# See if it supports colors.
local ncolors
ncolors=$(tput colors)
if [[ -n "$ncolors" && "$ncolors" -ge 8 ]]; then
normalColor="$(tput sgr0)"
errorColor="$(tput bold)$(tput setaf 1)"
warnColor="$(tput setaf 3)"
noteColor="$(tput bold)$(tput setaf 6)"
fi
fi
}
setupColors
function errorEcho() {
echo "${errorColor}$*${normalColor}"
}
function warnEcho() {
echo "${warnColor}$*${normalColor}"
}
function noteEcho() {
echo "${noteColor}$*${normalColor}"
}

View file

@ -15,6 +15,14 @@ in
fileType = basePathDesc: basePath: types.attrsOf (types.submodule ( fileType = basePathDesc: basePath: types.attrsOf (types.submodule (
{ name, config, ... }: { { name, config, ... }: {
options = { options = {
enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether this file should be generated. This option allows specific
files to be disabled.
'';
};
target = mkOption { target = mkOption {
type = types.str; type = types.str;
apply = p: apply = p:

View file

@ -20,6 +20,7 @@ let
arrayOf = t: "a${t}"; arrayOf = t: "a${t}";
maybeOf = t: "m${t}"; maybeOf = t: "m${t}";
tupleOf = ts: "(${concatStrings ts})"; tupleOf = ts: "(${concatStrings ts})";
dictionaryEntryOf = ts: "{${concatStrings ts}}";
string = "s"; string = "s";
boolean = "b"; boolean = "b";
uchar = "y"; uchar = "y";
@ -30,6 +31,7 @@ let
int64 = "x"; int64 = "x";
uint64 = "t"; uint64 = "t";
double = "d"; double = "d";
variant = "v";
}; };
# Returns the GVariant type of a given Nix value. If no type can be # Returns the GVariant type of a given Nix value. If no type can be
@ -74,13 +76,13 @@ in rec {
isGVariant = v: v._type or "" == "gvariant"; isGVariant = v: v._type or "" == "gvariant";
isArray = hasPrefix "a"; isArray = hasPrefix "a";
isDictionaryEntry = hasPrefix "{";
isMaybe = hasPrefix "m"; isMaybe = hasPrefix "m";
isTuple = hasPrefix "("; isTuple = hasPrefix "(";
# Returns the GVariant value that most closely matches the given Nix # Returns the GVariant value that most closely matches the given Nix
# value. If no GVariant value can be found then `null` is returned. # value. If no GVariant value can be found then `null` is returned.
#
# No support for dictionaries, maybe types, or variants.
mkValue = v: mkValue = v:
if builtins.isBool v then if builtins.isBool v then
mkBoolean v mkBoolean v
@ -105,6 +107,21 @@ in rec {
mkEmptyArray = elemType: mkArray elemType [ ]; mkEmptyArray = elemType: mkArray elemType [ ];
mkVariant = elem:
let gvarElem = mkValue elem;
in mkPrimitive type.variant gvarElem // {
__toString = self: "@${self.type} <${toString self.value}>";
};
mkDictionaryEntry = elems:
let
gvarElems = map mkValue elems;
dictionaryType = type.dictionaryEntryOf (map (e: e.type) gvarElems);
in mkPrimitive dictionaryType gvarElems // {
__toString = self:
"@${self.type} {${concatMapStringsSep "," toString self.value}}";
};
mkNothing = elemType: mkMaybe elemType null; mkNothing = elemType: mkMaybe elemType null;
mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem; mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem;

View file

@ -37,12 +37,28 @@
github = "CarlosLoboxyz"; github = "CarlosLoboxyz";
githubId = 86011416; githubId = 86011416;
}; };
d-dervishi = {
email = "david.dervishi@epfl.ch";
github = "d-dervishi";
githubId = 61125355;
name = "David Dervishi";
keys = [{
longKeyId = "rsa4096/0xB1C012F0E7697195";
fingerprint = "4C92 E3B0 21B5 5562 A1E0 CE3D B1C0 12F0 E769 7195";
}];
};
dwagenk = { dwagenk = {
email = "dwagenk@mailbox.org"; email = "dwagenk@mailbox.org";
github = "dwagenk"; github = "dwagenk";
githubId = 32838899; githubId = 32838899;
name = "Daniel Wagenknecht"; name = "Daniel Wagenknecht";
}; };
jkarlson = {
email = "jekarlson@gmail.com";
github = "jkarlson";
githubId = 1204734;
name = "Emil Karlson";
};
justinlovinger = { justinlovinger = {
name = "Justin Lovinger"; name = "Justin Lovinger";
email = "git@justinlovinger.com"; email = "git@justinlovinger.com";
@ -101,6 +117,12 @@
fingerprint = "2BE3 BAFD 793E A349 ED1F F00F 04D0 CEAF 916A 9A40"; fingerprint = "2BE3 BAFD 793E A349 ED1F F00F 04D0 CEAF 916A 9A40";
}]; }];
}; };
katexochen = {
name = "Paul Meyer";
email = "49727155+katexochen@users.noreply.github.com";
github = "katexochen";
githubId = 49727155;
};
kubukoz = { kubukoz = {
name = "Jakub Kozłowski"; name = "Jakub Kozłowski";
email = "kubukoz@users.noreply.github.com"; email = "kubukoz@users.noreply.github.com";
@ -211,6 +233,12 @@
githubId = 1553581; githubId = 1553581;
name = "Josh Robson Chase"; name = "Josh Robson Chase";
}; };
jwygoda = {
name = "Jarosław Wygoda";
email = "jaroslaw@wygoda.me";
github = "jwygoda";
githubId = 20658981;
};
hawkw = { hawkw = {
name = "Eliza Weisman"; name = "Eliza Weisman";
email = "eliza@elizas.website"; email = "eliza@elizas.website";
@ -289,6 +317,12 @@
github = "sebtm"; github = "sebtm";
githubId = 17243347; githubId = 17243347;
}; };
rosuavio = {
name = "Rosario Pulella";
email = "RosarioPulella@gmail.com";
github = "Rosuavio";
githubId = 7164552;
};
rszamszur = { rszamszur = {
name = "Radosław Szamszur"; name = "Radosław Szamszur";
email = "radoslawszamszur@gmail.com"; email = "radoslawszamszur@gmail.com";
@ -317,4 +351,20 @@
github = "lukasngl"; github = "lukasngl";
githubId = 69244516; githubId = 69244516;
}; };
toastal = {
email = "toastal+nix@posteo.net";
matrix = "@toastal:matrix.org";
github = "toastal";
githubId = 561087;
name = "toastal";
keys =
[{ fingerprint = "7944 74B7 D236 DAB9 C9EF E7F9 5CCE 6F14 66D4 7C9E"; }];
};
tomodachi94 = {
email = "tomodachi94+nixpkgs@protonmail.com";
matrix = "@tomodachi94:matrix.org";
github = "tomodachi94";
githubId = 68489118;
name = "tomodachi94";
};
} }

View file

@ -55,7 +55,7 @@ in rec {
}; };
size = mkOption { size = mkOption {
type = types.nullOr types.int; type = types.nullOr types.number;
default = null; default = null;
example = "8"; example = "8";
description = '' description = ''
@ -95,6 +95,10 @@ in rec {
mergeOneOption loc defs mergeOneOption loc defs
else if gvar.isMaybe sharedDefType && allChecked then else if gvar.isMaybe sharedDefType && allChecked then
mergeOneOption loc defs mergeOneOption loc defs
else if gvar.isDictionaryEntry sharedDefType && allChecked then
mergeOneOption loc defs
else if gvar.type.variant == sharedDefType && allChecked then
mergeOneOption loc defs
else if gvar.type.string == sharedDefType && allChecked then else if gvar.type.string == sharedDefType && allChecked then
types.str.merge loc defs types.str.merge loc defs
else if gvar.type.double == sharedDefType && allChecked then else if gvar.type.double == sharedDefType && allChecked then

View file

@ -10,6 +10,14 @@ let
mkIniKeyValue = key: value: "${key}=${toString (hm.gvariant.mkValue value)}"; mkIniKeyValue = key: value: "${key}=${toString (hm.gvariant.mkValue value)}";
# The dconf keys managed by this configuration. We store this as part of the
# generation state to be able to reset keys that become unmanaged during
# switch.
stateDconfKeys = pkgs.writeText "dconf-keys.json" (builtins.toJSON
(concatLists (mapAttrsToList
(dir: entries: mapAttrsToList (key: _: "/${dir}/${key}") entries)
cfg.settings)));
in { in {
meta.maintainers = [ maintainers.rycee ]; meta.maintainers = [ maintainers.rycee ];
@ -54,21 +62,57 @@ in {
# Make sure the dconf directory exists. # Make sure the dconf directory exists.
xdg.configFile."dconf/.keep".source = builtins.toFile "keep" ""; xdg.configFile."dconf/.keep".source = builtins.toFile "keep" "";
home.activation.dconfSettings = hm.dag.entryAfter [ "installPackages" ] home.extraBuilderCommands = ''
(let iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings); mkdir -p $out/state/
in '' ln -s ${stateDconfKeys} $out/state/${stateDconfKeys.name}
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then '';
DCONF_DBUS_RUN_SESSION=""
else home.activation.dconfSettings = hm.dag.entryAfter [ "installPackages" ] (let
DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session" iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings);
statePath = "state/${stateDconfKeys.name}";
cleanup = pkgs.writeShellScript "dconf-cleanup" ''
set -euo pipefail
${config.lib.bash.initHomeManagerLib}
PATH=${makeBinPath [ pkgs.dconf pkgs.jq ]}''${PATH:+:}$PATH
oldState="$1"
newState="$2"
# Can't do cleanup if we don't know the old state.
if [[ ! -f $oldState ]]; then
exit 0
fi fi
if [[ -v DRY_RUN ]]; then # Reset all keys that are present in the old generation but not the new
echo $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / "<" ${iniFile} # one.
jq -r -n \
--slurpfile old "$oldState" \
--slurpfile new "$newState" \
'($old[] - $new[])[]' \
| while read -r key; do
$VERBOSE_ECHO "Resetting dconf key \"$key\""
$DRY_RUN_CMD $DCONF_DBUS_RUN_SESSION dconf reset "$key"
done
'';
in ''
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then
export DCONF_DBUS_RUN_SESSION=""
else else
$DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile} export DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session --dbus-daemon=${pkgs.dbus}/bin/dbus-daemon"
fi fi
if [[ -v oldGenPath ]]; then
${cleanup} \
"$oldGenPath/${statePath}" \
"$newGenPath/${statePath}"
fi
$DRY_RUN_CMD $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile}
unset DCONF_DBUS_RUN_SESSION unset DCONF_DBUS_RUN_SESSION
''); '');
}; };

View file

@ -696,6 +696,225 @@ in
A new module is available: 'programs.gallery-dl'. A new module is available: 'programs.gallery-dl'.
''; '';
} }
{
time = "2022-09-21T22:42:42+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'xsession.windowManager.fluxbox'.
'';
}
{
time = "2022-09-25T21:00:05+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.safeeyes'.
'';
}
{
time = "2022-09-25T22:22:17+00:00";
message = ''
A new module is available: 'programs.tmate'.
'';
}
{
time = "2022-09-29T13:43:02+00:00";
message = ''
A new module is available: 'programs.pls'.
'';
}
{
time = "2022-10-06T23:06:08+00:00";
message = ''
A new module is available: 'programs.ledger'.
'';
}
{
time = "2022-10-06T23:19:10+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'programs.havoc'.
'';
}
{
time = "2022-10-12T23:10:48+00:00";
message = ''
A new module is available: 'programs.discocss'.
'';
}
{
time = "2022-10-16T19:49:46+00:00";
condition = hostPlatform.isLinux;
message = ''
Two new modules are available:
- 'programs.borgmatic' and
- 'services.borgmatic'.
use the first to configure the borgmatic tool and the second if you
want to automatically run scheduled backups.
'';
}
{
time = "2022-10-18T08:07:43+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'programs.looking-glass-client'.
'';
}
{
time = "2022-10-22T17:52:30+00:00";
condition = config.programs.firefox.enable;
message = ''
It is now possible to configure the default search engine in Firefox
with
programs.firefox.profiles.<name>.search.default
and add custom engines with
programs.firefox.profiles.<name>.search.engines.
It is also recommended to set
programs.firefox.profiles.<name>.search.force = true
since Firefox will replace the symlink for the search configuration on
every launch, but note that you'll lose any existing configuration by
enabling this.
'';
}
{
time = "2022-10-24T22:05:27+00:00";
message = ''
A new module is available: 'programs.k9s'.
'';
}
{
time = "2022-11-01T23:57:50+00:00";
message = ''
A new module is available: 'programs.oh-my-posh'.
'';
}
{
time = "2022-11-02T10:56:14+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'xfconf'.
'';
}
{
time = "2022-11-04T14:56:46+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'programs.thunderbird'.
'';
}
{
time = "2022-11-13T09:05:51+00:00";
condition = hostPlatform.isDarwin;
message = ''
A new module is available: 'programs.thunderbird'.
Please note that the Thunderbird packages provided by Nix are
currently not working on macOS. The module can still be used to manage
configuration files by installing Thunderbird manually and setting the
'programs.thunderbird.package' option to a dummy package, for example
using 'pkgs.runCommand'.
This module requires you to set the following environment variables
when using an installation of Thunderbird that is not provided by Nix:
export MOZ_LEGACY_PROFILES=1
export MOZ_ALLOW_DOWNGRADE=1
'';
}
{
time = "2022-11-27T13:14:01+00:00";
condition = config.programs.ssh.enable;
message = ''
'programs.ssh.matchBlocks.*' now supports literal 'Match' blocks via
'programs.ssh.matchBlocks.*.match' option as an alternative to plain
'Host' blocks
'';
}
{
time = "2022-12-16T15:01:20+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.megasync'.
'';
}
{
time = "2022-12-25T08:41:32+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.cachix-agent'.
'';
}
{
time = "2022-12-28T21:48:22+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.clipman'.
'';
}
{
time = "2023-01-07T10:47:03+00:00";
condition = hostPlatform.isLinux;
message = ''
'xsession.windowManager.i3.config.[window|floating].titlebar' and
'wayland.windowManager.sway.config.[window|floating].titlebar' now default to 'true'.
'';
}
{
time = "2023-01-28T17:35:49+00:00";
message = ''
A new module is available: 'programs.papis'.
'';
}
{
time = "2023-01-30T10:39:11+00:00";
message = ''
A new module is available: 'programs.wlogout'.
'';
}
{
time = "2023-01-31T22:08:41+00:00";
message = ''
A new module is available: 'programs.rbenv'.
'';
}
{
time = "2023-02-02T20:49:05+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.autorandr'.
'';
}
]; ];
}; };
} }

View file

@ -202,7 +202,7 @@ in {
<citerefentry> <citerefentry>
<refentrytitle>nix.conf</refentrytitle> <refentrytitle>nix.conf</refentrytitle>
<manvolnum>5</manvolnum> <manvolnum>5</manvolnum>
</citerefentry> for avalaible options. </citerefentry> for available options.
The value declared here will be translated directly to the key-value pairs Nix expects. The value declared here will be translated directly to the key-value pairs Nix expects.
</para> </para>
<para> <para>

View file

@ -16,6 +16,7 @@ with lib;
"21.11" "21.11"
"22.05" "22.05"
"22.11" "22.11"
"23.05"
]; ];
description = '' description = ''
It is occasionally necessary for Home Manager to change It is occasionally necessary for Home Manager to change
@ -30,5 +31,39 @@ with lib;
conversion or moving files. conversion or moving files.
''; '';
}; };
home.version = {
full = mkOption {
internal = true;
readOnly = true;
type = types.str;
default = let
inherit (config.home.version) release revision;
suffix =
optionalString (revision != null) "+${substring 0 8 revision}";
in "${release}${suffix}";
example = "22.11+213a0629";
description = "The full Home Manager version.";
};
release = mkOption {
internal = true;
readOnly = true;
type = types.str;
default = fileContents ../../.release;
example = "22.11";
description = "The Home Manager release.";
};
revision = mkOption {
internal = true;
type = types.nullOr types.str;
default = let gitRepo = "${toString ./../..}/.git";
in if pathIsGitRepo gitRepo then commitIdFromGitRepo gitRepo else null;
description = ''
The Git revision from which this Home Manager configuration was built.
'';
};
};
}; };
} }

View file

@ -33,50 +33,66 @@ in {
# https://gitlab.freedesktop.org/xdg/xdg-user-dirs/blob/master/man/user-dirs.dirs.xml # https://gitlab.freedesktop.org/xdg/xdg-user-dirs/blob/master/man/user-dirs.dirs.xml
desktop = mkOption { desktop = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Desktop"; default = "${config.home.homeDirectory}/Desktop";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Desktop"'';
description = "The Desktop directory."; description = "The Desktop directory.";
}; };
documents = mkOption { documents = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Documents"; default = "${config.home.homeDirectory}/Documents";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Documents"'';
description = "The Documents directory."; description = "The Documents directory.";
}; };
download = mkOption { download = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Downloads"; default = "${config.home.homeDirectory}/Downloads";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Downloads"'';
description = "The Downloads directory."; description = "The Downloads directory.";
}; };
music = mkOption { music = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Music"; default = "${config.home.homeDirectory}/Music";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Music"'';
description = "The Music directory."; description = "The Music directory.";
}; };
pictures = mkOption { pictures = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Pictures"; default = "${config.home.homeDirectory}/Pictures";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Pictures"'';
description = "The Pictures directory."; description = "The Pictures directory.";
}; };
publicShare = mkOption { publicShare = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Public"; default = "${config.home.homeDirectory}/Public";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Public"'';
description = "The Public share directory."; description = "The Public share directory.";
}; };
templates = mkOption { templates = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Templates"; default = "${config.home.homeDirectory}/Templates";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Templates"'';
description = "The Templates directory."; description = "The Templates directory.";
}; };
videos = mkOption { videos = mkOption {
type = with types; coercedTo path toString str; type = with types; nullOr (coercedTo path toString str);
default = "$HOME/Videos"; default = "${config.home.homeDirectory}/Videos";
defaultText =
literalExpression ''"''${config.home.homeDirectory}/Videos"'';
description = "The Videos directory."; description = "The Videos directory.";
}; };
@ -86,7 +102,7 @@ in {
defaultText = literalExpression "{ }"; defaultText = literalExpression "{ }";
example = literalExpression '' example = literalExpression ''
{ {
XDG_MISC_DIR = "$HOME/Misc"; XDG_MISC_DIR = "''${config.home.homeDirectory}/Misc";
} }
''; '';
description = "Other user directories."; description = "Other user directories.";
@ -97,7 +113,7 @@ in {
}; };
config = let config = let
directories = { directories = (filterAttrs (n: v: !isNull v) {
XDG_DESKTOP_DIR = cfg.desktop; XDG_DESKTOP_DIR = cfg.desktop;
XDG_DOCUMENTS_DIR = cfg.documents; XDG_DOCUMENTS_DIR = cfg.documents;
XDG_DOWNLOAD_DIR = cfg.download; XDG_DOWNLOAD_DIR = cfg.download;
@ -106,7 +122,7 @@ in {
XDG_PUBLICSHARE_DIR = cfg.publicShare; XDG_PUBLICSHARE_DIR = cfg.publicShare;
XDG_TEMPLATES_DIR = cfg.templates; XDG_TEMPLATES_DIR = cfg.templates;
XDG_VIDEOS_DIR = cfg.videos; XDG_VIDEOS_DIR = cfg.videos;
} // cfg.extraConfig; }) // cfg.extraConfig;
in mkIf cfg.enable { in mkIf cfg.enable {
assertions = assertions =
[ (hm.assertions.assertPlatform "xdg.userDirs" pkgs platforms.linux) ]; [ (hm.assertions.assertPlatform "xdg.userDirs" pkgs platforms.linux) ];

102
modules/misc/xfconf.nix Normal file
View file

@ -0,0 +1,102 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.xfconf;
withType = v:
if builtins.isBool v then [
"-t"
"bool"
"-s"
(if v then "true" else "false")
] else if builtins.isInt v then [
"-t"
"int"
"-s"
(toString v)
] else if builtins.isFloat v then [
"-t"
"double"
"-s"
(toString v)
] else if builtins.isString v then [
"-t"
"string"
"-s"
v
] else if builtins.isList v then
[ "-a" ] ++ concatMap withType v
else
throw "unexpected xfconf type: ${builtins.typeOf v}";
in {
meta.maintainers = [ maintainers.chuangzhu ];
options.xfconf = {
enable = mkOption {
type = types.bool;
default = true;
visible = false;
description = ''
Whether to enable Xfconf settings.
</para><para>
Note, if you use NixOS then you must add
<code>programs.xfconf.enable = true</code>
to your system configuration. Otherwise you will see a systemd error
message when your configuration is activated.
'';
};
settings = mkOption {
type = with types;
attrsOf (attrsOf (oneOf [
bool
int
float
str
(listOf (oneOf [ bool int float str ]))
])) // {
description = "xfconf settings";
};
default = { };
example = literalExpression ''
{
xfce4-session = {
"startup/ssh-agent/enabled" = false;
"general/LockCommand" = "''${pkgs.lightdm}/bin/dm-tool lock";
};
xfce4-desktop = {
"backdrop/screen0/monitorLVDS-1/workspace0/last-image" =
"''${pkgs.nixos-artwork.wallpapers.stripes-logo.gnomeFilePath}";
};
}
'';
description = ''
Settings to write to the Xfconf configuration system.
'';
};
};
config = mkIf (cfg.enable && cfg.settings != { }) {
assertions =
[ (hm.assertions.assertPlatform "xfconf" pkgs platforms.linux) ];
home.activation.xfconfSettings = hm.dag.entryAfter [ "installPackages" ]
(let
mkCommand = channel: property: value: ''
$DRY_RUN_CMD ${pkgs.xfce.xfconf}/bin/xfconf-query \
${
escapeShellArgs
([ "-n" "-c" channel "-p" "/${property}" ] ++ withType value)
}
'';
commands = mapAttrsToList
(channel: properties: mapAttrsToList (mkCommand channel) properties)
cfg.settings;
in concatMapStrings concatStrings commands);
};
}

View file

@ -43,6 +43,7 @@ let
./misc/xdg-system-dirs.nix ./misc/xdg-system-dirs.nix
./misc/xdg-user-dirs.nix ./misc/xdg-user-dirs.nix
./misc/xdg.nix ./misc/xdg.nix
./misc/xfconf.nix
./programs/abook.nix ./programs/abook.nix
./programs/aerc.nix ./programs/aerc.nix
./programs/afew.nix ./programs/afew.nix
@ -57,6 +58,7 @@ let
./programs/bashmount.nix ./programs/bashmount.nix
./programs/bat.nix ./programs/bat.nix
./programs/beets.nix ./programs/beets.nix
./programs/borgmatic.nix
./programs/bottom.nix ./programs/bottom.nix
./programs/broot.nix ./programs/broot.nix
./programs/browserpass.nix ./programs/browserpass.nix
@ -65,6 +67,7 @@ let
./programs/command-not-found/command-not-found.nix ./programs/command-not-found/command-not-found.nix
./programs/dircolors.nix ./programs/dircolors.nix
./programs/direnv.nix ./programs/direnv.nix
./programs/discocss.nix
./programs/eclipse.nix ./programs/eclipse.nix
./programs/emacs.nix ./programs/emacs.nix
./programs/eww.nix ./programs/eww.nix
@ -82,6 +85,7 @@ let
./programs/gnome-terminal.nix ./programs/gnome-terminal.nix
./programs/go.nix ./programs/go.nix
./programs/gpg.nix ./programs/gpg.nix
./programs/havoc.nix
./programs/helix.nix ./programs/helix.nix
./programs/hexchat.nix ./programs/hexchat.nix
./programs/himalaya.nix ./programs/himalaya.nix
@ -96,16 +100,19 @@ let
./programs/java.nix ./programs/java.nix
./programs/jq.nix ./programs/jq.nix
./programs/just.nix ./programs/just.nix
./programs/k9s.nix
./programs/kakoune.nix ./programs/kakoune.nix
./programs/keychain.nix ./programs/keychain.nix
./programs/kitty.nix ./programs/kitty.nix
./programs/kodi.nix ./programs/kodi.nix
./programs/lazygit.nix ./programs/lazygit.nix
./programs/ledger.nix
./programs/less.nix ./programs/less.nix
./programs/lesspipe.nix ./programs/lesspipe.nix
./programs/lf.nix ./programs/lf.nix
./programs/librewolf.nix ./programs/librewolf.nix
./programs/lieer.nix ./programs/lieer.nix
./programs/looking-glass-client.nix
./programs/lsd.nix ./programs/lsd.nix
./programs/man.nix ./programs/man.nix
./programs/mangohud.nix ./programs/mangohud.nix
@ -134,14 +141,17 @@ let
./programs/obs-studio.nix ./programs/obs-studio.nix
./programs/octant.nix ./programs/octant.nix
./programs/offlineimap.nix ./programs/offlineimap.nix
./programs/oh-my-posh.nix
./programs/opam.nix ./programs/opam.nix
./programs/pandoc.nix ./programs/pandoc.nix
./programs/papis.nix
./programs/password-store.nix ./programs/password-store.nix
./programs/pazi.nix ./programs/pazi.nix
./programs/pet.nix ./programs/pet.nix
./programs/pidgin.nix ./programs/pidgin.nix
./programs/pistol.nix ./programs/pistol.nix
./programs/piston-cli.nix ./programs/piston-cli.nix
./programs/pls.nix
./programs/powerline-go.nix ./programs/powerline-go.nix
./programs/pubs.nix ./programs/pubs.nix
./programs/pylint.nix ./programs/pylint.nix
@ -167,19 +177,24 @@ let
./programs/terminator.nix ./programs/terminator.nix
./programs/termite.nix ./programs/termite.nix
./programs/texlive.nix ./programs/texlive.nix
./programs/thunderbird.nix
./programs/timidity.nix ./programs/timidity.nix
./programs/tint2.nix ./programs/tint2.nix
./programs/tiny.nix ./programs/tiny.nix
./programs/tmate.nix
./programs/tmux.nix ./programs/tmux.nix
./programs/topgrade.nix ./programs/topgrade.nix
./programs/urxvt.nix ./programs/urxvt.nix
./programs/vim.nix ./programs/vim.nix
./programs/vim-vint.nix
./programs/vscode.nix ./programs/vscode.nix
./programs/vscode/haskell.nix ./programs/vscode/haskell.nix
./programs/pywal.nix ./programs/pywal.nix
./programs/rbenv.nix
./programs/watson.nix ./programs/watson.nix
./programs/waybar.nix ./programs/waybar.nix
./programs/wezterm.nix ./programs/wezterm.nix
./programs/wlogout.nix
./programs/xmobar.nix ./programs/xmobar.nix
./programs/yt-dlp.nix ./programs/yt-dlp.nix
./programs/z-lua.nix ./programs/z-lua.nix
@ -189,11 +204,15 @@ let
./programs/zplug.nix ./programs/zplug.nix
./programs/zsh.nix ./programs/zsh.nix
./programs/zsh/prezto.nix ./programs/zsh/prezto.nix
./services/autorandr.nix
./services/barrier.nix ./services/barrier.nix
./services/betterlockscreen.nix ./services/betterlockscreen.nix
./services/blueman-applet.nix ./services/blueman-applet.nix
./services/borgmatic.nix
./services/cachix-agent.nix
./services/caffeine.nix ./services/caffeine.nix
./services/cbatticon.nix ./services/cbatticon.nix
./services/clipman.nix
./services/clipmenu.nix ./services/clipmenu.nix
./services/devilspie2.nix ./services/devilspie2.nix
./services/dropbox.nix ./services/dropbox.nix
@ -226,6 +245,7 @@ let
./services/lorri.nix ./services/lorri.nix
./services/mako.nix ./services/mako.nix
./services/mbsync.nix ./services/mbsync.nix
./services/megasync.nix
./services/mopidy.nix ./services/mopidy.nix
./services/mpd.nix ./services/mpd.nix
./services/mpdris2.nix ./services/mpdris2.nix
@ -256,6 +276,7 @@ let
./services/redshift-gammastep/gammastep.nix ./services/redshift-gammastep/gammastep.nix
./services/redshift-gammastep/redshift.nix ./services/redshift-gammastep/redshift.nix
./services/rsibreak.nix ./services/rsibreak.nix
./services/safeeyes.nix
./services/screen-locker.nix ./services/screen-locker.nix
./services/sctd.nix ./services/sctd.nix
./services/spotifyd.nix ./services/spotifyd.nix
@ -276,6 +297,7 @@ let
./services/volnoti.nix ./services/volnoti.nix
./services/window-managers/awesome.nix ./services/window-managers/awesome.nix
./services/window-managers/bspwm/default.nix ./services/window-managers/bspwm/default.nix
./services/window-managers/fluxbox.nix
./services/window-managers/herbstluftwm.nix ./services/window-managers/herbstluftwm.nix
./services/window-managers/i3-sway/i3.nix ./services/window-managers/i3-sway/i3.nix
./services/window-managers/i3-sway/sway.nix ./services/window-managers/i3-sway/sway.nix

124
modules/po/da.po Normal file
View file

@ -0,0 +1,124 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Home Manager contributors
# This file is distributed under the same license as the Home Manager Modules package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2022-09-19 18:22+0000\n"
"Last-Translator: cafkafk <christina@cafkafk.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/home-manager/"
"modules/da/>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: modules/files.nix:233
msgid "Creating home file links in %s"
msgstr "Skaber hjemme fil links i %s"
#: modules/files.nix:246
msgid "Cleaning up orphan links from %s"
msgstr "Opryder forældreløse links fra %s"
#: modules/files.nix:262
msgid "Creating profile generation %s"
msgstr "Kreere profil generation %s"
#: modules/files.nix:276
msgid "No change so reusing latest profile generation %s"
msgstr "Ingen ændring så genbrug den seneste profil generation %s"
#: modules/home-environment.nix:607
msgid ""
"Oops, Nix failed to install your new Home Manager profile!\n"
"\n"
"Perhaps there is a conflict with a package that was installed using\n"
"\"%s\"? Try running\n"
"\n"
" %s\n"
"\n"
"and if there is a conflicting package you can remove it with\n"
"\n"
" %s\n"
"\n"
"Then try activating your Home Manager configuration again."
msgstr ""
"Åh nej, Nix fejlede i at installere din nye Home Manager profil! \n"
" \n"
"Måske er der en konflikt med en pakke der blev installeret gennem\n"
"\"%s\"? Prøv at køre \n"
"\n"
" %s\n"
" \n"
"og hvis der er en pakke konflikt, kan du fjerne pakken med \n"
" \n"
" %s\n"
" \n"
"og så prøve at genaktivere din Home Manager konfiguration igen."
#: modules/home-environment.nix:639
msgid "Activating %s"
msgstr "Aktivere %s"
#: modules/lib-bash/activation-init.sh:31
msgid "Sanity checking oldGenNum and oldGenPath"
msgstr "Tjekker fornuften af oldGenNum and oldGenPath"
#: modules/lib-bash/activation-init.sh:34
msgid ""
"The previous generation number and path are in conflict! These\n"
"must be either both empty or both set but are now set to\n"
"\n"
" '%s' and '%s'\n"
"\n"
"If you don't mind losing previous profile generations then\n"
"the easiest solution is probably to run\n"
"\n"
" rm %s/home-manager*\n"
" rm %s/current-home\n"
"\n"
"and trying home-manager switch again. Good luck!"
msgstr ""
"Den forrige generations nummer og sti er i konflikt! Disse\n"
"skal enten begge være tomme, eller begge være sat, men er nu sat til \n"
" \n"
" '%s' and '%s'\n"
" \n"
"Hvis du ikke har noget mod at miste tidligere profil generationer så\n"
"er den nemmeste løsning nok at køre \n"
" \n"
" rm %s/home-manager*\n"
" rm %s/current-home\n"
" \n"
"og så prøve at køre home-manager switch igen. Held og lykke!"
#: modules/lib-bash/activation-init.sh:51
msgid "Starting Home Manager activation"
msgstr "Starter Home Manager aktivation"
#: modules/lib-bash/activation-init.sh:55
msgid "Sanity checking Nix"
msgstr "Udføre fornuft check af Nix"
#: modules/lib-bash/activation-init.sh:61
msgid "This is a dry run"
msgstr "Dette er en tør kørsel"
#: modules/lib-bash/activation-init.sh:64
msgid "This is a live run"
msgstr "Dette er en direkte kørsel"
#: modules/lib-bash/activation-init.sh:69
msgid "Using Nix version: %s"
msgstr "Bruger Nix version: %s"
#: modules/lib-bash/activation-init.sh:72
msgid "Activation variables:"
msgstr "Aktivere variable:"

View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n" "Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2022-04-20 18:18+0000\n" "PO-Revision-Date: 2022-12-15 08:50+0000\n"
"Last-Translator: Frankie McEyes <mceyes@protonmail.com>\n" "Last-Translator: Walter Franzini <walter.franzini@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/home-manager/" "Language-Team: Italian <https://hosted.weblate.org/projects/home-manager/"
"modules/it/>\n" "modules/it/>\n"
"Language: it\n" "Language: it\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12-dev\n" "X-Generator: Weblate 4.15-dev\n"
#: modules/files.nix:233 #: modules/files.nix:233
msgid "Creating home file links in %s" msgid "Creating home file links in %s"
@ -57,7 +57,7 @@ msgstr "Attivando %s"
#: modules/lib-bash/activation-init.sh:31 #: modules/lib-bash/activation-init.sh:31
msgid "Sanity checking oldGenNum and oldGenPath" msgid "Sanity checking oldGenNum and oldGenPath"
msgstr "" msgstr "Controllando oldGenNum e oldGenPath"
#: modules/lib-bash/activation-init.sh:34 #: modules/lib-bash/activation-init.sh:34
msgid "" msgid ""

97
modules/po/lt.po Normal file
View file

@ -0,0 +1,97 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Home Manager contributors
# This file is distributed under the same license as the Home Manager Modules package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: modules/files.nix:233
msgid "Creating home file links in %s"
msgstr ""
#: modules/files.nix:246
msgid "Cleaning up orphan links from %s"
msgstr ""
#: modules/files.nix:262
msgid "Creating profile generation %s"
msgstr ""
#: modules/files.nix:276
msgid "No change so reusing latest profile generation %s"
msgstr ""
#: modules/home-environment.nix:607
msgid ""
"Oops, Nix failed to install your new Home Manager profile!\n"
"\n"
"Perhaps there is a conflict with a package that was installed using\n"
"\"%s\"? Try running\n"
"\n"
" %s\n"
"\n"
"and if there is a conflicting package you can remove it with\n"
"\n"
" %s\n"
"\n"
"Then try activating your Home Manager configuration again."
msgstr ""
#: modules/home-environment.nix:639
msgid "Activating %s"
msgstr ""
#: modules/lib-bash/activation-init.sh:31
msgid "Sanity checking oldGenNum and oldGenPath"
msgstr ""
#: modules/lib-bash/activation-init.sh:34
msgid ""
"The previous generation number and path are in conflict! These\n"
"must be either both empty or both set but are now set to\n"
"\n"
" '%s' and '%s'\n"
"\n"
"If you don't mind losing previous profile generations then\n"
"the easiest solution is probably to run\n"
"\n"
" rm %s/home-manager*\n"
" rm %s/current-home\n"
"\n"
"and trying home-manager switch again. Good luck!"
msgstr ""
#: modules/lib-bash/activation-init.sh:51
msgid "Starting Home Manager activation"
msgstr ""
#: modules/lib-bash/activation-init.sh:55
msgid "Sanity checking Nix"
msgstr ""
#: modules/lib-bash/activation-init.sh:61
msgid "This is a dry run"
msgstr ""
#: modules/lib-bash/activation-init.sh:64
msgid "This is a live run"
msgstr ""
#: modules/lib-bash/activation-init.sh:69
msgid "Using Nix version: %s"
msgstr ""
#: modules/lib-bash/activation-init.sh:72
msgid "Activation variables:"
msgstr ""

View file

@ -8,29 +8,33 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n" "Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2022-11-16 13:47+0000\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Pablo Bollansee <pablo.bollansee@gmail.com>\n"
"Language-Team: none\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/home-manager/"
"modules/nl/>\n"
"Language: nl\n" "Language: nl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15-dev\n"
#: modules/files.nix:233 #: modules/files.nix:233
msgid "Creating home file links in %s" msgid "Creating home file links in %s"
msgstr "" msgstr "Home-bestandskoppelingen aan het maken in %s"
#: modules/files.nix:246 #: modules/files.nix:246
msgid "Cleaning up orphan links from %s" msgid "Cleaning up orphan links from %s"
msgstr "" msgstr "Wees links van %s aan het opkuisen"
#: modules/files.nix:262 #: modules/files.nix:262
msgid "Creating profile generation %s" msgid "Creating profile generation %s"
msgstr "" msgstr "Profiel generatie %s aan het maken"
#: modules/files.nix:276 #: modules/files.nix:276
msgid "No change so reusing latest profile generation %s" msgid "No change so reusing latest profile generation %s"
msgstr "" msgstr ""
"Geen veranderingen dus de laatste profiel generatie %s wordt hergebruikt"
#: modules/home-environment.nix:607 #: modules/home-environment.nix:607
msgid "" msgid ""
@ -47,14 +51,27 @@ msgid ""
"\n" "\n"
"Then try activating your Home Manager configuration again." "Then try activating your Home Manager configuration again."
msgstr "" msgstr ""
"Oei, het is Nix niet gelukt om je nieuwe Home Manager profiel te installeren!"
"\n"
"\n"
"Misschien is er een conflict met het pakket dat geïnstalleerd was met\n"
"\"%s\"? Probeer het volgende te draaien\n"
"\n"
" %s\n"
"\n"
"en als er een pakket is dat een conflict geeft kan je dat verwijderen met\n"
"\n"
" %s\n"
"\n"
"Probeer daarna je Home Manager configuratie opnieuw te activeren."
#: modules/home-environment.nix:639 #: modules/home-environment.nix:639
msgid "Activating %s" msgid "Activating %s"
msgstr "" msgstr "%s aan het activeren"
#: modules/lib-bash/activation-init.sh:31 #: modules/lib-bash/activation-init.sh:31
msgid "Sanity checking oldGenNum and oldGenPath" msgid "Sanity checking oldGenNum and oldGenPath"
msgstr "" msgstr "oldGenNum en oldGenPath aan het sanity checken"
#: modules/lib-bash/activation-init.sh:34 #: modules/lib-bash/activation-init.sh:34
msgid "" msgid ""
@ -71,27 +88,39 @@ msgid ""
"\n" "\n"
"and trying home-manager switch again. Good luck!" "and trying home-manager switch again. Good luck!"
msgstr "" msgstr ""
"Er is een conflict met de generatie nummer en pad! Deze\n"
"moeten beide leeg of beide ingevuld zijn, maar zijn nu\n"
"\n"
" '%s' en '%s'\n"
"\n"
"Als je het niet erg vindt je vorige profiel generaties te verliezen dan\n"
"is waarschijnlijk de eenvoudigste oplossing om het volgende te draaien\n"
"\n"
" rm %s/home-manager*\n"
" rm %s/current-home\n"
"\n"
"en dan opnieuw 'home-manager switch' te proberen. Veel succes!"
#: modules/lib-bash/activation-init.sh:51 #: modules/lib-bash/activation-init.sh:51
msgid "Starting Home Manager activation" msgid "Starting Home Manager activation"
msgstr "" msgstr "Home manager activatie aan het starten"
#: modules/lib-bash/activation-init.sh:55 #: modules/lib-bash/activation-init.sh:55
msgid "Sanity checking Nix" msgid "Sanity checking Nix"
msgstr "" msgstr "Nix aan het sanity checken"
#: modules/lib-bash/activation-init.sh:61 #: modules/lib-bash/activation-init.sh:61
msgid "This is a dry run" msgid "This is a dry run"
msgstr "" msgstr "Dit is een oefening"
#: modules/lib-bash/activation-init.sh:64 #: modules/lib-bash/activation-init.sh:64
msgid "This is a live run" msgid "This is a live run"
msgstr "" msgstr "Dit is voor echt"
#: modules/lib-bash/activation-init.sh:69 #: modules/lib-bash/activation-init.sh:69
msgid "Using Nix version: %s" msgid "Using Nix version: %s"
msgstr "" msgstr "Nix versie %s wordt gebruikt"
#: modules/lib-bash/activation-init.sh:72 #: modules/lib-bash/activation-init.sh:72
msgid "Activation variables:" msgid "Activation variables:"
msgstr "" msgstr "Activatie variabelen:"

View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n" "Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2022-03-01 13:58+0000\n" "PO-Revision-Date: 2022-11-16 13:47+0000\n"
"Last-Translator: Anon Ymous <mivon27841@shackvine.com>\n" "Last-Translator: Jakub Janczak <kubek2k@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/home-manager/" "Language-Team: Polish <https://hosted.weblate.org/projects/home-manager/"
"modules/pl/>\n" "modules/pl/>\n"
"Language: pl\n" "Language: pl\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n" "|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.11.1-dev\n" "X-Generator: Weblate 4.15-dev\n"
#: modules/files.nix:233 #: modules/files.nix:233
msgid "Creating home file links in %s" msgid "Creating home file links in %s"
@ -51,6 +51,18 @@ msgid ""
"\n" "\n"
"Then try activating your Home Manager configuration again." "Then try activating your Home Manager configuration again."
msgstr "" msgstr ""
"Oops, Nix nie zdołał zainstalować twojego profilu Home Manager'a!\n"
"\n"
"Być może zaistniał konflikt z pakietem zainstalowanym przez\n"
"\"%s\"? Spróbuj uruchomić\n"
"\n"
" %s\n"
"\n"
"i jeśli istnieje konflikt możesz spróbować go rozwiązać uruchamiając\n"
"\n"
" %s\n"
"\n"
"Następnie spróbuj aktywować konfigurację Home Manager'a ponownie."
#: modules/home-environment.nix:639 #: modules/home-environment.nix:639
msgid "Activating %s" msgid "Activating %s"
@ -75,6 +87,18 @@ msgid ""
"\n" "\n"
"and trying home-manager switch again. Good luck!" "and trying home-manager switch again. Good luck!"
msgstr "" msgstr ""
"Istnieje konflikt pomiędzy poprzednią generacją i ścieżką! Powinny\n"
"być obie puste lub ustawione, a efektywnie są ustawione na:\n"
"\n"
" '%s' i '%s'\n"
"\n"
"Jeśli możesz sobie pozwolić na utratę poprzednich generacji,\n"
"możesz uruchomić\n"
"\n"
" rm %s/home-manager*\n"
" rm %s/current-home\n"
"\n"
"i spróbować uruchomić home-manager switch raz jeszcze. Powodzenia!"
#: modules/lib-bash/activation-init.sh:51 #: modules/lib-bash/activation-init.sh:51
msgid "Starting Home Manager activation" msgid "Starting Home Manager activation"
@ -85,19 +109,17 @@ msgid "Sanity checking Nix"
msgstr "Sprawdzanie poprawności Nix" msgstr "Sprawdzanie poprawności Nix"
#: modules/lib-bash/activation-init.sh:61 #: modules/lib-bash/activation-init.sh:61
#, fuzzy
msgid "This is a dry run" msgid "This is a dry run"
msgstr "To jest próbne wykonanie" msgstr "To jest wykonanie testowe"
#: modules/lib-bash/activation-init.sh:64 #: modules/lib-bash/activation-init.sh:64
msgid "This is a live run" msgid "This is a live run"
msgstr "" msgstr "To jest wykonanie właściwe"
#: modules/lib-bash/activation-init.sh:69 #: modules/lib-bash/activation-init.sh:69
msgid "Using Nix version: %s" msgid "Using Nix version: %s"
msgstr "Używając wersji Nix: %s" msgstr "Używając wersji Nix: %s"
#: modules/lib-bash/activation-init.sh:72 #: modules/lib-bash/activation-init.sh:72
#, fuzzy
msgid "Activation variables:" msgid "Activation variables:"
msgstr "Zmienne aktywacyjne:" msgstr "Zmienne aktywacyjne:"

View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n" "Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n" "Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2022-03-26 15:08+0100\n" "POT-Creation-Date: 2022-03-26 15:08+0100\n"
"PO-Revision-Date: 2021-12-29 08:48+0000\n" "PO-Revision-Date: 2023-01-08 11:50+0000\n"
"Last-Translator: WhiredPlanck <fungdaat31@outlook.com>\n" "Last-Translator: Eric Ho <eric913@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"home-manager/modules/zh_Hant/>\n" "home-manager/modules/zh_Hant/>\n"
"Language: zh_Hant\n" "Language: zh_Hant\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.10.1\n" "X-Generator: Weblate 4.15.1-dev\n"
#: modules/files.nix:233 #: modules/files.nix:233
msgid "Creating home file links in %s" msgid "Creating home file links in %s"
@ -50,6 +50,18 @@ msgid ""
"\n" "\n"
"Then try activating your Home Manager configuration again." "Then try activating your Home Manager configuration again."
msgstr "" msgstr ""
"糟糕Nix 未能安裝您的新 Home Manager 配置文件!\n"
"\n"
"也許這裏和使用 \"%s\" 安裝的包有衝突?\n"
"嘗試運行\n"
"\n"
" %s\n"
"\n"
"如果有衝突的包,你可以用\n"
"\n"
" %s\n"
"\n"
"來移除。然後嘗試再次啟用您的 Home Manager 配置。"
#: modules/home-environment.nix:639 #: modules/home-environment.nix:639
msgid "Activating %s" msgid "Activating %s"
@ -57,7 +69,7 @@ msgstr "正在啟用 %s"
#: modules/lib-bash/activation-init.sh:31 #: modules/lib-bash/activation-init.sh:31
msgid "Sanity checking oldGenNum and oldGenPath" msgid "Sanity checking oldGenNum and oldGenPath"
msgstr "" msgstr "正在進行 oldGenNum 和 oldGenPath 的完整性檢查"
#: modules/lib-bash/activation-init.sh:34 #: modules/lib-bash/activation-init.sh:34
msgid "" msgid ""
@ -81,20 +93,20 @@ msgstr "正在啟動 Home Manager 初始化程式"
#: modules/lib-bash/activation-init.sh:55 #: modules/lib-bash/activation-init.sh:55
msgid "Sanity checking Nix" msgid "Sanity checking Nix"
msgstr "" msgstr "正在進行 Nix 完整性檢查"
#: modules/lib-bash/activation-init.sh:61 #: modules/lib-bash/activation-init.sh:61
msgid "This is a dry run" msgid "This is a dry run"
msgstr "" msgstr "這是試運行"
#: modules/lib-bash/activation-init.sh:64 #: modules/lib-bash/activation-init.sh:64
msgid "This is a live run" msgid "This is a live run"
msgstr "" msgstr "這是在實際運行"
#: modules/lib-bash/activation-init.sh:69 #: modules/lib-bash/activation-init.sh:69
msgid "Using Nix version: %s" msgid "Using Nix version: %s"
msgstr "" msgstr "正在使用的 Nix 版本: %s"
#: modules/lib-bash/activation-init.sh:72 #: modules/lib-bash/activation-init.sh:72
msgid "Activation variables:" msgid "Activation variables:"
msgstr "" msgstr "啟用的變數:"

View file

@ -305,7 +305,7 @@ in {
DPI=144 DPI=144
;; ;;
*) *)
echo "Unknown profle: $AUTORANDR_CURRENT_PROFILE" echo "Unknown profile: $AUTORANDR_CURRENT_PROFILE"
exit 1 exit 1
esac esac

View file

@ -6,16 +6,15 @@ let
cfg = config.programs.bash; cfg = config.programs.bash;
writeBashScript = name: text: pkgs.writeTextFile { writeBashScript = name: text:
pkgs.writeTextFile {
inherit name text; inherit name text;
checkPhase = '' checkPhase = ''
${pkgs.stdenv.shellDryRun} "$target" ${pkgs.stdenv.shellDryRun} "$target"
''; '';
}; };
in in {
{
meta.maintainers = [ maintainers.rycee ]; meta.maintainers = [ maintainers.rycee ];
imports = [ imports = [
@ -70,20 +69,18 @@ in
}; };
historyControl = mkOption { historyControl = mkOption {
type = types.listOf (types.enum [ type =
"erasedups" types.listOf (types.enum [ "erasedups" "ignoredups" "ignorespace" ]);
"ignoredups" default = [ ];
"ignorespace"
]);
default = [];
description = "Controlling how commands are saved on the history list."; description = "Controlling how commands are saved on the history list.";
}; };
historyIgnore = mkOption { historyIgnore = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [ ];
example = [ "ls" "cd" "exit" ]; example = [ "ls" "cd" "exit" ];
description = "List of commands that should not be saved to the history list."; description =
"List of commands that should not be saved to the history list.";
}; };
shellOptions = mkOption { shellOptions = mkOption {
@ -103,10 +100,7 @@ in
# Warn if closing shell with running jobs. # Warn if closing shell with running jobs.
"checkjobs" "checkjobs"
]; ];
example = [ example = [ "extglob" "-cdspell" ];
"extglob"
"-cdspell"
];
description = '' description = ''
Shell options to set. Prefix an option with Shell options to set. Prefix an option with
<quote><literal>-</literal></quote> to unset. <quote><literal>-</literal></quote> to unset.
@ -114,7 +108,7 @@ in
}; };
sessionVariables = mkOption { sessionVariables = mkOption {
default = {}; default = { };
type = types.attrs; type = types.attrs;
example = { MAILCHECK = 30; }; example = { MAILCHECK = 30; };
description = '' description = ''
@ -123,7 +117,7 @@ in
}; };
shellAliases = mkOption { shellAliases = mkOption {
default = {}; default = { };
type = types.attrsOf types.str; type = types.attrsOf types.str;
example = literalExpression '' example = literalExpression ''
{ {
@ -175,36 +169,28 @@ in
}; };
}; };
config = ( config = let
let aliasesStr = concatStringsSep "\n"
aliasesStr = concatStringsSep "\n" ( (mapAttrsToList (k: v: "alias ${k}=${escapeShellArg v}")
mapAttrsToList (k: v: "alias ${k}=${escapeShellArg v}") cfg.shellAliases cfg.shellAliases);
);
shoptsStr = let shoptsStr = let switch = v: if hasPrefix "-" v then "-u" else "-s";
switch = v: if hasPrefix "-" v then "-u" else "-s"; in concatStringsSep "\n"
in concatStringsSep "\n" ( (map (v: "shopt ${switch v} ${removePrefix "-" v}") cfg.shellOptions);
map (v: "shopt ${switch v} ${removePrefix "-" v}") cfg.shellOptions
);
sessionVarsStr = config.lib.shell.exportAll cfg.sessionVariables; sessionVarsStr = config.lib.shell.exportAll cfg.sessionVariables;
historyControlStr = historyControlStr = concatStringsSep "\n"
concatStringsSep "\n" (mapAttrsToList (n: v: "${n}=${v}") ( (mapAttrsToList (n: v: "${n}=${v}") ({
{
HISTFILESIZE = toString cfg.historyFileSize; HISTFILESIZE = toString cfg.historyFileSize;
HISTSIZE = toString cfg.historySize; HISTSIZE = toString cfg.historySize;
} } // optionalAttrs (cfg.historyFile != null) {
// optionalAttrs (cfg.historyFile != null) { HISTFILE = ''"${cfg.historyFile}"'';
HISTFILE = "\"${cfg.historyFile}\""; } // optionalAttrs (cfg.historyControl != [ ]) {
}
// optionalAttrs (cfg.historyControl != []) {
HISTCONTROL = concatStringsSep ":" cfg.historyControl; HISTCONTROL = concatStringsSep ":" cfg.historyControl;
} } // optionalAttrs (cfg.historyIgnore != [ ]) {
// optionalAttrs (cfg.historyIgnore != []) { HISTIGNORE = escapeShellArg (concatStringsSep ":" cfg.historyIgnore);
HISTIGNORE = concatStringsSep ":" cfg.historyIgnore; }));
}
));
in mkIf cfg.enable { in mkIf cfg.enable {
home.file.".bash_profile".source = writeBashScript "bash_profile" '' home.file.".bash_profile".source = writeBashScript "bash_profile" ''
# include .profile if it exists # include .profile if it exists
@ -249,6 +235,5 @@ in
home.file.".bash_logout" = mkIf (cfg.logoutExtra != "") { home.file.".bash_logout" = mkIf (cfg.logoutExtra != "") {
source = writeBashScript "bash_logout" cfg.logoutExtra; source = writeBashScript "bash_logout" cfg.logoutExtra;
}; };
} };
);
} }

View file

@ -30,6 +30,16 @@ in {
''; '';
}; };
extraPackages = mkOption {
type = types.listOf types.package;
default = [ ];
example = literalExpression
"with pkgs.bat-extras; [ batdiff batman batgrep batwatch ];";
description = ''
Additional bat packages to install.
'';
};
themes = mkOption { themes = mkOption {
type = types.attrsOf types.lines; type = types.attrsOf types.lines;
default = { }; default = { };
@ -51,7 +61,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ pkgs.bat ]; home.packages = [ pkgs.bat ] ++ cfg.extraPackages;
xdg.configFile = mkMerge ([{ xdg.configFile = mkMerge ([{
"bat/config" = "bat/config" =

View file

@ -0,0 +1,196 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.borgmatic;
mkNullableOption = args:
lib.mkOption (args // {
type = lib.types.nullOr args.type;
default = null;
});
mkRetentionOption = frequency:
mkNullableOption {
type = types.int;
description =
"Number of ${frequency} archives to keep. Use -1 for no limit.";
example = 3;
};
extraConfigOption = mkOption {
type = with types; attrsOf (oneOf [ str bool path int (listOf str) ]);
default = { };
description = "Extra settings.";
};
consistencyCheckModule = types.submodule {
options = {
name = mkOption {
type = types.enum [ "repository" "archives" "data" "extract" ];
description = "Name of consistency check to run.";
example = "repository";
};
frequency = mkNullableOption {
type = types.strMatching "([[:digit:]]+ .*)|always";
description = "Frequency of this type of check";
example = "2 weeks";
};
};
};
configModule = types.submodule {
options = {
location = {
sourceDirectories = mkOption {
type = types.listOf types.str;
description = "Directories to backup.";
example = literalExpression "[config.home.homeDirectory]";
};
repositories = mkOption {
type = types.listOf types.str;
description = "Paths to repositories.";
example =
literalExpression ''["ssh://myuser@myrepo.myserver.com/./repo"]'';
};
extraConfig = extraConfigOption;
};
storage = {
encryptionPasscommand = mkNullableOption {
type = types.str;
description = "Command writing the passphrase to standard output.";
example =
literalExpression ''"''${pkgs.password-store}/bin/pass borg-repo"'';
};
extraConfig = extraConfigOption;
};
retention = {
keepWithin = mkNullableOption {
type = types.strMatching "[[:digit:]]+[Hdwmy]";
description = "Keep all archives within this time interval.";
example = "2d";
};
keepSecondly = mkRetentionOption "secondly";
keepMinutely = mkRetentionOption "minutely";
keepHourly = mkRetentionOption "hourly";
keepDaily = mkRetentionOption "daily";
keepWeekly = mkRetentionOption "weekly";
keepMonthly = mkRetentionOption "monthly";
keepYearly = mkRetentionOption "yearly";
extraConfig = extraConfigOption;
};
consistency = {
checks = mkOption {
type = types.listOf consistencyCheckModule;
default = [ ];
description = "Consistency checks to run";
example = literalExpression ''
[
{
name = "repository";
frequency = "2 weeks";
}
{
name = "archives";
frequency = "4 weeks";
}
{
name = "data";
frequency = "6 weeks";
}
{
name = "extract";
frequency = "6 weeks";
}
];
'';
};
extraConfig = extraConfigOption;
};
};
};
removeNullValues = attrSet: filterAttrs (key: value: value != null) attrSet;
writeConfig = config:
generators.toYAML { } {
location = removeNullValues {
source_directories = config.location.sourceDirectories;
repositories = config.location.repositories;
} // config.location.extraConfig;
storage = removeNullValues {
encryption_passcommand = config.storage.encryptionPasscommand;
} // config.storage.extraConfig;
retention = removeNullValues {
keep_within = config.retention.keepWithin;
keep_secondly = config.retention.keepSecondly;
keep_minutely = config.retention.keepMinutely;
keep_hourly = config.retention.keepHourly;
keep_daily = config.retention.keepDaily;
keep_weekly = config.retention.keepWeekly;
keep_monthly = config.retention.keepMonthly;
keep_yearly = config.retention.keepYearly;
} // config.retention.extraConfig;
consistency = removeNullValues { checks = config.consistency.checks; }
// config.consistency.extraConfig;
};
in {
meta.maintainers = [ maintainers.DamienCassou ];
options = {
programs.borgmatic = {
enable = mkEnableOption "Borgmatic";
package = mkPackageOption pkgs "borgmatic" { };
backups = mkOption {
type = types.attrsOf configModule;
description = ''
Borgmatic allows for several named backup configurations,
each with its own source directories and repositories.
'';
example = literalExpression ''
{
personal = {
location = {
sourceDirectories = [ "/home/me/personal" ];
repositories = [ "ssh://myuser@myserver.com/./personal-repo" ];
};
};
work = {
location = {
sourceDirectories = [ "/home/me/work" ];
repositories = [ "ssh://myuser@myserver.com/./work-repo" ];
};
};
};
'';
};
};
};
config = mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "programs.borgmatic" pkgs
lib.platforms.linux)
];
xdg.configFile = with lib.attrsets;
mapAttrs' (configName: config:
nameValuePair ("borgmatic.d/" + configName + ".yaml") {
text = writeConfig config;
}) cfg.backups;
home.packages = [ cfg.package ];
};
}

View file

@ -8,65 +8,15 @@ let
tomlFormat = pkgs.formats.toml { }; tomlFormat = pkgs.formats.toml { };
brootConf = { settingsModule = {
verbs = cfg.verbs; freeformType = tomlFormat.type;
skin = cfg.skin;
modal = cfg.modal;
};
in {
meta.maintainers = [ hm.maintainers.aheaume ];
options.programs.broot = {
enable = mkEnableOption "Broot, a better way to navigate directories";
enableBashIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Bash integration.
'';
};
enableZshIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Zsh integration.
'';
};
enableFishIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Fish integration.
'';
};
options = {
modal = mkEnableOption "modal (vim) mode"; modal = mkEnableOption "modal (vim) mode";
verbs = mkOption { verbs = mkOption {
type = with types; listOf (attrsOf (either bool str)); type = with types; listOf (attrsOf (either bool str));
default = [ default = [ ];
{
invocation = "p";
execution = ":parent";
}
{
invocation = "edit";
shortcut = "e";
execution = "$EDITOR {file}";
}
{
invocation = "create {subpath}";
execution = "$EDITOR {directory}/{subpath}";
}
{
invocation = "view";
execution = "less {file}";
}
];
example = literalExpression '' example = literalExpression ''
[ [
{ invocation = "p"; execution = ":parent"; } { invocation = "p"; execution = ":parent"; }
@ -75,7 +25,7 @@ in {
{ invocation = "view"; execution = "less {file}"; } { invocation = "view"; execution = "less {file}"; }
{ {
invocation = "blop {name}\\.{type}"; invocation = "blop {name}\\.{type}";
execution = "/bin/mkdir {parent}/{type} && /usr/bin/nvim {parent}/{type}/{name}.{type}"; execution = "mkdir {parent}/{type} && ''${pkgs.neovim}/bin/nvim {parent}/{type}/{name}.{type}";
from_shell = true; from_shell = true;
} }
] ]
@ -121,13 +71,6 @@ in {
''; '';
}; };
package = mkOption {
type = types.package;
default = pkgs.broot;
defaultText = literalExpression "pkgs.broot";
description = "Package providing broot";
};
skin = mkOption { skin = mkOption {
type = types.attrsOf types.str; type = types.attrsOf types.str;
default = { }; default = { };
@ -184,93 +127,117 @@ in {
''; '';
}; };
}; };
};
shellInit = shell:
# Using mkAfter to make it more likely to appear after other
# manipulations of the prompt.
mkAfter ''
source ${
pkgs.runCommand "br.${shell}" { nativeBuildInputs = [ cfg.package ]; }
"broot --print-shell-function ${shell} > $out"
}
'';
in {
meta.maintainers = [ hm.maintainers.aheaume ];
imports = [
(mkRenamedOptionModule [ "programs" "broot" "modal" ] [
"programs"
"broot"
"settings"
"modal"
])
(mkRenamedOptionModule [ "programs" "broot" "verbs" ] [
"programs"
"broot"
"settings"
"verbs"
])
(mkRenamedOptionModule [ "programs" "broot" "skin" ] [
"programs"
"broot"
"settings"
"skin"
])
];
options.programs.broot = {
enable = mkEnableOption "Broot, a better way to navigate directories";
enableBashIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Bash integration.
'';
};
enableZshIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Zsh integration.
'';
};
enableFishIntegration = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable Fish integration.
'';
};
package = mkOption {
type = types.package;
default = pkgs.broot;
defaultText = literalExpression "pkgs.broot";
description = "Package providing broot";
};
settings = mkOption {
type = types.submodule settingsModule;
default = { };
description = "Verbatim config entries";
};
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ cfg.package ]; home.packages = [ cfg.package ];
xdg.configFile."broot/conf.toml".source = xdg.configFile."broot" = {
tomlFormat.generate "broot-config" brootConf; recursive = true;
source = pkgs.symlinkJoin {
name = "xdg.configFile.broot";
paths = [
(pkgs.writeTextDir "conf.toml" (builtins.readFile
(tomlFormat.generate "broot-config" cfg.settings)))
# Copy all files under /resources/default-conf
"${cfg.package.src}/resources/default-conf"
# Dummy file to prevent broot from trying to reinstall itself # Dummy file to prevent broot from trying to reinstall itself
xdg.configFile."broot/launcher/installed-v1".text = ""; (pkgs.writeTextDir "launcher/installed-v1" "")
];
programs.bash.initExtra = mkIf cfg.enableBashIntegration ( # Remove conf.hjson, whose content has been merged into programs.broot.settings
# Using mkAfter to make it more likely to appear after other postBuild = ''
# manipulations of the prompt. rm $out/conf.hjson
mkAfter ''
# This script was automatically generated by the broot function
# More information can be found in https://github.com/Canop/broot
# This function starts broot and executes the command
# it produces, if any.
# It's needed because some shell commands, like `cd`,
# have no useful effect if executed in a subshell.
function br {
f=$(mktemp)
(
set +e
broot --outcmd "$f" "$@"
code=$?
if [ "$code" != 0 ]; then
rm -f "$f"
exit "$code"
fi
)
code=$?
if [ "$code" != 0 ]; then
return "$code"
fi
d=$(cat "$f")
rm -f "$f"
eval "$d"
}
'');
programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
# This script was automatically generated by the broot function
# More information can be found in https://github.com/Canop/broot
# This function starts broot and executes the command
# it produces, if any.
# It's needed because some shell commands, like `cd`,
# have no useful effect if executed in a subshell.
function br {
f=$(mktemp)
(
set +e
broot --outcmd "$f" "$@"
code=$?
if [ "$code" != 0 ]; then
rm -f "$f"
exit "$code"
fi
)
code=$?
if [ "$code" != 0 ]; then
return "$code"
fi
d=$(cat "$f")
rm -f "$f"
eval "$d"
}
'';
programs.fish.shellInit = mkIf cfg.enableFishIntegration ''
# This script was automatically generated by the broot function
# More information can be found in https://github.com/Canop/broot
# This function starts broot and executes the command
# it produces, if any.
# It's needed because some shell commands, like `cd`,
# have no useful effect if executed in a subshell.
function br
set f (mktemp)
broot --outcmd $f $argv
if test $status -ne 0
rm -f "$f"
return "$code"
end
set d (cat "$f")
rm -f "$f"
eval "$d"
end
''; '';
}; };
};
programs.broot.settings = builtins.fromJSON (builtins.readFile
(pkgs.runCommand "default-conf.json" {
nativeBuildInputs = [ pkgs.hjson ];
}
"hjson -c ${cfg.package.src}/resources/default-conf/conf.hjson > $out"));
programs.bash.initExtra = mkIf cfg.enableBashIntegration (shellInit "bash");
programs.zsh.initExtra = mkIf cfg.enableZshIntegration (shellInit "zsh");
programs.fish.shellInit = mkIf cfg.enableFishIntegration (shellInit "fish");
};
} }

View file

@ -64,7 +64,7 @@ let
id = mkOption { id = mkOption {
type = strMatching "[a-zA-Z]{32}"; type = strMatching "[a-zA-Z]{32}";
description = '' description = ''
The extension's ID from the Chome Web Store url or the unpacked crx. The extension's ID from the Chrome Web Store url or the unpacked crx.
''; '';
default = ""; default = "";
}; };

View file

@ -29,7 +29,7 @@ in {
default = { }; default = { };
description = '' description = ''
Configuration written to Configuration written to
<filename>$XDG_CONFIG_HOME/direnv/config.toml</filename>. <filename>$XDG_CONFIG_HOME/direnv/direnv.toml</filename>.
</para><para> </para><para>
See See
<citerefentry> <citerefentry>
@ -80,6 +80,15 @@ in {
''; '';
}; };
enableNushellIntegration = mkOption {
default = true;
type = types.bool;
readOnly = true;
description = ''
Whether to enable Nushell integration.
'';
};
nix-direnv = { nix-direnv = {
enable = mkEnableOption '' enable = mkEnableOption ''
<link <link
@ -92,7 +101,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ pkgs.direnv ]; home.packages = [ pkgs.direnv ];
xdg.configFile."direnv/config.toml" = mkIf (cfg.config != { }) { xdg.configFile."direnv/direnv.toml" = mkIf (cfg.config != { }) {
source = tomlFormat.generate "direnv-config" cfg.config; source = tomlFormat.generate "direnv-config" cfg.config;
}; };
@ -119,5 +128,21 @@ in {
mkAfter '' mkAfter ''
${pkgs.direnv}/bin/direnv hook fish | source ${pkgs.direnv}/bin/direnv hook fish | source
''); '');
programs.nushell.extraConfig = mkIf cfg.enableNushellIntegration (
# Using mkAfter to make it more likely to appear after other
# manipulations of the prompt.
mkAfter ''
let-env config = ($env | default {} config).config
let-env config = ($env.config | default {} hooks)
let-env config = ($env.config | update hooks ($env.config.hooks | default [] pre_prompt))
let-env config = ($env.config | update hooks.pre_prompt ($env.config.hooks.pre_prompt | append {
code: "
let direnv = (${pkgs.direnv}/bin/direnv export json | from json)
let direnv = if ($direnv | length) == 1 { $direnv } else { {} }
$direnv | load-env
"
}))
'');
}; };
} }

View file

@ -0,0 +1,49 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.discocss;
in {
meta.maintainers = with maintainers; [ kranzes ];
options = {
programs.discocss = {
enable = mkEnableOption
"discocss, a tiny Discord CSS injector for Linux and MacOS";
package = mkPackageOption pkgs "discocss" { };
discordPackage = mkPackageOption pkgs "discord" { };
discordAlias = mkOption {
type = types.bool;
default = true;
description = "Whether to alias discocss to discord.";
};
css = mkOption {
type = types.str;
default = "";
description = "The custom CSS for discocss to use.";
};
};
};
config = mkIf cfg.enable {
assertions = [{
assertion = cfg.discordAlias
-> !(any (p: p.name == cfg.discordPackage.name) config.home.packages);
message =
"To use discocss with discordAlias you have to remove discord from home.packages, or set discordAlias to false.";
}];
home.packages = [
(cfg.package.override {
discordAlias = cfg.discordAlias;
discord = cfg.discordPackage;
})
];
xdg.configFile."discocss/custom.css".text = cfg.css;
};
}

View file

@ -52,6 +52,10 @@ in {
Configuration to include in the Emacs default init file. See Configuration to include in the Emacs default init file. See
<link xlink:href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Init-File.html"/> <link xlink:href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Init-File.html"/>
for more. for more.
</para><para>
Note, the <literal>inhibit-startup-message</literal> Emacs option
cannot be set here since Emacs disallows setting it from the default
initialization file.
''; '';
}; };

View file

@ -20,11 +20,14 @@ in {
options.programs.exa = { options.programs.exa = {
enable = enable =
mkEnableOption "exa, a modern replacement for <command>ls</command>"; mkEnableOption "exa, a modern replacement for <command>ls</command>";
enableAliases = mkEnableOption "recommended exa aliases"; enableAliases = mkEnableOption "recommended exa aliases";
package = mkPackageOption pkgs "exa" { };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ pkgs.exa ]; home.packages = [ cfg.package ];
programs.bash.shellAliases = mkIf cfg.enableAliases aliases; programs.bash.shellAliases = mkIf cfg.enableAliases aliases;

View file

@ -27,6 +27,8 @@ in {
options.programs.feh = { options.programs.feh = {
enable = mkEnableOption "feh - a fast and light image viewer"; enable = mkEnableOption "feh - a fast and light image viewer";
package = mkPackageOption pkgs "feh" { };
buttons = mkOption { buttons = mkOption {
default = { }; default = { };
type = with types; bindingsOf (either str int); type = with types; bindingsOf (either str int);
@ -69,7 +71,7 @@ in {
"To disable a keybinding, use `null` instead of an empty string."; "To disable a keybinding, use `null` instead of an empty string.";
}]; }];
home.packages = [ pkgs.feh ]; home.packages = [ cfg.package ];
xdg.configFile."feh/buttons" = xdg.configFile."feh/buttons" =
mkIf (cfg.buttons != { }) { text = renderBindings cfg.buttons + "\n"; }; mkIf (cfg.buttons != { }) { text = renderBindings cfg.buttons + "\n"; };

View file

@ -8,6 +8,8 @@ let
cfg = config.programs.firefox; cfg = config.programs.firefox;
jsonFormat = pkgs.formats.json { };
mozillaConfigPath = mozillaConfigPath =
if isDarwin then "Library/Application Support/Mozilla" else ".mozilla"; if isDarwin then "Library/Application Support/Mozilla" else ".mozilla";
@ -40,6 +42,12 @@ let
profilesIni = generators.toINI { } profiles; profilesIni = generators.toINI { } profiles;
userPrefValue = pref:
builtins.toJSON (if isBool pref || isInt pref || isString pref then
pref
else
builtins.toJSON pref);
mkUserJs = prefs: extraPrefs: bookmarks: mkUserJs = prefs: extraPrefs: bookmarks:
let let
prefs' = lib.optionalAttrs ([ ] != bookmarks) { prefs' = lib.optionalAttrs ([ ] != bookmarks) {
@ -50,7 +58,7 @@ let
// Generated by Home Manager. // Generated by Home Manager.
${concatStrings (mapAttrsToList (name: value: '' ${concatStrings (mapAttrsToList (name: value: ''
user_pref("${name}", ${builtins.toJSON value}); user_pref("${name}", ${userPrefValue value});
'') prefs')} '') prefs')}
${extraPrefs} ${extraPrefs}
@ -106,7 +114,7 @@ let
''; '';
in { in {
meta.maintainers = [ maintainers.rycee ]; meta.maintainers = [ maintainers.rycee maintainers.kira-bruneau ];
imports = [ imports = [
(mkRemovedOptionModule [ "programs" "firefox" "enableAdobeFlash" ] (mkRemovedOptionModule [ "programs" "firefox" "enableAdobeFlash" ]
@ -151,7 +159,6 @@ in {
default = [ ]; default = [ ];
example = literalExpression '' example = literalExpression ''
with pkgs.nur.repos.rycee.firefox-addons; [ with pkgs.nur.repos.rycee.firefox-addons; [
https-everywhere
privacy-badger privacy-badger
] ]
''; '';
@ -200,7 +207,10 @@ in {
}; };
settings = mkOption { settings = mkOption {
type = with types; attrsOf (either bool (either int str)); type = types.attrsOf (jsonFormat.type // {
description =
"Firefox preference (int, bool, string, and also attrs, list, float as a JSON string)";
});
default = { }; default = { };
example = literalExpression '' example = literalExpression ''
{ {
@ -210,9 +220,19 @@ in {
"distribution.searchplugins.defaultLocale" = "en-GB"; "distribution.searchplugins.defaultLocale" = "en-GB";
"general.useragent.locale" = "en-GB"; "general.useragent.locale" = "en-GB";
"browser.bookmarks.showMobileBookmarks" = true; "browser.bookmarks.showMobileBookmarks" = true;
"browser.newtabpage.pinned" = [{
title = "NixOS";
url = "https://nixos.org";
}];
} }
''; '';
description = "Attribute set of Firefox preferences."; description = ''
Attribute set of Firefox preferences.
Firefox only supports int, bool, and string types for
preferences, but home-manager will automatically
convert all other JSON-compatible values into strings.
'';
}; };
extraConfig = mkOption { extraConfig = mkOption {
@ -351,6 +371,87 @@ in {
defaultText = "true if profile ID is 0"; defaultText = "true if profile ID is 0";
description = "Whether this is a default profile."; description = "Whether this is a default profile.";
}; };
search = {
force = mkOption {
type = with types; bool;
default = false;
description = ''
Whether to force replace the existing search
configuration. This is recommended since Firefox will
replace the symlink for the search configuration on every
launch, but note that you'll lose any existing
configuration by enabling this.
'';
};
default = mkOption {
type = with types; nullOr str;
default = null;
example = "DuckDuckGo";
description = ''
The default search engine used in the address bar and search bar.
'';
};
order = mkOption {
type = with types; uniq (listOf str);
default = [ ];
example = [ "DuckDuckGo" "Google" ];
description = ''
The order the search engines are listed in. Any engines
that aren't included in this list will be listed after
these in an unspecified order.
'';
};
engines = mkOption {
type = with types; attrsOf (attrsOf jsonFormat.type);
default = { };
example = literalExpression ''
{
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"NixOS Wiki" = {
urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
iconUpdateURL = "https://nixos.wiki/favicon.png";
updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = [ "@nw" ];
};
"Bing".metaData.hidden = true;
"Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
}
'';
description = ''
Attribute set of search engine configurations. Engines
that only have <varname>metaData</varname> specified will
be treated as builtin to Firefox.
</para><para>
See <link xlink:href=
"https://searchfox.org/mozilla-central/rev/669329e284f8e8e2bb28090617192ca9b4ef3380/toolkit/components/search/SearchEngine.jsm#1138-1177">SearchEngine.jsm</link>
in Firefox's source for available options. We maintain a
mapping to let you specify all options in the referenced
link without underscores, but it may fall out of date with
future options.
</para><para>
Note, <varname>icon</varname> is also a special option
added by Home Manager to make it convenient to specify
absolute icon paths.
'';
};
};
}; };
})); }));
default = { }; default = { };
@ -363,7 +464,7 @@ in {
description = '' description = ''
Whether to enable the GNOME Shell native host connector. Note, you Whether to enable the GNOME Shell native host connector. Note, you
also need to set the NixOS option also need to set the NixOS option
<literal>services.gnome3.chrome-gnome-shell.enable</literal> to <literal>services.gnome.gnome-browser-connector.enable</literal> to
<literal>true</literal>. <literal>true</literal>.
''; '';
}; };
@ -444,6 +545,134 @@ in {
mkUserJs profile.settings profile.extraConfig profile.bookmarks; mkUserJs profile.settings profile.extraConfig profile.bookmarks;
}; };
"${profilesPath}/${profile.path}/search.json.mozlz4" = mkIf
(profile.search.default != null || profile.search.order != [ ]
|| profile.search.engines != { }) {
force = profile.search.force;
source = let
settings = {
version = 6;
engines = let
# Map of nice field names to internal field names.
# This is intended to be exhaustive and should be
# updated at every version bump.
internalFieldNames = (genAttrs [
"name"
"isAppProvided"
"loadPath"
"hasPreferredIcon"
"updateInterval"
"updateURL"
"iconUpdateURL"
"iconURL"
"iconMapObj"
"metaData"
"orderHint"
"definedAliases"
"urls"
] (name: "_${name}")) // {
searchForm = "__searchForm";
};
processCustomEngineInput = input:
(removeAttrs input [ "icon" ])
// optionalAttrs (input ? icon) {
# Convenience to specify absolute path to icon
iconURL = "file://${input.icon}";
} // (optionalAttrs (input ? iconUpdateURL) {
# Convenience to default iconURL to iconUpdateURL so
# the icon is immediately downloaded from the URL
iconURL = input.iconURL or input.iconUpdateURL;
} // {
# Required for custom engine configurations, loadPaths
# are unique identifiers that are generally formatted
# like: [source]/path/to/engine.xml
loadPath = ''
[home-manager]/programs.firefox.profiles.${profile.name}.search.engines."${
replaceStrings [ "\\" ] [ "\\\\" ] input.name
}"'';
});
processEngineInput = name: input:
let
requiredInput = {
inherit name;
isAppProvided = input.isAppProvided or removeAttrs input
[ "metaData" ] == { };
metaData = input.metaData or { };
};
in if requiredInput.isAppProvided then
requiredInput
else
processCustomEngineInput (input // requiredInput);
buildEngineConfig = name: input:
mapAttrs' (name: value: {
name = internalFieldNames.${name} or name;
inherit value;
}) (processEngineInput name input);
sortEngineConfigs = configs:
let
buildEngineConfigWithOrder = order: name:
let
config = configs.${name} or {
_name = name;
_isAppProvided = true;
_metaData = { };
};
in config // {
_metaData = config._metaData // { inherit order; };
};
engineConfigsWithoutOrder =
attrValues (removeAttrs configs profile.search.order);
sortedEngineConfigs =
(imap buildEngineConfigWithOrder profile.search.order)
++ engineConfigsWithoutOrder;
in sortedEngineConfigs;
engineInput = profile.search.engines // {
# Infer profile.search.default as an app provided
# engine if it's not in profile.search.engines
${profile.search.default} =
profile.search.engines.${profile.search.default} or { };
};
in sortEngineConfigs (mapAttrs buildEngineConfig engineInput);
metaData = optionalAttrs (profile.search.default != null) {
current = profile.search.default;
hash = "@hash@";
} // {
useSavedOrder = profile.search.order != [ ];
};
};
# Home Manager doesn't circumvent user consent and isn't acting
# maliciously. We're modifying the search outside of Firefox, but
# a claim by Mozilla to remove this would be very anti-user, and
# is unlikely to be an issue for our use case.
disclaimer = appName:
"By modifying this file, I agree that I am doing so "
+ "only within ${appName} itself, using official, user-driven search "
+ "engine selection processes, and in a way which does not circumvent "
+ "user consent. I acknowledge that any attempt to change this file "
+ "from outside of ${appName} is a malicious act, and will be responded "
+ "to accordingly.";
salt = profile.path + profile.search.default
+ disclaimer "Firefox";
in pkgs.runCommand "search.json.mozlz4" {
nativeBuildInputs = with pkgs; [ mozlz4a openssl ];
json = builtins.toJSON settings;
inherit salt;
} ''
export hash=$(echo -n "$salt" | openssl dgst -sha256 -binary | base64)
mozlz4a <(substituteStream json search.json.in --subst-var hash) "$out"
'';
};
"${profilesPath}/${profile.path}/extensions" = "${profilesPath}/${profile.path}/extensions" =
mkIf (cfg.extensions != [ ]) { mkIf (cfg.extensions != [ ]) {
source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}"; source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}";

View file

@ -145,6 +145,13 @@ let
aliasesStr = concatStringsSep "\n" aliasesStr = concatStringsSep "\n"
(mapAttrsToList (k: v: "alias ${k} ${escapeShellArg v}") cfg.shellAliases); (mapAttrsToList (k: v: "alias ${k} ${escapeShellArg v}") cfg.shellAliases);
fishIndent = name: text:
pkgs.runCommand name {
nativeBuildInputs = [ cfg.package ];
inherit text;
passAsFile = [ "text" ];
} "env HOME=$(mktemp -d) fish_indent < $textPath > $out";
in { in {
imports = [ imports = [
(mkRemovedOptionModule [ "programs" "fish" "promptInit" ] '' (mkRemovedOptionModule [ "programs" "fish" "promptInit" ] ''
@ -278,7 +285,6 @@ in {
<link xlink:href="https://fishshell.com/docs/current/cmds/function.html"/>. <link xlink:href="https://fishshell.com/docs/current/cmds/function.html"/>.
''; '';
}; };
}; };
config = mkIf cfg.enable (mkMerge [ config = mkIf cfg.enable (mkMerge [
@ -340,7 +346,7 @@ in {
end end
''; '';
xdg.configFile."fish/config.fish".text = '' xdg.configFile."fish/config.fish".source = fishIndent "config.fish" ''
# ~/.config/fish/config.fish: DO NOT EDIT -- this file has been generated # ~/.config/fish/config.fish: DO NOT EDIT -- this file has been generated
# automatically by home-manager. # automatically by home-manager.
@ -369,7 +375,7 @@ in {
# Aliases # Aliases
${aliasesStr} ${aliasesStr}
# Interactive shell intialisation # Interactive shell initialisation
${cfg.interactiveShellInit} ${cfg.interactiveShellInit}
end end
@ -379,7 +385,7 @@ in {
xdg.configFile = mapAttrs' (name: def: { xdg.configFile = mapAttrs' (name: def: {
name = "fish/functions/${name}.fish"; name = "fish/functions/${name}.fish";
value = { value = {
text = let source = let
modifierStr = n: v: optional (v != null) ''--${n}="${toString v}"''; modifierStr = n: v: optional (v != null) ''--${n}="${toString v}"'';
modifierStrs = n: v: optional (v != null) "--${n}=${toString v}"; modifierStrs = n: v: optional (v != null) "--${n}=${toString v}";
modifierBool = n: v: optional (v != null && v) "--${n}"; modifierBool = n: v: optional (v != null && v) "--${n}";
@ -397,9 +403,9 @@ in {
modifiers = if isAttrs def then " ${toString mods}" else ""; modifiers = if isAttrs def then " ${toString mods}" else "";
body = if isAttrs def then def.body else def; body = if isAttrs def then def.body else def;
in '' in fishIndent "${name}.fish" ''
function ${name}${modifiers} function ${name}${modifiers}
${body} ${lib.strings.removeSuffix "\n" body}
end end
''; '';
}; };
@ -410,7 +416,8 @@ in {
# in the paths and any initialization scripts. # in the paths and any initialization scripts.
(mkIf (length cfg.plugins > 0) { (mkIf (length cfg.plugins > 0) {
xdg.configFile = mkMerge ((map (plugin: { xdg.configFile = mkMerge ((map (plugin: {
"fish/conf.d/plugin-${plugin.name}.fish".text = '' "fish/conf.d/plugin-${plugin.name}.fish".source =
fishIndent "${plugin.name}.fish" ''
# Plugin ${plugin.name} # Plugin ${plugin.name}
set -l plugin_dir ${plugin.src} set -l plugin_dir ${plugin.src}

View file

@ -6,6 +6,10 @@ let
cfg = config.programs.fzf; cfg = config.programs.fzf;
renderedColors = colors:
concatStringsSep ","
(mapAttrsToList (name: value: "${name}:${value}") colors);
in { in {
imports = [ imports = [
(mkRemovedOptionModule [ "programs" "fzf" "historyWidgetCommand" ] (mkRemovedOptionModule [ "programs" "fzf" "historyWidgetCommand" ]
@ -88,6 +92,24 @@ in {
''; '';
}; };
colors = mkOption {
type = types.attrsOf types.str;
default = { };
example = literalExpression ''
{
bg = "#1e1e1e";
"bg+" = "#1e1e1e";
fg = "#d4d4d4";
"fg+" = "#d4d4d4";
}
'';
description = ''
Color scheme options added to <code>FZF_DEFAULT_OPTS</code>. See
<link xlink:href="https://github.com/junegunn/fzf/wiki/Color-schemes"/>
for documentation.
'';
};
tmux = { tmux = {
enableShellIntegration = mkEnableOption '' enableShellIntegration = mkEnableOption ''
setting <literal>FZF_TMUX=1</literal> which causes shell integration to use fzf-tmux setting <literal>FZF_TMUX=1</literal> which causes shell integration to use fzf-tmux
@ -141,7 +163,9 @@ in {
FZF_CTRL_T_COMMAND = cfg.fileWidgetCommand; FZF_CTRL_T_COMMAND = cfg.fileWidgetCommand;
FZF_CTRL_T_OPTS = cfg.fileWidgetOptions; FZF_CTRL_T_OPTS = cfg.fileWidgetOptions;
FZF_DEFAULT_COMMAND = cfg.defaultCommand; FZF_DEFAULT_COMMAND = cfg.defaultCommand;
FZF_DEFAULT_OPTS = cfg.defaultOptions; FZF_DEFAULT_OPTS = cfg.defaultOptions
++ lib.optionals (cfg.colors != { })
[ "--color ${renderedColors cfg.colors}" ];
FZF_TMUX = if cfg.tmux.enableShellIntegration then "1" else null; FZF_TMUX = if cfg.tmux.enableShellIntegration then "1" else null;
FZF_TMUX_OPTS = cfg.tmux.shellIntegrationOptions; FZF_TMUX_OPTS = cfg.tmux.shellIntegrationOptions;
}); });

View file

@ -267,7 +267,7 @@ in {
difftastic = { difftastic = {
enable = mkEnableOption "" // { enable = mkEnableOption "" // {
description = '' description = ''
Enable the <command>difft</command> syntax highlighter. Enable the <command>difftastic</command> syntax highlighter.
See <link xlink:href="https://github.com/Wilfred/difftastic" />. See <link xlink:href="https://github.com/Wilfred/difftastic" />.
''; '';
}; };
@ -278,7 +278,7 @@ in {
example = "dark"; example = "dark";
description = '' description = ''
Determines whether difftastic should use the lighter or darker colors Determines whether difftastic should use the lighter or darker colors
for syntax highlithing. for syntax highlighting.
''; '';
}; };
@ -527,10 +527,7 @@ in {
"--background ${cfg.difftastic.background}" "--background ${cfg.difftastic.background}"
"--display ${cfg.difftastic.display}" "--display ${cfg.difftastic.display}"
]; ];
in { in { diff.external = difftCommand; };
diff.external = difftCommand;
core.pager = "${pkgs.less}/bin/less -XF";
};
}) })
(mkIf cfg.delta.enable { (mkIf cfg.delta.enable {

View file

@ -41,6 +41,8 @@ in {
selected_tab: Reset, selected_tab: Reset,
command_fg: White, command_fg: White,
selection_bg: Blue, selection_bg: Blue,
selection_fg: White,
cmdbar_bg: Blue,
cmdbar_extra_lines_bg: Blue, cmdbar_extra_lines_bg: Blue,
disabled_fg: DarkGray, disabled_fg: DarkGray,
diff_line_add: Green, diff_line_add: Green,
@ -55,6 +57,8 @@ in {
danger_fg: Red, danger_fg: Red,
push_gauge_bg: Blue, push_gauge_bg: Blue,
push_gauge_fg: Reset, push_gauge_fg: Reset,
tag_fg: LightMagenta,
branch_fg: LightYellow,
) )
''; '';
description = '' description = ''

View file

@ -0,0 +1,64 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.havoc;
iniFormat = pkgs.formats.ini { };
in {
meta.maintainers = with lib.maintainers; [ AndersonTorres ];
options.programs.havoc = {
enable = mkEnableOption "Havoc terminal";
package = mkPackageOption pkgs "havoc" { };
settings = mkOption {
type = iniFormat.type;
default = { };
description = ''
Configuration written to
<filename>$XDG_CONFIG_HOME/havoc.cfg</filename>. See <link
xlink:href="https://raw.githubusercontent.com/ii8/havoc/master/havoc.cfg"/>
for a list of available options.
'';
example = literalExpression ''
{
child.program = "bash";
window.opacity = 240;
window.margin = no;
terminal = {
rows = 80;
columns = 24;
scrollback = 2000;
};
bind = {
"C-S-c" = "copy";
"C-S-v" = "paste";
"C-S-r" = "reset";
"C-S-Delete" = "hard reset";
"C-S-j" = "scroll down";
"C-S-k" = "scroll up";
"C-S-Page_Down" = "scroll down page";
"C-S-Page_Up" = "scroll up page";
"C-S-End" = "scroll to bottom";
"C-S-Home" = "scroll to top";
};
}
'';
};
};
config = mkIf cfg.enable {
assertions =
[ (hm.assertions.assertPlatform "programs.havoc" pkgs platforms.linux) ];
home.packages = [ cfg.package ];
xdg.configFile."havoc.cfg" = mkIf (cfg.settings != { }) {
source = iniFormat.generate "havoc.cfg" cfg.settings;
};
};
}

View file

@ -170,7 +170,7 @@ let
servers = mkOption { servers = mkOption {
type = listOf str; type = listOf str;
default = [ ]; default = [ ];
example = [ "chat.freenode.net" "irc.freenode.net" ]; example = [ "irc.oftc.net" ];
description = "IRC Server Address List."; description = "IRC Server Address List.";
}; };
}; };
@ -239,11 +239,10 @@ in {
default = { }; default = { };
example = literalExpression '' example = literalExpression ''
{ {
freenode = { oftc = {
autojoin = [ autojoin = [
"#home-manager" "#home-manager"
"#linux" "#linux"
"#nixos"
]; ];
charset = "UTF-8 (Unicode)"; charset = "UTF-8 (Unicode)";
commands = [ commands = [
@ -263,8 +262,7 @@ in {
password = "my_password"; password = "my_password";
realName = "my_realname"; realName = "my_realname";
servers = [ servers = [
"chat.freenode.net" "irc.oftc.net"
"irc.freenode.net"
]; ];
userName = "my_username"; userName = "my_username";
}; };

View file

@ -11,7 +11,7 @@ let
toHimalayaConfig = account: toHimalayaConfig = account:
{ {
email = account.address; email = account.address;
name = account.realName; display-name = account.realName;
default = account.primary; default = account.primary;
mailboxes = { mailboxes = {
@ -20,30 +20,46 @@ let
draft = account.folders.drafts; draft = account.folders.drafts;
# NOTE: himalaya does not support configuring the name of the trash folder # NOTE: himalaya does not support configuring the name of the trash folder
}; };
} // (lib.optionalAttrs (account.signature.showSignature == "append") {
# FIXME: signature cannot be attached
signature = account.signature.text;
signature-delim = account.signature.delimiter;
}) // (if account.himalaya.backend == null then {
backend = "none";
} else if account.himalaya.backend == "imap" then {
# FIXME: does not support disabling TLS altogether # FIXME: does not support disabling TLS altogether
# NOTE: does not accept sequence of strings for password commands # NOTE: does not accept sequence of strings for password commands
backend = account.himalaya.backend;
imap-login = account.userName; imap-login = account.userName;
imap-passwd-cmd = lib.escapeShellArgs account.passwordCommand; imap-passwd-cmd = lib.escapeShellArgs account.passwordCommand;
imap-host = account.imap.host; imap-host = account.imap.host;
imap-port = account.imap.port; imap-port = account.imap.port;
imap-starttls = account.imap.tls.useStartTls; imap-starttls = account.imap.tls.useStartTls;
} else if account.himalaya.backend == "maildir" then {
backend = account.himalaya.backend;
maildir-root-dir = account.maildirBasePath;
} else
throw "Unsupported backend: ${account.himalaya.backend}")
// (if account.himalaya.sender == null then {
sender = "none";
} else if account.himalaya.sender == "smtp" then {
sender = account.himalaya.sender;
smtp-login = account.userName; smtp-login = account.userName;
smtp-passwd-cmd = lib.escapeShellArgs account.passwordCommand; smtp-passwd-cmd = lib.escapeShellArgs account.passwordCommand;
smtp-host = account.smtp.host; smtp-host = account.smtp.host;
smtp-port = account.smtp.port; smtp-port = account.smtp.port;
smtp-starttls = account.smtp.tls.useStartTls; smtp-starttls = account.smtp.tls.useStartTls;
} // (lib.optionalAttrs (account.signature.showSignature == "append") { } else if account.himalaya.sender == "sendmail" then {
# FIXME: signature cannot be attached sender = account.himalaya.sender;
signature = account.signature.text; } else
}) // account.himalaya.settings; throw "Unsupported sender: ${account.himalaya.sender}")
// account.himalaya.settings;
in { in {
# NOTE: will not start without this configured, but each account overrides it # NOTE: will not start without this configured, but each account overrides it
name = ""; display-name = "";
} // cfg.settings // (lib.mapAttrs (_: toHimalayaConfig) enabledAccounts); } // cfg.settings // (lib.mapAttrs (_: toHimalayaConfig) enabledAccounts);
in { in {
meta.maintainers = with lib.hm.maintainers; [ ambroisie ]; meta.maintainers = with lib.hm.maintainers; [ toastal ];
options = with lib; { options = with lib; {
programs.himalaya = { programs.himalaya = {
@ -63,7 +79,8 @@ in {
default = { }; default = { };
example = lib.literalExpression '' example = lib.literalExpression ''
{ {
default-page-size = 50; email-listing-page-size = 50;
watch-cmds = [ "mbsync -a" ]
} }
''; '';
description = '' description = ''
@ -80,6 +97,22 @@ in {
the himalaya mail client for this account the himalaya mail client for this account
''; '';
backend = mkOption {
# TODO: “notmuch” (requires compile flag for himalaya, libnotmuch)
type = types.nullOr (types.enum [ "imap" "maildir" ]);
description = ''
The method for which <command>himalaya</command> will fetch, store,
etc. mail.
'';
};
sender = mkOption {
type = types.nullOr (types.enum [ "smtp" "sendmail" ]);
description = ''
The method for which <command>himalaya</command> will send mail.
'';
};
settings = mkOption { settings = mkOption {
type = tomlFormat.type; type = tomlFormat.type;
default = { }; default = { };

View file

@ -138,6 +138,8 @@ in {
} }
''; '';
}; };
package = mkPackageOption pkgs "i3status" { };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -197,7 +199,7 @@ in {
}; };
}; };
home.packages = [ pkgs.i3status ]; home.packages = [ cfg.package ];
xdg.configFile."i3status/config".text = concatStringsSep "\n" ([ ] xdg.configFile."i3status/config".text = concatStringsSep "\n" ([ ]
++ optional (cfg.general != { }) (formatModule "general" cfg.general) ++ optional (cfg.general != { }) (formatModule "general" cfg.general)

View file

@ -23,6 +23,11 @@ let
type = "${v.type}"; type = "${v.type}";
nick = "${quoteStr v.nick}"; nick = "${quoteStr v.nick}";
autosendcmd = "${concatMapStringsSep ";" quoteStr v.autoCommands}"; autosendcmd = "${concatMapStringsSep ";" quoteStr v.autoCommands}";
${
lib.optionalString (v.saslExternal) ''
sasl_username = "${quoteStr v.nick}";
sasl_mechanism = "EXTERNAL";''
}
}; };
'')); ''));
@ -36,7 +41,7 @@ let
ssl_verify = "${lib.hm.booleans.yesNo v.server.ssl.verify}"; ssl_verify = "${lib.hm.booleans.yesNo v.server.ssl.verify}";
autoconnect = "${lib.hm.booleans.yesNo v.server.autoConnect}"; autoconnect = "${lib.hm.booleans.yesNo v.server.autoConnect}";
${ ${
lib.optionalString (v.server.ssl.certificateFile != null) '' optionalString (v.server.ssl.certificateFile != null) ''
ssl_cert = "${v.server.ssl.certificateFile}"; ssl_cert = "${v.server.ssl.certificateFile}";
'' ''
} }
@ -142,6 +147,15 @@ let
type = types.attrsOf channelType; type = types.attrsOf channelType;
default = { }; default = { };
}; };
saslExternal = mkOption {
type = types.bool;
default = false;
description = ''
Enable SASL external authentication. This requires setting a path in
<xref linkend="opt-programs.irssi.networks._name_.server.ssl.certificateFile"/>.
'';
};
}; };
}); });
@ -171,10 +185,10 @@ in {
default = { }; default = { };
example = literalExpression '' example = literalExpression ''
{ {
freenode = { liberachat = {
nick = "hmuser"; nick = "hmuser";
server = { server = {
address = "chat.freenode.net"; address = "irc.libera.chat";
port = 6697; port = 6697;
autoConnect = true; autoConnect = true;
}; };

View file

@ -36,11 +36,8 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ cfg.package ]; home.packages = [ cfg.package ];
home.sessionVariables = { # some instances of `jdk-linux-base.nix` pass through `result` without turning it onto a path-string.
JAVA_HOME = fileContents (pkgs.runCommandLocal "java-home" { } '' # while I suspect this is incorrect, the documentation is unclear.
source "${cfg.package}/nix-support/setup-hook" home.sessionVariables.JAVA_HOME = "${cfg.package.home}";
echo "$JAVA_HOME" > $out
'');
};
}; };
} }

View file

@ -9,44 +9,14 @@ let
in { in {
meta.maintainers = [ hm.maintainers.maximsmol ]; meta.maintainers = [ hm.maintainers.maximsmol ];
options.programs.just = { imports = let
enable = mkEnableOption msg = ''
"just, a handy way to save and run project-specific commands"; 'program.just' is deprecated, simply add 'pkgs.just' to 'home.packages' instead.
See https://github.com/nix-community/home-manager/issues/3449#issuecomment-1329823502'';
package = mkOption { in [
type = types.package; (mkRemovedOptionModule [ "programs" "just" "enable" ] msg)
default = pkgs.just; (mkRemovedOptionModule [ "programs" "just" "enableBashIntegration" ] msg)
defaultText = literalExpression "pkgs.just"; (mkRemovedOptionModule [ "programs" "just" "enableZshIntegration" ] msg)
description = "Package providing the <command>just</command> tool."; (mkRemovedOptionModule [ "programs" "just" "enableFishIntegration" ] msg)
}; ];
enableBashIntegration = mkEnableOption "Bash integration" // {
default = true;
};
enableZshIntegration = mkEnableOption "Zsh integration" // {
default = true;
};
enableFishIntegration = mkEnableOption "Fish integration" // {
default = true;
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
source ${cfg.package}/share/bash-completion/completions/just.bash
'';
programs.zsh.initExtra = mkIf cfg.enableZshIntegration ''
source ${cfg.package}/share/zsh/site-functions/_just
'';
programs.fish.shellInit = mkIf cfg.enableFishIntegration ''
source ${cfg.package}/share/fish/vendor_completions.d/just.fish
'';
};
} }

65
modules/programs/k9s.nix Normal file
View file

@ -0,0 +1,65 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.k9s;
yamlFormat = pkgs.formats.yaml { };
in {
meta.maintainers = [ hm.maintainers.katexochen ];
options.programs.k9s = {
enable =
mkEnableOption "k9s - Kubernetes CLI To Manage Your Clusters In Style";
package = mkPackageOption pkgs "k9s" { };
settings = mkOption {
type = yamlFormat.type;
default = { };
description = ''
Configuration written to
<filename>$XDG_CONFIG_HOME/k9s/config.yml</filename>. See
<link xlink:href="https://k9scli.io/topics/config/"/>
for supported values.
'';
example = literalExpression ''
k9s = {
refreshRate = 2;
};
'';
};
skin = mkOption {
type = yamlFormat.type;
default = { };
description = ''
Skin written to
<filename>$XDG_CONFIG_HOME/k9s/skin.yml</filename>. See
<link xlink:href="https://k9scli.io/topics/skins/"/>
for supported values.
'';
example = literalExpression ''
k9s = {
body = {
fgColor = "dodgerblue";
};
};
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."k9s/config.yml" = mkIf (cfg.settings != { }) {
source = yamlFormat.generate "k9s-config" cfg.settings;
};
xdg.configFile."k9s/skin.yml" = mkIf (cfg.skin != { }) {
source = yamlFormat.generate "k9s-skin" cfg.skin;
};
};
}

View file

@ -10,13 +10,9 @@ let
options = { options = {
name = mkOption { name = mkOption {
type = types.enum [ type = types.enum [
"NormalBegin"
"NormalIdle" "NormalIdle"
"NormalEnd"
"NormalKey" "NormalKey"
"InsertBegin"
"InsertIdle" "InsertIdle"
"InsertEnd"
"InsertKey" "InsertKey"
"InsertChar" "InsertChar"
"InsertDelete" "InsertDelete"
@ -48,8 +44,11 @@ let
"RawKey" "RawKey"
"InsertCompletionShow" "InsertCompletionShow"
"InsertCompletionHide" "InsertCompletionHide"
"InsertCompletionSelect"
"ModuleLoaded" "ModuleLoaded"
"ClientCreate"
"ClientClose"
"RegisterModified"
"User"
]; ];
example = "SetOption"; example = "SetOption";
description = '' description = ''
@ -489,9 +488,8 @@ let
}; };
}; };
kakouneWithPlugins = pkgs.wrapKakoune pkgs.kakoune-unwrapped { kakouneWithPlugins =
configure = { plugins = cfg.plugins; }; pkgs.wrapKakoune cfg.package { configure = { plugins = cfg.plugins; }; };
};
configFile = let configFile = let
wrapOptions = with cfg.config.wrapLines; wrapOptions = with cfg.config.wrapLines;
@ -624,6 +622,8 @@ in {
programs.kakoune = { programs.kakoune = {
enable = mkEnableOption "the kakoune text editor"; enable = mkEnableOption "the kakoune text editor";
package = mkPackageOption pkgs "kakoune-unwrapped" { };
config = mkOption { config = mkOption {
type = types.nullOr configModule; type = types.nullOr configModule;
default = { }; default = { };

View file

@ -119,14 +119,6 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = [{
assertion = (cfg.darwinLaunchOptions != null)
-> pkgs.stdenv.hostPlatform.isDarwin;
message = ''
The 'programs.kitty.darwinLaunchOptions' option is only available on darwin.
'';
}];
home.packages = [ cfg.package ] ++ optionalPackage cfg.font; home.packages = [ cfg.package ] ++ optionalPackage cfg.font;
xdg.configFile."kitty/kitty.conf" = { xdg.configFile."kitty/kitty.conf" = {
@ -158,8 +150,8 @@ in {
''; '';
}; };
xdg.configFile."kitty/macos-launch-services-cmdline" = xdg.configFile."kitty/macos-launch-services-cmdline" = mkIf
mkIf (cfg.darwinLaunchOptions != null) { (cfg.darwinLaunchOptions != null && pkgs.stdenv.hostPlatform.isDarwin) {
text = concatStringsSep " " cfg.darwinLaunchOptions; text = concatStringsSep " " cfg.darwinLaunchOptions;
}; };
}; };

View file

@ -82,7 +82,7 @@ let
attrsetToXml = attrs: name: stylesheet: attrsetToXml = attrs: name: stylesheet:
pkgs.runCommand name { pkgs.runCommand name {
# Package splicing for libxslt does not work correctly leading to errors # Package splicing for libxslt does not work correctly leading to errors
# when cross-compiling. Use the version from buildPackages explicitely to # when cross-compiling. Use the version from buildPackages explicitly to
# fix this. # fix this.
nativeBuildInputs = [ pkgs.buildPackages.libxslt.bin ]; nativeBuildInputs = [ pkgs.buildPackages.libxslt.bin ];
xml = builtins.toXML attrs; xml = builtins.toXML attrs;
@ -131,9 +131,8 @@ in {
type = types.package; type = types.package;
default = pkgs.kodi; default = pkgs.kodi;
defaultText = literalExpression "pkgs.kodi"; defaultText = literalExpression "pkgs.kodi";
example = literalExpression '' example = literalExpression
{ pkgs.kodi.withPackages (exts: [ exts.pvr-iptvsimple ]) } "pkgs.kodi.withPackages (exts: [ exts.pvr-iptvsimple ])";
'';
description = '' description = ''
The <literal>kodi</literal> package to use. The <literal>kodi</literal> package to use.
Can be used to specify extensions. Can be used to specify extensions.

View file

@ -16,6 +16,8 @@ in {
options.programs.lazygit = { options.programs.lazygit = {
enable = mkEnableOption "lazygit, a simple terminal UI for git commands"; enable = mkEnableOption "lazygit, a simple terminal UI for git commands";
package = mkPackageOption pkgs "lazygit" { };
settings = mkOption { settings = mkOption {
type = yamlFormat.type; type = yamlFormat.type;
default = { }; default = { };
@ -41,7 +43,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [ pkgs.lazygit ]; home.packages = [ cfg.package ];
home.file."Library/Application Support/lazygit/config.yml" = home.file."Library/Application Support/lazygit/config.yml" =
mkIf (cfg.settings != { } && isDarwin) { mkIf (cfg.settings != { } && isDarwin) {

View file

@ -0,0 +1,39 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ledger;
in {
meta.maintainers = [ maintainers.marsam ];
options.programs.ledger = {
enable = mkEnableOption "ledger, a double-entry accounting system";
package = mkPackageOption pkgs "ledger" { };
extraConfig = mkOption {
type = types.lines;
default = "";
example = literalExpression ''
--sort date
--effective
--date-format %Y-%m-%d
'';
description = ''
Configuration written to <filename>$XDG_CONFIG_HOME/ledger/ledgerrc</filename>.
See <link xlink:href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Detailed-Option-Description"/>
for explanation about possible values.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."ledger/ledgerrc" =
mkIf (cfg.extraConfig != "") { text = cfg.extraConfig; };
};
}

View file

@ -238,8 +238,8 @@ in {
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.gmailieer; default = pkgs.lieer;
defaultText = "pkgs.gmailieer"; defaultText = "pkgs.lieer";
description = '' description = ''
lieer package to use. lieer package to use.
''; '';

View file

@ -0,0 +1,60 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.looking-glass-client;
settingsFormat = pkgs.formats.ini { };
in {
meta.maintainers = with maintainers; [ j-brn ];
options.programs.looking-glass-client = {
enable = mkEnableOption "looking-glass-client";
package = mkPackageOption pkgs "looking-glass-client" { };
settings = mkOption {
type = settingsFormat.type;
default = { };
description = "looking-glass-client settings.";
example = literalExpression ''
{
app = {
allowDMA = true;
shmFile = "/dev/kvmfr0";
};
win = {
fullScreen = true;
showFPS = false;
jitRender = true;
};
spice = {
enable = true;
audio = true;
};
input = {
rawMouse = true;
escapeKey = 62;
};
}
'';
};
};
config = mkIf cfg.enable {
assertions = [
(hm.assertions.assertPlatform "programs.looking-glass-client" pkgs
platforms.linux)
];
home.packages = [ cfg.package ];
xdg.configFile."looking-glass/client.ini" = mkIf (cfg.settings != { }) {
source =
settingsFormat.generate ("looking-glass-client.ini") cfg.settings;
};
};
}

View file

@ -69,7 +69,7 @@ in {
echo "MANDB_MAP ${manualPages}/share/man $out" > man.conf echo "MANDB_MAP ${manualPages}/share/man $out" > man.conf
# Run mandb to generate cache files: # Run mandb to generate cache files:
${pkgs.man-db}/bin/mandb -C man.conf --no-straycats --create \ ${cfg.package}/bin/mandb -C man.conf --no-straycats --create \
${manualPages}/share/man ${manualPages}/share/man
''; '';
in '' in ''

View file

@ -56,7 +56,7 @@ in {
description = '' description = ''
Configuration written to Configuration written to
<filename>$XDG_CONFIG_HOME/MangoHud/MangoHud.conf</filename>. See <filename>$XDG_CONFIG_HOME/MangoHud/MangoHud.conf</filename>. See
<link xlink:href="https://github.com/flightlessmango/MangoHud/blob/master/bin/MangoHud.conf"/> <link xlink:href="https://github.com/flightlessmango/MangoHud/blob/master/data/MangoHud.conf"/>
for the default configuration. for the default configuration.
''; '';
}; };
@ -75,7 +75,7 @@ in {
Sets MangoHud settings per application. Sets MangoHud settings per application.
Configuration written to Configuration written to
<filename>$XDG_CONFIG_HOME/MangoHud/{application_name}.conf</filename>. See <filename>$XDG_CONFIG_HOME/MangoHud/{application_name}.conf</filename>. See
<link xlink:href="https://github.com/flightlessmango/MangoHud/blob/master/bin/MangoHud.conf"/> <link xlink:href="https://github.com/flightlessmango/MangoHud/blob/master/data/MangoHud.conf"/>
for the default configuration. for the default configuration.
''; '';
}; };

View file

@ -4,7 +4,8 @@ with lib;
let let
extraConfigType = with lib.types; attrsOf (either (either str int) bool); extraConfigType = with lib.types;
attrsOf (oneOf [ str int bool (listOf str) ]);
perAccountGroups = { name, config, ... }: { perAccountGroups = { name, config, ... }: {
options = { options = {

View file

@ -84,7 +84,7 @@ let
genSection "IMAPAccount ${name}" ({ genSection "IMAPAccount ${name}" ({
Host = imap.host; Host = imap.host;
User = userName; User = userName;
PassCmd = toString passwordCommand; PassCmd = lib.escapeShellArgs passwordCommand;
} // genTlsConfig imap.tls } // genTlsConfig imap.tls
// optionalAttrs (imap.port != null) { Port = toString imap.port; } // optionalAttrs (imap.port != null) { Port = toString imap.port; }
// mbsync.extraConfig.account) + "\n" // mbsync.extraConfig.account) + "\n"
@ -174,7 +174,7 @@ let
flatten (optionals (group.channels != { }) ([ "Group ${group.name}" ] flatten (optionals (group.channels != { }) ([ "Group ${group.name}" ]
++ (genChannelStrings group.name group.channels))); ++ (genChannelStrings group.name group.channels)));
# Given set of groups, generates list of strings, where each string is one # Given set of groups, generates list of strings, where each string is one
# of the groups and its consituent channels. # of the groups and its constituent channels.
genGroupsStrings = mapAttrsToList (name: info: genGroupsStrings = mapAttrsToList (name: info:
concatStringsSep "\n" (genGroupChannelString groups.${name})) groups; concatStringsSep "\n" (genGroupChannelString groups.${name})) groups;
# Join all non-empty groups. # Join all non-empty groups.

View file

@ -52,7 +52,7 @@ in {
# In theory, mu is the only thing that creates that directory, and it is # In theory, mu is the only thing that creates that directory, and it is
# only created during the initial index. # only created during the initial index.
if [[ ! -d "${dbLocation}" ]]; then if [[ ! -d "${dbLocation}" ]]; then
$DRY_RUN_CMD mu init ${maildirOption} ${myAddresses} $VERBOSE_ARG; $DRY_RUN_CMD ${pkgs.mu}/bin/mu init ${maildirOption} ${myAddresses} $VERBOSE_ARG;
fi fi
''; '';
}; };

View file

@ -186,7 +186,7 @@ let
default = null; default = null;
example = "https://jmap.example.com/.well-known/jmap"; example = "https://jmap.example.com/.well-known/jmap";
description = '' description = ''
Sesion URL to connect to. Session URL to connect to.
</para><para> </para><para>
Mutually exclusive with Mutually exclusive with
<xref linkend="opt-accounts.email.accounts._name_.mujmap.settings.fqdn"/>. <xref linkend="opt-accounts.email.accounts._name_.mujmap.settings.fqdn"/>.

View file

@ -62,7 +62,7 @@ in {
}; };
mpdMusicDir = mkOption { mpdMusicDir = mkOption {
type = types.nullOr types.path; type = with types; nullOr (coercedTo path toString str);
default = let mpdCfg = config.services.mpd; default = let mpdCfg = config.services.mpd;
in if pkgs.stdenv.hostPlatform.isLinux && mpdCfg.enable then in if pkgs.stdenv.hostPlatform.isLinux && mpdCfg.enable then
mpdCfg.musicDirectory mpdCfg.musicDirectory
@ -123,7 +123,7 @@ in {
xdg.configFile = { xdg.configFile = {
"ncmpcpp/config" = let "ncmpcpp/config" = let
settings = cfg.settings // optionalAttrs (cfg.mpdMusicDir != null) { settings = cfg.settings // optionalAttrs (cfg.mpdMusicDir != null) {
mpd_music_dir = toString cfg.mpdMusicDir; mpd_music_dir = cfg.mpdMusicDir;
}; };
in mkIf (settings != { }) { text = renderSettings settings + "\n"; }; in mkIf (settings != { }) { text = renderSettings settings + "\n"; };

View file

@ -13,32 +13,13 @@ let
jsonFormat = pkgs.formats.json { }; jsonFormat = pkgs.formats.json { };
extraPython3PackageType = mkOptionType {
name = "extra-python3-packages";
description = "python3 packages in python.withPackages format";
check = with types;
(x: if isFunction x then isList (x pkgs.python3Packages) else false);
merge = mergeOneOption;
};
# Currently, upstream Neovim is pinned on Lua 5.1 for LuaJIT support.
# This will need to be updated if Neovim ever migrates to a newer
# version of Lua.
extraLua51PackageType = mkOptionType {
name = "extra-lua51-packages";
description = "lua5.1 packages in lua5_1.withPackages format";
check = with types;
(x: if isFunction x then isList (x pkgs.lua51Packages) else false);
merge = mergeOneOption;
};
pluginWithConfigType = types.submodule { pluginWithConfigType = types.submodule {
options = { options = {
config = mkOption { config = mkOption {
type = types.lines; type = types.nullOr types.lines;
description = description =
"Script to configure this plugin. The scripting language should match type."; "Script to configure this plugin. The scripting language should match type.";
default = ""; default = null;
}; };
type = mkOption { type = mkOption {
@ -80,19 +61,23 @@ let
optional = false; optional = false;
}; };
luaPackages = cfg.finalPackage.unwrapped.lua.pkgs;
resolvedExtraLuaPackages = cfg.extraLuaPackages luaPackages;
extraMakeWrapperArgs = lib.optionalString (cfg.extraPackages != [ ]) extraMakeWrapperArgs = lib.optionalString (cfg.extraPackages != [ ])
''--suffix PATH : "${lib.makeBinPath cfg.extraPackages}"''; ''--suffix PATH : "${lib.makeBinPath cfg.extraPackages}"'';
extraMakeWrapperLuaCArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' extraMakeWrapperLuaCArgs =
lib.optionalString (resolvedExtraLuaPackages != [ ]) ''
--suffix LUA_CPATH ";" "${ --suffix LUA_CPATH ";" "${
lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaCPath lib.concatMapStringsSep ";" luaPackages.getLuaCPath
cfg.extraLuaPackages resolvedExtraLuaPackages
}"''; }"'';
extraMakeWrapperLuaArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' extraMakeWrapperLuaArgs = lib.optionalString (resolvedExtraLuaPackages != [ ])
''
--suffix LUA_PATH ";" "${ --suffix LUA_PATH ";" "${
lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaPath lib.concatMapStringsSep ";" luaPackages.getLuaPath
cfg.extraLuaPackages resolvedExtraLuaPackages
}"''; }"'';
in { in {
imports = [ imports = [
(mkRemovedOptionModule [ "programs" "neovim" "withPython" ] (mkRemovedOptionModule [ "programs" "neovim" "withPython" ]
@ -164,24 +149,51 @@ in {
}; };
extraPython3Packages = mkOption { extraPython3Packages = mkOption {
type = with types; either extraPython3PackageType (listOf package); # In case we get a plain list, we need to turn it into a function,
default = (_: [ ]); # as expected by the function in nixpkgs.
# The only way to do so is to call `const`, which will ignore its input.
type = with types;
let fromType = listOf package;
in coercedTo fromType (flip warn const ''
Assigning a plain list to extraPython3Packages is deprecated.
Please assign a function taking a package set as argument, so
extraPython3Packages = [ pkgs.python3Packages.xxx ];
should become
extraPython3Packages = ps: [ ps.xxx ];
'') (functionTo fromType);
default = _: [ ];
defaultText = literalExpression "ps: [ ]"; defaultText = literalExpression "ps: [ ]";
example = literalExpression "(ps: with ps; [ python-language-server ])"; example =
literalExpression "pyPkgs: with pyPkgs; [ python-language-server ]";
description = '' description = ''
A function in python.withPackages format, which returns a The extra Python 3 packages required for your plugins to work.
list of Python 3 packages required for your plugins to work. This option accepts a function that takes a Python 3 package set as an argument,
and selects the required Python 3 packages from this package set.
See the example for more info.
''; '';
}; };
# We get the Lua package from the final package and use its
# Lua packageset to evaluate the function that this option was set to.
# This ensures that we always use the same Lua version as the Neovim package.
extraLuaPackages = mkOption { extraLuaPackages = mkOption {
type = with types; either extraLua51PackageType (listOf package); type = with types;
default = [ ]; let fromType = listOf package;
defaultText = literalExpression "[ ]"; in coercedTo fromType (flip warn const ''
example = literalExpression "(ps: with ps; [ luautf8 ])"; Assigning a plain list to extraLuaPackages is deprecated.
Please assign a function taking a package set as argument, so
extraLuaPackages = [ pkgs.lua51Packages.xxx ];
should become
extraLuaPackages = ps: [ ps.xxx ];
'') (functionTo fromType);
default = _: [ ];
defaultText = literalExpression "ps: [ ]";
example = literalExpression "luaPkgs: with luaPkgs; [ luautf8 ]";
description = '' description = ''
A function in lua5_1.withPackages format, which returns a The extra Lua packages required for your plugins to work.
list of Lua packages required for your plugins to work. This option accepts a function that takes a Lua package set as an argument,
and selects the required Lua packages from this package set.
See the example for more info.
''; '';
}; };
@ -229,6 +241,15 @@ in {
description = "Resulting customized neovim package."; description = "Resulting customized neovim package.";
}; };
defaultEditor = mkOption {
type = types.bool;
default = false;
description = ''
Whether to configure <command>nvim</command> as the default
editor using the <envar>EDITOR</envar> environment variable.
'';
};
extraConfig = mkOption { extraConfig = mkOption {
type = types.lines; type = types.lines;
default = ""; default = "";
@ -240,6 +261,17 @@ in {
''; '';
}; };
extraLuaConfig = mkOption {
type = types.lines;
default = "";
example = ''
vim.opt.nobackup = true
'';
description = ''
Custom lua lines.
'';
};
extraPackages = mkOption { extraPackages = mkOption {
type = with types; listOf package; type = with types; listOf package;
default = [ ]; default = [ ];
@ -280,7 +312,7 @@ in {
}; };
settings = mkOption { settings = mkOption {
type = jsonFormat.type; inherit (jsonFormat) type;
default = { }; default = { };
example = literalExpression '' example = literalExpression ''
{ {
@ -326,7 +358,7 @@ in {
defaultPlugin = { defaultPlugin = {
type = "viml"; type = "viml";
plugin = null; plugin = null;
config = ""; config = null;
optional = false; optional = false;
runtime = { }; runtime = { };
}; };
@ -337,7 +369,7 @@ in {
allPlugins; allPlugins;
suppressNotVimlConfig = p: suppressNotVimlConfig = p:
if p.type != "viml" then p // { config = ""; } else p; if p.type != "viml" then p // { config = null; } else p;
neovimConfig = pkgs.neovimUtils.makeNeovimConfig { neovimConfig = pkgs.neovimUtils.makeNeovimConfig {
inherit (cfg) extraPython3Packages withPython3 withRuby viAlias vimAlias; inherit (cfg) extraPython3Packages withPython3 withRuby viAlias vimAlias;
@ -353,22 +385,31 @@ in {
programs.neovim.generatedConfigs = let programs.neovim.generatedConfigs = let
grouped = lib.lists.groupBy (x: x.type) pluginsNormalized; grouped = lib.lists.groupBy (x: x.type) pluginsNormalized;
concatConfigs = lib.concatMapStrings (p: p.config); concatConfigs = lib.concatMapStrings (p: p.config);
in mapAttrs (name: vals: concatConfigs vals) grouped; configsOnly = lib.foldl
(acc: p: if p.config != null then acc ++ [ p.config ] else acc) [ ];
in mapAttrs (name: vals: lib.concatStringsSep "\n" (configsOnly vals))
grouped;
home.packages = [ cfg.finalPackage ]; home.packages = [ cfg.finalPackage ];
xdg.configFile = mkMerge ( home.sessionVariables = mkIf cfg.defaultEditor { EDITOR = "nvim"; };
xdg.configFile =
let hasLuaConfig = hasAttr "lua" config.programs.neovim.generatedConfigs;
in mkMerge (
# writes runtime # writes runtime
(map (x: x.runtime) pluginsNormalized) ++ [{ (map (x: x.runtime) pluginsNormalized) ++ [{
"nvim/init.vim" = mkIf (neovimConfig.neovimRcContent != "") { "nvim/init.lua" = let
text = neovimConfig.neovimRcContent + lib.optionalString luaRcContent =
(hasAttr "lua" config.programs.neovim.generatedConfigs) lib.optionalString (neovimConfig.neovimRcContent != "")
"lua require('init-home-manager')"; "vim.cmd [[source ${
}; pkgs.writeText "nvim-init-home-manager.vim"
"nvim/lua/init-home-manager.lua" = neovimConfig.neovimRcContent
mkIf (hasAttr "lua" config.programs.neovim.generatedConfigs) { }]]" + config.programs.neovim.extraLuaConfig
text = config.programs.neovim.generatedConfigs.lua; + lib.optionalString hasLuaConfig
}; config.programs.neovim.generatedConfigs.lua;
in mkIf (luaRcContent != "") { text = luaRcContent; };
"nvim/coc-settings.json" = mkIf cfg.coc.enable { "nvim/coc-settings.json" = mkIf cfg.coc.enable {
source = jsonFormat.generate "coc-settings.json" cfg.coc.settings; source = jsonFormat.generate "coc-settings.json" cfg.coc.settings;
}; };

Some files were not shown because too many files have changed in this diff Show more