diff --git a/infra/libkookie/home-manager/.github/CODEOWNERS b/infra/libkookie/home-manager/.github/CODEOWNERS index 8a2f8a671da..43ed4e4c16d 100644 --- a/infra/libkookie/home-manager/.github/CODEOWNERS +++ b/infra/libkookie/home-manager/.github/CODEOWNERS @@ -7,6 +7,8 @@ /modules/i18n/input-method @Kranzes /tests/modules/i18n/input-method @Kranzes +/modules/launchd @midchildan + /modules/misc/dconf.nix @rycee /modules/misc/fontconfig.nix @rycee @@ -19,6 +21,9 @@ /modules/misc/news.nix @rycee +/modules/misc/nix.nix @polykernel +/tests/modules/misc/nix @polykernel + /modules/misc/nixpkgs-disabled.nix @thiagokokada /modules/misc/numlock.nix @evanjs @@ -76,6 +81,8 @@ /modules/programs/emacs.nix @rycee +/modules/programs/eww.nix @mainrs + /modules/programs/exa.nix @kalhauge /modules/programs/firefox.nix @rycee @@ -83,11 +90,17 @@ /modules/programs/foot.nix @plabadens /tests/modules/programs/foot @plabadens +/modules/services/fusuma.nix @iosmanthus +/tests/modules/services/fusuma @iosmanthus + /modules/programs/gh.nix @Gerschtli @berbiche /tests/modules/programs/gh @Gerschtli @berbiche /modules/programs/git.nix @rycee +/modules/programs/gitui/gitui.nix @mifom +/modules/programs/gitui/default_key_config.ron @mifom + /modules/programs/gnome-terminal.nix @kamadorueda @rycee /modules/programs/go.nix @rvolosatovs @@ -112,6 +125,8 @@ /modules/programs/java.nix @ShamrockLee +/modules/programs/just.nix @maximsmol + /modules/programs/keychain.nix @marsam /modules/programs/kodi.nix @dwagenk @@ -192,6 +207,11 @@ /modules/programs/powerline-go.nix @DamienCassou +/modules/programs/pubs.nix @loicreynier +/tests/modules/programs/pubs @loicreynier + +/modules/programs/pylint.nix @florpe + /modules/programs/rbw.nix @ambroisie /tests/modules/programs/rbw @ambroisie @@ -214,6 +234,8 @@ /modules/programs/senpai.nix @malte-v +/modules/programs/sioyek.nix @podocarp + /modules/programs/sm64ex.nix @ivarwithoutbones /tests/modules/programs/sm64ex @ivarwithoutbones @@ -229,6 +251,8 @@ /modules/programs/timidity.nix @amesgen +/modules/programs/tiny.nix @kmaasrud + /modules/programs/topgrade.nix @msfjarvis /tests/modules/programs/topgrade @msfjarvis @@ -245,6 +269,8 @@ /modules/programs/zathura.nix @rprospero +/modules/programs/zellij.nix @mainrs + /modules/programs/zoxide.nix @marsam /modules/programs/zsh/prezto.nix @NickHu @@ -274,6 +300,8 @@ /modules/services/etesync-dav.nix @Valodim +/modules/services/espanso.nix @lucasew + /modules/services/flameshot.nix @moredhel /modules/services/fluidsynth.nix @Valodim @@ -316,6 +344,8 @@ /modules/services/mpdris2.nix @pjones +/modules/services/mpd-discord-rpc.nix @Kranzes + /modules/services/mpris-proxy.nix @ThibautMarty /modules/services/muchsync.nix @pacien @@ -354,8 +384,8 @@ /modules/services/redshift-gammastep @rycee @petabyteboy @thiagokokada /tests/modules/redshift-gammastep @thiagokokada -/modules/services/screen-locker.nix @jrobsonchase -/tests/modules/services/screen-locker @jrobsonchase +/modules/services/screen-locker.nix @jrobsonchase @rszamszur +/tests/modules/services/screen-locker @jrobsonchase @rszamszur /modules/services/status-notifier-watcher.nix @pltanton @@ -383,13 +413,13 @@ /modules/services/window-managers/herbstluftwm @olmokramer /tests/modules/services/window-managers/herbstluftwm @olmokramer -/modules/services/window-managers/i3-sway/i3.nix @sumnerevans -/tests/modules/services/window-managers/i3 @sumnerevans +/modules/services/window-managers/i3-sway/i3.nix @sumnerevans @sebtm +/tests/modules/services/window-managers/i3 @sumnerevans @sebtm -/modules/services/window-managers/i3-sway/lib @sumnerevans +/modules/services/window-managers/i3-sway/lib @sumnerevans @sebtm -/modules/services/window-managers/i3-sway/sway.nix @alexarice @sumnerevans -/tests/modules/services/window-managers/sway @sumnerevans +/modules/services/window-managers/i3-sway/sway.nix @alexarice @sumnerevans @sebtm +/tests/modules/services/window-managers/sway @sumnerevans @sebtm /modules/services/window-managers/i3-sway/swaynag.nix @polykernel diff --git a/infra/libkookie/home-manager/.github/dependabot.yml b/infra/libkookie/home-manager/.github/dependabot.yml index db1616ac185..c1d917c2cd0 100644 --- a/infra/libkookie/home-manager/.github/dependabot.yml +++ b/infra/libkookie/home-manager/.github/dependabot.yml @@ -10,7 +10,7 @@ updates: - package-ecosystem: "github-actions" directory: "/" - target-branch: "release-21.05" + target-branch: "release-21.11" schedule: interval: "weekly" commit-message: diff --git a/infra/libkookie/home-manager/.github/stale.yml b/infra/libkookie/home-manager/.github/stale.yml index 16b4e8c790c..adc74083f65 100644 --- a/infra/libkookie/home-manager/.github/stale.yml +++ b/infra/libkookie/home-manager/.github/stale.yml @@ -1,14 +1,14 @@ # Configuration for probot-stale - https://github.com/probot/stale daysUntilStale: 90 -daysUntilClose: 7 +daysUntilClose: false staleLabel: "status: stale" -closeComment: false issues: markComment: |

Thank you for your contribution! I marked this issue as stale due to inactivity. - If this remains inactive for another 7 days, I will close this issue. + Please be considerate of people watching this issue and receiving notifications before commenting 'I have this issue too'. + We welcome additional information that will help resolve this issue. Please read the relevant sections below before commenting.

@@ -36,10 +36,7 @@ issues:
Memorandum on closing issues

- If you have nothing of substance to add, please refrain from commenting and allow the bot to close the issue. - Also, don't be afraid to manually close an issue, even if it holds valuable information. -

-

+ Don't be afraid to manually close an issue, even if it holds valuable information. Closed issues stay in the system for people to search, read, cross-reference, or even reopen – nothing is lost! Closing obsolete issues is an important way to help maintainers focus their time and effort.

@@ -49,7 +46,6 @@ pulls:

Thank you for your contribution! I marked this pull request as stale due to inactivity. - If this remains inactive for another 7 days, I will close this PR. Please read the relevant sections below before commenting.

