Compare commits
312
Commits
@@ -55,3 +55,7 @@ f2f1076c1f789595c2a2b18b76466fbd691025dd
|
||||
11ad9d2e42ebf6d00db4d7bae252f1c6b7dd36a4
|
||||
74b0e979375b0ed469e2394820aa50ba2114800b
|
||||
de90ee24082bb8dd44145f5c733b807467856820
|
||||
|
||||
# Deadnix cleanup
|
||||
71402c5df34df5ee7b6c10d738018f9f0c8bde2b
|
||||
a93d80bcec089abf80894c25ee3934b7e196bbd9
|
||||
|
||||
@@ -14,3 +14,17 @@ updates:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "ci:"
|
||||
- package-ecosystem: "nix"
|
||||
directory: "/"
|
||||
target-branch: "master"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "flake:"
|
||||
- package-ecosystem: "nix"
|
||||
directory: "/"
|
||||
target-branch: "release-25.11"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "flake:"
|
||||
|
||||
+4
-1
@@ -1,3 +1,6 @@
|
||||
"release":
|
||||
- base-branch:
|
||||
- '^release-.*'
|
||||
"ai":
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
@@ -7,7 +10,7 @@
|
||||
- modules/programs/claude-code.nix
|
||||
- modules/programs/codex.nix
|
||||
- modules/programs/fabric-ai.nix
|
||||
- modules/programs/gemini-cli.nix
|
||||
- modules/programs/antigravity-cli.nix
|
||||
- modules/programs/mcp.nix
|
||||
- modules/programs/mistral-vibe.nix
|
||||
- modules/programs/mods.nix
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
with:
|
||||
app-id: ${{ vars.CI_APP_ID }}
|
||||
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
os: [ubuntu-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixos-unstable
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
run: |
|
||||
COUNT=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUMBER/files" --paginate --jq '.[].filename' | grep '^modules/' | wc -l || echo 0)
|
||||
COUNT=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUMBER/files" --paginate --jq '.[].filename' | grep -c '^modules/' || true)
|
||||
echo "Found $COUNT changed module files."
|
||||
echo "count=$COUNT" >> "$GITHUB_OUTPUT"
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
app-id: ${{ vars.CI_APP_ID }}
|
||||
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.base.sha }}
|
||||
- name: Get Nixpkgs revision from flake.lock
|
||||
@@ -42,12 +42,12 @@ jobs:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
run: |
|
||||
CHANGED_FILES=$(gh pr diff $PR_NUMBER --name-only | grep '^modules/' | grep -v '^modules/\(po\|.*\/news\)/' || true)
|
||||
CHANGED_FILES=$(gh pr diff "$PR_NUMBER" --name-only | grep '^modules/' | grep -v '^modules/\(po\|.*\/news\)/' || true)
|
||||
echo "Changed files:"
|
||||
echo "$CHANGED_FILES"
|
||||
echo "changed_files<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$CHANGED_FILES" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
echo "changed_files<<EOF" >> "$GITHUB_OUTPUT"
|
||||
echo "$CHANGED_FILES" >> "$GITHUB_OUTPUT"
|
||||
echo "EOF" >> "$GITHUB_OUTPUT"
|
||||
- name: Extract Maintainers
|
||||
id: extract-maintainers
|
||||
env:
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
MAINTAINERS=$(lib/python/extract-maintainers.py \
|
||||
--changed-files "$CHANGED_FILES" \
|
||||
--pr-author "$PR_AUTHOR")
|
||||
echo "maintainers=$MAINTAINERS" >> $GITHUB_OUTPUT
|
||||
echo "maintainers=$MAINTAINERS" >> "$GITHUB_OUTPUT"
|
||||
echo "Found maintainers: $MAINTAINERS"
|
||||
- name: Manage Reviewers
|
||||
env:
|
||||
|
||||
+38
-16
@@ -6,16 +6,19 @@ on:
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
permissions: {}
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
outputs:
|
||||
docs: ${{ steps.changes.outputs.docs }}
|
||||
format: ${{ steps.changes.outputs.format }}
|
||||
hm: ${{ steps.changes.outputs.hm }}
|
||||
parse: ${{ steps.changes.outputs.parse }}
|
||||
tests: ${{ steps.changes.outputs.tests }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- uses: dorny/paths-filter@v4
|
||||
id: changes
|
||||
with:
|
||||
@@ -39,28 +42,41 @@ jobs:
|
||||
- 'flake.lock'
|
||||
- 'flake.nix'
|
||||
- 'home-manager/**'
|
||||
parse:
|
||||
- '**/*.nix'
|
||||
- 'flake.lock'
|
||||
tests:
|
||||
needs: changes
|
||||
timeout-minutes: 15
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Get Nixpkgs revision from flake.lock
|
||||
id: get-nixpkgs
|
||||
run: |
|
||||
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
|
||||
- uses: cachix/install-nix-action@v31
|
||||
if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outputs.hm == 'true' || needs.changes.outputs.format == 'true'
|
||||
if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outputs.hm == 'true' || needs.changes.outputs.parse == 'true' || needs.changes.outputs.format == 'true'
|
||||
with:
|
||||
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
|
||||
extra_nix_config: |
|
||||
sandbox = true
|
||||
- name: Build docs
|
||||
if: github.event_name == 'schedule' || needs.changes.outputs.docs == 'true'
|
||||
run: nix build --show-trace .#docs-jsonModuleMaintainers
|
||||
- name: Parse Nix files with nix and Lix
|
||||
if: >-
|
||||
matrix.os == 'ubuntu-latest' &&
|
||||
(github.event_name == 'schedule' || needs.changes.outputs.parse == 'true')
|
||||
run: nix build --show-trace --keep-going .#ci-parse .#ci-parse-lix
|
||||
- name: Format Check
|
||||
if: github.event_name == 'schedule' || needs.changes.outputs.format == 'true'
|
||||
if: >-
|
||||
matrix.os == 'ubuntu-latest' &&
|
||||
(github.event_name == 'schedule' || needs.changes.outputs.format == 'true')
|
||||
run: nix fmt -- --ci
|
||||
- name: Test init --switch with locked inputs
|
||||
if: github.event_name == 'schedule' || needs.changes.outputs.hm == 'true'
|
||||
@@ -76,31 +92,37 @@ jobs:
|
||||
if: github.event_name == 'pull_request'
|
||||
shell: bash
|
||||
run: |
|
||||
echo "### Test Job Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "A summary of tasks triggered by file changes in this PR:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### Test Job Summary" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "A summary of tasks triggered by file changes in this PR:" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "" >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
if [[ "${{ needs.changes.outputs.docs }}" == "true" ]]; then
|
||||
echo "- ✅ **Docs Build:** Triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ✅ **Docs Build:** Triggered" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "- ☑️ **Docs Build:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ☑️ **Docs Build:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
if [[ "${{ needs.changes.outputs.format }}" == "true" ]]; then
|
||||
echo "- ✅ **Format Check:** Triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ✅ **Format Check:** Triggered" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "- ☑️ **Format Check:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ☑️ **Format Check:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
if [[ "${{ needs.changes.outputs.parse }}" == "true" ]]; then
|
||||
echo "- ✅ **Nix Parse (nix + Lix):** Triggered" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "- ☑️ **Nix Parse (nix + Lix):** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
if [[ "${{ needs.changes.outputs.hm }}" == "true" ]]; then
|
||||
echo "- ✅ **Home Manager Tests:** Triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ✅ **Home Manager Tests:** Triggered" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "- ☑️ **Home Manager Tests:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ☑️ **Home Manager Tests:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
if [[ "${{ needs.changes.outputs.tests }}" == "true" ]]; then
|
||||
echo "- ✅ **General Tests:** Triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ✅ **General Tests:** Triggered" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "- ☑️ **General Tests:** Skipped (no relevant files changed)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- ☑️ **General Tests:** Skipped (no relevant files changed)" >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
name: Update flake inputs
|
||||
on:
|
||||
schedule:
|
||||
# Update every Sunday and Wednesday
|
||||
- cron: "51 3 * * 0,3"
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
update:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name != 'schedule' || github.repository_owner == 'nix-community'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branch: [master, release-25.11]
|
||||
steps:
|
||||
- name: Create GitHub App token
|
||||
uses: actions/create-github-app-token@v3
|
||||
if: vars.CI_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.CI_APP_ID }}
|
||||
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
|
||||
- name: Get GitHub App user info
|
||||
if: vars.CI_APP_ID
|
||||
id: user-info
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token}}
|
||||
slug: ${{ steps.app-token.outputs.app-slug }}
|
||||
run: |
|
||||
name="$slug[bot]"
|
||||
id=$(gh api "/users/$name" --jq .id)
|
||||
{
|
||||
echo "id=$id"
|
||||
echo "name=$name"
|
||||
echo "email=$id+$name@users.noreply.github.com"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ matrix.branch }}
|
||||
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@v31
|
||||
- name: Update flake.lock
|
||||
uses: DeterminateSystems/update-flake-lock@v28
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||||
git-committer-name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}
|
||||
git-committer-email: ${{ steps.user-info.outputs.email || '41898282+github-actions[bot]@users.noreply.github.com' }}
|
||||
git-author-name: ${{ steps.user-info.outputs.name || 'github-actions[bot]' }}
|
||||
git-author-email: ${{ steps.user-info.outputs.email || '41898282+github-actions[bot]@users.noreply.github.com' }}
|
||||
pr-labels: dependencies
|
||||
pr-title: "[${{ matrix.branch }}] flake.lock: Update"
|
||||
pr-body: |
|
||||
Automated update by the [update-flake-lock] GitHub Action.
|
||||
|
||||
```
|
||||
{{ env.GIT_COMMIT_MESSAGE }}
|
||||
```
|
||||
|
||||
This PR was most recently updated by workflow run [${{ github.run_id }}].
|
||||
|
||||
[update-flake-lock]: https://github.com/DeterminateSystems/update-flake-lock
|
||||
[${{ github.run_id }}]: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
base: ${{ matrix.branch }}
|
||||
branch: update/${{ matrix.branch }}
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
echo "email=$id+$name@users.noreply.github.com"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token || github.token }}
|
||||
- name: Get Nixpkgs revision from flake.lock
|
||||
@@ -184,7 +184,7 @@ jobs:
|
||||
if [[ -n "$info" ]]; then
|
||||
echo "PR info:"
|
||||
echo "$info"
|
||||
echo "$info" >> $GITHUB_OUTPUT
|
||||
echo "$info" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "No PR is currently open"
|
||||
fi
|
||||
@@ -266,21 +266,21 @@ jobs:
|
||||
echo "✅ Successfully updated PR with new changes."
|
||||
echo "$changes"
|
||||
echo "🔗 PR URL: $pr_url"
|
||||
echo "### ✅ PR Updated" >> $GITHUB_STEP_SUMMARY
|
||||
echo "[$pr_url]($pr_url)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ✅ PR Updated" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "[$pr_url]($pr_url)" >> "$GITHUB_STEP_SUMMARY"
|
||||
elif [[ -n "$pr_url" ]]; then
|
||||
echo "✅ Successfully created PR with maintainer updates."
|
||||
echo "$changes"
|
||||
echo "🔗 PR URL: $pr_url"
|
||||
echo "### ✅ PR Created" >> $GITHUB_STEP_SUMMARY
|
||||
echo "[$pr_url]($pr_url)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ✅ PR Created" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "[$pr_url]($pr_url)" >> "$GITHUB_STEP_SUMMARY"
|
||||
else
|
||||
echo "❌ Failed to create or update pull request."
|
||||
echo "### ❌ PR Operation Failed" >> $GITHUB_STEP_SUMMARY
|
||||
echo "A pull request was intended but the URL was not captured. Please check the logs." >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ❌ PR Operation Failed" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "A pull request was intended but the URL was not captured. Please check the logs." >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
else
|
||||
echo "ℹ️ No changes detected - maintainers list is up to date."
|
||||
echo "### ℹ️ No Changes" >> $GITHUB_STEP_SUMMARY
|
||||
echo "The maintainers list is up-to-date. No PR was created." >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ℹ️ No Changes" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "The maintainers list is up-to-date. No PR was created." >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
if: github.repository_owner == 'nix-community'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v7
|
||||
- name: Get Nixpkgs revision from flake.lock
|
||||
id: get-nixpkgs
|
||||
run: |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Noah Biewesch <dev@noahbiewesch.com> <90870942+trueNAHO@users.noreply.github.com>
|
||||
@@ -28,7 +28,7 @@ Releases
|
||||
Home Manager is developed against `nixos-unstable` branch, which often causes
|
||||
it to contain tweaks for changes/packages not yet released in stable [NixOS][].
|
||||
To avoid breaking users' configurations, Home Manager is released in branches
|
||||
corresponding to NixOS releases (e.g. `release-25.11`). These branches get
|
||||
corresponding to NixOS releases (e.g. `release-26.05`). These branches get
|
||||
fixes, but usually not new modules. If you need a module to be backported, then
|
||||
feel free to open an issue.
|
||||
|
||||
@@ -49,7 +49,7 @@ dconf store and cannot tell whether a configuration that is about to be
|
||||
overwritten was from a previous Home Manager generation or from manual
|
||||
configuration.
|
||||
|
||||
Home Manager targets [NixOS][] unstable and NixOS version 25.11 (the current
|
||||
Home Manager targets [NixOS][] unstable and NixOS version 26.05 (the current
|
||||
stable version), it may or may not work on other Linux distributions and NixOS
|
||||
versions.
|
||||
|
||||
|
||||
+88
-33
@@ -21,6 +21,13 @@
|
||||
name = "0xda157";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
"0xdsqr" = {
|
||||
email = "me@dsqr.dev";
|
||||
github = "0xdsqr";
|
||||
githubId = 99584622;
|
||||
name = "Dave Dennis";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
"3ulalia" = {
|
||||
email = "3ulalia@proton.me";
|
||||
github = "3ulalia";
|
||||
@@ -112,6 +119,14 @@
|
||||
name = "Denis Kaynar";
|
||||
source = "home-manager";
|
||||
};
|
||||
Eveeifyeve = {
|
||||
email = "eveeg1971@gmail.com";
|
||||
github = "Eveeifyeve";
|
||||
githubId = 88671402;
|
||||
matrix = "@eveeifyeve:matrix.org";
|
||||
name = "Eveeifyeve";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
Fendse = {
|
||||
email = "46252070+Fendse@users.noreply.github.com";
|
||||
github = "Fendse";
|
||||
@@ -390,13 +405,6 @@
|
||||
name = "Sefa Eyeoglu";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
SebTM = {
|
||||
email = "mail@sebastian-sellmeier.de";
|
||||
github = "SebTM";
|
||||
githubId = 17243347;
|
||||
name = "Sebastian Sellmeier";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
ShamrockLee = {
|
||||
email = "shamrocklee@posteo.net";
|
||||
github = "ShamrockLee";
|
||||
@@ -417,6 +425,12 @@
|
||||
name = "Mel Bourgeois";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
SunOfLife1 = {
|
||||
github = "SunOfLife1";
|
||||
githubId = 30405063;
|
||||
name = "SunOfLife1";
|
||||
source = "home-manager";
|
||||
};
|
||||
Swarsel = {
|
||||
email = "leon@swarsel.win";
|
||||
github = "Swarsel";
|
||||
@@ -452,13 +466,6 @@
|
||||
name = "Vincent Breitmoser";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
Vortriz = {
|
||||
email = "vorarishi22+nix@gmail.com";
|
||||
github = "Vortriz";
|
||||
githubId = 97402159;
|
||||
name = "Rishi Vora";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
WGUNDERWOOD = {
|
||||
email = "wg.underwood13@gmail.com";
|
||||
github = "WGUNDERWOOD";
|
||||
@@ -1137,6 +1144,13 @@
|
||||
name = "Fugi";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
garklein = {
|
||||
email = "garklein97@gmail.com";
|
||||
github = "garklein";
|
||||
githubId = 63201615;
|
||||
name = "Garklein";
|
||||
source = "home-manager";
|
||||
};
|
||||
gauthsvenkat = {
|
||||
email = "gauthsvenkat+home-manager@gmail.com";
|
||||
github = "gauthsvenkat";
|
||||
@@ -1238,6 +1252,18 @@
|
||||
name = "Bhe Hongtyu";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
iamanaws = {
|
||||
email = "iamanaws@httpd.dev";
|
||||
github = "iamanaws";
|
||||
githubId = 78835633;
|
||||
keys = [
|
||||
{
|
||||
fingerprint = "CF10 DCBB 9318 BE1D 6040 4222 272C 61AB 190D ED28";
|
||||
}
|
||||
];
|
||||
name = "Angel J";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
ilaumjd = {
|
||||
email = "ilaumjd@gmail.com";
|
||||
github = "ilaumjd";
|
||||
@@ -1259,6 +1285,13 @@
|
||||
name = "Ilya Savitsky";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
isaacST08 = {
|
||||
email = "isaacst.nix@proton.me";
|
||||
github = "isaacST08";
|
||||
githubId = 106057977;
|
||||
name = "Isaac Shiells Thomas";
|
||||
source = "home-manager";
|
||||
};
|
||||
iynaix = {
|
||||
email = "iynaix@gmail.com";
|
||||
github = "iynaix";
|
||||
@@ -1456,6 +1489,13 @@
|
||||
name = "Knut Magnus Aasrud";
|
||||
source = "home-manager";
|
||||
};
|
||||
kpbaks = {
|
||||
email = "kristoffer.pbs@gmail.com";
|
||||
github = "kpbaks";
|
||||
githubId = 57013304;
|
||||
name = "Kristoffer Plagborg Bak Sørensen";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
kubukoz = {
|
||||
email = "kubukoz@gmail.com";
|
||||
github = "kubukoz";
|
||||
@@ -1825,21 +1865,9 @@
|
||||
email = "nukdokplex@nukdokplex.ru";
|
||||
github = "nukdokplex";
|
||||
githubId = 25458915;
|
||||
keys = [
|
||||
{
|
||||
fingerprint = "7CE2 4C42 942D 58EA 99F6 F00A A47E 7374 3EF6 FCC4";
|
||||
}
|
||||
];
|
||||
name = "Viktor Titov";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
nurelin = {
|
||||
email = "nurelin@users.noreply.github.com";
|
||||
github = "nurelin";
|
||||
githubId = 5276274;
|
||||
name = "nurelin";
|
||||
source = "home-manager";
|
||||
};
|
||||
nyarly = {
|
||||
email = "nyarly@gmail.com";
|
||||
github = "nyarly";
|
||||
@@ -1847,6 +1875,13 @@
|
||||
name = "Judson Lester";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
ojsef39 = {
|
||||
email = "me+github@jhofer.de";
|
||||
github = "ojsef39";
|
||||
githubId = 43563019;
|
||||
name = "Josef Hofer";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
olmokramer = {
|
||||
email = "olmokramer@users.noreply.github.com";
|
||||
github = "olmokramer";
|
||||
@@ -1937,13 +1972,6 @@
|
||||
name = "Myles Wirth";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
pinage404 = {
|
||||
email = "pinage404+nixpkgs@gmail.com";
|
||||
github = "pinage404";
|
||||
githubId = 6325757;
|
||||
name = "pinage404";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
pjones = {
|
||||
email = "pjones@devalot.com";
|
||||
github = "pjones";
|
||||
@@ -2117,6 +2145,13 @@
|
||||
name = "Robert Helgesson";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
s0racat = {
|
||||
email = "125882337+s0racat@users.noreply.github.com";
|
||||
github = "s0racat";
|
||||
githubId = 125882337;
|
||||
name = "soracat";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
sableseyler = {
|
||||
email = "sable@seyleri.us";
|
||||
github = "sableseyler";
|
||||
@@ -2129,6 +2164,13 @@
|
||||
name = "Sable Seyler";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
sei40kr = {
|
||||
email = "sei40kr@gmail.com";
|
||||
github = "sei40kr";
|
||||
githubId = 11665236;
|
||||
name = "Seong Yong-ju";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
shikanime = {
|
||||
email = "william.phetsinorath@shikanime.studio";
|
||||
github = "shikanime";
|
||||
@@ -2382,6 +2424,13 @@
|
||||
name = "Xavier Lambein";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
yaaaarn = {
|
||||
email = "30006414+yaaaarn@users.noreply.github.com";
|
||||
github = "yaaaarn";
|
||||
githubId = 30006414;
|
||||
name = "yarncat";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
yethal = {
|
||||
github = "yethal";
|
||||
githubId = 26117918;
|
||||
@@ -2400,6 +2449,12 @@
|
||||
name = "Jona Abdinghoff";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
zh4ngx = {
|
||||
github = "zh4ngx";
|
||||
githubId = 1329212;
|
||||
name = "Andy Zhang";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
zorrobert = {
|
||||
email = "118135271+zorrobert@users.noreply.github.com";
|
||||
github = "zorrobert";
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
lib,
|
||||
nix,
|
||||
runCommand,
|
||||
}:
|
||||
let
|
||||
home-manager =
|
||||
with lib.fileset;
|
||||
toSource {
|
||||
root = ../.;
|
||||
fileset = (fileFilter (file: file.hasExt "nix") ../.);
|
||||
};
|
||||
parseLog = "$TMPDIR/nix-parse.log";
|
||||
in
|
||||
runCommand "nix-parse-${nix.name}"
|
||||
{
|
||||
nativeBuildInputs = [
|
||||
nix
|
||||
];
|
||||
}
|
||||
''
|
||||
export NIX_STORE_DIR=$TMPDIR/store
|
||||
export NIX_STATE_DIR=$TMPDIR/state
|
||||
nix-store --init
|
||||
|
||||
cd "${home-manager}"
|
||||
|
||||
# This will only show the first parse error, not all of them. That's fine, because
|
||||
# the other CI jobs will report in more detail. This job is about checking parsing
|
||||
# across different implementations / versions, not about providing the best DX.
|
||||
# Returning all parse errors requires significantly more resources.
|
||||
if ! find . -type f -iname '*.nix' | xargs -P $(nproc) nix-instantiate --parse 2> "${parseLog}" > /dev/null; then
|
||||
cat "${parseLog}" >&2
|
||||
echo "Parse failed in nix-instantiate." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if grep "warning" "${parseLog}"; then
|
||||
cat "${parseLog}" >&2
|
||||
echo "Failing due to warnings in stderr" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
touch $out
|
||||
''
|
||||
Generated
+4
-4
@@ -2,16 +2,16 @@
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1773821835,
|
||||
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
|
||||
"lastModified": 1779622335,
|
||||
"narHash": "sha256-ViA62qtL5za7V3d5I8OA9q9JcFhsVAiL5jVHwEclWqk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
|
||||
"rev": "705e9929918b43bd7b715dc0a878ac870449bb03",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"ref": "nixos-26.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
description = "Support developing Home Manager documentation";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
||||
scss-reset = {
|
||||
url = "github:andreymatin/scss-reset/1.4.2";
|
||||
flake = false;
|
||||
|
||||
@@ -20,10 +20,22 @@ this package. This can typically be done in two ways.
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
let
|
||||
|
||||
pkgsUnstable = import <nixpkgs-unstable> {};
|
||||
|
||||
in
|
||||
{
|
||||
programs.beets.package = pkgsUnstable.beets;
|
||||
|
||||
# …
|
||||
}
|
||||
```
|
||||
|
||||
should work OK. With flakes, pass the unstable package set as
|
||||
described in
|
||||
[How do I install packages from Nixpkgs unstable?](#_how_do_i_install_packages_from_nixpkgs_unstable)
|
||||
and then use the extra module argument:
|
||||
|
||||
``` nix
|
||||
{ pkgsUnstable, ... }:
|
||||
|
||||
{
|
||||
programs.beets.package = pkgsUnstable.beets;
|
||||
@@ -32,9 +44,7 @@ this package. This can typically be done in two ways.
|
||||
}
|
||||
```
|
||||
|
||||
should work OK.
|
||||
|
||||
3. If no `package` option is available then you can typically change
|
||||
2. If no `package` option is available then you can typically change
|
||||
the relevant package using an
|
||||
[overlay](https://nixos.org/nixpkgs/manual/#chap-overlays).
|
||||
|
||||
@@ -45,16 +55,14 @@ this package. This can typically be done in two ways.
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
let
|
||||
|
||||
pkgsUnstable = import <nixpkgs-unstable> {};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
programs.skim.enable = true;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
(_final: _prev: {
|
||||
skim = pkgsUnstable.skim;
|
||||
})
|
||||
];
|
||||
@@ -64,3 +72,46 @@ this package. This can typically be done in two ways.
|
||||
```
|
||||
|
||||
should work OK.
|
||||
|
||||
The same Home Manager overlay works in a flake-based standalone
|
||||
configuration if `pkgsUnstable` is passed to the Home Manager
|
||||
module:
|
||||
|
||||
``` nix
|
||||
{ pkgsUnstable, ... }:
|
||||
|
||||
{
|
||||
programs.skim.enable = true;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(_final: _prev: {
|
||||
skim = pkgsUnstable.skim;
|
||||
})
|
||||
];
|
||||
|
||||
# …
|
||||
}
|
||||
```
|
||||
|
||||
This also works when Home Manager is used as a NixOS or nix-darwin
|
||||
module without `home-manager.useGlobalPkgs = true`. If
|
||||
`home-manager.useGlobalPkgs = true` is enabled, Home Manager uses
|
||||
the system package set and the `nixpkgs.*` options inside Home
|
||||
Manager are disabled. In that case, put the overlay in the system
|
||||
configuration instead, for example:
|
||||
|
||||
``` nix
|
||||
{ pkgsUnstable, ... }:
|
||||
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(_final: _prev: {
|
||||
skim = pkgsUnstable.skim;
|
||||
})
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
In a flake-based NixOS or nix-darwin configuration, pass
|
||||
`pkgsUnstable` to `nixosSystem` or `darwinSystem` with
|
||||
`specialArgs`.
|
||||
|
||||
@@ -3,22 +3,20 @@
|
||||
If you are using a stable version of Nixpkgs but would like to install
|
||||
some particular packages from Nixpkgs unstable -- or some other channel
|
||||
-- then you can import the unstable Nixpkgs and refer to its packages
|
||||
within your configuration. Something like
|
||||
within your configuration.
|
||||
|
||||
With channels, something like
|
||||
|
||||
``` nix
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
let
|
||||
|
||||
pkgsUnstable = import <nixpkgs-unstable> {};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
home.packages = [
|
||||
pkgsUnstable.foo
|
||||
];
|
||||
|
||||
# …
|
||||
}
|
||||
```
|
||||
@@ -32,5 +30,82 @@ $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs-unstable
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
Note, the package will not be affected by any package overrides,
|
||||
overlays, etc.
|
||||
With flakes, add another Nixpkgs input and pass its packages to your
|
||||
Home Manager modules. For example, a standalone Home Manager flake can
|
||||
define the following. Replace 25.11 with the release branch your
|
||||
configuration follows.
|
||||
|
||||
``` nix
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
home-manager.url = "github:nix-community/home-manager/release-25.11";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ nixpkgs, nixpkgs-unstable, home-manager, ... }:
|
||||
let
|
||||
# Replace this with the system of your Home Manager configuration.
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
pkgsUnstable = nixpkgs-unstable.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
homeConfigurations.jdoe = home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
extraSpecialArgs = { inherit pkgsUnstable; };
|
||||
modules = [ ./home.nix ];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
and then use the extra argument in `home.nix`:
|
||||
|
||||
``` nix
|
||||
{ pkgsUnstable, ... }:
|
||||
|
||||
{
|
||||
home.packages = [
|
||||
pkgsUnstable.foo
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
When Home Manager is used as a NixOS or nix-darwin module, pass the
|
||||
extra package set with `home-manager.extraSpecialArgs` in the system
|
||||
configuration:
|
||||
|
||||
``` nix
|
||||
outputs =
|
||||
{ nixpkgs, nixpkgs-unstable, home-manager, ... }:
|
||||
let
|
||||
# Replace this with the system of your NixOS or nix-darwin configuration.
|
||||
system = "x86_64-linux";
|
||||
in
|
||||
{
|
||||
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
modules = [
|
||||
home-manager.nixosModules.home-manager
|
||||
({ config, ... }: {
|
||||
home-manager.extraSpecialArgs = {
|
||||
pkgsUnstable = import nixpkgs-unstable {
|
||||
inherit system;
|
||||
config = config.nixpkgs.config;
|
||||
overlays = config.nixpkgs.overlays;
|
||||
};
|
||||
|
||||
# If you use a stock Nixpkgs configuration, you can use:
|
||||
# pkgsUnstable = nixpkgs-unstable.legacyPackages.${system};
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
The nix-darwin setup is the same pattern with
|
||||
`darwin.lib.darwinSystem` and
|
||||
`home-manager.darwinModules.home-manager`.
|
||||
|
||||
@@ -5,9 +5,9 @@ environments directly from the
|
||||
[nix-darwin](https://github.com/nix-darwin/nix-darwin/) configuration file,
|
||||
which often is more convenient than using the `home-manager` tool.
|
||||
|
||||
To make the NixOS module available for use you must `import` it into
|
||||
your system configuration. This is most conveniently done by adding a
|
||||
Home Manager channel. For example, if you are following Nixpkgs master
|
||||
To make the nix-darwin module available for use you must `import` it
|
||||
into your system configuration. This is most conveniently done by adding
|
||||
a Home Manager channel. For example, if you are following Nixpkgs master
|
||||
or an unstable channel, you can run
|
||||
|
||||
``` shell
|
||||
@@ -15,10 +15,10 @@ $ nix-channel --add https://github.com/nix-community/home-manager/archive/master
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
and if you follow a Nixpkgs version 25.11 channel, you can run
|
||||
and if you follow a Nixpkgs version 26.05 channel, you can run
|
||||
|
||||
``` shell
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
@@ -28,9 +28,9 @@ It is then possible to add
|
||||
imports = [ <home-manager/nix-darwin> ];
|
||||
```
|
||||
|
||||
to your nix-darwin `configuration.nix` file, which will introduce a new
|
||||
NixOS option called `home-manager` whose type is an attribute set that
|
||||
maps user names to Home Manager configurations.
|
||||
to your nix-darwin `configuration.nix` file, which will introduce a
|
||||
`home-manager.users` option whose type is an attribute set that maps
|
||||
user names to Home Manager configurations.
|
||||
|
||||
For example, a nix-darwin configuration may include the lines
|
||||
|
||||
@@ -45,7 +45,7 @@ home-manager.users.eve = { pkgs, ... }: {
|
||||
|
||||
# The state version is required and should stay at the version you
|
||||
# originally installed.
|
||||
home.stateVersion = "25.11";
|
||||
home.stateVersion = "26.05";
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@ $ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/m
|
||||
$ sudo nix-channel --update
|
||||
```
|
||||
|
||||
and if you follow a Nixpkgs version 25.11 channel, you can run
|
||||
and if you follow a Nixpkgs version 26.05 channel, you can run
|
||||
|
||||
``` shell
|
||||
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
|
||||
$ sudo nix-channel --update
|
||||
```
|
||||
|
||||
@@ -39,7 +39,7 @@ Alternatively, home-manager installation can be done declaratively through confi
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
home-manager = builtins.fetchTarball https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz;
|
||||
home-manager = builtins.fetchTarball https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz;
|
||||
in
|
||||
{
|
||||
imports =
|
||||
@@ -54,7 +54,7 @@ in
|
||||
|
||||
# The state version is required and should stay at the version you
|
||||
# originally installed.
|
||||
home.stateVersion = "25.11";
|
||||
home.stateVersion = "26.05";
|
||||
};
|
||||
}
|
||||
```
|
||||
@@ -74,7 +74,7 @@ home-manager.users.eve = { pkgs, ... }: {
|
||||
# You should not change this value, even if you update Home Manager. If you do
|
||||
# want to update the value, then make sure to first check the Home Manager
|
||||
# release notes.
|
||||
home.stateVersion = "25.11"; # Please read the comment before changing.
|
||||
home.stateVersion = "26.05"; # Please read the comment before changing.
|
||||
|
||||
};
|
||||
```
|
||||
@@ -154,4 +154,3 @@ you create. This contains the system's NixOS configuration.
|
||||
|
||||
Once installed you can see [Using Home Manager](#ch-usage) for a more detailed
|
||||
description of Home Manager and how to use it.
|
||||
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
and if you follow a Nixpkgs version 25.11 channel you can run
|
||||
and if you follow a Nixpkgs version 26.05 channel you can run
|
||||
|
||||
``` shell
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-26.05.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Home Manager Manual {#home-manager-manual}
|
||||
|
||||
## Version 26.05 (unstable)
|
||||
## Version 26.05
|
||||
|
||||
|
||||
```{=include=} preface
|
||||
|
||||
@@ -20,10 +20,32 @@ flake in three ways:
|
||||
`nixos-rebuild`. See [NixOS module](#sec-flakes-nixos-module) for a
|
||||
description of this setup.
|
||||
|
||||
3. This allows the user profiles to be built together with the system
|
||||
when running `darwin-rebuild`. See [nix-darwin
|
||||
module](#sec-flakes-nix-darwin-module) for a description of this
|
||||
setup.
|
||||
3. As a module within a [nix-darwin](https://github.com/nix-darwin/nix-darwin/)
|
||||
system configuration. This allows the user profiles to be built
|
||||
together with the system when running `darwin-rebuild`. See
|
||||
[nix-darwin module](#sec-flakes-nix-darwin-module) for a
|
||||
description of this setup.
|
||||
|
||||
Advanced users may want Home Manager's `nixpkgs` input to follow the
|
||||
same Nixpkgs input as the rest of their flake. This avoids a second
|
||||
Nixpkgs input and makes Home Manager use the same pinned Nixpkgs source
|
||||
revision as the rest of the configuration:
|
||||
|
||||
``` nix
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
```
|
||||
|
||||
This removes the compatibility assumption between Home Manager and the
|
||||
Nixpkgs revision in Home Manager's own lock file, so use it carefully,
|
||||
especially when tracking unstable branches.
|
||||
|
||||
This does not by itself make Home Manager use the same `pkgs` value as
|
||||
your NixOS or nix-darwin system. In NixOS and nix-darwin module setups,
|
||||
`home-manager.useGlobalPkgs = true` controls that behavior by making
|
||||
Home Manager modules receive the system `pkgs` value. When
|
||||
`home-manager.useGlobalPkgs` is enabled, configure Nixpkgs overlays and
|
||||
configuration at the system level instead of through Home Manager
|
||||
`nixpkgs.*` options.
|
||||
|
||||
```{=include=} sections
|
||||
nix-flakes/prerequisites.md
|
||||
@@ -32,5 +54,3 @@ nix-flakes/nixos.md
|
||||
nix-flakes/nix-darwin.md
|
||||
nix-flakes/flake-parts.md
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ Manager's flake module, `flakeModules.home-manager`.
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
};
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ to that of NixOS. The `flake.nix` would be:
|
||||
darwin.url = "github:nix-darwin/nix-darwin";
|
||||
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs = inputs@{ nixpkgs, home-manager, darwin, ... }: {
|
||||
@@ -25,10 +24,8 @@ to that of NixOS. The `flake.nix` would be:
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.jdoe = ./home.nix;
|
||||
|
||||
# Optionally, use home-manager.extraSpecialArgs to pass
|
||||
# arguments to home.nix
|
||||
}
|
||||
];
|
||||
};
|
||||
@@ -37,8 +34,19 @@ to that of NixOS. The `flake.nix` would be:
|
||||
}
|
||||
```
|
||||
|
||||
Use `home-manager.extraSpecialArgs` to pass arguments from your flake to
|
||||
`home.nix` and any imported Home Manager modules. For example, the
|
||||
configuration above makes the complete `inputs` attrset available to modules,
|
||||
so they can declare arguments such as `{ inputs, ... }:`.
|
||||
|
||||
The lower-level mechanism behind this is `_module.args`. Set
|
||||
`_module.args.<name>` from inside a module only when you need to provide a
|
||||
module argument from within the module graph itself. For values that originate
|
||||
outside the module graph, such as flake inputs, prefer
|
||||
`home-manager.extraSpecialArgs`.
|
||||
|
||||
and it is also rebuilt with the nix-darwin generations. The rebuild
|
||||
command here may be `darwin-rebuild switch --flake <flake-uri>`.
|
||||
command here may be `darwin-rebuild switch --flake ~/.config/darwin`.
|
||||
|
||||
You can use the above `flake.nix` as a template in `~/.config/darwin` by
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ be as follows:
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs = inputs@{ nixpkgs, home-manager, ... }: {
|
||||
@@ -23,10 +22,8 @@ be as follows:
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.jdoe = ./home.nix;
|
||||
|
||||
# Optionally, use home-manager.extraSpecialArgs to pass
|
||||
# arguments to home.nix
|
||||
}
|
||||
];
|
||||
};
|
||||
@@ -35,10 +32,24 @@ be as follows:
|
||||
}
|
||||
```
|
||||
|
||||
Use `home-manager.extraSpecialArgs` to pass arguments from your flake to
|
||||
`home.nix` and any imported Home Manager modules. For example, the
|
||||
configuration above makes the complete `inputs` attrset available to modules,
|
||||
so they can declare arguments such as `{ inputs, ... }:`.
|
||||
|
||||
The lower-level mechanism behind this is `_module.args`. Set
|
||||
`_module.args.<name>` from inside a module only when you need to provide a
|
||||
module argument from within the module graph itself. For values that originate
|
||||
outside the module graph, such as flake inputs, prefer
|
||||
`home-manager.extraSpecialArgs`.
|
||||
|
||||
The Home Manager configuration is then part of the NixOS configuration
|
||||
and is automatically rebuilt with the system when using the appropriate
|
||||
command for the system, such as
|
||||
`nixos-rebuild switch --flake <flake-uri>`.
|
||||
|
||||
``` shell
|
||||
$ nixos-rebuild switch --flake /etc/nixos
|
||||
```
|
||||
|
||||
You can use the above `flake.nix` as a template in `/etc/nixos` by
|
||||
|
||||
|
||||
@@ -11,15 +11,44 @@ then to generate and activate a basic configuration run the command
|
||||
$ nix run home-manager/master -- init --switch
|
||||
```
|
||||
|
||||
For Nixpkgs or NixOS version 25.11 run
|
||||
For Nixpkgs or NixOS version 26.05 run
|
||||
|
||||
``` shell
|
||||
$ nix run home-manager/release-25.11 -- init --switch
|
||||
$ nix run home-manager/release-26.05 -- init --switch
|
||||
```
|
||||
|
||||
This will generate a `flake.nix` and a `home.nix` file in
|
||||
`~/.config/home-manager`, creating the directory if it does not exist.
|
||||
|
||||
If you need to pass additional values from your flake to `home.nix` or any
|
||||
imported Home Manager modules, use `extraSpecialArgs` in the call to
|
||||
`home-manager.lib.homeManagerConfiguration`:
|
||||
|
||||
``` nix
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
};
|
||||
|
||||
outputs = inputs@{ nixpkgs, home-manager, ... }: {
|
||||
homeConfigurations.jdoe = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
modules = [ ./home.nix ];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Any attribute in `extraSpecialArgs` becomes a module argument, so `home.nix`
|
||||
or imported modules can declare arguments such as `{ inputs, ... }:`.
|
||||
|
||||
The lower-level mechanism behind this is `_module.args`. Set
|
||||
`_module.args.<name>` from inside a module only when you need to provide a
|
||||
module argument from within the module graph itself. For values that originate
|
||||
outside the module graph, such as flake inputs, prefer `extraSpecialArgs`.
|
||||
|
||||
If you omit the `--switch` option then the activation will not happen.
|
||||
This is useful if you want to inspect and edit the configuration before
|
||||
activating it.
|
||||
@@ -30,7 +59,7 @@ $ # Edit files in ~/.config/home-manager
|
||||
$ nix run home-manager/$branch -- init --switch
|
||||
```
|
||||
|
||||
Where `$branch` is one of `master` or `release-25.11`.
|
||||
Where `$branch` is one of `master` or `release-26.05`.
|
||||
|
||||
After the initial activation has completed successfully then building
|
||||
and activating your flake-based configuration is as simple as
|
||||
@@ -49,14 +78,13 @@ $ home-manager switch --flake ~/hmconf
|
||||
```
|
||||
|
||||
::: {.note}
|
||||
The flake inputs are not automatically updated by Home Manager. You need
|
||||
to use the standard `nix flake update` command for that.
|
||||
The flake inputs are not automatically updated by Home Manager. Update
|
||||
the lock file with `nix flake update` before switching if you want to
|
||||
use newer input revisions.
|
||||
|
||||
If you only want to update a single flake input, then the command
|
||||
`nix flake lock --update-input <input>` can be used.
|
||||
If you only want to update specific flake inputs, name them explicitly,
|
||||
for example `nix flake update nixpkgs home-manager`.
|
||||
|
||||
You can also pass flake-related options such as `--recreate-lock-file`
|
||||
or `--update-input <input>` to `home-manager` when building or
|
||||
switching, and these options will be forwarded to `nix build`. See the
|
||||
[NixOS Wiki page](https://wiki.nixos.org/wiki/Flakes) for details.
|
||||
These commands assume that your current directory is the flake. If not,
|
||||
pass the flake path or URI with `--flake <flake-uri>`.
|
||||
:::
|
||||
|
||||
@@ -60,6 +60,7 @@ usage/rollbacks.md
|
||||
usage/dotfiles.md
|
||||
usage/graphical.md
|
||||
usage/gpu-non-nixos.md
|
||||
usage/modular-services.md
|
||||
usage/updating.md
|
||||
usage/upgrading.md
|
||||
```
|
||||
|
||||
@@ -20,7 +20,7 @@ A fresh install of Home Manager will generate a minimal
|
||||
# You can update Home Manager without changing this value. See
|
||||
# the Home Manager release notes for a list of state version
|
||||
# changes in each release.
|
||||
home.stateVersion = "25.11";
|
||||
home.stateVersion = "26.05";
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
@@ -65,7 +65,7 @@ follows:
|
||||
# You can update Home Manager without changing this value. See
|
||||
# the Home Manager release notes for a list of state version
|
||||
# changes in each release.
|
||||
home.stateVersion = "25.11";
|
||||
home.stateVersion = "26.05";
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
@@ -34,3 +34,136 @@ Activating checkLinkTargets
|
||||
Existing file '/home/jdoe/.config/git/config' is in the way
|
||||
Please move the above files and try again
|
||||
```
|
||||
|
||||
This error is about a file that Home Manager wants to manage as a
|
||||
symbolic link in your home directory. It is separate from package
|
||||
profile collisions, which usually mention `installPackages` or a
|
||||
`collision between .../bin/...` path. For package collisions, see
|
||||
[Why is there a collision error when switching generation?](#_why_is_there_a_collision_error_when_switching_generation).
|
||||
|
||||
## Resolving file collisions {#sec-usage-dotfiles-collisions}
|
||||
|
||||
The safest resolution is to inspect the existing path, move any
|
||||
settings you want Home Manager to manage into your configuration, and
|
||||
remove or move the unmanaged file before switching again.
|
||||
|
||||
For a standalone Home Manager installation, you can ask Home Manager to
|
||||
move unmanaged non-symlink paths out of the way during activation:
|
||||
|
||||
``` shell
|
||||
home-manager switch -b backup
|
||||
```
|
||||
|
||||
With the command above, a colliding `~/.config/git/config` is moved to
|
||||
`~/.config/git/config.backup` before Home Manager links the managed
|
||||
file. If the backup path already exists then activation still aborts, so
|
||||
choose an extension whose backup path does not already exist.
|
||||
|
||||
Standalone activation can also run a custom command for each collision:
|
||||
|
||||
``` shell
|
||||
home-manager switch -B trash-put
|
||||
```
|
||||
|
||||
The command receives the colliding path as an argument and must move or
|
||||
remove that path. If both `-B` and `-b` are set, the custom command takes
|
||||
precedence; the command may still use the
|
||||
`HOME_MANAGER_BACKUP_EXT` environment variable set by `-b`.
|
||||
|
||||
When Home Manager is used as a NixOS or nix-darwin module, configure the
|
||||
corresponding module options instead of passing standalone command line
|
||||
flags:
|
||||
|
||||
``` nix
|
||||
{
|
||||
home-manager.backupFileExtension = "backup";
|
||||
}
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
``` nix
|
||||
{
|
||||
home-manager.backupCommand = "${pkgs.trash-cli}/bin/trash-put";
|
||||
}
|
||||
```
|
||||
|
||||
If both {option}`home-manager.backupCommand` and
|
||||
{option}`home-manager.backupFileExtension` are set, the command takes
|
||||
precedence. The extension is still exported to the command as
|
||||
`HOME_MANAGER_BACKUP_EXT`, so the command can use it when implementing
|
||||
its own backup naming. With
|
||||
{option}`home-manager.backupFileExtension`, Home Manager refuses to
|
||||
replace an existing backup path unless
|
||||
{option}`home-manager.overwriteBackup` is enabled:
|
||||
|
||||
``` nix
|
||||
{
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.overwriteBackup = true;
|
||||
}
|
||||
```
|
||||
|
||||
::: {.warning}
|
||||
{option}`home-manager.overwriteBackup` allows activation to clobber
|
||||
existing backup files. Only enable it when those backup paths are
|
||||
disposable.
|
||||
:::
|
||||
|
||||
For individual files, many file options also support `force = true`:
|
||||
|
||||
``` nix
|
||||
{
|
||||
home.file.".config/example" = {
|
||||
source = ./example;
|
||||
force = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
This skips the collision check for the affected target and lets Home
|
||||
Manager replace the existing file or link. Use it sparingly; it can
|
||||
silently delete local changes.
|
||||
|
||||
Backup commands and backup extensions are intended for unmanaged
|
||||
non-symlink paths. If the colliding target is an unmanaged symbolic
|
||||
link, move it manually or use `force = true` after checking that the
|
||||
link target is safe to replace.
|
||||
|
||||
## Advanced file behavior {#sec-usage-dotfiles-advanced}
|
||||
|
||||
The notes below apply to {option}`home.file` and to options based on the
|
||||
same file type, such as {option}`xdg.configFile`.
|
||||
|
||||
When a file source is a directory, {option}`home.file.<name>.recursive`
|
||||
changes how the directory is linked. With the default `recursive =
|
||||
false`, the target is one symbolic link to the source directory. With
|
||||
`recursive = true`, Home Manager creates a matching directory tree and
|
||||
links each leaf file into it.
|
||||
|
||||
Recursive directory linking has special overlap behavior. A direct
|
||||
duplicate target, such as two managed files both targeting `foo`, is an
|
||||
error. If a recursively linked directory provides `foo/bar` and another
|
||||
managed file also targets `foo/bar`, Home Manager keeps the recursive
|
||||
file by default and ignores the overlapping regular file.
|
||||
|
||||
The {option}`home.file.<name>.onChange` hook runs after the new files
|
||||
are linked. For recursive file entries, the hook is always run, so it
|
||||
should be written to be safe even when no leaf file actually changed.
|
||||
|
||||
Normally a path assigned to {option}`home.file.<name>.source` is copied
|
||||
or linked through the Nix store. To make Home Manager create a link to a
|
||||
live path outside the store, use
|
||||
`config.lib.file.mkOutOfStoreSymlink`:
|
||||
|
||||
``` nix
|
||||
{ config, ... }:
|
||||
|
||||
{
|
||||
home.file.".config/example".source =
|
||||
config.lib.file.mkOutOfStoreSymlink ./example;
|
||||
}
|
||||
```
|
||||
|
||||
This is useful when the target should follow changes to a mutable file
|
||||
or directory outside the store.
|
||||
|
||||
@@ -38,16 +38,17 @@ GPU drivers require an update, run
|
||||
|
||||
Because the `/run` directory is volatile and disappears on reboot, libraries
|
||||
cannot be simply copied or linked there. The `non-nixos-gpu-setup` script
|
||||
installs a Systemd service which ensures that the drivers are linked to
|
||||
`/run/opengl-driver` on boot. Home Manager will always check and warn you when
|
||||
this setup needs to be refreshed.
|
||||
installs a
|
||||
[`tmpfiles.d`](https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html)
|
||||
config which ensures that the drivers are linked to `/run/opengl-driver` on
|
||||
boot. Home Manager will always check and warn you when this setup needs to be
|
||||
refreshed.
|
||||
|
||||
If you ever wish to uninstall these drivers, all you need to do is
|
||||
|
||||
```sh
|
||||
sudo rm /run/opengl-driver
|
||||
sudo systemctl disable --now non-nixos-gpu.service
|
||||
sudo rm /etc/systemd/system/non-nixos-gpu.service
|
||||
sudo rm /etc/tmpfiles.d/non-nixos-gpu.conf
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# Modular Services {#sec-usage-modular-services}
|
||||
|
||||
Home Manager supports nixpkgs
|
||||
[modular services](https://nixos.org/manual/nixos/unstable/#modular-services)
|
||||
under [](#opt-home.services). This is the Home Manager analog to the
|
||||
NixOS `system.services` namespace: each entry is an abstract service
|
||||
sourced from `<nixpkgs/lib/services/lib.nix>` with the upstream portable
|
||||
systemd module loaded into it, so service modules shipped with packages
|
||||
(e.g. `pkgs.<name>.passthru.services.default`) drop in unchanged --
|
||||
the same module evaluates on NixOS and on Home Manager.
|
||||
|
||||
A minimal example -- run mpd as a user service:
|
||||
|
||||
```nix
|
||||
{ pkgs, ... }: {
|
||||
home.services.mpd = {
|
||||
process.argv = [ "${pkgs.mpd}/bin/mpd" "--no-daemon" ];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
This produces `~/.config/systemd/user/mpd.service` with `ExecStart` set
|
||||
to the mpd binary and `WantedBy=default.target`.
|
||||
|
||||
Each service exposes the upstream NixOS-style schema: [`process.argv`],
|
||||
`systemd.lib`, `systemd.mainExecStart`, `systemd.service`,
|
||||
`systemd.services`, `systemd.sockets`. Lifted units are translated from
|
||||
NixOS-style attrs (`wantedBy`, `serviceConfig`, `unitConfig`,
|
||||
`environment`, ...) into the section-based INI shape
|
||||
(`{ Unit; Service; Install; }`) that Home Manager's
|
||||
[](#opt-systemd.user.services) consumes. Only common keys are mapped
|
||||
explicitly; uncommon options remain reachable via `unitConfig`,
|
||||
`serviceConfig`, or `socketConfig`.
|
||||
|
||||
Sub-services (nested `services.<sub>` inside another service) and their
|
||||
units are dashed under the parent service name. The empty unit key
|
||||
`""` denotes the service's *primary* unit (lifted to a unit named
|
||||
after the service itself); [`process.argv`] becomes the default
|
||||
`ExecStart` for that unit, which defaults to `WantedBy=default.target`.
|
||||
|
||||
## Reusing upstream package modules {#sec-usage-modular-services-upstream}
|
||||
|
||||
Modular services exposed by packages under
|
||||
`pkgs.<name>.passthru.services.default` can be imported directly.
|
||||
For example, `pkgs.php`'s [`php-fpm`]:
|
||||
|
||||
```nix
|
||||
{ pkgs, ... }: {
|
||||
home.services."php-fpm" = {
|
||||
imports = [ pkgs.php.passthru.services.default ];
|
||||
configData."php-fpm.conf".source = builtins.elemAt config.home.services.php-fpm.process.argv 2;
|
||||
php-fpm.settings.mypool = {
|
||||
listen = "127.0.0.1:9000";
|
||||
# FIXME: required by upstream modular service, but ignored when run as user
|
||||
"user" = "";
|
||||
"pm" = "dynamic";
|
||||
"pm.max_children" = 75;
|
||||
"pm.min_spare_servers" = 5;
|
||||
"pm.max_spare_servers" = 20;
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Some packages ship modules written for system services that include
|
||||
directives the user-session manager cannot honour (`DynamicUser`,
|
||||
`AmbientCapabilities`, ...). The unit is still generated with those
|
||||
directives -- user systemd silently ignores what it cannot apply.
|
||||
`WantedBy=multi-user.target` is automatically normalized to
|
||||
`WantedBy=default.target`. Other directives can be overridden per
|
||||
service:
|
||||
|
||||
```nix
|
||||
home.services."tunnel" = {
|
||||
imports = [ pkgs.ghostunnel.passthru.services.default ];
|
||||
# ...
|
||||
systemd.services."tunnel".serviceConfig.DynamicUser = lib.mkForce false;
|
||||
};
|
||||
```
|
||||
|
||||
## Configuration data {#sec-usage-modular-services-configdata}
|
||||
|
||||
Each service can declare configuration files via `configData.<name>`.
|
||||
These are materialized at `$XDG_CONFIG_HOME/home-services/<service>/<name>`
|
||||
(mirroring how NixOS lifts `configData` to `environment.etc`), with the
|
||||
absolute path injected back into `configData.<name>.path` so the service
|
||||
can refer to its files at a stable location:
|
||||
|
||||
```nix
|
||||
{ config, ... }:
|
||||
{
|
||||
home.services.demo = {
|
||||
process.argv = [ "/bin/myapp" "--config" config.home.services.demo.configData."app.toml".path ];
|
||||
configData."app.toml".text = ''
|
||||
port = 1234
|
||||
'';
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
The store paths of all enabled `configData` entries are automatically
|
||||
added to the primary unit's `X-Reload-Triggers`, so `home-manager switch`
|
||||
restarts the service whenever any of its configuration files change. To
|
||||
reload instead of restart, override `X-SwitchMethod`:
|
||||
|
||||
```nix
|
||||
home.services.demo.systemd.services."".unitConfig.X-SwitchMethod = "reload";
|
||||
```
|
||||
|
||||
## Scope notes {#sec-usage-modular-services-scope}
|
||||
|
||||
Home Manager mirrors the surface of nixpkgs' portable systemd module:
|
||||
services and sockets only. Other unit kinds Home Manager supports
|
||||
natively under [](#opt-systemd.user.services) (timers, paths, mounts, ...)
|
||||
are intentionally not modeled on `home.services` until upstream grows them,
|
||||
to keep both surfaces aligned.
|
||||
|
||||
[`process.argv`]: https://nixos.org/manual/nixos/unstable/#service-opt-process.argv
|
||||
[`php-fpm`]: https://nixos.org/manual/nixos/stable/options#opt-_imports_=___pkgs.php.services.default___
|
||||
@@ -1,8 +1,64 @@
|
||||
# Updating {#sec-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.
|
||||
Updating means moving to a newer revision of the Home Manager branch
|
||||
that your configuration already follows. For example, a configuration
|
||||
using `release-25.11` can update to a newer revision of `release-25.11`
|
||||
without changing release branches.
|
||||
|
||||
If you want to move from one release branch to another, such as
|
||||
`release-25.05` to `release-25.11`, or between a release branch and
|
||||
`master`, see
|
||||
[Upgrading to a new Home Manager release](#sec-upgrade-release).
|
||||
|
||||
## Flake-Based Configurations {#sec-updating-flakes}
|
||||
|
||||
Flake inputs are pinned in `flake.lock`, and Home Manager will keep using
|
||||
the pinned revisions until you update that lock file.
|
||||
|
||||
To update all inputs in the flake:
|
||||
|
||||
``` shell
|
||||
$ nix flake update
|
||||
```
|
||||
|
||||
To update only specific inputs, name them explicitly:
|
||||
|
||||
``` shell
|
||||
$ nix flake update home-manager nixpkgs
|
||||
```
|
||||
|
||||
These commands assume that your current directory is the flake. If not,
|
||||
pass the flake path or URI with `--flake <flake-uri>`.
|
||||
|
||||
After updating the lock file, rebuild with the command for your
|
||||
installation method.
|
||||
|
||||
For a standalone Home Manager flake:
|
||||
|
||||
``` shell
|
||||
$ home-manager switch --flake .
|
||||
```
|
||||
|
||||
For Home Manager as a NixOS module:
|
||||
|
||||
``` shell
|
||||
$ sudo nixos-rebuild switch --flake .
|
||||
```
|
||||
|
||||
For Home Manager as a nix-darwin module:
|
||||
|
||||
``` shell
|
||||
$ darwin-rebuild switch --flake .
|
||||
```
|
||||
|
||||
## Channel-Based Configurations {#sec-updating-channels}
|
||||
|
||||
Channels are mutable references outside the Home Manager configuration
|
||||
itself. Updating a channel moves it to a newer revision of the same
|
||||
channel or branch.
|
||||
|
||||
For a standalone Home Manager channel installation, update the user's
|
||||
channels and then switch:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --update
|
||||
@@ -10,3 +66,19 @@ $ nix-channel --update
|
||||
unpacking channels...
|
||||
$ home-manager switch
|
||||
```
|
||||
|
||||
For Home Manager as a NixOS module, update the root user's Home Manager
|
||||
channel and rebuild the system:
|
||||
|
||||
``` shell
|
||||
$ sudo nix-channel --update home-manager
|
||||
$ sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
For Home Manager as a nix-darwin module, update the Home Manager channel
|
||||
used by your nix-darwin configuration and rebuild the system:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --update home-manager
|
||||
$ darwin-rebuild switch
|
||||
```
|
||||
|
||||
+111
-57
@@ -2,66 +2,47 @@
|
||||
|
||||
## Overview {#sec-upgrade-release-overview}
|
||||
|
||||
When upgrading NixOS to a new major version (e.g., from 24.11 to
|
||||
25.05), you also need to upgrade your Home Manager channel to maintain
|
||||
compatibility. This guide covers the proper steps to upgrade Home
|
||||
Manager channels for NixOS 25.05.
|
||||
When moving your configuration to a new Nixpkgs release branch, you
|
||||
should also move Home Manager to the matching release branch. On NixOS
|
||||
this usually means upgrading Home Manager together with NixOS. On
|
||||
standalone and nix-darwin installations, match Home Manager to the
|
||||
Nixpkgs branch used by your configuration. The examples below use 25.11;
|
||||
replace this with the release branch you are upgrading to.
|
||||
|
||||
If your configuration follows `nixos-unstable` or `nixpkgs-unstable`,
|
||||
use Home Manager's `master` branch.
|
||||
|
||||
## Understanding Home Manager Versioning {#sec-upgrade-release-understanding-versioning}
|
||||
|
||||
Home Manager follows NixOS release cycles and provides corresponding branches:
|
||||
|
||||
- **release-##.##**: Stable branch for NixOS ##.## (current stable)
|
||||
- **release-<version>**: Stable branch for the matching NixOS or
|
||||
Nixpkgs release, such as `release-25.11`.
|
||||
|
||||
- **master**: Development branch (tracks nixos-unstable)
|
||||
|
||||
:::{.note}
|
||||
Always use the Home Manager version that matches your NixOS version to
|
||||
avoid compatibility issues.
|
||||
Use the Home Manager branch that matches the Nixpkgs branch used to
|
||||
evaluate your Home Manager configuration. For stable NixOS
|
||||
configurations, this is normally the same as your NixOS version.
|
||||
:::
|
||||
|
||||
## Channel-Based Installation (Traditional) {#sec-upgrade-release-understanding-channel}
|
||||
## Flake-Based Installation {#sec-upgrade-release-understanding-flake}
|
||||
|
||||
1. First, verify your current Home Manager channel:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --list
|
||||
```
|
||||
|
||||
You should see something like:
|
||||
|
||||
```
|
||||
home-manager https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz
|
||||
```
|
||||
|
||||
1. Update the Home Manager channel to a NixOS 25.05 compatible version:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
```
|
||||
|
||||
1. Apply the changes:
|
||||
|
||||
``` shell
|
||||
$ home-manager switch
|
||||
```
|
||||
|
||||
## Flake-Based Installation (Modern) {#sec-upgrade-release-understanding-flake}
|
||||
|
||||
If you're using Home Manager with Nix flakes, update your `flake.nix`:
|
||||
If you are using Home Manager with Nix flakes, update your `nixpkgs` and
|
||||
`home-manager` inputs together:
|
||||
|
||||
```nix
|
||||
{
|
||||
description = "Home Manager configuration";
|
||||
|
||||
inputs = {
|
||||
# Increment release branch for NixOS
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
# Match the Nixpkgs branch to the release you are using.
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
|
||||
home-manager = {
|
||||
# Follow corresponding `release` branch from Home Manager
|
||||
url = "github:nix-community/home-manager/release-25.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
# Match the Home Manager branch to the Nixpkgs branch above.
|
||||
url = "github:nix-community/home-manager/release-25.11";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -74,44 +55,115 @@ If you're using Home Manager with Nix flakes, update your `flake.nix`:
|
||||
}
|
||||
```
|
||||
|
||||
Then update and rebuild. If you are using Home Manager standalone:
|
||||
For `nixos-unstable` or `nixpkgs-unstable`, use the `master` branch
|
||||
instead:
|
||||
|
||||
```nix
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Then update the lock file and rebuild using the command for your
|
||||
installation method.
|
||||
|
||||
For a standalone Home Manager flake:
|
||||
|
||||
``` shell
|
||||
$ nix flake update
|
||||
$ home-manager switch --flake .
|
||||
```
|
||||
|
||||
And if you are using Home Manager as a NixOS module then you will need
|
||||
to update your system configuration instead and run
|
||||
For Home Manager as a NixOS module:
|
||||
|
||||
``` shell
|
||||
$ nix flake update
|
||||
$ sudo nixos-rebuild switch --flake .
|
||||
```
|
||||
|
||||
For Home Manager as a nix-darwin module:
|
||||
|
||||
``` shell
|
||||
$ nix flake update
|
||||
$ darwin-rebuild switch --flake .
|
||||
```
|
||||
|
||||
These commands assume that your current directory is the flake. If not,
|
||||
pass the flake path or URI with `--flake <flake-uri>`.
|
||||
|
||||
## Channel-Based Installation {#sec-upgrade-release-understanding-channel}
|
||||
|
||||
For a standalone channel-based installation, first verify your current
|
||||
Home Manager channel:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --list
|
||||
```
|
||||
|
||||
The entry identifies the Home Manager branch currently in use. For
|
||||
example:
|
||||
|
||||
```
|
||||
home-manager https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz
|
||||
```
|
||||
|
||||
Update the Home Manager channel to the branch matching your Nixpkgs
|
||||
release, then switch:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
$ home-manager switch
|
||||
```
|
||||
|
||||
When Home Manager is installed as a NixOS module with channels, update
|
||||
the root user's Home Manager channel and rebuild the system:
|
||||
|
||||
``` shell
|
||||
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ sudo nix-channel --update
|
||||
$ sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
When Home Manager is installed as a nix-darwin module with channels,
|
||||
update the Home Manager channel used by your nix-darwin configuration
|
||||
and rebuild the system:
|
||||
|
||||
``` shell
|
||||
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz home-manager
|
||||
$ nix-channel --update
|
||||
$ darwin-rebuild switch
|
||||
```
|
||||
|
||||
## State Version Management {#sec-upgrade-release-state-version}
|
||||
|
||||
:::{.warning}
|
||||
Careful updating your `home.stateVersion` when upgrading Home Manager.
|
||||
:::
|
||||
|
||||
The `stateVersion` is best to remain set to the NixOS version you
|
||||
**first installed** Home Manager
|
||||
The `stateVersion` should remain set to the Home Manager release you
|
||||
first used for this home configuration.
|
||||
|
||||
```nix
|
||||
{
|
||||
home.stateVersion = "24.11"; # Example: if you first installed on 24.11
|
||||
# Example: if this home configuration was first created on 24.11.
|
||||
home.stateVersion = "24.11";
|
||||
}
|
||||
```
|
||||
|
||||
**Why?** The `stateVersion` ensures backward compatibility and
|
||||
prevents breaking changes from affecting your existing configuration.
|
||||
|
||||
**Remember:** Channel version is not the same as State version. Update
|
||||
the channel, keep the `stateVersion` unchanged. Advanced users can
|
||||
view the changes between releases and see if any of the `stateVersion`
|
||||
changes will affect them and increment, if they migrate their
|
||||
configurations to follow the changed evaluation.
|
||||
**Remember:** Channel or flake input version is not the same as state
|
||||
version. Update Home Manager, keep `home.stateVersion` unchanged, and
|
||||
only change it after reading the release notes and migrating any
|
||||
affected configuration.
|
||||
|
||||
## Troubleshooting {#sec-upgrade-release-state-troubleshooting}
|
||||
|
||||
@@ -120,8 +172,9 @@ configurations to follow the changed evaluation.
|
||||
Check the [Home Manager Release Notes](#ch-release-notes) for breaking changes.
|
||||
|
||||
1. **Version Mismatch Warning**: If you see warnings about version
|
||||
mismatches, ensure your Home Manager version matches your NixOS
|
||||
version.
|
||||
mismatches, ensure your Home Manager branch matches the Nixpkgs
|
||||
branch used by your configuration. For NixOS stable releases, this
|
||||
usually means matching your NixOS version.
|
||||
|
||||
1. **Module Changes**: Modules are constantly being updated with new
|
||||
features to keep up with changes in upstream packaging or to fix
|
||||
@@ -129,8 +182,8 @@ Check the [Home Manager Release Notes](#ch-release-notes) for breaking changes.
|
||||
there was something noted in the release notes or news entries.
|
||||
|
||||
1. **Channel Not Found**: If `nix-channel --list` shows no channels,
|
||||
you might be using a different installation method (like flakes or
|
||||
NixOS module).
|
||||
you might be using a different installation method, such as flakes,
|
||||
or Home Manager may be imported through your system configuration.
|
||||
|
||||
### Verification {#sec-upgrade-release-state-troubleshooting-verification}
|
||||
|
||||
@@ -140,7 +193,8 @@ After upgrading, verify the installation:
|
||||
$ home-manager --version
|
||||
```
|
||||
|
||||
This should show version 25.05 or indicate it's using the release-25.05 branch.
|
||||
This should show the Home Manager version or indicate that it is using
|
||||
the expected release branch.
|
||||
|
||||
## Additional Resources {#sec-upgrade-release-resources}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Overall the basic option types are the same in Home Manager as NixOS. A
|
||||
few Home Manager options, however, make use of custom types that are
|
||||
worth describing in more detail. These are the option types `dagOf` and
|
||||
`gvariant` that are used, for example, by
|
||||
[programs.ssh.matchBlocks](#opt-programs.ssh.matchBlocks) and [dconf.settings](#opt-dconf.settings).
|
||||
[programs.ssh.settings](#opt-programs.ssh.settings) and [dconf.settings](#opt-dconf.settings).
|
||||
|
||||
[]{#sec-option-types-dag}`hm.types.dagOf`
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ This release has the following notable changes:
|
||||
no longer packages compton, and instead packages the (mostly)
|
||||
compatible fork called picom.
|
||||
|
||||
- The list form of the [programs.ssh.matchBlocks](#opt-programs.ssh.matchBlocks) option has
|
||||
- The list form of the `programs.ssh.matchBlocks` option has
|
||||
been deprecated and configurations requiring match blocks in a
|
||||
defined order should switch to using DAG entries instead. For
|
||||
example, a configuration
|
||||
|
||||
+162
-28
@@ -1,40 +1,146 @@
|
||||
# Release 26.05 {#sec-release-26.05}
|
||||
|
||||
This is the current unstable branch and the information in this
|
||||
section is therefore not final.
|
||||
The 26.05 release branch became stable in May, 2026.
|
||||
|
||||
## Highlights {#sec-release-26.05-highlights}
|
||||
|
||||
This release has the following notable changes:
|
||||
|
||||
- WezTerm now supports declarative configuration via
|
||||
[](#opt-programs.wezterm.settings). Settings are expressed as a Nix
|
||||
attribute set and serialized to Lua using `lib.generators.toLua`.
|
||||
Raw Lua expressions such as `wezterm.font` and `wezterm.action.*`
|
||||
can be embedded using `lib.generators.mkLuaInline`. The existing
|
||||
[](#opt-programs.wezterm.extraConfig) option remains fully supported
|
||||
and can be combined with [](#opt-programs.wezterm.settings).
|
||||
- Home Manager now supports RFC 42-style SSH configuration through
|
||||
[](#opt-programs.ssh.settings). The legacy `programs.ssh.matchBlocks` format
|
||||
is deprecated and migrated automatically.
|
||||
|
||||
- The [](#opt-programs.anki.uiScale) option now expects a value in the
|
||||
range 1.0–2.0, previously it erroneously expected values in the
|
||||
range `0.0–1.0`.
|
||||
- The new `home-manager.startAsUserService` option runs user activation on
|
||||
demand at login instead of doing all setup during system boot, which helps on
|
||||
systems where home directories are mounted later (for example, pam_mount).
|
||||
|
||||
- New options were added for `services.podman.useDefaultMachine` and podman
|
||||
machine management on Darwin.
|
||||
|
||||
- The [](#opt-programs.rclone.enable) module now supports launchd-backed config,
|
||||
mount, and serve agents on Darwin. The new
|
||||
`programs.rclone.remotes.<name>.serve` option can manage `rclone serve`
|
||||
sidecar services on both Linux and Darwin. On non-systemd platforms,
|
||||
`programs.rclone.requiresUnit` is read-only and always `null` because there is
|
||||
no systemd ordering unit to depend on.
|
||||
|
||||
- The Syncthing credentials flow now uses `services.syncthing.guiCredentials`
|
||||
instead of the removed `services.syncthing.passwordFile` option.
|
||||
|
||||
- Firefox extensions are now managed per-profile through the
|
||||
`programs.firefox.profiles.<name>.extensions.packages` and
|
||||
`programs.firefox.profiles.<name>.extensions.settings` options. The top-level
|
||||
`programs.firefox.extensions = [ ... ]` list was removed; migrate it to
|
||||
`programs.firefox.profiles.<name>.extensions.packages`.
|
||||
|
||||
- Thunderbird now supports `accounts.email.accounts.<name>.ews`, the
|
||||
`outlook.office365.com-ews` account flavor, declarative language packs, and
|
||||
enterprise policies. Thunderbird accounts using the `outlook.office365.com`
|
||||
flavor now default IMAP and SMTP authentication to OAuth2 when the account
|
||||
does not set an authentication method explicitly.
|
||||
|
||||
- A new `systemd.user.packages` option provides a user-level equivalent of
|
||||
`systemd.packages` for installing unit files from packages.
|
||||
|
||||
- WezTerm now supports declarative configuration via
|
||||
[](#opt-programs.wezterm.settings). Settings are expressed as a Nix attribute
|
||||
set and serialized to Lua using `lib.generators.toLua`. Raw Lua expressions
|
||||
such as `wezterm.font` and `wezterm.action.*` can be embedded using
|
||||
`lib.generators.mkLuaInline`. The existing
|
||||
[](#opt-programs.wezterm.extraConfig) option remains fully supported and can
|
||||
be combined with [](#opt-programs.wezterm.settings).
|
||||
|
||||
- The [](#opt-programs.anki.uiScale) option now expects a value in the range
|
||||
1.0–2.0, previously it erroneously expected values in the range `0.0–1.0`.
|
||||
Anki sync options moved from `programs.anki.sync.*` to
|
||||
`programs.anki.profiles."User 1".sync.*`, and
|
||||
`programs.anki.sync.passwordFile` is migrated to
|
||||
`programs.anki.profiles."User 1".sync.keyFile`.
|
||||
|
||||
- New [](#opt-home.services) namespace for nixpkgs
|
||||
[modular services](https://nixos.org/manual/nixos/unstable/#modular-services).
|
||||
Service modules shipped with packages (e.g.
|
||||
`pkgs.<name>.passthru.services.default`) drop in unchanged and are lifted to
|
||||
user systemd units. See [Modular Services](#sec-usage-modular-services) for
|
||||
details.
|
||||
|
||||
- Dedicated modules were added for several VSCode forks (`programs.cursor`,
|
||||
`programs.vscodium`, `programs.windsurf`, `programs.kiro`, and
|
||||
`programs.antigravity`), built from a shared `mkVscodeModule` factory. Each
|
||||
fork can now be configured independently and simultaneously. Users who
|
||||
previously selected a fork by setting `programs.vscode.package` should migrate
|
||||
to the matching module; the `programs.vscode.pname` option was removed.
|
||||
|
||||
- The AI coding-assistant modules ([](#opt-programs.claude-code.enable),
|
||||
[](#opt-programs.codex.enable), and [](#opt-programs.opencode.enable)) now
|
||||
share a unified `context` option for providing global instructions. The
|
||||
previous per-module options (`claude-code.memory`,
|
||||
`codex.custom-instructions`, and `opencode.rules`) are deprecated and migrated
|
||||
automatically. MCP server configuration via `programs.mcp.servers` was also
|
||||
extended to more assistant and editor modules through an
|
||||
`enableMcpIntegration` option.
|
||||
|
||||
- The `programs.man` module was split so the man viewer can be selected through
|
||||
the [](#opt-programs.man.man-db.enable) and
|
||||
[](#opt-programs.man.mandoc.enable) submodules, which are mutually exclusive.
|
||||
|
||||
- The `programs.neovim.extraLuaConfig` option was renamed to
|
||||
[](#opt-programs.neovim.initLua). Home Manager now writes generated Lua
|
||||
initialization to {file}`$XDG_CONFIG_HOME/nvim/init.lua` by default. If you
|
||||
manage that file outside Home Manager, set
|
||||
[](#opt-programs.neovim.sideloadInitLua) to `true` to load the generated Lua
|
||||
through the Neovim wrapper instead.
|
||||
|
||||
- A new `sshAuthSock` module manages the `SSH_AUTH_SOCK`
|
||||
environment variable. It is implicitly configured by the
|
||||
SSH-agent-providing modules (e.g. `services.ssh-agent`, `services.gpg-agent`).
|
||||
The old `services.ssh-agent.enable{Bash,Zsh,Fish,Nushell}Integration` options
|
||||
were removed; shell initialization is now provided through `sshAuthSock`.
|
||||
|
||||
- A new [](#opt-services.pipewire.enable) module provides client-side
|
||||
configuration for PipeWire, WirePlumber, and the PulseAudio/JACK compatibility
|
||||
layers. It does not install or manage the PipeWire daemon itself.
|
||||
|
||||
- The `services.swww` module was renamed to [](#opt-services.awww.enable)
|
||||
following the upstream project rename. The `enable`, `package`, and
|
||||
`extraArgs` options are migrated automatically from `services.swww.*` to
|
||||
`services.awww.*`.
|
||||
|
||||
- Several modules dropped their freeform `extraConfig` escape hatches in favor
|
||||
of RFC 42-style `settings`: `programs.aerospace.extraConfig` (and
|
||||
`userSettings`) and `programs.aria2.extraConfig` were removed.
|
||||
`programs.mise.settings` was renamed to `programs.mise.globalConfig.settings`.
|
||||
The `programs.eww.configDir` and
|
||||
`programs.eww.enable{Bash,Zsh,Fish}Integration` options were removed; use
|
||||
[](#opt-programs.eww.yuckConfig) and [](#opt-programs.eww.scssConfig) for
|
||||
declarative Eww config files. The `programs.niriswitcher` options were also
|
||||
removed.
|
||||
|
||||
- Darwin integration received several behavior changes. Home Manager launchd
|
||||
agents now wait for `/nix/store` before starting and use
|
||||
`launchctl bootout --wait` when replacing agents. nix-darwin activations now
|
||||
propagate dry-run mode into Home Manager user activations. On Darwin, Home
|
||||
Manager also exports `TERMINFO_DIRS` so terminfo entries from Home
|
||||
Manager-installed packages are visible to shells.
|
||||
|
||||
- The [](#opt-nix.assumeXdg) option was added for installations where Nix is
|
||||
configured to use XDG base directories outside Home Manager. Home Manager also
|
||||
detects `osConfig.nix.settings.use-xdg-base-directories` when deciding where
|
||||
to place declarative channel entries.
|
||||
|
||||
## State Version Changes {#sec-release-26.05-state-version-changes}
|
||||
|
||||
The state version in this release includes the changes below. These
|
||||
changes are only active if the `home.stateVersion` option is set to
|
||||
\"26.05\" or later.
|
||||
The state version in this release includes the changes below. These changes are
|
||||
only active if the `home.stateVersion` option is set to \"26.05\" or later.
|
||||
|
||||
- The [](#opt-gtk.gtk4.theme) option does not mirror
|
||||
[](#opt-gtk.theme) by default anymore.
|
||||
- The [](#opt-gtk.gtk4.theme) option does not mirror [](#opt-gtk.theme) by
|
||||
default anymore.
|
||||
|
||||
- The [](#opt-programs.zsh.dotDir) option now defaults to the XDG
|
||||
configuration directory (usually `~/.config/zsh`) when
|
||||
[](#opt-xdg.enable) is true.
|
||||
- The [](#opt-programs.zsh.dotDir) option now defaults to the XDG configuration
|
||||
directory (usually `~/.config/zsh`) when [](#opt-xdg.enable) is true.
|
||||
|
||||
- The [](#opt-programs.yazi.shellWrapperName) option now defaults to
|
||||
`y` instead of `yy`. For users with older `home.stateVersion` values,
|
||||
the legacy default `yy` is retained.
|
||||
- The [](#opt-programs.yazi.shellWrapperName) option now defaults to `y` instead
|
||||
of `yy`.
|
||||
|
||||
- The [](#opt-xdg.userDirs.setSessionVariables) option now defaults to `false`
|
||||
instead of `true`.
|
||||
@@ -45,11 +151,39 @@ changes are only active if the `home.stateVersion` option is set to
|
||||
`DESKTOP`. Home Manager 26.05 introduced a warning when the `XDG_<name>_DIR`
|
||||
form is used.
|
||||
|
||||
- The [](#opt-programs.man.package) option now defaults to `null` on
|
||||
Darwin because the GNU `man` from nixpkgs ships `apropos`/`man -k`
|
||||
and `whatis`/`man -f` binaries that don't work on Darwin. Nix-installed
|
||||
manual pages still work with macOS's built-in `man` via
|
||||
- The [](#opt-programs.man.package) option now defaults to `null` on Darwin
|
||||
because the GNU `man` from nixpkgs ships `apropos`/`man -k` and
|
||||
`whatis`/`man -f` binaries that don't work on Darwin. Nix-installed manual
|
||||
pages still work with macOS's built-in `man` via
|
||||
[](#opt-home.extraOutputsToInstall).
|
||||
|
||||
- The options [](#opt-programs.neovim.withPython3) and
|
||||
[](#opt-programs.neovim.withRuby) now default to `false` following nixpkgs
|
||||
[](#opt-programs.neovim.withRuby) now default to `false` following nixpkgs.
|
||||
|
||||
- Neovim plugin `config` fragments are assumed to be Lua by default through
|
||||
`programs.neovim.plugins.<name>.type = "lua"`, instead of the previous `viml`
|
||||
default.
|
||||
|
||||
- On Linux, `programs.firefox.configPath` now defaults to
|
||||
`"${config.xdg.configHome}/mozilla/firefox"`, instead of the legacy
|
||||
`".mozilla/firefox"`.
|
||||
|
||||
- The [](#opt-wayland.windowManager.hyprland.configType) option now defaults to
|
||||
`"lua"`, instead of the legacy `"hyprlang"`. Set
|
||||
`wayland.windowManager.hyprland.configType = "hyprlang"` to keep generating
|
||||
{file}`$XDG_CONFIG_HOME/hypr/hyprland.conf`.
|
||||
|
||||
- The [](#opt-programs.docker-cli.configDir) option now defaults to
|
||||
`"${config.xdg.configHome}/docker"` when [](#opt-xdg.enable) is true, instead
|
||||
of `~/.docker`. Similarly, [](#opt-services.colima.profiles) now sets
|
||||
`$DOCKER_HOST` for the default context.
|
||||
|
||||
- The [](#opt-services.home-manager.autoUpgrade.preSwitchCommands) option now
|
||||
defaults to an empty list. Previously, when
|
||||
[](#opt-services.home-manager.autoUpgrade.useFlake) was `true`, it defaulted
|
||||
to `[ "nix flake update" ]`. Set `preSwitchCommands = [ "nix flake update" ]`
|
||||
to keep updating flake inputs before each automatic switch.
|
||||
|
||||
- The [](#opt-programs.mergiraf.enableGitIntegration) and
|
||||
[](#opt-programs.mergiraf.enableJujutsuIntegration) options now default to
|
||||
`false`, so the integrations must be enabled explicitly.
|
||||
|
||||
Generated
+4
-4
@@ -2,16 +2,16 @@
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"lastModified": 1784280462,
|
||||
"narHash": "sha256-DtoqIqM7VkR6NxAkcLpMwmi02USwWb3JdmNGLyhthc0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"rev": "293d6abedf0478e681a4dfcfcb35b30fc796a32f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"ref": "nixos-26.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
description = "Home Manager for Nix";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
||||
|
||||
outputs =
|
||||
{
|
||||
@@ -63,8 +63,7 @@
|
||||
# Create chunked test packages for better CI parallelization
|
||||
tests = import ./tests {
|
||||
inherit pkgs;
|
||||
# Disable big tests since this is only used for CI
|
||||
enableBig = false;
|
||||
enableBig = true;
|
||||
};
|
||||
allTests = lib.attrNames tests.build;
|
||||
# Remove 'all' from the test list as it's a meta-package
|
||||
@@ -189,11 +188,21 @@
|
||||
default = hmPkg;
|
||||
home-manager = hmPkg;
|
||||
|
||||
ci-parse = pkgs.callPackage ./ci/parse.nix { nix = pkgs.nixVersions.latest; };
|
||||
ci-parse-lix = pkgs.callPackage ./ci/parse.nix {
|
||||
nix = pkgs.lixPackageSets.latest.lix;
|
||||
};
|
||||
|
||||
create-news-entry = pkgs.writeShellScriptBin "create-news-entry" ''
|
||||
./modules/misc/news/create-news-entry.sh
|
||||
'';
|
||||
|
||||
tests = pkgs.callPackage ./tests/package.nix { flake = self; };
|
||||
tests = pkgs.callPackage ./tests/package.nix {
|
||||
flake = self;
|
||||
inputOverrides = {
|
||||
inherit nixpkgs;
|
||||
};
|
||||
};
|
||||
|
||||
docs-html = docs.manual.html;
|
||||
docs-htmlOpenTool = docs.manual.htmlOpenTool;
|
||||
|
||||
@@ -403,7 +403,7 @@ $xdgVars
|
||||
# You should not change this value, even if you update Home Manager. If you do
|
||||
# want to update the value, then make sure to first check the Home Manager
|
||||
# release notes.
|
||||
home.stateVersion = "25.11"; # Please read the comment before changing.
|
||||
home.stateVersion = "26.05"; # Please read the comment before changing.
|
||||
|
||||
# The home.packages option allows you to install Nix packages into your
|
||||
# environment.
|
||||
@@ -1041,7 +1041,7 @@ function doUninstall() {
|
||||
uninstall = true;
|
||||
home.username = "$(escapeForNix "$USER")";
|
||||
home.homeDirectory = "$(escapeForNix "$HOME")";
|
||||
home.stateVersion = "25.11";
|
||||
home.stateVersion = "26.05";
|
||||
}
|
||||
EOF
|
||||
# shellcheck disable=2064
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Home Manager\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
|
||||
"POT-Creation-Date: 2026-01-21 09:53+0100\n"
|
||||
"PO-Revision-Date: 2026-03-31 16:16+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-04-30 04:09+0000\n"
|
||||
"Last-Translator: Troy <radiohotline@disroot.org>\n"
|
||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/home-manager/cli/"
|
||||
"ar/>\n"
|
||||
"Language: ar\n"
|
||||
@@ -18,17 +18,17 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
|
||||
#. translators: For example: "home-manager: missing argument for --cores"
|
||||
#: home-manager/home-manager:16
|
||||
msgid "%s: missing argument for %s"
|
||||
msgstr "%s: معطيات مفقوة ل %s"
|
||||
msgstr "%s: معطيات مفقودة ل %s"
|
||||
|
||||
#. translators: For example: "home-manager: --rollback can only be used after switch"
|
||||
#: home-manager/home-manager:22
|
||||
msgid "%s: %s can only be used after %s"
|
||||
msgstr "%s: %s يمكن استخدامه فقط بعد %s"
|
||||
msgstr "%s%: s يمكن استخدامه فقط بعد %s"
|
||||
|
||||
#: home-manager/home-manager:71
|
||||
msgid "No configuration file found at %s"
|
||||
@@ -212,7 +212,7 @@ msgstr "لا يمكن تشغيل البناء في مجلد قراءة فقط"
|
||||
|
||||
#: home-manager/home-manager:822
|
||||
msgid "The configuration does not contain the specialisation \"%s\""
|
||||
msgstr ""
|
||||
msgstr "لا يتضمن ملف الاعدادات التخصص \"%s\""
|
||||
|
||||
#: home-manager/home-manager:876
|
||||
msgid "No generation with ID %s"
|
||||
|
||||
+15
-15
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Home Manager\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
|
||||
"POT-Creation-Date: 2026-01-21 09:53+0100\n"
|
||||
"PO-Revision-Date: 2026-03-31 16:16+0000\n"
|
||||
"Last-Translator: TheBlackBeans <adrien.mathieu.net@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-05-05 10:30+0000\n"
|
||||
"Last-Translator: Ludovic Pagès <nanucq@proton.me>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/home-manager/cli/"
|
||||
"fr/>\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 5.17-dev\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
|
||||
#. translators: For example: "home-manager: missing argument for --cores"
|
||||
#: home-manager/home-manager:16
|
||||
@@ -52,7 +52,7 @@ msgstr ""
|
||||
|
||||
#: home-manager/home-manager:114
|
||||
msgid "Home Manager not found at %s."
|
||||
msgstr "Home Manager indisponible à %s."
|
||||
msgstr "Home Manager absent dans %s."
|
||||
|
||||
#. translators: This message will be seen by very few users that likely are familiar with English. So feel free to leave this untranslated.
|
||||
#: home-manager/home-manager:122
|
||||
@@ -84,15 +84,15 @@ msgid ""
|
||||
"\n"
|
||||
" $ rm -r \"%s\""
|
||||
msgstr ""
|
||||
"Pour supprimer cet avertissement, exécutez l'une des actions suivantes :\n"
|
||||
"\n"
|
||||
"Pour supprimer cet avertissement, exécutez l'une des actions suivantes :\n"
|
||||
" \n"
|
||||
"1. Préciser explicitement à Home Manager d'utiliser le chemin d'accès, par "
|
||||
"exemple en ajoutant ceci à votre configuration :\n"
|
||||
"exemple en ajoutant ceci à votre configuration :\n"
|
||||
"\n"
|
||||
"\t{ programs.home-manager.path = \"%s\" ; }\n"
|
||||
"\n"
|
||||
"Si vous importez Home Manager directement, vous pouvez utiliser le paramètre "
|
||||
"`path` au lancement du package :\n"
|
||||
"`path` au lancement du package :\n"
|
||||
"\n"
|
||||
"\tpkgs.callPackage /path/to/home-manager-package { path = \"%s\" ; }\n"
|
||||
"\n"
|
||||
@@ -120,7 +120,7 @@ msgstr "%s : l'option '%s' est inconnue"
|
||||
|
||||
#: home-manager/home-manager:345 home-manager/home-manager:1290
|
||||
msgid "Run '%s --help' for usage help"
|
||||
msgstr "Exécuter « %s --help » pour de l'aide sur l'utilisation"
|
||||
msgstr "Exécuter '%s --help' pour de l'aide sur l'utilisation"
|
||||
|
||||
#: home-manager/home-manager:371 home-manager/home-manager:476
|
||||
msgid "The file %s already exists, leaving it unchanged..."
|
||||
@@ -144,13 +144,13 @@ msgid ""
|
||||
"to configure Home Manager. Run 'man home-configuration.nix' to\n"
|
||||
"see all available options."
|
||||
msgstr ""
|
||||
"Tout est fait! Home Manager devrait désormais être installé et vous pouvez "
|
||||
"Terminé ! Home Manager devrait désormais être installé et vous pouvez "
|
||||
"éditer\n"
|
||||
"\n"
|
||||
" %s\n"
|
||||
"\n"
|
||||
"pour configurer Home Manager. Pour avoir une liste des options disponibles,\n"
|
||||
"essayez 'man home-configuration.nix'."
|
||||
"lancez 'man home-configuration.nix'."
|
||||
|
||||
#. translators: The "%s" specifier will be replaced by a URL.
|
||||
#: home-manager/home-manager:532
|
||||
@@ -161,8 +161,8 @@ msgid ""
|
||||
"\n"
|
||||
"if the error seems to be the fault of Home Manager."
|
||||
msgstr ""
|
||||
"Uh oh, l'installation n'a pas réussi! Veuillez signaler cette erreur à "
|
||||
"l'adresse suivante\n"
|
||||
"Uh oh, l'installation a échoué! Veuillez signaler cette erreur à l'adresse "
|
||||
"suivante\n"
|
||||
"\n"
|
||||
" %s\n"
|
||||
"\n"
|
||||
@@ -198,11 +198,11 @@ msgstr "Veuillez remplir la variable d'environnement $EDITOR ou VISUAL"
|
||||
|
||||
#: home-manager/home-manager:659
|
||||
msgid "Cannot run build in read-only directory"
|
||||
msgstr "Impossible de lancer une compilation dans un dossier en écriture seule"
|
||||
msgstr "Impossible de lancer une compilation dans un dossier en lecture seule"
|
||||
|
||||
#: home-manager/home-manager:822
|
||||
msgid "The configuration does not contain the specialisation \"%s\""
|
||||
msgstr ""
|
||||
msgstr "La configuration ne contient pas la spécialisation \"%s\""
|
||||
|
||||
#: home-manager/home-manager:876
|
||||
msgid "No generation with ID %s"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Home Manager\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
|
||||
"POT-Creation-Date: 2026-01-21 09:53+0100\n"
|
||||
"PO-Revision-Date: 2026-03-31 16:15+0000\n"
|
||||
"Last-Translator: Erwin Mintiens <erwin.mintiens@protonmail.com>\n"
|
||||
"PO-Revision-Date: 2026-05-21 21:11+0000\n"
|
||||
"Last-Translator: jay <jj8z@proton.me>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/home-manager/cli/"
|
||||
"nl/>\n"
|
||||
"Language: nl\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 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.6.dev0\n"
|
||||
|
||||
#. translators: For example: "home-manager: missing argument for --cores"
|
||||
#: home-manager/home-manager:16
|
||||
@@ -185,7 +185,7 @@ msgstr "Het is niet mogelijk om te bouwen in een read-only map"
|
||||
|
||||
#: home-manager/home-manager:822
|
||||
msgid "The configuration does not contain the specialisation \"%s\""
|
||||
msgstr ""
|
||||
msgstr "De configuratie bevat niet de specialisatie \"%s\""
|
||||
|
||||
#: home-manager/home-manager:876
|
||||
msgid "No generation with ID %s"
|
||||
|
||||
+12
-13
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Home Manager\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
|
||||
"POT-Creation-Date: 2026-01-21 09:53+0100\n"
|
||||
"PO-Revision-Date: 2026-03-31 16:15+0000\n"
|
||||
"Last-Translator: Mateusz Kubica <mw.kubica@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-04-26 13:09+0000\n"
|
||||
"Last-Translator: Nikodem <35564466+x1pper@users.noreply.github.com>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/home-manager/cli/"
|
||||
"pl/>\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 5.17-dev\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
|
||||
#. translators: For example: "home-manager: missing argument for --cores"
|
||||
#: home-manager/home-manager:16
|
||||
@@ -83,25 +83,24 @@ msgid ""
|
||||
"\n"
|
||||
" $ rm -r \"%s\""
|
||||
msgstr ""
|
||||
"Zrób jedną z tych rzeczy aby aby pozbyć się tego ostrzeżenia:\n"
|
||||
"Zrób jedną z tych rzeczy aby pozbyć się tego ostrzeżenia:\n"
|
||||
"\n"
|
||||
"1. Jednoznacznie skonfiguruj Home Manager żeby używał konkretnej ścieżki, "
|
||||
"np. dodając\n"
|
||||
"\n"
|
||||
" { programs.home-manager.path = \"%s\"; }\n"
|
||||
" { programs.home-manager.path = \"%s\"; }\n"
|
||||
"\n"
|
||||
" do twojej konfiguracji.\n"
|
||||
" do twojej konfiguracji.\n"
|
||||
"\n"
|
||||
" Jeśli importujesz Home Manager bezpośrednio, możesz użyć parametru "
|
||||
"`path`\n"
|
||||
" Jeśli importujesz Home Manager bezpośrednio, możesz użyć parametru `path`\n"
|
||||
"\n"
|
||||
" pkgs.callPackage /ścieżka/do/pakiet-home-manager { path = \"%s\"; }\n"
|
||||
" pkgs.callPackage /ścieżka/do/pakiet-home-manager { path = \"%s\"; }\n"
|
||||
"\n"
|
||||
" przy wywołaniu pakietu Home Manager.\n"
|
||||
" przy wywołaniu pakietu Home Manager.\n"
|
||||
"\n"
|
||||
"2. Usuń przestarzałą ścieżkę.\n"
|
||||
"2. Usuń przestarzałą ścieżkę:\n"
|
||||
"\n"
|
||||
" $ rm -r \"%s\""
|
||||
" $ rm -r \"%s\""
|
||||
|
||||
#: home-manager/home-manager:153
|
||||
msgid "Sanity checking Nix"
|
||||
@@ -207,7 +206,7 @@ msgstr "Nie mogę uruchomić budowania w katalogu tylko-do-odczytu"
|
||||
|
||||
#: home-manager/home-manager:822
|
||||
msgid "The configuration does not contain the specialisation \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Konfiguracja nie zawiera specjalizacji o nazwie \"%s\""
|
||||
|
||||
#: home-manager/home-manager:876
|
||||
msgid "No generation with ID %s"
|
||||
|
||||
+56
-30
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: Home Manager\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
|
||||
"POT-Creation-Date: 2026-01-21 09:53+0100\n"
|
||||
"PO-Revision-Date: 2026-03-31 16:14+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-05-15 00:11+0000\n"
|
||||
"Last-Translator: soweli Emi <emi@alchemi.dev>\n"
|
||||
"Language-Team: Toki Pona <https://hosted.weblate.org/projects/home-manager/"
|
||||
"cli/tok/>\n"
|
||||
"Language: tok\n"
|
||||
@@ -17,21 +17,21 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.5.dev0\n"
|
||||
|
||||
#. translators: For example: "home-manager: missing argument for --cores"
|
||||
#: home-manager/home-manager:16
|
||||
msgid "%s: missing argument for %s"
|
||||
msgstr ""
|
||||
msgstr "%s: nimi %s li wile nimi poka"
|
||||
|
||||
#. translators: For example: "home-manager: --rollback can only be used after switch"
|
||||
#: home-manager/home-manager:22
|
||||
msgid "%s: %s can only be used after %s"
|
||||
msgstr ""
|
||||
msgstr "%s: %s li ken lon poka pini %s"
|
||||
|
||||
#: home-manager/home-manager:71
|
||||
msgid "No configuration file found at %s"
|
||||
msgstr ""
|
||||
msgstr "lipu lawa li lon ala %s"
|
||||
|
||||
#. translators: The first '%s' specifier will be replaced by either
|
||||
#. 'home.nix' or 'flake.nix'.
|
||||
@@ -41,14 +41,16 @@ msgid ""
|
||||
"Keeping your Home Manager %s in %s is deprecated,\n"
|
||||
"please move it to %s"
|
||||
msgstr ""
|
||||
"lipu %s pi ilo Home Manager li wile ala lon %s.\n"
|
||||
"o tawa %s e ona"
|
||||
|
||||
#: home-manager/home-manager:99
|
||||
msgid "No configuration file found. Please create one at %s"
|
||||
msgstr ""
|
||||
msgstr "mi ken ala alasa e lipu lawa. o pali e lipu lawa lon %s"
|
||||
|
||||
#: home-manager/home-manager:114
|
||||
msgid "Home Manager not found at %s."
|
||||
msgstr ""
|
||||
msgstr "ilo Home Manager li lon ala %s."
|
||||
|
||||
#. translators: This message will be seen by very few users that likely are familiar with English. So feel free to leave this untranslated.
|
||||
#: home-manager/home-manager:122
|
||||
@@ -56,6 +58,8 @@ msgid ""
|
||||
"The fallback Home Manager path %s has been deprecated and a file/directory "
|
||||
"was found there."
|
||||
msgstr ""
|
||||
"tenpo pini la, ilo Home Manager li kepeken nasin %s. taso, tenpo ni la ilo "
|
||||
"Home Manager li wile ale e nasin ni. lipu anu kulupu lipu li lon nasin ni."
|
||||
|
||||
#. translators: This message will be seen by very few users that likely are familiar with English. So feel free to leave this untranslated.
|
||||
#: home-manager/home-manager:125
|
||||
@@ -81,37 +85,40 @@ msgstr ""
|
||||
|
||||
#: home-manager/home-manager:153
|
||||
msgid "Sanity checking Nix"
|
||||
msgstr ""
|
||||
msgstr "mi alasa ilo Nix tan ni: ilo Nix li lon ala la ni li ike mute li nasa"
|
||||
|
||||
#: home-manager/home-manager:173
|
||||
msgid "Could not find suitable profile directory, tried %s and %s"
|
||||
msgstr ""
|
||||
"mi wile pana e kulupu lipu sina lon poki sona. taso mi ken ala alasa e ma "
|
||||
"pona lon %s lon %s"
|
||||
|
||||
#. translators: Here "flake" is a noun that refers to the Nix Flakes feature.
|
||||
#: home-manager/home-manager:230
|
||||
msgid "Can't inspect options of a flake configuration"
|
||||
msgstr ""
|
||||
msgstr "mi ken ala lukin e lipu lawa pi ilo Nix Flakes"
|
||||
|
||||
#: home-manager/home-manager:340 home-manager/home-manager:363
|
||||
#: home-manager/home-manager:769 home-manager/home-manager:1289
|
||||
msgid "%s: unknown option '%s'"
|
||||
msgstr ""
|
||||
msgstr "%s: mi ken ala sona e nimi '%s'"
|
||||
|
||||
#: home-manager/home-manager:345 home-manager/home-manager:1290
|
||||
msgid "Run '%s --help' for usage help"
|
||||
msgstr ""
|
||||
msgstr "sina wile kama sona pali e ilo Home Manager la o toki e '%s --help'"
|
||||
|
||||
#: home-manager/home-manager:371 home-manager/home-manager:476
|
||||
msgid "The file %s already exists, leaving it unchanged..."
|
||||
msgstr ""
|
||||
msgstr "lipu %s li lon. mi ante ala e ona."
|
||||
|
||||
#: home-manager/home-manager:373 home-manager/home-manager:478
|
||||
msgid "Creating %s..."
|
||||
msgstr ""
|
||||
msgstr "mi pali e \"%s\"."
|
||||
|
||||
#: home-manager/home-manager:522
|
||||
msgid "Creating initial Home Manager generation..."
|
||||
msgstr ""
|
||||
"tenpo ni la mi pali e kulupu nanpa wan pi lipu lawa tan ilo Home Manager..."
|
||||
|
||||
#. translators: The "%s" specifier will be replaced by a file path.
|
||||
#: home-manager/home-manager:527
|
||||
@@ -123,6 +130,12 @@ msgid ""
|
||||
"to configure Home Manager. Run 'man home-configuration.nix' to\n"
|
||||
"see all available options."
|
||||
msgstr ""
|
||||
"pini a! ilo \"home-manager\" li lon. sina wile lawa e ilo Home Manager la "
|
||||
"sina ken ante e lipu ni:\n"
|
||||
"\n"
|
||||
" lipu.%s\n"
|
||||
"\n"
|
||||
"sina wile kama sona e nasin lawa o toki e ni: 'man home-configuration.nix'."
|
||||
|
||||
#. translators: The "%s" specifier will be replaced by a URL.
|
||||
#: home-manager/home-manager:532
|
||||
@@ -133,11 +146,17 @@ msgid ""
|
||||
"\n"
|
||||
"if the error seems to be the fault of Home Manager."
|
||||
msgstr ""
|
||||
"ike li lon! mi ken ala pana e ilo Home Manager tawa sina. ken la sina pilin "
|
||||
"e ni: ike ni li tan ilo Home Manager. ni la o pana e sona lon\n"
|
||||
"\n"
|
||||
" %s\n"
|
||||
"\n"
|
||||
"ni la sina pona e mi mute."
|
||||
|
||||
#. translators: Here "flake" is a noun that refers to the Nix Flakes feature.
|
||||
#: home-manager/home-manager:543
|
||||
msgid "Can't instantiate a flake configuration"
|
||||
msgstr ""
|
||||
msgstr "mi ken ala pali e lipu lawa pi ilo Nix Flakes"
|
||||
|
||||
#: home-manager/home-manager:619
|
||||
msgid ""
|
||||
@@ -147,19 +166,23 @@ msgid_plural ""
|
||||
"There are %d unread and relevant news items.\n"
|
||||
"Read them by running the command \"%s news\"."
|
||||
msgstr[0] ""
|
||||
"sona sin %d li lon.\n"
|
||||
"sina wile lukin la o toki: \"%s news\"."
|
||||
|
||||
#: home-manager/home-manager:633
|
||||
msgid "Unknown \"news.display\" setting \"%s\"."
|
||||
msgstr ""
|
||||
"sina pana e \"%s\" tawa nimi lawa \"news.display\". nimi lawa ni li ken ala "
|
||||
"jo e nimi ni li ken jo e \"silent\" anu \"notify\" anu \"show\"."
|
||||
|
||||
#: home-manager/home-manager:641
|
||||
#, sh-format
|
||||
msgid "Please set the $EDITOR or $VISUAL environment variable"
|
||||
msgstr ""
|
||||
msgstr "o pana e ilo tawa poki sona $EDITOR anu poki sona $VISUAL"
|
||||
|
||||
#: home-manager/home-manager:659
|
||||
msgid "Cannot run build in read-only directory"
|
||||
msgstr ""
|
||||
msgstr "ma ni li ken ala ante. mi ken ala pali \"build\" lon ma ni"
|
||||
|
||||
#: home-manager/home-manager:822
|
||||
msgid "The configuration does not contain the specialisation \"%s\""
|
||||
@@ -167,60 +190,63 @@ msgstr ""
|
||||
|
||||
#: home-manager/home-manager:876
|
||||
msgid "No generation with ID %s"
|
||||
msgstr ""
|
||||
msgstr "kulupu pi lipu lawa pi ilo Home Manager pi nimi %s li lon ala"
|
||||
|
||||
#: home-manager/home-manager:878
|
||||
msgid "Cannot remove the current generation %s"
|
||||
msgstr ""
|
||||
"mi ken ala weka e kulupu pi lipu lawa %s tan ni: tenpo ni la ona li lon tomo "
|
||||
"sina"
|
||||
|
||||
#: home-manager/home-manager:880
|
||||
msgid "Removing generation %s"
|
||||
msgstr ""
|
||||
msgstr "mi weka e kulupu lawa pi nimi %s"
|
||||
|
||||
#: home-manager/home-manager:901
|
||||
msgid "No generations to expire"
|
||||
msgstr ""
|
||||
msgstr "kulupu ale pi lipu lawa li majuna ala. mi wile ala weka e ona"
|
||||
|
||||
#: home-manager/home-manager:912
|
||||
msgid "No home-manager packages seem to be installed."
|
||||
msgstr ""
|
||||
msgstr "ilo Home Manager li pana ala e ilo ante."
|
||||
|
||||
#: home-manager/home-manager:997
|
||||
msgid "Unknown argument %s"
|
||||
msgstr ""
|
||||
msgstr "mi sona ala e nimi '%s'"
|
||||
|
||||
#: home-manager/home-manager:1022
|
||||
msgid "This will remove Home Manager from your system."
|
||||
msgstr ""
|
||||
msgstr "ni li weka e ilo Home Manager."
|
||||
|
||||
#: home-manager/home-manager:1025
|
||||
msgid "This is a dry run, nothing will actually be uninstalled."
|
||||
msgstr ""
|
||||
msgstr "tenpo ni la mi weka e ala li toki taso."
|
||||
|
||||
#: home-manager/home-manager:1029
|
||||
msgid "Really uninstall Home Manager?"
|
||||
msgstr ""
|
||||
msgstr "sina wile ala wile weka e ilo Home Manager?"
|
||||
|
||||
#: home-manager/home-manager:1035
|
||||
msgid "Switching to empty Home Manager configuration..."
|
||||
msgstr ""
|
||||
msgstr "tenpo ni la mi lon e lipu lawa pi ijo ala..."
|
||||
|
||||
#: home-manager/home-manager:1050
|
||||
msgid "Yay!"
|
||||
msgstr ""
|
||||
msgstr "pona mute a!"
|
||||
|
||||
#: home-manager/home-manager:1055
|
||||
msgid "Home Manager is uninstalled but your home.nix is left untouched."
|
||||
msgstr ""
|
||||
msgstr "ilo Home Manager li weka. taso, lipu home.nix li awen lon."
|
||||
|
||||
#: home-manager/home-manager:1334
|
||||
msgid "expire-generations expects one argument, got %d."
|
||||
msgstr ""
|
||||
"sina pana e nimi %d tawa ilo expire-generations. o pana e nimi wan taso."
|
||||
|
||||
#: home-manager/home-manager:1359
|
||||
msgid "Unknown command: %s"
|
||||
msgstr ""
|
||||
msgstr "mi sona ala pali %s"
|
||||
|
||||
#: home-manager/install.nix:21
|
||||
msgid "This derivation is not buildable, please run it using nix-shell."
|
||||
msgstr ""
|
||||
msgstr "mi ken ala pali e ni. sina ken pali e ona kepeken ilo nix-shell."
|
||||
|
||||
@@ -9,7 +9,7 @@ let
|
||||
;
|
||||
|
||||
cfg = config.accounts.email;
|
||||
enabledAccounts = lib.filterAttrs (n: v: v.enable) cfg.accounts;
|
||||
enabledAccounts = lib.filterAttrs (_n: v: v.enable) cfg.accounts;
|
||||
|
||||
gpgModule = types.submodule {
|
||||
options = {
|
||||
@@ -80,6 +80,18 @@ let
|
||||
default = "none";
|
||||
description = "Method to communicate the signature.";
|
||||
};
|
||||
|
||||
htmlFormat = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether Thunderbird should interpret {option}`text` as an HTML signature.
|
||||
|
||||
This maps to Thunderbird's `mail.identity.id_*.htmlSigFormat`
|
||||
preference. The signature content itself is still written through
|
||||
`mail.identity.id_*.htmlSigText`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -97,7 +109,9 @@ let
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to use STARTTLS.
|
||||
Whether to use STARTTLS. This is discouraged and should be avoided if
|
||||
possible. See <https://datatracker.ietf.org/doc/html/rfc8314> for
|
||||
more.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -400,6 +414,7 @@ let
|
||||
"gmail.com"
|
||||
"mailbox.org"
|
||||
"migadu.com"
|
||||
"outlook.office365.com-ews"
|
||||
"outlook.office365.com"
|
||||
"plain"
|
||||
"posteo.de"
|
||||
@@ -611,6 +626,17 @@ let
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf (config.flavor == "outlook.office365.com-ews") {
|
||||
userName = mkDefault config.address;
|
||||
|
||||
ews = {
|
||||
host = "outlook.office365.com";
|
||||
serviceDescriptionURL = "https://outlook.office365.com/EWS/Exchange.asmx";
|
||||
authentication = "xoauth2";
|
||||
tls.enable = true;
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf (config.flavor == "fastmail.com") {
|
||||
userName = mkDefault config.address;
|
||||
|
||||
@@ -633,8 +659,14 @@ let
|
||||
(mkIf (config.flavor == "mailbox.org") {
|
||||
userName = mkDefault config.address;
|
||||
folders.inbox = mkDefault "INBOX";
|
||||
imap.host = "imap.mailbox.org";
|
||||
smtp.host = "smtp.mailbox.org";
|
||||
imap = {
|
||||
host = "imap.mailbox.org";
|
||||
port = 993;
|
||||
};
|
||||
smtp = {
|
||||
host = "smtp.mailbox.org";
|
||||
port = 465;
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf (config.flavor == "migadu.com") {
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
# https://github.com/NixOS/nixpkgs/blob/nixpkgs-unstable/pkgs/development/libraries/glibc/nix-locale-archive.patch
|
||||
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
nixosConfig,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
@@ -55,9 +56,8 @@ in
|
||||
|
||||
This option only applies to the Linux platform.
|
||||
|
||||
When Home Manager is configured with NixOS, the default value
|
||||
will be set to {var}`i18n.glibcLocales` from the
|
||||
system configuration.
|
||||
If Home Manager is installed as a NixOS submodule, this
|
||||
option defaults to NixOS' {var}`i18n.glibcLocales`.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
pkgs.glibcLocales.override {
|
||||
@@ -65,9 +65,8 @@ in
|
||||
locales = [ "en_US.UTF-8/UTF-8" ];
|
||||
}
|
||||
'';
|
||||
# NB. See nixos/default.nix for NixOS default.
|
||||
default = pkgs.glibcLocales;
|
||||
defaultText = lib.literalExpression "pkgs.glibcLocales";
|
||||
default = nixosConfig.i18n.glibcLocales or pkgs.glibcLocales;
|
||||
defaultText = lib.literalExpression "nixosConfig.i18n.glibcLocales or pkgs.glibcLocales";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -34,7 +34,7 @@ let
|
||||
|
||||
inherit
|
||||
(
|
||||
(import lib/file-type.nix {
|
||||
(import ./lib/file-type.nix {
|
||||
inherit homeDirectory lib pkgs;
|
||||
})
|
||||
)
|
||||
@@ -100,7 +100,7 @@ in
|
||||
(
|
||||
let
|
||||
dups = lib.attrNames (
|
||||
lib.filterAttrs (n: v: v > 1) (
|
||||
lib.filterAttrs (_n: v: v > 1) (
|
||||
lib.foldAttrs (acc: v: acc + v) 0 (map (v: { ${v.target} = 1; }) cfg)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -266,12 +266,15 @@ in
|
||||
default = { };
|
||||
type =
|
||||
with types;
|
||||
lazyAttrsOf (oneOf [
|
||||
str
|
||||
path
|
||||
int
|
||||
float
|
||||
]);
|
||||
lazyAttrsOf (
|
||||
nullOr (oneOf [
|
||||
str
|
||||
path
|
||||
int
|
||||
float
|
||||
bool
|
||||
])
|
||||
);
|
||||
example = {
|
||||
EDITOR = "emacs";
|
||||
GS_OPTIONS = "-sPAPERSIZE=a4";
|
||||
@@ -307,6 +310,9 @@ in
|
||||
BAR = "''${config.home.sessionVariables.FOO} World!";
|
||||
};
|
||||
```
|
||||
|
||||
Setting a value to `null` will skip setting the variable at all, which
|
||||
may be useful when overriding.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -651,7 +657,7 @@ in
|
||||
destination = "/etc/profile.d/hm-session-vars.sh";
|
||||
text = ''
|
||||
# Only source this once.
|
||||
if [ -n "$__HM_SESS_VARS_SOURCED" ]; then return; fi
|
||||
if [ -n "''${__HM_SESS_VARS_SOURCED-}" ]; then return; fi
|
||||
export __HM_SESS_VARS_SOURCED=1
|
||||
|
||||
${config.lib.shell.exportAll cfg.sessionVariables}
|
||||
|
||||
@@ -10,6 +10,16 @@ let
|
||||
fcitx5Package = cfg.fcitx5-with-addons.override { inherit (cfg) addons; };
|
||||
iniFormat = pkgs.formats.ini { };
|
||||
iniGlobalFormat = pkgs.formats.iniWithGlobalSection { };
|
||||
normalizeFcitx5Value =
|
||||
value:
|
||||
if lib.isAttrs value then
|
||||
lib.mapAttrs (_: normalizeFcitx5Value) value
|
||||
else if builtins.isList value then
|
||||
map normalizeFcitx5Value value
|
||||
else if builtins.isBool value then
|
||||
if value then "True" else "False"
|
||||
else
|
||||
value;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
@@ -43,12 +53,10 @@ in
|
||||
quickPhrase = lib.mkOption {
|
||||
type = with lib.types; attrsOf str;
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
smile = "(・∀・)";
|
||||
angry = "( ̄ー ̄)";
|
||||
}
|
||||
'';
|
||||
example = {
|
||||
smile = "(・∀・)";
|
||||
angry = "( ̄ー ̄)";
|
||||
};
|
||||
description = "Quick phrases.";
|
||||
};
|
||||
|
||||
@@ -73,18 +81,16 @@ in
|
||||
description = ''
|
||||
The global options in `config` file in ini format.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
Behavior = {
|
||||
ActiveByDefault = false;
|
||||
};
|
||||
Hotkey = {
|
||||
EnumerateWithTriggerKeys = true;
|
||||
EnumerateSkipFirst = false;
|
||||
ModifierOnlyKeyTimeout = 250;
|
||||
};
|
||||
}
|
||||
'';
|
||||
example = {
|
||||
Behavior = {
|
||||
ActiveByDefault = false;
|
||||
};
|
||||
Hotkey = {
|
||||
EnumerateWithTriggerKeys = true;
|
||||
EnumerateSkipFirst = false;
|
||||
ModifierOnlyKeyTimeout = 250;
|
||||
};
|
||||
};
|
||||
};
|
||||
inputMethod = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
@@ -94,18 +100,16 @@ in
|
||||
description = ''
|
||||
The input method configure in `profile` file in ini format.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
GroupOrder."0" = "Default";
|
||||
"Groups/0" = {
|
||||
Name = "Default";
|
||||
"Default Layout" = "us";
|
||||
DefaultIM = "pinyin";
|
||||
};
|
||||
"Groups/0/Items/0".Name = "keyboard-us";
|
||||
"Groups/0/Items/1".Name = "pinyin";
|
||||
}
|
||||
'';
|
||||
example = {
|
||||
GroupOrder."0" = "Default";
|
||||
"Groups/0" = {
|
||||
Name = "Default";
|
||||
"Default Layout" = "us";
|
||||
DefaultIM = "pinyin";
|
||||
};
|
||||
"Groups/0/Items/0".Name = "keyboard-us";
|
||||
"Groups/0/Items/1".Name = "pinyin";
|
||||
};
|
||||
};
|
||||
addons = lib.mkOption {
|
||||
type = with lib.types; (attrsOf iniGlobalFormat.type);
|
||||
@@ -114,12 +118,10 @@ in
|
||||
The addon configures in `conf` folder in ini format with global sections.
|
||||
Each item is written to the corresponding file.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
classicui.globalSection.Theme = "example";
|
||||
pinyin.globalSection.EmojiEnabled = "True";
|
||||
}
|
||||
'';
|
||||
example = {
|
||||
classicui.globalSection.Theme = "example";
|
||||
pinyin.globalSection.EmojiEnabled = "True";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -231,11 +233,12 @@ in
|
||||
lib.optionalAttrs (v != { }) {
|
||||
${p} = f "fcitx5-${builtins.replaceStrings [ "/" ] [ "-" ] p}" v;
|
||||
};
|
||||
|
||||
entries = lib.attrsets.mergeAttrsList [
|
||||
(optionalFile "config" iniFormat.generate cfg.settings.globalOptions)
|
||||
(optionalFile "profile" iniFormat.generate cfg.settings.inputMethod)
|
||||
(optionalFile "config" iniFormat.generate (normalizeFcitx5Value cfg.settings.globalOptions))
|
||||
(optionalFile "profile" iniFormat.generate (normalizeFcitx5Value cfg.settings.inputMethod))
|
||||
(lib.concatMapAttrs (
|
||||
name: value: optionalFile "conf/${name}.conf" iniGlobalFormat.generate value
|
||||
name: value: optionalFile "conf/${name}.conf" iniGlobalFormat.generate (normalizeFcitx5Value value)
|
||||
) cfg.settings.addons)
|
||||
];
|
||||
in
|
||||
@@ -258,7 +261,7 @@ in
|
||||
else if builtins.isString attrs.theme then
|
||||
pkgs.writeText "fcitx5-theme.conf" attrs.theme
|
||||
else
|
||||
iniFormat.generate "fcitx5-${name}-theme" attrs.theme
|
||||
iniFormat.generate "fcitx5-${name}-theme" (normalizeFcitx5Value attrs.theme)
|
||||
))
|
||||
]
|
||||
) cfg.themes;
|
||||
|
||||
+17
-19
@@ -14,24 +14,25 @@ let
|
||||
dstDir = "${config.home.homeDirectory}/Library/LaunchAgents";
|
||||
|
||||
launchdConfig =
|
||||
{ config, name, ... }:
|
||||
{ name, ... }:
|
||||
{
|
||||
options = {
|
||||
enable = lib.mkEnableOption name;
|
||||
config = lib.mkOption {
|
||||
type = lib.types.submodule (import ./launchd.nix);
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
ProgramArguments = [ "/usr/bin/say" "Good afternoon" ];
|
||||
StartCalendarInterval = [
|
||||
{
|
||||
Hour = 12;
|
||||
Minute = 0;
|
||||
}
|
||||
];
|
||||
}
|
||||
'';
|
||||
example = {
|
||||
ProgramArguments = [
|
||||
"/usr/bin/say"
|
||||
"Good afternoon"
|
||||
];
|
||||
StartCalendarInterval = [
|
||||
{
|
||||
Hour = 12;
|
||||
Minute = 0;
|
||||
}
|
||||
];
|
||||
};
|
||||
description = ''
|
||||
Define a launchd job. See {manpage}`launchd.plist(5)` for details.
|
||||
'';
|
||||
@@ -69,9 +70,9 @@ let
|
||||
toAgent =
|
||||
config: pkgs.writeText "${config.Label}.plist" (toPlist { escape = true; } (mutateConfig config));
|
||||
|
||||
agentPlists = lib.mapAttrs' (n: v: lib.nameValuePair "${v.config.Label}.plist" (toAgent v.config)) (
|
||||
lib.filterAttrs (n: v: v.enable) cfg.agents
|
||||
);
|
||||
agentPlists = lib.mapAttrs' (
|
||||
_n: v: lib.nameValuePair "${v.config.Label}.plist" (toAgent v.config)
|
||||
) (lib.filterAttrs (_n: v: v.enable) cfg.agents);
|
||||
|
||||
agentsDrv = pkgs.runCommand "home-manager-agents" { } ''
|
||||
mkdir -p "$out"
|
||||
@@ -145,7 +146,7 @@ in
|
||||
|
||||
verboseEcho "Stopping agent '$domain/$agentName'..."
|
||||
local bootout_output
|
||||
bootout_output=$(run /bin/launchctl bootout "$domain/$agentName" 2>&1) || {
|
||||
bootout_output=$(run /bin/launchctl bootout --wait "$domain/$agentName" 2>&1) || {
|
||||
# Only show warning if it's not the common "No such process" error
|
||||
if [[ "$bootout_output" != *"No such process"* ]]; then
|
||||
warnEcho "Failed to stop agent '$domain/$agentName': $bootout_output"
|
||||
@@ -153,9 +154,6 @@ in
|
||||
verboseEcho "Agent '$domain/$agentName' was not running"
|
||||
fi
|
||||
}
|
||||
|
||||
# Give the system a moment to fully unload the agent
|
||||
sleep 1
|
||||
}
|
||||
|
||||
installAndBootstrapAgent() {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
{ lib }:
|
||||
{
|
||||
# Converts a boolean to a yes/no string. This is used in lots of
|
||||
# configuration formats.
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ in
|
||||
topoSort =
|
||||
dag:
|
||||
let
|
||||
dagBefore = dag: name: builtins.attrNames (filterAttrs (n: v: builtins.elem name v.before) dag);
|
||||
dagBefore = dag: name: builtins.attrNames (filterAttrs (_n: v: builtins.elem name v.before) dag);
|
||||
normalizedDag = mapAttrs (n: v: {
|
||||
name = n;
|
||||
inherit (v) data;
|
||||
|
||||
@@ -5,12 +5,14 @@ rec {
|
||||
|
||||
assertions = import ./assertions.nix { inherit lib; };
|
||||
|
||||
booleans = import ./booleans.nix { inherit lib; };
|
||||
booleans = import ./booleans.nix;
|
||||
darwin = import ./darwin.nix { inherit lib; };
|
||||
deprecations = import ./deprecations.nix { inherit lib; };
|
||||
generators = import ./generators.nix { inherit lib; };
|
||||
git = import ./git.nix { inherit lib; };
|
||||
gvariant = import ./gvariant.nix { inherit lib; };
|
||||
maintainers = import ./maintainers.nix;
|
||||
mcp = import ./mcp.nix { inherit lib; };
|
||||
strings = import ./strings.nix { inherit lib; };
|
||||
types = import ./types.nix { inherit gvariant lib; };
|
||||
|
||||
|
||||
@@ -193,6 +193,7 @@
|
||||
optionUsesDefaultPriority = canDeferWarning && optionInfo.highestPrio >= warningPriority;
|
||||
|
||||
usingLegacyBranch = lib.versionOlder stateVersion since;
|
||||
valuesEqual = legacy.value == current.value;
|
||||
in
|
||||
assert lib.assertMsg (!deferWarningToConfig || canDeferWarning) ''
|
||||
`lib.hm.deprecations.mkStateVersionOptionDefault` requires both `config` and `options`
|
||||
@@ -200,7 +201,10 @@
|
||||
'';
|
||||
{
|
||||
default =
|
||||
if usingLegacyBranch && !deferWarningToConfig then lib.warn warning legacy.value else current.value;
|
||||
if usingLegacyBranch && !deferWarningToConfig && !valuesEqual then
|
||||
lib.warn warning legacy.value
|
||||
else
|
||||
current.value;
|
||||
defaultText = lib.literalExpression ''
|
||||
if lib.versionAtLeast config.home.stateVersion "${since}" then ${currentText} else ${legacyText}
|
||||
'';
|
||||
@@ -209,6 +213,7 @@
|
||||
shouldWarn =
|
||||
deferWarningToConfig
|
||||
&& usingLegacyBranch
|
||||
&& !valuesEqual
|
||||
&& (
|
||||
if lib.isFunction shouldWarn then
|
||||
shouldWarn { inherit optionInfo optionUsesDefaultPriority; }
|
||||
|
||||
@@ -42,7 +42,7 @@ in
|
||||
'';
|
||||
};
|
||||
target = mkOption {
|
||||
type = types.str;
|
||||
type = types.nonEmptyStr;
|
||||
apply =
|
||||
p:
|
||||
let
|
||||
@@ -106,11 +106,13 @@ in
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
When `recursive` is enabled, adds `-ignorelinks` flag to lndir
|
||||
When `recursive` is enabled, adds the `-ignorelinks` flag to lndir.
|
||||
|
||||
It causes lndir to not treat symbolic links in the source directory specially.
|
||||
The link created in the target directory will point back to the corresponding
|
||||
(symbolic link) file in the source directory. If the link is to a directory
|
||||
symbolic link in the source directory. If that link points to a directory, the
|
||||
resulting target will be a link to the source tree's symlink rather than a
|
||||
recursively linked directory tree.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
importantFields = filterAttrs isImportantField attrs;
|
||||
withoutImportantFields = fields: removeAttrs fields (attrNames importantFields);
|
||||
|
||||
allSections = filterAttrs (n: v: isAttrs v || isList v) attrs;
|
||||
allSections = filterAttrs (_n: v: isAttrs v || isList v) attrs;
|
||||
sections = withoutImportantFields allSections;
|
||||
|
||||
mkSection =
|
||||
@@ -57,7 +57,7 @@
|
||||
inherit indent;
|
||||
};
|
||||
|
||||
allFields = filterAttrs (n: v: !(isAttrs v || isList v)) attrs;
|
||||
allFields = filterAttrs (_n: v: !(isAttrs v || isList v)) attrs;
|
||||
fields = withoutImportantFields allFields;
|
||||
in
|
||||
mkFields importantFields
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{ lib }:
|
||||
|
||||
{
|
||||
diffPagerConfig = pagerCommand: {
|
||||
pager = lib.genAttrs [
|
||||
"diff"
|
||||
"log"
|
||||
"show"
|
||||
] (_: pagerCommand);
|
||||
};
|
||||
}
|
||||
@@ -151,6 +151,12 @@
|
||||
github = "dsoverlord";
|
||||
githubId = 78819443;
|
||||
};
|
||||
dsqr = {
|
||||
name = "Dave Dennis";
|
||||
email = "me@dsqr.dev";
|
||||
github = "0xdsqr";
|
||||
githubId = 99584622;
|
||||
};
|
||||
dwagenk = {
|
||||
email = "dwagenk@mailbox.org";
|
||||
github = "dwagenk";
|
||||
@@ -205,6 +211,12 @@
|
||||
github = "fpob";
|
||||
githubId = 6289078;
|
||||
};
|
||||
garklein = {
|
||||
name = "Garklein";
|
||||
email = "garklein97@gmail.com";
|
||||
github = "garklein";
|
||||
githubId = 63201615;
|
||||
};
|
||||
gauthsvenkat = {
|
||||
email = "gauthsvenkat+home-manager@gmail.com";
|
||||
github = "gauthsvenkat";
|
||||
@@ -228,6 +240,12 @@
|
||||
}
|
||||
];
|
||||
};
|
||||
isaacST08 = {
|
||||
name = "Isaac Shiells Thomas";
|
||||
email = "isaacst.nix@proton.me";
|
||||
github = "isaacST08";
|
||||
githubId = 106057977;
|
||||
};
|
||||
jack5079 = {
|
||||
name = "Jack W.";
|
||||
email = "nix@jack.cab";
|
||||
@@ -422,12 +440,6 @@
|
||||
github = "NitroSniper";
|
||||
githubId = 44097331;
|
||||
};
|
||||
nurelin = {
|
||||
name = "nurelin";
|
||||
email = "nurelin@users.noreply.github.com";
|
||||
github = "nurelin";
|
||||
githubId = 5276274;
|
||||
};
|
||||
olmokramer = {
|
||||
name = "Olmo Kramer";
|
||||
email = "olmokramer@users.noreply.github.com";
|
||||
@@ -517,6 +529,23 @@
|
||||
github = "silmarp";
|
||||
githubId = 67292496;
|
||||
};
|
||||
soracat = {
|
||||
name = "soracat";
|
||||
email = "125882337+s0racat@users.noreply.github.com";
|
||||
github = "s0racat";
|
||||
githubId = 125882337;
|
||||
};
|
||||
SunOfLife1 = {
|
||||
name = "SunOfLife1";
|
||||
github = "SunOfLife1";
|
||||
githubId = 30405063;
|
||||
};
|
||||
yarn = {
|
||||
name = "yarncat";
|
||||
email = "30006414+yaaaarn@users.noreply.github.com";
|
||||
github = "yaaaarn";
|
||||
githubId = 30006414;
|
||||
};
|
||||
zorrobert = {
|
||||
name = "zorrobert";
|
||||
email = "118135271+zorrobert@users.noreply.github.com";
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
{ lib }:
|
||||
|
||||
let
|
||||
/*
|
||||
Checks whether a value is a file reference submodule.
|
||||
|
||||
A file reference has the shape `{ file = "/path/to/file"; }` and is used
|
||||
to indicate that an environment variable's value should be read from a file
|
||||
at runtime (e.g. via sops-nix or systemd credentials).
|
||||
|
||||
Type: isFileRef :: Value -> Bool
|
||||
*/
|
||||
isFileRef = value: lib.isAttrs value && value ? file;
|
||||
|
||||
/*
|
||||
Filters an `env` attrset to contain only literal (non-file-ref) values.
|
||||
|
||||
This is useful when a transform needs to produce two separate outputs:
|
||||
one with the literal values and one with the file paths (for wrapping).
|
||||
|
||||
Type: literalEnv :: AttrSet -> AttrSet
|
||||
|
||||
Example:
|
||||
literalEnv { API_KEY = "secret"; TOKEN.file = "/run/secrets/token"; }
|
||||
=> { API_KEY = "secret"; }
|
||||
*/
|
||||
literalEnv = env: lib.filterAttrs (_: value: !isFileRef value) env;
|
||||
|
||||
/*
|
||||
Extracts only the file paths from file-ref entries in an `env` attrset.
|
||||
|
||||
Returns a flat `attrsOf str` mapping variable names to their file paths.
|
||||
Non-file-ref entries are excluded.
|
||||
|
||||
Type: fileRefEnv :: AttrSet -> AttrSet
|
||||
|
||||
Example:
|
||||
fileRefEnv { API_KEY = "secret"; TOKEN.file = "/run/secrets/token"; }
|
||||
=> { TOKEN = "/run/secrets/token"; }
|
||||
*/
|
||||
fileRefEnv = env: lib.mapAttrs (_: value: value.file) (lib.filterAttrs (_: isFileRef) env);
|
||||
|
||||
/*
|
||||
Render an `env` attrset (literals + file refs) as a flat `attrsOf str`
|
||||
by mapping file refs through `mkFileRef path` and leaving literals untouched.
|
||||
|
||||
Type: renderEnv :: (String -> String) -> AttrSet -> AttrSet
|
||||
|
||||
Example:
|
||||
renderEnv (path: "{file:${path}}") {
|
||||
API_KEY = "literal";
|
||||
SESSION_TOKEN.file = "/run/secrets/token";
|
||||
}
|
||||
=> { API_KEY = "literal"; SESSION_TOKEN = "{file:/run/secrets/token}"; }
|
||||
*/
|
||||
renderEnv =
|
||||
mkFileRef: env:
|
||||
lib.mapAttrs (_: value: if isFileRef value then mkFileRef value.file else value) env;
|
||||
|
||||
/*
|
||||
Wrap a local MCP server command in a shell script that reads file-backed
|
||||
env values into the environment before executing the original process.
|
||||
Compatible with file-based secret managers such as sops-nix or systemd
|
||||
credentials. Reads file refs from `server.env`.
|
||||
|
||||
Type: mkEnvFilesWrapper :: { pkgs, name, server } -> Derivation
|
||||
*/
|
||||
mkEnvFilesWrapper =
|
||||
{
|
||||
pkgs,
|
||||
name,
|
||||
server,
|
||||
}:
|
||||
let
|
||||
files = fileRefEnv (server.env or { });
|
||||
in
|
||||
pkgs.writeShellScript "mcp-${name}-wrapper" ''
|
||||
${lib.concatStrings (
|
||||
lib.mapAttrsToList (var: path: ''
|
||||
if ${var}=$(cat ${lib.escapeShellArg path}); then
|
||||
export ${var}
|
||||
else
|
||||
printf '[${name} wrapper ] Failed to read env var %s from %s\n' \
|
||||
${lib.escapeShellArg var} \
|
||||
${lib.escapeShellArg path} >&2
|
||||
fi
|
||||
'') files
|
||||
)}
|
||||
exec ${lib.escapeShellArgs ([ server.command ] ++ (server.args or [ ]))}
|
||||
'';
|
||||
|
||||
/*
|
||||
extraTransform factory: when the server has file refs in `env` and a
|
||||
local `command`, replace `command` with a wrapper script that reads
|
||||
those files at startup, reset `args` to `[ ]`, and drop the file refs
|
||||
from `env` (leaving only literal entries).
|
||||
|
||||
When there is nothing to wrap, returns the server unchanged.
|
||||
|
||||
Type: wrapEnvFilesCommand :: { pkgs, name } -> AttrSet -> AttrSet
|
||||
*/
|
||||
wrapEnvFilesCommand =
|
||||
{ pkgs, name }:
|
||||
server:
|
||||
let
|
||||
files = fileRefEnv (server.env or { });
|
||||
needsWrapping = files != { };
|
||||
in
|
||||
server
|
||||
// lib.optionalAttrs needsWrapping {
|
||||
command = mkEnvFilesWrapper { inherit pkgs name server; };
|
||||
args = [ ];
|
||||
env = literalEnv (server.env or { });
|
||||
};
|
||||
|
||||
/*
|
||||
Resolve the effective `enabled` state from a server config that may
|
||||
have either an `enabled` or a `disabled` field (but not both).
|
||||
|
||||
Returns `null` if neither field is present, allowing callers to omit
|
||||
the attribute from the output via the empty-value filter.
|
||||
|
||||
Type: resolveEnabled :: AttrSet -> Null | Bool
|
||||
*/
|
||||
resolveEnabled =
|
||||
server:
|
||||
let
|
||||
hasEnabled = server ? enabled && server.enabled != null;
|
||||
hasDisabled = server ? disabled && server.disabled != null;
|
||||
in
|
||||
if hasEnabled then
|
||||
server.enabled
|
||||
else if hasDisabled then
|
||||
!server.disabled
|
||||
else
|
||||
null;
|
||||
|
||||
/*
|
||||
extraTransform that adds `type = "stdio" | "http"` based on whether the
|
||||
server has a `url`.
|
||||
|
||||
Type: addType :: AttrSet -> AttrSet
|
||||
*/
|
||||
addType =
|
||||
server:
|
||||
if server ? type then
|
||||
server
|
||||
else
|
||||
server
|
||||
// {
|
||||
type = if server ? url && server.url != null then "http" else "stdio";
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit
|
||||
renderEnv
|
||||
mkEnvFilesWrapper
|
||||
wrapEnvFilesCommand
|
||||
addType
|
||||
;
|
||||
|
||||
/*
|
||||
Normalise an MCP server attribute set for consumption by a client
|
||||
program. Performs only universal steps:
|
||||
|
||||
1. Resolve `enabled` from optional `enabled`/`disabled` fields.
|
||||
2. Apply each function in `extraTransforms` to the server attrs, in
|
||||
order. Transforms run before `mkFileRef`, `exclude` and the
|
||||
empty-value filter, so a transform can still read attrs that will
|
||||
be excluded and operate on the raw env shape (with file refs).
|
||||
3. Render any remaining file refs in `env` through `mkFileRef path`.
|
||||
Callers that consume file refs themselves (e.g. via
|
||||
`wrapEnvFilesCommand`) will have stripped them in an
|
||||
extraTransform, so `mkFileRef` is a no-op for them.
|
||||
4. Remove `disabled` and any keys listed in `exclude`.
|
||||
5. Filter `null`, `[]`, and `{}` values.
|
||||
|
||||
Type: transformMcpServer ::
|
||||
{ server, exclude?, extraTransforms?, mkFileRef? }
|
||||
-> AttrSet
|
||||
*/
|
||||
transformMcpServer =
|
||||
{
|
||||
server,
|
||||
exclude ? [ ],
|
||||
extraTransforms ? [ ],
|
||||
mkFileRef ? (path: "{file:${path}}"),
|
||||
}:
|
||||
let
|
||||
enabled = resolveEnabled server;
|
||||
normalised = server // {
|
||||
inherit enabled;
|
||||
url = if (server.url or null) != null then server.url else server.serverUrl or null;
|
||||
};
|
||||
transformed = lib.foldl' (acc: transform: transform acc) normalised extraTransforms;
|
||||
withRenderedEnv =
|
||||
transformed
|
||||
// lib.optionalAttrs (transformed ? env) {
|
||||
env = renderEnv mkFileRef transformed.env;
|
||||
};
|
||||
cleaned = removeAttrs withRenderedEnv (
|
||||
[
|
||||
"disabled"
|
||||
"serverUrl"
|
||||
]
|
||||
++ exclude
|
||||
);
|
||||
in
|
||||
lib.filterAttrs (_: value: value != null && value != [ ] && value != { }) cleaned;
|
||||
}
|
||||
@@ -23,7 +23,12 @@ let
|
||||
};
|
||||
|
||||
# Produces a Bourne shell like variable export statement.
|
||||
export = n: v: ''export ${n}="${toString v}"'';
|
||||
export =
|
||||
n: v:
|
||||
let
|
||||
value = if builtins.isBool v then lib.boolToString v else toString v;
|
||||
in
|
||||
''export ${n}="${value}"'';
|
||||
|
||||
# Wrap a list of strings to a given line width.
|
||||
# Packs as many items as possible per line without exceeding maxWidth.
|
||||
@@ -69,7 +74,9 @@ in
|
||||
# Given an attribute set containing shell variable names and their
|
||||
# assignment, this function produces a string containing an export
|
||||
# statement for each set entry.
|
||||
exportAll = vars: lib.concatStringsSep "\n" (lib.mapAttrsToList export vars);
|
||||
exportAll =
|
||||
vars:
|
||||
lib.concatStringsSep "\n" (lib.mapAttrsToList export (lib.filterAttrs (_k: v: v != null) vars));
|
||||
|
||||
# Formats a list of items for shell array content with intelligent width optimization.
|
||||
# IMPORTANT: This formats the CONTENTS of an array (what goes inside parentheses),
|
||||
|
||||
@@ -29,7 +29,7 @@ rec {
|
||||
++ upperChars
|
||||
++ stringToCharacters "0123456789";
|
||||
|
||||
empties = l: genList (x: "") (length l);
|
||||
empties = l: genList (_x: "") (length l);
|
||||
|
||||
unsafeInName = stringToCharacters (replaceStrings safeChars (empties safeChars) path);
|
||||
|
||||
@@ -87,4 +87,11 @@ rec {
|
||||
# Returns true for strings like `SCREAMING_SNAKE_CASE`, `SOME_CONSTANT`.
|
||||
# Must be all uppercase letters/numbers, with words separated by single underscores.
|
||||
isScreamingSnakeCase = str: builtins.match "^[A-Z0-9]+(_[A-Z0-9]+)*$" str != null;
|
||||
|
||||
# Check if the content is path-like (a path, a Nix store path string, or a derivation).
|
||||
isPathLike =
|
||||
content:
|
||||
lib.isPath content
|
||||
|| (builtins.isString content && lib.hasPrefix "${builtins.storeDir}/" content)
|
||||
|| lib.isDerivation content;
|
||||
}
|
||||
|
||||
+3
-1
@@ -38,5 +38,7 @@ rec {
|
||||
let
|
||||
separator = if indent == "" then "\n" else "\n" + indent;
|
||||
in
|
||||
lib.concatStringsSep separator (lib.mapAttrsToList export vars);
|
||||
lib.concatStringsSep separator (
|
||||
lib.mapAttrsToList export (lib.filterAttrs (_k: v: v != null) vars)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
nixosConfig,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
@@ -70,13 +71,25 @@ in
|
||||
fonts.fontconfig = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to enable fontconfig configuration. This will, for
|
||||
example, allow fontconfig to discover fonts and
|
||||
configurations installed through
|
||||
{var}`home.packages` and
|
||||
{command}`nix-env`.
|
||||
Whether to enable fontconfig configuration. This will, for example,
|
||||
allow fontconfig to discover fonts and configurations installed through
|
||||
{var}`home.packages` and {command}`nix-env`.
|
||||
|
||||
If Home Manager is installed as a NixOS submodule and
|
||||
{var}`home-manager.useUserPackages` is enabled, this option defaults to the
|
||||
value of NixOS' {var}`fonts.fontconfig.enable`.
|
||||
'';
|
||||
# On NixOS, the per-user directory inside /etc/profiles is not known by
|
||||
# fontconfig by default.
|
||||
default =
|
||||
nixosConfig != null
|
||||
&& nixosConfig.home-manager.useUserPackages
|
||||
&& nixosConfig.fonts.fontconfig.enable;
|
||||
defaultText = lib.literalExpression ''
|
||||
nixosConfig != null
|
||||
&& nixosConfig.home-manager.useUserPackages
|
||||
&& nixosConfig.fonts.fontconfig.enable;
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -337,7 +350,7 @@ in
|
||||
};
|
||||
|
||||
xdg.configFile = lib.mapAttrs' (
|
||||
name: config:
|
||||
_name: config:
|
||||
lib.nameValuePair "fontconfig/conf.d/${toString config.priority}-hm-${config.label}.conf" {
|
||||
inherit (config) enable text;
|
||||
source = lib.mkIf (config.source != null) config.source;
|
||||
|
||||
@@ -53,7 +53,7 @@ let
|
||||
);
|
||||
|
||||
isNixFile = n: v: v == "regular" && lib.hasSuffix ".nix" n;
|
||||
isDirectory = n: v: v == "directory";
|
||||
isDirectory = _n: v: v == "directory";
|
||||
|
||||
# Recursively collect all .nix files from a directory
|
||||
collectNixFiles =
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
time = "2025-11-04T15:44:03+00:00";
|
||||
condition = true;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-01-13T01:11:50+00:00";
|
||||
condition = config.services.home-manager.autoUpgrade.enable;
|
||||
message = ''
|
||||
|
||||
Multiple new options are available:
|
||||
|
||||
- services.home-manager.autoUpgrade.flags
|
||||
- services.home-manager.autoUpgrade.preSwitchCommands
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
time = "2026-03-02T15:33:49+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
New modules are available: 'programs.cursor', 'programs.vscodium',
|
||||
'programs.windsurf', 'programs.kiro', and 'programs.antigravity'.
|
||||
|
||||
These provide dedicated configuration for VSCode-based editors,
|
||||
allowing multiple editors to be configured simultaneously.
|
||||
|
||||
Users who previously set 'programs.vscode.package' to a non-vscode
|
||||
package (e.g. pkgs.vscodium) should migrate to the corresponding
|
||||
dedicated module instead.
|
||||
'';
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-03-13T03:09:51+00:00";
|
||||
condition = config.programs.gemini-cli.enable;
|
||||
condition = config.programs.antigravity-cli.enable;
|
||||
message = ''
|
||||
The `programs.gemini-cli.policies` option has been added to support configuring
|
||||
the Gemini CLI policy engine.
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
time = "2026-03-15T20:42:27+00:00";
|
||||
condition = true;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
time = "2026-03-20T02:34:29+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: 'services.wayle'.
|
||||
|
||||
Wayle is a fast, configurable desktop environment shell for Wayland
|
||||
compositors. Built in Rust with Relm4 and focused on performance,
|
||||
modularity, and a great user experience. A successor to HyprPanel without
|
||||
the pain or dependency on Hyprland.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-03-23T17:00:00+00:00";
|
||||
condition = config.programs.feedr.enable;
|
||||
message = ''
|
||||
|
||||
A new module is available: 'programs.feedr'
|
||||
|
||||
Feedr is a modern terminal-based RSS/Atom feed reader with advanced
|
||||
filtering, categorization, and search capabilities. It supports both RSS and
|
||||
Atom feeds with compression handling and provides an intuitive TUI
|
||||
interface.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
time = "2026-03-25T12:00:11+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isLinux;
|
||||
message = ''
|
||||
Added a new module `equibop`.
|
||||
|
||||
Equibop is a fork of Vesktop with more plugins.
|
||||
'';
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
time = "2026-03-25T17:18:02+00:00";
|
||||
condition = true;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-03-31T17:22:36+00:00";
|
||||
condition = config.programs.gemini-cli.enable;
|
||||
condition = config.programs.antigravity-cli.enable;
|
||||
message = ''
|
||||
The `programs.gemini-cli.enableMcpIntegration` and `programs.gemini-cli.skills`
|
||||
options have been added to support configuring the Gemini CLI MCP servers and
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-08T12:00:00+00:00";
|
||||
condition =
|
||||
config.programs.claude-code.enable
|
||||
|| config.programs.codex.enable
|
||||
|| config.programs.opencode.enable
|
||||
|| config.programs.antigravity-cli.enable;
|
||||
message = ''
|
||||
The Claude Code, Codex, and OpenCode modules now expose a canonical
|
||||
`context` option for configuring their global assistant instructions.
|
||||
|
||||
The old option names still work for now and emit migration warnings:
|
||||
- `programs.claude-code.memory.text` and `programs.claude-code.memory.source`
|
||||
were changed to `programs.claude-code.context`
|
||||
- `programs.codex.custom-instructions` was renamed to
|
||||
`programs.codex.context`
|
||||
- `programs.opencode.rules` was renamed to `programs.opencode.context`
|
||||
|
||||
Claude Code skills were also unified with the other assistant modules:
|
||||
`programs.claude-code.skills` now accepts either an attribute set or a
|
||||
directory path, and `programs.claude-code.skillsDir` was changed to
|
||||
`programs.claude-code.skills`.
|
||||
|
||||
The `programs.gemini-cli.skills` option now also accepts a directory
|
||||
path, matching the bulk skill-directory workflow supported by the
|
||||
other assistant modules.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
time = "2026-04-12T11:50:28+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
The `programs.jjui` module has been updated to the latest jjui configuration options.
|
||||
|
||||
To adhere to the jjui defaults, `configDir` on Darwin now defaults to `~/.config/jjui/` from the previous `~/Library/Application Support/jjui/`.
|
||||
See https://idursun.github.io/jjui/customization/config-toml/.
|
||||
|
||||
New module options are available:
|
||||
- `configLua` to configure the top-level Lua configuration, and
|
||||
- `plugins` to define Lua plugins.
|
||||
Remember to import and set up the defined plugins in `configLua`.
|
||||
For documentation on Lua configuration, see https://idursun.github.io/jjui/customization/config-lua/.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
time = "2026-04-12T15:36:05+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: `services.syshud`.
|
||||
|
||||
A simple system status indicator for Wayland compositors.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-12T21:36:53+00:00";
|
||||
condition = config.services.syncthing.enable;
|
||||
message = ''
|
||||
The `services.syncthing.passwordFile` option has been removed, as
|
||||
configuring it would not add any authentication requirements to the
|
||||
Syncthing GUI, but in most circumstances would suppress the warnings about
|
||||
the GUI not being secured.
|
||||
|
||||
Instead, configure `services.syncthing.guiCredentials.passwordFile` and
|
||||
`services.syncthing.guiCredentials.username`.
|
||||
|
||||
As a benefit, using `services.syncthing.guiCredentials` will only change
|
||||
the Syncthing login configuration if credentials have actually changed,
|
||||
rather than configuring them unconditionally. This prevents the Syncthing
|
||||
API key from changing unnecessarily, so other tools such as Syncthing Tray
|
||||
do not need to reconfigure the API key as often.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-14T12:49:27+00:00";
|
||||
condition = config.programs.yazi.enable;
|
||||
message = ''
|
||||
Added new option for yazi: programs.yazi.vfs
|
||||
|
||||
Yazi provides a vfs.toml config file to manage virtual file systems,
|
||||
which can now be managed with programs.yazi.vfs
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-17T15:00:13+00:00";
|
||||
condition = config.programs.neovim.enable;
|
||||
message = ''
|
||||
The module `programs.neovim` now writes to
|
||||
{file}`$XDG_CONFIG_HOME/nvim/init.lua` by default.
|
||||
|
||||
If you want to manage {file}`$XDG_CONFIG_HOME/nvim/init.lua` yourself, you
|
||||
can set {option}`programs.neovim.sideloadInitLua` to `true` to load the
|
||||
content of {option}`programs.neovim.initLua` through neovim wrapper
|
||||
arguments instead.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
_: {
|
||||
time = "2026-04-17T15:06:14+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
A new module is available: 'programs.github-copilot-cli'.
|
||||
|
||||
GitHub Copilot CLI brings the agentic Copilot coding experience to the
|
||||
terminal. The module manages the `~/.copilot/config.json` settings file
|
||||
(model, theme, trusted folders, hooks, feature flags, etc.) and the
|
||||
`~/.copilot/mcp-config.json` MCP server registry. Setting
|
||||
`enableMcpIntegration = true` reuses servers defined under
|
||||
`programs.mcp.servers`, with `programs.github-copilot-cli.mcpServers`
|
||||
taking precedence.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-17T14:17:31+00:00";
|
||||
condition = config.programs.kitty.enable;
|
||||
message = ''
|
||||
A new option 'programs.kitty.diffConfig' is available for configuring
|
||||
'$XDG_CONFIG_HOME/kitty/diff.conf'
|
||||
|
||||
See https://sw.kovidgoyal.net/kitty/kittens/diff/
|
||||
for more documentation.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-20T13:53:30+00:00";
|
||||
condition = config.programs.rofi.enable;
|
||||
message = ''
|
||||
The `programs.rofi.extraConfig` option now supports nested attribute sets.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-20T20:13:25+00:00";
|
||||
condition = config.programs.git.enable;
|
||||
message = ''
|
||||
The 'programs.git.settings' option now supports ordered configuration
|
||||
fragments in addition to the existing attrset shorthand.
|
||||
|
||||
This allows repeated or order-sensitive Git config sections, such as
|
||||
multiple 'credential' blocks, to be expressed directly in Nix while keeping
|
||||
the simple attrset form for normal Git settings.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
time = "2026-04-20T17:47:07+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isDarwin;
|
||||
message = ''
|
||||
On Darwin, Home Manager now exports `TERMINFO_DIRS` in
|
||||
`hm-session-vars.sh` so that terminfo entries from Home Manager-installed
|
||||
packages (e.g. `kitty`, `alacritty`) are discoverable. The system path
|
||||
`/usr/share/terminfo` is preserved as a fallback.
|
||||
|
||||
`TERM` is also re-exported so the current shell picks up newly available
|
||||
terminfo entries.
|
||||
|
||||
To opt out, override `home.sessionVariables.TERMINFO_DIRS` (which is set
|
||||
with `lib.mkDefault`).
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
time = "2026-04-22T10:34:28+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
Google Chrome browser modules now support `extensions` on Darwin.
|
||||
|
||||
Home Manager now installs Chrome Web Store extension metadata for:
|
||||
|
||||
- `programs.google-chrome`
|
||||
- `programs.google-chrome-beta`
|
||||
- `programs.google-chrome-dev`
|
||||
|
||||
Home Manager now also raises a clear assertion if you try to manage
|
||||
Google Chrome extensions on Linux, since Chrome only supports those from
|
||||
system-managed directories there.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
time = "2026-04-22T17:16:30+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isDarwin;
|
||||
message = ''
|
||||
A new module is available: 'programs.flashspace'. FlashSpace is
|
||||
an open-source, high-performance virtual workspace manager for
|
||||
macOS designed to replace or enhance the native macOS "Spaces"
|
||||
feature.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
time = "2026-04-22T17:28:03+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isDarwin;
|
||||
message = ''
|
||||
A new module is available: 'programs.rectangle'. Rectangle is an
|
||||
open-source window manager for macOS that allows you to move and
|
||||
resize windows with keyboard shortcuts or by snapping them to the
|
||||
edges of your screen.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
time = "2026-04-22T17:29:21+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
A new module is available: 'programs.qalculate'. Qalculate! is a
|
||||
multi-purpose desktop calculator that is simple to use but
|
||||
provides power and versatility normally reserved for complicated
|
||||
math packages.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-23T18:35:00+00:00";
|
||||
condition = config.programs.firefox.enable;
|
||||
message = ''
|
||||
The deprecated `programs.firefox.profiles.<name>.extensions = [ ... ]`
|
||||
shorthand has been removed.
|
||||
|
||||
Use `programs.firefox.profiles.<name>.extensions.packages = [ ... ]`
|
||||
to install add-ons, and keep declarative extension settings under
|
||||
`programs.firefox.profiles.<name>.extensions.settings`.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
time = "2026-04-28T03:00:36+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
A new module is available: 'services.exo'.
|
||||
|
||||
exo connects devices into a local AI cluster and provides a dashboard
|
||||
and API server for interacting with local models.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-04-28T16:05:29+00:00";
|
||||
condition = config.programs.thunderbird.enable;
|
||||
message = ''
|
||||
The `programs.thunderbird.languagePacks` option has been added to install
|
||||
and activate Thunderbird language packs.
|
||||
|
||||
The `programs.thunderbird.policies` option has also been added to configure
|
||||
Thunderbird enterprise policies. These policies can install Thunderbird
|
||||
add-ons through `ExtensionSettings` and configure other supported application
|
||||
behavior.
|
||||
|
||||
Thunderbird now supports accounts configured with
|
||||
`accounts.email.accounts.<name>.ews`, including the
|
||||
`outlook.office365.com-ews` flavor for Office365 Exchange accounts.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
time = "2026-04-29T15:39:41+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
A new `home.services` namespace has been added for nixpkgs
|
||||
modular services. Service modules shipped with packages (i.e.
|
||||
`pkgs.<name>.passthru.services.default`) drop in unchanged and are
|
||||
lifted to user systemd units. See the "Modular Services" chapter
|
||||
in the manual for details.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-05-01T16:15:00+00:00";
|
||||
condition = config.programs.github-copilot-cli.enable;
|
||||
message = ''
|
||||
The `programs.github-copilot-cli.context`, `programs.github-copilot-cli.agents`,
|
||||
and `programs.github-copilot-cli.skills` options have been added.
|
||||
|
||||
`context` manages `copilot-instructions.md` under `COPILOT_HOME`, while
|
||||
`agents` and `skills` let you define custom Copilot CLI agents and skills
|
||||
from inline definitions or managed directories.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-05-01T17:00:00+00:00";
|
||||
condition = config.programs.github-copilot-cli.enable;
|
||||
message = ''
|
||||
The `programs.github-copilot-cli.lspServers` option has been added.
|
||||
|
||||
This option manages the `lsp-config.json` file under `COPILOT_HOME`,
|
||||
allowing GitHub Copilot CLI to start configured language servers for code
|
||||
intelligence features.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
time = "2026-05-01T18:02:25+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
Two new module are available: 'programs.man.man-db' and
|
||||
'programs.man.mandoc'.
|
||||
|
||||
They allow selecting the default man page viewer. man-db was the default
|
||||
man page viewer before those changes, so
|
||||
'programs.man.man-db.enable = true' set by default.
|
||||
|
||||
Since the options conflict between each other, to enable mandoc you need to
|
||||
set 'programs.man.man-db.enable = false' and
|
||||
'program.man.mandoc.enable = true'.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
time = "2026-05-04T20:44:35+00:00";
|
||||
condition = config.targets.genericLinux.gpu.enable;
|
||||
message = ''
|
||||
The GPU driver setup for non-NixOS systems has been switched from
|
||||
a systemd service to a tmpfiles.d configuration.
|
||||
|
||||
If you have previously run 'non-nixos-gpu-setup', you will need
|
||||
to run it again to migrate. The script will automatically clean
|
||||
up the old systemd service and install the new tmpfiles.d config.
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
_: {
|
||||
time = "2026-05-07T15:57:46+00:00";
|
||||
condition = true;
|
||||
message = ''
|
||||
A new option is available: `programs.microsoft-edge`.
|
||||
|
||||
Microsoft Edge is now supported by the Chromium-based browser module,
|
||||
sharing the same `commandLineArgs`, `extensions`, `dictionaries` and
|
||||
`nativeMessagingHosts` interface.
|
||||
|
||||
Note: the `microsoft-edge` package in nixpkgs is only available on
|
||||
`x86_64-linux`. On macOS, install Edge through other means (e.g. the
|
||||
official `.pkg` installer) and set
|
||||
`programs.microsoft-edge.package = null` to manage configuration files
|
||||
only, or supply a custom darwin-compatible package.
|
||||
'';
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user