diff --git a/infra/libkookie/home-manager/.github/workflows/github_pages.yml b/infra/libkookie/home-manager/.github/workflows/github_pages.yml index 97e784bda0f..1e0a0f9a9f8 100644 --- a/infra/libkookie/home-manager/.github/workflows/github_pages.yml +++ b/infra/libkookie/home-manager/.github/workflows/github_pages.yml @@ -10,8 +10,8 @@ jobs: os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 - - uses: cachix/install-nix-action@v16 + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v17 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@v10 diff --git a/infra/libkookie/home-manager/.github/workflows/test.yml b/infra/libkookie/home-manager/.github/workflows/test.yml index e04df065cfe..22e76b5958c 100644 --- a/infra/libkookie/home-manager/.github/workflows/test.yml +++ b/infra/libkookie/home-manager/.github/workflows/test.yml @@ -11,8 +11,8 @@ jobs: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 - - uses: cachix/install-nix-action@v16 + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v17 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@v10 diff --git a/infra/libkookie/home-manager/README.md b/infra/libkookie/home-manager/README.md index bd9af2c6c74..585f337b68c 100644 --- a/infra/libkookie/home-manager/README.md +++ b/infra/libkookie/home-manager/README.md @@ -9,7 +9,8 @@ specific (non global) packages and dotfiles. Before attempting to use Home Manager please read the warning below. For a more systematic overview of Home Manager and its available -options, please see the [Home Manager manual][manual]. +options, please see the Home Manager [manual][manual] and +[options][configuration options]. If you would like to contribute to Home Manager then please have a look at the [contributing][] chapter of the manual. @@ -41,8 +42,8 @@ distributions and NixOS versions. Also, the `home-manager` tool does not explicitly support rollbacks at the moment so if your home directory gets messed up you'll have to fix -it yourself. See the [rollbacks](#rollbacks) section for instructions -on how to manually perform a rollback. +it yourself. See the [rollbacks][] section for instructions on how to +manually perform a rollback. Now when your expectations have been built up and you are eager to try all this out you can go ahead and read the rest of this text. @@ -125,3 +126,4 @@ This project is licensed under the terms of the [MIT license](LICENSE). [manual nixos install]: https://nix-community.github.io/home-manager/index.html#sec-install-nixos-module [manual nix-darwin install]: https://nix-community.github.io/home-manager/index.html#sec-install-nix-darwin-module [manual nix flakes]: https://nix-community.github.io/home-manager/index.html#ch-nix-flakes +[rollbacks]: https://nix-community.github.io/home-manager/index.html#sec-usage-rollbacks diff --git a/infra/libkookie/home-manager/docs/default.nix b/infra/libkookie/home-manager/docs/default.nix index 22feac5c978..72ea0b37fdd 100644 --- a/infra/libkookie/home-manager/docs/default.nix +++ b/infra/libkookie/home-manager/docs/default.nix @@ -9,8 +9,8 @@ let name = "nmd"; owner = "rycee"; repo = "nmd"; - rev = "527245ff605bde88c2dd2ddae21c6479bb7cf8aa"; - sha256 = "1zi0f9y3wq4bpslx1py3sfgrgd9av41ahpandvs6rvkpisfsqqlp"; + rev = "de522bdd533350b3afb41e1ce9b3afb72922fba2"; + sha256 = "1ji4q7b48nnicgpnnl6yb9xb9zfkmmzkch4yifinphw3ag38qrmd"; }; nmd = import nmdSrc { inherit lib pkgs; }; diff --git a/infra/libkookie/home-manager/docs/faq.adoc b/infra/libkookie/home-manager/docs/faq.adoc index c42ea87441d..935317e7a13 100644 --- a/infra/libkookie/home-manager/docs/faq.adoc +++ b/infra/libkookie/home-manager/docs/faq.adoc @@ -91,14 +91,22 @@ while the `common.nix` file contains configuration shared across the two logins. You can get some inspiration from the {post-your-homenix}[Post your home-manager home.nix file!] Reddit thread. -=== Why do I get an error message about `ca.desrt.dconf`? +=== Why do I get an error message about `ca.desrt.dconf` or `dconf.service`? -You are most likely trying to configure the GTK or Gnome Terminal but the DBus session is not aware of the dconf service. The full error you might get is +You are most likely trying to configure something that uses dconf +but the DBus session is not aware of the dconf service. +The full error you might get is ---- error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files ---- +or + +---- +error: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit dconf.service not found. +---- + The solution on NixOS is to add [source,nix] diff --git a/infra/libkookie/home-manager/docs/nix-flakes.adoc b/infra/libkookie/home-manager/docs/nix-flakes.adoc index a0e6aac7de0..2c1bb099cfe 100644 --- a/infra/libkookie/home-manager/docs/nix-flakes.adoc +++ b/infra/libkookie/home-manager/docs/nix-flakes.adoc @@ -18,10 +18,13 @@ Either set in `nix.conf` [source,bash] experimental-features = nix-command flakes + -or pass them to `nix` by +or pass them to `nix` and `home-manager` by + [source,console] -nix --experimental-features "nix-command flakes" your command +---- +$ nix --extra-experimental-features "nix-command flakes" +$ home-manager --extra-experimental-features "nix-command flakes" +---- * Prepare your Home Manager configuration (`home.nix`). + @@ -96,9 +99,10 @@ Make sure to also update to the `stateVersion` option accordingly. [source,console] ---- $ nix build --no-link #homeConfigurations.jdoe.activationPackage -$ "$(nix path-info #homeConfigurations.jdoe.activationPackage)"/bin/activate +$ "$(nix path-info #homeConfigurations.jdoe.activationPackage)"/activate ---- + +Substitute `` with the flake URI of the configuration flake. If `flake.nix` resides in `~/.config/nixpkgs`, `` may be `~/.config/nixpkgs` as a Git tree or `path:~/.config/nixpkgs` if not. @@ -107,7 +111,7 @@ as a Git tree or `path:~/.config/nixpkgs` if not. building a flake-based configuration is as simple as + [source,console] -$ home-manager switch --flake 'flake-uri#jdoe' +$ home-manager switch --flake '#jdoe' + once home-manager is installed. + diff --git a/infra/libkookie/home-manager/docs/release-notes/rl-2205.adoc b/infra/libkookie/home-manager/docs/release-notes/rl-2205.adoc index ee4fc1fdf93..48482ddf5e1 100644 --- a/infra/libkookie/home-manager/docs/release-notes/rl-2205.adoc +++ b/infra/libkookie/home-manager/docs/release-notes/rl-2205.adoc @@ -21,6 +21,9 @@ such as the `home-manager` command line tool and the activation script. If you would like to contribute to the translation effort then you can do so through the {hm-weblate}[Home Manager Weblate project]. +* A new module, `launchd.agents` was added. +Use this to enable services based on macOS LaunchAgents. + [[sec-release-22.05-state-version-changes]] === State Version Changes diff --git a/infra/libkookie/home-manager/docs/usage.adoc b/infra/libkookie/home-manager/docs/usage.adoc index 52584251ed7..26b9eee78ec 100644 --- a/infra/libkookie/home-manager/docs/usage.adoc +++ b/infra/libkookie/home-manager/docs/usage.adoc @@ -228,3 +228,18 @@ in your system configuration and ---- in your Home Manager configuration. + +[[sec-updating]] +=== Updating + +If you have installed Home Manager using the Nix channel method +then updating Home Manager is done by first updating the channel. +You can then switch to the updated Home Manager environment. + +[source,console] +---- +$ nix-channel --update +… +unpacking channels... +$ home-manager switch +---- diff --git a/infra/libkookie/home-manager/flake.nix b/infra/libkookie/home-manager/flake.nix index 9382351e6d3..a5e073173a2 100644 --- a/infra/libkookie/home-manager/flake.nix +++ b/infra/libkookie/home-manager/flake.nix @@ -4,11 +4,10 @@ outputs = { self, nixpkgs }: let # List of systems supported by home-manager binary - supportedSystems = nixpkgs.lib.platforms.unix; + supportedSystems = with nixpkgs.lib.platforms; linux ++ darwin; # Function to generate a set based on supported systems - forAllSystems = f: - nixpkgs.lib.genAttrs supportedSystems (system: f system); + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); in rec { @@ -25,10 +24,11 @@ docs-html = docs.manual.html; docs-manpages = docs.manPages; docs-json = docs.options.json; + default = self.packages.${system}.home-manager; }); - defaultPackage = - forAllSystems (system: self.packages.${system}.home-manager); + # defaultPackage is deprecated as of Nix 2.7.0 + defaultPackage = forAllSystems (system: self.packages.${system}.default); apps = forAllSystems (system: { home-manager = { @@ -44,11 +44,11 @@ homeManagerConfiguration = { configuration, system, homeDirectory , username, extraModules ? [ ], extraSpecialArgs ? { } , pkgs ? builtins.getAttr system nixpkgs.outputs.legacyPackages - , check ? true, stateVersion ? "20.09" }@args: + , lib ? pkgs.lib, check ? true, stateVersion ? "20.09" }@args: assert nixpkgs.lib.versionAtLeast stateVersion "20.09"; import ./modules { - inherit pkgs check extraSpecialArgs; + inherit pkgs lib check extraSpecialArgs; configuration = { ... }: { imports = [ configuration ] ++ extraModules; home = { inherit homeDirectory stateVersion username; }; diff --git a/infra/libkookie/home-manager/format b/infra/libkookie/home-manager/format index 0fa620c1acf..8bf78064523 100755 --- a/infra/libkookie/home-manager/format +++ b/infra/libkookie/home-manager/format @@ -19,18 +19,14 @@ find . -name '*.nix' \ ! -path ./modules/default.nix \ ! -path ./modules/files.nix \ ! -path ./modules/home-environment.nix \ + ! -path ./modules/launchd/launchd.nix \ ! -path ./modules/lib/default.nix \ ! -path ./modules/lib/file-type.nix \ ! -path ./modules/manual.nix \ ! -path ./modules/misc/news.nix \ ! -path ./modules/programs/bash.nix \ - ! -path ./modules/programs/gpg.nix \ ! -path ./modules/programs/ssh.nix \ ! -path ./modules/programs/zsh.nix \ - ! -path ./modules/services/gpg-agent.nix \ - ! -path ./modules/services/mpd.nix \ ! -path ./nix-darwin/default.nix \ ! -path ./tests/default.nix \ - ! -path ./tests/modules/home-environment/session-variables.nix \ - ! -path ./tests/modules/programs/gpg/override-defaults.nix \ -exec nixfmt $CHECK_ARG {} + diff --git a/infra/libkookie/home-manager/home-manager/completion.bash b/infra/libkookie/home-manager/home-manager/completion.bash index 7828224fccc..ec20bbc1b8a 100644 --- a/infra/libkookie/home-manager/home-manager/completion.bash +++ b/infra/libkookie/home-manager/home-manager/completion.bash @@ -293,7 +293,9 @@ _home-manager_completions () Options=( "-f" "--file" "-b" "-A" "-I" "-h" "--help" "-n" "--dry-run" "-v" \ "--verbose" "--cores" "--debug" "--impure" "--keep-failed" \ "--keep-going" "-j" "--max-jobs" "--no-substitute" "--no-out-link" \ - "--show-trace" "--substitute" "--builders" "--version") + "--show-trace" "--substitute" "--builders" "--version" \ + "--update-input" "--override-input" "--experimental-features" \ + "--extra-experimental-features" ) # ^ « home-manager »'s options. diff --git a/infra/libkookie/home-manager/home-manager/completion.fish b/infra/libkookie/home-manager/home-manager/completion.fish index cfffe821143..aca4943fe94 100644 --- a/infra/libkookie/home-manager/home-manager/completion.fish +++ b/infra/libkookie/home-manager/home-manager/completion.fish @@ -64,3 +64,7 @@ complete -c home-manager -f -l "show-trace" -d "Print stack trace of evaluation complete -c home-manager -f -l "substitute" complete -c home-manager -f -l "no-substitute" complete -c home-manager -f -l "no-out-link" +complete -c home-manager -f -l "update-input" +complete -c home-manager -f -l "override-input" +complete -c home-manager -f -l "experimental-features" +complete -c home-manager -f -l "extra-experimental-features" diff --git a/infra/libkookie/home-manager/home-manager/completion.zsh b/infra/libkookie/home-manager/home-manager/completion.zsh index 5748ee835d0..6e20d17d07f 100644 --- a/infra/libkookie/home-manager/home-manager/completion.zsh +++ b/infra/libkookie/home-manager/home-manager/completion.zsh @@ -20,6 +20,10 @@ _arguments \ '--option[option]:NAME VALUE:()' \ '--builders[builders]:SPEC:()' \ '--show-trace[show trace]' \ + '--override-input[override flake input]:NAME VALUE:()' \ + '--update-input[update flake input]:NAME:()' \ + '--experimental-features[set experimental Nix features]:VALUE:()' \ + '--extra-experimental-features:[append to experimental Nix features]:VALUE:()' \ '1: :->cmds' \ '*:: :->args' && ret=0 @@ -57,7 +61,11 @@ case "$state" in '--option[option]:NAME VALUE:()' \ '--show-trace[show trace]' \ '--substitute[substitute]' \ - '--builders[builders]:SPEC:()' + '--builders[builders]:SPEC:()' \ + '--override-input[override flake input]:NAME VALUE:()' \ + '--update-input[update flake input]:NAME:()' \ + '--experimental-features[set experimental Nix features]:VALUE:()' \ + '--extra-experimental-features:[append to experimental Nix features]:VALUE:()' ;; esac esac diff --git a/infra/libkookie/home-manager/home-manager/home-manager b/infra/libkookie/home-manager/home-manager/home-manager index 8bc58f85c23..6483c59f10c 100644 --- a/infra/libkookie/home-manager/home-manager/home-manager +++ b/infra/libkookie/home-manager/home-manager/home-manager @@ -11,6 +11,23 @@ export TEXTDOMAINDIR=@OUT@/share/locale # shellcheck disable=1091 source @HOME_MANAGER_LIB@ +function removeByName() { + nix profile list \ + | { grep "$1" || test $? = 1; } \ + | cut -d ' ' -f 4 \ + | xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG +} + +function setNixProfileCommands() { + if [[ -e ~/.nix-profile/manifest.json ]] ; then + LIST_OUTPATH_CMD="nix profile list" + REMOVE_CMD="removeByName" + else + LIST_OUTPATH_CMD="nix-env -q --out-path" + REMOVE_CMD="nix-env -q" + fi +} + function setVerboseAndDryRun() { if [[ -v VERBOSE ]]; then export VERBOSE_ARG="--verbose" @@ -370,8 +387,9 @@ function doExpireGenerations() { } function doListPackages() { + setNixProfileCommands local outPath - outPath="$(nix-env -q --out-path | grep -o '/.*home-manager-path$')" + outPath="$($LIST_OUTPATH_CMD | grep -o '/.*home-manager-path$')" if [[ -n "$outPath" ]] ; then nix-store -q --references "$outPath" | sed 's/[^-]*-//' else @@ -446,6 +464,7 @@ function doShowNews() { function doUninstall() { setVerboseAndDryRun + setNixProfileCommands _i 'This will remove Home Manager from your system.' @@ -463,7 +482,7 @@ function doUninstall() { HOME_MANAGER_CONFIG="$(mktemp --tmpdir home-manager.XXXXXXXXXX)" echo "{ lib, ... }: { home.file = lib.mkForce {}; }" > "$HOME_MANAGER_CONFIG" doSwitch - $DRY_RUN_CMD nix-env -e home-manager-path || true + $DRY_RUN_CMD $REMOVE_CMD home-manager-path || true rm "$HOME_MANAGER_CONFIG" $DRY_RUN_CMD rm $VERBOSE_ARG -r \ "${XDG_DATA_HOME:-$HOME/.local/share}/home-manager" @@ -608,6 +627,14 @@ while [[ $# -gt 0 ]]; do PASSTHROUGH_OPTS+=("$opt" "$1" "$2") shift 2 ;; + --experimental-features) + PASSTHROUGH_OPTS+=("$opt" "$1") + shift + ;; + --extra-experimental-features) + PASSTHROUGH_OPTS+=("$opt" "$1") + shift + ;; --no-out-link) NO_OUT_LINK=1 ;; diff --git a/infra/libkookie/home-manager/home-manager/po/de.po b/infra/libkookie/home-manager/home-manager/po/de.po index caacabea43a..33a748fab52 100644 --- a/infra/libkookie/home-manager/home-manager/po/de.po +++ b/infra/libkookie/home-manager/home-manager/po/de.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-15 01:53+0000\n" -"Last-Translator: mainrs \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-23 18:56+0000\n" +"Last-Translator: Manu [tennox] \n" "Language-Team: German \n" "Language: de\n" @@ -17,27 +17,26 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "Keine Konfigurationsdatei unter %s gefunden" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" msgstr "Keine Konfigurationsdatei gefunden. Bitte erstellen Sie eine unter %s" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" msgstr "" "Die Optionen einer Flake-Konfigurationen können nicht inspizieren werden" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" msgstr "Kann eine Flake-Konfiguration nicht instanziieren" -#: home-manager/home-manager:220 -#, fuzzy +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -51,95 +50,95 @@ msgstr[1] "" "Es gibt %d ungelesene und relevante Nachrichten.\n" "Lesen Sie sie, indem Sie den Befehl \"%s news\" ausführen." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "Unbekannte \"news.display\" Einstellung \"%s\"." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "Bitte legen Sie die $EDITOR Variable fest" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "Build kann nicht im schreibgeschützten Ordner ausgeführt werden" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" msgstr "Keine Generation mit ID %s" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "Die jetzige Generation %s kann nicht entfernt werden" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "Entferne Generation %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" msgstr "Keine ablaufenden Generationen" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." -msgstr "Es scheint, als ob keine Home Manager Pakete installiert sind" +msgstr "Es scheint, als ob keine Home Manager Pakete installiert sind." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "Unbekannte Argumente %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "Dies wird Home Manager von Ihrem System entfernen." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "Dies ist ein Probelauf, es wird nichts vom System deinstalliert." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" msgstr "Möchten Sie wirklich Home Manager deinstallieren?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." msgstr "Wechsle zu einer leeren Home Manager Konfiguration..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" -msgstr "Yay!" +msgstr "Juhu!" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "Entferne alle Home Manager Generationen?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "Alle Generationen kommen nun für die Garbage Collection in Frage." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "" "Ignoriere Generationen, aber diese könnten immer noch mittels des Garbage " "Collectors aufgeräumt werden." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." msgstr "" "Home Manager ist installiert, aber Ihre home.nix Datei bleibt unberührt." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "%s: unbekannte Option '%s'" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "Führe '%s --help' aus, um Hilfe zur Verwendung zu erhalten" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "expire-generations erwartet ein Argument, hat aber %d erhalten." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "Unbekannter Befehl: %s" @@ -166,7 +165,7 @@ msgstr "" " %s\n" "\n" "bearbeiten um Home Manager zu konfigurieren. Führen Sie\n" -"'man home-configuration.nix'aus, um alle verfügbaren Optionen zu\n" +"'man home-configuration.nix' aus, um alle verfügbaren Optionen zu\n" "sehen." #. translators: The "%s" specifier will be replaced by a URL. diff --git a/infra/libkookie/home-manager/home-manager/po/es.po b/infra/libkookie/home-manager/home-manager/po/es.po index 64a87416d31..95f2fea382d 100644 --- a/infra/libkookie/home-manager/home-manager/po/es.po +++ b/infra/libkookie/home-manager/home-manager/po/es.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2022-01-11 21:45+0000\n" "Last-Translator: Robert Helgesson \n" "Language-Team: Spanish , 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-04-09 18:11+0000\n" +"Last-Translator: Artin Mobasher \n" +"Language-Team: Persian \n" +"Language: fa\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.12-dev\n" + +#: home-manager/home-manager:60 +msgid "No configuration file found at %s" +msgstr "هیچ فایل تنظیماتی در %s پیدا نشد" + +#: home-manager/home-manager:79 +msgid "No configuration file found. Please create one at %s" +msgstr "هیچ فایل تنظیماتی پیدا نشد. لطفا یک فایل در %s بسازید" + +#: home-manager/home-manager:122 +msgid "Can't inspect options of a flake configuration" +msgstr "" + +#: home-manager/home-manager:162 +msgid "Can't instantiate a flake configuration" +msgstr "" + +#: 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] "" +msgstr[1] "" + +#: home-manager/home-manager:251 +msgid "Unknown \"news.display\" setting \"%s\"." +msgstr "" + +#: home-manager/home-manager:258 +#, sh-format +msgid "Please set the $EDITOR environment variable" +msgstr "" + +#: 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 "" + +#: home-manager/home-manager:357 +msgid "Cannot remove the current generation %s" +msgstr "" + +#: home-manager/home-manager:359 +msgid "Removing generation %s" +msgstr "" + +#: 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 "" + +#: home-manager/home-manager:453 +msgid "Unknown argument %s" +msgstr "" + +#: home-manager/home-manager:469 +msgid "This will remove Home Manager from your system." +msgstr "" + +#: home-manager/home-manager:472 +msgid "This is a dry run, nothing will actually be uninstalled." +msgstr "" + +#: home-manager/home-manager:476 +msgid "Really uninstall Home Manager?" +msgstr "" + +#: home-manager/home-manager:481 +msgid "Switching to empty Home Manager configuration..." +msgstr "" + +#: home-manager/home-manager:493 +#, fuzzy +msgid "Yay!" +msgstr "آره!" + +#: home-manager/home-manager:500 +msgid "Remove all Home Manager generations?" +msgstr "" + +#: home-manager/home-manager:507 +msgid "All generations are now eligible for garbage collection." +msgstr "" + +#: 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/home-manager:673 +msgid "%s: unknown option '%s'" +msgstr "" + +#: home-manager/home-manager:674 +msgid "Run '%s --help' for usage help" +msgstr "" + +#: home-manager/home-manager:708 +msgid "expire-generations expects one argument, got %d." +msgstr "" + +#: home-manager/home-manager:730 +msgid "Unknown command: %s" +msgstr "دستور ناشناخته: %s" + +#: home-manager/install.nix:22 +msgid "Creating initial Home Manager configuration..." +msgstr "ایجاد تنظیمات اولیه Home-Manager..." + +#: home-manager/install.nix:66 +msgid "Creating initial Home Manager generation..." +msgstr "" + +#. 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 "" + +#. 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 "" diff --git a/infra/libkookie/home-manager/home-manager/po/fr.po b/infra/libkookie/home-manager/home-manager/po/fr.po index 8a7db82d111..5a129e9d24f 100644 --- a/infra/libkookie/home-manager/home-manager/po/fr.po +++ b/infra/libkookie/home-manager/home-manager/po/fr.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2021-12-19 16:51+0000\n" "Last-Translator: TheBlackBeans \n" "Language-Team: French 1;\n" "X-Generator: Weblate 4.10\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "Aucun fichier de configuration trouvé à l'emplacement %s" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" msgstr "" "Aucun fichier de configuration trouvé. Veuillez en créer un à l'emplacement " "%s" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" msgstr "Impossible d'inspecter les options d'une configuration en flocons" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" msgstr "Impossible d'instancier une configuration flake" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -51,96 +51,96 @@ msgstr[1] "" "Il y a %d nouveaux éléments non lus et pertinents.\n" "Vous pouvez les lire en exécutant la commande \"%s news\"." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "Configuration \"news.display\" iconnue \"%s\"." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "Veuillez définir la variable d'environnement $EDITOR" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "Impossible de lancer une compilation dans un dossier en écriture seule" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" msgstr "Aucune génération avec l'identifiant %s" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "Impossible de supprimer la génération courante %s" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "Suppression de la génération %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" msgstr "Aucune génération expirée" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." msgstr "Aucun paquet home-manager ne semble être installé." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "Aucun argument %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "Cela va supprimer Home Manager de votre système." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "C'est un essai, rien ne sera réellement désinstallé." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" msgstr "Voulez-vous vraiment désinstaller Home Manager ?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." msgstr "Changement vers une configuration vierge de Home Manager..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" msgstr "Yay !" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "Supprimer toutes les générations de Home Manager ?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "" "Toutes les générations sont maintenant éligibles pour la collecte des " "ordures." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "" "Les générations sortantes mais elles peuvent encore être collectées par les " "ordures." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." msgstr "Home Manager est désinstallé mais votre home.nix reste intact." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "%s : option inconnue « %s »" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "Exécuter « %s --help » pour de l'aide sur l'utilisation" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "expire-generations attend un argument, a obtenu %d." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "Commande inconnue : %s" diff --git a/infra/libkookie/home-manager/home-manager/po/home-manager.pot b/infra/libkookie/home-manager/home-manager/po/home-manager.pot index e37bd6851a9..003a344b0e9 100644 --- a/infra/libkookie/home-manager/home-manager/po/home-manager.pot +++ b/infra/libkookie/home-manager/home-manager/po/home-manager.pot @@ -8,7 +8,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,23 +18,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" msgstr "" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" msgstr "" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" msgstr "" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -44,92 +44,92 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "" -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" msgstr "" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" msgstr "" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." msgstr "" -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "" -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "" -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" msgstr "" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." msgstr "" -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" msgstr "" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "" -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "" -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." msgstr "" -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "" -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "" diff --git a/infra/libkookie/home-manager/home-manager/po/it.po b/infra/libkookie/home-manager/home-manager/po/it.po new file mode 100644 index 00000000000..610762624c1 --- /dev/null +++ b/infra/libkookie/home-manager/home-manager/po/it.po @@ -0,0 +1,185 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Home Manager contributors +# This file is distributed under the same license as the Home Manager package. +# FIRST AUTHOR , 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-04-20 18:18+0000\n" +"Last-Translator: Frankie McEyes \n" +"Language-Team: Italian \n" +"Language: it\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.12-dev\n" + +#: home-manager/home-manager:60 +msgid "No configuration file found at %s" +msgstr "Nessun file di configurazione trovato in %s" + +#: home-manager/home-manager:79 +msgid "No configuration file found. Please create one at %s" +msgstr "Nessun file di configurazione trovato. Per favore crearne uno in %s" + +#: home-manager/home-manager:122 +msgid "Can't inspect options of a flake configuration" +msgstr "Impossibile ispezionare le opzioni di configurazione flake" + +#: home-manager/home-manager:162 +msgid "Can't instantiate a flake configuration" +msgstr "Impossibile istanziare una configurazione flake" + +#: 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] "" +"C'è %d novità di elementi non letta.\n" +"Leggila con il comando \"%s news\"." +msgstr[1] "" +"Ci sono %d novità di elementi non letti\n" +"Leggile con il comando \"%s news\"." + +#: home-manager/home-manager:251 +msgid "Unknown \"news.display\" setting \"%s\"." +msgstr "Opzione \"news.display\" sconosciuta \"%s\"." + +#: home-manager/home-manager:258 +#, sh-format +msgid "Please set the $EDITOR environment variable" +msgstr "Per favore impostare la variabile d'ambient $EDITOR" + +#: home-manager/home-manager:273 +msgid "Cannot run build in read-only directory" +msgstr "Impossibile eseguire la build in una cartella in sola lettura" + +#: home-manager/home-manager:355 +msgid "No generation with ID %s" +msgstr "Nessuna generazione con ID %s" + +#: home-manager/home-manager:357 +msgid "Cannot remove the current generation %s" +msgstr "Impossibile rimuovere la generazione corrente %s" + +#: home-manager/home-manager:359 +msgid "Removing generation %s" +msgstr "Rimuovo la generazione %s" + +#: home-manager/home-manager:385 +msgid "No generations to expire" +msgstr "Nessuna generazione in scadenza" + +#: home-manager/home-manager:396 +msgid "No home-manager packages seem to be installed." +msgstr "Nessun pacchetto home-manager sembra essere installato." + +#: home-manager/home-manager:453 +msgid "Unknown argument %s" +msgstr "Argomento sconosciuto: %s" + +#: home-manager/home-manager:469 +msgid "This will remove Home Manager from your system." +msgstr "Questo rimuoverà Home Manger dal tuo sistema." + +#: home-manager/home-manager:472 +msgid "This is a dry run, nothing will actually be uninstalled." +msgstr "Questo è un avvio a secco, nulla verrà realmente disinstallato." + +#: home-manager/home-manager:476 +msgid "Really uninstall Home Manager?" +msgstr "Vuoi davvero disinstallare Home Manager?" + +#: home-manager/home-manager:481 +msgid "Switching to empty Home Manager configuration..." +msgstr "Cambio ad una configurazione Home Manager vuota..." + +#: home-manager/home-manager:493 +msgid "Yay!" +msgstr "Urrà!" + +#: home-manager/home-manager:500 +msgid "Remove all Home Manager generations?" +msgstr "Rimuovere tutte le generazioni Home Manager?" + +#: home-manager/home-manager:507 +msgid "All generations are now eligible for garbage collection." +msgstr "Tutte le generazioni sono ora pronte per essere cestinate." + +#: home-manager/home-manager:510 +msgid "Leaving generations but they may still be garbage collected." +msgstr "Abbandono le generazioni, ma possono essere ancora cestinate." + +#: home-manager/home-manager:514 +msgid "Home Manager is uninstalled but your home.nix is left untouched." +msgstr "Home Manager è disinstallato ma la tua home.Nix non è stata toccata." + +#: home-manager/home-manager:673 +msgid "%s: unknown option '%s'" +msgstr "%s: opzione sconosciuta '%s'" + +#: home-manager/home-manager:674 +msgid "Run '%s --help' for usage help" +msgstr "Esegui '%s --help' per ottenere aiuto" + +#: home-manager/home-manager:708 +msgid "expire-generations expects one argument, got %d." +msgstr "expire-generations si aspetta un solo argomento, invece di %d." + +#: home-manager/home-manager:730 +msgid "Unknown command: %s" +msgstr "Comando sconosciuto: %s" + +#: home-manager/install.nix:22 +msgid "Creating initial Home Manager configuration..." +msgstr "Creando la configurazione iniziale di Home Manager..." + +#: home-manager/install.nix:66 +msgid "Creating initial Home Manager generation..." +msgstr "Creando la generazione iniziale di Home Manager..." + +#. 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 "" +"Tutto fatto! Home-manager dovrebbe essere installato e puoi modificare\n" +"\n" +"%s\n" +"\n" +"per configurare Home Manager. Esegui 'man home-configurazion.nix' per\n" +"consultare tutte le opzioni disponibili." + +#. 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 "" +"Oh no, l'installazione non è andata a buon fine! Per favore aprire un ticket " +"issue a\n" +"\n" +"%s\n" +"\n" +"se l'errore sembra essere causato da Home Manager." + +#: home-manager/install.nix:83 +msgid "This derivation is not buildable, please run it using nix-shell." +msgstr "" +"Questa derivazione non è compilabile, prova ad eseguila usando nix-shell." diff --git a/infra/libkookie/home-manager/home-manager/po/ja.po b/infra/libkookie/home-manager/home-manager/po/ja.po index 3a248fe5df4..42c50a278a9 100644 --- a/infra/libkookie/home-manager/home-manager/po/ja.po +++ b/infra/libkookie/home-manager/home-manager/po/ja.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2022-02-10 04:55+0000\n" "Last-Translator: Heman Gandhi \n" "Language-Team: Japanese \n" "Language-Team: Korean \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Polish =20) ? 1 : 2;\n" "X-Generator: Weblate 4.10.1\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "Nie znaleziono pliku konfiguracyjnego %s" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" msgstr "Nie znaleziono pliku konfiguracyjnego. Proszę utworzyć plik %s" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" msgstr "Nie mogę sprawdzić konfiguracji flake'a" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" msgstr "Nie mogę zinstancjować konfiguracji flake'a" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -53,95 +53,95 @@ msgstr[2] "" "Jest %d nieodczytanych wiadomości.\n" "Możesz je odczytać uruchamiając „%s news”." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "Nieznane ustawienie „%s” „news.display”." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "Proszę ustawić zmienną środowiskową $EDITOR" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "Nie mogę uruchomić budowania w katalogu tylko-do-odczytu" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" msgstr "Brak generacji z ID %s" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "Nie mogę usunąć bieżącej generacji %s" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "Usuwanie generacji %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" msgstr "Brak wygasających generacji" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." msgstr "Pakiety home-manager nie wydają się być zainstalowane." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "Nieznany argument %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "To usunie Home Managera z twojego systemu." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "To jest próba, faktycznie nic nie będzie usunięte." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" msgstr "Jesteś pewien usunięcia Home Managera?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." msgstr "Przełączanie do pustej konfiguracji Home Managera..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" msgstr "Jej!" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "Usunąć wszystkie generacje Home Managera?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "" "Wszystkie generacje są uwzględnione przy oczyszczaniu (garbage collection)." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "" "Zostawiam generacje ale wciąż mogą zostać usunięte (garbage collection)." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." msgstr "" "Home Manager jest usunięty ale twój home.nix jest pozostawiony nietknięty." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "%s: nieznana opcja „%s”" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "Uruchom „%s --help” by otrzymać pomoc" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "expire-generations oczekuje jednego argumentu, otrzymane %d." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "Nieznana komenda: %s" diff --git a/infra/libkookie/home-manager/home-manager/po/pt_BR.po b/infra/libkookie/home-manager/home-manager/po/pt_BR.po index fc9ee862ba6..de2fb705676 100644 --- a/infra/libkookie/home-manager/home-manager/po/pt_BR.po +++ b/infra/libkookie/home-manager/home-manager/po/pt_BR.po @@ -7,33 +7,35 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-04-04 11:11+0000\n" +"Last-Translator: Alex Miranda \n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\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.12-dev\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" -msgstr "" +msgstr "Nenhum arquivo de configuração encontrado no %s" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" -msgstr "" +msgstr "Arquivo de configuração não encontrado. Por favor crie um em %s" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" -msgstr "" +msgstr "Não é possivel inspecionar a opção de configuração do flake" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" -msgstr "" +msgstr "Não foi possível instanciar a configuração de flake" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -41,104 +43,110 @@ msgid_plural "" "There are %d unread and relevant news items.\n" "Read them by running the command \"%s news\"." msgstr[0] "" +"Há %d novo item relevante não lido\n" +"Leia executando o comando \"%s news\"." msgstr[1] "" +"Há %d novos itens relevants não lidos\n" +"Leia executando o comando \"%s news\"." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." -msgstr "" +msgstr "Valor \"%s\" para configuração \"news.display\" não reconhecido." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" -msgstr "" +msgstr "Por favor defina a variável de ambiente $EDITOR" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" -msgstr "" +msgstr "Não é possível fazer o build em um diretório somente leitura" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" -msgstr "" +msgstr "Nenhuma geração com ID %s" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" -msgstr "" +msgstr "Não foi possível remover a geração atual %s" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" -msgstr "" +msgstr "Removendo geração %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" -msgstr "" +msgstr "Nenhuma geração a expirar" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." -msgstr "" +msgstr "Nenhum pacote parece instalado com home-manager." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" -msgstr "" +msgstr "Argumento desconhecido %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." -msgstr "" +msgstr "Isso irá remover o Home Manager do seu sistema." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." -msgstr "" +msgstr "Essa é uma execução de teste, nada de fato será desinstalado." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" -msgstr "" +msgstr "Confirma a desinstalação do Home Manager?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." -msgstr "" +msgstr "Trocando para configuração vazia do Home Manager..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" -msgstr "" +msgstr "Boa!" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" -msgstr "" +msgstr "Remover todas as gerações do Home Manager?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." -msgstr "" +msgstr "Todas gerações agora são elegíveis para coleta do garbage collector." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "" +"Deixando gerações, entretanto elas ainda poderão ser limpas pelo garbage " +"collector." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." -msgstr "" +msgstr "Home Manager foi desinstalado, mas o seu home.nix foi deixado intacto." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" -msgstr "" +msgstr "%s: opção não reconhecida '%s'" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" -msgstr "" +msgstr "Execute '%s --help' para instruções de uso" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." -msgstr "" +msgstr "expire-generations espera um argumento, recebeu %d." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" -msgstr "" +msgstr "Comando não reconhecido: %s" #: home-manager/install.nix:22 msgid "Creating initial Home Manager configuration..." -msgstr "" +msgstr "Criando a configuração inicial do Home Manager..." #: home-manager/install.nix:66 msgid "Creating initial Home Manager generation..." -msgstr "" +msgstr "Criando a geração inicial do Home Manager..." #. translators: The "%s" specifier will be replaced by a file path. #: home-manager/install.nix:71 @@ -150,6 +158,13 @@ msgid "" "to configure Home Manager. Run 'man home-configuration.nix' to\n" "see all available options." msgstr "" +"Pronto! O home-manager deve ser instalado agora e você poderá editar o " +"arquivo\n" +"\n" +" %s\n" +"\n" +"para configurar o Home Manager. Execute 'man home-configuration.nix' para\n" +"ver todas as opções disponíveis." #. translators: The "%s" specifier will be replaced by a URL. #: home-manager/install.nix:76 @@ -160,7 +175,14 @@ msgid "" "\n" "if the error seems to be the fault of Home Manager." msgstr "" +"Ixi, a instalação falhou! Por favor crie um issue no\n" +"\n" +" %s\n" +"\n" +"se o erro lhe parecer ser um problema do Home Manager." #: home-manager/install.nix:83 msgid "This derivation is not buildable, please run it using nix-shell." msgstr "" +"O build dessa derivation não pode ser feito, por favor rode usando o nix-" +"shell." diff --git a/infra/libkookie/home-manager/home-manager/po/ru.po b/infra/libkookie/home-manager/home-manager/po/ru.po index 7ccb1c03a87..05378c0fe52 100644 --- a/infra/libkookie/home-manager/home-manager/po/ru.po +++ b/infra/libkookie/home-manager/home-manager/po/ru.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2021-12-21 19:55+0000\n" "Last-Translator: Mikhail Chekan \n" "Language-Team: Russian =20) ? 1 : 2;\n" "X-Generator: Weblate 4.10\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "Не найден файл конфигурации в %s" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" msgstr "Не найден файл конфигурации. Пожалуйста, создайте его в %s" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" msgstr "Не могу получить опции для flake-конфигурации" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" msgstr "Не могу создать экземляр для flake-конфигурации" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -53,92 +53,92 @@ msgstr[2] "" "У вас есть %d непрочитанных и релевантных новостей.\n" "Прочтите их, выполнив команду \"%s news\"." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "Неизвестное значение \"news.display\": \"%s\"." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "Пожалуйста, определите переменную среды $EDITOR" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "Не могу начать сборку в директории, защищённой от записи" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" msgstr "Поколение под номером %s не существует" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "Не могу удалить текущее поколение %s" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "Удаляю поколение %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" msgstr "Нет поколений, которые можно просрочить" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." msgstr "Не обнаружено пакетов, установленных через home-manager." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "Неизвестный аргумент %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "Это удалит Home Manager из вашей системы." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "Это пробный запуск, на самом деле ничего не удаляется." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" msgstr "Действительно хотите удалить Home Manager?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." msgstr "Переключаюсь на пустую конфигурацию Home Manager..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" msgstr "Ура!" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "Удалить все поколения Home Manager?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "Теперь все поколения готовы к удалению сборщиком мусора." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." msgstr "Поколения остаются, но их ещё можно удалить сборщиком мусора." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." msgstr "Home Manager удалён, но ваш home.nix остался нетронутым." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "%s: неизвестная опция '%s'" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "Выполните '%s --help', чтобы получить справку" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "expire-generations требует один аргумент, но передано %d." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "Неизвестная команда: %s" diff --git a/infra/libkookie/home-manager/home-manager/po/sv.po b/infra/libkookie/home-manager/home-manager/po/sv.po index 01ae51911b7..6ca1fc7f946 100644 --- a/infra/libkookie/home-manager/home-manager/po/sv.po +++ b/infra/libkookie/home-manager/home-manager/po/sv.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2021-12-17 20:50+0000\n" "Last-Translator: Robert Helgesson \n" "Language-Team: Swedish \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -17,25 +17,26 @@ msgstr "" "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.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" -#: home-manager/home-manager:43 +#: home-manager/home-manager:60 msgid "No configuration file found at %s" msgstr "%s konumunda yapılandırma dosyası bulunamadı" -#: home-manager/home-manager:62 +#: home-manager/home-manager:79 msgid "No configuration file found. Please create one at %s" -msgstr "Yapılandırma dosyası bulunamadı. Lütfen %s konumunda bir tane oluşturun" +msgstr "" +"Yapılandırma dosyası bulunamadı. Lütfen %s konumunda bir tane oluşturun" -#: home-manager/home-manager:105 +#: home-manager/home-manager:122 msgid "Can't inspect options of a flake configuration" -msgstr "Flake konfigürasyonunun ayarları incelenemiyor" +msgstr "Flake yapılandırmasının ayarları incelenemiyor" -#: home-manager/home-manager:145 +#: home-manager/home-manager:162 msgid "Can't instantiate a flake configuration" -msgstr "Flake konfigürasyonu örneklendirilemiyor" +msgstr "Flake yapılandırması örneklendirilemiyor" -#: home-manager/home-manager:220 +#: home-manager/home-manager:237 msgid "" "There is %d unread and relevant news item.\n" "Read it by running the command \"%s news\"." @@ -49,98 +50,98 @@ msgstr[1] "" "%d tane okunmamış ilgili haberler bulunmakta.\n" "Okumak için \"%s news\"." -#: home-manager/home-manager:234 +#: home-manager/home-manager:251 msgid "Unknown \"news.display\" setting \"%s\"." msgstr "Bilinmeyen \"news.display\" seçeneği \"%s\"." -#: home-manager/home-manager:241 +#: home-manager/home-manager:258 #, sh-format msgid "Please set the $EDITOR environment variable" msgstr "Lütfen $EDITOR ortam değişkenini tanımlayın" -#: home-manager/home-manager:256 +#: home-manager/home-manager:273 msgid "Cannot run build in read-only directory" msgstr "İnşa, sadece okunabilir bir klasörde çalıştırılamaz" -#: home-manager/home-manager:338 +#: home-manager/home-manager:355 msgid "No generation with ID %s" -msgstr "%S ID'sine sahip inşa bulunamadı" +msgstr "%s ID'sine sahip inşa bulunamadı" -#: home-manager/home-manager:340 +#: home-manager/home-manager:357 msgid "Cannot remove the current generation %s" msgstr "Kullanımda olan %s inşası silinemez" -#: home-manager/home-manager:342 +#: home-manager/home-manager:359 msgid "Removing generation %s" msgstr "İnşa siliniyor %s" -#: home-manager/home-manager:368 +#: home-manager/home-manager:385 msgid "No generations to expire" -msgstr "" +msgstr "Süresi dolacak inşa yok" -#: home-manager/home-manager:378 +#: home-manager/home-manager:396 msgid "No home-manager packages seem to be installed." msgstr "Galiba home-manager paketi kurulu değil." -#: home-manager/home-manager:435 +#: home-manager/home-manager:453 msgid "Unknown argument %s" msgstr "Bilinmeyen argüman %s" -#: home-manager/home-manager:450 +#: home-manager/home-manager:469 msgid "This will remove Home Manager from your system." msgstr "Bu, sisteminizden Home Manager'ı kaldıracak." -#: home-manager/home-manager:453 +#: home-manager/home-manager:472 msgid "This is a dry run, nothing will actually be uninstalled." msgstr "Bu sadece bir inşa denemesi, hiçbir şey silinmeyecek." -#: home-manager/home-manager:457 +#: home-manager/home-manager:476 msgid "Really uninstall Home Manager?" -msgstr "Home Manager'ı silmek istediğine emin misin?" +msgstr "Home Manager'ı silmek istediğinize emin misiniz?" -#: home-manager/home-manager:462 +#: home-manager/home-manager:481 msgid "Switching to empty Home Manager configuration..." -msgstr "Boş Home Manager konfigürasyonuna geçiliyor..." +msgstr "Boş Home Manager yapılandırmasına geçiliyor..." -#: home-manager/home-manager:474 +#: home-manager/home-manager:493 msgid "Yay!" msgstr "Güzel!" -#: home-manager/home-manager:481 +#: home-manager/home-manager:500 msgid "Remove all Home Manager generations?" msgstr "Tüm Home Manager inşaları kaldırılsın mı?" -#: home-manager/home-manager:488 +#: home-manager/home-manager:507 msgid "All generations are now eligible for garbage collection." msgstr "Artık tüm inşalar çöp olarak toplanabilir." -#: home-manager/home-manager:491 +#: home-manager/home-manager:510 msgid "Leaving generations but they may still be garbage collected." -msgstr "İnşalar gene de çöp olarak toplanabilir." +msgstr "İnşalar yine de çöp olarak toplanabilir." -#: home-manager/home-manager:495 +#: home-manager/home-manager:514 msgid "Home Manager is uninstalled but your home.nix is left untouched." -msgstr "Home manager kaldırıldı ama home.nix dosyasına dokunulmadı." +msgstr "Home Manager kaldırıldı ama home.nix dosyasına dokunulmadı." -#: home-manager/home-manager:646 +#: home-manager/home-manager:673 msgid "%s: unknown option '%s'" msgstr "%s: Bilinmeyen komut '%s'" -#: home-manager/home-manager:647 +#: home-manager/home-manager:674 msgid "Run '%s --help' for usage help" msgstr "Yardım için '%s --help'" -#: home-manager/home-manager:681 +#: home-manager/home-manager:708 msgid "expire-generations expects one argument, got %d." msgstr "expire-generations bir argüman istiyor, %d tane girildi." -#: home-manager/home-manager:703 +#: home-manager/home-manager:730 msgid "Unknown command: %s" msgstr "Bilinmeyen komut: %s" #: home-manager/install.nix:22 msgid "Creating initial Home Manager configuration..." -msgstr "İlk Home Manager konfigürasyonu oluşturuluyor..." +msgstr "İlk Home Manager yapılandırması oluşturuluyor..." #: home-manager/install.nix:66 msgid "Creating initial Home Manager generation..." @@ -156,10 +157,9 @@ msgid "" "to configure Home Manager. Run 'man home-configuration.nix' to\n" "see all available options." msgstr "" -"Herşey tamam! home-manager aracı yüklendi. Home Manager'ı konfigüre etmek " -"için\n" +"Herşey tamam! home-manager aracı kuruldu. Home Manager'ı yapılandırmak için\n" "\n" -" %S\n" +" %s\n" "\n" "dosyasını düzenleyin. Kullanılabilir seçenekleri görmek için:\n" "'man home-configuration.nix'." @@ -174,11 +174,11 @@ msgid "" "if the error seems to be the fault of Home Manager." msgstr "" "Eyvah, kurulum başarısız! Eğer hatanın Home Manager'dan kaynaklandığını " -"düşünüyorsan\n" +"düşünüyorsanız\n" "\n" " %s\n" "\n" -"konumundan bildir." +"adresinden bildirin." #: home-manager/install.nix:83 msgid "This derivation is not buildable, please run it using nix-shell." diff --git a/infra/libkookie/home-manager/home-manager/po/zh_Hans.po b/infra/libkookie/home-manager/home-manager/po/zh_Hans.po index c8d913830bb..b3de7b2b73a 100644 --- a/infra/libkookie/home-manager/home-manager/po/zh_Hans.po +++ b/infra/libkookie/home-manager/home-manager/po/zh_Hans.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2021-12-28 12:41+0000\n" "Last-Translator: WhiredPlanck \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) b.time) ( filter (a: a.condition) rawModule.config.news.entries ); + + inherit (module._module.args) pkgs; } diff --git a/infra/libkookie/home-manager/modules/files.nix b/infra/libkookie/home-manager/modules/files.nix index 50dc500184d..a7fd67f57a0 100644 --- a/infra/libkookie/home-manager/modules/files.nix +++ b/infra/libkookie/home-manager/modules/files.nix @@ -239,7 +239,7 @@ in } function cleanOldGen() { - if [[ ! -v oldGenPath ]] ; then + if [[ ! -v oldGenPath || ! -e "$oldGenPath/home-files" ]] ; then return fi @@ -259,8 +259,18 @@ in cleanOldGen if [[ ! -v oldGenPath || "$oldGenPath" != "$newGenPath" ]] ; then - _i "Creating profile generation %s" "$newGenNum" - $DRY_RUN_CMD nix-env $VERBOSE_ARG --profile "$genProfilePath" --set "$newGenPath" + _i "Creating profile generation %s" $newGenNum + if [[ -e "$genProfilePath"/manifest.json ]] ; then + # Remove all packages from "$genProfilePath" + # `nix profile remove '.*' --profile "$genProfilePath"` was not working, so here is a workaround: + nix profile list --profile "$genProfilePath" \ + | cut -d ' ' -f 4 \ + | xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG --profile "$genProfilePath" + $DRY_RUN_CMD nix profile install $VERBOSE_ARG --profile "$genProfilePath" "$newGenPath" + else + $DRY_RUN_CMD nix-env $VERBOSE_ARG --profile "$genProfilePath" --set "$newGenPath" + fi + $DRY_RUN_CMD ln -Tsf $VERBOSE_ARG "$newGenPath" "$newGenGcPath" else _i "No change so reusing latest profile generation %s" "$oldGenNum" diff --git a/infra/libkookie/home-manager/modules/home-environment.nix b/infra/libkookie/home-manager/modules/home-environment.nix index af32cc50b47..b83cf1d1e31 100644 --- a/infra/libkookie/home-manager/modules/home-environment.nix +++ b/infra/libkookie/home-manager/modules/home-environment.nix @@ -578,17 +578,36 @@ in if config.submoduleSupport.externalPackageInstall then '' - if nix-env -q | grep '^home-manager-path$'; then - $DRY_RUN_CMD nix-env -e home-manager-path + if [[ -e "$nixProfilePath"/manifest.json ]] ; then + nix profile list \ + | { grep 'home-manager-path$' || test $? = 1; } \ + | awk -F ' ' '{ print $4 }' \ + | cut -d ' ' -f 4 \ + | xargs -t $DRY_RUN_CMD nix profile remove $VERBOSE_ARG + else + if nix-env -q | grep '^home-manager-path$'; then + $DRY_RUN_CMD nix-env -e home-manager-path + fi fi '' else '' - if ! $DRY_RUN_CMD nix-env -i ${cfg.path} ; then + if [[ -e "$nixProfilePath"/manifest.json ]] ; then + INSTALL_CMD="nix profile install" + LIST_CMD="nix profile list" + REMOVE_CMD_SYNTAX='nix profile remove {number | store path}' + else + INSTALL_CMD="nix-env -i" + LIST_CMD="nix-env -q" + REMOVE_CMD_SYNTAX='nix-env -e {package name}' + fi + + if ! $DRY_RUN_CMD $INSTALL_CMD ${cfg.path} ; then echo - _iError $'Oops, nix-env failed to install your new Home Manager profile!\n\nPerhaps there is a conflict with a package that was installed using\n"nix-env -i"? Try running\n\n nix-env -q\n\nand if there is a conflicting package you can remove it with\n\n nix-env -e {package name}\n\nThen try activating your Home Manager configuration again.' + _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 fi + unset INSTALL_CMD LIST_CMD REMOVE_CMD_SYNTAX '' ); @@ -598,7 +617,7 @@ in lib.bash.initHomeManagerLib = let domainDir = pkgs.runCommand "hm-modules-messages" { - nativeBuildInputs = [ pkgs.gettext ]; + nativeBuildInputs = [ pkgs.buildPackages.gettext ]; } '' for path in ${./po}/*.po; do lang="''${path##*/}" diff --git a/infra/libkookie/home-manager/modules/launchd/default.nix b/infra/libkookie/home-manager/modules/launchd/default.nix new file mode 100644 index 00000000000..17b36cdb954 --- /dev/null +++ b/infra/libkookie/home-manager/modules/launchd/default.nix @@ -0,0 +1,213 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + inherit (pkgs.stdenv.hostPlatform) isDarwin; + inherit (lib.generators) toPlist; + + cfg = config.launchd; + labelPrefix = "org.nix-community.home."; + dstDir = "${config.home.homeDirectory}/Library/LaunchAgents"; + + launchdConfig = { config, name, ... }: { + options = { + enable = mkEnableOption name; + config = mkOption { + type = types.submodule (import ./launchd.nix); + default = { }; + example = literalExpression '' + { + ProgramArguments = [ "/usr/bin/say" "Good afternoon" ]; + StartCalendarInterval = { + Hour = 12; + Minute = 0; + }; + } + ''; + description = '' + Define a launchd job. See + launchd.plist5 + for details. + ''; + }; + }; + + config = { config.Label = mkDefault "${labelPrefix}${name}"; }; + }; + + toAgent = config: pkgs.writeText "${config.Label}.plist" (toPlist { } config); + + agentPlists = + mapAttrs' (n: v: nameValuePair "${v.config.Label}.plist" (toAgent v.config)) + (filterAttrs (n: v: v.enable) cfg.agents); + + agentsDrv = pkgs.runCommand "home-manager-agents" { } '' + mkdir -p "$out" + + declare -A plists + plists=(${ + concatStringsSep " " + (mapAttrsToList (name: value: "['${name}']='${value}'") agentPlists) + }) + + for dest in "''${!plists[@]}"; do + src="''${plists[$dest]}" + ln -s "$src" "$out/$dest" + done + ''; +in { + meta.maintainers = with maintainers; [ midchildan ]; + + options.launchd = { + enable = mkOption { + type = types.bool; + default = isDarwin; + defaultText = literalExpression "pkgs.stdenv.hostPlatform.isDarwin"; + description = '' + Whether to enable Home Manager to define per-user daemons by making use + of launchd's LaunchAgents. + ''; + }; + + agents = mkOption { + type = with types; attrsOf (submodule launchdConfig); + default = { }; + description = "Define LaunchAgents."; + }; + }; + + config = mkMerge [ + { + assertions = [{ + assertion = (cfg.enable && agentPlists != { }) -> isDarwin; + message = let names = lib.concatStringsSep ", " (attrNames agentPlists); + in "Must use Darwin for modules that require Launchd: " + names; + }]; + } + + (mkIf isDarwin { + home.extraBuilderCommands = '' + ln -s "${agentsDrv}" $out/LaunchAgents + ''; + + home.activation.checkLaunchAgents = + hm.dag.entryBefore [ "writeBoundary" ] '' + checkLaunchAgents() { + local oldDir newDir dstDir err + oldDir="" + err=0 + if [[ -n "''${oldGenPath:-}" ]]; then + oldDir="$(readlink -m "$oldGenPath/LaunchAgents")" || err=$? + if (( err )); then + oldDir="" + fi + fi + newDir=${escapeShellArg agentsDrv} + dstDir=${escapeShellArg dstDir} + + local oldSrcPath newSrcPath dstPath agentFile agentName + + find -L "$newDir" -maxdepth 1 -name '*.plist' -type f -print0 \ + | while IFS= read -rd "" newSrcPath; do + agentFile="''${newSrcPath##*/}" + agentName="''${agentFile%.plist}" + dstPath="$dstDir/$agentFile" + oldSrcPath="$oldDir/$agentFile" + + if [[ ! -e "$dstPath" ]]; then + continue + fi + + if ! cmp --quiet "$oldSrcPath" "$dstPath"; then + errorEcho "Existing file '$dstPath' is in the way of '$newSrcPath'" + exit 1 + fi + done + } + + checkLaunchAgents + ''; + + # NOTE: Launch Agent configurations can't be symlinked from the Nix store + # because it needs to be owned by the user running it. + home.activation.setupLaunchAgents = + hm.dag.entryAfter [ "writeBoundary" ] '' + setupLaunchAgents() { + local oldDir newDir dstDir domain err + oldDir="" + err=0 + if [[ -n "''${oldGenPath:-}" ]]; then + oldDir="$(readlink -m "$oldGenPath/LaunchAgents")" || err=$? + if (( err )); then + oldDir="" + fi + fi + newDir="$(readlink -m "$newGenPath/LaunchAgents")" + dstDir=${escapeShellArg dstDir} + domain="gui/$UID" + err=0 + + local srcPath dstPath agentFile agentName i bootout_retries + bootout_retries=10 + + find -L "$newDir" -maxdepth 1 -name '*.plist' -type f -print0 \ + | while IFS= read -rd "" srcPath; do + agentFile="''${srcPath##*/}" + agentName="''${agentFile%.plist}" + dstPath="$dstDir/$agentFile" + + if cmp --quiet "$srcPath" "$dstPath"; then + continue + fi + if [[ -f "$dstPath" ]]; then + for (( i = 0; i < bootout_retries; i++ )); do + $DRY_RUN_CMD launchctl bootout "$domain/$agentName" || err=$? + if [[ -v DRY_RUN ]]; then + break + fi + if (( err != 9216 )) && + ! launchctl print "$domain/$agentName" &> /dev/null; then + break + fi + sleep 1 + done + if (( i == bootout_retries )); then + warnEcho "Failed to stop '$domain/$agentName'" + return 1 + fi + fi + $DRY_RUN_CMD install -Dm444 -T "$srcPath" "$dstPath" + $DRY_RUN_CMD launchctl bootstrap "$domain" "$dstPath" + done + + if [[ ! -e "$oldDir" ]]; then + return + fi + + find -L "$oldDir" -maxdepth 1 -name '*.plist' -type f -print0 \ + | while IFS= read -rd "" srcPath; do + agentFile="''${srcPath##*/}" + agentName="''${agentFile%.plist}" + dstPath="$dstDir/$agentFile" + if [[ -e "$newDir/$agentFile" ]]; then + continue + fi + + $DRY_RUN_CMD launchctl bootout "$domain/$agentName" || : + if [[ ! -e "$dstPath" ]]; then + continue + fi + if ! cmp --quiet "$srcPath" "$dstPath"; then + warnEcho "Skipping deletion of '$dstPath', since its contents have diverged" + continue + fi + $DRY_RUN_CMD rm -f $VERBOSE_ARG "$dstPath" + done + } + + setupLaunchAgents + ''; + }) + ]; +} diff --git a/infra/libkookie/home-manager/modules/launchd/launchd.nix b/infra/libkookie/home-manager/modules/launchd/launchd.nix new file mode 100644 index 00000000000..e25c005b29a --- /dev/null +++ b/infra/libkookie/home-manager/modules/launchd/launchd.nix @@ -0,0 +1,869 @@ +# launchd option type from nix-darwin +# +# Original Source: +# https://github.com/LnL7/nix-darwin/blob/a34dea2/modules/launchd/launchd.nix + +# Copyright 2017 Daiderd Jordan +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +{ config, lib, ... }: + +with lib; + +{ + options = { + Label = mkOption { + type = types.str; + description = "This required key uniquely identifies the job to launchd."; + }; + + Disabled = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key is used as a hint to launchctl(1) 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 + ning system. If you wish to know whether a job is loaded in launchd, reading this key from a configura-tion configuration + tion file yourself is not a sufficient test. You should query launchd for the presence of the job using + the launchctl(1) list subcommand or use the ServiceManagement framework's + SMJobCopyDictionary() method. + + 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 launchctl(1) 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 + ily the value that launchctl(1) will apply. See launchctl(1) for more information. + + Please also be mindful that you should only use this key if the provided on-demand and KeepAlive crite-ria criteria + ria 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 + rarely. + ''; + }; + + UserName = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key specifies the user to run the job as. This key is only applicable when launchd is + running as root. + ''; + }; + + GroupName = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key specifies the group to run the job as. This key is only applicable when launchd is + running as root. If UserName is set and GroupName is not, the the group will be set to the default + group of the user. + ''; + }; + + inetdCompatibility = mkOption { + default = null; + example = { Wait = true; }; + description = '' + The presence of this key specifies that the daemon expects to be run as if it were launched from inetd. + ''; + type = types.nullOr (types.submodule { + options = { + Wait = mkOption { + type = types.nullOr (types.either types.bool types.str); + default = null; + description = '' + This flag corresponds to the "wait" or "nowait" option of inetd. If true, then the listening + socket is passed via the standard in/out/error file descriptors. If false, then accept(2) is + called on behalf of the job, and the result is passed via the standard in/out/error descriptors. + ''; + }; + }; + }); + }; + + LimitLoadToHosts = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = '' + This configuration file only applies to the hosts listed with this key. Note: One should set kern.host-name kern.hostname + name in sysctl.conf(5) for this feature to work reliably. + ''; + }; + + LimitLoadFromHosts = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = '' + This configuration file only applies to hosts NOT listed with this key. Note: One should set kern.host-name kern.hostname + name in sysctl.conf(5) for this feature to work reliably. + ''; + }; + + LimitLoadToSessionType = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This configuration file only applies to sessions of the type specified. This key is used in concert + with the -S flag to launchctl. + ''; + }; + + Program = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + This key maps to the first argument of execvp(3). If this key is missing, then the first element of + the array of strings provided to the ProgramArguments will be used instead. This key is required in + the absence of the ProgramArguments key. + ''; + }; + + ProgramArguments = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = '' + This key maps to the second argument of execvp(3). This key is required in the absence of the Program + key. Please note: many people are confused by this key. Please read execvp(3) very carefully! + ''; + }; + + EnableGlobbing = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This flag causes launchd to use the glob(3) mechanism to update the program arguments before invoca-tion. invocation. + tion. + ''; + }; + + EnableTransactions = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This flag instructs launchd that the job promises to use vproc_transaction_begin(3) and + vproc_transaction_end(3) to track outstanding transactions that need to be reconciled before the + process can safely terminate. If no outstanding transactions are in progress, then launchd is free to + send the SIGKILL signal. + ''; + }; + + OnDemand = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This key was used in Mac OS X 10.4 to control whether a job was kept alive or not. The default was + true. This key has been deprecated and replaced in Mac OS X 10.5 and later with the more powerful + KeepAlive option. + ''; + }; + + KeepAlive = mkOption { + type = types.nullOr (types.either types.bool (types.submodule { + options = { + + SuccessfulExit = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + If true, the job will be restarted as long as the program exits and with an exit status of zero. + If false, the job will be restarted in the inverse condition. This key implies that "RunAtLoad" + is set to true, since the job needs to run at least once before we can get an exit status. + ''; + }; + + NetworkState = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + If true, the job will be kept alive as long as the network is up, where up is defined as at least + one non-loopback interface being up and having IPv4 or IPv6 addresses assigned to them. If + false, the job will be kept alive in the inverse condition. + ''; + }; + + PathState = mkOption { + type = types.nullOr (types.attrsOf types.bool); + default = null; + description = '' + Each key in this dictionary is a file-system path. If the value of the key is true, then the job + will be kept alive as long as the path exists. If false, the job will be kept alive in the + inverse condition. The intent of this feature is that two or more jobs may create semaphores in + the file-system namespace. + ''; + }; + + OtherJobEnabled = mkOption { + type = types.nullOr (types.attrsOf types.bool); + default = null; + description = '' + Each key in this dictionary is the label of another job. If the value of the key is true, then + this job is kept alive as long as that other job is enabled. Otherwise, if the value is false, + then this job is kept alive as long as the other job is disabled. This feature should not be + considered a substitute for the use of IPC. + ''; + }; + + # NOTE: this was missing in the original source at the time of writing + Crashed = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + If true, the the job will be restarted as long as it exited due to a signal which is typically + associated with a crash (SIGILL, SIGSEGV, etc.). If false, the job will be restarted in the inverse + condition. + ''; + }; + + }; + })); + default = null; + description = '' + 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 + the job. The value may be set to true to unconditionally keep the job alive. Alternatively, a dictio-nary dictionary + nary 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 + 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 + be throttled to converve system resources. + ''; + }; + + RunAtLoad = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key is used to control whether your job is launched once at the time the job is loaded. + The default is false. + ''; + }; + + RootDirectory = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key is used to specify a directory to chroot(2) to before running the job. + ''; + }; + + WorkingDirectory = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key is used to specify a directory to chdir(2) to before running the job. + ''; + }; + + EnvironmentVariables = mkOption { + type = types.nullOr (types.attrsOf types.str); + default = null; + description = '' + This optional key is used to specify additional environment variables to be set before running the + job. + ''; + }; + + Umask = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + This optional key specifies what value should be passed to umask(2) before running the job. Known bug: + Property lists don't support octal, so please convert the value to decimal. + ''; + }; + + TimeOut = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The recommended idle time out (in seconds) to pass to the job. If no value is specified, a default time + out will be supplied by launchd for use by the job at check in time. + ''; + }; + + ExitTimeOut = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The amount of time launchd waits before sending a SIGKILL signal. The default value is 20 seconds. The + value zero is interpreted as infinity. + ''; + }; + + ThrottleInterval = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + This key lets one override the default throttling policy imposed on jobs by launchd. The value is in + seconds, and by default, jobs will not be spawned more than once every 10 seconds. The principle + behind this is that jobs should linger around just in case they are needed again in the near future. + This not only reduces the latency of responses, but it encourages developers to amortize the cost of + program invocation. + ''; + }; + + InitGroups = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies whether initgroups(3) should be called before running the job. The default + is true in 10.5 and false in 10.4. This key will be ignored if the UserName key is not set. + ''; + }; + + WatchPaths = mkOption { + type = types.nullOr (types.listOf types.path); + default = null; + description = '' + This optional key causes the job to be started if any one of the listed paths are modified. + ''; + }; + + QueueDirectories = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = '' + Much like the WatchPaths option, this key will watch the paths for modifications. The difference being + that the job will only be started if the path is a directory and the directory is not empty. + ''; + }; + + StartOnMount = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key causes the job to be started every time a filesystem is mounted. + ''; + }; + + StartInterval = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + This optional key causes the job to be started every N seconds. If the system is asleep, the job will + be started the next time the computer wakes up. If multiple intervals transpire before the computer is + woken, those events will be coalesced into one event upon wake from sleep. + ''; + }; + + StartCalendarInterval = mkOption { + default = null; + example = { Hour = 2; Minute = 30; }; + description = '' + This optional key causes the job to be started every calendar interval as specified. Missing arguments + are considered to be wildcard. The semantics are much like crontab(5). Unlike cron which skips job + invocations when the computer is asleep, launchd will start the job the next time the computer wakes + up. If multiple intervals transpire before the computer is woken, those events will be coalesced into + one event upon wake from sleep. + ''; + type = types.nullOr (types.listOf (types.submodule { + options = { + Minute = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The minute on which this job will be run. + ''; + }; + + Hour = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The hour on which this job will be run. + ''; + }; + + Day = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The day on which this job will be run. + ''; + }; + + Weekday = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The weekday on which this job will be run (0 and 7 are Sunday). + ''; + }; + + Month = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The month on which this job will be run. + ''; + }; + }; + })); + }; + + StandardInPath = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + This optional key specifies what file should be used for data being supplied to stdin when using + stdio(3). + ''; + }; + + StandardOutPath = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + This optional key specifies what file should be used for data being sent to stdout when using stdio(3). + ''; + }; + + StandardErrorPath = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + This optional key specifies what file should be used for data being sent to stderr when using stdio(3). + ''; + }; + + Debug = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies that launchd should adjust its log mask temporarily to LOG_DEBUG while + dealing with this job. + ''; + }; + + WaitForDebugger = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies that launchd should instruct the kernel to have the job wait for a debugger + to attach before any code in the job is executed. + ''; + }; + + SoftResourceLimits = mkOption { + default = null; + description = '' + Resource limits to be imposed on the job. These adjust variables set with setrlimit(2). The following + keys apply: + ''; + type = types.nullOr (types.submodule { + options = { + Core = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The largest size (in bytes) core file that may be created. + ''; + }; + + CPU = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum amount of cpu time (in seconds) to be used by each process. + ''; + }; + + Data = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) of the data segment for a process; this defines how far a program may + extend its break with the sbrk(2) system call. + ''; + }; + + FileSize = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The largest size (in bytes) file that may be created. + ''; + }; + + MemoryLock = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) which a process may lock into memory using the mlock(2) function. + ''; + }; + + NumberOfFiles = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum number of open files for this process. Setting this value in a system wide daemon + will set the sysctl(3) kern.maxfiles (SoftResourceLimits) or kern.maxfilesperproc (HardResource-Limits) (HardResourceLimits) + Limits) value in addition to the setrlimit(2) values. + ''; + }; + + NumberOfProcesses = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum number of simultaneous processes for this user id. Setting this value in a system + wide daemon will set the sysctl(3) kern.maxproc (SoftResourceLimits) or kern.maxprocperuid + (HardResourceLimits) value in addition to the setrlimit(2) values. + ''; + }; + + ResidentSetSize = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) to which a process's resident set size may grow. This imposes a + limit on the amount of physical memory to be given to a process; if memory is tight, the system + will prefer to take memory from processes that are exceeding their declared resident set size. + ''; + }; + + Stack = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) of the stack segment for a process; this defines how far a program's + stack segment may be extended. Stack extension is performed automatically by the system. + ''; + }; + }; + }); + }; + + HardResourceLimits = mkOption { + default = null; + example = { NumberOfFiles = 4096; }; + description = '' + Resource limits to be imposed on the job. These adjust variables set with setrlimit(2). The following + keys apply: + ''; + type = types.nullOr (types.submodule { + options = { + Core = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The largest size (in bytes) core file that may be created. + ''; + }; + + CPU = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum amount of cpu time (in seconds) to be used by each process. + ''; + }; + + Data = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) of the data segment for a process; this defines how far a program may + extend its break with the sbrk(2) system call. + ''; + }; + + FileSize = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The largest size (in bytes) file that may be created. + ''; + }; + + MemoryLock = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) which a process may lock into memory using the mlock(2) function. + ''; + }; + + NumberOfFiles = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum number of open files for this process. Setting this value in a system wide daemon + will set the sysctl(3) kern.maxfiles (SoftResourceLimits) or kern.maxfilesperproc (HardResource-Limits) (HardResourceLimits) + Limits) value in addition to the setrlimit(2) values. + ''; + }; + + NumberOfProcesses = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum number of simultaneous processes for this user id. Setting this value in a system + wide daemon will set the sysctl(3) kern.maxproc (SoftResourceLimits) or kern.maxprocperuid + (HardResourceLimits) value in addition to the setrlimit(2) values. + ''; + }; + + ResidentSetSize = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) to which a process's resident set size may grow. This imposes a + limit on the amount of physical memory to be given to a process; if memory is tight, the system + will prefer to take memory from processes that are exceeding their declared resident set size. + ''; + }; + + Stack = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + The maximum size (in bytes) of the stack segment for a process; this defines how far a program's + stack segment may be extended. Stack extension is performed automatically by the system. + ''; + }; + }; + }); + }; + + Nice = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + This optional key specifies what nice(3) value should be applied to the daemon. + ''; + }; + + ProcessType = mkOption { + type = types.nullOr (types.enum [ "Background" "Standard" "Adaptive" "Interactive" ]); + default = null; + example = "Background"; + description = '' + This optional key describes, at a high level, the intended purpose of the job. The system will apply + resource limits based on what kind of job it is. If left unspecified, the system will apply light + resource limits to the job, throttling its CPU usage and I/O bandwidth. The following are valid values: + + Background + Background jobs are generally processes that do work that was not directly requested by the user. + The resource limits applied to Background jobs are intended to prevent them from disrupting the + user experience. + + Standard + Standard jobs are equivalent to no ProcessType being set. + + Adaptive + Adaptive jobs move between the Background and Interactive classifications based on activity over + XPC connections. See xpc_transaction_begin(3) for details. + + Interactive + Interactive jobs run with the same resource limitations as apps, that is to say, none. Interac-tive Interactive + tive 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. + ''; + }; + + AbandonProcessGroup = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + When a job dies, launchd kills any remaining processes with the same process group ID as the job. Set-ting Setting + ting this key to true disables that behavior. + ''; + }; + + LowPriorityIO = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies whether the kernel should consider this daemon to be low priority when + doing file system I/O. + ''; + }; + + LaunchOnlyOnce = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies whether the job can only be run once and only once. In other words, if the + job cannot be safely respawned without a full machine reboot, then set this key to be true. + ''; + }; + + MachServices = mkOption { + default = null; + example = { ResetAtClose = true; }; + description = '' + This optional key is used to specify Mach services to be registered with the Mach bootstrap sub-system. + Each key in this dictionary should be the name of service to be advertised. The value of the key must + be a boolean and set to true. Alternatively, a dictionary can be used instead of a simple true value. + + Finally, for the job itself, the values will be replaced with Mach ports at the time of check-in with + launchd. + ''; + type = types.nullOr (types.submodule { + options = { + ResetAtClose = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + If this boolean is false, the port is recycled, thus leaving clients to remain oblivious to the + demand nature of job. If the value is set to true, clients receive port death notifications when + the job lets go of the receive right. The port will be recreated atomically with respect to boot-strap_look_up() bootstrap_look_up() + strap_look_up() calls, so that clients can trust that after receiving a port death notification, + the new port will have already been recreated. Setting the value to true should be done with + care. Not all clients may be able to handle this behavior. The default value is false. + ''; + }; + + HideUntilCheckIn = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + Reserve the name in the namespace, but cause bootstrap_look_up() to fail until the job has + checked in with launchd. + ''; + }; + }; + }); + }; + + Sockets = mkOption { + default = null; + description = '' + 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 + launch(3). The keys of the top level Sockets dictionary can be anything. They are meant for the appli-cation application + cation developer to use to differentiate which descriptors correspond to which application level proto-cols protocols + cols (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 + 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. + + The parameters below are used as inputs to call getaddrinfo(3). + ''; + type = types.nullOr (types.attrsOf (types.submodule { + options = { + SockType = mkOption { + type = types.nullOr (types.enum [ "stream" "dgram" "seqpacket" ]); + default = null; + description = '' + This optional key tells launchctl what type of socket to create. The default is "stream" and + other valid values for this key are "dgram" and "seqpacket" respectively. + ''; + }; + + SockPassive = mkOption { + type = types.nullOr types.bool; + default = null; + description = '' + This optional key specifies whether listen(2) or connect(2) should be called on the created file + descriptor. The default is true ("to listen"). + ''; + }; + + SockNodeName = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key specifies the node to connect(2) or bind(2) to. + ''; + }; + + SockServiceName = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key specifies the service on the node to connect(2) or bind(2) to. + ''; + }; + + SockFamily = mkOption { + type = types.nullOr (types.enum [ "IPv4" "IPv6" ]); + default = null; + description = '' + This optional key can be used to specifically request that "IPv4" or "IPv6" socket(s) be created. + ''; + }; + + SockProtocol = mkOption { + type = types.nullOr (types.enum [ "TCP" ]); + default = null; + description = '' + This optional key specifies the protocol to be passed to socket(2). The only value understood by + this key at the moment is "TCP". + ''; + }; + + SockPathName = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + This optional key implies SockFamily is set to "Unix". It specifies the path to connect(2) or + bind(2) to. + ''; + }; + + SecureSocketWithKey = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + 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 + ited by all jobs spawned by launchd. + ''; + }; + + SockPathMode = mkOption { + type = types.nullOr types.int; + default = null; + description = '' + This optional key specifies the mode of the socket. Known bug: Property lists don't support + octal, so please convert the value to decimal. + ''; + }; + + Bonjour = mkOption { + type = types.nullOr (types.either types.bool (types.listOf types.str)); + default = null; + description = '' + This optional key can be used to request that the service be registered with the + mDNSResponder(8). If the value is boolean, the service name is inferred from the SockService-Name. SockServiceName. + Name. + ''; + }; + + MulticastGroup = mkOption { + type = types.nullOr types.str; + default = null; + description = '' + This optional key can be used to request that the datagram socket join a multicast group. If the + value is a hostname, then getaddrinfo(3) will be used to join the correct multicast address for a + given socket family. If an explicit IPv4 or IPv6 address is given, it is required that the Sock-Family SockFamily + Family family also be set, otherwise the results are undefined. + ''; + }; + }; + })); + }; + }; + + config = { + }; +} diff --git a/infra/libkookie/home-manager/modules/lib-bash/activation-init.sh b/infra/libkookie/home-manager/modules/lib-bash/activation-init.sh index 7a1be0f37c7..aadc88dd355 100755 --- a/infra/libkookie/home-manager/modules/lib-bash/activation-init.sh +++ b/infra/libkookie/home-manager/modules/lib-bash/activation-init.sh @@ -5,6 +5,7 @@ function setupVars() { local profilesPath="$nixStateDir/profiles/per-user/$USER" local gcPath="$nixStateDir/gcroots/per-user/$USER" + declare -gr nixProfilePath="$profilesPath/profile" declare -gr genProfilePath="$profilesPath/home-manager" declare -gr newGenPath="@GENERATION_DIR@"; declare -gr newGenGcPath="$gcPath/current-home" diff --git a/infra/libkookie/home-manager/modules/lib/booleans.nix b/infra/libkookie/home-manager/modules/lib/booleans.nix new file mode 100644 index 00000000000..f6c2af586e7 --- /dev/null +++ b/infra/libkookie/home-manager/modules/lib/booleans.nix @@ -0,0 +1,5 @@ +{ lib }: { + # Converts a boolean to a yes/no string. This is used in lots of + # configuration formats. + yesNo = value: if value then "yes" else "no"; +} diff --git a/infra/libkookie/home-manager/modules/lib/default.nix b/infra/libkookie/home-manager/modules/lib/default.nix index c087c81097a..580316e099f 100644 --- a/infra/libkookie/home-manager/modules/lib/default.nix +++ b/infra/libkookie/home-manager/modules/lib/default.nix @@ -18,6 +18,7 @@ rec { assertions = import ./assertions.nix { inherit lib; }; + booleans = import ./booleans.nix { inherit lib; }; gvariant = import ./gvariant.nix { inherit lib; }; maintainers = import ./maintainers.nix; strings = import ./strings.nix { inherit lib; }; diff --git a/infra/libkookie/home-manager/modules/lib/maintainers.nix b/infra/libkookie/home-manager/modules/lib/maintainers.nix index 13bdb1e0f09..07acce2d51d 100644 --- a/infra/libkookie/home-manager/modules/lib/maintainers.nix +++ b/infra/libkookie/home-manager/modules/lib/maintainers.nix @@ -61,6 +61,12 @@ github = "olmokramer"; githubId = 3612514; }; + iosmanthus = { + name = "iosmanthus"; + email = "myosmanthustree@gmail.com"; + github = "iosmanthus"; + githubId = 16307070; + }; kalhauge = { name = "Christian Gram Kalhauge"; email = "kalhauge@users.noreply.github.com"; @@ -83,12 +89,24 @@ github = "kubukoz"; githubId = 894884; }; + loicreynier = { + name = "Loïc Reynier"; + email = "loic@loireynier.fr"; + github = "loicreynier"; + githubId = 88983487; + }; matrss = { name = "Matthias Riße"; email = "matrss@users.noreply.github.com"; github = "matrss"; githubId = 9308656; }; + mifom = { + name = "mifom"; + email = "mifom@users.noreply.github.com"; + github = "mifom"; + githubId = 23462908; + }; seylerius = { email = "sable@seyleri.us"; name = "Sable Seyler"; @@ -105,6 +123,18 @@ githubId = 46252070; name = "Sara Johnsson"; }; + florpe = { + email = "jens.krewald@gmail.com"; + github = "florpe"; + githubId = 53856373; + name = "Jens Krewald"; + }; + maximsmol = { + email = "maximsmol@gmail.com"; + github = "maximsmol"; + githubId = 1472826; + name = "Max Smolin"; + }; msfjarvis = { email = "me@msfjarvis.dev"; github = "msfjarvis"; @@ -205,4 +235,34 @@ github = "pinage404"; githubId = 6325757; }; + podocarp = { + name = "Jia Xiaodong"; + email = "xdjiaxd@gmail.com"; + github = "podocarp"; + githubId = 10473184; + }; + mainrs = { + name = "mainrs"; + email = "5113257+mainrs@users.noreply.github.com"; + github = "mainrs"; + githubId = 5113257; + }; + kmaasrud = { + name = "Knut Magnus Aasrud"; + email = "km@aasrud.com"; + github = "kmaasrud"; + githubId = 54394333; + }; + sebtm = { + name = "Sebastian Sellmeier"; + email = "sebtm@users.noreply.github.com"; + github = "sebtm"; + githubId = 17243347; + }; + rszamszur = { + name = "Radosław Szamszur"; + email = "radoslawszamszur@gmail.com"; + github = "rszamszur"; + githubId = 10353018; + }; } diff --git a/infra/libkookie/home-manager/modules/lib/types-dag.nix b/infra/libkookie/home-manager/modules/lib/types-dag.nix index 68a5826fec1..366cc2bee70 100644 --- a/infra/libkookie/home-manager/modules/lib/types-dag.nix +++ b/infra/libkookie/home-manager/modules/lib/types-dag.nix @@ -8,17 +8,27 @@ let isDagEntry = e: isAttrs e && (e ? data) && (e ? after) && (e ? before); - dagContentType = elemType: - types.submodule ({ name, ... }: { - options = { - data = mkOption { type = elemType; }; - after = mkOption { type = with types; uniq (listOf str); }; - before = mkOption { type = with types; uniq (listOf str); }; - }; - config = mkIf (elemType.name == "submodule") { - data._module.args.dagName = name; - }; - }); + dagEntryOf = elemType: + let + submoduleType = types.submodule ({ name, ... }: { + options = { + data = mkOption { type = elemType; }; + after = mkOption { type = with types; uniq (listOf str); }; + before = mkOption { type = with types; uniq (listOf str); }; + }; + config = mkIf (elemType.name == "submodule") { + data._module.args.dagName = name; + }; + }); + maybeConvert = v: if isDagEntry v then v else dag.entryAnywhere v; + in mkOptionType { + name = "dagEntryOf"; + description = "DAG entry of ${elemType.description}"; + # leave the checking to the submodule type + merge = loc: defs: + submoduleType.merge loc + (map (def: def // { value = maybeConvert def.value; }) defs); + }; in rec { # A directed acyclic graph of some inner type. @@ -29,21 +39,16 @@ in rec { # "actual" attribute name a new submodule argument is provided with # the name `dagName`. dagOf = elemType: - let - convertAllToDags = let - maybeConvert = n: v: if isDagEntry v then v else dag.entryAnywhere v; - in map (def: def // { value = mapAttrs maybeConvert def.value; }); - - attrEquivalent = types.attrsOf (dagContentType elemType); + let attrEquivalent = types.attrsOf (dagEntryOf elemType); in mkOptionType rec { name = "dagOf"; description = "DAG of ${elemType.description}s"; - check = isAttrs; - merge = loc: defs: attrEquivalent.merge loc (convertAllToDags defs); + inherit (attrEquivalent) check merge emptyValue; getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "" ]); getSubModules = elemType.getSubModules; substSubModules = m: dagOf (elemType.substSubModules m); functor = (defaultFunctor name) // { wrapped = elemType; }; + nestedTypes.elemType = elemType; }; # A directed acyclic graph of some inner type OR a list of that diff --git a/infra/libkookie/home-manager/modules/misc/dconf.nix b/infra/libkookie/home-manager/modules/misc/dconf.nix index fe51dcb0809..d731679c380 100644 --- a/infra/libkookie/home-manager/modules/misc/dconf.nix +++ b/infra/libkookie/home-manager/modules/misc/dconf.nix @@ -21,6 +21,11 @@ in { visible = false; description = '' Whether to enable dconf settings. + + Note, if you use NixOS then you must add + programs.dconf.enable = true + to your system configuration. Otherwise you will see a systemd error + message when your configuration is activated. ''; }; diff --git a/infra/libkookie/home-manager/modules/misc/gtk.nix b/infra/libkookie/home-manager/modules/misc/gtk.nix index 69ff34b28cf..6687a33be51 100644 --- a/infra/libkookie/home-manager/modules/misc/gtk.nix +++ b/infra/libkookie/home-manager/modules/misc/gtk.nix @@ -11,23 +11,19 @@ let toGtk3Ini = generators.toINI { mkKeyValue = key: value: - let - value' = if isBool value then - (if value then "true" else "false") - else - toString value; - in "${key}=${value'}"; + let value' = if isBool value then boolToString value else toString value; + in "${escape [ "=" ] key}=${value'}"; }; formatGtk2Option = n: v: let v' = if isBool v then - (if v then "true" else "false") + boolToString value else if isString v then ''"${v}"'' else toString v; - in "${n} = ${v'}"; + in "${escape [ "=" ] n} = ${v'}"; themeType = types.submodule { options = { @@ -50,6 +46,57 @@ let }; }; + iconThemeType = types.submodule { + options = { + package = mkOption { + type = types.nullOr types.package; + default = null; + example = literalExpression "pkgs.adwaita-icon-theme"; + description = '' + Package providing the icon theme. This package will be installed + to your profile. If null then the theme + is assumed to already be available in your profile. + ''; + }; + + name = mkOption { + type = types.str; + example = "Adwaita"; + description = "The name of the icon theme within the package."; + }; + }; + }; + + cursorThemeType = types.submodule { + options = { + package = mkOption { + type = types.nullOr types.package; + default = null; + example = literalExpression "pkgs.vanilla-dmz"; + description = '' + Package providing the cursor theme. This package will be installed + to your profile. If null then the theme + is assumed to already be available in your profile. + ''; + }; + + name = mkOption { + type = types.str; + example = "Vanilla-DMZ"; + description = "The name of the cursor theme within the package."; + }; + + size = mkOption { + type = types.nullOr types.int; + default = null; + example = 16; + description = '' + The size of the cursor. + ''; + }; + }; + }; + in { meta.maintainers = [ maintainers.rycee ]; @@ -71,8 +118,14 @@ in { ''; }; + cursorTheme = mkOption { + type = types.nullOr cursorThemeType; + default = null; + description = "The cursor theme to use."; + }; + iconTheme = mkOption { - type = types.nullOr themeType; + type = types.nullOr iconThemeType; default = null; description = "The icon theme to use."; }; @@ -116,7 +169,7 @@ in { }; extraConfig = mkOption { - type = with types; attrsOf (either bool (either int str)); + type = with types; attrsOf (oneOf [ bool int str ]); default = { }; example = { gtk-cursor-blink = false; @@ -156,7 +209,7 @@ in { }; config = mkIf cfg.enable (let - ini = optionalAttrs (cfg.font != null) { + gtkIni = optionalAttrs (cfg.font != null) { gtk-font-name = let fontSize = optionalString (cfg.font.size != null) " ${toString cfg.font.size}"; @@ -164,6 +217,11 @@ in { } // optionalAttrs (cfg.theme != null) { gtk-theme-name = cfg.theme.name; } // optionalAttrs (cfg.iconTheme != null) { gtk-icon-theme-name = cfg.iconTheme.name; + } // optionalAttrs (cfg.cursorTheme != null) { + gtk-cursor-theme-name = cfg.cursorTheme.name; + } // optionalAttrs + (cfg.cursorTheme != null && cfg.cursorTheme.size != null) { + gtk-cursor-theme-size = cfg.cursorTheme.size; }; dconfIni = optionalAttrs (cfg.font != null) { @@ -174,31 +232,41 @@ in { } // optionalAttrs (cfg.theme != null) { gtk-theme = cfg.theme.name; } // optionalAttrs (cfg.iconTheme != null) { icon-theme = cfg.iconTheme.name; + } // optionalAttrs (cfg.cursorTheme != null) { + cursor-theme = cfg.cursorTheme.name; + } // optionalAttrs + (cfg.cursorTheme != null && cfg.cursorTheme.size != null) { + cursor-size = cfg.cursorTheme.size; }; optionalPackage = opt: optional (opt != null && opt.package != null) opt.package; in { - home.packages = optionalPackage cfg.font ++ optionalPackage cfg.theme - ++ optionalPackage cfg.iconTheme; + home.packages = concatMap optionalPackage [ + cfg.font + cfg.theme + cfg.iconTheme + cfg.cursorTheme + ]; home.file.${cfg2.configLocation}.text = - concatMapStrings (l: l + "\n") (mapAttrsToList formatGtk2Option ini) - + cfg2.extraConfig; + concatMapStrings (l: l + "\n") (mapAttrsToList formatGtk2Option gtkIni) + + cfg2.extraConfig + "\n"; home.sessionVariables.GTK2_RC_FILES = cfg2.configLocation; xdg.configFile."gtk-3.0/settings.ini".text = - toGtk3Ini { Settings = ini // cfg3.extraConfig; }; + toGtk3Ini { Settings = gtkIni // cfg3.extraConfig; }; - xdg.configFile."gtk-3.0/gtk.css".text = cfg3.extraCss; + xdg.configFile."gtk-3.0/gtk.css" = + mkIf (cfg3.extraCss != "") { text = cfg3.extraCss; }; xdg.configFile."gtk-3.0/bookmarks" = mkIf (cfg3.bookmarks != [ ]) { text = concatMapStrings (l: l + "\n") cfg3.bookmarks; }; xdg.configFile."gtk-4.0/settings.ini".text = - toGtk3Ini { Settings = ini // cfg4.extraConfig; }; + toGtk3Ini { Settings = gtkIni // cfg4.extraConfig; }; dconf.settings."org/gnome/desktop/interface" = dconfIni; }); diff --git a/infra/libkookie/home-manager/modules/misc/news.nix b/infra/libkookie/home-manager/modules/misc/news.nix index 41fe07ceeac..44b09f01494 100644 --- a/infra/libkookie/home-manager/modules/misc/news.nix +++ b/infra/libkookie/home-manager/modules/misc/news.nix @@ -2403,6 +2403,67 @@ in A new module is available: 'services.twmn'. ''; } + + { + time = "2022-02-16T23:50:35+00:00"; + message = '' + A new module is available: 'programs.zellij'. + ''; + } + + { + time = "2022-02-17T17:12:46+00:00"; + message = '' + A new module is available: 'programs.eww'. + ''; + } + + { + time = "2022-02-17T23:11:13+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.espanso'. + ''; + } + + { + time = "2022-02-24T22:35:22+00:00"; + message = '' + A new module is available: 'programs.gitui'. + ''; + } + + { + time = "2022-02-26T09:28:57+00:00"; + condition = hostPlatform.isDarwin; + message = '' + A new module is available: 'launchd.agents' + + Use this to enable services based on macOS LaunchAgents. + ''; + } + + { + time = "2022-03-06T08:50:32+00:00"; + message = '' + A new module is available: 'programs.just'. + ''; + } + + { + time = "2022-03-06T09:40:17+00:00"; + message = '' + A new module is available: 'programs.pubs'. + ''; + } + + { + time = "2022-03-13T20:59:38+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.fusuma'. + ''; + } ]; }; } diff --git a/infra/libkookie/home-manager/modules/misc/nix.nix b/infra/libkookie/home-manager/modules/misc/nix.nix index a044400facf..7214ac4b388 100644 --- a/infra/libkookie/home-manager/modules/misc/nix.nix +++ b/infra/libkookie/home-manager/modules/misc/nix.nix @@ -6,8 +6,98 @@ let cfg = config.nix; + nixPackage = cfg.package; + + isNixAtLeast = versionAtLeast (getVersion nixPackage); + + nixConf = assert isNixAtLeast "2.2"; + let + + mkValueString = v: + if v == null then + "" + else if isInt v then + toString v + else if isBool v then + boolToString v + else if isFloat v then + floatToString v + else if isList v then + toString v + else if isDerivation v then + toString v + else if builtins.isPath v then + toString v + else if isString v then + v + else if isCoercibleToString v then + toString v + else + abort "The nix conf value: ${toPretty { } v} can not be encoded"; + + mkKeyValue = k: v: "${escape [ "=" ] k} = ${mkValueString v}"; + + mkKeyValuePairs = attrs: + concatStringsSep "\n" (mapAttrsToList mkKeyValue attrs); + + in pkgs.writeTextFile { + name = "nix.conf"; + text = '' + # WARNING: this file is generated from the nix.settings option in + # your Home Manager configuration at $XDG_CONFIG_HOME/nix/nix.conf. + # Do not edit it! + ${mkKeyValuePairs cfg.settings} + ${cfg.extraOptions} + ''; + checkPhase = + if pkgs.stdenv.hostPlatform != pkgs.stdenv.buildPlatform then '' + echo "Ignoring validation for cross-compilation" + '' else '' + echo "Validating generated nix.conf" + ln -s $out ./nix.conf + set -e + set +o pipefail + NIX_CONF_DIR=$PWD \ + ${cfg.package}/bin/nix show-config ${ + optionalString (isNixAtLeast "2.3pre") + "--no-net --option experimental-features nix-command" + } \ + |& sed -e 's/^warning:/error:/' \ + | (! grep '${ + if cfg.checkConfig then "^error:" else "^error: unknown setting" + }') + set -o pipefail + ''; + }; + + semanticConfType = with types; + let + confAtom = nullOr (oneOf [ bool int float str path package ]) // { + description = + "Nix config atom (null, bool, int, float, str, path or package)"; + }; + in attrsOf (either confAtom (listOf confAtom)); + + jsonFormat = pkgs.formats.json { }; + in { options.nix = { + enable = mkEnableOption '' + the Nix configuration module + '' // { + default = true; + visible = false; + }; + + package = mkOption { + type = types.nullOr types.package; + default = null; + example = literalExpression "pkgs.nix"; + description = '' + The Nix package that the configuration should be generated for. + ''; + }; + registry = mkOption { type = types.attrsOf (types.submodule (let inputAttrs = types.attrsOf @@ -68,19 +158,83 @@ in { User level flake registry. ''; }; + registryVersion = mkOption { type = types.int; default = 2; internal = true; description = "The flake registry format version."; }; + + checkConfig = mkOption { + type = types.bool; + default = true; + description = '' + If enabled (the default), checks for data type mismatches and that Nix + can parse the generated nix.conf. + ''; + }; + + extraOptions = mkOption { + type = types.lines; + default = ""; + example = '' + keep-outputs = true + keep-derivations = true + ''; + description = + "Additional text appended to nix.conf."; + }; + + settings = mkOption { + type = types.submodule { freeformType = semanticConfType; }; + default = { }; + example = literalExpression '' + { + use-sandbox = true; + show-trace = true; + system-features = [ "big-parallel" "kvm" "recursive-nix" ]; + } + ''; + description = '' + Configuration for Nix, see + or + + nix.conf + 5 + for avalaible options. + The value declared here will be translated directly to the key-value pairs Nix expects. + + + Configuration specified in which will be appended + verbatim to the resulting config file. + ''; + }; }; - config = mkIf (cfg.registry != { }) { - xdg.configFile."nix/registry.json".text = builtins.toJSON { - version = cfg.registryVersion; - flakes = - mapAttrsToList (n: v: { inherit (v) from to exact; }) cfg.registry; + config = mkIf cfg.enable { + assertions = [{ + assertion = cfg.settings == { } || cfg.package != null; + message = '' + A corresponding Nix package must be specified via `nix.package` for generating + nix.conf. + ''; + }]; + + xdg.configFile = { + "nix/registry.json" = mkIf (cfg.registry != { }) { + source = jsonFormat.generate "registry.json" { + version = cfg.registryVersion; + flakes = + mapAttrsToList (n: v: { inherit (v) from to exact; }) cfg.registry; + }; + }; + + "nix/nix.conf" = mkIf (cfg.settings != { } || cfg.extraOptions != "") { + source = nixConf; + }; }; }; + + meta.maintainers = [ maintainers.polykernel ]; } diff --git a/infra/libkookie/home-manager/modules/misc/xdg-desktop-entries.nix b/infra/libkookie/home-manager/modules/misc/xdg-desktop-entries.nix index c0b110facce..f563f49d871 100644 --- a/infra/libkookie/home-manager/modules/misc/xdg-desktop-entries.nix +++ b/infra/libkookie/home-manager/modules/misc/xdg-desktop-entries.nix @@ -4,8 +4,14 @@ with lib; let desktopEntry = { + imports = [ + (mkRemovedOptionModule [ "extraConfig" ] + "The `extraConfig` option of `xdg.desktopEntries` has been removed following a change in Nixpkgs.") + (mkRemovedOptionModule [ "fileValidation" ] + "Validation of the desktop file is always enabled.") + ]; options = { - # Since this module uses the nixpkgs/pkgs/build-support/make-desktopitem function, + # Since this module uses the nixpkgs/pkgs/build-support/make-desktopitem function, # our options and defaults follow its parameters, with the following exceptions: # `desktopName` on makeDesktopItem is controlled by `name`. @@ -13,14 +19,10 @@ let # `name` on makeDesktopItem is controlled by this module's key in the attrset. # This is the file's filename excluding ".desktop". - # `extraEntries` on makeDesktopItem is controlled by `extraConfig`, - # and `extraDesktopEntries` by `settings`, + # `extraConfig` on makeDesktopItem is controlled by `settings`, # to match what's commonly used by other home manager modules. - # `mimeType` and `categories` on makeDesktopItem ask for a string in the format "one;two;three;", - # for usability's sake we ask for a list of strings. - - # Descriptions are taken from the desktop entry spec: + # Descriptions are taken from the desktop entry spec: # https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys type = mkOption { @@ -31,7 +33,7 @@ let exec = mkOption { description = "Program to execute, possibly with arguments."; - type = types.str; + type = types.nullOr types.str; }; icon = mkOption { @@ -78,9 +80,9 @@ let startupNotify = mkOption { description = '' - If true, it is KNOWN that the application will send a "remove" - message when started with the DESKTOP_STARTUP_ID - environment variable set. If false, it is KNOWN that the application + If true, it is KNOWN that the application will send a "remove" + message when started with the DESKTOP_STARTUP_ID + environment variable set. If false, it is KNOWN that the application does not work with startup notification at all.''; type = types.nullOr types.bool; default = null; @@ -103,19 +105,10 @@ let default = null; }; - extraConfig = mkOption { - description = '' - Extra configuration. Will be appended to the end of the file and - may thus contain extra sections. - ''; - type = types.lines; - default = ""; - }; - settings = mkOption { type = types.attrsOf types.string; description = '' - Extra key-value pairs to add to the [Desktop Entry] section. + Extra key-value pairs to add to the [Desktop Entry] section. This may override other values. ''; default = { }; @@ -127,16 +120,49 @@ let ''; }; - fileValidation = mkOption { - type = types.bool; - description = "Whether to validate the generated desktop file."; - default = true; + actions = mkOption { + type = types.attrsOf (types.submodule ({ name, ... }: { + options.name = mkOption { + type = types.str; + default = name; + defaultText = literalExpression ""; + description = "Name of the action."; + }; + options.exec = mkOption { + type = types.nullOr types.str; + description = "Program to execute, possibly with arguments."; + }; + options.icon = mkOption { + type = types.nullOr types.str; + default = null; + description = "Icon to display in file manager, menus, etc."; + }; + })); + default = { }; + defaultText = literalExpression "{ }"; + example = literalExpression '' + { + "New Window" = { + exec = "''${pkgs.firefox}/bin/firefox --new-window %u"; + }; + } + ''; + description = + "The set of actions made available to application launchers."; + }; + + # Required for the assertions + # TODO: Remove me once `mkRemovedOptionModule` works correctly with submodules + assertions = mkOption { + type = types.listOf types.unspecified; + default = [ ]; + visible = false; + internal = true; }; }; }; #formatting helpers - ifNotNull = a: a': if a == null then null else a'; semicolonList = list: (concatStringsSep ";" list) + ";"; # requires trailing semicolon @@ -146,13 +172,11 @@ let inherit name; inherit (config) type exec icon comment terminal genericName startupNotify noDisplay - prefersNonDefaultGPU; + prefersNonDefaultGPU actions; desktopName = config.name; - mimeType = ifNotNull config.mimeType (semicolonList config.mimeType); - categories = - ifNotNull config.categories (semicolonList config.categories); - extraEntries = config.extraConfig; - extraDesktopEntries = config.settings; + mimeTypes = optionals (config.mimeType != null) config.mimeType; + categories = optionals (config.categories != null) config.categories; + extraConfig = config.settings; }; in { meta.maintainers = [ hm.maintainers.cwyc ]; @@ -182,7 +206,7 @@ in { config = mkIf (config.xdg.desktopEntries != { }) { assertions = [ (hm.assertions.assertPlatform "xdg.desktopEntries" pkgs platforms.linux) - ]; + ] ++ flatten (catAttrs "assertions" (attrValues config.xdg.desktopEntries)); home.packages = (map hiPrio # we need hiPrio to override existing entries (attrsets.mapAttrsToList makeFile config.xdg.desktopEntries)); diff --git a/infra/libkookie/home-manager/modules/misc/xdg-mime-apps.nix b/infra/libkookie/home-manager/modules/misc/xdg-mime-apps.nix index 5372c6259ff..cda9bd19b80 100644 --- a/infra/libkookie/home-manager/modules/misc/xdg-mime-apps.nix +++ b/infra/libkookie/home-manager/modules/misc/xdg-mime-apps.nix @@ -72,20 +72,50 @@ in { }; }; - config = mkIf cfg.enable { - assertions = - [ (hm.assertions.assertPlatform "xdg.mimeApps" pkgs platforms.linux) ]; - - # Deprecated but still used by some applications. - xdg.dataFile."applications/mimeapps.list".source = - config.xdg.configFile."mimeapps.list".source; - - xdg.configFile."mimeapps.list".text = - let joinValues = mapAttrs (n: concatStringsSep ";"); - in generators.toINI { } { - "Added Associations" = joinValues cfg.associations.added; - "Removed Associations" = joinValues cfg.associations.removed; - "Default Applications" = joinValues cfg.defaultApplications; - }; - }; + config = mkMerge [ + { + # Given a package that installs .desktop files in the usual location, + # return a mapping from mime types to lists of desktop file names. This is + # suitable for use with `xdg.mimeApps.defaultApplications`. + lib.xdg.mimeAssociations = let + processLines = str: + zipAttrs + (filter (e: e != null) (map processLine (splitString "\n" str))); + + processLine = str: + let + entry = splitString ";" str; + k = elemAt entry 0; + v = elemAt entry 1; + in if length entry == 2 then { ${k} = v; } else null; + + associations = ps: + pkgs.runCommand "mime-assoc" { inherit ps; } '' + for p in $ps ; do + for path in "$p"/share/applications/*.desktop ; do + name="''${path##*/}" + sed -n "/^MimeType=/ { s/.*=//; s/;/;$name\n/g; p; }" "$path" + done + done > "$out" + ''; + in p: processLines (builtins.readFile (associations p)); + } + + (mkIf cfg.enable { + assertions = + [ (hm.assertions.assertPlatform "xdg.mimeApps" pkgs platforms.linux) ]; + + # Deprecated but still used by some applications. + xdg.dataFile."applications/mimeapps.list".source = + config.xdg.configFile."mimeapps.list".source; + + xdg.configFile."mimeapps.list".text = + let joinValues = mapAttrs (n: concatStringsSep ";"); + in generators.toINI { } { + "Added Associations" = joinValues cfg.associations.added; + "Removed Associations" = joinValues cfg.associations.removed; + "Default Applications" = joinValues cfg.defaultApplications; + }; + }) + ]; } diff --git a/infra/libkookie/home-manager/modules/misc/xdg-user-dirs.nix b/infra/libkookie/home-manager/modules/misc/xdg-user-dirs.nix index 78d350cdec4..bac6b3c25c6 100644 --- a/infra/libkookie/home-manager/modules/misc/xdg-user-dirs.nix +++ b/infra/libkookie/home-manager/modules/misc/xdg-user-dirs.nix @@ -33,57 +33,62 @@ in { # https://gitlab.freedesktop.org/xdg/xdg-user-dirs/blob/master/man/user-dirs.dirs.xml desktop = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Desktop"; description = "The Desktop directory."; }; documents = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Documents"; description = "The Documents directory."; }; download = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Downloads"; description = "The Downloads directory."; }; music = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Music"; description = "The Music directory."; }; pictures = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Pictures"; description = "The Pictures directory."; }; publicShare = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Public"; description = "The Public share directory."; }; templates = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Templates"; description = "The Templates directory."; }; videos = mkOption { - type = types.str; + type = with types; coercedTo path toString str; default = "$HOME/Videos"; description = "The Videos directory."; }; extraConfig = mkOption { - type = with types; attrsOf str; + type = with types; attrsOf (coercedTo path toString str); default = { }; - example = { XDG_MISC_DIR = "$HOME/Misc"; }; + defaultText = literalExpression "{ }"; + example = literalExpression '' + { + XDG_MISC_DIR = "$HOME/Misc"; + } + ''; description = "Other user directories."; }; @@ -113,6 +118,8 @@ in { xdg.configFile."user-dirs.conf".text = "enabled=False"; + home.sessionVariables = directories; + home.activation = mkIf cfg.createDirectories { createXdgUserDirectories = let directoriesList = attrValues directories; diff --git a/infra/libkookie/home-manager/modules/misc/xdg.nix b/infra/libkookie/home-manager/modules/misc/xdg.nix index 5961cac3985..247e7319218 100644 --- a/infra/libkookie/home-manager/modules/misc/xdg.nix +++ b/infra/libkookie/home-manager/modules/misc/xdg.nix @@ -80,18 +80,22 @@ in { }; config = mkMerge [ - (mkIf cfg.enable { - xdg.cacheHome = mkDefault defaultCacheHome; - xdg.configHome = mkDefault defaultConfigHome; - xdg.dataHome = mkDefault defaultDataHome; - xdg.stateHome = mkDefault defaultStateHome; - - home.sessionVariables = { + (let + variables = { XDG_CACHE_HOME = cfg.cacheHome; XDG_CONFIG_HOME = cfg.configHome; XDG_DATA_HOME = cfg.dataHome; XDG_STATE_HOME = cfg.stateHome; }; + in mkIf cfg.enable { + xdg.cacheHome = mkDefault defaultCacheHome; + xdg.configHome = mkDefault defaultConfigHome; + xdg.dataHome = mkDefault defaultDataHome; + xdg.stateHome = mkDefault defaultStateHome; + + home.sessionVariables = variables; + systemd.user.sessionVariables = + mkIf pkgs.stdenv.hostPlatform.isLinux variables; }) # Legacy non-deterministic setup. diff --git a/infra/libkookie/home-manager/modules/modules.nix b/infra/libkookie/home-manager/modules/modules.nix index 528734dc633..462575f471b 100644 --- a/infra/libkookie/home-manager/modules/modules.nix +++ b/infra/libkookie/home-manager/modules/modules.nix @@ -19,6 +19,7 @@ let ./files.nix ./home-environment.nix ./i18n/input-method/default.nix + ./launchd/default.nix ./manual.nix ./misc/dconf.nix ./misc/debug.nix @@ -60,6 +61,7 @@ let ./programs/direnv.nix ./programs/eclipse.nix ./programs/emacs.nix + ./programs/eww.nix ./programs/exa.nix ./programs/feh.nix ./programs/firefox.nix @@ -69,6 +71,7 @@ let ./programs/getmail.nix ./programs/gh.nix ./programs/git.nix + ./programs/gitui.nix ./programs/gnome-terminal.nix ./programs/go.nix ./programs/gpg.nix @@ -84,6 +87,7 @@ let ./programs/irssi.nix ./programs/java.nix ./programs/jq.nix + ./programs/just.nix ./programs/kakoune.nix ./programs/keychain.nix ./programs/kitty.nix @@ -126,6 +130,8 @@ let ./programs/pidgin.nix ./programs/piston-cli.nix ./programs/powerline-go.nix + ./programs/pubs.nix + ./programs/pylint.nix ./programs/qutebrowser.nix ./programs/rbw.nix ./programs/readline.nix @@ -136,6 +142,7 @@ let ./programs/sbt.nix ./programs/scmpuff.nix ./programs/senpai.nix + ./programs/sioyek.nix ./programs/skim.nix ./programs/sm64ex.nix ./programs/sqls.nix @@ -147,6 +154,7 @@ let ./programs/texlive.nix ./programs/timidity.nix ./programs/tint2.nix + ./programs/tiny.nix ./programs/tmux.nix ./programs/topgrade.nix ./programs/urxvt.nix @@ -158,6 +166,7 @@ let ./programs/xmobar.nix ./programs/z-lua.nix ./programs/zathura.nix + ./programs/zellij.nix ./programs/zoxide.nix ./programs/zplug.nix ./programs/zsh.nix @@ -176,9 +185,11 @@ let ./services/easyeffects.nix ./services/emacs.nix ./services/etesync-dav.nix + ./services/espanso.nix ./services/flameshot.nix ./services/fluidsynth.nix ./services/fnott.nix + ./services/fusuma.nix ./services/getmail.nix ./services/git-sync.nix ./services/gnome-keyring.nix @@ -200,6 +211,7 @@ let ./services/mbsync.nix ./services/mpd.nix ./services/mpdris2.nix + ./services/mpd-discord-rpc.nix ./services/mpris-proxy.nix ./services/muchsync.nix ./services/network-manager-applet.nix diff --git a/infra/libkookie/home-manager/modules/po/de.po b/infra/libkookie/home-manager/modules/po/de.po index 165420134d8..c4f4c509c35 100644 --- a/infra/libkookie/home-manager/modules/po/de.po +++ b/infra/libkookie/home-manager/modules/po/de.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-15 01:53+0000\n" -"Last-Translator: mainrs \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: German \n" "Language: de\n" @@ -17,7 +17,7 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,48 +31,48 @@ msgstr "Bereinige verwaiste Links unter %s" msgid "Creating profile generation %s" msgstr "Erstelle Profilgeneration %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Keine Änderungen. Benutze daher letzte Profilgeneration %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"Ups, nix-env konnte Ihr neues Home Manager Profil nicht installieren!\n" +"Ups, Nix konnte Ihr neues Home Manager Profil nicht installieren!\n" "\n" -"Vielleicht gibt es einen Konflikt mit einem Paket, welches über \"nix-env -" -"i\" installiert wurde? Versuchen Sie\n" +"Vielleicht gibt es einen Konflikt mit einem Paket, welches über\n" +"\"%s\" installiert wurde? Versuchen Sie\n" "\n" -" nix-env -q\n" +" %s\n" "\n" -"auszuführen und wenn es ein problematisches Paket gibt, entfernen Sie es " +"auszuführen und wenn es ein problematisches Paket gibt, entfernen Sie es\n" "mit\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Versuchen Sie dann, Ihre Home Manager Konfiguration erneut zu aktivieren." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Aktiviere %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "Überprüfe zur Sicherheit oldGenNum und oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -100,27 +100,54 @@ msgstr "" "\n" "Führen Sie danach 'home-manager switch' aus. Viel Glück!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Starte Home Manager Aktivierung" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Überprüfe zur Sicherheit Nix" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "Dies ist ein Probelauf" -#: modules/lib-bash/activation-init.sh:63 -#, fuzzy +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" -msgstr "Dies ist ein Live-Lauf" +msgstr "Dies ist eine Live-Ausführung" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Nutze Nix Version: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "Aktivierungsvariablen:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "Ups, nix-env konnte Ihr neues Home Manager Profil nicht installieren!\n" +#~ "\n" +#~ "Vielleicht gibt es einen Konflikt mit einem Paket, welches über \"nix-env " +#~ "-i\" installiert wurde? Versuchen Sie\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "auszuführen und wenn es ein problematisches Paket gibt, entfernen Sie es " +#~ "mit\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Versuchen Sie dann, Ihre Home Manager Konfiguration erneut zu aktivieren." diff --git a/infra/libkookie/home-manager/modules/po/es.po b/infra/libkookie/home-manager/modules/po/es.po index 3319f7a00b6..b5c0ee58a31 100644 --- a/infra/libkookie/home-manager/modules/po/es.po +++ b/infra/libkookie/home-manager/modules/po/es.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-11 12:58+0000\n" -"Last-Translator: Mauricio Scheffer \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: Spanish \n" "Language: es\n" @@ -17,7 +17,7 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,47 +31,47 @@ msgstr "Limpiando vínculos huérfanos de %s" msgid "Creating profile generation %s" msgstr "Creando generación de perfil %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "No hay cambios, reutilizando la generación más reciente del perfil: %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"nix-env no pudo instalar el nuevo perfil de Home Manager!\n" +"Nix no pudo instalar el nuevo perfil de Home Manager!\n" "\n" -"Tal vez haya un conflicto con algún paquete instalado con \"nix-env -i\"? " +"Tal vez haya un conflicto con algún paquete instalado con \"%s\"?\n" "Intente ejecutar\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "y si hay algún paquete en conflicto bórrelo con:\n" "\n" -" nix-env -e {paquete}\n" +" %s\n" "\n" "Y después reintente activar su configuración de Home Manager." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Activando %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "Chequeando oldGenNum y oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -99,26 +99,53 @@ msgstr "" "\n" "y luego reintente ejectuar \"home-manager switch\". Suerte!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Comenzando activación de Home Manager" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Chequeando Nix" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "Ejecución de simulacro" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "Ejecución en vivo" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Usando Nix versión %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "Variables de activación:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "nix-env no pudo instalar el nuevo perfil de Home Manager!\n" +#~ "\n" +#~ "Tal vez haya un conflicto con algún paquete instalado con \"nix-env -i\"? " +#~ "Intente ejecutar\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "y si hay algún paquete en conflicto bórrelo con:\n" +#~ "\n" +#~ " nix-env -e {paquete}\n" +#~ "\n" +#~ "Y después reintente activar su configuración de Home Manager." diff --git a/infra/libkookie/home-manager/modules/po/fa.po b/infra/libkookie/home-manager/modules/po/fa.po new file mode 100644 index 00000000000..fe1713272ac --- /dev/null +++ b/infra/libkookie/home-manager/modules/po/fa.po @@ -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 , 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: fa\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 "" diff --git a/infra/libkookie/home-manager/modules/po/fr.po b/infra/libkookie/home-manager/modules/po/fr.po index a47bcd23f68..6195b2f4f97 100644 --- a/infra/libkookie/home-manager/modules/po/fr.po +++ b/infra/libkookie/home-manager/modules/po/fr.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-12 22:55+0000\n" -"Last-Translator: 6KHCPCPO \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: French \n" "Language: fr\n" @@ -17,7 +17,7 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,48 +31,47 @@ msgstr "Nettoyage des liens orphelins de %s" msgid "Creating profile generation %s" msgstr "Création de la génération de profil %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Pas de changement, réutilisation du dernier profil génération %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"Oups, nix-env n'a pas réussi à installer votre nouveau profil de Home " -"Manager\n" +"Oups, Nix n'a pas réussi à installer votre nouveau profil de Home Manager !\n" "\n" "Il y a peut-être un conflit avec un autre paquet qui a été installé avec\n" -"« nix-env -i » ? Essayez d'éxecuter\n" +"« %s » ? Essayez d'éxecuter\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "et s'il y a un paquet en conflict, vous pourrez le supprimer avec\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Après, essayez encore d'activer votre configuration de Home Manager." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Activation de %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "Vérification rationnelle de oldGenNum et oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -102,26 +101,54 @@ msgstr "" "\n" "et d'essayer encore home-manager switch. Bonne chance !" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Démarrage de l'activation de Home Manager" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Vérification rationnelle de Nix" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "Ceci est une course à sec" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "Ceci est une course réelle" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Usage de la version de Nix : %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "Variables d'activation :" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "Oups, nix-env n'a pas réussi à installer votre nouveau profil de Home " +#~ "Manager\n" +#~ "\n" +#~ "Il y a peut-être un conflit avec un autre paquet qui a été installé avec\n" +#~ "« nix-env -i » ? Essayez d'éxecuter\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "et s'il y a un paquet en conflict, vous pourrez le supprimer avec\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Après, essayez encore d'activer votre configuration de Home Manager." diff --git a/infra/libkookie/home-manager/modules/po/hm-modules.pot b/infra/libkookie/home-manager/modules/po/hm-modules.pot index c4ade9aaf97..7bff64af49a 100644 --- a/infra/libkookie/home-manager/modules/po/hm-modules.pot +++ b/infra/libkookie/home-manager/modules/po/hm-modules.pot @@ -8,7 +8,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,35 +29,35 @@ msgstr "" msgid "Creating profile generation %s" msgstr "" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -73,26 +73,26 @@ msgid "" "and trying home-manager switch again. Good luck!" msgstr "" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "" diff --git a/infra/libkookie/home-manager/modules/po/it.po b/infra/libkookie/home-manager/modules/po/it.po new file mode 100644 index 00000000000..cec8b104291 --- /dev/null +++ b/infra/libkookie/home-manager/modules/po/it.po @@ -0,0 +1,112 @@ +# 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 , 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-04-20 18:18+0000\n" +"Last-Translator: Frankie McEyes \n" +"Language-Team: Italian \n" +"Language: it\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.12-dev\n" + +#: modules/files.nix:233 +msgid "Creating home file links in %s" +msgstr "Creo i collegamenti della home in %s" + +#: modules/files.nix:246 +msgid "Cleaning up orphan links from %s" +msgstr "Pulisco i collegamenti rimasti orfani da %s" + +#: modules/files.nix:262 +msgid "Creating profile generation %s" +msgstr "Creando profilo di generazione %s" + +#: modules/files.nix:276 +msgid "No change so reusing latest profile generation %s" +msgstr "Nessuna modifica, verrà riutilizzata l'ultimo generazione di profilo %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 "" + +#: modules/home-environment.nix:639 +msgid "Activating %s" +msgstr "Attivando %s" + +#: 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 "" +"I precedenti numero di generazione e il percorso sono in conflitto!\n" +"Devono essere entrambi vuoti o entrambi popolati ma ora sono impostati su\n" +"\n" +"'%s' e '%s'\n" +"\n" +"Se non ti dispiace perdere le generazioni di profili precedenti,\n" +"allora la soluzione più semplice è probabilmente eseguire i comandi\n" +"\n" +"rm %s/home-manager*\n" +"rm %s/current-home\n" +"\n" +"e provare a cambiare home-manager di nuovo. Buona fortuna!" + +#: modules/lib-bash/activation-init.sh:51 +msgid "Starting Home Manager activation" +msgstr "Iniziando attivazione Home Manager" + +#: modules/lib-bash/activation-init.sh:55 +msgid "Sanity checking Nix" +msgstr "Controllando Nix" + +#: modules/lib-bash/activation-init.sh:61 +msgid "This is a dry run" +msgstr "Questo è un avvio secco" + +#: modules/lib-bash/activation-init.sh:64 +msgid "This is a live run" +msgstr "Questa è una esecuzione live" + +#: modules/lib-bash/activation-init.sh:69 +msgid "Using Nix version: %s" +msgstr "Versione di Nix in uso: %s" + +#: modules/lib-bash/activation-init.sh:72 +msgid "Activation variables:" +msgstr "Variabili di attivazione:" diff --git a/infra/libkookie/home-manager/modules/po/ja.po b/infra/libkookie/home-manager/modules/po/ja.po index 6d913fc6fea..f5cec7ba210 100644 --- a/infra/libkookie/home-manager/modules/po/ja.po +++ b/infra/libkookie/home-manager/modules/po/ja.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-02-12 15:54+0000\n" -"Last-Translator: Narazaki Shuji \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,47 +31,47 @@ msgstr "%s から無効なリンクを消去しています" msgid "Creating profile generation %s" msgstr "世代 %s のプロファイルを生成しています" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "変更されていないので最新の世代 %s のプロファイルを再利用します" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"nix-envはHome managerの新しいプロファイルをインストールできませんでした!\n" +"NixはHome Managerの新しいプロファイルをインストールできませんでした!\n" "\n" -"おそらく\"nix-env -i\"を使ってインストールしたパッケージが矛盾しているのでは?\n" +"おそらく\"%s\"を使ってインストールしたパッケージが矛盾しているのでは?\n" "以下のコマンド\n" "\n" -"nix-env -q\n" +" %s\n" "\n" "を試してみて、もし衝突しているパッケージがあれば、\n" "\n" -"nix-env -e {パッケージ名前}\n" +" %s\n" "\n" "で削除し、再度Home Managerの設定の有効化を試してみてください。" -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "%s を有効化しています" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "oldGenNum と oldGenPath の健全性検査をしています" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -99,26 +99,55 @@ msgstr "" "\n" "を実行して、home-manager switch を再び実行してみることでしょう。幸運を!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Home Managerの有効化を開始しました" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Nixの健全性検査中です" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "これは予行練習(dry run)です" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "これは実際に実行します" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Nix バージョン %s を使用しています" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "有効化変数:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "nix-envはHome managerの新しいプロファイルをインストールできませんでし" +#~ "た!\n" +#~ "\n" +#~ "おそらく\"nix-env -i\"を使ってインストールしたパッケージが矛盾しているので" +#~ "は?\n" +#~ "以下のコマンド\n" +#~ "\n" +#~ "nix-env -q\n" +#~ "\n" +#~ "を試してみて、もし衝突しているパッケージがあれば、\n" +#~ "\n" +#~ "nix-env -e {パッケージ名前}\n" +#~ "\n" +#~ "で削除し、再度Home Managerの設定の有効化を試してみてください。" diff --git a/infra/libkookie/home-manager/modules/po/ko.po b/infra/libkookie/home-manager/modules/po/ko.po index 28213a4c56b..7c97f64a3f0 100644 --- a/infra/libkookie/home-manager/modules/po/ko.po +++ b/infra/libkookie/home-manager/modules/po/ko.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-30 21:50+0000\n" -"Last-Translator: 박수원 \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: Korean \n" "Language: ko\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,47 +31,49 @@ msgstr "%s에서 연결이 끊어진 링크 파일들을 지우는 중" msgid "Creating profile generation %s" msgstr "profile 세대 %s를 생성하는 중" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" -msgstr "바뀐 것이 없어서 가장 최근의 profile 세대 %s를 다시 사용하는 것으로 설정하는 중" +msgstr "" +"바뀐 것이 없어서 가장 최근의 profile 세대 %s를 다시 사용하는 것으로 설정하는 " +"중" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"아이고, nix-env가 새로운 홈 매니저 profile을 설치하는데 실패했네요!\n" +"아이고, Nix가 새로운 홈 매니저 profile을 설치하는데 실패했네요!\n" "\n" -"혹시나 \"nix-env -i\"를 이용해서 설치된 패키지와 충돌이 일어난 것 일까요?\n" +"혹시나 \"%s\"를 이용해서 설치된 패키지와 충돌이 일어난 것 일까요?\n" "다음의 명령어를 시도해보세요.\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "만약 충돌하는 패키지가 있다면 다음의 명령어로 제거할 수 있습니다.\n" "\n" -" nix-env -e {패키지 이름}\n" +" %s\n" "\n" "그런 후, 다시 홈 매니저 설정을 활성화 해보세요." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "%s를 활성화 하는 중" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "oldGenNum과 oldGenPath가 정상인지 확인 중" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -99,26 +101,54 @@ msgstr "" "\n" "그런 후 'home-manager switch'를 다시 시도해 보십시오. 행운을 빕니다!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "홈 매니저 활성화를 시작하는 중" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Nix가 정상인지 확인 중" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "모의 실행 중 입니다" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "모의 실행이 아닌 실제 실행 중 입니다" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "사용 중인 Nix 버전: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "활성화 변수들:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "아이고, nix-env가 새로운 홈 매니저 profile을 설치하는데 실패했네요!\n" +#~ "\n" +#~ "혹시나 \"nix-env -i\"를 이용해서 설치된 패키지와 충돌이 일어난 것 일까" +#~ "요?\n" +#~ "다음의 명령어를 시도해보세요.\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "만약 충돌하는 패키지가 있다면 다음의 명령어로 제거할 수 있습니다.\n" +#~ "\n" +#~ " nix-env -e {패키지 이름}\n" +#~ "\n" +#~ "그런 후, 다시 홈 매니저 설정을 활성화 해보세요." diff --git a/infra/libkookie/home-manager/modules/po/nb_NO.po b/infra/libkookie/home-manager/modules/po/nb_NO.po index 85596c7a3a2..11bc04d9431 100644 --- a/infra/libkookie/home-manager/modules/po/nb_NO.po +++ b/infra/libkookie/home-manager/modules/po/nb_NO.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-03 12:56+0000\n" -"Last-Translator: Allan Nordhøy \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: Norwegian Bokmål \n" "Language: nb_NO\n" @@ -17,7 +17,7 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -32,47 +32,47 @@ msgstr "Tømmer overflødige lenker fra %s …" msgid "Creating profile generation %s" msgstr "Oppretter profil for generering %s …" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Ingen endring. Gjenbruker siste profilgenerering %s …" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"nix-env kunne ikke installere din nye Home Manager-profil!\n" +"Nix kunne ikke installere din nye Home Manager-profil!\n" "\n" "Kanskje det er en konflikt med en pakke som ble installert ved bruk av\n" -"«nix-env -i«? Prøv å kjøre\n" +"«%s«? Prøv å kjøre\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "og hvis det er en pakke i konflikt kan du fjerne den med\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "for så å aktivere ditt Home Manager-oppsett igjen." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Aktiverer %s …" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "Kontrollerer verdiene av oldGenNum og oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: modules/lib-bash/activation-init.sh:34 #, fuzzy msgid "" "The previous generation number and path are in conflict! These\n" @@ -101,26 +101,53 @@ msgstr "" "\n" "for så å prøve «home-manager»-bryteren igjen. Lykke til!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Starter aktivering av hjemmebehandler …" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Kontrollerer at Nix fungerer" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "Dette er en simulert kjøring" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "Dette er en virkelig kjøring" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Bruker Nix-versjon: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "Aktiveringsvariabler:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "nix-env kunne ikke installere din nye Home Manager-profil!\n" +#~ "\n" +#~ "Kanskje det er en konflikt med en pakke som ble installert ved bruk av\n" +#~ "«nix-env -i«? Prøv å kjøre\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "og hvis det er en pakke i konflikt kan du fjerne den med\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "for så å aktivere ditt Home Manager-oppsett igjen." diff --git a/infra/libkookie/home-manager/modules/po/pl.po b/infra/libkookie/home-manager/modules/po/pl.po index 3b620ac4abd..e9262433797 100644 --- a/infra/libkookie/home-manager/modules/po/pl.po +++ b/infra/libkookie/home-manager/modules/po/pl.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-02-03 13:58+0000\n" -"Last-Translator: Tymoteusz Dolega \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-01 13:58+0000\n" +"Last-Translator: Anon Ymous \n" "Language-Team: Polish \n" "Language: pl\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.11.1-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -32,35 +32,35 @@ msgstr "Czyszczenie osieroconych linków z %s" msgid "Creating profile generation %s" msgstr "Tworzenie profilu generacji %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Brak zmian więc używam ostatniej generacji profilu %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Aktywowanie %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" -msgstr "" +msgstr "Sprawdzanie poprawności oldGenNum i oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -76,26 +76,28 @@ msgid "" "and trying home-manager switch again. Good luck!" msgstr "" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Rozpoczynam aktywację Home Managera" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" -msgstr "" +msgstr "Sprawdzanie poprawności Nix" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 +#, fuzzy msgid "This is a dry run" -msgstr "" +msgstr "To jest próbne wykonanie" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Używając wersji Nix: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 +#, fuzzy msgid "Activation variables:" -msgstr "" +msgstr "Zmienne aktywacyjne:" diff --git a/infra/libkookie/home-manager/modules/po/pt_BR.po b/infra/libkookie/home-manager/modules/po/pt_BR.po index 534326b91b5..3ca9977ce78 100644 --- a/infra/libkookie/home-manager/modules/po/pt_BR.po +++ b/infra/libkookie/home-manager/modules/po/pt_BR.po @@ -7,56 +7,71 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-04-04 11:11+0000\n" +"Last-Translator: Alex Miranda \n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\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.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" -msgstr "" +msgstr "Criando links simbólicos em %s" #: modules/files.nix:246 msgid "Cleaning up orphan links from %s" -msgstr "" +msgstr "Limpando links órfãos do directório %s" #: modules/files.nix:262 msgid "Creating profile generation %s" -msgstr "" +msgstr "Criando geração %s para o perfil" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" -msgstr "" +msgstr "Nenhuma mudança, portanto reusando a última geração %s para o perfil" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" +"Opa! O nix não conseguiu instalar seu novo perfil do Home Manager.\n" +"\n" +"Talvez haja um conflito com um pacote que foi instalado usando\n" +"\"%s\"? Tente executar\n" +"\n" +" %s\n" +"\n" +"e se houver algum pacote com conflito, remova-o com\n" +"\n" +" %s\n" +"\n" +"E então tente novamente ativar a sua configuração do Home Manager." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" -msgstr "" +msgstr "Ativando %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" -msgstr "" +msgstr "Revalidando oldGenNum e oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -71,27 +86,39 @@ msgid "" "\n" "and trying home-manager switch again. Good luck!" msgstr "" +"O número da geração anterior e o caminho não batem! Ambos\n" +"precisam estar ou vazios ou definidos, mas estão definidos como\n" +"\n" +" '%s' e '%s'\n" +"\n" +"Se você não se importa de perder gerações de perfis anteriores, então\n" +"a solução mais rápida é provavelmente rodar\n" +"\n" +" rm %s/home-manager*\n" +" rm %s/current-home\n" +"\n" +"e tentar rodar \"home-manager switch\" de novo. Boa sorte!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" -msgstr "" +msgstr "Iniciando ativação do Home Manager" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" -msgstr "" +msgstr "Revalidando Nix" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" -msgstr "" +msgstr "Essa é uma execução de teste" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" -msgstr "" +msgstr "Essa é uma execução de fato" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" -msgstr "" +msgstr "Usando versão do Nix: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" -msgstr "" +msgstr "Variáveis durante ativação:" diff --git a/infra/libkookie/home-manager/modules/po/ru.po b/infra/libkookie/home-manager/modules/po/ru.po index d31e5a6ac8b..feba1b94ab8 100644 --- a/infra/libkookie/home-manager/modules/po/ru.po +++ b/infra/libkookie/home-manager/modules/po/ru.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2021-12-21 19:55+0000\n" -"Last-Translator: Mikhail Chekan \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Robert Helgesson \n" "Language-Team: Russian \n" "Language: ru\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.10\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -32,35 +32,47 @@ msgstr "Удаляю устаревшие ссылки из %s" msgid "Creating profile generation %s" msgstr "Создаю профиль в поколении %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Изменений нет, переиспользую профиль в последнем поколении %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" +"Ой, Nix не смог установить новый профиль Home Manager!\n" +"\n" +"Возможно, возник конфликт с пакетом, ранее установленным\n" +"с помощью \"%s\". Попробуйте выполнить\n" +"\n" +" %s\n" +"\n" +"и если найдётся конфликтующий пакет, удалите его командой\n" +"\n" +" %s\n" +"\n" +"После попробуйте активировать конфигурацию снова." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Активирую %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" -msgstr "" +msgstr "Сравниваю oldGenNum и oldGenPath на всякий" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -75,27 +87,66 @@ msgid "" "\n" "and trying home-manager switch again. Good luck!" msgstr "" +"Номер и путь прошлого поколения конфликтуют! Они должны быть\n" +"одинаково пустыми или заполненными, но сейчас имеют значения\n" +"\n" +" '%s' и '%s'\n" +"\n" +"Если вы не против потерять предыдущие профили, тогда,\n" +"вероятно, простейшим решением будет запустить\n" +"\n" +" rm %s/home-manager*\n" +" rm %s/current-home\n" +"\n" +"и выполнить home-manager switch ещё раз. Удачи!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Начинаю активацию Home Manager" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" -msgstr "" +msgstr "Проверяю Nix на всякий случай" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" -msgstr "" +msgstr "Это пробный запуск" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" -msgstr "" +msgstr "Это реальный запуск" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" -msgstr "" +msgstr "Использую Nix версии: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" -msgstr "" +msgstr "Переменные для активации:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "Ой, nix-env не смог установить новый профиль Home Manager!\n" +#~ "\n" +#~ "Возможно, возник конфликт с пакетом, ранее установленным\n" +#~ "с помощью \"nix-env -i\". Попробуйте выполнить\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "и если найдётся конфликтующий пакет, удалите его командой\n" +#~ "\n" +#~ " nix-env -e {имя пакета}\n" +#~ "\n" +#~ "После попробуйте активировать конфигурацию снова." diff --git a/infra/libkookie/home-manager/modules/po/sv.po b/infra/libkookie/home-manager/modules/po/sv.po index 932ac1da996..09e8a9e99ad 100644 --- a/infra/libkookie/home-manager/modules/po/sv.po +++ b/infra/libkookie/home-manager/modules/po/sv.po @@ -7,8 +7,8 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-01-03 12:56+0000\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:56+0000\n" "Last-Translator: Robert Helgesson \n" "Language-Team: Swedish \n" @@ -17,7 +17,7 @@ msgstr "" "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.10.1\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" @@ -31,47 +31,47 @@ msgstr "Rensar bort överflödiga länkar från %s" msgid "Creating profile generation %s" msgstr "Skapar profil för generation %s" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" msgstr "Ingen förändring, återanvänder därför profil-generation %s" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" -"Ajdå, nix-env lyckades inte installera din nya Home Manager-profil!\n" +"Ajdå, Nix lyckades inte installera din nya Home Manager-profil!\n" "\n" "Kanske det finns en konflikt med ett paket som installerades genom\n" -"\"nix-env -i\"? Prova att köra\n" +"\"%s\"? Prova att köra\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "och om det finns ett paket som är i vägen så kan du ta bort det med\n" "\n" -" nix-env -e {paketnamn}\n" +" %s\n" "\n" "Prova sedan att aktivera din Home Manager-konfiguration igen." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" msgstr "Aktiverar %s" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" msgstr "Kontrollerar värdena på oldGenNum och oldGenPath" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -99,26 +99,53 @@ msgstr "" "\n" "och prova 'home-manager switch' igen. Lycka till!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" msgstr "Startar Home Manager-aktivering" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" msgstr "Kontrollerar att Nix funkar" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" msgstr "Detta är en simulerad körning" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" msgstr "Detta är en verklig körning" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" msgstr "Använder Nix-version: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" msgstr "Aktiveringsvariabler:" + +#~ msgid "" +#~ "Oops, nix-env failed to install your new Home Manager profile!\n" +#~ "\n" +#~ "Perhaps there is a conflict with a package that was installed using\n" +#~ "\"nix-env -i\"? Try running\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "and if there is a conflicting package you can remove it with\n" +#~ "\n" +#~ " nix-env -e {package name}\n" +#~ "\n" +#~ "Then try activating your Home Manager configuration again." +#~ msgstr "" +#~ "Ajdå, nix-env lyckades inte installera din nya Home Manager-profil!\n" +#~ "\n" +#~ "Kanske det finns en konflikt med ett paket som installerades genom\n" +#~ "\"nix-env -i\"? Prova att köra\n" +#~ "\n" +#~ " nix-env -q\n" +#~ "\n" +#~ "och om det finns ett paket som är i vägen så kan du ta bort det med\n" +#~ "\n" +#~ " nix-env -e {paketnamn}\n" +#~ "\n" +#~ "Prova sedan att aktivera din Home Manager-konfiguration igen." diff --git a/infra/libkookie/home-manager/modules/po/tr.po b/infra/libkookie/home-manager/modules/po/tr.po index 97a88b91154..5b7dad73962 100644 --- a/infra/libkookie/home-manager/modules/po/tr.po +++ b/infra/libkookie/home-manager/modules/po/tr.po @@ -7,9 +7,9 @@ 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-01-02 11:55+0100\n" -"PO-Revision-Date: 2022-02-12 15:54+0000\n" -"Last-Translator: Mustafa Çalışkan \n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" +"PO-Revision-Date: 2022-03-26 23:57+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -17,49 +17,61 @@ msgstr "" "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.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/files.nix:233 msgid "Creating home file links in %s" -msgstr "%s konumunda ev dosya linkleri oluşturuluyor" +msgstr "%s konumunda ev dosya bağlantıları oluşturuluyor" #: modules/files.nix:246 msgid "Cleaning up orphan links from %s" -msgstr "Geçersiz linkler temizleniyor %s" +msgstr "Geçersiz bağlantılar temizleniyor %s" #: modules/files.nix:262 msgid "Creating profile generation %s" -msgstr "" +msgstr "%s profil inşası oluşturuluyor" -#: modules/files.nix:266 +#: modules/files.nix:276 msgid "No change so reusing latest profile generation %s" -msgstr "" +msgstr "Değişiklik yok, bu nedenle en son profil inşası %s yeniden kullanılıyor" -#: modules/home-environment.nix:589 +#: modules/home-environment.nix:607 msgid "" -"Oops, nix-env failed to install your new Home Manager profile!\n" +"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" -"\"nix-env -i\"? Try running\n" +"\"%s\"? Try running\n" "\n" -" nix-env -q\n" +" %s\n" "\n" "and if there is a conflicting package you can remove it with\n" "\n" -" nix-env -e {package name}\n" +" %s\n" "\n" "Then try activating your Home Manager configuration again." msgstr "" +"Eyvah, Nix yeni Home Manager profilinizi kuramadı!\n" +"\n" +"Belki de \"%s\" kullanan kurulan paketlerin biriyle bir çakışma vardır?\n" +"\n" +" %s\n" +"\n" +"komutunu çalıştırın ve eğer çakışan bir paket varsa onu\n" +"\n" +" %s\n" +"\n" +"ile kaldırabilirsiniz. Sonra Home Manager yapılandırmanızı yeniden\n" +"etkinleştirmeyi deneyin." -#: modules/home-environment.nix:620 +#: modules/home-environment.nix:639 msgid "Activating %s" -msgstr "" +msgstr "%s etkinleştiriliyor" -#: modules/lib-bash/activation-init.sh:30 +#: modules/lib-bash/activation-init.sh:31 msgid "Sanity checking oldGenNum and oldGenPath" -msgstr "" +msgstr "oldGenNum ve oldGenPath denetleniyor" -#: modules/lib-bash/activation-init.sh:33 +#: 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" @@ -74,27 +86,40 @@ msgid "" "\n" "and trying home-manager switch again. Good luck!" msgstr "" +"Önceki inşa numarası ve yolu çakışıyor! Bunların ikisi de boş olmalı\n" +"veya ayarlanmalı ama şu anda\n" +"\n" +" '%s' ve '%s'\n" +"\n" +"olarak ayarlandı. Önceki profil inşalarını kaybetmeyi önemsemiyorsanız\n" +"en kolay çözüm muhtemelen\n" +"\n" +" rm %s/home-manager*\n" +" rm %s/current-home\n" +"\n" +"komutlarını çalıştırmak ve tekrar home-manager switch denemektir. İyi " +"şanslar!" -#: modules/lib-bash/activation-init.sh:50 +#: modules/lib-bash/activation-init.sh:51 msgid "Starting Home Manager activation" -msgstr "" +msgstr "Home Manager etkinleştirmesi başlatılıyor" -#: modules/lib-bash/activation-init.sh:54 +#: modules/lib-bash/activation-init.sh:55 msgid "Sanity checking Nix" -msgstr "" +msgstr "Nix denetleniyor" -#: modules/lib-bash/activation-init.sh:60 +#: modules/lib-bash/activation-init.sh:61 msgid "This is a dry run" -msgstr "" +msgstr "Bu bir deneme çalıştırmasıdır" -#: modules/lib-bash/activation-init.sh:63 +#: modules/lib-bash/activation-init.sh:64 msgid "This is a live run" -msgstr "" +msgstr "Bu bir gerçek çalıştırmadır" -#: modules/lib-bash/activation-init.sh:68 +#: modules/lib-bash/activation-init.sh:69 msgid "Using Nix version: %s" -msgstr "" +msgstr "Kullanılan Nix sürümü: %s" -#: modules/lib-bash/activation-init.sh:71 +#: modules/lib-bash/activation-init.sh:72 msgid "Activation variables:" -msgstr "" +msgstr "Etkinleştirme değişkenleri:" diff --git a/infra/libkookie/home-manager/modules/po/zh_Hans.po b/infra/libkookie/home-manager/modules/po/zh_Hans.po index b7a476eddd6..4348f185bed 100644 --- a/infra/libkookie/home-manager/modules/po/zh_Hans.po +++ b/infra/libkookie/home-manager/modules/po/zh_Hans.po @@ -7,7 +7,7 @@ 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-01-02 11:55+0100\n" +"POT-Creation-Date: 2022-03-26 15:08+0100\n" "PO-Revision-Date: 2022-01-05 00:56+0000\n" "Last-Translator: ethinx \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) $XDG_CONFIG_HOME/eww. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + xdg.configFile."eww".source = cfg.configDir; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/foot.nix b/infra/libkookie/home-manager/modules/programs/foot.nix index e6c9dc52665..2b08f3acd72 100644 --- a/infra/libkookie/home-manager/modules/programs/foot.nix +++ b/infra/libkookie/home-manager/modules/programs/foot.nix @@ -71,6 +71,7 @@ in { Service = { ExecStart = "${cfg.package}/bin/foot --server"; Restart = "on-failure"; + OOMPolicy = "continue"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; diff --git a/infra/libkookie/home-manager/modules/programs/git.nix b/infra/libkookie/home-manager/modules/programs/git.nix index cf6ef3bcf48..61792f866fa 100644 --- a/infra/libkookie/home-manager/modules/programs/git.nix +++ b/infra/libkookie/home-manager/modules/programs/git.nix @@ -239,6 +239,34 @@ in { }; }; + difftastic = { + enable = mkEnableOption "" // { + description = '' + Enable the difft syntax highlighter. + See . + ''; + }; + + background = mkOption { + type = types.enum [ "light" "dark" ]; + default = "light"; + example = "dark"; + description = '' + Determines whether difftastic should use the lighter or darker colors + for syntax highlithing. + ''; + }; + + color = mkOption { + type = types.enum [ "always" "auto" "never" ]; + default = "auto"; + example = "always"; + description = '' + Determines when difftastic should color its output. + ''; + }; + }; + delta = { enable = mkEnableOption "" // { description = '' @@ -274,6 +302,11 @@ in { config = mkIf cfg.enable (mkMerge [ { home.packages = [ cfg.package ]; + assertions = [{ + assertion = !(cfg.delta.enable && cfg.difftastic.enable); + message = + "Only one of 'programs.git.delta.enable' or 'programs.git.difftastic.enable' can be set to true at the same time."; + }]; programs.git.iniContent.user = { name = mkIf (cfg.userName != null) cfg.userName; @@ -377,6 +410,18 @@ in { }; }) + (mkIf cfg.difftastic.enable { + home.packages = [ pkgs.difftastic ]; + + programs.git.iniContent = let + difftCommand = + "${pkgs.difftastic}/bin/difft --color ${cfg.difftastic.color} --background ${cfg.difftastic.background}"; + in { + diff.external = difftCommand; + core.pager = "${pkgs.less}/bin/less -XF"; + }; + }) + (mkIf cfg.delta.enable { home.packages = [ pkgs.delta ]; diff --git a/infra/libkookie/home-manager/modules/programs/gitui.nix b/infra/libkookie/home-manager/modules/programs/gitui.nix new file mode 100644 index 00000000000..ee6572bcaf1 --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/gitui.nix @@ -0,0 +1,82 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.gitui; + +in { + meta.maintainers = [ hm.maintainers.mifom ]; + + options.programs.gitui = { + enable = + mkEnableOption "gitui, blazing fast terminal-ui for git written in rust"; + + package = mkOption { + type = types.package; + default = pkgs.gitui; + defaultText = "pkgs.gitui"; + description = "The package to use."; + }; + + keyConfig = mkOption { + type = types.either types.path types.lines; + default = ""; + example = '' + exit: Some(( code: Char('c'), modifiers: ( bits: 2,),)), + quit: Some(( code: Char('q'), modifiers: ( bits: 0,),)), + exit_popup: Some(( code: Esc, modifiers: ( bits: 0,),)), + ''; + description = '' + Key config in Ron file format. This is written to + $XDG_CONFIG_HOME/gitui/key_config.ron. + ''; + }; + + theme = mkOption { + type = types.either types.path types.lines; + default = '' + ( + selected_tab: Reset, + command_fg: White, + selection_bg: Blue, + cmdbar_extra_lines_bg: Blue, + disabled_fg: DarkGray, + diff_line_add: Green, + diff_line_delete: Red, + diff_file_added: LightGreen, + diff_file_removed: LightRed, + diff_file_moved: LightMagenta, + diff_file_modified: Yellow, + commit_hash: Magenta, + commit_time: LightCyan, + commit_author: Green, + danger_fg: Red, + push_gauge_bg: Blue, + push_gauge_fg: Reset, + ) + ''; + description = '' + Theme in Ron file format. This is written to + $XDG_CONFIG_HOME/gitui/theme.ron. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + xdg.configFile."gitui/theme.ron".source = + if builtins.isPath cfg.theme || lib.isStorePath cfg.theme then + cfg.theme + else + pkgs.writeText "gitui-theme.ron" cfg.theme; + + xdg.configFile."gitui/key_bindings.ron".source = + if builtins.isPath cfg.keyConfig || lib.isStorePath cfg.keyConfig then + cfg.keyConfig + else + pkgs.writeText "gitui-key-config.ron" cfg.keyConfig; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/gpg.nix b/infra/libkookie/home-manager/modules/programs/gpg.nix index 6cb04292d70..4b233dc6b59 100644 --- a/infra/libkookie/home-manager/modules/programs/gpg.nix +++ b/infra/libkookie/home-manager/modules/programs/gpg.nix @@ -6,9 +6,7 @@ let cfg = config.programs.gpg; mkKeyValue = key: value: - if isString value - then "${key} ${value}" - else optionalString value key; + if isString value then "${key} ${value}" else optionalString value key; cfgText = generators.toKeyValue { inherit mkKeyValue; @@ -22,7 +20,7 @@ let primitiveType = types.oneOf [ types.str types.bool ]; - publicKeyOpts = { config, ...}: { + publicKeyOpts = { config, ... }: { options = { text = mkOption { type = types.nullOr types.str; @@ -40,7 +38,18 @@ let }; trust = mkOption { - type = types.nullOr (types.enum ["unknown" 1 "never" 2 "marginal" 3 "full" 4 "ultimate" 5]); + type = types.nullOr (types.enum [ + "unknown" + 1 + "never" + 2 + "marginal" + 3 + "full" + 4 + "ultimate" + 5 + ]); default = null; apply = v: if isString v then @@ -51,7 +60,8 @@ let full = 4; ultimate = 5; }.${v} - else v; + else + v; description = '' The amount of trust you have in the key ownership and the care the owner puts into signing other keys. The available levels are @@ -85,58 +95,56 @@ let }; config = { - source = mkIf (config.text != null) - (pkgs.writeText "gpg-pubkey" config.text); + source = + mkIf (config.text != null) (pkgs.writeText "gpg-pubkey" config.text); }; }; - importTrustBashFunctions = - let gpg = "${cfg.package}/bin/gpg"; - in '' - function gpgKeyId() { - ${gpg} --show-key --with-colons "$1" \ - | grep ^pub: \ - | cut -d: -f5 - } - - function importTrust() { - local keyId trust - keyId="$(gpgKeyId "$1")" - trust="$2" - if [[ -n $keyId ]] ; then - { echo trust; echo "$trust"; (( trust == 5 )) && echo y; echo quit; } \ - | ${gpg} --no-tty --command-fd 0 --edit-key "$keyId" - fi - } + importTrustBashFunctions = let gpg = "${cfg.package}/bin/gpg"; + in '' + function gpgKeyId() { + ${gpg} --show-key --with-colons "$1" \ + | grep ^pub: \ + | cut -d: -f5 + } + + function importTrust() { + local keyIds trust + IFS='\n' read -ra keyIds <<< "$(gpgKeyId "$1")" + trust="$2" + for id in "''${keyIds[@]}" ; do + { echo trust; echo "$trust"; (( trust == 5 )) && echo y; echo quit; } \ + | ${gpg} --no-tty --command-fd 0 --edit-key "$id" + done + } + ''; - keyringFiles = - let - gpg = "${cfg.package}/bin/gpg"; + keyringFiles = let + gpg = "${cfg.package}/bin/gpg"; - importKey = { source, trust, ... }: '' - ${gpg} --import ${source} - ${optionalString (trust != null) '' - importTrust "${source}" ${toString trust}''} - ''; + importKey = { source, trust, ... }: '' + ${gpg} --import ${source} + ${optionalString (trust != null) + ''importTrust "${source}" ${toString trust}''} + ''; - importKeys = concatMapStringsSep "\n" importKey cfg.publicKeys; - in pkgs.runCommand "gpg-pubring" { buildInputs = [ cfg.package ]; } '' - export GNUPGHOME - GNUPGHOME=$(mktemp -d) + importKeys = concatMapStringsSep "\n" importKey cfg.publicKeys; + in pkgs.runCommand "gpg-pubring" { buildInputs = [ cfg.package ]; } '' + export GNUPGHOME + GNUPGHOME=$(mktemp -d) - ${importTrustBashFunctions} - ${importKeys} + ${importTrustBashFunctions} + ${importKeys} - mkdir $out - cp $GNUPGHOME/pubring.kbx $out/pubring.kbx - if [[ -e $GNUPGHOME/trustdb.gpg ]] ; then - cp $GNUPGHOME/trustdb.gpg $out/trustdb.gpg - fi - ''; + mkdir $out + cp $GNUPGHOME/pubring.kbx $out/pubring.kbx + if [[ -e $GNUPGHOME/trustdb.gpg ]] ; then + cp $GNUPGHOME/trustdb.gpg $out/trustdb.gpg + fi + ''; -in -{ +in { options.programs.gpg = { enable = mkEnableOption "GnuPG"; @@ -145,11 +153,13 @@ in default = pkgs.gnupg; defaultText = literalExpression "pkgs.gnupg"; example = literalExpression "pkgs.gnupg23"; - description = "The Gnupg package to use (also used the gpg-agent service)."; + description = + "The Gnupg package to use (also used the gpg-agent service)."; }; settings = mkOption { - type = types.attrsOf (types.either primitiveType (types.listOf types.str)); + type = + types.attrsOf (types.either primitiveType (types.listOf types.str)); example = literalExpression '' { no-comments = false; @@ -167,7 +177,8 @@ in }; scdaemonSettings = mkOption { - type = types.attrsOf (types.either primitiveType (types.listOf types.str)); + type = + types.attrsOf (types.either primitiveType (types.listOf types.str)); example = literalExpression '' { disable-ccid = true; @@ -182,9 +193,10 @@ in homedir = mkOption { type = types.path; - example = literalExpression "\"\${config.xdg.dataHome}/gnupg\""; + example = literalExpression ''"''${config.xdg.dataHome}/gnupg"''; default = "${config.home.homeDirectory}/.gnupg"; - defaultText = literalExpression "\"\${config.home.homeDirectory}/.gnupg\""; + defaultText = + literalExpression ''"''${config.home.homeDirectory}/.gnupg"''; description = "Directory to store keychains and configuration."; }; @@ -236,7 +248,8 @@ in personal-cipher-preferences = mkDefault "AES256 AES192 AES"; personal-digest-preferences = mkDefault "SHA512 SHA384 SHA256"; personal-compress-preferences = mkDefault "ZLIB BZIP2 ZIP Uncompressed"; - default-preference-list = mkDefault "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed"; + default-preference-list = mkDefault + "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed"; cert-digest-algo = mkDefault "SHA512"; s2k-digest-algo = mkDefault "SHA512"; s2k-cipher-algo = mkDefault "AES256"; @@ -258,9 +271,7 @@ in }; home.packages = [ cfg.package ]; - home.sessionVariables = { - GNUPGHOME = cfg.homedir; - }; + home.sessionVariables = { GNUPGHOME = cfg.homedir; }; home.file."${cfg.homedir}/gpg.conf".text = cfgText; @@ -268,45 +279,48 @@ in # Link keyring if keys are not mutable home.file."${cfg.homedir}/pubring.kbx" = - mkIf (!cfg.mutableKeys && cfg.publicKeys != []) { + mkIf (!cfg.mutableKeys && cfg.publicKeys != [ ]) { source = "${keyringFiles}/pubring.kbx"; }; - home.activation = mkIf (cfg.publicKeys != []) { - importGpgKeys = - let - gpg = "${cfg.package}/bin/gpg"; - - importKey = { source, trust, ... }: - # Import mutable keys - optional cfg.mutableKeys '' - $DRY_RUN_CMD ${gpg} $QUIET_ARG --import ${source}'' - - # Import mutable trust - ++ optional (trust != null && cfg.mutableTrust) '' - $DRY_RUN_CMD importTrust "${source}" ${toString trust}''; - - anyTrust = any (k: k.trust != null) cfg.publicKeys; - - importKeys = concatStringsSep "\n" (concatMap importKey cfg.publicKeys); - - # If any key/trust should be imported then create the block. Otherwise - # leave it empty. - block = concatStringsSep "\n" ( - optional (importKeys != "") '' - export GNUPGHOME=${escapeShellArg cfg.homedir} - if [[ ! -v VERBOSE ]]; then - QUIET_ARG="--quiet" - else - QUIET_ARG="" - fi - ${importTrustBashFunctions} - ${importKeys} - unset GNUPGHOME QUIET_ARG keyId importTrust - '' ++ optional (!cfg.mutableTrust && anyTrust) '' - install -m 0700 ${keyringFiles}/trustdb.gpg "${cfg.homedir}/trustdb.gpg"'' - ); - in lib.hm.dag.entryAfter ["linkGeneration"] block; + home.activation = { + createGpgHomedir = + hm.dag.entryBetween [ "linkGeneration" ] [ "writeBoundary" ] '' + $DRY_RUN_CMD mkdir -m700 -p $VERBOSE_ARG ${escapeShellArg cfg.homedir} + ''; + + importGpgKeys = let + gpg = "${cfg.package}/bin/gpg"; + + importKey = { source, trust, ... }: + # Import mutable keys + optional cfg.mutableKeys + "$DRY_RUN_CMD ${gpg} $QUIET_ARG --import ${source}" + + # Import mutable trust + ++ optional (trust != null && cfg.mutableTrust) + ''$DRY_RUN_CMD importTrust "${source}" ${toString trust}''; + + anyTrust = any (k: k.trust != null) cfg.publicKeys; + + importKeys = concatStringsSep "\n" (concatMap importKey cfg.publicKeys); + + # If any key/trust should be imported then create the block. Otherwise + # leave it empty. + block = concatStringsSep "\n" (optional (importKeys != "") '' + export GNUPGHOME=${escapeShellArg cfg.homedir} + if [[ ! -v VERBOSE ]]; then + QUIET_ARG="--quiet" + else + QUIET_ARG="" + fi + ${importTrustBashFunctions} + ${importKeys} + unset GNUPGHOME QUIET_ARG keyId importTrust + '' ++ optional (!cfg.mutableTrust && anyTrust) '' + install -m 0700 ${keyringFiles}/trustdb.gpg "${cfg.homedir}/trustdb.gpg"''); + in mkIf (cfg.publicKeys != [ ]) + (lib.hm.dag.entryAfter [ "linkGeneration" ] block); }; }; } diff --git a/infra/libkookie/home-manager/modules/programs/himalaya.nix b/infra/libkookie/home-manager/modules/programs/himalaya.nix index f4a0ffb3fea..dd91e5976fa 100644 --- a/infra/libkookie/home-manager/modules/programs/himalaya.nix +++ b/infra/libkookie/home-manager/modules/programs/himalaya.nix @@ -14,6 +14,11 @@ let name = account.realName; default = account.primary; + inbox-folder = account.folders.inbox; + sent-folder = account.folders.sent; + draft-folder = account.folders.drafts; + # NOTE: himalaya does not support configuring the name of the trash folder + # FIXME: does not support disabling TLS altogether # NOTE: does not accept sequence of strings for password commands imap-login = account.userName; @@ -26,7 +31,7 @@ let smtp-passwd-cmd = lib.escapeShellArgs account.passwordCommand; smtp-host = account.smtp.host; smtp-port = account.smtp.port; - smtp-starttls = account.imap.tls.useStartTls; + smtp-starttls = account.smtp.tls.useStartTls; } // (lib.optionalAttrs (account.signature.showSignature == "append") { # FIXME: signature cannot be attached signature = account.signature.text; diff --git a/infra/libkookie/home-manager/modules/programs/i3status-rust.nix b/infra/libkookie/home-manager/modules/programs/i3status-rust.nix index 69785fea374..33f2b146dc8 100644 --- a/infra/libkookie/home-manager/modules/programs/i3status-rust.nix +++ b/infra/libkookie/home-manager/modules/programs/i3status-rust.nix @@ -144,8 +144,8 @@ in { { block = "memory"; display_type = "memory"; - format_mem = "{Mup}%"; - format_swap = "{SUp}%"; + format_mem = "{mem_used_percents}"; + format_swap = "{swap_used_percents}"; } { block = "cpu"; diff --git a/infra/libkookie/home-manager/modules/programs/irssi.nix b/infra/libkookie/home-manager/modules/programs/irssi.nix index a8f8a22ff70..3d830a4f183 100644 --- a/infra/libkookie/home-manager/modules/programs/irssi.nix +++ b/infra/libkookie/home-manager/modules/programs/irssi.nix @@ -6,7 +6,6 @@ let cfg = config.programs.irssi; - boolStr = b: if b then "yes" else "no"; quoteStr = s: escape [ ''"'' ] s; # Comma followed by newline. @@ -33,9 +32,9 @@ let chatnet = "${k}"; address = "${v.server.address}"; port = "${toString v.server.port}"; - use_ssl = "${boolStr v.server.ssl.enable}"; - ssl_verify = "${boolStr v.server.ssl.verify}"; - autoconnect = "${boolStr v.server.autoConnect}"; + use_ssl = "${lib.hm.booleans.yesNo v.server.ssl.enable}"; + ssl_verify = "${lib.hm.booleans.yesNo v.server.ssl.verify}"; + autoconnect = "${lib.hm.booleans.yesNo v.server.autoConnect}"; ${ lib.optionalString (v.server.ssl.certificateFile != null) '' ssl_cert = "${v.server.ssl.certificateFile}"; @@ -44,14 +43,15 @@ let } '')); - channelString = concatStringsSep cnl (flip mapAttrsToList cfg.networks (k: v: - concatStringsSep cnl (flip mapAttrsToList v.channels (c: cv: '' - { - chatnet = "${k}"; - name = "${c}"; - autojoin = "${boolStr cv.autoJoin}"; - } - '')))); + channelString = concatStringsSep cnl (concatLists + (flip mapAttrsToList cfg.networks (k: v: + (flip mapAttrsToList v.channels (c: cv: '' + { + chatnet = "${k}"; + name = "${c}"; + autojoin = "${lib.hm.booleans.yesNo cv.autoJoin}"; + } + ''))))); channelType = types.submodule { options = { @@ -154,7 +154,7 @@ in { extraConfig = mkOption { default = ""; description = "These lines are appended to the Irssi configuration."; - type = types.str; + type = types.lines; }; aliases = mkOption { diff --git a/infra/libkookie/home-manager/modules/programs/just.nix b/infra/libkookie/home-manager/modules/programs/just.nix new file mode 100644 index 00000000000..6d5447c31ef --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/just.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.just; + +in { + meta.maintainers = [ hm.maintainers.maximsmol ]; + + options.programs.just = { + enable = mkEnableOption + "just, a handy way to save and run project-specific commands"; + + package = mkOption { + type = types.package; + default = pkgs.just; + defaultText = literalExpression "pkgs.just"; + description = "Package providing the just tool."; + }; + + 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 + ''; + + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/keychain.nix b/infra/libkookie/home-manager/modules/programs/keychain.nix index 9a25702f3f8..70b74c91df4 100644 --- a/infra/libkookie/home-manager/modules/programs/keychain.nix +++ b/infra/libkookie/home-manager/modules/programs/keychain.nix @@ -100,13 +100,13 @@ in { config = mkIf cfg.enable { home.packages = [ cfg.package ]; programs.bash.initExtra = mkIf cfg.enableBashIntegration '' - eval "$(${shellCommand})" + SHELL=bash eval "$(${shellCommand})" ''; programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration '' - eval (${shellCommand}) + SHELL=fish eval (${shellCommand}) ''; programs.zsh.initExtra = mkIf cfg.enableZshIntegration '' - eval "$(${shellCommand})" + SHELL=zsh eval "$(${shellCommand})" ''; xsession.initExtra = mkIf cfg.enableXsessionIntegration '' eval "$(${shellCommand})" diff --git a/infra/libkookie/home-manager/modules/programs/kitty.nix b/infra/libkookie/home-manager/modules/programs/kitty.nix index 5ebdf05eadd..627cc61f6b4 100644 --- a/infra/libkookie/home-manager/modules/programs/kitty.nix +++ b/infra/libkookie/home-manager/modules/programs/kitty.nix @@ -14,10 +14,8 @@ let toKittyConfig = generators.toKeyValue { mkKeyValue = key: value: let - value' = if isBool value then - (if value then "yes" else "no") - else - toString value; + value' = + (if isBool value then lib.hm.booleans.yesNo else toString) value; in "${key} ${value'}"; }; diff --git a/infra/libkookie/home-manager/modules/programs/lf.nix b/infra/libkookie/home-manager/modules/programs/lf.nix index a3cf7ec3d67..8f0a07cb8bb 100644 --- a/infra/libkookie/home-manager/modules/programs/lf.nix +++ b/infra/libkookie/home-manager/modules/programs/lf.nix @@ -58,6 +58,15 @@ in { programs.lf = { enable = mkEnableOption "lf"; + package = mkOption { + type = types.package; + default = pkgs.lf; + defaultText = literalExpression "pkgs.lf"; + description = '' + lf package to use. + ''; + }; + settings = mkOption { type = lfSettingsType; default = { }; @@ -169,7 +178,7 @@ in { }; config = mkIf cfg.enable { - home.packages = [ pkgs.lf ]; + home.packages = [ cfg.package ]; xdg.configFile."lf/lfrc".text = let fmtSetting = k: v: diff --git a/infra/libkookie/home-manager/modules/programs/mbsync.nix b/infra/libkookie/home-manager/modules/programs/mbsync.nix index c5d8f0da612..373828a0b24 100644 --- a/infra/libkookie/home-manager/modules/programs/mbsync.nix +++ b/infra/libkookie/home-manager/modules/programs/mbsync.nix @@ -63,7 +63,7 @@ let if isList v then concatMapStringsSep " " (genValue n) v else if isBool v then - (if v then "yes" else "no") + lib.hm.booleans.yesNo v else if isInt v then toString v else if isString v && hasSpace v then diff --git a/infra/libkookie/home-manager/modules/programs/mpv.nix b/infra/libkookie/home-manager/modules/programs/mpv.nix index b37a2516a27..0d7668cfa7a 100644 --- a/infra/libkookie/home-manager/modules/programs/mpv.nix +++ b/infra/libkookie/home-manager/modules/programs/mpv.nix @@ -18,9 +18,7 @@ let rec { int = toString option; float = int; - - bool = if option then "yes" else "no"; - + bool = lib.hm.booleans.yesNo option; string = option; }.${typeOf option}; diff --git a/infra/libkookie/home-manager/modules/programs/mu.nix b/infra/libkookie/home-manager/modules/programs/mu.nix index 233624d14c8..58b8b3dff91 100644 --- a/infra/libkookie/home-manager/modules/programs/mu.nix +++ b/infra/libkookie/home-manager/modules/programs/mu.nix @@ -12,12 +12,14 @@ let # Takes the list of accounts with mu.enable = true, and generates a # command-line flag for initializing the mu database. myAddresses = let - # List of account sets where mu.enable = true. + # Set of email account sets where mu.enable = true. muAccounts = filter (a: a.mu.enable) (attrValues config.accounts.email.accounts); addrs = map (a: a.address) muAccounts; - # Prefix --my-address= to each account's address with mu.enable. - addMyAddress = map (addr: "--my-address=" + addr) addrs; + # Construct list of lists containing email aliases, and flatten + aliases = flatten (map (a: a.aliases) muAccounts); + # Prefix --my-address= to each account's address AND all defined aliases + addMyAddress = map (addr: "--my-address=" + addr) (addrs ++ aliases); in concatStringsSep " " addMyAddress; in { diff --git a/infra/libkookie/home-manager/modules/programs/ncmpcpp.nix b/infra/libkookie/home-manager/modules/programs/ncmpcpp.nix index d1911818474..e3784951913 100644 --- a/infra/libkookie/home-manager/modules/programs/ncmpcpp.nix +++ b/infra/libkookie/home-manager/modules/programs/ncmpcpp.nix @@ -14,7 +14,7 @@ let renderValue = option: { int = toString option; - bool = if option then "yes" else "no"; + bool = lib.hm.booleans.yesNo option; string = option; }.${builtins.typeOf option}; diff --git a/infra/libkookie/home-manager/modules/programs/neomutt.nix b/infra/libkookie/home-manager/modules/programs/neomutt.nix index 2a2f79fae32..b3e92818396 100644 --- a/infra/libkookie/home-manager/modules/programs/neomutt.nix +++ b/infra/libkookie/home-manager/modules/programs/neomutt.nix @@ -89,7 +89,6 @@ let }; }; - yesno = x: if x then "yes" else "no"; setOption = n: v: if v == null then "unset ${n}" else "set ${n}=${v}"; escape = replaceStrings [ "%" ] [ "%25" ]; @@ -167,7 +166,7 @@ let sidebarSection = '' # Sidebar set sidebar_visible = yes - set sidebar_short_path = ${yesno cfg.sidebar.shortPath} + set sidebar_short_path = ${lib.hm.booleans.yesNo cfg.sidebar.shortPath} set sidebar_width = ${toString cfg.sidebar.width} set sidebar_format = '${cfg.sidebar.format}' ''; @@ -204,8 +203,10 @@ let # GPG section set crypt_use_gpgme = yes - set crypt_autosign = ${yesno (gpg.signByDefault or false)} - set crypt_opportunistic_encrypt = ${yesno (gpg.encryptByDefault or false)} + set crypt_autosign = ${lib.hm.booleans.yesNo (gpg.signByDefault or false)} + set crypt_opportunistic_encrypt = ${ + lib.hm.booleans.yesNo (gpg.encryptByDefault or false) + } set pgp_use_gpg_agent = yes set mbox_type = ${if maildir != null then "Maildir" else "mbox"} set sort = "${cfg.sort}" @@ -222,9 +223,11 @@ let # Extra configuration ${account.neomutt.extraConfig} - '' + optionalString (account.signature.showSignature != "none") '' + '' + (if (account.signature.showSignature == "none") then '' + unset signature + '' else '' set signature = ${pkgs.writeText "signature.txt" account.signature.text} - '' + optionalString account.notmuch.enable (notmuchSection account); + '') + optionalString account.notmuch.enable (notmuchSection account); in { options = { diff --git a/infra/libkookie/home-manager/modules/programs/neovim.nix b/infra/libkookie/home-manager/modules/programs/neovim.nix index 97e84ba884c..a0e21476e49 100644 --- a/infra/libkookie/home-manager/modules/programs/neovim.nix +++ b/infra/libkookie/home-manager/modules/programs/neovim.nix @@ -16,6 +16,17 @@ let 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 { options = { config = mkOption { @@ -53,20 +64,37 @@ let '' else ""; + allPlugins = cfg.plugins ++ optional cfg.coc.enable { + type = "viml"; + plugin = pkgs.vimPlugins.coc-nvim; + config = cfg.coc.pluginConfig; + optional = false; + }; + moduleConfigure = { packages.home-manager = { start = remove null (map (x: if x ? plugin && x.optional == true then null else (x.plugin or x)) - cfg.plugins); + allPlugins); opt = remove null (map (x: if x ? plugin && x.optional == true then x.plugin else null) - cfg.plugins); + allPlugins); }; beforePlugins = ""; }; extraMakeWrapperArgs = lib.optionalString (cfg.extraPackages != [ ]) ''--suffix PATH : "${lib.makeBinPath cfg.extraPackages}"''; + extraMakeWrapperLuaCArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' + --suffix LUA_CPATH ";" "${ + lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaCPath + cfg.extraLuaPackages + }"''; + extraMakeWrapperLuaArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' + --suffix LUA_PATH ";" "${ + lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaPath + cfg.extraLuaPackages + }"''; in { imports = [ @@ -141,6 +169,17 @@ in { ''; }; + extraLuaPackages = mkOption { + type = with types; either extraLua51PackageType (listOf package); + default = [ ]; + defaultText = "[]"; + example = literalExpression "(ps: with ps; [ luautf8 ])"; + description = '' + A function in lua5_1.withPackages format, which returns a + list of Lua packages required for your plugins to work. + ''; + }; + generatedConfigViml = mkOption { type = types.lines; visible = true; @@ -296,6 +335,12 @@ in { for options. ''; }; + + pluginConfig = mkOption { + type = types.lines; + default = ""; + description = "Script to configure CoC. Must be viml."; + }; }; }; }; @@ -310,16 +355,15 @@ in { plugin = x; config = ""; optional = false; - }) cfg.plugins; + }) allPlugins; suppressNotVimlConfig = p: if p.type != "viml" then p // { config = ""; } else p; neovimConfig = pkgs.neovimUtils.makeNeovimConfig { - inherit (cfg) - extraPython3Packages withPython3 withNodeJs withRuby viAlias vimAlias; + inherit (cfg) extraPython3Packages withPython3 withRuby viAlias vimAlias; + withNodeJs = cfg.withNodeJs or cfg.coc.enable; configure = cfg.configure // moduleConfigure; - plugins = (map suppressNotVimlConfig pluginsNormalized) - ++ optionals cfg.coc.enable [{ plugin = pkgs.vimPlugins.coc-nvim; }]; + plugins = map suppressNotVimlConfig pluginsNormalized; customRC = cfg.extraConfig; }; @@ -337,15 +381,23 @@ in { programs.neovim.generatedConfigs = let grouped = lib.lists.groupBy (x: x.type) pluginsNormalized; - concatConfigs = - lib.concatMapStrings (p: builtins.trace p.plugin.name p.config); + concatConfigs = lib.concatMapStrings (p: p.config); in mapAttrs (name: vals: concatConfigs vals) grouped; home.packages = [ cfg.finalPackage ]; xdg.configFile."nvim/init.vim" = mkIf (neovimConfig.neovimRcContent != "") { - text = neovimConfig.neovimRcContent; + text = if hasAttr "lua" config.programs.neovim.generatedConfigs then + neovimConfig.neovimRcContent + '' + + lua require('init-home-manager')'' + else + neovimConfig.neovimRcContent; }; + xdg.configFile."nvim/lua/init-home-manager.lua" = + mkIf (hasAttr "lua" config.programs.neovim.generatedConfigs) { + text = config.programs.neovim.generatedConfigs.lua; + }; xdg.configFile."nvim/coc-settings.json" = mkIf cfg.coc.enable { source = jsonFormat.generate "coc-settings.json" cfg.coc.settings; }; @@ -353,7 +405,8 @@ in { programs.neovim.finalPackage = pkgs.wrapNeovimUnstable cfg.package (neovimConfig // { wrapperArgs = (lib.escapeShellArgs neovimConfig.wrapperArgs) + " " - + extraMakeWrapperArgs; + + extraMakeWrapperArgs + " " + extraMakeWrapperLuaCArgs + " " + + extraMakeWrapperLuaArgs; wrapRc = false; }); diff --git a/infra/libkookie/home-manager/modules/programs/newsboat.nix b/infra/libkookie/home-manager/modules/programs/newsboat.nix index eac4cce8c0f..ba074a421a2 100644 --- a/infra/libkookie/home-manager/modules/programs/newsboat.nix +++ b/infra/libkookie/home-manager/modules/programs/newsboat.nix @@ -24,7 +24,7 @@ let max-items ${toString cfg.maxItems} browser ${cfg.browser} reload-threads ${toString cfg.reloadThreads} - auto-reload ${if cfg.autoReload then "yes" else "no"} + auto-reload ${lib.hm.booleans.yesNo cfg.autoReload} ${optionalString (cfg.reloadTime != null) (toString "reload-time ${toString cfg.reloadTime}")} prepopulate-query-feeds yes diff --git a/infra/libkookie/home-manager/modules/programs/offlineimap.nix b/infra/libkookie/home-manager/modules/programs/offlineimap.nix index 83a31dd2ba1..8817e2ba7e9 100644 --- a/infra/libkookie/home-manager/modules/programs/offlineimap.nix +++ b/infra/libkookie/home-manager/modules/programs/offlineimap.nix @@ -12,10 +12,8 @@ let toIni = generators.toINI { mkKeyValue = key: value: let - value' = if isBool value then - (if value then "yes" else "no") - else - toString value; + value' = + (if isBool value then lib.hm.booleans.yesNo else toString) value; in "${key} = ${value'}"; }; diff --git a/infra/libkookie/home-manager/modules/programs/pubs.nix b/infra/libkookie/home-manager/modules/programs/pubs.nix new file mode 100644 index 00000000000..5a597deabce --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/pubs.nix @@ -0,0 +1,60 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.pubs; + +in { + meta.maintainers = [ hm.maintainers.loicreynier ]; + + options.programs.pubs = { + enable = mkEnableOption "pubs"; + + package = mkOption { + type = types.package; + default = pkgs.pubs; + defaultText = literalExpression "pkgs.pubs"; + description = "The package to use for the pubs script."; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + example = literalExpression '' + ''' + [main] + pubsdir = ''${config.home.homeDirectory}/.pubs + docsdir = ''${config.home.homeDirectory}/.pubs/doc + doc_add = link + open_cmd = xdg-open + + [plugins] + active = git,alias + + [[alias]] + + [[[la]]] + command = list -a + description = lists papers in lexicographic order + + [[git]] + quiet = True + manual = False + force_color = False + '''''; + description = '' + Configuration using syntax written to + $HOME/.pubsrc. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + home.file.".pubsrc" = + mkIf (cfg.extraConfig != "") { text = cfg.extraConfig; }; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/pylint.nix b/infra/libkookie/home-manager/modules/programs/pylint.nix new file mode 100644 index 00000000000..e6679b985b8 --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/pylint.nix @@ -0,0 +1,31 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.pylint; + listToValue = concatMapStringsSep ", " (generators.mkValueStringDefault { }); + iniFormat = pkgs.formats.ini { inherit listToValue; }; +in { + meta.maintainers = [ hm.maintainers.florpe ]; + options.programs.pylint = { + enable = mkEnableOption "the pylint Python linter"; + package = mkOption { + type = types.package; + default = pkgs.python3Packages.pylint; + defaultText = literalExpression "pkgs.python3Packages.pylint"; + description = "The pylint package to use."; + }; + settings = mkOption { + type = iniFormat.type; + default = { }; + defaultText = literalExpression "{}"; + description = "The pylint configuration."; + }; + }; + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + home.file.".pylintrc".source = iniFormat.generate "pylintrc" cfg.settings; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/sioyek.nix b/infra/libkookie/home-manager/modules/programs/sioyek.nix new file mode 100644 index 00000000000..9ef32746c1c --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/sioyek.nix @@ -0,0 +1,70 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.programs.sioyek; + + renderAttrs = attrs: + concatStringsSep "\n" + (mapAttrsToList (name: value: "${name} ${value}") attrs); +in { + options = { + programs.sioyek = { + enable = mkEnableOption + "Sioyek is a PDF viewer designed for reading research papers and technical books."; + + package = mkOption { + default = pkgs.sioyek; + defaultText = literalExpression "pkgs.sioyek"; + type = types.package; + description = "Package providing the sioyek binary"; + }; + + bindings = mkOption { + description = '' + Input configuration written to + $XDG_CONFIG_HOME/sioyek/keys_user.config. + See . + ''; + type = types.attrsOf types.str; + default = { }; + example = literalExpression '' + { + "move_up" = "k"; + "move_down" = "j"; + "move_left" = "h"; + "move_right" = "l"; + } + ''; + }; + + config = mkOption { + description = '' + Input configuration written to + $XDG_CONFIG_HOME/sioyek/prefs_user.config. + See . + ''; + type = types.attrsOf types.str; + default = { }; + example = literalExpression '' + { + "background_color" = "1.0 1.0 1.0"; + "text_highlight_color" = "1.0 0.0 0.0"; + } + ''; + }; + + }; + }; + + config = mkIf cfg.enable (mkMerge [ + { home.packages = [ cfg.package ]; } + (mkIf (cfg.config != { }) { + xdg.configFile."sioyek/prefs_user.config".text = renderAttrs cfg.config; + }) + (mkIf (cfg.bindings != { }) { + xdg.configFile."sioyek/keys_user.config".text = renderAttrs cfg.bindings; + }) + ]); + + meta.maintainers = [ hm.maintainers.podocarp ]; +} diff --git a/infra/libkookie/home-manager/modules/programs/ssh.nix b/infra/libkookie/home-manager/modules/programs/ssh.nix index b51ecedf4b8..05d16a2c41b 100644 --- a/infra/libkookie/home-manager/modules/programs/ssh.nix +++ b/infra/libkookie/home-manager/modules/programs/ssh.nix @@ -13,8 +13,6 @@ let then " ${entry.address}" else " [${entry.address}]:${toString entry.port}"; - yn = flag: if flag then "yes" else "no"; - unwords = builtins.concatStringsSep " "; bindOptions = { @@ -284,7 +282,7 @@ let matchBlockStr = cf: concatStringsSep "\n" ( ["Host ${cf.host}"] ++ optional (cf.port != null) " Port ${toString cf.port}" - ++ optional (cf.forwardAgent != null) " ForwardAgent ${yn cf.forwardAgent}" + ++ optional (cf.forwardAgent != null) " ForwardAgent ${lib.hm.booleans.yesNo cf.forwardAgent}" ++ optional cf.forwardX11 " ForwardX11 yes" ++ optional cf.forwardX11Trusted " ForwardX11Trusted yes" ++ optional cf.identitiesOnly " IdentitiesOnly yes" @@ -296,7 +294,7 @@ let " ServerAliveInterval ${toString cf.serverAliveInterval}" ++ optional (cf.serverAliveCountMax != 3) " ServerAliveCountMax ${toString cf.serverAliveCountMax}" - ++ optional (cf.compression != null) " Compression ${yn cf.compression}" + ++ optional (cf.compression != null) " Compression ${lib.hm.booleans.yesNo cf.compression}" ++ optional (!cf.checkHostIP) " CheckHostIP no" ++ optional (cf.proxyCommand != null) " ProxyCommand ${cf.proxyCommand}" ++ optional (cf.proxyJump != null) " ProxyJump ${cf.proxyJump}" @@ -498,11 +496,11 @@ in )} Host * - ForwardAgent ${yn cfg.forwardAgent} - Compression ${yn cfg.compression} + ForwardAgent ${lib.hm.booleans.yesNo cfg.forwardAgent} + Compression ${lib.hm.booleans.yesNo cfg.compression} ServerAliveInterval ${toString cfg.serverAliveInterval} ServerAliveCountMax ${toString cfg.serverAliveCountMax} - HashKnownHosts ${yn cfg.hashKnownHosts} + HashKnownHosts ${lib.hm.booleans.yesNo cfg.hashKnownHosts} UserKnownHostsFile ${cfg.userKnownHostsFile} ControlMaster ${cfg.controlMaster} ControlPath ${cfg.controlPath} diff --git a/infra/libkookie/home-manager/modules/programs/starship.nix b/infra/libkookie/home-manager/modules/programs/starship.nix index 9aac5354589..58ec518afee 100644 --- a/infra/libkookie/home-manager/modules/programs/starship.nix +++ b/infra/libkookie/home-manager/modules/programs/starship.nix @@ -100,7 +100,7 @@ in { programs.bash.initExtra = mkIf cfg.enableBashIntegration '' if [[ $TERM != "dumb" && (-z $INSIDE_EMACS || $INSIDE_EMACS == "vterm") ]]; then - eval "$(${starshipCmd} init bash)" + eval "$(${starshipCmd} init bash --print-full-init)" fi ''; diff --git a/infra/libkookie/home-manager/modules/programs/taskwarrior.nix b/infra/libkookie/home-manager/modules/programs/taskwarrior.nix index 441313252b5..3eb0013e303 100644 --- a/infra/libkookie/home-manager/modules/programs/taskwarrior.nix +++ b/infra/libkookie/home-manager/modules/programs/taskwarrior.nix @@ -24,6 +24,8 @@ let formatPair = key: value: if isAttrs value then formatSet key value else formatLine key value; + homeConf = "${config.xdg.configHome}/task/home-manager-taskrc"; + userConf = "${config.xdg.configHome}/task/taskrc"; in { options = { programs.taskwarrior = { @@ -88,7 +90,7 @@ in { config = mkIf cfg.enable { home.packages = [ pkgs.taskwarrior ]; - xdg.configFile."task/taskrc".text = '' + home.file."${homeConf}".text = '' data.location=${cfg.dataLocation} ${optionalString (cfg.colorTheme != null) (if isString cfg.colorTheme then "include ${cfg.colorTheme}.theme" @@ -99,5 +101,21 @@ in { ${cfg.extraConfig} ''; + + home.activation.regenDotTaskRc = hm.dag.entryAfter [ "writeBoundary" ] '' + $VERBOSE_ECHO "Ensuring generated taskwarrior config included in taskrc" + + if [[ ! -s "${userConf}" ]]; then + # Ensure file's existence + if [[ -v DRY_RUN ]]; then + $DRY_RUN_CMD echo "include ${homeConf}" ">" "${userConf}" + else + echo "include ${homeConf}" > "${userConf}" + fi + elif ! grep -qF "include ${homeConf}" ${escapeShellArg userConf}; then + # Add include statement for Home Manager generated config. + $DRY_RUN_CMD sed -i '1i include ${homeConf}' ${escapeShellArg userConf} + fi + ''; }; } diff --git a/infra/libkookie/home-manager/modules/programs/tiny.nix b/infra/libkookie/home-manager/modules/programs/tiny.nix new file mode 100644 index 00000000000..d502801f92f --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/tiny.nix @@ -0,0 +1,65 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.programs.tiny; + format = pkgs.formats.yaml { }; + configDir = if pkgs.stdenv.isDarwin then + "Library/Application Support/tiny" + else + "${config.xdg.configHome}/tiny"; +in { + meta.maintainers = [ hm.maintainers.kmaasrud ]; + + options = { + programs.tiny = { + enable = mkEnableOption "tiny, a TUI IRC client written in Rust"; + + package = mkOption { + type = types.package; + default = pkgs.tiny; + defaultText = literalExpression "pkgs.tiny"; + description = "The tiny package to install."; + }; + + settings = mkOption { + type = format.type; + default = { }; + defaultText = literalExpression "{ }"; + example = literalExpression '' + { + servers = [ + { + addr = "irc.libera.chat"; + port = 6697; + tls = true; + realname = "John Doe"; + nicks = [ "tinyuser" ]; + } + ]; + defaults = { + nicks = [ "tinyuser" ]; + realname = "John Doe"; + join = []; + tls = true; + }; + }; + ''; + description = '' + Configuration written to + $XDG_CONFIG_HOME/tiny/config.yml. See + + for the default configuration. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + home.file."${configDir}/config.yml" = mkIf (cfg.settings != { }) { + source = format.generate "tiny-config" cfg.settings; + }; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/tmux.nix b/infra/libkookie/home-manager/modules/programs/tmux.nix index 4b5125966d0..bf98a3f37b2 100644 --- a/infra/libkookie/home-manager/modules/programs/tmux.nix +++ b/infra/libkookie/home-manager/modules/programs/tmux.nix @@ -49,8 +49,8 @@ let ${optionalString cfg.newSession "new-session"} ${optionalString cfg.reverseSplit '' - bind v split-window -h - bind s split-window -v + bind -N "Split the pane into two, left and right" v split-window -h + bind -N "Split the pane into two, top and bottom" s split-window -v ''} set -g status-keys ${cfg.keyMode} @@ -58,34 +58,40 @@ let ${optionalString (cfg.keyMode == "vi" && cfg.customPaneNavigationAndResize) '' - bind h select-pane -L - bind j select-pane -D - bind k select-pane -U - bind l select-pane -R - - bind -r H resize-pane -L ${toString cfg.resizeAmount} - bind -r J resize-pane -D ${toString cfg.resizeAmount} - bind -r K resize-pane -U ${toString cfg.resizeAmount} - bind -r L resize-pane -R ${toString cfg.resizeAmount} + bind -N "Select pane to the left of the active pane" h select-pane -L + bind -N "Select pane below the active pane" j select-pane -D + bind -N "Select pane above the active pane" k select-pane -U + bind -N "Select pane to the right of the active pane" l select-pane -R + + bind -r -N "Resize the pane left by ${toString cfg.resizeAmount}" \ + H resize-pane -L ${toString cfg.resizeAmount} + bind -r -N "Resize the pane down by ${toString cfg.resizeAmount}" \ + J resize-pane -D ${toString cfg.resizeAmount} + bind -r -N "Resize the pane up by ${toString cfg.resizeAmount}" \ + K resize-pane -U ${toString cfg.resizeAmount} + bind -r -N "Resize the pane right by ${toString cfg.resizeAmount}" \ + L resize-pane -R ${toString cfg.resizeAmount} ''} ${if cfg.prefix != null then '' # rebind main key: ${cfg.prefix} unbind C-${defaultShortcut} set -g prefix ${cfg.prefix} - bind ${cfg.prefix} send-prefix + bind -N "Send the prefix key through to the application" \ + ${cfg.prefix} send-prefix '' else optionalString (cfg.shortcut != defaultShortcut) '' # rebind main key: C-${cfg.shortcut} unbind C-${defaultShortcut} set -g prefix C-${cfg.shortcut} - bind ${cfg.shortcut} send-prefix + bind -N "Send the prefix key through to the application" \ + ${cfg.shortcut} send-prefix bind C-${cfg.shortcut} last-window ''} ${optionalString cfg.disableConfirmationPrompt '' - bind-key & kill-window - bind-key x kill-pane + bind-key -N "Kill the current window" & kill-window + bind-key -N "Kill the current pane" x kill-pane ''} setw -g aggressive-resize ${boolToStr cfg.aggressiveResize} diff --git a/infra/libkookie/home-manager/modules/programs/vscode.nix b/infra/libkookie/home-manager/modules/programs/vscode.nix index 26bcce46386..df1dd237896 100644 --- a/infra/libkookie/home-manager/modules/programs/vscode.nix +++ b/infra/libkookie/home-manager/modules/programs/vscode.nix @@ -28,6 +28,7 @@ let "${config.xdg.configHome}/${configDir}/User"; configFilePath = "${userDir}/settings.json"; + tasksFilePath = "${userDir}/tasks.json"; keybindingsFilePath = "${userDir}/keybindings.json"; # TODO: On Darwin where are the extensions? @@ -70,6 +71,27 @@ in { ''; }; + userTasks = mkOption { + type = jsonFormat.type; + default = { }; + example = literalExpression '' + { + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "Hello task", + "command": "hello", + } + ] + } + ''; + description = '' + Configuration written to Visual Studio Code's + tasks.json. + ''; + }; + keybindings = mkOption { type = types.listOf (types.submodule { options = { @@ -120,7 +142,7 @@ in { extensions = mkOption { type = types.listOf types.package; default = [ ]; - example = literalExpression "[ pkgs.vscode-extensions.bbenoist.Nix ]"; + example = literalExpression "[ pkgs.vscode-extensions.bbenoist.nix ]"; description = '' The extensions Visual Studio Code should be started with. ''; @@ -146,6 +168,10 @@ in { "${configFilePath}".source = jsonFormat.generate "vscode-user-settings" cfg.userSettings; }) + (mkIf (cfg.userTasks != { }) { + "${tasksFilePath}".source = + jsonFormat.generate "vscode-user-tasks" cfg.userTasks; + }) (mkIf (cfg.keybindings != [ ]) (let dropNullFields = filterAttrs (_: v: v != null); in { diff --git a/infra/libkookie/home-manager/modules/programs/waybar.nix b/infra/libkookie/home-manager/modules/programs/waybar.nix index faef644d3ab..12002d546d7 100644 --- a/infra/libkookie/home-manager/modules/programs/waybar.nix +++ b/infra/libkookie/home-manager/modules/programs/waybar.nix @@ -318,7 +318,7 @@ in { Service = { ExecStart = "${cfg.package}/bin/waybar"; - ExecReload = "kill -SIGUSR2 $MAINPID"; + ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID"; Restart = "on-failure"; KillMode = "mixed"; }; diff --git a/infra/libkookie/home-manager/modules/programs/zellij.nix b/infra/libkookie/home-manager/modules/programs/zellij.nix new file mode 100644 index 00000000000..2cfa625daab --- /dev/null +++ b/infra/libkookie/home-manager/modules/programs/zellij.nix @@ -0,0 +1,56 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.zellij; + yamlFormat = pkgs.formats.yaml { }; + + configDir = if pkgs.stdenv.isDarwin then + "Library/Application Support/org.Zellij-Contributors.Zellij" + else + "${config.xdg.configHome}/zellij"; + +in { + meta.maintainers = [ hm.maintainers.mainrs ]; + + options.programs.zellij = { + enable = mkEnableOption "zellij"; + + package = mkOption { + type = types.package; + default = pkgs.zellij; + defaultText = literalExpression "pkgs.zellij"; + description = '' + The zellij package to install. + ''; + }; + + settings = mkOption { + type = yamlFormat.type; + default = { }; + example = literalExpression '' + { + theme = "custom"; + themes.custom.fg = 5; + } + ''; + description = '' + Configuration written to + $XDG_CONFIG_HOME/zellij/config.yaml. + + See for the full + list of options. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + home.file."${configDir}/config.yaml" = mkIf (cfg.settings != { }) { + source = yamlFormat.generate "zellij.yaml" cfg.settings; + }; + }; +} diff --git a/infra/libkookie/home-manager/modules/programs/zsh.nix b/infra/libkookie/home-manager/modules/programs/zsh.nix index 6cd880309fe..2d81698b6fe 100644 --- a/infra/libkookie/home-manager/modules/programs/zsh.nix +++ b/infra/libkookie/home-manager/modules/programs/zsh.nix @@ -442,6 +442,19 @@ in ''; }) + { + home.file."${relToDotDir ".zshenv"}".text = '' + # Environment variables + . "${config.home.profileDirectory}/etc/profile.d/hm-session-vars.sh" + + # Only source this once + if [[ -z "$__HM_ZSH_SESS_VARS_SOURCED" ]]; then + export __HM_ZSH_SESS_VARS_SOURCED=1 + ${envVarsStr} + fi + ''; + } + { home.packages = with pkgs; [ zsh ] ++ optional cfg.enableCompletion nix-zsh-completions @@ -491,10 +504,6 @@ in "source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" } - # Environment variables - . "${config.home.profileDirectory}/etc/profile.d/hm-session-vars.sh" - ${envVarsStr} - ${optionalString cfg.oh-my-zsh.enable '' # oh-my-zsh extra settings for plugins ${cfg.oh-my-zsh.extraConfig} diff --git a/infra/libkookie/home-manager/modules/programs/zsh/prezto.nix b/infra/libkookie/home-manager/modules/programs/zsh/prezto.nix index 5c2853e7a6a..17680ff2598 100644 --- a/infra/libkookie/home-manager/modules/programs/zsh/prezto.nix +++ b/infra/libkookie/home-manager/modules/programs/zsh/prezto.nix @@ -365,11 +365,11 @@ in { # Generated by Nix ${optionalString (cfg.caseSensitive != null) '' zstyle ':prezto:*:*' case-sensitive '${ - if cfg.caseSensitive then "yes" else "no" + lib.hm.booleans.yesNo cfg.caseSensitive }' ''} ${optionalString (cfg.color != null) '' - zstyle ':prezto:*:*' color '${if cfg.color then "yes" else "no"}' + zstyle ':prezto:*:*' color '${lib.hm.booleans.yesNo cfg.color}' ''} ${optionalString (cfg.pmoduleDirs != [ ]) '' zstyle ':prezto:load' pmodule-dirs ${ @@ -410,12 +410,12 @@ in { ''} ${optionalString (cfg.editor.dotExpansion != null) '' zstyle ':prezto:module:editor' dot-expansion '${ - if cfg.editor.dotExpansion then "yes" else "no" + lib.hm.booleans.yesNo cfg.editor.dotExpansion }' ''} ${optionalString (cfg.editor.promptContext != null) '' zstyle ':prezto:module:editor' ps-context '${ - if cfg.editor.promptContext then "yes" else "no" + lib.hm.booleans.yesNo cfg.editor.promptContext }' ''} ${optionalString (cfg.git.submoduleIgnore != null) '' @@ -447,27 +447,27 @@ in { ''} ${optionalString (cfg.python.virtualenvAutoSwitch != null) '' zstyle ':prezto:module:python:virtualenv' auto-switch '${ - if cfg.python.virtualenvAutoSwitch then "yes" else "no" + lib.hm.booleans.yesNo cfg.python.virtualenvAutoSwitch }' ''} ${optionalString (cfg.python.virtualenvInitialize != null) '' zstyle ':prezto:module:python:virtualenv' initialize '${ - if cfg.python.virtualenvInitialize then "yes" else "no" + lib.hm.booleans.yesNo cfg.python.virtualenvInitialize }' ''} ${optionalString (cfg.ruby.chrubyAutoSwitch != null) '' zstyle ':prezto:module:ruby:chruby' auto-switch '${ - if cfg.ruby.chrubyAutoSwitch then "yes" else "no" + lib.hm.booleans.yesNo cfg.ruby.chrubyAutoSwitch }' ''} ${optionalString (cfg.screen.autoStartLocal != null) '' zstyle ':prezto:module:screen:auto-start' local '${ - if cfg.screen.autoStartLocal then "yes" else "no" + lib.hm.booleans.yesNo cfg.screen.autoStartLocal }' ''} ${optionalString (cfg.screen.autoStartRemote != null) '' zstyle ':prezto:module:screen:auto-start' remote '${ - if cfg.screen.autoStartRemote then "yes" else "no" + lib.hm.booleans.yesNo cfg.screen.autoStartRemote }' ''} ${optionalString (cfg.ssh.identities != [ ]) '' @@ -502,7 +502,7 @@ in { ''} ${optionalString (cfg.terminal.autoTitle != null) '' zstyle ':prezto:module:terminal' auto-title '${ - if cfg.terminal.autoTitle then "yes" else "no" + lib.hm.booleans.yesNo cfg.terminal.autoTitle }' ''} ${optionalString (cfg.terminal.windowTitleFormat != null) '' @@ -516,17 +516,17 @@ in { ''} ${optionalString (cfg.tmux.autoStartLocal != null) '' zstyle ':prezto:module:tmux:auto-start' local '${ - if cfg.tmux.autoStartLocal then "yes" else "no" + lib.hm.booleans.yesNo cfg.tmux.autoStartLocal }' ''} ${optionalString (cfg.tmux.autoStartRemote != null) '' zstyle ':prezto:module:tmux:auto-start' remote '${ - if cfg.tmux.autoStartRemote then "yes" else "no" + lib.hm.booleans.yesNo cfg.tmux.autoStartRemote }' ''} ${optionalString (cfg.tmux.itermIntegration != null) '' zstyle ':prezto:module:tmux:iterm' integrate '${ - if cfg.tmux.itermIntegration then "yes" else "no" + lib.hm.booleans.yesNo cfg.tmux.itermIntegration }' ''} ${optionalString (cfg.tmux.defaultSessionName != null) '' @@ -534,7 +534,7 @@ in { ''} ${optionalString (cfg.utility.safeOps != null) '' zstyle ':prezto:module:utility' safe-ops '${ - if cfg.utility.safeOps then "yes" else "no" + lib.hm.booleans.yesNo cfg.utility.safeOps }' ''} ${cfg.extraConfig} diff --git a/infra/libkookie/home-manager/modules/services/dunst.nix b/infra/libkookie/home-manager/modules/services/dunst.nix index 238abc297e6..083ff2b3a4e 100644 --- a/infra/libkookie/home-manager/modules/services/dunst.nix +++ b/infra/libkookie/home-manager/modules/services/dunst.nix @@ -13,7 +13,7 @@ let mkKeyValue = key: value: let value' = if isBool value then - (if value then "yes" else "no") + (lib.hm.booleans.yesNo value) else if isString value then ''"${value}"'' else diff --git a/infra/libkookie/home-manager/modules/services/espanso.nix b/infra/libkookie/home-manager/modules/services/espanso.nix new file mode 100644 index 00000000000..3d66a59874f --- /dev/null +++ b/infra/libkookie/home-manager/modules/services/espanso.nix @@ -0,0 +1,86 @@ +{ pkgs, config, lib, ... }: + +let + + inherit (lib) + mkOption mkEnableOption mkIf maintainers literalExpression types platforms; + + inherit (lib.hm.assertions) assertPlatform; + + cfg = config.services.espanso; + + yaml = pkgs.formats.yaml { }; + +in { + meta.maintainers = with maintainers; [ lucasew ]; + + options = { + services.espanso = { + enable = mkEnableOption "Espanso: cross platform text expander in Rust"; + + package = mkOption { + type = types.package; + description = "Which espanso package to use"; + default = pkgs.espanso; + defaultText = literalExpression "pkgs.espanso"; + }; + + settings = mkOption { + type = yaml.type; + default = { matches = [ ]; }; + example = literalExpression '' + { + matches = [ + { # Simple text replacement + trigger = ":espanso"; + replace = "Hi there!"; + } + { # Dates + trigger = ":date"; + replace = "{{mydate}}"; + vars = [{ + name = "mydate"; + type = "date"; + params = { format = "%m/%d/%Y"; }; + }]; + } + { # Shell commands + trigger = ":shell"; + replace = "{{output}}"; + vars = [{ + name = "output"; + type = "shell"; + params = { cmd = "echo Hello from your shell"; }; + }]; + } + ]; + } + ''; + description = '' + The Espanso configuration to use. See + + for a description of available options. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = [ (assertPlatform "services.espanso" pkgs platforms.linux) ]; + + home.packages = [ cfg.package ]; + + xdg.configFile."espanso/default.yml".source = + yaml.generate "espanso-default.yml" cfg.settings; + + systemd.user.services.espanso = { + Unit = { Description = "Espanso: cross platform text expander in Rust"; }; + Service = { + Type = "exec"; + ExecStart = "${cfg.package}/bin/espanso daemon"; + Restart = "on-failure"; + }; + Install = { WantedBy = [ "default.target" ]; }; + }; + }; +} diff --git a/infra/libkookie/home-manager/modules/services/fusuma.nix b/infra/libkookie/home-manager/modules/services/fusuma.nix new file mode 100644 index 00000000000..3a853b51381 --- /dev/null +++ b/infra/libkookie/home-manager/modules/services/fusuma.nix @@ -0,0 +1,138 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.fusuma; + + yamlFormat = pkgs.formats.yaml { }; + + configJson = pkgs.writeText "config.json" (builtins.toJSON cfg.settings); + + configYamlRaw = pkgs.runCommand "config.yaml.raw" { } '' + ${pkgs.remarshal}/bin/json2yaml -i ${configJson} -o $out; + ''; + + # convert keys into literal numbers where necessary, + # fusuma does not support string type finger count. + strToInt = pkgs.writers.writePython3 "str2int" { + libraries = [ pkgs.python3Packages.pyyaml ]; + } '' + import yaml + from yaml import FullLoader + + + def str2int(config): + if type(config) is not dict: + return + + for key in list(config): + if type(config[key]) is dict and key.isdigit(): + t = config[key] + del config[key] + config[int(key)] = t + else: + str2int(config[key]) + + + if __name__ == '__main__': + path = "${configYamlRaw}" + with open(path) as f: + config = yaml.load(f, Loader=FullLoader) + str2int(config) + print(yaml.dump(config)) + ''; + + configYaml = pkgs.stdenv.mkDerivation { + name = "config.yaml"; + buildCommand = '' + ${strToInt} > $out + ''; + }; + + makeBinPath = packages: + foldl (a: b: if a == "" then b else "${a}:${b}") "" + (map (pkg: "${pkg}/bin") packages); + +in { + meta.maintainers = [ hm.maintainers.iosmanthus ]; + + options.services.fusuma = { + enable = mkEnableOption + "the fusuma systemd service to automatically enable touchpad gesture"; + + package = mkOption { + type = types.package; + default = pkgs.fusuma; + defaultText = literalExpression "pkgs.fusuma"; + description = "Package providing fusuma."; + }; + + settings = mkOption { + type = yamlFormat.type; + example = literalExpression '' + { + enable = true; + extraPackages = with pkgs;[ xdotool ]; + config = { + threshold = { + swipe = 0.1; + }; + interval = { + swipe = 0.7; + }; + swipe = { + "3" = { + left = { + # GNOME: Switch to left workspace + command = "xdotool key ctrl+alt+Right"; + }; + }; + }; + }; + }; + ''; + description = '' + YAML config that will override the default fusuma configuration. + ''; + }; + + extraPackages = mkOption { + type = types.listOf types.package; + default = with pkgs; [ coreutils ]; + defaultText = literalExpression "pkgs.coreutils"; + example = literalExpression '' + with pkgs; [ coreutils xdotool ]; + ''; + description = '' + Extra packages needs to bring to the scope of fusuma service. + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.fusuma" pkgs + lib.platforms.linux) + ]; + + xdg.configFile."fusuma/config.yaml".source = configYaml; + + systemd.user.services.fusuma = { + Unit = { + Description = "Fusuma services"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + + Service = { + Environment = with pkgs; "PATH=${makeBinPath cfg.extraPackages}"; + ExecStart = + "${cfg.package}/bin/fusuma -c ${config.xdg.configHome}/fusuma/config.yaml"; + }; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + }; + }; +} diff --git a/infra/libkookie/home-manager/modules/services/gpg-agent.nix b/infra/libkookie/home-manager/modules/services/gpg-agent.nix index 175fba42f32..d4ccef3ec8f 100644 --- a/infra/libkookie/home-manager/modules/services/gpg-agent.nix +++ b/infra/libkookie/home-manager/modules/services/gpg-agent.nix @@ -12,9 +12,8 @@ let gpgInitStr = '' GPG_TTY="$(tty)" export GPG_TTY - '' - + optionalString cfg.enableSshSupport - "${gpgPkg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null"; + '' + optionalString cfg.enableSshSupport + "${gpgPkg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null"; # mimic `gpgconf` output for use in `systemd` unit definitions. # we cannot use `gpgconf` directly because it heavily depends on system @@ -22,7 +21,8 @@ let # https://github.com/gpg/gnupg/blob/c6702d77d936b3e9d91b34d8fdee9599ab94ee1b/common/homedir.c#L672-L681 gpgconf = dir: let - hash = substring 0 24 (hexStringToBase32 (builtins.hashString "sha1" homedir)); + hash = + substring 0 24 (hexStringToBase32 (builtins.hashString "sha1" homedir)); in if homedir == options.programs.gpg.homedir.default then "%t/gnupg/${dir}" else @@ -36,10 +36,18 @@ let splitChars = s: init (tail (splitString "" s)); base32Alphabet = splitChars "ybndrfg8ejkmcpqxot1uwisza345h769"; - hexToIntTable = listToAttrs (genList (x: { name = toLower (toHexString x); value = x; }) 16); - - initState = { ret = ""; buf = 0; bufBits = 0; }; - go = { ret, buf, bufBits }: hex: + hexToIntTable = listToAttrs (genList (x: { + name = toLower (toHexString x); + value = x; + }) 16); + + initState = { + ret = ""; + buf = 0; + bufBits = 0; + }; + go = { ret, buf, bufBits }: + hex: let buf' = buf * pow2 4 + hexToIntTable.${hex}; bufBits' = bufBits + 4; @@ -55,9 +63,7 @@ let }; in hexString: (foldl' go initState (splitChars hexString)).ret; -in - -{ +in { meta.maintainers = [ maintainers.rycee ]; options = { @@ -196,30 +202,21 @@ in config = mkIf cfg.enable (mkMerge [ { - home.file."${homedir}/gpg-agent.conf".text = concatStringsSep "\n" ( - optional (cfg.enableSshSupport) "enable-ssh-support" - ++ - optional (!cfg.grabKeyboardAndMouse) "no-grab" - ++ - optional (!cfg.enableScDaemon) "disable-scdaemon" - ++ - optional (cfg.defaultCacheTtl != null) + home.file."${homedir}/gpg-agent.conf".text = concatStringsSep "\n" + (optional (cfg.enableSshSupport) "enable-ssh-support" + ++ optional (!cfg.grabKeyboardAndMouse) "no-grab" + ++ optional (!cfg.enableScDaemon) "disable-scdaemon" + ++ optional (cfg.defaultCacheTtl != null) "default-cache-ttl ${toString cfg.defaultCacheTtl}" - ++ - optional (cfg.defaultCacheTtlSsh != null) + ++ optional (cfg.defaultCacheTtlSsh != null) "default-cache-ttl-ssh ${toString cfg.defaultCacheTtlSsh}" - ++ - optional (cfg.maxCacheTtl != null) + ++ optional (cfg.maxCacheTtl != null) "max-cache-ttl ${toString cfg.maxCacheTtl}" - ++ - optional (cfg.maxCacheTtlSsh != null) + ++ optional (cfg.maxCacheTtlSsh != null) "max-cache-ttl-ssh ${toString cfg.maxCacheTtlSsh}" - ++ - optional (cfg.pinentryFlavor != null) + ++ optional (cfg.pinentryFlavor != null) "pinentry-program ${pkgs.pinentry.${cfg.pinentryFlavor}}/bin/pinentry" - ++ - [ cfg.extraConfig ] - ); + ++ [ cfg.extraConfig ]); home.sessionVariablesExtra = optionalString cfg.enableSshSupport '' if [[ -z "$SSH_AUTH_SOCK" ]]; then @@ -236,7 +233,9 @@ in (mkIf (cfg.sshKeys != null) { # Trailing newlines are important - home.file."${homedir}/sshcontrol".text = concatMapStrings (s: "${s}\n") cfg.sshKeys; + home.file."${homedir}/sshcontrol".text = concatMapStrings (s: '' + ${s} + '') cfg.sshKeys; }) # The systemd units below are direct translations of the @@ -277,9 +276,7 @@ in DirectoryMode = "0700"; }; - Install = { - WantedBy = [ "sockets.target" ]; - }; + Install = { WantedBy = [ "sockets.target" ]; }; }; } @@ -287,7 +284,8 @@ in systemd.user.sockets.gpg-agent-ssh = { Unit = { Description = "GnuPG cryptographic agent (ssh-agent emulation)"; - Documentation = "man:gpg-agent(1) man:ssh-add(1) man:ssh-agent(1) man:ssh(1)"; + Documentation = + "man:gpg-agent(1) man:ssh-add(1) man:ssh-agent(1) man:ssh(1)"; }; Socket = { @@ -298,16 +296,15 @@ in DirectoryMode = "0700"; }; - Install = { - WantedBy = [ "sockets.target" ]; - }; + Install = { WantedBy = [ "sockets.target" ]; }; }; }) (mkIf cfg.enableExtraSocket { systemd.user.sockets.gpg-agent-extra = { Unit = { - Description = "GnuPG cryptographic agent and passphrase cache (restricted)"; + Description = + "GnuPG cryptographic agent and passphrase cache (restricted)"; Documentation = "man:gpg-agent(1) man:ssh(1)"; }; @@ -319,9 +316,7 @@ in DirectoryMode = "0700"; }; - Install = { - WantedBy = [ "sockets.target" ]; - }; + Install = { WantedBy = [ "sockets.target" ]; }; }; }) ]); diff --git a/infra/libkookie/home-manager/modules/services/mpd-discord-rpc.nix b/infra/libkookie/home-manager/modules/services/mpd-discord-rpc.nix new file mode 100644 index 00000000000..23cf1b5ec45 --- /dev/null +++ b/infra/libkookie/home-manager/modules/services/mpd-discord-rpc.nix @@ -0,0 +1,55 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.mpd-discord-rpc; + tomlFormat = pkgs.formats.toml { }; + configFile = tomlFormat.generate "config.toml" cfg.settings; +in { + meta.maintainers = [ maintainers.kranzes ]; + + options.services.mpd-discord-rpc = { + enable = mkEnableOption "the mpd-discord-rpc service"; + + settings = mkOption { + type = tomlFormat.type; + default = { }; + example = literalExpression '' + { + hosts = [ "localhost:6600" ]; + format = { + details = "$title"; + state = "On $album by $artist"; + }; + } + ''; + description = '' + Configuration included in config.toml. + For available options see + ''; + }; + + package = mkOption { + type = types.package; + default = pkgs.mpd-discord-rpc; + defaultText = literalExpression "pkgs.mpd-discord-rpc"; + description = "mpd-discord-rpc package to use."; + }; + }; + + config = mkIf cfg.enable { + xdg.configFile."discord-rpc/config.toml".source = configFile; + + systemd.user.services.mpd-discord-rpc = { + Unit = { + Description = "Discord Rich Presence for MPD"; + Documentation = "https://github.com/JakeStanger/mpd-discord-rpc"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.desktop" ]; + }; + Service.ExecStart = "${cfg.package}/bin/mpd-discord-rpc"; + Install.WantedBy = [ "graphical-session.target" ]; + }; + }; +} diff --git a/infra/libkookie/home-manager/modules/services/mpd.nix b/infra/libkookie/home-manager/modules/services/mpd.nix index 5800a18c15b..f71d96a447b 100644 --- a/infra/libkookie/home-manager/modules/services/mpd.nix +++ b/infra/libkookie/home-manager/modules/services/mpd.nix @@ -18,9 +18,9 @@ let sticker_file "${cfg.dataDir}/sticker.sql" ${optionalString (cfg.network.listenAddress != "any") - ''bind_to_address "${cfg.network.listenAddress}"''} + ''bind_to_address "${cfg.network.listenAddress}"''} ${optionalString (cfg.network.port != 6600) - ''port "${toString cfg.network.port}"''} + ''port "${toString cfg.network.port}"''} ${cfg.extraConfig} ''; @@ -54,7 +54,7 @@ in { type = with types; either path str; default = "${config.home.homeDirectory}/music"; defaultText = "$HOME/music"; - apply = toString; # Prevent copies to Nix store. + apply = toString; # Prevent copies to Nix store. description = '' The directory where mpd reads music from. ''; @@ -63,8 +63,8 @@ in { playlistDirectory = mkOption { type = types.path; default = "${cfg.dataDir}/playlists"; - defaultText = ''''${dataDir}/playlists''; - apply = toString; # Prevent copies to Nix store. + defaultText = "\${dataDir}/playlists"; + apply = toString; # Prevent copies to Nix store. description = '' The directory where mpd stores playlists. ''; @@ -89,7 +89,7 @@ in { type = types.path; default = "${config.xdg.dataHome}/${name}"; defaultText = "$XDG_DATA_HOME/mpd"; - apply = toString; # Prevent copies to Nix store. + apply = toString; # Prevent copies to Nix store. description = '' The directory where MPD stores its state, tag cache, playlists etc. @@ -101,7 +101,7 @@ in { type = types.bool; default = false; description = '' - Enable systemd socket activation. + Enable systemd socket activation. ''; }; @@ -128,7 +128,7 @@ in { dbFile = mkOption { type = types.nullOr types.str; default = "${cfg.dataDir}/tag_cache"; - defaultText = ''''${dataDir}/tag_cache''; + defaultText = "\${dataDir}/tag_cache"; description = '' The path to MPD's database. If set to null the parameter is omitted from the @@ -139,13 +139,11 @@ in { }; - ###### implementation config = mkIf cfg.enable { assertions = [ - (lib.hm.assertions.assertPlatform "services.mpd" pkgs - lib.platforms.linux) + (lib.hm.assertions.assertPlatform "services.mpd" pkgs lib.platforms.linux) ]; systemd.user.services.mpd = { @@ -162,25 +160,24 @@ in { Environment = "PATH=${config.home.profileDirectory}/bin"; ExecStart = "${cfg.package}/bin/mpd --no-daemon ${mpdConf}"; Type = "notify"; - ExecStartPre = ''${pkgs.bash}/bin/bash -c "${pkgs.coreutils}/bin/mkdir -p '${cfg.dataDir}' '${cfg.playlistDirectory}'"''; + ExecStartPre = '' + ${pkgs.bash}/bin/bash -c "${pkgs.coreutils}/bin/mkdir -p '${cfg.dataDir}' '${cfg.playlistDirectory}'"''; }; }; systemd.user.sockets.mpd = mkIf cfg.network.startWhenNeeded { Socket = { ListenStream = let - listen = - if cfg.network.listenAddress == "any" - then toString cfg.network.port - else "${cfg.network.listenAddress}:${toString cfg.network.port}"; + listen = if cfg.network.listenAddress == "any" then + toString cfg.network.port + else + "${cfg.network.listenAddress}:${toString cfg.network.port}"; in [ listen "%t/mpd/socket" ]; Backlog = 5; KeepAlive = true; }; - Install = { - WantedBy = [ "sockets.target" ]; - }; + Install = { WantedBy = [ "sockets.target" ]; }; }; }; diff --git a/infra/libkookie/home-manager/modules/services/picom.nix b/infra/libkookie/home-manager/modules/services/picom.nix index 280a2a21ed2..9ea052ec0fc 100644 --- a/infra/libkookie/home-manager/modules/services/picom.nix +++ b/infra/libkookie/home-manager/modules/services/picom.nix @@ -1,13 +1,14 @@ { config, lib, pkgs, ... }: -with lib; -with builtins; - let + inherit (builtins) toJSON toString; + inherit (lib) + concatStringsSep elemAt literalExpression mkEnableOption mkIf mkOption + mkRemovedOptionModule optional optionalAttrs optionalString types; cfg = config.services.picom; - configFile = pkgs.writeText "picom.conf" (optionalString cfg.fade '' + configFile = optionalString cfg.fade '' # fading fading = true; fade-delta = ${toString cfg.fadeDelta}; @@ -46,8 +47,7 @@ let # other options backend = ${toJSON cfg.backend}; vsync = ${toJSON cfg.vSync}; - refresh-rate = ${toString cfg.refreshRate}; - '' + cfg.extraOptions); + '' + cfg.extraOptions; in { @@ -250,15 +250,6 @@ in { ''; }; - refreshRate = mkOption { - type = types.int; - default = 0; - example = 60; - description = '' - Screen refresh rate (0 = automatically detect). - ''; - }; - package = mkOption { type = types.package; default = pkgs.picom; @@ -270,7 +261,7 @@ in { }; extraOptions = mkOption { - type = types.str; + type = types.lines; default = ""; example = '' unredir-if-possible = true; @@ -282,6 +273,11 @@ in { }; }; + imports = [ + (mkRemovedOptionModule [ "services" "picom" "refreshRate" ] + "The option `refresh-rate` has been deprecated by upstream.") + ]; + config = mkIf cfg.enable { assertions = [ (lib.hm.assertions.assertPlatform "services.picom" pkgs @@ -290,6 +286,8 @@ in { home.packages = [ cfg.package ]; + xdg.configFile."picom/picom.conf".text = configFile; + systemd.user.services.picom = { Unit = { Description = "Picom X11 compositor"; @@ -299,17 +297,13 @@ in { Install = { WantedBy = [ "graphical-session.target" ]; }; - Service = let - experimentalBackendsFlag = - if cfg.experimentalBackends then " --experimental-backends" else ""; - in { - ExecStart = "${cfg.package}/bin/picom --config ${configFile}" - + experimentalBackendsFlag; + Service = { + ExecStart = concatStringsSep " " ([ + "${cfg.package}/bin/picom" + "--config ${config.xdg.configFile."picom/picom.conf".source}" + ] ++ optional cfg.experimentalBackends "--experimental-backends"); Restart = "always"; RestartSec = 3; - } // optionalAttrs (cfg.backend == "glx") { - # Temporarily fixes corrupt colours with Mesa 18. - Environment = [ "allow_rgb10_configs=false" ]; }; }; }; diff --git a/infra/libkookie/home-manager/modules/services/screen-locker.nix b/infra/libkookie/home-manager/modules/services/screen-locker.nix index 34794d1c142..3ea84ebedb7 100644 --- a/infra/libkookie/home-manager/modules/services/screen-locker.nix +++ b/infra/libkookie/home-manager/modules/services/screen-locker.nix @@ -94,6 +94,16 @@ in { Extra command-line arguments to pass to xss-lock. ''; }; + + screensaverCycle = mkOption { + type = types.int; + default = 600; + description = '' + X server's screensaver cycle value expresed as seconds. + This will be used with xset to configure + the cycle along with timeout. + ''; + }; }; }; @@ -122,7 +132,9 @@ in { } (mkIf (!cfg.xautolock.enable) { systemd.user.services.xss-lock.Service.ExecStartPre = - "${pkgs.xorg.xset}/bin/xset s ${toString (cfg.inactiveInterval * 60)}"; + "${pkgs.xorg.xset}/bin/xset s ${toString (cfg.inactiveInterval * 60)} ${ + toString cfg.xss-lock.screensaverCycle + }"; }) (mkIf cfg.xautolock.enable { systemd.user.services.xautolock-session = { diff --git a/infra/libkookie/home-manager/modules/services/window-managers/bspwm/default.nix b/infra/libkookie/home-manager/modules/services/window-managers/bspwm/default.nix index b14ffccd948..f20c0122110 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/bspwm/default.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/bspwm/default.nix @@ -10,7 +10,19 @@ let builtins.replaceStrings upperChars (map (c: "_${c}") lowerChars); formatMonitor = monitor: desktops: - "bspc monitor ${escapeShellArg monitor} -d ${escapeShellArgs desktops}"; + let + resetDesktops = + "bspc monitor ${escapeShellArg monitor} -d ${escapeShellArgs desktops}"; + defaultDesktopName = + "Desktop"; # https://github.com/baskerville/bspwm/blob/master/src/desktop.h + in if cfg.alwaysResetDesktops then + resetDesktops + else '' + if [[ $(bspc query --desktops --names --monitor ${ + escapeShellArg monitor + }) == ${defaultDesktopName} ]]; then + ${resetDesktops} + fi''; formatValue = v: if isList v then diff --git a/infra/libkookie/home-manager/modules/services/window-managers/bspwm/options.nix b/infra/libkookie/home-manager/modules/services/window-managers/bspwm/options.nix index 60a06c5a05a..57a1d874ad4 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/bspwm/options.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/bspwm/options.nix @@ -185,6 +185,19 @@ in { example = { "HDMI-0" = [ "web" "terminal" "III" "IV" ]; }; }; + alwaysResetDesktops = mkOption { + type = types.bool; + default = true; + description = '' + If set to true, desktops configured in will be reset + every time the config is run. + + If set to false, desktops will only be configured the first time the config is run. + This is useful if you want to dynamically add desktops and you don't want them to be destroyed if you + re-run bspwmrc. + ''; + }; + rules = mkOption { type = types.attrsOf rule; default = { }; diff --git a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/i3.nix b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/i3.nix index 8d90c8fb853..16e82d1638d 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/i3.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/i3.nix @@ -134,7 +134,7 @@ let }; commonFunctions = import ./lib/functions.nix { - inherit cfg lib; + inherit config cfg lib; moduleName = "i3"; }; @@ -143,53 +143,49 @@ let floatingCriteriaStr windowCommandsStr colorSetStr windowBorderString fontConfigStr keybindingDefaultWorkspace keybindingsRest workspaceOutputStr; - startupEntryStr = { command, always, notification, workspace, ... }: '' - ${if always then "exec_always" else "exec"} ${ - if (notification && workspace == null) then "" else "--no-startup-id" - } ${ - if (workspace == null) then + startupEntryStr = { command, always, notification, workspace, ... }: + concatStringsSep " " [ + (if always then "exec_always" else "exec") + (if (notification && workspace == null) then "" else "--no-startup-id") + (if (workspace == null) then command else - "i3-msg 'workspace ${workspace}; exec ${command}'" - } - ''; - - configFile = pkgs.writeText "i3.conf" ((if cfg.config != null then - with cfg.config; '' - ${fontConfigStr fonts} - floating_modifier ${floating.modifier} - ${windowBorderString window floating} - hide_edge_borders ${window.hideEdgeBorders} - force_focus_wrapping ${if focus.forceWrapping then "yes" else "no"} - focus_follows_mouse ${if focus.followMouse then "yes" else "no"} - focus_on_window_activation ${focus.newWindow} - mouse_warping ${if focus.mouseWarping then "output" else "none"} - workspace_layout ${workspaceLayout} - workspace_auto_back_and_forth ${ - if workspaceAutoBackAndForth then "yes" else "no" - } - - client.focused ${colorSetStr colors.focused} - client.focused_inactive ${colorSetStr colors.focusedInactive} - client.unfocused ${colorSetStr colors.unfocused} - client.urgent ${colorSetStr colors.urgent} - client.placeholder ${colorSetStr colors.placeholder} - client.background ${colors.background} - - ${keybindingsStr { keybindings = keybindingDefaultWorkspace; }} - ${keybindingsStr { keybindings = keybindingsRest; }} - ${keycodebindingsStr keycodebindings} - ${concatStringsSep "\n" (mapAttrsToList (modeStr false) modes)} - ${concatStringsSep "\n" (mapAttrsToList assignStr assigns)} - ${concatStringsSep "\n" (map barStr bars)} - ${optionalString (gaps != null) gapsStr} - ${concatStringsSep "\n" (map floatingCriteriaStr floating.criteria)} - ${concatStringsSep "\n" (map windowCommandsStr window.commands)} - ${concatStringsSep "\n" (map startupEntryStr startup)} - ${concatStringsSep "\n" (map workspaceOutputStr workspaceOutputAssign)} - '' - else - "") + "\n" + cfg.extraConfig); + "i3-msg 'workspace ${workspace}; exec ${command}'") + ]; + + configFile = pkgs.writeText "i3.conf" (concatStringsSep "\n" + ((if cfg.config != null then + with cfg.config; + ([ + (fontConfigStr fonts) + "floating_modifier ${floating.modifier}" + (windowBorderString window floating) + "hide_edge_borders ${window.hideEdgeBorders}" + "force_focus_wrapping ${lib.hm.booleans.yesNo focus.forceWrapping}" + "focus_follows_mouse ${lib.hm.booleans.yesNo focus.followMouse}" + "focus_on_window_activation ${focus.newWindow}" + "mouse_warping ${if focus.mouseWarping then "output" else "none"}" + "workspace_layout ${workspaceLayout}" + "workspace_auto_back_and_forth ${ + lib.hm.booleans.yesNo workspaceAutoBackAndForth + }" + "client.focused ${colorSetStr colors.focused}" + "client.focused_inactive ${colorSetStr colors.focusedInactive}" + "client.unfocused ${colorSetStr colors.unfocused}" + "client.urgent ${colorSetStr colors.urgent}" + "client.placeholder ${colorSetStr colors.placeholder}" + "client.background ${colors.background}" + (keybindingsStr { keybindings = keybindingDefaultWorkspace; }) + (keybindingsStr { keybindings = keybindingsRest; }) + (keycodebindingsStr keycodebindings) + ] ++ mapAttrsToList (modeStr false) modes + ++ mapAttrsToList assignStr assigns ++ map barStr bars + ++ optional (gaps != null) gapsStr + ++ map floatingCriteriaStr floating.criteria + ++ map windowCommandsStr window.commands ++ map startupEntryStr startup + ++ map workspaceOutputStr workspaceOutputAssign) + else + [ ]) ++ [ cfg.extraConfig ])); # Validates the i3 configuration checkI3Config = @@ -207,7 +203,7 @@ let ''; in { - meta.maintainers = with maintainers; [ sumnerevans ]; + meta.maintainers = with maintainers; [ sumnerevans sebtm ]; options = { xsession.windowManager.i3 = { diff --git a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/functions.nix b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/functions.nix index 62d72638d90..c6a6ada1564 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/functions.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/functions.nix @@ -1,4 +1,4 @@ -{ cfg, lib, moduleName }: +{ cfg, config, lib, moduleName }: with lib; @@ -20,9 +20,9 @@ rec { cfg.config.defaultWorkspace == null || v != cfg.config.defaultWorkspace) cfg.config.keybindings; - keybindingsStr = { keybindings, bindsymArgs ? "" }: + keybindingsStr = { keybindings, bindsymArgs ? "", indent ? "" }: concatStringsSep "\n" (mapAttrsToList (keycomb: action: - optionalString (action != null) "bindsym ${ + optionalString (action != null) "${indent}bindsym ${ lib.optionalString (bindsymArgs != "") "${bindsymArgs} " }${keycomb} ${action}") keybindings); @@ -46,6 +46,7 @@ rec { ${keybindingsStr { inherit keybindings; bindsymArgs = lib.optionalString bindkeysToCode "--to-code"; + indent = " "; }} } ''; @@ -73,89 +74,76 @@ rec { let colorsNotNull = lib.filterAttrs (n: v: v != null) colors != { }; in '' bar { - ${optionalString (id != null) "id ${id}"} - ${fontConfigStr fonts} - ${optionalString (mode != null) "mode ${mode}"} - ${optionalString (hiddenState != null) "hidden_state ${hiddenState}"} - ${optionalString (position != null) "position ${position}"} ${ - optionalString (statusCommand != null) - "status_command ${statusCommand}" + concatStringsSep "\n" (indent (lists.subtractLists [ "" null ] + (flatten [ + (optionalString (id != null) "id ${id}") + (fontConfigStr fonts) + (optionalString (mode != null) "mode ${mode}") + (optionalString (hiddenState != null) + "hidden_state ${hiddenState}") + (optionalString (position != null) "position ${position}") + (optionalString (statusCommand != null) + "status_command ${statusCommand}") + "${moduleName}bar_command ${command}" + (optionalString (workspaceButtons != null) + "workspace_buttons ${lib.hm.booleans.yesNo workspaceButtons}") + (optionalString (workspaceNumbers != null) + "strip_workspace_numbers ${ + lib.hm.booleans.yesNo (!workspaceNumbers) + }") + (optionalString (trayOutput != null) "tray_output ${trayOutput}") + (optionals colorsNotNull (indent + (lists.subtractLists [ "" null ] [ + "colors {" + (optionalString (colors.background != null) + "background ${colors.background}") + (optionalString (colors.statusline != null) + "statusline ${colors.statusline}") + (optionalString (colors.separator != null) + "separator ${colors.separator}") + (optionalString (colors.focusedBackground != null) + "focused_background ${colors.focusedBackground}") + (optionalString (colors.focusedStatusline != null) + "focused_statusline ${colors.focusedStatusline}") + (optionalString (colors.focusedSeparator != null) + "focused_separator ${colors.focusedSeparator}") + (optionalString (colors.focusedWorkspace != null) + "focused_workspace ${ + barColorSetStr colors.focusedWorkspace + }") + (optionalString (colors.activeWorkspace != null) + "active_workspace ${barColorSetStr colors.activeWorkspace}") + (optionalString (colors.inactiveWorkspace != null) + "inactive_workspace ${ + barColorSetStr colors.inactiveWorkspace + }") + (optionalString (colors.urgentWorkspace != null) + "urgent_workspace ${barColorSetStr colors.urgentWorkspace}") + (optionalString (colors.bindingMode != null) + "binding_mode ${barColorSetStr colors.bindingMode}") + "}" + ]) { })) + extraConfig + ])) { }) } - ${moduleName}bar_command ${command} - ${ - optionalString (workspaceButtons != null) - "workspace_buttons ${if workspaceButtons then "yes" else "no"}" - } - ${ - optionalString (workspaceNumbers != null) - "strip_workspace_numbers ${if !workspaceNumbers then "yes" else "no"}" - } - ${optionalString (trayOutput != null) "tray_output ${trayOutput}"} - ${optionalString colorsNotNull "colors {"} - ${ - optionalString (colors.background != null) - "background ${colors.background}" - } - ${ - optionalString (colors.statusline != null) - "statusline ${colors.statusline}" - } - ${ - optionalString (colors.separator != null) - "separator ${colors.separator}" - } - ${ - optionalString (colors.focusedBackground != null) - "focused_background ${colors.focusedBackground}" - } - ${ - optionalString (colors.focusedStatusline != null) - "focused_statusline ${colors.focusedStatusline}" - } - ${ - optionalString (colors.focusedSeparator != null) - "focused_separator ${colors.focusedSeparator}" - } - ${ - optionalString (colors.focusedWorkspace != null) - "focused_workspace ${barColorSetStr colors.focusedWorkspace}" - } - ${ - optionalString (colors.activeWorkspace != null) - "active_workspace ${barColorSetStr colors.activeWorkspace}" - } - ${ - optionalString (colors.inactiveWorkspace != null) - "inactive_workspace ${barColorSetStr colors.inactiveWorkspace}" - } - ${ - optionalString (colors.urgentWorkspace != null) - "urgent_workspace ${barColorSetStr colors.urgentWorkspace}" - } - ${ - optionalString (colors.bindingMode != null) - "binding_mode ${barColorSetStr colors.bindingMode}" - } - ${optionalString colorsNotNull "}"} - ${extraConfig} } ''; - gapsStr = with cfg.config.gaps; '' - ${optionalString (inner != null) "gaps inner ${toString inner}"} - ${optionalString (outer != null) "gaps outer ${toString outer}"} - ${optionalString (horizontal != null) - "gaps horizontal ${toString horizontal}"} - ${optionalString (vertical != null) "gaps vertical ${toString vertical}"} - ${optionalString (top != null) "gaps top ${toString top}"} - ${optionalString (bottom != null) "gaps bottom ${toString bottom}"} - ${optionalString (left != null) "gaps left ${toString left}"} - ${optionalString (right != null) "gaps right ${toString right}"} - - ${optionalString smartGaps "smart_gaps on"} - ${optionalString (smartBorders != "off") "smart_borders ${smartBorders}"} - ''; + gapsStr = with cfg.config.gaps; + concatStringsSep "\n" (lists.subtractLists [ "" null ] [ + (optionalString (inner != null) "gaps inner ${toString inner}") + (optionalString (outer != null) "gaps outer ${toString outer}") + (optionalString (horizontal != null) + "gaps horizontal ${toString horizontal}") + (optionalString (vertical != null) "gaps vertical ${toString vertical}") + (optionalString (top != null) "gaps top ${toString top}") + (optionalString (bottom != null) "gaps bottom ${toString bottom}") + (optionalString (left != null) "gaps left ${toString left}") + (optionalString (right != null) "gaps right ${toString right}") + (optionalString smartGaps "smart_gaps on") + (optionalString (smartBorders != "off") "smart_borders ${smartBorders}") + ]); windowBorderString = window: floating: let @@ -172,4 +160,14 @@ rec { "for_window ${criteriaStr criteria} ${command}"; workspaceOutputStr = item: ''workspace "${item.workspace}" output ${item.output}''; + + indent = list: + { includesWrapper ? true, level ? 1 }: + let prefix = concatStringsSep "" (lib.genList (x: " ") (level * 2)); + + in (lib.imap1 (i: v: + "${if includesWrapper && (i == 1 || i == (lib.length list)) then + v + else + "${prefix}${v}"}") list); } diff --git a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/options.nix b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/options.nix index c4d1535a7cd..7027e21d071 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/options.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/lib/options.nix @@ -494,10 +494,7 @@ in { default = if isSway then "yes" else true; description = "Whether focus should follow the mouse."; apply = val: - if (isSway && isBool val) then - (if val then "yes" else "no") - else - val; + if (isSway && isBool val) then (lib.hm.booleans.yesNo val) else val; }; forceWrapping = mkOption { diff --git a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/sway.nix b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/sway.nix index 72995908f5e..178ceacd693 100644 --- a/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/sway.nix +++ b/infra/libkookie/home-manager/modules/services/window-managers/i3-sway/sway.nix @@ -239,7 +239,7 @@ let }; commonFunctions = import ./lib/functions.nix { - inherit cfg lib; + inherit config cfg lib; moduleName = "sway"; }; @@ -262,42 +262,40 @@ let outputStr = moduleStr "output"; seatStr = moduleStr "seat"; - configFile = pkgs.writeText "sway.conf" ((if cfg.config != null then - with cfg.config; '' - ${fontConfigStr fonts} - floating_modifier ${floating.modifier} - ${windowBorderString window floating} - hide_edge_borders ${window.hideEdgeBorders} - focus_wrapping ${if focus.forceWrapping then "yes" else "no"} - focus_follows_mouse ${focus.followMouse} - focus_on_window_activation ${focus.newWindow} - mouse_warping ${if focus.mouseWarping then "output" else "none"} - workspace_layout ${workspaceLayout} - workspace_auto_back_and_forth ${ - if workspaceAutoBackAndForth then "yes" else "no" - } - - client.focused ${colorSetStr colors.focused} - client.focused_inactive ${colorSetStr colors.focusedInactive} - client.unfocused ${colorSetStr colors.unfocused} - client.urgent ${colorSetStr colors.urgent} - client.placeholder ${colorSetStr colors.placeholder} - client.background ${colors.background} - - ${keybindingsStr { - keybindings = keybindingDefaultWorkspace; - bindsymArgs = - lib.optionalString (cfg.config.bindkeysToCode) "--to-code"; - }} - ${keybindingsStr { - keybindings = keybindingsRest; - bindsymArgs = - lib.optionalString (cfg.config.bindkeysToCode) "--to-code"; - }} - ${keycodebindingsStr keycodebindings} - ${concatStringsSep "\n" ( - # Append all of the lists together to avoid unnecessary whitespace. - mapAttrsToList inputStr input # inputs + configFile = pkgs.writeText "sway.conf" (concatStringsSep "\n" + ((if cfg.config != null then + with cfg.config; + ([ + (fontConfigStr fonts) + "floating_modifier ${floating.modifier}" + (windowBorderString window floating) + "hide_edge_borders ${window.hideEdgeBorders}" + "focus_wrapping ${lib.hm.booleans.yesNo focus.forceWrapping}" + "focus_follows_mouse ${focus.followMouse}" + "focus_on_window_activation ${focus.newWindow}" + "mouse_warping ${if focus.mouseWarping then "output" else "none"}" + "workspace_layout ${workspaceLayout}" + "workspace_auto_back_and_forth ${ + lib.hm.booleans.yesNo workspaceAutoBackAndForth + }" + "client.focused ${colorSetStr colors.focused}" + "client.focused_inactive ${colorSetStr colors.focusedInactive}" + "client.unfocused ${colorSetStr colors.unfocused}" + "client.urgent ${colorSetStr colors.urgent}" + "client.placeholder ${colorSetStr colors.placeholder}" + "client.background ${colors.background}" + (keybindingsStr { + keybindings = keybindingDefaultWorkspace; + bindsymArgs = + lib.optionalString (cfg.config.bindkeysToCode) "--to-code"; + }) + (keybindingsStr { + keybindings = keybindingsRest; + bindsymArgs = + lib.optionalString (cfg.config.bindkeysToCode) "--to-code"; + }) + (keycodebindingsStr keycodebindings) + ] ++ mapAttrsToList inputStr input ++ mapAttrsToList outputStr output # outputs ++ mapAttrsToList seatStr seat # seats ++ mapAttrsToList (modeStr cfg.config.bindkeysToCode) modes # modes @@ -308,13 +306,11 @@ let ++ map windowCommandsStr window.commands # window commands ++ map startupEntryStr startup # startup ++ map workspaceOutputStr workspaceOutputAssign # custom mapping - )} - '' - else - "") + (concatStringsSep "\n" ((optional cfg.systemdIntegration '' - exec "systemctl --user import-environment; systemctl --user start sway-session.target"'') - ++ (optional (!cfg.xwayland) "xwayland disable") - ++ [ cfg.extraConfig ]))); + ) + else + [ ]) ++ (optional cfg.systemdIntegration '' + exec "systemctl --user import-environment; systemctl --user start sway-session.target"'') + ++ (optional (!cfg.xwayland) "xwayland disable") ++ [ cfg.extraConfig ])); defaultSwayPackage = pkgs.sway.override { extraSessionCommands = cfg.extraSessionCommands; @@ -324,7 +320,7 @@ let }; in { - meta.maintainers = with maintainers; [ alexarice sumnerevans ]; + meta.maintainers = with maintainers; [ alexarice sumnerevans sebtm ]; options.wayland.windowManager.sway = { enable = mkEnableOption "sway wayland compositor"; @@ -438,8 +434,8 @@ in { xdg.configFile."sway/config" = { source = configFile; onChange = '' - swaySocket=''${XDG_RUNTIME_DIR:-/run/user/$UID}/sway-ipc.$UID.$(${pkgs.procps}/bin/pgrep -x sway || true).sock - if [ -S $swaySocket ]; then + swaySocket="''${XDG_RUNTIME_DIR:-/run/user/$UID}/sway-ipc.$UID.$(${pkgs.procps}/bin/pgrep --uid $UID -x sway || true).sock" + if [ -S "$swaySocket" ]; then ${pkgs.sway}/bin/swaymsg -s $swaySocket reload fi ''; @@ -454,6 +450,13 @@ in { After = [ "graphical-session-pre.target" ]; }; }; + + systemd.user.targets.tray = { + Unit = { + Description = "Home Manager System Tray"; + Requires = [ "graphical-session-pre.target" ]; + }; + }; } ]); } diff --git a/infra/libkookie/home-manager/modules/services/xscreensaver.nix b/infra/libkookie/home-manager/modules/services/xscreensaver.nix index 3c0661e8983..3ae92658f03 100644 --- a/infra/libkookie/home-manager/modules/services/xscreensaver.nix +++ b/infra/libkookie/home-manager/modules/services/xscreensaver.nix @@ -53,6 +53,7 @@ in { Service = { ExecStart = "${pkgs.xscreensaver}/bin/xscreensaver -no-splash"; + Environment = "PATH=${makeBinPath [ pkgs.xscreensaver ]}"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; diff --git a/infra/libkookie/home-manager/modules/systemd.nix b/infra/libkookie/home-manager/modules/systemd.nix index cd5b30ed49e..0be586d7c63 100644 --- a/infra/libkookie/home-manager/modules/systemd.nix +++ b/infra/libkookie/home-manager/modules/systemd.nix @@ -41,7 +41,7 @@ let source = pkgs.writeTextFile { name = pathSafeName; text = toSystemdIni serviceCfg; - destination = lib.escapeShellArg "/${filename}"; + destination = "/${filename}"; } + "/${filename}"; wantedBy = target: { diff --git a/infra/libkookie/home-manager/modules/targets/generic-linux.nix b/infra/libkookie/home-manager/modules/targets/generic-linux.nix index 9132d8898b0..aad74afb6fb 100644 --- a/infra/libkookie/home-manager/modules/targets/generic-linux.nix +++ b/infra/libkookie/home-manager/modules/targets/generic-linux.nix @@ -43,6 +43,17 @@ in { "/var/lib/snapd/desktop" ]; + # We need to append system-wide FHS directories due to the default prefix + # resolving to the Nix store. + # https://github.com/nix-community/home-manager/pull/2891#issuecomment-1101064521 + home.sessionVariables = { + XCURSOR_PATH = "$XCURSOR_PATH\${XCURSOR_PATH:+:}" + concatStringsSep ":" [ + "${config.home.profileDirectory}/share/icons" + "/usr/share/icons" + "/usr/share/pixmaps" + ]; + }; + home.sessionVariablesExtra = '' . "${pkgs.nix}/etc/profile.d/nix.sh" diff --git a/infra/libkookie/home-manager/modules/xcursor.nix b/infra/libkookie/home-manager/modules/xcursor.nix index 3ec2a354db7..a91f79ee5c9 100644 --- a/infra/libkookie/home-manager/modules/xcursor.nix +++ b/infra/libkookie/home-manager/modules/xcursor.nix @@ -36,6 +36,10 @@ let }; }; + cursorPath = "${cfg.package}/share/icons/${escapeShellArg cfg.name}/cursors/${ + escapeShellArg cfg.defaultCursor + }"; + in { meta.maintainers = [ maintainers.league ]; @@ -63,9 +67,7 @@ in { home.packages = [ cfg.package ]; xsession.initExtra = '' - ${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cfg.package}/share/icons/${cfg.name}/cursors/${cfg.defaultCursor} ${ - toString cfg.size - } + ${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cursorPath} ${toString cfg.size} ''; xresources.properties = { @@ -73,15 +75,7 @@ in { "Xcursor.size" = cfg.size; }; - gtk.gtk2.extraConfig = '' - gtk-cursor-theme-name="${cfg.name}" - gtk-cursor-theme-size=${toString cfg.size} - ''; - - gtk.gtk3.extraConfig = { - "gtk-cursor-theme-name" = cfg.name; - "gtk-cursor-theme-size" = cfg.size; - }; + gtk.cursorTheme = mkDefault { inherit (cfg) package name size; }; # Set name in icons theme, for compatibility with AwesomeWM etc. See: # https://github.com/nix-community/home-manager/issues/2081 diff --git a/infra/libkookie/home-manager/nix-darwin/default.nix b/infra/libkookie/home-manager/nix-darwin/default.nix index 010d4f574a9..57f7559a317 100644 --- a/infra/libkookie/home-manager/nix-darwin/default.nix +++ b/infra/libkookie/home-manager/nix-darwin/default.nix @@ -13,7 +13,7 @@ let lib = extendedLib; darwinConfig = config; osConfig = config; - modulesPath = ../modules; + modulesPath = builtins.toString ../modules; } // cfg.extraSpecialArgs; modules = [ ({ name, ... }: { @@ -134,7 +134,7 @@ in system.activationScripts.postActivation.text = concatStringsSep "\n" (mapAttrsToList (username: usercfg: '' echo Activating home-manager configuration for ${username} - sudo -u ${username} -i ${pkgs.writeShellScript "activation-${username}" '' + sudo -u ${username} -s --set-home ${pkgs.writeShellScript "activation-${username}" '' ${lib.optionalString (cfg.backupFileExtension != null) "export HOME_MANAGER_BACKUP_EXT=${lib.escapeShellArg cfg.backupFileExtension}"} ${lib.optionalString cfg.verbose "export VERBOSE=1"} diff --git a/infra/libkookie/home-manager/nixos/default.nix b/infra/libkookie/home-manager/nixos/default.nix index a94ad1422bf..766ce76f9cf 100644 --- a/infra/libkookie/home-manager/nixos/default.nix +++ b/infra/libkookie/home-manager/nixos/default.nix @@ -13,7 +13,7 @@ let lib = extendedLib; nixosConfig = config; osConfig = config; - modulesPath = ../modules; + modulesPath = builtins.toString ../modules; } // cfg.extraSpecialArgs; modules = [ ({ name, ... }: { diff --git a/infra/libkookie/home-manager/overlay.nix b/infra/libkookie/home-manager/overlay.nix index 35136cc8556..78fcb60ce3c 100644 --- a/infra/libkookie/home-manager/overlay.nix +++ b/infra/libkookie/home-manager/overlay.nix @@ -1,3 +1,3 @@ -self: super: { - home-manager = super.callPackage ./home-manager { path = toString ./.; }; +final: prev: { + home-manager = prev.callPackage ./home-manager { path = toString ./.; }; } diff --git a/infra/libkookie/home-manager/tests/default.nix b/infra/libkookie/home-manager/tests/default.nix index 73e99639b3c..03a86aec768 100644 --- a/infra/libkookie/home-manager/tests/default.nix +++ b/infra/libkookie/home-manager/tests/default.nix @@ -7,8 +7,8 @@ let nmt = pkgs.fetchFromGitLab { owner = "rycee"; repo = "nmt"; - rev = "89924d8e6e0fcf866a11324d32c6bcaa89cda506"; - sha256 = "02wzrbmpdpgig58a1rhz8sb0p2rvbapnlcmhi4d4bi8w9md6pmdl"; + rev = "d83601002c99b78c89ea80e5e6ba21addcfe12ae"; + sha256 = "1xzwwxygzs1cmysg97hzd285r7n1g1lwx5y1ar68gwq07a1rczmv"; }; modules = import ../modules/modules.nix { @@ -45,6 +45,7 @@ import nmt { ./modules/files ./modules/home-environment ./modules/misc/fontconfig + ./modules/misc/nix ./modules/programs/alacritty ./modules/programs/alot ./modules/programs/aria2 @@ -76,6 +77,7 @@ import nmt { ./modules/programs/man ./modules/programs/mbsync ./modules/programs/mpv + ./modules/programs/mu ./modules/programs/ncmpcpp ./modules/programs/ne ./modules/programs/neomutt @@ -86,6 +88,7 @@ import nmt { ./modules/programs/pandoc ./modules/programs/pet ./modules/programs/powerline-go + ./modules/programs/pubs ./modules/programs/qutebrowser ./modules/programs/readline ./modules/programs/sagemath @@ -104,6 +107,7 @@ import nmt { ./modules/programs/zsh ./modules/xresources ] ++ lib.optionals isDarwin [ + ./modules/launchd ./modules/targets-darwin ] ++ lib.optionals isLinux [ ./modules/config/i18n @@ -137,17 +141,21 @@ import nmt { ./modules/services/devilspie2 ./modules/services/dropbox ./modules/services/emacs + ./modules/services/espanso ./modules/services/flameshot ./modules/services/fluidsynth ./modules/services/fnott + ./modules/services/fusuma ./modules/services/git-sync ./modules/services/gpg-agent ./modules/services/gromit-mpx ./modules/services/home-manager-auto-upgrade ./modules/services/kanshi ./modules/services/lieer + ./modules/services/mpd ./modules/services/pantalaimon ./modules/services/pbgopy + ./modules/services/picom ./modules/services/playerctld ./modules/services/polybar ./modules/services/redshift-gammastep diff --git a/infra/libkookie/home-manager/tests/lib/types/dag-merge.nix b/infra/libkookie/home-manager/tests/lib/types/dag-merge.nix index 5e361cd7e7f..0b41ec8a0c4 100644 --- a/infra/libkookie/home-manager/tests/lib/types/dag-merge.nix +++ b/infra/libkookie/home-manager/tests/lib/types/dag-merge.nix @@ -1,7 +1,7 @@ { config, lib, pkgs, ... }: let - inherit (lib) concatStringsSep hm mkMerge mkOption types; + inherit (lib) concatStringsSep hm mkIf mkMerge mkOption types; dag = lib.hm.dag; @@ -14,10 +14,14 @@ in { options.tested.dag = mkOption { type = hm.types.dagOf types.str; }; config = { - tested = mkMerge [ - { dag.after = "after"; } - { dag.before = dag.entryBefore [ "after" ] "before"; } - { dag.between = dag.entryBetween [ "after" ] [ "before" ] "between"; } + tested.dag = mkMerge [ + { never = mkIf false "never"; } + { after = mkMerge [ "after" (mkIf false "neither") ]; } + { before = dag.entryBefore [ "after" ] (mkIf true "before"); } + { + between = + mkIf true (dag.entryBetween [ "after" ] [ "before" ] "between"); + } ]; home.file."result.txt".text = result; diff --git a/infra/libkookie/home-manager/tests/modules/home-environment/session-variables.nix b/infra/libkookie/home-manager/tests/modules/home-environment/session-variables.nix index eae7830f355..08c988d2bbe 100644 --- a/infra/libkookie/home-manager/tests/modules/home-environment/session-variables.nix +++ b/infra/libkookie/home-manager/tests/modules/home-environment/session-variables.nix @@ -31,7 +31,8 @@ let export XDG_STATE_HOME="/home/hm-user/.local/state" ''; - expected = pkgs.writeText "expected" (if isDarwin then darwinExpected else linuxExpected); + expected = pkgs.writeText "expected" + (if isDarwin then darwinExpected else linuxExpected); in { config = { diff --git a/infra/libkookie/home-manager/tests/modules/launchd/agents.nix b/infra/libkookie/home-manager/tests/modules/launchd/agents.nix new file mode 100644 index 00000000000..cbcff6b5a27 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/launchd/agents.nix @@ -0,0 +1,25 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + launchd.agents."test-service" = { + enable = true; + config = { + ProgramArguments = [ "/some/command" "--with-arguments" "foo" ]; + KeepAlive = { + Crashed = true; + SuccessfulExit = false; + }; + ProcessType = "Background"; + }; + }; + + nmt.script = '' + serviceFile=LaunchAgents/org.nix-community.home.test-service.plist + assertFileExists $serviceFile + assertFileContent $serviceFile ${./expected-agent.plist} + ''; + }; +} diff --git a/infra/libkookie/home-manager/tests/modules/launchd/default.nix b/infra/libkookie/home-manager/tests/modules/launchd/default.nix new file mode 100644 index 00000000000..09549ee7b31 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/launchd/default.nix @@ -0,0 +1 @@ +{ launchd-agents = ./agents.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/launchd/expected-agent.plist b/infra/libkookie/home-manager/tests/modules/launchd/expected-agent.plist new file mode 100644 index 00000000000..c56ad4da44f --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/launchd/expected-agent.plist @@ -0,0 +1,23 @@ + + + + + KeepAlive + + Crashed + + SuccessfulExit + + + Label + org.nix-community.home.test-service + ProcessType + Background + ProgramArguments + + /some/command + --with-arguments + foo + + + \ No newline at end of file diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/default.nix b/infra/libkookie/home-manager/tests/modules/misc/gtk/default.nix index 0dbae61ebb4..a812d4ad32d 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/gtk/default.nix +++ b/infra/libkookie/home-manager/tests/modules/misc/gtk/default.nix @@ -1,5 +1,6 @@ { gtk2-basic-config = ./gtk2-basic-config.nix; gtk2-config-file-location = ./gtk2-config-file-location.nix; + gtk3-basic-settings = ./gtk3-basic-settings.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk-basic-config-expected.conf b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk-basic-config-expected.conf deleted file mode 100644 index 2e4c1c368e0..00000000000 --- a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk-basic-config-expected.conf +++ /dev/null @@ -1 +0,0 @@ -gtk-can-change-accels = 1 \ No newline at end of file diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config-expected.conf b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config-expected.conf new file mode 100644 index 00000000000..4096a84775f --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config-expected.conf @@ -0,0 +1,2 @@ +gtk-theme-name = "Adwaita" +gtk-can-change-accels = 1 diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config.nix b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config.nix index a49cc44e7e9..5671ac93e68 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config.nix +++ b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk2-basic-config.nix @@ -6,6 +6,7 @@ with lib; config = { gtk = { enable = true; + theme.name = "Adwaita"; gtk2.extraConfig = "gtk-can-change-accels = 1"; }; @@ -13,9 +14,10 @@ with lib; nmt.script = '' assertFileExists home-files/.gtkrc-2.0 - assertFileContent home-files/.gtkrc-2.0 ${ - ./gtk-basic-config-expected.conf - } + + assertFileContent home-files/.gtkrc-2.0 \ + ${./gtk2-basic-config-expected.conf} + assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \ 'GTK2_RC_FILES=.*/.gtkrc-2.0' ''; diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings-expected.ini b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings-expected.ini new file mode 100644 index 00000000000..f1218b06932 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings-expected.ini @@ -0,0 +1,3 @@ +[Settings] +gtk-cursor-blink=false +gtk-recent-files-limit=20 diff --git a/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings.nix b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings.nix new file mode 100644 index 00000000000..058dd85b29e --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/gtk/gtk3-basic-settings.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + gtk = { + enable = true; + gtk3.extraConfig = { + gtk-cursor-blink = false; + gtk-recent-files-limit = 20; + }; + }; + + test.stubs.dconf = { }; + + nmt.script = '' + assertFileExists home-files/.config/gtk-3.0/settings.ini + + assertFileContent home-files/.config/gtk-3.0/settings.ini \ + ${./gtk3-basic-settings-expected.ini} + ''; + }; +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/default.nix b/infra/libkookie/home-manager/tests/modules/misc/nix/default.nix new file mode 100644 index 00000000000..b0370c2e464 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/default.nix @@ -0,0 +1,5 @@ +{ + nix-empty-settings = ./empty-settings.nix; + nix-example-settings = ./example-settings.nix; + nix-example-registry = ./example-registry.nix; +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/empty-settings.nix b/infra/libkookie/home-manager/tests/modules/misc/nix/empty-settings.nix new file mode 100644 index 00000000000..18f1ab4301d --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/empty-settings.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + nix = { package = config.lib.test.mkStubPackage { }; }; + + nmt.script = '' + assertPathNotExists home-files/.config/nix + ''; + }; +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry-expected.json b/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry-expected.json new file mode 100644 index 00000000000..cf5cee2292b --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry-expected.json @@ -0,0 +1,17 @@ +{ + "flakes": [ + { + "exact": true, + "from": { + "id": "nixpkgs", + "type": "indirect" + }, + "to": { + "owner": "my-org", + "repo": "my-nixpkgs", + "type": "github" + } + } + ], + "version": 2 +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry.nix b/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry.nix new file mode 100644 index 00000000000..1875b34d3c4 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/example-registry.nix @@ -0,0 +1,25 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + nix = { + registry = { + nixpkgs = { + to = { + type = "github"; + owner = "my-org"; + repo = "my-nixpkgs"; + }; + }; + }; + }; + + nmt.script = '' + assertFileContent \ + home-files/.config/nix/registry.json \ + ${./example-registry-expected.json} + ''; + }; +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings-expected.conf b/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings-expected.conf new file mode 100644 index 00000000000..2c2587fd697 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings-expected.conf @@ -0,0 +1,7 @@ +# WARNING: this file is generated from the nix.settings option in +# your Home Manager configuration at $XDG_CONFIG_HOME/nix/nix.conf. +# Do not edit it! +show-trace = true +system-features = big-parallel kvm recursive-nix +use-sandbox = true + diff --git a/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings.nix b/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings.nix new file mode 100644 index 00000000000..6cbcd9dfa43 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/misc/nix/example-settings.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + nix = { + package = config.lib.test.mkStubPackage { + version = lib.getVersion pkgs.nixVersions.stable; + buildScript = '' + target=$out/bin/nix + mkdir -p "$(dirname "$target")" + + echo -n "true" > "$target" + + chmod +x "$target" + ''; + }; + + settings = { + use-sandbox = true; + show-trace = true; + system-features = [ "big-parallel" "kvm" "recursive-nix" ]; + }; + }; + + nmt.script = '' + assertFileContent \ + home-files/.config/nix/nix.conf \ + ${./example-settings-expected.conf} + ''; + }; +} diff --git a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-entries.nix b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-entries.nix index adb6e31ee67..541a7cc53f8 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-entries.nix +++ b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-entries.nix @@ -18,20 +18,33 @@ with lib; startupNotify = false; noDisplay = false; prefersNonDefaultGPU = false; - extraConfig = '' - [X-ExtraSection] - Exec=foo -o - ''; settings = { Keywords = "calc;math"; DBusActivatable = "false"; }; - fileValidation = true; + actions = { + "New-Window" = { + name = "New Window"; + exec = "test --new-window"; + icon = "test"; + }; + "Default" = { exec = "test --default"; }; + }; }; min = { # minimal definition exec = "test --option"; name = "Test"; }; + deprecated = { + exec = "test --option"; + name = "Test"; + # Deprecated options + fileValidation = true; + extraConfig = '' + [X-ExtraSection] + Exec=foo -o + ''; + }; }; #testing that preexisting entries in the store are overridden @@ -48,6 +61,19 @@ with lib; }) ]; + test.asserts.assertions.expected = + let currentFile = toString ./desktop-entries.nix; + in [ + '' + The option definition `fileValidation' in `${currentFile}' no longer has any effect; please remove it. + Validation of the desktop file is always enabled. + '' + '' + The option definition `extraConfig' in `${currentFile}' no longer has any effect; please remove it. + The `extraConfig` option of `xdg.desktopEntries` has been removed following a change in Nixpkgs. + '' + ]; + nmt.script = '' assertFileExists home-path/share/applications/full.desktop assertFileExists home-path/share/applications/min.desktop diff --git a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-full-expected.desktop b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-full-expected.desktop index 7776e8b7725..b40f96c21f4 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-full-expected.desktop +++ b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-full-expected.desktop @@ -1,18 +1,26 @@ [Desktop Entry] -Categories=Network;WebBrowser; +Actions=Default;New-Window +Categories=Network;WebBrowser Comment=My Application DBusActivatable=false Exec=test --option GenericName=Web Browser Icon=test Keywords=calc;math -MimeType=text/html;text/xml; +MimeType=text/html;text/xml Name=Test NoDisplay=false PrefersNonDefaultGPU=false StartupNotify=false Terminal=true Type=Application -[X-ExtraSection] -Exec=foo -o +Version=1.4 +[Desktop Action Default] +Exec=test --default +Name=Default + +[Desktop Action New-Window] +Exec=test --new-window +Icon=test +Name=New Window diff --git a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-min-expected.desktop b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-min-expected.desktop index 9475024ae99..1b36b57c679 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-min-expected.desktop +++ b/infra/libkookie/home-manager/tests/modules/misc/xdg/desktop-min-expected.desktop @@ -3,3 +3,4 @@ Exec=test --option Name=Test Terminal=false Type=Application +Version=1.4 diff --git a/infra/libkookie/home-manager/tests/modules/misc/xdg/system-dirs.nix b/infra/libkookie/home-manager/tests/modules/misc/xdg/system-dirs.nix index 9bfa2ae4464..fa34ae0b5f5 100644 --- a/infra/libkookie/home-manager/tests/modules/misc/xdg/system-dirs.nix +++ b/infra/libkookie/home-manager/tests/modules/misc/xdg/system-dirs.nix @@ -11,8 +11,12 @@ assertFileContent $envFile ${ pkgs.writeText "expected" '' LOCALE_ARCHIVE_2_27=${pkgs.glibcLocales}/lib/locale/locale-archive + XDG_CACHE_HOME=/home/hm-user/.cache XDG_CONFIG_DIRS=/etc/xdg:/foo/bar''${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS} + XDG_CONFIG_HOME=/home/hm-user/.config XDG_DATA_DIRS=/usr/local/share:/usr/share:/baz/quux''${XDG_DATA_DIRS:+:$XDG_DATA_DIRS} + XDG_DATA_HOME=/home/hm-user/.local/share + XDG_STATE_HOME=/home/hm-user/.local/state '' } diff --git a/infra/libkookie/home-manager/tests/modules/programs/autorandr/basic-configuration.nix b/infra/libkookie/home-manager/tests/modules/programs/autorandr/basic-configuration.nix index c28edaa2af1..e650f6005a5 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/autorandr/basic-configuration.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/autorandr/basic-configuration.nix @@ -17,6 +17,7 @@ primary = true; position = "0x0"; mode = "1920x1080"; + filter = "nearest"; transform = [ [ 0.6 0.0 0.0 ] # a b c [ 0.0 0.6 0.0 ] # d e f @@ -50,6 +51,7 @@ crtc 0 primary mode 1920x1080 + filter nearest transform 0.600000,0.000000,0.000000,0.000000,0.600000,0.000000,0.000000,0.000000,1.000000'' } ''; diff --git a/infra/libkookie/home-manager/tests/modules/programs/browserpass/browserpass.nix b/infra/libkookie/home-manager/tests/modules/programs/browserpass/browserpass.nix index 9189a445ac0..2e1ca65e894 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/browserpass/browserpass.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/browserpass/browserpass.nix @@ -6,11 +6,11 @@ with lib; config = { programs.browserpass = { enable = true; - browsers = [ "chrome" "chromium" "firefox" "vivaldi" ]; + browsers = [ "brave" "chrome" "chromium" "firefox" "vivaldi" ]; }; nmt.script = if pkgs.stdenv.hostPlatform.isDarwin then '' - for dir in "Google/Chrome" "Chromium" "Mozilla" "Vivaldi"; do + for dir in "BraveSoftware/Brave-Browser" "Google/Chrome" "Chromium" "Mozilla" "Vivaldi"; do assertFileExists "home-files/Library/Application Support/$dir/NativeMessagingHosts/com.github.browserpass.native.json" done @@ -18,8 +18,11 @@ with lib; assertFileExists "home-files/Library/Application Support/$dir/policies/managed/com.github.browserpass.native.json" done '' else '' - for dir in "google-chrome" "chromium" "vivaldi"; do + for dir in "BraveSoftware/Brave-Browser" "google-chrome" "chromium" "vivaldi"; do assertFileExists "home-files/.config/$dir/NativeMessagingHosts/com.github.browserpass.native.json" + done + + for dir in "google-chrome" "chromium" "vivaldi"; do assertFileExists "home-files/.config/$dir/policies/managed/com.github.browserpass.native.json" done diff --git a/infra/libkookie/home-manager/tests/modules/programs/foot/systemd-user-service-expected.service b/infra/libkookie/home-manager/tests/modules/programs/foot/systemd-user-service-expected.service index ff0f8a61b43..517344e531d 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/foot/systemd-user-service-expected.service +++ b/infra/libkookie/home-manager/tests/modules/programs/foot/systemd-user-service-expected.service @@ -3,6 +3,7 @@ WantedBy=graphical-session.target [Service] ExecStart=@foot@/bin/foot --server +OOMPolicy=continue Restart=on-failure [Unit] diff --git a/infra/libkookie/home-manager/tests/modules/programs/gpg/override-defaults.nix b/infra/libkookie/home-manager/tests/modules/programs/gpg/override-defaults.nix index 62fe50dc2ad..e410433956f 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/gpg/override-defaults.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/gpg/override-defaults.nix @@ -11,10 +11,7 @@ with lib; no-comments = false; s2k-cipher-algo = "AES128"; throw-keyids = true; - trusted-key = [ - "0xXXXXXXXXXXXXX" - "0xYYYYYYYYYYYYY" - ]; + trusted-key = [ "0xXXXXXXXXXXXXX" "0xYYYYYYYYYYYYY" ]; }; homedir = "${config.home.homeDirectory}/bar/foopg"; @@ -22,7 +19,9 @@ with lib; nmt.script = '' assertFileExists home-files/bar/foopg/gpg.conf - assertFileContent home-files/bar/foopg/gpg.conf ${./override-defaults-expected.conf} + assertFileContent home-files/bar/foopg/gpg.conf ${ + ./override-defaults-expected.conf + } assertFileNotRegex activate "^unset GNUPGHOME keyId importTrust$" ''; diff --git a/infra/libkookie/home-manager/tests/modules/programs/helix/settings-expected.toml b/infra/libkookie/home-manager/tests/modules/programs/helix/settings-expected.toml index 2d575aa63a6..772bcf52534 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/helix/settings-expected.toml +++ b/infra/libkookie/home-manager/tests/modules/programs/helix/settings-expected.toml @@ -1,7 +1,5 @@ theme = "base16" -[keys] -[keys.normal] [keys.normal.space] q = ":q" space = "file_picker" diff --git a/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya-expected.toml b/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya-expected.toml index db94d42a8a2..6d27107ec7f 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya-expected.toml +++ b/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya-expected.toml @@ -4,13 +4,16 @@ name = "" ["hm@example.com"] default = true default-page-size = 50 +draft-folder = "Drafts" email = "hm@example.com" imap-host = "imap.example.com" imap-login = "home.manager" imap-passwd-cmd = "'password-command'" imap-port = 995 imap-starttls = false +inbox-folder = "In" name = "H. M. Test" +sent-folder = "Out" smtp-host = "smtp.example.com" smtp-login = "home.manager" smtp-passwd-cmd = "'password-command'" diff --git a/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya.nix b/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya.nix index 827a09bef1a..13872d158fb 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/himalaya/himalaya.nix @@ -13,6 +13,12 @@ with lib; settings = { default-page-size = 50; }; }; + folders = { + inbox = "In"; + sent = "Out"; + drafts = "Drafts"; + }; + imap.port = 995; smtp.port = 465; }; diff --git a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-custom.nix b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-custom.nix index b53963ddba8..d89e2ddcb82 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-custom.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-custom.nix @@ -175,7 +175,7 @@ with lib; [[block]] block = "battery" - '' + '' } ''; }; diff --git a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-default.nix b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-default.nix index 4a0d4a4c4d2..3da74ac02c3 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-default.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-default.nix @@ -28,8 +28,8 @@ with lib; [[block]] block = "memory" display_type = "memory" - format_mem = "{Mup}%" - format_swap = "{SUp}%" + format_mem = "{mem_used_percents}" + format_swap = "{swap_used_percents}" [[block]] block = "cpu" @@ -47,7 +47,7 @@ with lib; block = "time" format = "%a %d/%m %R" interval = 60 - '' + '' } ''; }; diff --git a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-extra-settings.nix b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-extra-settings.nix index 4a0442732bc..114edb99309 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-extra-settings.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/i3status-rust/with-extra-settings.nix @@ -191,7 +191,7 @@ with lib; [theme.overrides] idle_bg = "#123456" idle_fg = "#abcdef" - '' + '' } ''; }; diff --git a/infra/libkookie/home-manager/tests/modules/programs/mu/basic-configuration.nix b/infra/libkookie/home-manager/tests/modules/programs/mu/basic-configuration.nix new file mode 100644 index 00000000000..1e1deeead35 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/programs/mu/basic-configuration.nix @@ -0,0 +1,24 @@ +{ ... }: + +{ + imports = [ ../../accounts/email-test-accounts.nix ]; + + accounts.email.accounts = { + "hm@example.com" = { + mu.enable = true; + aliases = [ "foo@example.com" ]; + }; + }; + + programs.mu.enable = true; + + test.stubs.mu = { }; + + nmt.script = '' + assertFileContains activate \ + 'if [[ ! -d "/home/hm-user/.cache/mu" ]]; then' + + assertFileContains activate \ + '$DRY_RUN_CMD mu init --maildir=/home/hm-user/Mail --my-address=hm@example.com --my-address=foo@example.com $VERBOSE_ARG;' + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/programs/mu/default.nix b/infra/libkookie/home-manager/tests/modules/programs/mu/default.nix new file mode 100644 index 00000000000..bdd8b15605b --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/programs/mu/default.nix @@ -0,0 +1 @@ +{ mu-basic-configuration = ./basic-configuration.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-expected b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-expected index 6c96f61f41c..74fbf6b1ae6 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-expected +++ b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-expected @@ -31,6 +31,7 @@ set trash='+Trash' # Extra configuration color status cyan default +unset signature # notmuch section set nm_default_uri = "notmuch:///home/hm-user/Mail" virtual-mailboxes "My INBOX" "notmuch://?query=tag:inbox" diff --git a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-gpg-expected.conf b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-gpg-expected.conf index f7763dbe663..8c5c10439e6 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-gpg-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-gpg-expected.conf @@ -30,3 +30,4 @@ set trash='+Trash' # Extra configuration +unset signature diff --git a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-msmtp-expected.conf b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-msmtp-expected.conf index d2e2f3eeec2..8ccd3629ab0 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-msmtp-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-msmtp-expected.conf @@ -30,3 +30,4 @@ set trash='+Trash' # Extra configuration color status cyan default +unset signature diff --git a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-no-folder-change-expected.conf b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-no-folder-change-expected.conf index 03ea3b31af3..22fcf7884bf 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-no-folder-change-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/neomutt/hm-example.com-no-folder-change-expected.conf @@ -28,3 +28,4 @@ set trash='+Trash' # Extra configuration +unset signature diff --git a/infra/libkookie/home-manager/tests/modules/programs/neovim/plugin-config.nix b/infra/libkookie/home-manager/tests/modules/programs/neovim/plugin-config.nix index f4f81d8d32b..5c26abe883d 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/neovim/plugin-config.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/neovim/plugin-config.nix @@ -20,6 +20,7 @@ with lib; ''; } ]; + extraLuaPackages = [ pkgs.lua51Packages.luautf8 ]; }; nmt.script = '' diff --git a/infra/libkookie/home-manager/tests/modules/programs/nnn/nnn.nix b/infra/libkookie/home-manager/tests/modules/programs/nnn/nnn.nix index aeb7d3fc513..7a01fd8540f 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/nnn/nnn.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/nnn/nnn.nix @@ -24,6 +24,8 @@ test.stubs = { nnnDummy.buildScript = '' + runHook preInstall + mkdir -p "$out/bin" touch "$out/bin/nnn" chmod +x "$out/bin/nnn" @@ -40,17 +42,13 @@ script = '' assertDirectoryExists home-files/.config/nnn/plugins - assertFileRegex \ - home-path/bin/nnn \ - "^export NNN_BMS='D:~/Downloads;d:~/Documents;p:~/Pictures;v:~/Videos'\''${NNN_BMS:+':'}\$NNN_BMS$" - - assertFileRegex \ - home-path/bin/nnn \ - "^export NNN_PLUG='c:fzcd;f:finder;v:imgview'\''${NNN_PLUG:+':'}\$NNN_PLUG$" + for bookmark in 'export NNN_BMS' '~/Downloads' '~/Documents' '~/Pictures' '~/Videos'; do + assertFileRegex home-path/bin/nnn "$bookmark" + done - assertFileRegex \ - home-path/bin/nnn \ - "/nix/store/.*-"{foo,bar}"/bin" + for plugin in 'export NNN_PLUG' 'fzcd' 'finder' 'imgview'; do + assertFileRegex home-path/bin/nnn "$plugin" + done ''; }; }; diff --git a/infra/libkookie/home-manager/tests/modules/programs/pandoc/output-expected b/infra/libkookie/home-manager/tests/modules/programs/pandoc/output-expected index ef1a5e4c1ea..390e82099c8 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/pandoc/output-expected +++ b/infra/libkookie/home-manager/tests/modules/programs/pandoc/output-expected @@ -1,2 +1,5 @@ -Pandoc (Meta {unMeta = fromList [("author",MetaString "John Doe")]}) -[] +Pandoc + Meta + { unMeta = fromList [ ( "author" , MetaString "John Doe" ) ] + } + [] diff --git a/infra/libkookie/home-manager/tests/modules/programs/pubs/default.nix b/infra/libkookie/home-manager/tests/modules/programs/pubs/default.nix new file mode 100644 index 00000000000..db68bb1180d --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/programs/pubs/default.nix @@ -0,0 +1 @@ +{ pubs-example-settings = ./pubs-example-settings.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings-expected-pubsrc b/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings-expected-pubsrc new file mode 100644 index 00000000000..ba1fa88ff7f --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings-expected-pubsrc @@ -0,0 +1,19 @@ +[main] +pubsdir = ~/.pubs +docsdir = ~/.pubs/doc +doc_add = link +open_cmd = xdg-open + +[plugins] +active = git,alias + +[[alias]] + +[[[la]]] +command = list -a +description = lists papers in lexicographic order + +[[git]] +quiet = True +manual = False +force_color = False diff --git a/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings.nix b/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings.nix new file mode 100644 index 00000000000..59f2280093f --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/programs/pubs/pubs-example-settings.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: + +{ + programs.pubs = { + enable = true; + + extraConfig = '' + [main] + pubsdir = ~/.pubs + docsdir = ~/.pubs/doc + doc_add = link + open_cmd = xdg-open + + [plugins] + active = git,alias + + [[alias]] + + [[[la]]] + command = list -a + description = lists papers in lexicographic order + + [[git]] + quiet = True + manual = False + force_color = False + ''; + }; + + test.stubs.pubs = { }; + + nmt.script = '' + assertFileContent \ + home-files/.pubsrc ${./pubs-example-settings-expected-pubsrc} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/programs/taskwarrior/taskwarrior.nix b/infra/libkookie/home-manager/tests/modules/programs/taskwarrior/taskwarrior.nix index 98d0a35448f..f21198f5732 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/taskwarrior/taskwarrior.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/taskwarrior/taskwarrior.nix @@ -21,9 +21,9 @@ with lib; test.stubs.taskwarrior = { }; nmt.script = '' - assertFileExists home-files/.config/task/taskrc - assertFileContent home-files/.config/task/taskrc ${ - pkgs.writeText "taskwarrior.expected" '' + assertFileExists home-files/.config/task/home-manager-taskrc + assertFileContent home-files/.config/task/home-manager-taskrc ${ + pkgs.writeText "taskwarrior.home-conf.expected" '' data.location=/some/data/location include dark-violets-256.theme diff --git a/infra/libkookie/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf b/infra/libkookie/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf index 222f733d5f3..e97a94d192a 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf @@ -19,8 +19,8 @@ set -g mode-keys emacs -bind-key & kill-window -bind-key x kill-pane +bind-key -N "Kill the current window" & kill-window +bind-key -N "Kill the current pane" x kill-pane setw -g aggressive-resize off diff --git a/infra/libkookie/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf b/infra/libkookie/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf index 97e226316f4..d0150192524 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf @@ -10,8 +10,8 @@ setw -g pane-base-index 0 new-session -bind v split-window -h -bind s split-window -v +bind -N "Split the pane into two, left and right" v split-window -h +bind -N "Split the pane into two, top and bottom" s split-window -v set -g status-keys emacs diff --git a/infra/libkookie/home-manager/tests/modules/programs/tmux/prefix.conf b/infra/libkookie/home-manager/tests/modules/programs/tmux/prefix.conf index 31880300236..831ec3b0ecd 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/tmux/prefix.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/tmux/prefix.conf @@ -20,7 +20,8 @@ set -g mode-keys emacs # rebind main key: C-a unbind C-b set -g prefix C-a -bind C-a send-prefix +bind -N "Send the prefix key through to the application" \ + C-a send-prefix diff --git a/infra/libkookie/home-manager/tests/modules/programs/tmux/shortcut-without-prefix.conf b/infra/libkookie/home-manager/tests/modules/programs/tmux/shortcut-without-prefix.conf index a8bc59cbb83..4fd89ad242a 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/tmux/shortcut-without-prefix.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/tmux/shortcut-without-prefix.conf @@ -20,7 +20,8 @@ set -g mode-keys emacs # rebind main key: C-a unbind C-b set -g prefix C-a -bind a send-prefix +bind -N "Send the prefix key through to the application" \ + a send-prefix bind C-a last-window diff --git a/infra/libkookie/home-manager/tests/modules/programs/tmux/vi-all-true.conf b/infra/libkookie/home-manager/tests/modules/programs/tmux/vi-all-true.conf index de1cbe06ebc..6a6fd611475 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/tmux/vi-all-true.conf +++ b/infra/libkookie/home-manager/tests/modules/programs/tmux/vi-all-true.conf @@ -10,8 +10,8 @@ setw -g pane-base-index 0 new-session -bind v split-window -h -bind s split-window -v +bind -N "Split the pane into two, left and right" v split-window -h +bind -N "Split the pane into two, top and bottom" s split-window -v set -g status-keys vi diff --git a/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix b/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix index 624ab5039bd..dc7a620fab3 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix @@ -17,9 +17,10 @@ with lib; assertPathNotExists home-files/.config/waybar/config assertPathNotExists home-files/.config/waybar/style.css - assertFileContent \ - home-files/.config/systemd/user/waybar.service \ - ${./systemd-with-graphical-session-target.service} + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/waybar.service) + assertFileContent "$serviceFile" ${ + ./systemd-with-graphical-session-target.service + } ''; }; } diff --git a/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.service b/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.service index a954207d3c1..e1343da8a81 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.service +++ b/infra/libkookie/home-manager/tests/modules/programs/waybar/systemd-with-graphical-session-target.service @@ -2,7 +2,7 @@ WantedBy=sway-session.target [Service] -ExecReload=kill -SIGUSR2 $MAINPID +ExecReload=/nix/store/00000000000000000000000000000000-coreutils/bin/kill -SIGUSR2 $MAINPID ExecStart=@waybar@/bin/waybar KillMode=mixed Restart=on-failure diff --git a/infra/libkookie/home-manager/tests/modules/programs/zsh/session-variables.nix b/infra/libkookie/home-manager/tests/modules/programs/zsh/session-variables.nix index 638b41c9f45..f6f795f79c8 100644 --- a/infra/libkookie/home-manager/tests/modules/programs/zsh/session-variables.nix +++ b/infra/libkookie/home-manager/tests/modules/programs/zsh/session-variables.nix @@ -16,9 +16,9 @@ with lib; test.stubs.zsh = { }; nmt.script = '' - assertFileExists home-files/.zshrc - assertFileRegex home-files/.zshrc 'export V1="v1"' - assertFileRegex home-files/.zshrc 'export V2="v2-v1"' + assertFileExists home-files/.zshenv + assertFileRegex home-files/.zshenv 'export V1="v1"' + assertFileRegex home-files/.zshenv 'export V2="v2-v1"' ''; }; } diff --git a/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.nix b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.nix new file mode 100644 index 00000000000..34c6d533b8c --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.nix @@ -0,0 +1,45 @@ +{ ... }: + +{ + services.espanso = { + enable = true; + settings = { + matches = [ + { # Simple text replacement + trigger = ":espanso"; + replace = "Hi there!"; + } + { # Dates + trigger = ":date"; + replace = "{{mydate}}"; + vars = [{ + name = "mydate"; + type = "date"; + params = { format = "%m/%d/%Y"; }; + }]; + } + { # Shell commands + trigger = ":shell"; + replace = "{{output}}"; + vars = [{ + name = "output"; + type = "shell"; + params = { cmd = "echo Hello from your shell"; }; + }]; + } + ]; + }; + }; + + test.stubs.espanso = { }; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/espanso.service + assertFileExists "$serviceFile" + assertFileContent "$serviceFile" ${./basic-configuration.service} + + configFile=home-files/.config/espanso/default.yml + assertFileExists "$configFile" + assertFileContent "$configFile" ${./basic-configuration.yaml} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.service b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.service new file mode 100644 index 00000000000..593196e5952 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.service @@ -0,0 +1,10 @@ +[Install] +WantedBy=default.target + +[Service] +ExecStart=@espanso@/bin/espanso daemon +Restart=on-failure +Type=exec + +[Unit] +Description=Espanso: cross platform text expander in Rust diff --git a/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.yaml b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.yaml new file mode 100644 index 00000000000..3789df04b0a --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/espanso/basic-configuration.yaml @@ -0,0 +1,17 @@ +matches: +- replace: Hi there! + trigger: :espanso +- replace: '{{mydate}}' + trigger: :date + vars: + - name: mydate + params: + format: '%m/%d/%Y' + type: date +- replace: '{{output}}' + trigger: :shell + vars: + - name: output + params: + cmd: echo Hello from your shell + type: shell diff --git a/infra/libkookie/home-manager/tests/modules/services/espanso/default.nix b/infra/libkookie/home-manager/tests/modules/services/espanso/default.nix new file mode 100644 index 00000000000..5df5fa3f1bd --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/espanso/default.nix @@ -0,0 +1 @@ +{ espanso-basic-configuration = ./basic-configuration.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/services/fusuma/default.nix b/infra/libkookie/home-manager/tests/modules/services/fusuma/default.nix new file mode 100644 index 00000000000..74024b8b914 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/fusuma/default.nix @@ -0,0 +1,4 @@ +{ + fusuma-example-settings = ./settings.nix; + fusuma-systemd-user-service = ./service.nix; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-service.service b/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-service.service new file mode 100644 index 00000000000..a86627f4c59 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-service.service @@ -0,0 +1,11 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +Environment=PATH=@coreutils@/bin:@xdotool@/bin +ExecStart=@fusuma@/bin/fusuma -c /home/hm-user/.config/fusuma/config.yaml + +[Unit] +After=graphical-session-pre.target +Description=Fusuma services +PartOf=graphical-session.target diff --git a/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-settings.yaml b/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-settings.yaml new file mode 100644 index 00000000000..b02be48adf9 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/fusuma/expected-settings.yaml @@ -0,0 +1,12 @@ +interval: + swipe: 7 +swipe: + 3: + left: + command: xdotool key ctrl+alt+Right + 4: + left: + command: xdotool key ctrl+shift+alt+Right +threshold: + swipe: 1 + diff --git a/infra/libkookie/home-manager/tests/modules/services/fusuma/service.nix b/infra/libkookie/home-manager/tests/modules/services/fusuma/service.nix new file mode 100644 index 00000000000..d02a75f52ee --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/fusuma/service.nix @@ -0,0 +1,19 @@ +{ config, ... }: + +{ + services.fusuma = { + enable = true; + package = config.lib.test.mkStubPackage { outPath = "@fusuma@"; }; + extraPackages = [ + (config.lib.test.mkStubPackage { outPath = "@coreutils@"; }) + (config.lib.test.mkStubPackage { outPath = "@xdotool@"; }) + ]; + settings = { }; + }; + + nmt.script = '' + assertFileContent \ + home-files/.config/systemd/user/fusuma.service \ + ${./expected-service.service} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/fusuma/settings.nix b/infra/libkookie/home-manager/tests/modules/services/fusuma/settings.nix new file mode 100644 index 00000000000..303a132725e --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/fusuma/settings.nix @@ -0,0 +1,24 @@ +{ config, ... }: + +{ + services.fusuma = { + enable = true; + package = config.lib.test.mkStubPackage { outPath = "@fusuma@"; }; + extraPackages = [ (config.lib.test.mkStubPackage { }) ]; + + settings = { + threshold = { swipe = 1; }; + interval = { swipe = 7; }; + swipe = { + "3" = { left = { command = "xdotool key ctrl+alt+Right"; }; }; + "4" = { left = { command = "xdotool key ctrl+shift+alt+Right"; }; }; + }; + }; + }; + + nmt.script = '' + assertFileContent \ + home-files/.config/fusuma/config.yaml \ + ${./expected-settings.yaml} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.conf b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.conf new file mode 100644 index 00000000000..54d6059fa80 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.conf @@ -0,0 +1,11 @@ +music_directory "/home/hm-user/music" +playlist_directory "/home/hm-user/.local/share/mpd/playlists" +db_file "/home/hm-user/.local/share/mpd/tag_cache" + +state_file "/home/hm-user/.local/share/mpd/state" +sticker_file "/home/hm-user/.local/share/mpd/sticker.sql" + +bind_to_address "127.0.0.1" + + + diff --git a/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.nix b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.nix new file mode 100644 index 00000000000..c1f288980f0 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + services.mpd.enable = true; + + test.stubs.mpd = { }; + + nmt.script = '' + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/mpd.service) + assertFileContent "$serviceFile" ${./basic-configuration.service} + + confFile=$(grep -o \ + '/nix/store/.*-mpd.conf' \ + $TESTED/home-files/.config/systemd/user/mpd.service) + assertFileContent "$confFile" ${./basic-configuration.conf} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.service b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.service new file mode 100644 index 00000000000..fd44042a9b9 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/mpd/basic-configuration.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=default.target + +[Service] +Environment=PATH=/home/hm-user/.nix-profile/bin +ExecStart=@mpd@/bin/mpd --no-daemon /nix/store/00000000000000000000000000000000-mpd.conf +ExecStartPre=/nix/store/00000000000000000000000000000000-bash/bin/bash -c "/nix/store/00000000000000000000000000000000-coreutils/bin/mkdir -p '/home/hm-user/.local/share/mpd' '/home/hm-user/.local/share/mpd/playlists'" +Type=notify + +[Unit] +After=network.target +After=sound.target +Description=Music Player Daemon diff --git a/infra/libkookie/home-manager/tests/modules/services/mpd/default.nix b/infra/libkookie/home-manager/tests/modules/services/mpd/default.nix new file mode 100644 index 00000000000..22d1638e537 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/mpd/default.nix @@ -0,0 +1 @@ +{ mpd-basic-configuration = ./basic-configuration.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/services/picom/default.nix b/infra/libkookie/home-manager/tests/modules/services/picom/default.nix new file mode 100644 index 00000000000..6437013148e --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/picom/default.nix @@ -0,0 +1 @@ +{ picom-basic-configuration = ./picom-basic-configuration.nix; } diff --git a/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.conf b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.conf new file mode 100644 index 00000000000..6a7ac09aa14 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.conf @@ -0,0 +1,33 @@ +# fading +fading = true; +fade-delta = 5; +fade-in-step = 0.04; +fade-out-step = 0.04; +fade-exclude = ["window_type *= 'menu'","name ~= 'Firefox$'","focused = 1"]; + +# shadows +shadow = true; +shadow-offset-x = -10; +shadow-offset-y = -15; +shadow-opacity = 0.8; +shadow-exclude = ["window_type *= 'menu'","name ~= 'Firefox$'","focused = 1"]; + +# opacity +active-opacity = 1.0; +inactive-opacity = 1.0; +inactive-dim = 0.0; +opacity-rule = []; + +wintypes: +{ + dock = { shadow = false; }; + dnd = { shadow = false; }; + popup_menu = { opacity = 1.0; }; + dropdown_menu = { opacity = 1.0; }; +}; + +# other options +backend = "xrender"; +vsync = true; +unredir-if-possible = true; +dbe = true; diff --git a/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.service b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.service new file mode 100644 index 00000000000..62620502cf2 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration-expected.service @@ -0,0 +1,12 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +ExecStart=@picom@/bin/picom --config /nix/store/00000000000000000000000000000000-hm_picompicom.conf --experimental-backends +Restart=always +RestartSec=3 + +[Unit] +After=graphical-session-pre.target +Description=Picom X11 compositor +PartOf=graphical-session.target diff --git a/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration.nix b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration.nix new file mode 100644 index 00000000000..41f1ba01f47 --- /dev/null +++ b/infra/libkookie/home-manager/tests/modules/services/picom/picom-basic-configuration.nix @@ -0,0 +1,37 @@ +{ config, pkgs, ... }: + +{ + services.picom = { + enable = true; + fade = true; + fadeDelta = 5; + fadeSteps = [ "0.04" "0.04" ]; + fadeExclude = + [ "window_type *= 'menu'" "name ~= 'Firefox$'" "focused = 1" ]; + shadow = true; + shadowOffsets = [ (-10) (-15) ]; + shadowOpacity = "0.8"; + shadowExclude = + [ "window_type *= 'menu'" "name ~= 'Firefox$'" "focused = 1" ]; + backend = "xrender"; + vSync = true; + extraOptions = '' + unredir-if-possible = true; + dbe = true; + ''; + experimentalBackends = true; + }; + + test.stubs.picom = { }; + + nmt.script = '' + assertFileContent \ + home-files/.config/picom/picom.conf \ + ${./picom-basic-configuration-expected.conf} + + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/picom.service) + assertFileContent \ + "$serviceFile" \ + ${./picom-basic-configuration-expected.service} + ''; +} diff --git a/infra/libkookie/home-manager/tests/modules/services/screen-locker/no-xautolock.nix b/infra/libkookie/home-manager/tests/modules/services/screen-locker/no-xautolock.nix index 03ab0868cb9..7ec5152b0f9 100644 --- a/infra/libkookie/home-manager/tests/modules/services/screen-locker/no-xautolock.nix +++ b/infra/libkookie/home-manager/tests/modules/services/screen-locker/no-xautolock.nix @@ -6,7 +6,10 @@ enable = true; inactiveInterval = 5; lockCmd = "${pkgs.i3lock}/bin/i3lock -n -c AA0000"; - xss-lock = { extraOptions = [ "-test" ]; }; + xss-lock = { + extraOptions = [ "-test" ]; + screensaverCycle = 5; + }; xautolock = { enable = false; }; }; @@ -18,7 +21,7 @@ assertFileExists $xssService assertFileRegex $xssService 'ExecStart=.*/bin/xss-lock.*-test.*i3lock -n -c AA0000' - assertFileRegex $xssService 'ExecStartPre=.*/xset s 300' + assertFileRegex $xssService 'ExecStartPre=.*/xset s 300 5' ''; }; } diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/bspwmrc b/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/bspwmrc index 7ebb64aca3b..ba0da830a0b 100755 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/bspwmrc +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/bspwmrc @@ -1,4 +1,6 @@ -bspc monitor 'focused' -d 'desktop 1' 'd'\''esk top' +if [[ $(bspc query --desktops --names --monitor 'focused') == Desktop ]]; then + bspc monitor 'focused' -d 'desktop 1' 'd'\''esk top' +fi bspc config 'border_width' '2' bspc config 'external_rules_command' '/path/to/external rules command' diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/configuration.nix b/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/configuration.nix index 8018a3ac186..e4aec0f6cb5 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/configuration.nix +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/bspwm/configuration.nix @@ -8,6 +8,7 @@ with lib; enable = true; monitors.focused = [ "desktop 1" "d'esk top" ]; # pathological desktop names + alwaysResetDesktops = false; settings = { border_width = 2; split_ratio = 0.52; diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/herbstluftwm/autostart b/infra/libkookie/home-manager/tests/modules/services/window-managers/herbstluftwm/autostart index bff4f16fc42..d59da4baec9 100755 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/herbstluftwm/autostart +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/herbstluftwm/autostart @@ -1,4 +1,4 @@ -#!/nix/store/00000000000000000000000000000000-bash-5.1-p12/bin/bash +#!/nix/store/00000000000000000000000000000000-bash/bin/bash shopt -s expand_aliases # shellcheck disable=SC2142 @@ -19,7 +19,7 @@ herbstclient set frame_bg_active_color '#000000' herbstclient set frame_gap '12' herbstclient set frame_padding '-12' -if @herbstluftwm@/bin/herbstclient object_tree tags.by-name | /nix/store/00000000000000000000000000000000-gnugrep-3.7/bin/grep default; then +if @herbstluftwm@/bin/herbstclient object_tree tags.by-name | /nix/store/00000000000000000000000000000000-gnugrep/bin/grep default; then herbstclient rename default '1' fi diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-bar-focused-colors-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-bar-focused-colors-expected.conf index c50f317ad97..92f23a921de 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-bar-focused-colors-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-bar-focused-colors-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+0 workspace number 10 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -66,17 +64,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -98,13 +94,6 @@ bar { inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - - - +} diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-followmouse-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-followmouse-expected.conf index 3d8ad0d21de..27234b96db7 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-followmouse-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-followmouse-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+0 workspace number 10 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -66,17 +64,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -90,21 +86,11 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - - - +} diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-fonts-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-fonts-expected.conf index 8a565bc3fc0..d85d978e07d 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-fonts-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-fonts-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+0 workspace number 10 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -66,17 +64,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:FontAwesome, Iosevka 11.500000 mode dock hidden_state hide @@ -90,21 +86,11 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - - - +} diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-keybindings-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-keybindings-expected.conf index 6c310baac92..b3b4c33dea8 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-keybindings-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-keybindings-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+0 workspace number 10 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -67,17 +65,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -91,21 +87,11 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - - - +} diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-null-config.nix b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-null-config.nix index 1c221319b20..f321ad49a59 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-null-config.nix +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-null-config.nix @@ -11,6 +11,6 @@ nmt.script = '' assertFileExists home-files/.config/i3/config assertFileContent home-files/.config/i3/config \ - ${pkgs.writeText "expected" "\n"} + ${pkgs.writeText "expected" ""} ''; } diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-default-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-default-expected.conf index d214a96b48e..d7fe4b61043 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-default-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-default-expected.conf @@ -9,14 +9,12 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+0 workspace number 10 bindsym Mod1+2 workspace number 2 @@ -65,17 +63,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -89,21 +85,11 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - - - +} diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf index 9166cf9bbea..dedad29e0b1 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/i3/i3-workspace-output-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+0 workspace number 10 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -66,17 +64,15 @@ bindsym Mod1+v split v bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px or 10 ppt -bindsym Escape mode default -bindsym Left resize shrink width 10 px or 10 ppt -bindsym Return mode default -bindsym Right resize grow width 10 px or 10 ppt -bindsym Up resize shrink height 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Escape mode default + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Return mode default + bindsym Right resize grow width 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt } - bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -90,24 +86,15 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - } - - - - +} workspace "1" output eDP workspace "ABC" output DP workspace "3: Test" output HDMI workspace "!"§$%&/(){}[]=?\*#<>-_.:,;²³" output DVI - diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bar-focused-colors.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bar-focused-colors.conf index d55c92003fa..f8e109aab64 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bar-focused-colors.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bar-focused-colors.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,20 +69,19 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -106,8 +103,7 @@ bar { inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bindkeys-to-code.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bindkeys-to-code.conf index 97c7271040c..ce9fac65d1d 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bindkeys-to-code.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-bindkeys-to-code.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym --to-code Mod1+1 workspace number 1 bindsym --to-code Mod1+2 workspace number 2 bindsym --to-code Mod1+3 workspace number 3 @@ -71,20 +69,19 @@ bindsym --to-code Mod1+v splitv bindsym --to-code Mod1+w layout tabbed mode "resize" { -bindsym --to-code Down resize grow height 10 px -bindsym --to-code Escape mode default -bindsym --to-code Left resize shrink width 10 px -bindsym --to-code Return mode default -bindsym --to-code Right resize grow width 10 px -bindsym --to-code Up resize shrink height 10 px -bindsym --to-code h resize shrink width 10 px -bindsym --to-code j resize grow height 10 px -bindsym --to-code k resize shrink height 10 px -bindsym --to-code l resize grow width 10 px + bindsym --to-code Down resize grow height 10 px + bindsym --to-code Escape mode default + bindsym --to-code Left resize shrink width 10 px + bindsym --to-code Return mode default + bindsym --to-code Right resize grow width 10 px + bindsym --to-code Up resize shrink height 10 px + bindsym --to-code h resize shrink width 10 px + bindsym --to-code j resize grow height 10 px + bindsym --to-code k resize shrink height 10 px + bindsym --to-code l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -98,16 +95,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-default.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-default.conf index 6ef61a7a639..82cf254e5e6 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-default.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-default.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,20 +69,19 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -98,16 +95,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-expected.conf index 7fa4da07690..287e0322580 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,16 +69,16 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-legacy-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-legacy-expected.conf index c470a7c4c51..e6f308c3d0d 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-legacy-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-followmouse-legacy-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,16 +69,16 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-modules.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-modules.conf index c0339d716f7..99e54c841c2 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-modules.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-modules.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -83,20 +81,19 @@ hide_cursor when-typing enable } mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -110,16 +107,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-null-package.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-null-package.conf index 6ef61a7a639..82cf254e5e6 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-null-package.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-null-package.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,20 +69,19 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -98,16 +95,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-default-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-default-expected.conf index b5c92fa627e..233e567d9f5 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-default-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-default-expected.conf @@ -9,14 +9,12 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+9 workspace number 9 bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 @@ -70,20 +68,19 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -97,16 +94,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } exec "systemctl --user import-environment; systemctl --user start sway-session.target" diff --git a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf index bacb27f858b..683298b6d8f 100644 --- a/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf +++ b/infra/libkookie/home-manager/tests/modules/services/window-managers/sway/sway-workspace-output-expected.conf @@ -9,7 +9,6 @@ focus_on_window_activation smart mouse_warping output workspace_layout default workspace_auto_back_and_forth no - client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 @@ -17,7 +16,6 @@ client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff - bindsym Mod1+1 workspace number 1 bindsym Mod1+2 workspace number 2 bindsym Mod1+3 workspace number 3 @@ -71,20 +69,19 @@ bindsym Mod1+v splitv bindsym Mod1+w layout tabbed mode "resize" { -bindsym Down resize grow height 10 px -bindsym Escape mode default -bindsym Left resize shrink width 10 px -bindsym Return mode default -bindsym Right resize grow width 10 px -bindsym Up resize shrink height 10 px -bindsym h resize shrink width 10 px -bindsym j resize grow height 10 px -bindsym k resize shrink height 10 px -bindsym l resize grow width 10 px + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } bar { - font pango:monospace 8.000000 mode dock hidden_state hide @@ -98,16 +95,12 @@ bar { background #000000 statusline #ffffff separator #666666 - - - focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff binding_mode #2f343a #900000 #ffffff - } - +} } workspace "1" output eDP diff --git a/infra/libkookie/home-manager/tests/modules/systemd/session-variables-expected.conf b/infra/libkookie/home-manager/tests/modules/systemd/session-variables-expected.conf deleted file mode 100644 index 65ced43ea6e..00000000000 --- a/infra/libkookie/home-manager/tests/modules/systemd/session-variables-expected.conf +++ /dev/null @@ -1,3 +0,0 @@ -LOCALE_ARCHIVE_2_27=@glibcLocales@/lib/locale/locale-archive -V_int=1 -V_str=2 diff --git a/infra/libkookie/home-manager/tests/modules/systemd/session-variables.nix b/infra/libkookie/home-manager/tests/modules/systemd/session-variables.nix index 8722a9ab3e6..cbc348c444e 100644 --- a/infra/libkookie/home-manager/tests/modules/systemd/session-variables.nix +++ b/infra/libkookie/home-manager/tests/modules/systemd/session-variables.nix @@ -15,6 +15,10 @@ LOCALE_ARCHIVE_2_27=${pkgs.glibcLocales}/lib/locale/locale-archive V_int=1 V_str=2 + XDG_CACHE_HOME=/home/hm-user/.cache + XDG_CONFIG_HOME=/home/hm-user/.config + XDG_DATA_HOME=/home/hm-user/.local/share + XDG_STATE_HOME=/home/hm-user/.local/state '' } '';